

# Amazon ECS での AWS 以外のコンテナイメージの使用
<a name="private-auth"></a>

プライベートレジストリを使用して認証情報を AWS Secrets Manager に保存し、タスク定義内で参照します。これは、タスク定義で認証が必要な AWS の外部にあるプライベートレジストリーに存在するコンテナイメージを参照できます。この機能は、Amazon ECS Anywhere を使用して Fargate、Amazon EC2 インスタンス、および外部インスタンスでホストされるタスクでサポートされています。

**重要**  
タスク定義で、Amazon ECR に保存されたイメージを参照している場合、このトピックは適用されません。詳細については、*Amazon Elastic Container Registry ユーザーガイド*の「[Amazon ECS で Amazon ECR イメージを使用する](https://docs.aws.amazon.com/AmazonECR/latest/userguide/ECR_on_ECS.html)」を参照してください。

Amazon EC2 インスタンスでホストされるタスクの場合は、この機能のためにコンテナエージェントのバージョン `1.19.0` 以降が必要です。ただし、最新のコンテナエージェントのバージョンを使用することをお勧めします。エージェントのバージョンの確認方法と最新バージョンへの更新方法については、「[Amazon ECS コンテナエージェントをアップデートする](ecs-agent-update.md)」を参照してください。

Fargate でホストされているタスクの場合、この機能にはプラットフォームバージョン `1.2.0` 以降が必要です。詳細については、「[Amazon ECS 向け Fargate プラットフォームバージョン](platform-fargate.md)」を参照してください。

コンテナの定義内で、作成したシークレットの詳細 で `repositoryCredentials` オブジェクトを指定します。参照されるシークレットは、タスクが使用するものと異なる AWS リージョン、または異なるアカウントに置くことができます。

**注記**  
Amazon ECS API、AWS CLI、または AWS SDK を使用しており、起動するタスクと同じ AWS リージョン にシークレットが存在する場合は、シークレットの完全な ARN または名前のどちらも使用可能です。シークレットが別のアカウントに存在する場合は、シークレットの完全な ARN を指定する必要があります。AWS マネジメントコンソール を使用する場合は、シークレットの完全な ARN を常に指定する必要があります。

必要なパラメータが含まれるタスク定義のスニペットを、以下に示します。

次のパラメータを置き換えます。
+ *private-repo* をプライベートリポジトリのホスト名に 
+ *private-image* をイメージ名に
+ *arn:aws:secretsmanager:region:aws\$1account\$1id:secret:secret\$1name* をシークレット Amazon リソースネーム (ARN) に

```
"containerDefinitions": [
    {
        "image": "private-repo/private-image",
        "repositoryCredentials": {
            "credentialsParameter": "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name"
        }
    }
]
```

**注記**  
プライベートレジストリ認証を有効にするもうひとつの方法として、Amazon ECS コンテナエージェントの環境変数を使用してプライベートレジストリを認証する方法があります。このメソッドは、Amazon EC2 インスタンスでホストされるタスクでのみサポートされています。詳細については、「[プライベート Docker イメージ用の Amazon ECS コンテナインスタンスを設定する](private-auth-container-instances.md)」を参照してください。

**プライベートレジストリを使用するには**

1. タスク定義にはタスク実行ロールが必要です。このロールを使用して、コンテナエージェントでコンテナイメージをプルできます。詳細については、「[Amazon ECS タスク実行IAM ロール](task_execution_IAM_role.md)」を参照してください。

   プライベートレジストリ認証を使用すると、Amazon ECS タスクは、認証情報を必要とする AWS の外部 (Docker Hub、Quay.io、独自のプライベートレジストリなど) のプライベートレジストリからコンテナイメージをプルすることができます。この機能は Secrets Manager を使用してレジストリ認証情報を安全に保存し、`repositoryCredentials` パラメータを使用してタスク定義で参照します。

   プライベートレジストリ認証の設定の詳細については、「[Amazon ECS での非 AWS コンテナイメージの使用](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/private-auth.html)」を参照してください。

   プライベートレジストリ認証情報を含むシークレットにアクセスできるようにするには、以下のアクセス許可を、インラインポリシーとしてタスクの実行ロールに追加します。詳細については、「[IAM ポリシーの追加と削除](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)」を参照してください。
   + `secretsmanager:GetSecretValue`— Secrets Manager からプライベートレジストリ認証情報を取得するために必要です。
   + `kms:Decrypt` – シークレットでカスタムの KMS キーを使用し、デフォルトのキーを使用しない場合にのみ必須です。カスタムキーの Amazon リソースネーム (ARN) は、リソースとして追加する必要があります。

   次の例では、インラインポリシーによりアクセス許可を追加しています。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "kms:Decrypt",
                   "secretsmanager:GetSecretValue"
               ],
               "Resource": [
                   "arn:aws:secretsmanager:us-east-1:111122223333:secret:secret_name",
                   "arn:aws:kms:us-east-1:111122223333:key/key_id"
               ]
           }
       ]
   }
   ```

------

1. プライベートレジストリ認証情報のシークレットを作成するには、AWS Secrets Manager を使用します。シークレットの作成方法について、詳細は「*AWS Secrets Manager ユーザーガイド*」の「[AWS Secrets Manager シークレットを作成する](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)」を参照してください。

   以下の形式でプライベートレジストリの認証情報を入力します。

   ```
   {
     "username" : "privateRegistryUsername",
     "password" : "privateRegistryPassword"
   }
   ```

1. タスク定義を登録する 詳細については、「[コンソールを使用した Amazon ECS タスク定義の作成](create-task-definition.md)」を参照してください。