

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon ECR でイメージに署名する
<a name="image-signing"></a>

Amazon ECR は と統合 AWS Signer され、マネージド署名 (自動、推奨) と*手動**署名* (クライアント側) の 2 つの方法でコンテナイメージに署名できます。コンテナイメージと署名の両方をプライベートのリポジトリに保存することができます。

## 署名方法を選択する
<a name="image-signing-choose-method"></a>

Amazon ECR は、コンテナイメージに署名するための 2 つの方法をサポートしています。

**マネージド署名** (推奨)  
マネージド署名は、イメージが Amazon ECR にプッシュされると、暗号化署名を自動的に生成します。この方法により、セットアップが簡素化されます。マネージド署名は、ほとんどのユーザーに推奨されるアプローチです。詳細については、「[マネージド署名](managed-signing.md)」を参照してください。

**手動署名**  
手動署名では、Notation CLI と AWS Signer プラグインを使用してイメージに署名してから、Amazon ECR にプッシュします。この方法では、署名プロセスをより詳細に制御でき、プッシュワークフローの外部でイメージに署名する必要がある場合や、署名オペレーションをきめ細かく制御する必要がある場合に便利です。詳細については、「[手動署名](image-signing-manual.md)」を参照してください。

## 考慮事項
<a name="image-signing-considerations"></a>

Amazon ECR イメージ署名を使用する場合は、次の点を考慮する必要があります。
+ リポジトリに保存されている署名は、リポジトリあたりの最大イメージ数のサービスクォータカウントされます。各署名は、リポジトリクォータごとにイメージに対して 1 つのアーティファクトとしてカウントされます。詳細については、「[Amazon ECR のサービスクォータ](service-quotas.md)」を参照してください。
+ リポジトリにリファレンスアーティファクトが存在する場合、Amazon ECR ライフサイクルポリシーは、サブジェクトイメージの削除から 24 時間以内にそれらのアーティファクトを自動的にクリーンアップします。

# マネージド署名
<a name="managed-signing"></a>

