このトピックでは、Container Registry (ACR)、Key Management Service (KMS)、Security Center、および kritis-validation-hook コンポーネントを使用して、コンテナイメージの署名を自動的に検証する方法について説明します。このプロセスにより、信頼できる権限から提供されたコンテナイメージのみをデプロイでき、環境に誤ってまたは悪意のあるコードが混入するリスクを軽減できます。
前提条件
-
Security Center が有効化されていること:
-
非対称暗号アルゴリズムを使用する KMS キーを作成します。詳細については、「キーの管理」をご参照ください。
重要コンテナ署名には非対称キーが必要です。KMS キーを作成する際は、キータイプ を RSA_2048 に、Key Usage を Sign/Verify に設定する必要があります。KMS キーアルゴリズムの詳細については、「Key Management Service の概要」をご参照ください。
-
ACR Enterprise Edition インスタンスを Advanced スペックで作成している必要があります。
手順 1:kritis-validation-hook のインストール
ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
クラスターリスト ページで、ご利用のクラスター名をクリックします。左側のナビゲーションウィンドウで、Components and Add-ons をクリックします。
-
アドオン管理 ページで、セキュリティ タブをクリックし、kritis-validation-hook を見つけて、インストール をクリックします。
-
kritis-validation-hook コンポーネントに必要な権限を付与します。
kritis-validation-hook コンポーネントを実行するために、クラスターに必要な権限が付与されていることを確認してください。詳細については、「リソースへのアクセス権限の設定」をご参照ください。
手順 2:イメージ署名用の KMS キーの作成
Customer Master Key (CMK) の作成手順については、「キーの管理」をご参照ください。
キーを作成する際は、キータイプ を RSA_2048 に、Key Usage を Sign/Verify に設定してください。
手順 3:Security Center での証明者の作成
-
Security Center コンソールにログインします。
-
左側のナビゲーションウィンドウで、 を選択します。
-
Witness タブで、Create Witness をクリックします。パラメーターを設定後、OK をクリックします。
Parameter
Description
証明者名
コンテナイメージの承認を行うためにセキュリティポリシーを設定する際に証明者が選択されます。識別しやすい名前を指定することを推奨します。
証明書の選択
証明書リストから、作成した KMS キーを選択します。
説明
証明者の説明を入力します。
手順 4:ACR での自動イメージ署名の有効化
Container Registry コンソールにログインします。
上部のナビゲーションバーでリージョンを選択します。
左側のナビゲーションウィンドウで、Instances をクリックします。
-
インスタンス ページで、Enterprise Edition インスタンスを見つけ、その名前をクリックするか、操作列の 管理 をクリックします。
説明Enterprise Edition インスタンスを作成するには、インスタンスの作成 をクリックします。仕様 が Advanced に設定されていることを確認してください。
-
インスタンス詳細ページの左側ナビゲーションウィンドウで、 を選択します。
名前空間を作成します。この名前空間内のすべてのコンテナイメージに対してイメージ署名を有効化できます。詳細については、「名前空間の基本操作」をご参照ください。
-
作成した名前空間に対して自動イメージ署名を有効化します。
署名ルールを追加する際は、手順 3 で Security Center に作成した証明者を選択してください。
-
インスタンス詳細ページの左側ナビゲーションウィンドウで、 を選択します。
-
イメージの署名 タブで、署名ルールの作成 をクリックします。
署名ルールの設定方法の詳細については、「自動イメージ署名のルール設定」をご参照ください。
-
手順 5:Security Center での署名検証の有効化
Security Center でセキュリティポリシーを作成・有効化し、特定の Kubernetes 名前空間に対してコンテナイメージ署名検証を強制します。
-
Security Center コンソールにログインします。
-
左側のナビゲーションウィンドウで、 を選択します。
-
セキュリティポリシー タブで、ポリシーの追加 をクリックします。ポリシーを設定後、OK をクリックします。
Parameter
Description
ポリシー名
セキュリティポリシーのわかりやすい名前を入力します。
Witness
作成した証明者を選択します。
Application Cluster
署名検証を有効化するクラスターグループをクリックし、対象の Cluster Namespace を選択します。
Policy Status
このオプションを有効化すると、ポリシーが即座に適用されます。
説明ポリシーはデフォルトで無効になっています。
Description
セキュリティポリシーの説明を入力します。
手順 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 -
自動署名が有効化されている ACR 名前空間にイメージをプッシュします。その後、署名済みコンテナイメージをワークロードとしてデプロイできることを確認します。
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」をご参照ください。