授予 EC2 实例访问 S3 存储桶的权限

DK1*_*990 2 amazon-s3 amazon-ec2 amazon-web-services amazon-policy

我想授予我的 ec2 实例访问 s3 存储桶的权限。

在这个 ec2 实例上,启动了一个包含我的应用程序的容器。现在我没有获得 s3 存储桶的许可。

这是我的存储桶策略

{
"Version": "2012-10-17",
"Id": "Policy1462808223348",
"Statement": [
    {
        "Sid": "Stmt1462808220978",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::714656454815:role/ecsInstanceRole"
        },
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::bucket-name/*",
        "Condition": {
            "IpAddress": {
                "aws:SourceIp": "private-ip/32"
            }
        }
    }
]
}
Run Code Online (Sandbox Code Playgroud)

但是直到我授予存储桶每个人都可以访问它的权限后,它才起作用。

我尝试从 ec2 实例内部卷曲 s3 存储桶中的文件,但这也不起作用。

Mic*_*ner 5

至少现在,2019 年,有一种更简单、更清晰的方法来做到这一点(凭证永远不必存储在实例中,而是可以自动查询它们):

  1. 为您的实例创建一个 IAM 角色并分配它
  2. 创建策略以授予对 s3 存储桶的访问权限
  3. 将策略分配给实例的 IAM 角色
  4. 上传/下载对象,例如通过aws cli for s3 - cp egaws s3 cp <S3Uri> <LocalPath>

@2:允许对 S3 存储桶中的对象进行读写访问的 JSON 策略示例是:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ListObjectsInBucket",
            "Effect": "Allow",
            "Action": ["s3:ListBucket"],
            "Resource": ["arn:aws:s3:::bucket-name"]
        },
        {
            "Sid": "AllObjectActions",
            "Effect": "Allow",
            "Action": "s3:*Object",
            "Resource": ["arn:aws:s3:::bucket-name/*"]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

您必须调整允许的操作,并替换“bucket-name”