【问题标题】:Using tags prefixed with aws: in IAM policies在 IAM 策略中使用前缀为 aws: 的标签
【发布时间】:2018-10-13 00:39:13
【问题描述】:

我有一个使用案例,我正在使用 CloudFormation 创建一组资源,例如 EC2 实例和 S3 存储桶。我看到 Cloudformation 将标签添加到 EC2 实例和 S3 存储桶中,标签的格式为

aws:cloudformation:stack-name: <stack-name>

我正在尝试编写具有基于标签的权限的 IAM 策略。该政策如下所示:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowToDescribeAll", "Effect": "Allow", "Action": [ "ec2:*", "s3:*" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/aws:cloudformation:stack-name": "mystackname" } } }, { "Sid": "AllPermissions", "Effect": "Allow", "Action": [ "ec2:Describe*" ], "Resource": "*" } ] }

现在,当我尝试使用 CLI 执行 S3 put 对象 API 调用时,我看到 AccessDenied 权限。当我尝试终止具有该特定标签的实例时也是如此。我找不到任何特定的 IAM 文档,其中提到我们不能在 IAM 策略中使用以 aws: 为前缀的标签。有人知道问题可能是什么吗?还是上下文键aws:ResourceTag 无效?

【问题讨论】:

标签: amazon-web-services amazon-s3 amazon-ec2


【解决方案1】:

TLDR;我寻找更多文档,我发现上下文键 aws:ResourceTag 现在不是有效/支持的东西。在此处找到文档 - https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html,该文档仅提供 aws:RequestTag 作为有效的上下文键。

要添加特定于服务的上下文键,我必须深入挖掘并找到此文档 - https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonec2.html,它具有 ec2:ResourceTag/tagKey 上下文键。因此,一旦我将 IAM 政策更改为 "ec2:ResourceTag/aws:cloudformation:stack-name": "mystackname",我就开始看到成功。

【讨论】:

    【解决方案2】:

    我认为并非所有“操作”都支持资源级权限。 为了消除这个问题,为了测试,请尝试使用最小权限而不是“*”,例如:

    "Action": ["ec2:StartInstances","ec2:StopInstances"]
    

    如果可行,请将政策分成两部分。

    我希望它有所帮助。 祝你好运。

    【讨论】:

    • 感谢您的回复,我知道并非所有操作都支持资源级权限。我使用的是支持资源级别权限的 TerminateInstances API。
    猜你喜欢
    • 2019-07-07
    • 2016-06-05
    • 2021-05-09
    • 2018-04-13
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    • 2014-05-02
    相关资源
    最近更新 更多