在IAM策略中使用前缀为aws的标签:

时间:2018-09-27 16:28:35

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

我有一个用例,其中我正在使用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放置对象API调用时,我看到了AccessDenied权限。当我尝试终止具有该特定标签的实例时,情况也是如此。我找不到任何特定的IAM文档,其中提到我们无法在IAM策略中使用以aws:开头的标签。有人知道这个问题可能是什么吗?还是上下文密钥aws:ResourceTag无效?

2 个答案:

答案 0 :(得分:0)

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

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

如果可行,请将策略分为两部分。

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

答案 1 :(得分:0)

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",我就开始看到成功。