【问题标题】:Is it possible to run cdk commands from an IAM role?是否可以从 IAM 角色运行 cdk 命令?
【发布时间】:2020-01-07 16:39:30
【问题描述】:

我正在尝试将 aws-cdk 基础架构部署为来自 jenkins 管道的代码,但它需要存储在 ~/.aws/credentials 中的 aws 凭据。

为运行 jenkins 的服务器提供了一个 IAM 角色,该角色具有足够的权限来部署任何类型的资源。我还尝试传递 env 变量以提供正确的区域和帐户:CDK_DEFAULT_ACCOUNT=XXXCDK_DEFAULT_REGION=us-east-2

这是我现在的阶段

        stage('Deploy test infrastructure') {
          container(cdkDeployContainer.getName()) {
            sh("npm install -g aws-cdk aws-cli")
            sh("cd test-infrastructure && npm install && CDK_DEFAULT_ACCOUNT=154438573167 CDK_DEFAULT_REGION=us-east-2 cdk bootstrap")
          }
        }

我收到此错误Unable to determine default account and/or region 在使用 CDK 时是否可以使用角色 IAM?提供 IAM 编程访问密钥的其他替代方法是什么?

【问题讨论】:

    标签: typescript amazon-web-services aws-cdk


    【解决方案1】:

    这是可能的。你只需要承担这个角色。你可以这样做:

    #!/usr/bin/env bash
    
    export ACCOUNT_ID="154438573167"
    role_arn="arn:aws:iam::${ACCOUNT_ID}:role/jenkins-deploy-role"
    
    export AWS_DEFAULT_REGION="us-east-2"
    KST=($(aws sts assume-role --role-arn "${role_arn}" --role-session-name jenkins --query '[Credentials.AccessKeyId,Credentials.SecretAccessKey,Credentials.SessionToken]' --output text))
    unset AWS_SECURITY_TOKEN
    export AWS_ACCESS_KEY_ID=${KST[0]}
    export AWS_SECRET_ACCESS_KEY=${KST[1]}
    export AWS_SESSION_TOKEN=${KST[2]}
    export AWS_SECURITY_TOKEN=${KST[2]}
    
    # Now you have assumed the role and obtained temporary credentials.
    cdk bootstrap
    

    【讨论】:

      【解决方案2】:

      您可以使用 cdk cli 的--role-arn 参数来承担角色。

      例如:

      cdk deploy --role-arn arn:aws:iam::154438573167:role/jenkins-deploy-role
      

      【讨论】:

        最近更新 更多