用于 EKS 部署的跨账户 CodePipeline
Cross account CodePipeline for EKS deployment
我想从账户 A 中的 CodePipeline 部署 Kubernetes service/deployment 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.
据我所知,您仍在帐户 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)
我想从账户 A 中的 CodePipeline 部署 Kubernetes service/deployment 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.
据我所知,您仍在帐户 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)