|
この文書は自動機械翻訳技術を使用して翻訳されています。 正確な翻訳を提供するように努めておりますが、翻訳された内容の完全性、正確性、信頼性については一切保証いたしません。 相違がある場合は、元の英語版 英語 が優先され、正式なテキストとなります。 |
|
これは未公開の文書です Admission Controller 1.34-dev. |
検証設定フォーマット
概要
次の`verification-config`フォーマットを使用できます:
-
`policy-server`ポリシーモジュールの来歴を確認するための
-
`verify-image-signatures`クラスターイメージの来歴を確認するためのポリシー
詳細については、安全なサプライチェーンを参照してください。
Format
この設定には2つのルートキーがあります:
-
allOf:コンテナイメージを署名済みとして確認するために、ここに記載されているすべての検証情報を満たす必要があります。 -
anyOf:コンテナイメージを署名済みとして受け入れるには、すべてのリストされた検証情報のうち少なくとも`anyOf.minimumMatches`を満たす必要があります。
これらの2つのルートキーは、`kind`型のキーの配列を受け入れます。異なるユースケースに基づく受け入れられたキーの完全なリストは以下の通りです:
-
pubKey:従来の公開鍵/秘密鍵暗号化で行われた署名のため。 -
githubAction:GitHub Actions内でSigstoreのキーレスワークフローで行われた署名のため。Admission Controllerは、GitHubのOpenID Connectによって作成されたx509証明書拡張`workflow_repository`に対してこの情報を確認し、`issuer`と`subject`だけでなく、他の情報も確認します。GitHub Actionsを扱う場合は、この`kind`を使用するべきです。 -
genericIssuer:ユーザーが自分で証明書`issuer`と`subject`を検証する必要があるSigstoreのキーレスワークフローで行われた署名のため。これは`subject`を受け入れ、次のようになります:-
equal:ここに渡される値は、署名証明書の`subject`と正確に一致する必要があります。 -
urlPrefix:ここに渡される値は、タイプミスを防ぐために`/`で後置され、署名証明書の`subject`の接頭辞でなければなりません。
-
`kind`キーは、署名に存在しなければならないキー値のリストを持つオプションの`annotations`キーを受け入れます。
例
これは、Sigstoreワークフローを使用して署名を検証するための構成の例です。
---
apiVersion: v1
allOf:
- kind: githubAction
owner: kubewarden # mandatory
repo: policy-server # optional
annotations: # optional
env: prod
anyOf: # at least `+anyOf.minimumMatches+` are required to match
minimumMatches: 2 # default is 1
signatures:
- kind: pubKey
owner: alice # optional
key: | # mandatory
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEQiTy5S+2JFvVlhUwWPLziM7iTM2j
byLgh2IjpNQN0Uio/9pZOTP/CsJmXoUNshfpTUHd3OxgHgz/6adtf2nBwQ==
-----END PUBLIC KEY-----
annotations: # optional
env: prod
- kind: genericIssuer
issuer: https://github.com/login/oauth
subject:
equal: alice@example.com
- kind: genericIssuer
issuer: https://token.actions.githubusercontent.com
subject:
equal: https://github.com/bob/app-example/.github/workflows/release.yml@refs/heads/main
annotations: # optional
env: prod
- kind: genericIssuer
issuer: https://token.actions.githubusercontent.com
subject:
urlPrefix: https://github.com/bob # <- it will be post-fixed with `+/+` for security reasons
署名構成リファレンス
ファイルに含まれる署名要件を検証できます。例を展開します:
署名要件のファイル
apiVersion: v1
allOf:
- kind: githubAction
owner: kubewarden # mandatory
annotations:
env: prod
anyOf: # at least `+anyOf.minimumMatches+` are required to match
minimumMatches: 2 # default is 1
signatures:
- kind: pubKey
owner: flavio # optional
key: .... # mandatory
annotations: # optional
env: prod
foo: bar
- kind: pubKey
owner: victor # optional
key: .... # mandatory
- kind: genericIssuer
issuer: https://github.com/login/oauth
subject:
equal: alice@example.com
- kind: genericIssuer
issuer: https://token.actions.githubusercontent.com
subject:
equal: https://github.com/flavio/policy-secure-pod-images/.github/workflows/release.yml@refs/heads/main
- kind: genericIssuer
issuer: https://token.actions.githubusercontent.com
subject:
urlPrefix: https://github.com/flavio/
- kind: genericIssuer
issuer: https://token.actions.githubusercontent.com
subject:
urlPrefix: https://github.com/kubewarden # <- it will be post-fixed with `+/+` for security reasons
- kind: githubAction
owner: flavio # mandatory
repo: policy1 # optional
- kind: pubKey
owner: alice # optional
key: .... # mandatory
署名検証
前の構成には、`allOf`と`anyOf`の2つのセクションが含まれています:
-
allOf:すべての署名要件が有効な場合にのみ、ポリシーを信頼します。 -
anyOf:`minimumMatches`の基準が有効な場合にポリシーを信頼します。
この例では、`minimumMatches`フィールドは2です。したがって、少なくとも2つの署名要件を満たす必要があります。`minimumMatches`フィールドのデフォルト値は`1`です。
署名検証のためには、`allOf`からのすべての署名要件と、`anyOf`に記載された最小限の必要数を満たす必要があります。
公開鍵検証
ポリシーが正しい公開鍵署名を持っているかを確認するには、キーのデータとキーの所有者を指定します。この例では、`kind`を`pubKey`に設定し、`key`が公開鍵を持っています。所有者フィールドはオプションですが、誰がキーを所有しているかを明確にするのに役立ちます。
- kind: pubKey
owner: bob # optional
key: |
-----BEGIN PUBLIC KEY-----
MBFKHFDGHKIJH0CAQYIKoZIzj0DAQcDQgAEX0HFTtCfTtPmkx5p1RbDE6HJSGAVD
BVDF6SKFSF87AASUspkQsN3FO4iyWodCy5j3o0CdIJD/KJHDJFHDFIu6sA==
-----END PUBLIC KEY-----
キーなし署名検証
キーなしモードで署名されたポリシーには、検証できる公開鍵がありません。署名プロセス中に使用されたOpenID Connect (OIDC)データを使ってポリシーを検証することも可能です。そのためには、署名検証を`genericIssuer`として定義する必要があります。
署名から情報を確認することが可能です:
-
issuer(必須):これはFulcioによって生成された証明書の`Issuer`属性と一致します。これはポリシーに署名するために使用されたOIDCを示しています。 -
subject:Fulcioの証明書の`Subject`属性と一致させるために使用されるフィールドです。Subject(Fulcio)フィールドには、OIDCプロバイダーに対して認証に使用されたユーザーが含まれています。検証フィールド`subject`には、2つのサブフィールドのいずれかを持つことができます:-
equal:証明書の`Subject` (Fulcio)は、署名検証の値と等しくなければなりません; -
urlPrefix:証明書の`Subject` (Fulcio)フィールドの値は、署名検証で定義された値で接頭辞を付ける必要があります。
-
|
`cosign verify`と`kwctl inspect`の両方は、キーなし署名に関する情報を示すことができます。 |
例えば、この構成は、ポリシーがGitHub OIDCを使用してアリスからのキーレス署名を持つ必要があることを意味します:
- kind: genericIssuer
issuer: https://github.com/login/oauth
subject:
equal: alice@example.com
この構成は、GitHubユーザー`flavio`が所有するリポジトリからGitHub Actionsで署名されたポリシーを必要とします:
- kind: genericIssuer
issuer: https://token.actions.githubusercontent.com
subject:
urlPrefix: https://github.com/flavio
GitHub Actionsの署名検証
"kind"、`githubAction`はGitHub Actionsで署名されたポリシーを検証するためのものです。 これを`genericIssuer`のkindでも行うことができます。署名要件プロセスを簡素化するために、`githubAction`のために2つの追加フィールドを使用します:
-
owner(必須):信頼するユーザーまたは組織のGitHub ID。 -
repo:信頼するリポジトリの名前。
例えば、最後のスニペットは、`genericIssuer`を使用して次のように書き換えることができます。
- kind: githubAction
owner: flavio
署名注釈の検証
すべての署名タイプには、他のオプションの検証フィールド`annotations`が含まれる可能性があります。 これらのフィールドは、署名プロセス中に追加されるキー/値データです。
Admission Controllerを使用すると、ポリシー署名が信頼できるユーザーによるものであり、さらに特定の注釈が付与されていることを確認できます。
次の検証では、ポリシーに対して2つの条件をチェックします:
-
特定のキーで署名されていること
-
生産環境の注釈があること。
- kind: pubKey
key: |
-----BEGIN PUBLIC KEY-----
MBFKHFDGHKIJH0CAQYIKoZIzj0DAQcDQgAEX0HFTtCfTtPmkx5p1RbDE6HJSGAVD
BVDF6SKFSF87AASUspkQsN3FO4iyWodCy5j3o0CdIJD/KJHDJFHDFIu6sA==
-----END PUBLIC KEY-----
annotations:
environment: production
ポリシーOCIアーティファクトをチェックするための署名検証設定ファイルの使用
検証設定ファイルを使用して、ポリシーが検証に合格するかどうかをテストできます。`--verification-config-path`フラグを使用して、`kwctl verify`コマンドを実行します。
$ cat signatures_requirements.yaml
apiVersion: v1
allOf:
- kind: pubKey
key: |
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE5Q+cN1Jj2S7N05J4AXnqwP2DyzSg
Mc+raYce2Wthrd30MSgFtoh5ADAkCd/nML2Nx8UD9KBuASRb0gG5jXqgMQ==
-----END PUBLIC KEY-----
$ kwctl verify --verification-config-path signatures_requirements.yaml ghcr.io/kubewarden/policies/user-group-psp:latest
2022-03-29T17:34:37.847169Z INFO kwctl::verify: Policy successfully verified
この最後の例では、特定のポリシーがAdmission Controller組織から来たかどうかをテストします。
$ cat kubewarden_signatures.yaml
apiVersion: v1
allOf:
- kind: githubAction
owner: kubewarden
$ kwctl verify --verification-config-path kubewarden_signatures.yaml ghcr.io/kubewarden/policies/user-group-psp:latest
2022-03-29T18:07:39.062292Z INFO kwctl::verify: Policy successfully verified