Amazon Web Services ブログ

ECRレプリケーションを使用するECRリポジトリのKMS暗号化設定

はじめに

このブログ投稿では、イメージレプリケーションを使用する Amazon Elastic Container Registry (Amazon ECR) における AWS Key Management Service (AWS KMS) の設定方法を学ぶことができます。 リポジトリ設定は自動的にレプリケートされません。この記事に記載されている情報により、お客様の組織がセキュリティを最優先し、チームが使い慣れた AWS のツールやサービスを活用できるようになります。

コンプライアンスや規制上の懸念に敏感な環境のお客様は、可能な限り暗号化を有効にしたいと考えることがよくあります。企業は、転送中と保管中のデータを保護したいと考えており、コンテナイメージも例外ではありません。

AWS KMS と Amazon ECR のイメージレプリケーションにより、クラウド内で転送中のデータを保護しながら AWS リージョンまたは AWS アカウント間でイメージを転送でき、ビジネスの可用性を高めることができます。

アーキテクチャ

クロスリージョンレプリケーションの場合、ソリューションの図を以下に示します。

次の図は、クロスリージョンおよびクロスアカウントレプリケーションのソリューションを示しています。

ウォークスルー

読み終えるまでにかかる時間の目安 5 分
設定完了までにかかる時間の目安 10 分
コスト目安 1 か月あたり ~ 5 USD (2 つのリージョンにかかるコスト) AWS Calculator Estimate
学習レベル 中級 (200)
使用する AWS サービス Amazon Elastic Container Registry (ECR) と AWS Key Management Service (KMS)

AWS KMS 暗号化による Amazon ECR クロスリージョンレプリケーション

以下は、AWS KMS 暗号化が有効になっている 2 つの異なるリージョンにある 2 つの Amazon ECR リポジトリ間でレプリケーションを作成する例です。ステップの順序は非常に重要です。手順を順不同で実行しないでください。

プライマリリージョンで AWS KMS キーを作成する

  1. プライマリリージョン(例:バージニア北部) で AWS KMS コンソールを開きます。
  2. キーを作成を選択します。
  3. 対称キータイプを選択します。
  4. キーの使用は暗号化と復号化を選択します。
  5. 次へを選択します。
  6. AWS KMS キーのエイリアスを入力します。 (例:“ECRKMSKey”)
  7. 次へを選択します。
  8. キー管理者フィールドで、IAM ユーザーまたはロールを選択します。
  9. 次へを選択します。
  10. キーユーザーフィールドで、IAM ユーザーまたはロールを選択します。
    1. IAM ユーザーまたはロールが選択されていることを確認してください。これは Amazon ECR がコンテナイメージを暗号化および復号化するために必要です。
  11. 次へを選択します。
  12. 完了を選択します。

プライマリリージョンで Amazon ECR リポジトリを作成する

  1. プライマリリージョン(例:バージニア北部) で Amazon ECR コンソールを開きます。
  2. 使用方法を選択します。
  3. 可視性設定としてプライベートを選択します。
  4. リポジトリ名 (例:myrepo) を入力します。
  5. 暗号化設定セクションで、次の操作を行います。
    1. 暗号化を有効にします。
    2. 暗号化設定をカスタマイズする (高度) を選択します。
    3. 上記の手順で作成したキーを選択します。
  6. リポジトリを作成を選択します。

この時点で、AWS KMS 暗号化を有効にして Amazon ECR リポジトリが作成されました。Amazon ECR レプリケーションを有効にする前に、セカンダリリージョンに Amazon ECR リポジトリを作成します。

セカンダリリージョンで AWS KMS キーを作成する

  1. セカンダリリージョン(例:オレゴン) で AWS KMS コンソールを開きます。
  2. キーを作成を選択します。
  3. 対称キータイプを選択します。
  4. キーの使用は暗号化と復号化を選択します。
  5. 次へを選択します。
  6. AWS KMS キーのエイリアスを入力します。 (例:“ECRKMSKey”)
  7. 次へを選択します。
  8. キー管理者フィールドで、IAM ユーザーまたはロールを選択します。
  9. 次へを選択します。
  10. キーユーザーフィールドで、IAM ユーザーまたはロールを選択します。
    1. IAM ユーザーまたはロールが選択されていることを確認してください。これは Amazon ECR がコンテナイメージを暗号化および復号化するために必要です。
  11. 次へを選択します。
  12. 完了を選択します。

セカンダリリージョンで Amazon ECR リポジトリを作成する

  1. セカンダリリージョン(例:オレゴン) で Amazon ECR コンソールを開きます。
  2. 使用方法を選択します。
  3. 可視性設定としてプライベートを選択します。
  4. リポジトリ名 (例:myrepo) を入力します。
    1. プライマリリージョンと同じリポジトリ名を指定することが非常に重要です。プライマリリージョンとセカンダリリージョンのリポジトリ名が一致しない場合、レプリケーションは失敗します。
  5. 暗号化設定セクションで、次の操作を行います。
    1. 暗号化を有効にします。
    2. 暗号化設定をカスタマイズする (高度) を選択します。
    3. 前の手順で作成したキーを選択します。
  6. リポジトリを作成を選択します。

