Har*_*uez 5 aws-cloudformation amazon-iam aws-cli aws-serverless
我正在使用 SAM 模板和 CLI 创建一个 cloudformation 堆栈。我已经使用一个帐户成功完成了此操作,该帐户从直接附加到该帐户的策略中获取了所有必需的权限。向此帐户授予所有这些权限是很差的安全实践,因此我创建了一个附加了相同策略的角色,并希望将其用于部署。但是,即使我通过--role-arn参数传递我的角色,该命令仍然会向帐户查找权限。
以下是我尝试使用的命令:
aws cloudformation deploy --template-file TemplatePackaged.yaml --stack-name TestStack --capabilities CAPABILITY_IAM --region us-east-1 --role-arn arn:aws:iam::666488004797:role/LambdaApplicationCreateRole
Run Code Online (Sandbox Code Playgroud)
或者
sam deploy --template-file TemplatePackaged.yaml --stack-name TestStack --capabilities CAPABILITY_IAM --region us-east-1 --role-arn arn:aws:iam::666488004797:role/LambdaApplicationCreateRole
Run Code Online (Sandbox Code Playgroud)
除非登录 cli 的用户具有所需的权限,否则我使用任一命令都会收到错误:
调用DescribeStacks操作时发生错误(AccessDenied):用户:arn:aws:iam :: 666488004797:user/DummyUser1无权在资源:arn:aws:cloudformation:us-east-1上执行:cloudformation:DescribeStacks: 666488004797:堆栈/梅丽莎/*
如何让deploy命令使用--role-arn参数中传递的角色来获取它需要的权限?
经过大量阅读和反复试验,我发现 Manoj 的答案是正确的,但棘手的部分是需要在xyz他的答案中传递的论点。为了通过一个角色,我必须这样做:
我必须配置要在 AWS CLI 的配置文件上作为配置文件传递的角色。Manoj 提到的参数--profile仅适用于此文件中配置的配置文件(据我所知)。将角色配置为配置文件的方法是使用以下命令:
aws configure --profile arbitraryName
配置文件后面的内容只是一个标签或变量,当您想要传递它时,您将使用它来引用您的角色,您可以给它任何名称,但理想情况下,您将其命名为与它将担任的角色相同的名称。运行此命令将提示您输入几个字段。据我所知,角色没有 access_key 或 Secret_access_key,因此只需按 Enter 键即可跳过这些以及区域和输出,您的角色不需要这些。接下来,您将使用以下命令设置角色实际需要的字段:
aws configure set profile.arbitraryName.role_arn roleArn
aws configure set profile.arbitraryName.source_profile cliProfile
这roleArn是您在 CLI 中配置的角色的 arn,这cliProfile是已在 CLI 中配置且有权承担该角色的用户。完成此操作后,每当您想要在命令中传递配置的角色时,您只需添加--profile arbitraryName为命令的最后一个参数,该命令将使用所传递的角色的权限。
*有趣的是,以这种方式传递角色会隐式执行aws sts assume-role. 如果您知道 .aws 文件夹所在的位置,则可以进入并查看名为 cli 的文件夹,其中包含一个 json 文件,其中包含担任角色时创建的临时凭证。
我必须做很多阅读才能弄清楚这一点,我希望这个答案能节省其他人的时间。
| 归档时间: |
|
| 查看次数: |
2470 次 |
| 最近记录: |