我有一个AWS S3中的存储桶列表。我已经创建了一个IAM用户。我可以选择为使用组的用户提供S3完整或只读访问权限。是否有任何选项只能提供对特定存储桶的访问?

评论

不确定。但是,反过来肯定会发生。我的意思是,存储桶仅接受来自特定用户的请求。那对你不起作用吗?

@ Dawny33在这种情况下,我需要使用用户名和密码创建一个IAM用户。然后,我必须为该用户提供s3存储桶访问权限。然后,该用户必须创建用于访问的密钥。相反,我需要创建一个程序访问用户(该用户为用户创建访问密钥,而不是用户名和密码)。我无法为这样的IAM用户提供权限。

相关:限制特定用户的存储桶列表。

#1 楼

亚马逊的IAM角色通常向角色授予对特定ARN(亚马逊资源名称)的访问权限。 Amazon在他们的页面上指出,对于S3,资源


...可以是存储桶名称或存储桶名称/对象键。


它们还为执行此操作提供了一个有用的示例,如下所示:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::test"]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": ["arn:aws:s3:::test/*"]
    }
  ]
}


#2 楼

要提供对特定存储桶的访问权限,您可以为该用户或组定义以下策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "s3:ListBucketMultipartUploads"
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:DeleteObject",
                "s3:DeleteObjectVersion",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:GetObjectVersion",
                "s3:GetObjectVersionAcl",
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:PutObjectVersionAcl"
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets"
            ],
            "Resource": "arn:aws:s3:::*"
        }
    ]
}


其中my-bucket是您存储桶的名称。

,然后向其发送该存储桶的控制台URL,例如


https://s3.console.aws.amazon.com/s3/buckets/BUCKET_NAME/

相关:是否有一个S3策略用于限制只能访问/访问一个存储桶?


评论


可能需要注意您对存储桶本身的实际策略阻止操作,并且仅允许对存储桶的内部对象进行控制。

–滕西拜
17-10-3在11:53

#3 楼

将以下策略附加到该用户:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                        "s3:GetBucketLocation",
                        "s3:ListAllMyBuckets"
                      ],
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::YOUR-BUCKET",
                "arn:aws:s3:::YOUR-BUCKET/*"
            ]
        }
    ]
}


https://www.serverkaka.com/2018/05/grant-access-to-only-one-s3- bucket-to-aws-user.html

#4 楼

由于您正在寻找程序化角色创建,因此您可以考虑针对EC2的IAM角色。这些证书可以应用于EC2实例而无需人工干预,而且还避免了存储许多凭证/密钥的需求,这在使用自动化时总是很好的。

#5 楼

如果要从WinSCP,Cyber​​Duck等FTP软件访问,请添加以下策略。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetBucketLocation",
        "s3:ListAllMyBuckets"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": [
            "arn:aws:s3:::test1",
            "arn:aws:s3:::test2"
        ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": [
            "arn:aws:s3:::test1/*",
            "arn:aws:s3:::test2/*"
        ]
    }
  ]
}


我从编写IAM策略中学到了:如何授予对Amazon的访问权限S3桶