中間者攻撃(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 ロール名をクリックします。
[信頼ポリシー] タブをクリックし、[信頼ポリシーの編集] をクリックします。
コードエディタで信頼ポリシーを変更し、[OK] をクリックします。
{ "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] をクリックしてカスタムポリシーを追加します。
ウィットネスと署名検証ポリシーを設定する
Cloud Security Center コンソール にログインします。
左側のナビゲーションウィンドウで、[保護設定 > コンテナ保護 > コンテナ署名] を選択します。 [コンテナ署名] ページで、[ウィットネス] タブをクリックし、[ウィットネスの作成] をクリックしてウィットネスを作成し、作成した KMS キーに関連付けます。 KMS キーはイメージの署名に使用されます。
オプション。 署名検証ポリシーを作成して、ウィットネスを対応する Container Service for Kubernetes (ACK) クラスタに関連付けます。詳細については、「コンテナ署名機能を使用する」をご参照ください。
イメージの自動署名のための署名ルールを設定する
Container Registry コンソール にログインします。
上部のナビゲーションバーで、リージョンを選択します。
左側のナビゲーションウィンドウで、[インスタンス] をクリックします。
[インスタンス] ページで、管理する Enterprise Edition インスタンスをクリックします。
Container Registry Enterprise Edition インスタンスの管理ページで、左側のナビゲーションウィンドウの を選択します。 [署名ルールの作成] をクリックします。
[キーの設定] ステップで、Cloud Security Center コンソールで作成したウィットネスを選択し、KMS キーに関連付けます。 [次へ] をクリックします。
[署名設定] ステップで、パラメータを設定し、[署名ルールの作成] をクリックします。
説明署名ルールは、指定された名前空間にプッシュされた新しいイメージにのみ適用されます。既存のイメージは、署名ルールに基づいて署名されません。
アルゴリズム:イメージの署名に使用するアルゴリズム。有効な値:RSA_PSS_SHA_256 および RSA_PKCS1_SHA_256。
範囲:自動的に署名する必要があるイメージの範囲。名前空間を選択できます。
署名タイプ:
デフォルト:イメージダイジェストとタグが署名されます。デフォルトモードは、現在のインスタンスのイメージの署名検証に適用できます。
シンプル:イメージダイジェストのみが署名されます。イメージタグは署名されません。シンプルモードは、インスタンス間のイメージレプリケーションシナリオに適しています。イメージタグが変更されると、対応するイメージの署名が検証されます。
トリガータイプ:イメージ署名をトリガーするモード。デフォルト値は [自動トリガー] で、イメージが Container Registry にプッシュされるたびにイメージ署名が自動的にトリガーされることを示します。
イメージ署名を検証する
kritis-validation-hook を使用して、コンテナイメージの署名を検証します。詳細については、「kritis-validation-hook コンポーネントの概要」をご参照ください。
kritis-validation-hook を使用すると、ACK クラスタ内のイメージ署名を自動的に検証できます。イメージ署名の検証に失敗した場合にイメージのデプロイをブロックするポリシーを設定できます。この方法を使用することをお勧めします。
KMS の署名検証機能を使用して、Container Registry でイメージ署名を検証することもできます。