如何将角色传递给 cli 命令 "aws cloudformation deploy" 或 "sam deploy"?
How to pass a role to cli command "aws cloudformation deploy" or "sam deploy"?
我正在使用 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 的用户具有所需的权限,否则我使用任一命令都会收到错误消息:
An error occurred (AccessDenied) when calling the DescribeStacks
operation: User: arn:aws:iam::666488004797:user/DummyUser1 is not
authorized to perform: cloudformation:DescribeStacks on resource:
arn:aws:cloudformation:us-east-1:666488004797:stack/Melissa/*
如何让 deploy 命令使用 --role-arn
参数中传递的角色来获取它需要的权限?
可能有多种方法。
担任角色并使用配置文件部署 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
经过大量阅读和反复试验后,我发现 Manoj 的答案是正确的,但棘手的部分是需要在他的答案中作为 xyz
传递的参数。这是我为了传递一个角色所必须做的:
我必须配置要作为配置文件传递给 AWS CLI 配置文件的角色。 Manoj 提到的参数 --profile
仅适用于此文件中配置的配置文件(据我所知)。将角色配置为配置文件的方法是使用命令:
aws configure --profile arbitraryName
配置文件后面的只是一个标签或变量,当你想传递它时,你会用它来指代你的角色,你可以给它起任何名字,但理想情况下你会把它命名为与它要传递的角色相同的名字抓住。 运行 此命令将提示您输入几个字段。据我所知,角色没有 access_key 或 secret_access_key,因此只需按回车键跳过这些以及区域和输出,您的角色不需要这些。接下来,您将使用这些命令设置角色实际需要的字段:
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 文件,其中包含担任角色时创建的临时凭证。
我读了很多书才弄清楚这个问题,我希望这个答案能为别人节省一些时间。
我正在使用 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 的用户具有所需的权限,否则我使用任一命令都会收到错误消息:
An error occurred (AccessDenied) when calling the DescribeStacks operation: User: arn:aws:iam::666488004797:user/DummyUser1 is not authorized to perform: cloudformation:DescribeStacks on resource: arn:aws:cloudformation:us-east-1:666488004797:stack/Melissa/*
如何让 deploy 命令使用 --role-arn
参数中传递的角色来获取它需要的权限?
可能有多种方法。
担任角色并使用配置文件部署 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
经过大量阅读和反复试验后,我发现 Manoj 的答案是正确的,但棘手的部分是需要在他的答案中作为 xyz
传递的参数。这是我为了传递一个角色所必须做的:
我必须配置要作为配置文件传递给 AWS CLI 配置文件的角色。 Manoj 提到的参数 --profile
仅适用于此文件中配置的配置文件(据我所知)。将角色配置为配置文件的方法是使用命令:
aws configure --profile arbitraryName
配置文件后面的只是一个标签或变量,当你想传递它时,你会用它来指代你的角色,你可以给它起任何名字,但理想情况下你会把它命名为与它要传递的角色相同的名字抓住。 运行 此命令将提示您输入几个字段。据我所知,角色没有 access_key 或 secret_access_key,因此只需按回车键跳过这些以及区域和输出,您的角色不需要这些。接下来,您将使用这些命令设置角色实际需要的字段:
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 文件,其中包含担任角色时创建的临时凭证。
我读了很多书才弄清楚这个问题,我希望这个答案能为别人节省一些时间。