Amazon ECR リポジトリを他のリージョンにレプリケーションする場合は、プライマリリージョンで実施した手順をセカンダリージョンで繰り返します。

最後に、Amazon ECR レプリケーション設定を有効にします。

Amazon ECR レプリケーションを有効にする

  1. プライマリリージョン(例:バージニア北部) で Amazon ECR コンソールを開きます。
  2. ナビゲーションペインでプライベートレジストリを選択し、レプリケーション設定編集を押します。
  3. ルールを追加を選択します。
  4. リージョン間のレプリケーションには、クロスリージョンレプリケーションを選択します。
  5. 次へを選択します。
  6. 送信先リージョンはセカンダリのECRリポジトリを作成したリージョン(例:オレゴン)を選択します。
  7. 次へを選択します。
  8. フィルタを追加で、次の操作を行います。
    1. リポジトリ名 (例:myrepo) を入力します。作成したリポジトリ名と正確に一致する必要があります。
    2. 追加を選択します。
    3. 次へを選択します。
  9. ルールを送信を選択します。

(オプション) AWS KMS 暗号化を使用する Amazon ECR クロスアカウントレプリケーション

(オプション) クロスアカウントレプリケーションを有効にしたい場合は、セカンダリとなる送信先リージョンを別の AWS アカウントに設定して上記のすべての手順に従い、Amazon ECR レプリケーションを利用してクロスリージョンレプリケーションを作成する必要があります。 さらに、 Amazon ECR レプリケーションルールと送信先アカウントに権限を作成する必要があります。

(オプション)クロスアカウントレプリケーションルールを有効にする

  1. プライマリリージョン(例:バージニア北部) で Amazon ECR コンソールを開きます。
  2. ナビゲーションペインでプライベートレジストリを選択し、レプリケーション設定編集を押します。
  3. ルールを追加を選択します。
  4. アカウント間のレプリケーションには、クロスアカウントレプリケーションを選択します。
  5. 次へを選択します。
  6. 送信先アカウントはセカンダリのECRリポジトリを作成したアカウントを選択します。
  7. 送信先リージョンはセカンダリのECRリポジトリを作成したリージョンを選択します。
  8. 次へを選択します。
  9. フィルタを追加で、次の操作を行います。
    1. リポジトリ名 (例:myrepo) を入力します。作成したリポジトリ名と正確に一致する必要があります。
    2. 追加を選択します。
    3. 次へを選択します。
  10. ルールを送信を選択します。

(オプション)クロスアカウントレプリケーション権限を有効にする

  1. 別のAWSアカウントのセカンダリリージョン(例:オレゴン) で Amazon ECR コンソールを開きます。
  2. ナビゲーションペインでプライベートレジストリを選択し、許可編集を押します。
  3. ステートメントを生成を選択します。
  4. ポリシータイプで cross account replication policy を選択します
  5. ステートメント ID を入力します。(例:replication cross-account policy)
  6. アカウントセクションに、プライマリ Amazon ECR リポジトリがある AWS アカウント番号を入力します。
  7. ステートメントの保存を選択します。
  8. コンソールは、次のような JSON IAM ポリシーを自動生成します。
{
  "Sid": "ECRReplicationPermission",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::999999999999:root"
  },
  "Action": [
    "ecr:CreateRepository",
    "ecr:ReplicateImage"
  ],
  "Resource": "arn:aws:ecr:us-east-1:12345678901:repository/*"
}

最後に、プライマリアカウントの Amazon ECR リポジトリにイメージをプッシュすると、自動的にそのイメージがセカンダリアカウントの Amazon ECR にレプリケートされます。

CloudFormation による自動化

CloudFormation infrastructure-as-code(IaC)テンプレートをデプロイすることで、同じソリューションを実現できます。これらのテンプレートは GitHub リポジトリにあります。
このリポジトリには2つのソリューションが含まれています:

  • クロスリージョンレプリケーション(同一アカウント)
  • クロスリージョンおよびクロスアカウントレプリケーション

まとめ

このブログ投稿では、リージョンまたはアカウント間のイメージ転送において、 AWS KMS キーを使用して Amazon ECR に保存されているコンテナイメージの暗号化を有効にする方法について説明しました。
コンテナイメージを安全に転送するために、関連するコンポーネントと、それらがどのように連携して機能するかを確認しました。 さらに、説明した機能の自動化に成功し、独自のリージョンとアカウントでサービスを迅速に有効にできるようになりました。
この投稿について質問がある場合は、Containers | AWS re: Post フォーラムで新しいスレッドを開始してください。

この記事は Configuring KMS encryption at rest on ECR repositories with ECR replication (記事公開日: 2023年 1 月 31 日) を翻訳したものです。
翻訳はプロフェッショナルサービス本部 インフラストラクチャアーキテクトの島浦紳吾が担当しました。