Vấn đề
Tôi đã triển khai một cụm ECS và đang chạy một nền tảng điều phối công việc trên cụm. Một trong các vùng chứa của nền tảng này sử dụng api docker của python để kéo một vùng chứa từ kho lưu trữ ECR riêng của chúng tôi và thực hiện một công việc trong vùng chứa. Khi công việc bắt đầu chạy, cuối cùng nó gặp sự cố không thể tìm thấy thông tin xác thực vai trò giả định được xác định bên trong vùng chứa trong /root/.aws/config
như credential_source=EcsContainer
. Điều này xảy ra sau khi mã cố gắng thực hiện cuộc gọi đến S3.
Tại sao điều này có thể xảy ra? Nguồn thông tin xác thực được xác định trong vùng chứa. Tại sao nó không được tìm thấy?
Chi tiết
Lỗi
......
Ngoại lệ trên được gây ra bởi ngoại lệ sau:
botocore.Exceptions.CredentialRetrievalError: Lỗi khi truy xuất thông tin xác thực từ EcsContainer: Không tìm thấy thông tin đăng nhập nào trong credential_source được tham chiếu trong cấu hình mặc định
Tệp "/usr/local/lib/python3.6/site-packages/dagster/core/execution/plan/utils.py", dòng 42, trong solid_execution_error_boundary
sản lượng
Tệp "/usr/local/lib/python3.6/site-packages/dagster/utils/__init__.py", dòng 383, trong iterate_with_context
next_output = next(iterator)
Tệp "/usr/local/lib/python3.6/site-packages/dagster/core/execution/plan/compute_generator.py", dòng 65, trong _coerce_solid_compute_fn_to_iterator
kết quả = fn(context, **kwargs) if context_arg_provided other fn(**kwargs)
Tệp "/opt/dagster/app/solids/files.py", dòng 33, trong stream_url_to_s3
với smart.open(f's3://{s3_bucket}/{s3_key}', 'wb', transport_params=tp) làm s3location:
Tệp "/usr/local/lib/python3.6/site-packages/smart_open/smart_open_lib.py", dòng 235, đang mở
nhị phân = _open_binary_stream(uri, binary_mode, transport_params)
Tệp "/usr/local/lib/python3.6/site-packages/smart_open/smart_open_lib.py", dòng 398, trong _open_binary_stream
fobj = submodule.open_uri(uri, mode, transport_params)
Tệp "/usr/local/lib/python3.6/site-packages/smart_open/s3.py", dòng 224, trong open_uri
trả về open(parsed_uri['bucket_id'], parsed_uri['key_id'], mode, **kwargs)
Tệp "/usr/local/lib/python3.6/site-packages/smart_open/s3.py", dòng 308, đang mở
writebuffer=bộ đệm ghi,
Tệp "/usr/local/lib/python3.6/site-packages/smart_open/s3.py", dòng 757, trong __init__
_initialize_boto3(self, client, client_kwargs, bucket, key)
Tệp "/usr/local/lib/python3.6/site-packages/smart_open/s3.py", dòng 528, trong _initialize_boto3
client = boto3.client('s3', **init_kwargs)
Tệp "/usr/local/lib/python3.6/site-packages/boto3/__init__.py", dòng 91, trong máy khách
trả về _get_default_session().client(*args, **kwargs)
Tệp "/usr/local/lib/python3.6/site-packages/boto3/session.py", dòng 263, trong máy khách
aws_session_token=aws_session_token, config=config)
Tệp "/usr/local/lib/python3.6/site-packages/botocore/session.py", dòng 826, trong create_client
thông tin xác thực = self.get_credentials()
Tệp "/usr/local/lib/python3.6/site-packages/botocore/session.py", dòng 431, trong get_credentials
'credential_provider').load_credentials()
Tệp "/usr/local/lib/python3.6/site-packages/botocore/credentials.py", dòng 1962, trong load_credentials
tín dụng = nhà cung cấp.load()
Tệp "/usr/local/lib/python3.6/site-packages/botocore/credentials.py", dòng 1395, đang tải
trả về self._load_creds_via_assume_role(self._profile_name)
Tệp "/usr/local/lib/python3.6/site-packages/botocore/credentials.py", dòng 1410, trong _load_creds_via_assume_role
role_config, profile_name
Tệp "/usr/local/lib/python3.6/site-packages/botocore/credentials.py", dòng 1566, trong _resolve_source_credentials
credential_source, profile_name
Tệp "/usr/local/lib/python3.6/site-packages/botocore/credentials.py", dòng 1623, trong _resolve_credentials_from_source
'trong hồ sơ %s' % profile_name
Cấu hình
Vai trò vùng chứa:
EcsTaskVai trò:
Loại: AWS::IAM::Vai trò
Tính chất:
Mô tả: Vai trò do các bộ chứa đảm nhận, cho phép chúng gọi các dịch vụ AWS.
Tên vai trò: !Sub ecs-task-trans-role-Development
Giả địnhRolePolicyDocument:
Bản tường trình:
- Tác dụng: Cho phép
Hiệu trưởng:
Dịch vụ:
- ecs-tasks.amazonaws.com
Hoạt động:
- sts:AssumeVai trò
Chính sách:
- Tên chính sách: !Sub 's3-access-${EnvironmentName}-${AWS::StackName}'
Tài liệu chính sách:
Bản tường trình:
- Tác dụng: Cho phép
Hoạt động:
- s3:*
Nguồn:
- "*"
/root/.aws/config
trong thùng chứa:
[mặc định]
role_arn = arn:aws:iam::<my account>:role/ecs-task-trans-role-development
credential_source = EcsContainer
Không có /root/.aws/credentials
vì mục đích đảm nhận vai trò từ tệp cấu hình là truy xuất thông tin xác thực tạm thời.
https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html
một phần Nhiệm vụĐịnh nghĩa
:
Nhiệm vụĐịnh nghĩa:
Loại: AWS::ECS::TaskDefinition
Tính chất:
...
Định nghĩa vùng chứa:
...
Điểm gắn kết:
- ContainerPath: "/var/run/docker.sock"
NguồnVolume: docker_sock
ReadOnly: đúng
- Đường dẫn chứa: "/root/.docker"
NguồnVolume: docker_dir
ReadOnly: đúng
- ContainerPath: "/usr/bin/docker-credential-ecr-login"
NguồnVolume: docker_creds
ReadOnly: đúng
Những gì tôi đã thử
- Sử dụng
nhiệm vụExecutionVai trò
chứ không phải là vai trò container.
- xuất khẩu
AWS_PROFILE=mặc định
trong thùng chứa