【问题标题】:Cross account CodePipeline for EKS deployment用于 EKS 部署的跨账户 CodePipeline
【发布时间】:2021-08-07 20:53:41
【问题描述】:

我想从账户 A 中的 CodePipeline 部署 Kubernetes 服务/部署 yaml 文件,而 EKS 集群在账户 B 中。

我尝试了以下方法。

账户 A:

  • 已创建代入角色策略并将其附加到与代码管道关联的代码构建角色。
  • 在具有 eks 完全访问权限的承担角色策略中从账户 A 传递了角色名称。

帐户 B:

  • 创建了一个有权访问 EKS 集群的角色。
  • 将上述角色 arn 添加到具有 system:masters 权限的 Kubernetes 配置中。

来自账户 A 的构建规范文件:

version: 0.2
run-as: root

phases:

  install:
    commands:
      - echo Installing app dependencies...
      - curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.18.9/2020-11-02/bin/darwin/amd64/kubectl
      - chmod +x ./kubectl
      - mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$PATH:$HOME/bin
      - echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc
      - source ~/.bashrc
      - echo 'Check kubectl version'
      - kubectl version --short --client
      #- chmod +x eks_cicd/prereqs.sh
      #- sh eks_cicd/prereqs.sh

  build:
    commands:
      - echo Logging in to Amazon EKS...
      - aws sts get-caller-identity
      - aws eks --region $AWS_DEFAULT_REGION update-kubeconfig --name $AWS_CLUSTER_NAME --role-arn $ASSUMEROLE_ARN
      - echo check config
      - kubectl config view --minify
      - echo check kubectl access
      - kubectl get svc

  post_build:
    commands:
      - kubectl apply -f ingress.yml
      #- kubectl rollout restart -f eks_cicd/deployment.yaml

但是我收到了这个错误:

An error occurred (ResourceNotFoundException) when calling the DescribeCluster operation: No cluster found for name: DevCluster.

【问题讨论】:

    标签: kubernetes amazon-eks aws-codepipeline aws-codebuild eksctl


    【解决方案1】:

    据我所知,您仍在帐户 A 中。

    codebuild的角色(角色1)

    需要在账户 A 中。

    有权运行“aws eks”的角色(角色 2)

    您要通过“--role-arn”(角色 3)传递给 eks 的角色

    两者都需要在账户 B 中。

    第 1 点

    角色 1 需要具有 iam:AssumeRole 权限才能担任角色 2。

    您需要通过代码构建构建规范中的脚本主动假设它,并在您的环境中设置以下变量。

    • aws 访问密钥
    • 秘密访问密钥
    • 会话令牌

    有关假设角色脚本的示例,请参见此处:

    https://dannys.cloud/create-reusable-assume-role-script-cross-account-aws

    第 2 点

    角色 2 的 AssumeRolePolicyDocument,需要允许角色 1 代入。

          AssumeRolePolicyDocument:
            Version: 2012-10-17
            Statement:
              - Effect: Allow
                Principal:
                  AWS:
                    - !Sub arn:aws:iam::${DeployMentsAccountId}:role/${CodeBuildRoleName}
                Action:
                  - sts:AssumeRole
    

    然后它需要运行 eks 等的权限。

    在角色 3 上还需要 iam:PassRole

    第 3 点

    您的集群角色(角色 3)(请参阅https://docs.aws.amazon.com/eks/latest/userguide/service_IAM_role.html

    【讨论】:

    • 感谢您的帮助。一切都已经到位,我做了两件事 1. 为临时凭证创建脚本 2. 将以下策略附加到目标帐户 IAM 角色并开始工作:`` { "Version": "2012-10-17" , "声明": [ { "Sid": "some-large-id", "Effect": "Allow", "Action": ["sts:*" ], "Resource": ["*" ] } ] } ```
    猜你喜欢
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2017-07-23
    相关资源
    最近更新 更多