我正在使用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
或
sam deploy --template-file TemplatePackaged.yaml --stack-name TestStack --capabilities CAPABILITY_IAM --region us-east-1 --role-arn arn:aws:iam::666488004797:role/LambdaApplicationCreateRole
除非登录到cli的用户具有所需的权限,否则我无法通过以下任一命令获取错误:
调用DescribeStacks时发生错误(AccessDenied) 操作:用户:arn:aws:iam :: 666488004797:user / DummyUser1不是 授权执行:cloudformation:DescribeStacks on resource: arn:aws:cloudformation:us-east-1:666488004797:stack / Melissa / *
如何获取deploy命令以使用在--role-arn
参数中传递的角色来获取所需的权限?
答案 0 :(得分:1)
可能有多种方法。
承担角色并使用配置文件来部署AWS Cloudformation
aws cloudformation deploy --template-file TemplatePackaged.yaml --stack-name TestStack --profile xyz
使用可访问cloudformation的实例配置文件启动EC2实例,您无需显式指定角色arn或配置文件详细信息
aws cloudformation deploy --template-file TemplatePackaged.yaml --stack-name TestStack
答案 1 :(得分:0)
经过大量的阅读和反复试验后,我发现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中配置的角色的信息,cliProfile
是已在CLI中配置的有权承担该角色的用户。完成此操作后,只要您想在命令中传递已配置的角色,只需添加--profile arbitraryName
作为命令的最后一个参数,该命令将使用传递的权限。
*有趣的是,以这种方式传递角色会产生隐式aws sts assume-role
。如果您知道.aws文件夹在哪里,则可以进入一个名为cli的文件夹,该文件夹包含一个json文件,其中包含当担任角色时创建的临时凭证。
我不得不做大量的阅读才能弄清楚这一点,希望这个答案可以节省别人的时间。