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

最終更新日: 2020 年 9 月 28 日

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

簡単な説明

別のアカウントにある Amazon ECR リポジトリに対してイメージのプッシュまたはプルを行うには、セカンダリアカウントがそのリポジトリに対して API コールを実行できるようにするポリシーを作成する必要があります。許可を設定して、リポジトリ用のトークンを取得したら、許可されたアクションに基づいてイメージをプッシュまたはプルすることができます。トークンを取得するユーザーには、リポジトリを変更するための関連する AWS Identity and Access Management (IAM) API 許可も必要です。

解決方法

オプション A またはオプション B を選択します。

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

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

2.    変更したいリポジトリの名前を選択します。

3.    ナビゲーションメニューから [Permissions] を選択します。

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

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

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

{
    "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 で使用するイメージを設定します。イメージは、プライマリアカウントの ECR リポジトリでホストされます。

(オプションB) セカンダリアカウントから一時的な Docker 認証トークンを使用して、プライマリアカウントからイメージのテストプルを実行する

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

セカンダリアカウントは、12 時間有効な必須の一時的な認証トークンを受け取るまで、リポジトリでポリシーアクションを実行できません。このトークンは、セカンダリアカウントから生成されたトークンを使用して、プライマリアカウントリポジトリに Docker push および pull コマンドを使用できるようにします。AWS CLI get-login-password コマンドは、認証トークンを取得してデコードすることで、これを簡素化します。次に、このトークンは、docker login コマンドにパイプして認証できます。

1.    Amazon ECS 外でイメージをプッシュまたはプルするアカウントのための Docker 認証トークンを取得するには、プライマリアカウント ID を regionaws_account_id に置き換えて、次のコマンドを実行します。

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

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

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

(Get-ECRLoginCommand).Password | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.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.    プライマリアカウントへのテストイメージのプルまたはプッシュを実行します。

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


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


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