Amazon ECR マネージド署名は、イメージが Amazon ECR にプッシュされたときに [AWS Signer](https://docs.aws.amazon.com/signer/latest/developerguide/Welcome.html) を使用して暗号化署名を生成することで、コンテナイメージを自動的に署名します。これにより、クライアント側のツールをインストールして設定する必要がなくなり、レジストリ設定として署名を一元管理できます。

## 前提条件
<a name="managed-signing-prerequisites"></a>

マネージド署名を設定するには、1 つ以上の Signer 署名プロファイルを参照する Amazon ECR を使用して署名設定を作成し、オプションで、イメージに署名するリポジトリを制限するリポジトリフィルターを作成します。設定すると、Amazon ECR マネージド署名は、イメージをプッシュするエンティティの ID を使用してプッシュされるときに、イメージに自動的に署名します。

マネージド署名を設定する前に、以下が必要です。
+ **署名者署名プロファイル** — 少なくとも 1 つの署名者[署名プロファイル](https://docs.aws.amazon.com/signer/latest/developerguide/signing-profiles.html)を作成します。署名プロファイルは、Amazon ECR で署名オペレーションを実行するために使用できる一意の AWS Signer リソースです。署名プロファイルを使用すると、コンテナイメージや AWS Lambda デプロイバンドルなどのコードアーティファクトに署名して検証できます。各署名プロファイルは、署名する署名プラットフォーム、プラットフォーム ID、およびその他のプラットフォーム固有の情報を指定します。たとえば、署名プロファイル ARN は次のようになります: `arn:partition:signer:region:account-id:/signing-profiles/profile-name`。
+ **IAM アクセス許可** — イメージをプッシュする IAM プリンシパルには、関連する Signer 署名プロファイルおよび関連する ECR リポジトリにアクセスするために必要な IAM アクセス許可が必要です。IAM プリンシパルのアイデンティティベースのポリシーを変更して、ECR リポジトリオペレーションと署名者署名オペレーションの両方のアクセス許可を含める必要があります。次のポリシー例は、必要なアクセス許可を示しています。

```
{
   "Version": "2012-10-17",		 	 	 
   "Statement": [
   {
       "Sid":"UploadSignaturePermissions",
       "Effect":"Allow",
       "Action":[
           "ecr:CompleteLayerUpload",
           "ecr:UploadLayerPart",
           "ecr:InitiateLayerUpload",
           "ecr:BatchCheckLayerAvailability",
           "ecr:PutImage"
       ],
       "Resource":"arn:aws:ecr:region:account-id:repository/repository-name"
   },
   {
       "Sid": "SignPermissions",
       "Effect": "Allow",
       "Action": [
           "signer:SignPayload"
       ],
       "Resource": "arn:aws:signer:region:account-id:/signing-profiles/signing-profile-name"
   }
   ]
}
```

Amazon ECR マネージド署名を使用すると、複数の署名ルール (レジストリあたり最大 10 個) を作成して、より強力なセキュリティ境界を作成できます。たとえば、複数のビルドパイプラインを実行し、各パイプラインが署名できるリポジトリを制限できます。各ルール内で、署名プロファイルを設定し、リポジトリ名フィルターを指定します。新しいイメージがプッシュされると、Amazon ECR はイメージに署名できる署名ルールと署名プロファイルに一致します。複数の一致がある場合、Amazon ECR は複数の署名を生成します。

**注記**  
署名を手動で検証しても、Notation CLI をインストールする必要があります。

**注記**  
Amazon ECR マネージド署名は、 AWS Signer を使用したコンテナイメージ署名が利用可能なすべての AWS リージョンで使用できます。

## 開始方法
<a name="managed-signing-getting-started"></a>

マネージド署名を設定するには、次の手順に従います。署名者署名プロファイルへの参照を Amazon ECR に提供し、オプションで、イメージに署名するリポジトリを制限するフィルターを指定します。

------
#### [ AWS マネジメントコンソール ]

を使用してマネージド署名を設定するには、次の手順に従います AWS マネジメントコンソール。

1. [ Amazon ECR コンソール](https://console.aws.amazon.com/ecr/private-registry/repositories)を開きます。左側のナビゲーションペインで、**プライベートレジストリ**、**機能と設定**、**マネージド署名**を選択します。

1. **ルールの署名**ページで、**ルールの作成**を選択します。

1. **署名プロファイルページの****「署名者プロファイルの選択 AWS **」で、**「新しい AWS 署名者プロファイルの作成**」を選択し、**プロファイル名**を入力し、オプションで**署名の有効期間**を変更します。**[次へ]** を選択します。

1. **「フィルター**」ページの**「リポジトリの選択**」の下に、**リポジトリ名フィルター**を入力します。**[次へ]** を選択します。

1. **確認と作成**ページで、入力した**AWS 署名者プロファイル**と**リポジトリ名フィルター**を確認します。すべて正しい場合は、**保存** を選択します。

------
#### [ AWS CLI ]

マネージド署名を設定するには、次の AWS CLI コマンドを使用します。
+ **署名ルールを作成する**

  署名プロファイル ARN を使用して署名設定を作成します。次の内容を含む JSON ファイルを作成します。

  ```
  {
      "rules": [ 
          { 
              "signingProfileArn": "arn:aws:signer:region:account-id:/signing-profiles/profile-name",
              "repositoryFilters": [ 
                  { 
                      "filter": "test*",
                      "filterType": "WILDCARD_MATCH"
                  }
              ]
          }
      ]
  }
  ```

  次に、以下のコマンドを実行します。

  ```
  aws ecr --region region \
      put-signing-configuration \
      --signing-configuration file://signing-config.json
  ```

  署名設定を含む API レスポンスが表示されます。
+ **署名設定を表示する**

  署名設定を取得します。

  ```
  aws ecr --region region \
      get-signing-configuration
  ```

  署名設定を含む API レスポンスが表示されます。
+ **イメージ署名ステータスを確認する**

  イメージをリポジトリにプッシュします。例えば、次のようになります。

  ```
  docker pull ubuntu
  
  IMAGE_NAME="account-id.dkr.ecr.region.amazonaws.com/repository-name"
  IMAGE_TAG="${IMAGE_NAME}:test-1"
  
  docker tag ubuntu $IMAGE_TAG
  docker push $IMAGE_TAG
  ```

  プッシュしたら、イメージタグを使用して署名ステータスを確認します。

  ```
  aws ecr --region region \
      describe-image-signing-status \
      --repository-name repository-name \
      --image-id imageTag=test-1
  ```

  リポジトリ名が署名設定で定義されたリポジトリフィルターと一致する場合、API レスポンスに署名ステータスが表示されます。ステータスが成功すると、署名がリポジトリにプッシュされます。
+ **署名設定を削除する**

  署名設定を削除します。

  ```
  aws ecr --region region \
      delete-signing-configuration
  ```

  削除された署名設定を含む API レスポンスが表示されます。

------

## 考慮事項
<a name="managed-signing-considerations"></a>

マネージド署名には、次の制限と機能が適用されます。
+ **クロスリージョン署名はサポートされていません** — 署名プロファイルは Amazon ECR レジストリと同じリージョンにある必要があります。あるリージョンの署名プロファイルを使用して、別のリージョンにあるレジストリ内のイメージに署名することはできません。
+ **クロスアカウント署名がサポートされています** — 署名プロファイルは、Amazon ECR レジストリとは異なるアカウントに配置できます。これにより、組織は署名プロファイルを一元管理しながら、他のアカウントの開発者が使用できるようになります。詳細については、「 *AWS Signer デベロッパーガイド*[」の「署名者のクロスアカウント署名を設定する](https://docs.aws.amazon.com/signer/latest/developerguide/signing-profile-cross-account.html)」を参照してください。
+ **署名は署名できません** — 署名自体に署名することはできません。署名できるのはコンテナイメージのみです。

# 署名の検証
<a name="image-signing-verification"></a>

コンテナイメージに署名したら、署名を検証して、イメージが改ざんされておらず、信頼できるソースからのものであることを確認できます。Amazon ECR は、署名を検証するためのいくつかの方法をサポートしています。

## Amazon EKS によるマネージド検証
<a name="image-signing-verification-managed"></a>

Amazon EKS は、署名の自動検証のためのネイティブ統合を提供します。Amazon EKS クラスターで署名検証を設定すると、コンテナの実行を許可する前に、サービスによってイメージ署名が自動的に検証されます。署名検証の設定の詳細については、*「Amazon EKS ユーザーガイド*」の[「デプロイ中にコンテナイメージの署名を検証する](https://docs.aws.amazon.com/eks/latest/userguide/image-verification.html)」を参照してください。

## Amazon ECS 用の Lambda アドミッションコントローラー
<a name="image-signing-verification-lambda"></a>

Amazon ECS には、サービスのデプロイ中にカスタムロジックを実行できるようにするサービスライフサイクルフックが用意されています。これらのフックは、デプロイプロセスの特定の時点で AWS Lambda 関数をトリガーできるため、サービスの開始を許可する前にコンテナイメージの署名を検証できます。詳細については、「 *AWS Signer デベロッパーガイド*」の[「Amazon ECS のコンテナイメージ署名](https://docs.aws.amazon.com/signer/latest/developerguide/ecs-verification.html)の検証」を参照してください。

## Notation CLI による手動検証
<a name="image-signing-verification-manual"></a>

Notation CLI を使用して署名を手動で検証できます。この方法では、ローカルマシンまたは検証環境に Notation CLI をインストールして設定する必要があります。Notation CLI を使用してイメージを検証する詳細な手順については、「 *AWS Signer デベロッパーガイド*」の[「署名後にローカルでイメージ](https://docs.aws.amazon.com/signer/latest/developerguide/image-verification.html)を検証する」を参照してください。

## Notation クライアントの認証を設定する
<a name="image-signing-authentication"></a>

Notation CLI を使用して手動署名または署名を手動で検証する場合は、Amazon ECR に対して認証できるように Notation クライアントを設定する必要があります。Notation クライアントをインストールしたのと同じホストに Docker がインストールされている場合、Notation では Docker クライアントで使用されるのと同じ認証方法が再利用されます。Docker コマンド`login`と `logout` コマンドでは、Notation コマンド`sign`と `verify` コマンドが同じ認証情報を使用でき、Notation を個別に認証する必要はありません。Notation クライアントの認証設定の詳細については、Notary Project ドキュメントの「[Authenticate with OCI-compliant registries](https://notaryproject.dev/docs/user-guides/how-to/registry-authentication/)」を参照してください。

Docker や Docker 認証情報を使用するその他のツールを使用していない場合は、認証情報ストアとして Amazon ECR Docker 認証情報ヘルパーを使用することをお勧めします。Amazon ECR 認証情報ヘルパーのインストールと設定方法の詳細については、[「Amazon ECR Docker 認証情報ヘルパー」](https://github.com/awslabs/amazon-ecr-credential-helper)を参照してください。

# 手動署名
<a name="image-signing-manual"></a>

手動署名では、Notation CLI と AWS Signer プラグインを使用してイメージに署名してから、Amazon ECR にプッシュします。この方法では、署名プロセスをより詳細に制御でき、プッシュワークフローの外部でイメージに署名する必要がある場合や、署名オペレーションをきめ細かく制御する必要がある場合に便利です。

Notation CLI と を使用してコンテナイメージに署名する詳細な手順については AWS Signer、「 *AWS Signer デベロッパーガイド*」の[「Sign container images in Signer](https://docs.aws.amazon.com/signer/latest/developerguide/container-workflow.html)」および「関連トピック」を参照してください。

## 前提条件
<a name="image-signing-prerequisites"></a>

開始するには、以下の前提条件を満たしておく必要があります。
+  AWS CLIの最新バージョンがインストールされ、設定されている。詳細については、「*AWS Command Line Interface ユーザーガイド*」の「[AWS CLIの最新バージョンのインストールまたは更新](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)」を参照してください。
+ Notation CLI と Notation 用 AWS Signer プラグインをインストールします。詳細については、「AWS Signer デベロッパーガイド」の「[Prerequisites for signing container images](https://docs.aws.amazon.com/signer/latest/developerguide/image-signing-prerequisites.html)」を参照してください。
+ 署名するコンテナイメージを Amazon ECR プライベートリポジトリに保存します。詳細については、「[Amazon ECR プライベートリポジトリへのイメージのプッシュ](image-push.md)」を参照してください。