Container Registry は、指定された名前空間内のイメージに自動的に署名し、サプライチェーンを中間者 (MITM) 攻撃や不正なイメージ改ざんから保護します。イメージが Container Registry にプッシュされると、一致した署名ルールに基づいて署名が行われ、検証済みのイメージのみがご利用の環境で実行されるようになります。
前提条件
開始する前に、以下をご確認ください。
-
Container Registry Enterprise Edition インスタンス (アドバンストエディション) — イメージ署名にはアドバンストエディションが必要です。設定手順については、「Container Registry Enterprise Edition インスタンスの作成」をご参照ください。
-
Key Management Service (KMS) の有効化 — Key Management Service (KMS) は、イメージの署名に使用される非対称キーを提供します。設定手順については、「KMS の有効化」をご参照ください。
非対称キーの作成
イメージ署名では非対称キーアルゴリズムを使用します。キーの種類が EC または RSA で、用途が「署名/検証」に設定された KMS キーを作成します。
Container Registry への KMS キーへのアクセス権限の付与
Container Registry は、署名のために非対称キーを読み取る権限が必要です。このアクセスは、カスタムポリシーを持つ Resource Access Management (RAM) ロールを使用して設定します。
RAM ロールの作成
-
RAM コンソールにログインします。
-
左側のナビゲーションウィンドウで、[アイデンティティ] > [ロール] を選択します。
-
[ロール] ページで、[ロールの作成] をクリックします。
-
[ロールの作成] ページで、[プリンシパルタイプ] を [クラウドアカウント] に設定し、ご利用の Alibaba Cloud アカウントを指定してから、[OK] をクリックします。
-
[ロールの作成] ダイアログボックスで、[ロール名] を
AliyunContainerRegistryKMSRoleに設定し、[OK] をクリックします。
信頼ポリシーの更新
-
[ロール] ページで、
AliyunContainerRegistryKMSRoleを検索し、ロール名をクリックします。 -
[信頼ポリシー] タブをクリックし、次に [信頼ポリシーの編集] をクリックします。
-
ポリシーの内容を以下に置き換えてから、[OK] をクリックします。
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "cr.aliyuncs.com" ] } } ], "Version": "1" }
権限ポリシーの作成とアタッチ
-
RAM コンソールの左側のナビゲーションウィンドウで、[権限] > [ポリシー] を選択します。
-
[ポリシー] ページで、[ポリシーの作成] をクリックします。
-
[ポリシーの作成] ページで、[JSON] タブをクリックし、以下のポリシーを入力します。
${region}と${accountid}を実際のリージョンとアカウント ID に置き換えてください。{ "Statement": [ { "Effect": "Allow", "Action": [ "kms:*" ], "Resource": "acs:kms:${region}:${accountid}:*" } ], "Version": "1" } -
[OK] をクリックします。[ポリシーの作成] ダイアログボックスで、[ポリシー名] を
AliyunContainerRegistryKMSRolePolicyに設定し、[説明] を設定してから、[OK] をクリックします。 -
左側のナビゲーションウィンドウで、[アイデンティティ] > [ロール] を選択します。
AliyunContainerRegistryKMSRoleを見つけ、[操作] 列の [権限の追加] をクリックします。 -
[権限の追加] パネルで、ポリシータイプとして [カスタムポリシー] を選択し、
AliyunContainerRegistryKMSRolePolicyを見つけて選択してから、[OK] をクリックします。
証明者と署名検証ポリシーの設定
証明者は、ご利用の KMS キーを Container Registry の署名ワークフローにリンクします。オプションで、証明者を ACK クラスターに関連付けて、デプロイ時に署名検証を強制することもできます。
-
Cloud Security Center コンソールにログインします。
-
左側のナビゲーションウィンドウで、[保護設定] > [コンテナ保護] > [コンテナ署名] を選択します。[コンテナ署名] ページで、[証明者] タブをクリックし、次に [証明者の作成] をクリックします。
-
証明者を作成し、作成した KMS キーに関連付けます。これらのキーはイメージ署名に使用されます。
-
(オプション) 署名検証ポリシーを作成して、証明者を Container Service for Kubernetes (ACK) クラスターに関連付けます。詳細については、「コンテナ署名機能の使用」をご参照ください。
署名ルールの設定
署名ルールは、どのイメージがどのように署名されるかを定義します。ルールを作成すると、Container Registry は指定された名前空間にプッシュされるすべての新しいイメージに自動的に署名します。
署名ルールは、ルールの作成後にプッシュされたイメージにのみ適用されます。名前空間に既に存在するイメージは署名されません。
-
Container Registry コンソールにログインします。
-
上部のナビゲーションバーで、リージョンを選択します。
-
左側のナビゲーションウィンドウで、[インスタンス] をクリックします。
-
[インスタンス] ページで、管理したい Enterprise Edition インスタンスをクリックします。
-
左側のナビゲーションウィンドウで、[セキュリティと信頼] > [イメージ署名] を選択し、[署名ルールの作成] をクリックします。
-
[キー設定] ステップで、Cloud Security Center で作成した証明者を選択し、KMS キーに関連付けてから、[次へ] をクリックします。
-
[署名設定] ステップで、以下のパラメーターを設定し、[署名ルールの作成] をクリックします。
パラメーター 説明 アルゴリズム イメージの署名に使用されるアルゴリズム。有効な値:RSA_PSS_SHA_256 および RSA_PKCS1_SHA_256。 範囲 イメージが自動的に署名される名前空間。 [署名タイプ] デフォルト:イメージダイジェストとタグの両方に署名します。同一インスタンス内での署名検証に使用します。シンプル:イメージダイジェストのみに署名します (タグには署名しません)。タグが変更される可能性があるクロスインスタンスのイメージレプリケーションシナリオで使用します。 トリガーの種類 イメージ署名がどのようにトリガーされるか。デフォルト値は [自動トリガー] で、イメージが Container Registry にプッシュされるたびに署名します。
イメージ署名の検証
kritis-validation-hook を使用して、ACK クラスター内のコンテナイメージ署名を検証します。kritis-validation-hook は、署名検証が失敗した場合にイメージのデプロイを自動的にブロックできます。設定手順については、「kritis-validation-hook の概要」をご参照ください。
または、KMS の署名検証機能を使用して、Container Registry で直接イメージ署名を検証することもできます。
制限事項
| 制限事項 | 詳細 |
|---|---|
| 新しいイメージのみ | 署名ルールは、ルールの作成後にプッシュされたイメージにのみ適用されます。名前空間に既に存在するイメージは署名されません。 |
次のステップ
-
コンテナ署名機能の使用 — 署名検証ポリシーを設定して、ACK クラスターで署名済みイメージを強制します。
-
kritis-validation-hook の概要 — kritis-validation-hook をデプロイして、署名されていないイメージの実行を自動的にブロックします。