Điểm:2

CredentialRetrievalError trong vùng chứa ECS

lá cờ pe

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ử

  1. Sử dụng nhiệm vụExecutionVai trò chứ không phải là vai trò container.
  2. xuất khẩu AWS_PROFILE=mặc định trong thùng chứa

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.