用于 EKS 部署的跨账户 CodePipeline

Cross account CodePipeline for EKS deployment

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

我尝试了以下方法。

账户 A:

在帐户 B 上:

来自帐户 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.

据我所知,您仍在帐户 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