Кодовая линия перекрестной учетной записи для развертывания EKS

#kubernetes #amazon-eks #aws-codepipeline #aws-codebuild #eksctl

Вопрос:

Я хочу развернуть файлы yaml службы/развертывания Kubernetes из CodePipeline, который находится в учетной записи A, а кластер EKS находится в учетной записи B.

Я попробовал следующий подход.

По Счету А:

  • Создал политику ролей и прикрепил ее к роли codebuild, связанной с линией кода.
  • Передал имя роли из учетной записи A в политике принятия ролей, которая имеет полный доступ к eks.

По Счету В:

  • Создал роль с доступом к кластеру EKS.
  • Добавлена вышеупомянутая роль arn в конфигурацию Kubernetes с разрешением system:master.

Файл Buildspec из учетной записи 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 amp;amp; cp ./kubectl $HOME/bin/kubectl amp;amp; 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.
 

Ответ №1:

Насколько я могу судить, вы все еще находитесь на счете А.

Роль для сборки кода (роль 1)

Необходимо учитывать А.

Роль с доступом для запуска «aws eks» (роль 2)

Роль, которую вы хотите передать eks через ‘—role-arn ‘ (роль 3 )

Оба должны быть на счете B.

Пункт 1

Роль 1 должна иметь разрешение iam:AssumeRole на принятие роли 2.

Вам нужно активно предположить это с помощью скрипта в спецификации сборки кода и задать следующие переменные в вашей среде.

  • ключ доступа aws
  • секретный ключ доступа
  • маркер сеанса

Смотрите здесь пример сценария «Принять роль».:

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

Пункт 2

Документ AssumeRolePolicyDocument для роли 2 должен позволять роли 1 принимать его.

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

Затем ему потребуется разрешение для запуска eks и т. Д.

Для этого также требуется iam:прохождение роли 3

Пункт 3

Ваша роль в кластере ( роль 3 ) (см. https://docs.aws.amazon.com/eks/latest/userguide/service_IAM_role.html)

Комментарии:

1. Спасибо за помощь. Все уже было на месте, я сделал 2 вещи 1. Создал скрипт для временных учетных данных 2. Прикрепил приведенную ниже политику к роли IAM целевой учетной записи, и она начала работать: « { «Версия»: «2012-10-17», «Заявление»: [ { «Sid»: «некоторый большой идентификатор», «Эффект»: «Разрешить», «Действие»: [ «sts:*» ], «Ресурс»: [ «*» ] } ] } «