Amazon ECR イメージリポジトリ内のイメージをプッシュまたはプルするためのセカンダリアカウントを許可するにはどうすればよいですか?

最終更新日: 2021 年 2 月 16 日

Amazon Elastic Container Registry (Amazon ECR) のイメージリポジトリにあるイメージのプッシュまたはプルをセカンダリアカウントに許可したいと思っています。

解決方法

別のアカウントの Amazon ECR リポジトリにイメージをプッシュまたはプルできます。まず、セカンダリアカウントがリポジトリに対して API 呼び出しを実行できるようにするポリシーを作成する必要があります。次に、セカンダリアカウントから生成された Docker 認証トークンを使用して、プライマリアカウントのリポジトリに対して Push コマンドと Pull コマンドを使用します。

イメージリポジトリに対する API 呼び出しをセカンダリアカウントが実行することを許可するポリシーを作成する

1.    プライマリアカウントの Amazon ECR コンソールを開きます。

2.    変更するリポジトリのハイパーリンクされたリポジトリ名を選択します。

3.    左側のナビゲーションペインの [Amazon ECR - Repositories] で、[Permissions] を選択します。

4.    プライマリアカウント内からセカンダリアカウントのリポジトリポリシーを追加するには、[Edit policy JSON] を選択します。コードエディターにポリシーを入力し、[Save] を選択します。

重要: ポリシーには、セカンダリアカウントのアカウント番号と、アカウントがリポジトリに対して実行できるアクションを含めてください。

以下のリポジトリポリシー例では、特定のアカウントによるイメージのプッシュとプルを許可します。

{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Sid": "AllowPushPull",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::account-id:root"
            },
            "Action": [
                "ecr:GetDownloadUrlForLayer",
                "ecr:BatchGetImage",
                "ecr:BatchCheckLayerAvailability",
                "ecr:PutImage",
                "ecr:InitiateLayerUpload",
                "ecr:UploadLayerPart",
                "ecr:CompleteLayerUpload"
            ]
        }
    ]
}

5.    タスク定義で、Amazon ECS で使用するイメージを設定します。イメージは、プライマリアカウントの Amazon ECR リポジトリでホストされます。

セカンダリアカウントから一時的な Docker 認証トークンを生成し、テストプッシュまたはプルを実行する

注: AWS Command Line Interface (AWS CLI) コマンドの実行中にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください

セカンダリアカウントは、12 時間有効な一時的な認証トークンを受け取るまで、リポジトリでポリシーアクションを実行できません。トークンを使用すると、セカンダリアカウントは、プライマリアカウントのリポジトリに対して Docker プッシュおよびプルコマンドを使用できます。get-login-password コマンドは、認証トークンを取得してデコードし、docker login コマンドにパイプして認証することができます。

注意: トークンを取得するアカウントには、リポジトリを変更するには、関連する AWS Identify and Access Management (IAM) API のアクセス許可が必要です。例については、Amazon ECR 管理ポリシーを参照してください。Docker 関連の問題をトラブルシューティングするには、Docker デーモンでデバッグモードを有効にしてください。このコマンドは、最新バージョンの AWS CLI バージョン 2 または AWS CLI バージョン 1 の v1.17.10 以降でサポートされます。詳細については、「get-login-password」を参照してください。

1.    Amazon ECS の外部にイメージをプッシュおよびプルするアカウントの Docker 認証トークンを生成するには、次のコマンドを実行します。aws_account_id をプライマリアカウント ID に置き換え、regionID を使用している リージョン ID に置き換えます。

AWS CLI を使用して、以下を実行します。

aws ecr get-login-password --region regionID | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.regionID.amazonaws.com

AWS Tools for Windows PowerShell を使用して、以下を実行します。

(Get-ECRLoginCommand).Password | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.regionID.amazonaws.com

次の出力が表示されます。

aws ecr get-login-password --region ap-south-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.ap-south-1.amazonaws.com
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store
    
Login Succeeded

2.    プライマリアカウントへのテストイメージのプルまたはプッシュを実行します。


この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?