0

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

我尝试了以下方法。

在账户 A 上:

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

在账户 B 上:

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

来自账户 A 的 Buildspec 文件:

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.
4

1 回答 1

0

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

codebuild的作用(作用1)

需要在账户 A 中。

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

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

两者都需要在账户 B 中。

第 1 点

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

您需要通过 codebuild buildspec 中的脚本主动假设它,并在您的环境中设置以下变量。

  • 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

于 2021-08-07T12:48:06.130 回答