根据角色名称授予对 S3 资源的访问权限



IAM 策略变量非常酷,允许您创建通用策略,例如,允许用户根据用户名访问 S3 存储桶中的路径,如下所示:

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

我的问题是,如何使用角色(附加到 EC2 实例)而不是用户帐户来完成此操作?

我有许多具有唯一 IAM 用户帐户的应用程序服务器,这些帐户链接到类似于上述策略的通用策略。这将隔离每个用户/应用可访问的文件,而无需创建多个策略。

我想将这些服务器切换为使用角色,但似乎没有像 aws:rolename 这样的等效 IAM 变量。

文档表明,使用分配给 EC2 实例的角色时,未设置aws:username变量,[role-id]:[ec2-instance-id] aws:userid变量(这也无济于事)。

这似乎真的是你应该能够做的事情......还是我来错了?

我一直

在寻找相同的内容,经过大量搜索,我的结论是不可能在 IAM 策略中使用角色名称作为变量(不过我很想被证明是错误的)。

相反,我用name标记了我的角色,结果是:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": ["s3:GetObject","s3:PutObject","s3:DeleteObject"],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::fooCorp-user-files/${aws:PrincipalTag/name}/*"
        },
        {
            "Action": "s3:ListBucket",
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::fooCorp-user-files"
        }
    ]
}

(交叉发布到 AWS S3 IAM 角色策略,用于根据实例标签或实例 ID 限制少数实例连接到 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。

相关内容

  • 没有找到相关文章

最新更新