适用于角色的 AWS S3 IAM 策略,用于根据实例标签或实例 ID 限制少数实例连接到 S3 存储桶



我有一个 AWS S3 已经与所有实例关联,以获得对所有 S3 存储桶的读取权限。现在,我需要向写入权限(Put 对象)的角色添加一个策略,以便其中一些实例可以对 S3 中的某些文件夹具有写入权限。有没有办法通过实例标签(对我来说更好的选择)或实例 ID 来实现它。

我尝试添加 IAM 策略,但在设置条件时,我的实例未获得所需的权限。

我使用的 IAM 策略是:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1456567757624",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject"
      ],
      "Resource": "arn:aws:s3:::testbucket/testfolder1/*",
      "Condition": {
        "ArnEquals": {
          "aws:SourceArn": "arn:aws:ec2:eu-west-1:<accountno>:instance/<instanceid1>"
        }
      }
    },
    {
      "Sid": "Stmt1456567757625",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject"
      ],
      "Resource": "arn:aws:s3:::testbucket/testfolder2/*",
      "Condition": {
        "ArnEquals": {
          "aws:SourceArn": "arn:aws:ec2:eu-west-1:<accountno>:instance/<instanceid2>"
        }
      }
    }
  ]
}

下面是一种替代方法,基于根据角色名称授予对 S3 资源的访问权限...

不要使用aws:SourceArn,而是使用aws:userid

可用于策略变量的请求信息文档有一个表,其中显示了各种aws:userid值,包括:

对于分配给 Amazon EC2 实例的角色,它设置为 role-id:ec2-instance-id

因此,您可以使用用于启动 Amazon EC2 实例的角色的角色 ID 或实例 ID 来允许访问。

例如,这个基于角色 ID

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "SID123",
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "*"
            ],
            "Condition": {
                "StringLike": {
                    "aws:userid": [
                        "AROAIIPEUJOUGITIU5BB6*"
                    ]
                }
            }
        }
    ]
}

当然,如果要根据角色 ID 分配权限,则可以轻松地在角色本身中授予权限。

这个基于实例 ID

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "SID123",
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "*"
            ],
            "Condition": {
                "StringLike": {
                    "aws:userid": [
                        "*:i-03c9a5f3fae4b630a"
                    ]
                }
            }
        }
    ]
}

实例 ID 将保留在实例中,但如果启动新实例,即使从同一 Amazon 系统映像 (AMI) 启动,也会分配一个新实例 ID。

IAM 策略元素参考文档说:

aws:SourceArn – 使用源的 Amazon 资源名称 (ARN) 检查请求的来源。(此值仅适用于某些服务。

但是,该文档没有说明哪些服务可以使用它。

有一些示例可用于 SQS 和 SNS,使用 Amazon S3 存储桶的源ARN,以及将源ARN与 Lambda 一起使用。但是,Amazon EC2 似乎不支持它。

相关内容

最新更新