web-dev-qa-db-ja.com

`dockerpull`を介して別のアカウントからECRリポジトリにアクセスできません

1つのAWSアカウント(以下では「2番目」と呼びます)が別のAWSアカウント(以下では「最初」と呼びます)のECRリポジトリにイメージをプルできるようにしようとしています。

私はこれらの文書に従っています:

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_を使用してログインすると、プルできます。

この画像を引っ張るために他に何を試すべきかわかりません!

ECR権限のPrincipalを_"AWS": "arn:aws:iam::<second>:user/<user>"_に変更しても、違いはありません。

7
Libby

2番目のアカウントはマシンでIAMユーザーを使用していますか?ポリシーで、2番目のアカウントのrootユーザーにアクセスを許可しました。

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

ポリシーでこれをに変更することを検討してください。

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

0
Nicki Klein