【问题标题】:AWS S3 IAM policy for role for restricting few instances to connect to S3 bucket based in instance tag or instance id用于基于实例标签或实例 ID 限制少数实例连接到 S3 存储桶的角色的 AWS S3 IAM 策略
【发布时间】:2016-03-01 08:54:58
【问题描述】:

我有一个 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>"
        }
      }
    }
  ]
}

【问题讨论】:

标签: amazon-web-services amazon-s3


【解决方案1】:

这是一个替代方案,基于Granting access to S3 resources based on role name...中给出的提示...

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

Request Information That You Can Use for Policy Variables 文档有一个表格显示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),也会分配一个新实例。

【讨论】:

  • 感谢@John Rotenstein。使用 instanceid 的基于 aws:userid 的方法非常有效。我的方案没有适当的文档,但在您的帮助下,我能够完成这项工作。非常感谢!!!
【解决方案2】:

IAM Policy Elements Reference documentation 说:

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

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

its use with SQS and SNS, with a sourceARN of an Amazon S3 bucketusing sourceARN with Lambda 可用的示例。但是,Amazon EC2 似乎不支持它。

【讨论】:

    猜你喜欢
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 2019-08-15
    • 1970-01-01
    • 2021-06-30
    • 2022-01-17
    • 1970-01-01
    相关资源
    最近更新 更多