Невозможно получить доступ к репозиторию ECR из отдельной учетной записи через `docker pull` - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь разрешить одной учетной записи AWS (называемой «второй» ниже) извлекать изображение из репозитория ECR другой учетной записи AWS (называемой «первой» ниже).

Я следую за этими документами:

Я добавил следующие разрешения в репозиторий ECR:

{
  "Version": "2008-10-17",
  "Statement": [
    {
      "Sid": "AllowCrossAccountPull",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::<second>:root"
      },
      "Action": [
        "ecr:BatchCheckLayerAvailability",
        "ecr:BatchGetImage",
        "ecr:GetDownloadUrlForLayer"
      ]
    }
  ]
}

Затем я запускаю эту команду: eval "$(aws ecr get-login --no-include-email --region us-east-1 --profile second --registry-ids <second> <first>)"

И я получаю такой результат:

WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /Users/libby/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /Users/libby/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

Я временно изменил хранилище на config.json, чтобы убедиться, что вижу, что аутентификация добавляется в файл, как я и ожидал, и это:

{
        "auths": {
                "<second>.dkr.ecr.us-east-1.amazonaws.com": {
                        "auth": "<super long token>"
                },
                "<first>.dkr.ecr.us-east-1.amazonaws.com": {
                        "auth": "<super long token>"
                }
        },
        "HttpHeaders": {
                "User-Agent": "Docker-Client/18.09.0 (darwin)"
        },
        "stackOrchestrator": "swarm"
}

Наконец я запускаю: docker pull <first>.dkr.ecr.us-east-1.amazonaws.com/<repo>:<tag> и получаю такой результат:

Error response from daemon: pull access denied for <first>.dkr.ecr.us-east-1.amazonaws.com/<repo>, repository does not exist or may require 'docker login'

Я трижды проверил, все ли номера счетов верны, репо определенно есть. Я могу вытащить его, если войду в систему с помощью той же команды get-login, но --profile first.

Я не уверен, что еще можно попробовать, чтобы я мог вытащить это изображение!

Изменение Principal в разрешениях ECR на "AWS": "arn:aws:iam::<second>:user/<user>" не имеет значения.

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Я понял это - у пользователя IAM во «второй» учетной записи была привязана политика, ограничивающая его доступ к ECR. Политика была:

    {
        "Sid": "ECRAccess",
        "Effect": "Allow",
        "Action": "ecr:*",
        "Resource": "arn:aws:ecr:us-east-1:<second>:repository/<unrelated-repo>"
    }

Таким образом, даже несмотря на то, что репозиторий ECR в «первой» учетной записи имел разрешения, разрешающие доступ пользователя, собственная учетная запись пользователя ограничивала его доступ к одному несвязанному репозиторию.

Когда я добавил еще один раздел с хранилищем первого аккаунта ARN:

    {
        "Sid": "FirstAccountECRAccess",
        "Effect": "Allow",
        "Action": "ecr:*",
        "Resource": "arn:aws:ecr:us-east-1:<first>:repository/<repo>"
    }

Тогда docker pull сработало!

0 голосов
/ 08 января 2019

Использует ли ваша вторая учетная запись пользователя IAM на вашем компьютере? Потому что в вашей политике вы дали пользователю root доступ ко второму аккаунту:

"Principal": { "AWS": "arn:aws:iam::<second>:root" },

рассмотрите возможность изменения этого в своей политике:

"Principal": { "AWS": "arn:aws:iam::<second>:user/[nameofuser]" },

...