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