このトピックでは、コンテナレジストリ、キー管理サービス (KMS)、セキュリティセンター、および kritis-validation-hook を使用して、コンテナイメージの署名を自動的に検証する方法について説明します。これにより、信頼できる機関によって署名されたコンテナイメージのみをデプロイできます。また、環境内で悪意のあるコードが実行されるリスクも軽減されます。
前提条件
セキュリティセンターが有効化されている。
サブスクリプション: セキュリティセンターを有効化する方法の詳細については、「セキュリティセンターの購入」をご参照ください。究極 [エディション] パラメーターで を選択します。
従量課金: セキュリティセンターを有効化する方法の詳細については、「機能の購入 (従量課金)」をご参照ください。[はい] [ホストとコンテナのセキュリティ] パラメーターを選択します。有効化後、少なくとも 1 つのサーバーの認証を完了します。詳細については、「クォータの管理」をご参照ください。
非対称暗号化アルゴリズムの KMS キーが作成されている。KMS キーの作成方法の詳細については、「キーの管理」をご参照ください。
重要コンテナ署名機能をサポートしているのは非対称キーアルゴリズムのみであるため、KMS キーを作成する際は、[キータイプ] を [RSA_2048] に、[キーの使用法] を [SIGN/VERIFY] に設定する必要があります。KMS キーアルゴリズムの詳細については、「キータイプ」をご参照ください。
手順 1: kritis-validation-hook をインストールする
ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけて、その名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
[アドオン] ページで、[セキュリティ] タブをクリックし、[kritis-validation-hook] コンポーネントを見つけて、[インストール] をクリックします。
kritis-validation-hook を実行するための権限をクラスターに付与します。
クラスターに kritis-validation-hook を実行するための権限を付与する必要があります。詳細については、「リソースにアクセスするためのクラスターを承認する」をご参照ください。
手順 2: KMS コンソールでイメージの署名に使用するキーを作成する
CMK の作成方法の詳細については、「キーの管理」をご参照ください。
キーを作成する際は、[キースペック] を [RSA_2048] に、[目的] を [署名/検証] に設定します。
手順 3: セキュリティセンターコンソールでキーを使用するウィットネスを作成する
セキュリティセンターコンソール にログインします。上部のナビゲーションバーで、管理するアセットのリージョンを選択します。中国 または 全世界 (中国を除く) を選択できます。
左側のナビゲーションウィンドウで、
を選択します。[ウィットネス] タブで、[ウィットネスの作成] をクリックします。構成が完了したら、[OK] をクリックします。
パラメーター
説明
[ウィットネス]
ウィットネスの名前を入力します。セキュリティポリシーを構成する際は、必要なコンテナのコンテナ署名機能を有効にするために、ウィットネスを選択する必要があります。わかりやすい名前を入力することをお勧めします。
[証明書の選択]
証明書リストから、作成した KMS CMK を選択します。
[説明]
ウィットネスの説明を入力します。
手順 4: コンテナレジストリでイメージ署名を有効にする
コンテナレジストリコンソール にログインします。
上部のナビゲーションバーで、リージョンを選択します。
左側のナビゲーションウィンドウで、[インスタンス] をクリックします。
[インスタンス] ページで、管理する Enterprise Edition インスタンスを見つけて、インスタンス名をクリックするか、[管理] をクリックします。
説明Enterprise Edition インスタンスを追加するには、[ACR EE の作成] をクリックし、[インスタンスタイプ] を [詳細設定] に設定します。
詳細ページの左側のナビゲーション ウィンドウで、 を選択します。
名前空間を作成し、名前空間内のイメージの Image Signing を有効にします。詳細については、「名前空間の管理」をご参照ください。
作成した名前空間にイメージ署名を有効にします。
署名ルールを作成する場合は、手順 3 で作成した監視者を選択します。
左側のナビゲーション ウィンドウで、 を選択します。
[イメージ署名] タブで、[署名ルールを作成] をクリックします。
詳細については、「イメージの自動署名のための署名ルールを構成する」をご参照ください。
手順 5:Security Center で署名検証を有効にする
名前空間の署名検証を有効にするには、Security Center コンソールでクラスターのセキュリティポリシーを追加して有効にします。
Security Center コンソール にログインします。 上部のナビゲーションバーで、管理するアセットのリージョンを選択します。 中国 または 全世界 (中国を除く) を選択できます。
左側のナビゲーションウィンドウで、
を選択します。[セキュリティポリシー] タブで、[ポリシーの追加] をクリックします。 パラメーターを設定した後、[OK] をクリックします。
パラメーター
説明
[ポリシー名]
セキュリティポリシーの名前を入力します。 セキュリティポリシーを設定する場合は、必要なクラスターのコンテナー機能を有効にするために、ウィットネスを選択する必要があります。
わかりやすい名前を入力することをお勧めします。
[ウィットネス]
ウィットネスリストから作成したウィットネスを選択します。
[アプリケーションクラスター]
コンテナー署名機能を有効にするクラスターグループを選択します。 次に、必要な [クラスター名前空間] を選択します。
[ポリシーの有効化]
スイッチをオンにします。 ポリシーは、作成後に自動的に有効になります。
説明スイッチはデフォルトでオフになっています。 この場合、ポリシーは作成後に有効になりません。
[メモ]
セキュリティポリシーの説明を入力します。
ステップ 6:署名検証が有効になっているかどうかを確認する
リポジトリがイミュータブルになるように構成されていない場合、ダイジェスト形式のイメージのみがサポートされます。リポジトリをイミュータブルに構成する方法の詳細については、「リポジトリをイミュータブルに構成する」をご参照ください。
次のコマンドを実行して、署名検証が有効になっているかどうかを確認します。
デフォルトの名前空間で署名検証が有効になっていると、署名されていないイメージを名前空間にデプロイすることはできません。
タグでイメージを指定するには、次のコマンドを実行します。
kubectl -n default create deployment not-sign --image=alpine:3.11 -- sleep 10
Error from server: admission webhook "kritis-validation-hook-deployments.grafeas.io" denied the request: image alpine:3.11 is not attested
ダイジェストでイメージを指定するには、次のコマンドを実行します。
kubectl -n default create deployment not-sign --image=alpine@sha256:ddba4d27a7ffc3f86dd6c2f92041af252a1f23a8e742c90e6e1297bfa1bc0c45 -- sleep 10
Error from server: admission webhook "kritis-validation-hook-deployments.grafeas.io" denied the request: image alpine@sha256:ddba4d27a7ffc3f86dd6c2f92041af252a1f23a8e742c90e6e1297bfa1bc0c45 is not attested
イメージ署名の署名が有効になっている名前空間にイメージをプッシュします。次に、イメージが署名された後にデプロイできることを確認します。
docker push kritis-demo***.cn-hongkong.cr.aliyuncs.com/kritis-demo***/alpine:3.11
The push refers to repository [kritis-demo***.cn-hongkong.cr.aliyuncs.com/kritis-demo***/alpine] 5216338b40a7: Pushed 3.11: digest: sha256:ddba4d27a7ffc3f86dd6c2f92041af252a1f23a8e742c90e6e1297bfa1bc0c45 size: 528
署名済みイメージのデプロイリクエストを受け入れるには、次のコマンドを実行します。
kubectl -n default create deployment is-signed --image=kritis-demo***.cn-hongkong.cr.aliyuncs.com/kritis-demo***/alpine@sha256:ddba4d27a7ffc3f86dd6c2f92041af252a1f23a8e742c90e6e1297bfa1bc0c45 -- sleep 10
deployment.apps/is-signed created
参考資料
kritis-validation-hook の詳細については、「kritis-validation-hook の概要」をご参照ください。
kritis-validation-hook のリリースノートの詳細については、「kritis-validation-hook」をご参照ください。