Сборка кода AWS для вывода списка сегментов s3 другой учетной записи

введите здесь описание изображения Моя сборка кода находится в учетной записи A, а сегменты s3 - в учетной записи B. Я попытался настроить доверенную роль IAM STS для учетной записи B и политику для учетной записи A, чтобы включить роль IAM учетной записи B, прилагаемую к этой политике в мою роль службы сборки кода. Но все же моя сборка кода показывает сегменты на s3. Я здесь что-то не так делаю или настраиваю?

Роль с доверительными отношениями в аккаунте Б

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::Account:root"
      },
      "Action": "sts:AssumeRole",
      "Condition": {}
    }
  ]

политика в отношении учетной записи A

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::Account B:role/testcli"
        }
    ]
}

CodeBuild BuildSpec.yml

version: 0.2

env:
  variables:
    TF_VERSION: "0.12.28"

phases:
  install:
    commands:
#       install required binary
      - echo test
  pre_build:
    commands:
      - echo print s3 buckets
      - aws s3 ls

  post_build:
    commands:
      - echo test1

person patrick    schedule 02.09.2020    source источник
comment
Не могли бы вы предоставить более подробную информацию? Точные политики, роли iam, ваш buildspec.yml?   -  person Marcin    schedule 02.09.2020
comment
@Marcin обновил вопрос с запрошенной информацией   -  person patrick    schedule 02.09.2020
comment
Вы хотите получить доступ к определенному сегменту в Acc B из вашего CodeBuild? Если да, то вы можете включить это с помощью политик корзины.   -  person Marcin    schedule 02.09.2020
comment
@Marcin Я думаю, что добавление политики в ведро, вероятно, сработает, но если у меня есть 10 учетных записей, имеющих доступ к этому конкретному ведру, я должен идти и обновлять политику корзины всякий раз, когда добавляется новая учетная запись   -  person patrick    schedule 02.09.2020
comment
Понятно. Тогда вам придется явно взять на себя роль в вашем `buildspec.yml. Я могу дать более подробный ответ.   -  person Marcin    schedule 02.09.2020


Ответы (1)


Предполагая, что ваш CodeBuild (CB) имеет разрешения на sts:AssumeRole, в вашем buildspec.yml вы должны явно взять на себя роль в Acc B.

Это можно сделать двумя способами.

  • Вручную вызовите accept-role в своем buildspec.yml . Вызов вернет набор временных учетных данных. Полученные учетные данные затем можно использовать для выполнения команд AWS CLI в Acc B с вашего CB.

  • Настройте файлы учетных данных интерфейса командной строки AWS, как показано здесь или здесь в контейнере CB для предположения роли.

В обоих случаях служебной роли CB требуются sts:AssumeRole разрешения.

person Marcin    schedule 02.09.2020
comment
Я получаю сообщение об ошибке `` Произошла ошибка (InvalidAccessKeyId) при вызове операции ListBuckets: предоставленный вами идентификатор ключа доступа AWS не существует в наших записях '' после изменения buildspec.yml для использования sts:Assumerole - person patrick; 02.09.2020
comment
pre_build: commands: - echo print s3 buckets - aws sts assume-role --role-arn arn:aws:iam::Account B:role/testcli --role-session-name testx > cred.json - s=$(jq '.Credentials.AccessKeyId' cred.json) - y=$(jq '.Credentials.SecretAccessKey' cred.json) - z=$(jq '.Credentials.SessionToken' cred.json) - export AWS_ACCESS_KEY_ID=$s - export AWS_SECRET_ACCESS_KEY=$y - export AWS_SESSION_TOKEN=$z - aws s3 ls - echo $y Часть спецификации сборки, вызывающая sts:Assumerole - person patrick; 02.09.2020
comment
@patrick Не могли бы вы отредактировать вопрос, указав новую информацию? - person Marcin; 02.09.2020
comment
Я выяснил проблемы, разбирая там кавычки accessid и secretkey, которые нужно обрезать. Я могу получить список сегментов в учетной записи B - person patrick; 02.09.2020