我有一个用例,其中我正在使用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
无效?
答案 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"
,我就开始看到成功。