使用交叉帐户角色someaccountrole
,我可以访问AWS帐户xyz
。
案例1
要在帐户xyz
中创建堆栈,我们通过控制台上传Cloudformation文件。
在Events
标签中的堆栈创建过程中,我们看到了第一个事件,如下所示:
案例2
我们在xyz
帐户中创建EC2实例。
使用sam deploy(其中sam deploy
是aws cloudformation deploy
的包装),我们在EC2的命令下面运行以创建堆栈:
aws cloudformation deploy --template-file cfntemplate.yml --stack-name somestack-test --region us-east-1
在堆栈创建过程中,我们看到了类似的事件创建(如下所示):
在情况2中,用户为arn:aws:sts::${AccountId}:assumed-role/Autodeploy/i-0000000cc4
,我们在其中创建了Autodeploy
角色并将其分配给EC2。该用户在堆栈创建完成后消失。
但是在情况2 中,用户(i-0000000cc4
)需要权限才能执行以下操作,与情况1 不同:
{
"Action": [
"cloudformation:CreateStack",
"cloudformation:CreateChangeSet",
"cloudformation:CreateUploadBucket",
"cloudformation:ExecuteChangeSet",
"cloudformation:DeleteStack",
"cloudformation:Describe*",
"cloudformation:UpdateStack"
],
"Resource": [
"arn:aws:cloudformation:us-east-1:${AccountId}:stack/somestack*”
],
"Effect": "Allow"
}
否则,在情况2中,Events
标签给出以下错误:
User: arn:aws:sts::${AccountId}:assumed-role/Autodeploy/i-0000000cc4
is not authorized to perform: cloudformation:CreateChangeSet on resource:
arn:aws:cloudformation:us-east-1:${AccountId}:stack/somestack-test
1)在情况1中,创建堆栈的权限为someaccountrole
。但是在第2种情况下,为什么通过AWS CLI创建堆栈需要堆栈创建权限?
2)如何为这种临时会话资源(i-0000000cc4
)而不是EC2分配一个内联策略(短期)?
答案 0 :(得分:1)
1)在情况1中,权限被授予堆栈创建的某种权限。但是在第2种情况下,为什么通过AWS CLI创建堆栈需要堆栈创建权限?
情况1中的堆栈由您使用 Permissions 堆栈选项指定的角色创建,请参见[1]。此 AWS身份和访问管理(IAM)服务角色通常具有上面列出的必需的cloudformation:...
权限。
2)如何为这种临时会话资源(i-0000000cc4)而不是向EC2分配一个内联策略(短期)?
将策略分配给EC2实例的实例配置文件是正确的!
如果您要从EC2实例运行AWS CLI命令,并且要使用实例元数据服务来认证CLI会话,则必须附加所需的权限,作为附加到EC2的角色的嵌入式策略通过实例配置文件实例。
有关实例元数据服务的更多信息,请参见[2] [3]。对于一篇非正式但详尽的博客文章,它很好地解释了这些概念,请参阅[4]。
[1] https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-add-tags.html
[2] https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-metadata.html
[3] https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html#instance-metadata-security-credentials
[4] https://blog.gruntwork.io/authenticating-to-aws-with-instance-metadata-b6d812a86b40