我想从帐户A中的CodePipeline部署Kubernetes服务/部署yaml文件,而EKS集群在帐户b中
我尝试了以下方法。
On Account A:
- 创建假设角色策略,并将其附加到与代码管道相关联的codebuild角色。
- 从account A传入角色名,该角色策略具有几周的完全访问权限。
On Account B:
- 创建一个访问EKS集群的角色。
- 将上述角色arn添加到Kubernetes配置中,并具有system:masters权限。
Buildspec file from Account 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 weeks '的角色(角色2)
要通过'——role-arn ' (role 3)传递给weeks的角色
两者都需要在账户b中
点(1
角色1需要有iam: presumerole权限才能承担角色2。
您需要通过代码构建构建规范中的脚本积极地假设它,并在您的环境中设置以下变量。
- 法律访问键
- 秘密访问密钥
- 会话令牌
请参阅这里的假设角色脚本示例:
https://dannys.cloud/create-reusable-assume-role-script-cross-account-aws
2
角色2的presumerolepolicydocument需要允许角色1承担它。
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
AWS:
- !Sub arn:aws:iam::${DeployMentsAccountId}:role/${CodeBuildRoleName}
Action:
- sts:AssumeRole
然后需要允许运行weeks等
还需要角色3上的iam:PassRole
3
您的集群角色(角色3)(参见https://docs.aws.amazon.com/eks/latest/userguide/service_IAM_role.html)