繁体   English   中英

AWS CDK 使用角色部署

[英]AWS CDK deploy using role

您可以在此处找到可用于复制我的问题的 cdk 应用程序varvay/issue-replication.git README中解释的使用说明

我需要通过发出此命令使用角色部署 CDK 应用程序

cdk -r arn:aws:iam::000000000000:role/fooRole deploy

但随后抛出错误

Assuming role failed: User: arn:aws:iam::000000000000:user/fooUser is not authorized to 
perform: sts:AssumeRole on resource: arn:aws:iam::000000000000:role/barRole

可以肯定的是,我尝试通过在 AWS IAM 策略模拟器中使用arn:aws:iam::000000000000:role/fooRole假设arn:aws:iam::000000000000:role/barRole角色来模拟它,它工作得很好。 困扰我的一件事是错误表示User试图承担角色,而不是Role

这是为什么? 或者我应该假设fooRole ,更新与 AWS 相关的环境变量然后部署? 如果是这样,那么在cdk上使用-r选项有什么意义

作为附加信息,这里是barRole的信任关系

{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam:: 000000000000:root"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

我什至还尝试将AdministratorAccess AWS 托管策略附加到用于部署的fooRole

因此,您可以通过两种方式运行cdk deploy命令。

1- 您正在使用 IAM 密钥从本地计算机的 CLI 运行此命令。 在这种情况下,此角色必须可由所使用的 AWS 账户(IAM 用户)担任。

2-您正在从任何 AWS 服务(例如 EC2 实例上的 cicd 代理)运行此命令,然后应允许与实例关联的角色承担此部署角色。

提及您如何运行此命令,您可能会得到更好的答案。

更新:基于更新的问题:

在您的 IAM USER 中添加assume role部分,而不是您的部署角色。 应允许您尝试部署的 IAM 用户担任部署 CDK 的角色。

稍微图解一下:

(IAM-USER -> Assume -> Role) -> cdk deploy

如您的错误消息中所写,错误是在跨帐户角色访问的过程中。

我假设您从一个账户的 AWS 配置开始,我们称之为“配置”,然后您需要根据分支或其他东西在不同的账户(开发或产品)中担任角色?

我在设置跨账户角色时闻到了错误。 https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html

一种可能性是:您想假设的 Rolle 没有您的配置帐户作为受信任的实体。

另一个是:试图承担角色的用户没有相应的政策。

只需按照 AWS 的教程,看看您的设置中缺少什么 :)

我通过创建 bash 脚本来切换到目标角色并使用凭据执行 CDK 命令来满足我的需求,如下所示,

#!/bin/bash
unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
unset AWS_SESSION_TOKEN

AWS_CREDENTIAL=$(aws sts assume-role \
--role-arn <destination role ARN> \
--role-session-name <role session name> \
--duration-seconds 3600)

export AWS_ACCESS_KEY_ID=$(echo $AWS_CREDENTIAL \
| jq -r '.Credentials''.AccessKeyId')

export AWS_SECRET_ACCESS_KEY=$(echo $AWS_CREDENTIAL \
| jq -r '.Credentials''.SecretAccessKey')

export AWS_SESSION_TOKEN=$(echo $AWS_CREDENTIAL \
| jq -r '.Credentials''.SessionToken')

cdk deploy

unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
unset AWS_SESSION_TOKEN

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM