このトピックでは、Container Registry (ACR)、Key Management Service (KMS)、Security Center、および kritis-validation-hook コンポーネントを使用してコンテナイメージの署名を自動的に検証する方法について説明します。このプラクティスにより、信頼できる認証局によって署名されたコンテナイメージのみをデプロイすることが保証され、環境内の偶発的または悪意のあるコードのリスクを低減できます。
前提条件
ステップ 1: kritis-validation-hook コンポーネントをインストールする
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、管理するクラスターを見つけて、その名前をクリックします。左側のナビゲーションウィンドウで、[アドオン] をクリックします。
[アドオン] ページの [セキュリティ] タブで、[kritis-validation-hook] コンポーネントを見つけて、[インストール] をクリックします。
kritis-validation-hook コンポーネントに必要な権限を付与します。
kritis-validation-hook を実行するための権限をクラスターに付与する必要があります。詳細については、「リソースへのアクセス権限の設定」をご参照ください。
ステップ 2: コンテナイメージ署名用の KMS キーを作成する
カスタマーマスターキー (CMK) を作成します。詳細については、「キーの管理」をご参照ください。
キーを作成する際には、[キー仕様] を RSA_2048 に、[目的] を Sign/Verify に設定します。
ステップ 3: Security Center で KMS キーを使用する証明者を設定する
Security Center コンソールにログインします。
左側のナビゲーションウィンドウで、 を選択します。
[証明者] タブで、[証明者の作成] をクリックします。設定を完了し、[OK] をクリックします。
設定項目
注意
証明者名
コンテナイメージ署名のセキュリティポリシーを設定する際、ターゲットコンテナに信頼された権限を付与するために証明者が必要です。証明者のわかりやすい名前を入力します。
証明書の選択
証明書リストから作成した KMS キーを選択します。
説明
証明者の説明を入力します。
ステップ 4: ACR でコンテナイメージの自動署名を有効にする
Container Registry コンソールにログインします。
上部のナビゲーションバーで、リージョンを選択します。
左側のナビゲーションウィンドウで、[インスタンス] をクリックします。
[インスタンス] ページで、対象の Enterprise 版インスタンスの名前または [管理] をクリックします。
説明Enterprise 版インスタンスを追加するには、[Enterprise 版インスタンスの作成] をクリックし、[インスタンスタイプ] を [Premium Edition] に設定します。
Enterprise 版インスタンス管理ページの左側のナビゲーションウィンドウで、 を選択します。
名前空間を作成し、その名前空間内のイメージに対してイメージ署名を有効にする必要があります。詳細については、「名前空間の管理」をご参照ください。
作成した名前空間に対してコンテナイメージの自動署名を有効にします。
署名ルールを追加する際、ステップ 3 で Security Center に作成した証明者を選択します。
左側のナビゲーションウィンドウで、 を選択します。
[イメージ署名] タブで [署名ルールの追加] をクリックします。
イメージ署名ルールの設定方法の詳細については、「自動イメージ署名ルールの設定」をご参照ください。
ステップ 5: Security Center でコンテナイメージ署名検証を有効にする
Security Center でポリシーを追加して有効にすることで、Kubernetes クラスターの名前空間に対してコンテナイメージ署名検証を有効にします。
Security Center コンソールにログインします。
左側のナビゲーションウィンドウで、 を選択します。
[セキュリティポリシー] タブで、[ポリシーの追加] をクリックします。ポリシーを設定し、[OK] をクリックします。
設定項目
注意
ポリシー名
署名セキュリティポリシーを設定する際、ターゲットクラスターに信頼された権限を付与するために証明者を選択する必要があります。
わかりやすい名前を入力してください。
証明者
証明者リストから作成した証明者を選択します。
アプリケーションクラスター
コンテナイメージ署名用のクラスターグループをクリックします。次に、ターゲットの [クラスター名前空間] を選択します。
ポリシーの有効化
スイッチをオンにします。ポリシーは作成後に自動的に有効になります。
説明ポリシーはデフォルトで無効になっています。無効なポリシーは有効になりません。
備考
セキュリティポリシーの説明を入力します。
ステップ 6: コンテナイメージ署名の自動検証機能を検証する
イメージタグの不変性が有効になっていない場合、ダイジェスト形式を使用するようにイメージ参照を設定する必要があります。詳細については、「イメージタグの不変性を有効にする」をご参照ください。
次のコマンドを実行して、コンテナイメージ署名の自動検証機能を検証します。
署名検証が有効になっているデフォルトの名前空間で、署名されていないコンテナイメージのデプロイが拒否されることを確認します。
タグでイメージを指定するには、次のコマンドを実行します:
kubectl -n default create deployment not-sign --image=alpine:3.11 -- sleep 10Error 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 10Error from server: admission webhook "kritis-validation-hook-deployments.grafeas.io" denied the request: image alpine@sha256:ddba4d27a7ffc3f86dd6c2f92041af252a1f23a8e742c90e6e1297bfa1bc0c45 is not attested自動署名が有効になっている Container Registry の名前空間にイメージをプッシュします。次に、この署名済みコンテナイメージを使用してサービスをデプロイできることを確認します。
docker push kritis-demo***.cn-hongkong.cr.aliyuncs.com/kritis-demo***/alpine:3.11The 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 10deployment.apps/is-signed created
リファレンス
kritis-validation-hook の詳細については、「kritis-validation-hook コンポーネントの概要」をご参照ください。
kritis-validation-hook コンポーネントのリリースノートについては、「kritis-validation-hook」をご参照ください。