【问题标题】:How to pass a role to cli command "aws cloudformation deploy" or "sam deploy"?如何将角色传递给 cli 命令“aws cloudformation deploy”或“sam deploy”?
【发布时间】:2019-09-16 01:08:24
【问题描述】:

我正在使用 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参数中传递的角色来获取它需要的权限?

【问题讨论】:

    标签: amazon-cloudformation aws-cli amazon-iam aws-serverless


    【解决方案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 
      

    【讨论】:

      【解决方案2】:

      经过大量阅读和反复试验,我发现 Manoj 的答案是正确的,但棘手的部分是需要在他的答案中传递为 xyz 的论点。为了传递一个角色,我必须这样做:

      我必须配置我想在 AWS CLI 的配置文件中作为配置文件传递的角色。 Manoj 提到的参数--profile 仅适用于此文件中配置的配置文件(据我所知)。将角色配置为配置文件的方法是使用以下命令:

      aws configure --profile arbitraryName

      profile 后面的内容只是一个标签或变量,当您想要传递它时,您将使用它来引用您的角色,您可以给它起任何名称,但理想情况下,您应该将其命名为与它将持有的角色相同的名称。运行此命令将提示您输入几个字段。据我所知,角色没有 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 文件,其中包含在担任角色时创建的临时凭证。

      我必须做很多阅读才能弄清楚这一点,我希望这个答案可以节省其他人一些时间。

      【讨论】:

      • 问题是--role-arn 参数的意义何在?
      猜你喜欢
      • 1970-01-01
      • 2021-05-03
      • 2022-09-23
      • 2021-07-24
      • 1970-01-01
      • 2020-06-10
      • 2018-11-22
      • 1970-01-01
      • 2018-10-06
      相关资源
      最近更新 更多