如何将角色传递给cli命令“ aws cloudformation deploy”或“ sam deploy”?

时间:2019-04-26 13:42:43

标签: amazon-cloudformation aws-cli amazon-iam 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

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参数中传递的角色来获取所需的权限?

2 个答案:

答案 0 :(得分:1)

可能有多种方法。

  1. 承担角色并使用配置文件来部署AWS Cloudformation

    aws cloudformation deploy --template-file TemplatePackaged.yaml --stack-name TestStack --profile xyz
    
  2. 使用可访问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文件,其中包含当担任角色时创建的临时凭证。

我不得不做大量的阅读才能弄清楚这一点,希望这个答案可以节省别人的时间。