Skip to content
Published on

Kyvernoイメージ検証: Sigstoreとサプライチェーンセキュリティ

Authors

1. verifyImagesルール概要

KyvernoのverifyImagesルールはコンテナイメージの署名とattestation(証明)を検証してサプライチェーンセキュリティを強化します。

apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: verify-images
spec:
  validationFailureAction: Enforce
  rules:
    - name: verify-signature
      match:
        any:
          - resources:
              kinds:
                - Pod
      verifyImages:
        - imageReferences:
            - 'ghcr.io/myorg/*'
          attestors:
            - entries:
                - keys:
                    publicKeys: |-
                      -----BEGIN PUBLIC KEY-----
                      ...
                      -----END PUBLIC KEY-----

2. Cosign署名検証

2.1 Keyless署名(Fulcio)

verifyImages:
  - imageReferences:
      - 'ghcr.io/myorg/*'
    attestors:
      - entries:
          - keyless:
              url: https://fulcio.sigstore.dev
              rekor:
                url: https://rekor.sigstore.dev
              subject: 'https://github.com/myorg/*'
              issuer: 'https://token.actions.githubusercontent.com'

2.2 KMS鍵

verifyImages:
  - attestors:
      - entries:
          - keys:
              kms: awskms:///arn:aws:kms:us-east-1:123456789:key/abc-123

3. Attestation検証

3.1 SLSA Provenance

verifyImages:
  - attestations:
      - type: https://slsa.dev/provenance/v1
        attestors:
          - entries:
              - keyless:
                  url: https://fulcio.sigstore.dev
        conditions:
          - all:
              - key: '{{ buildDefinition.buildType }}'
                operator: Equals
                value: 'https://slsa-framework.github.io/github-actions-buildtypes/workflow/v1'

4. SBOM検証

verifyImages:
  - attestations:
      - type: https://cyclonedx.org/bom/v1.4
        conditions:
          - all:
              - key: "{{ components[?name=='log4j-core'].version | [0] }}"
                operator: NotEquals
                value: '2.14.1'

5. イメージ変形

verifyImages:
  - imageReferences:
      - 'ghcr.io/myorg/*'
    mutateDigest: true # タグをダイジェストに自動変換
    required: true
    verifyDigest: true

6. まとめ

  1. cosign検証: 静的鍵、Keyless(Fulcio)、KMSサポート
  2. Attestation検証: in-toto、SLSA provenance条件ベースの検証
  3. SBOM検証: CycloneDX/SPDX attestation内の脆弱コンポーネント確認
  4. ダイジェスト変換: mutateDigestでイメージの不変性を保証
  5. 総合ポリシー: レジストリ制限 + タグポリシー + 署名検証の組み合わせ