Docker EC2 中的容器无法通过 AWS SDK 将数据写入 AWS S3

Docker container in EC2 is unable to write data into AWS S3 through AWS SDK

我在 AWS EC2 实例上有一台 docker 机器 运行。假设通过SDK客户端上传数据到S3。

  1. docker 机器在 EC2 实例中创建并使用以下命令
--driver amazonec2 \
--amazonec2-open-port ${open-port} \
--amazonec2-region ${region} \
--amazonec2-access-key ${access-key} \
--amazonec2-secret-key ${secret-key} \
--amazonec2-instance-type ${instance_type} \
--amazonec2-ami ${this.ami} \
--amazonec2-security-group ${security_group_name} \
--swarm \
--swarm-discovery token://${swarm_join_token} \
--swarm-addr ${ip_address};
  1. 我使用 S3fullAccess 创建了 IAM 用户并且还允许 public 访问 S3 full access screen shot

public access screen shot

  1. S3 存储桶策略是
    "Version": "2012-10-17",
    "Id": "Policyxxx",
    "Statement": [
        {
            "Sid": "Stmtxxx",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::xxx"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::xxx",
                "arn:aws:s3:::xxx/*"
            ]
        }
    ]
}

一直显示error: AccessDenied: Access Denied。有人可以帮助我吗?

从 EC2 实例上的容器 运行 访问 S3 不是由您的 IAM 用户凭据决定的。相反,您应该使用 S3 权限设置 IAM role/profile for the instance,然后使用 docker-machine:

选项提供 role/profile 名称
--amazonec2-iam-instance-profile

如果您使用 AWS CLI 或 SDK,实例的权限将在容器内可用。

而不是存储桶策略,它更容易添加 S3 权限到实例角色