この文書は自動機械翻訳技術を使用して翻訳されています。 正確な翻訳を提供するように努めておりますが、翻訳された内容の完全性、正確性、信頼性については一切保証いたしません。 相違がある場合は、元の英語版 英語 が優先され、正式なテキストとなります。

これは未公開の文書です 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