为什么 CloudFormation 使用奇怪的角色来执行更新?

问题描述 投票:0回答:1

我试图更新堆栈以向角色添加策略。我用来推送堆栈更新的角色有

AdministratorAccess
,所以我预计更新不会遇到权限问题。但是,我收到了一个奇怪的错误消息:

API:

iam:PutRolePolicy
用户:
arn:aws:sts::xxxxx:assumed-role/NotAdmin/yyyy
无权对资源:角色
iam:PutRolePolicy
执行:
zzzz
,因为没有基于身份的策略允许执行
iam:PutRolePolicy
操作

错误消息中角色的 ARN 与我用于推送更新的用户不同。这是一个权限有限的角色,脚本用于定期更新该堆栈。

我尝试使用明确的

--role-arn
参数:

aws cloudformation update-stack --region xxx --stack-name xxx --role-arn arn:aws:iam::xxx:role/RoleWithAdminAccess

但是后来我收到了这个错误消息:

调用 UpdateStack 操作时发生错误 (ValidationError):角色 arn:aws:iam::xxx:role/RoleWithAdminAccess 无效或无法假定

我怎样才能让这个堆栈更新发挥作用?

amazon-web-services aws-cloudformation amazon-iam roles aws-roles
1个回答
0
投票

发生此问题是因为

--role-arn
是“粘性”

来自

https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-stack.html

如果您不指定值,CloudFormation 将使用之前与堆栈关联的角色。如果没有可用的角色,CloudFormation 将使用根据您的用户凭据生成的临时会话。

在指定

--role-arn
之前,CFN确实正在使用基于用户凭据的会话并拥有所有权限。但是,在指定
--role-arn NotAdmin
的第一次更新之后,CFN 现在会将该角色记住为“堆栈角色”。未指定
--role-arn
的后续更新默认使用该角色,因此会出现权限问题。

至于为什么

RoleWithAdminAccess
不能被假定——那是因为通过
--role-arn
使用角色而不是默认会话继承需要显式授予
Principal: {Service: "cloudformation.amazonaws.com"}
来允许假定角色

© www.soinside.com 2019 - 2024. All rights reserved.