|
この文書は自動機械翻訳技術を使用して翻訳されています。 正確な翻訳を提供するように努めておりますが、翻訳された内容の完全性、正確性、信頼性については一切保証いたしません。 相違がある場合は、元の英語版 英語 が優先され、正式なテキストとなります。 |
|
これは未公開の文書です Admission Controller 1.34-dev. |
プライベートSigstoreインスタンスを使用するためのPolicyServersの設定
PolicyServerをプライベートまたは自己ホスト型のSigstoreインスタンスを使用するように設定できます。これにより、デフォルトの公共Sigstoreインフラストラクチャの代わりにポリシー署名検証が行えます。これは、エアギャップ(された)環境や独自のSigstoreデプロイメントを運用している場合に便利です。
前提条件
-
Fulcio、Rekor、TSA、およびCTログサービスにアクセス可能な稼働中のプライベートSigstoreインスタンス
-
`kubectl`の`kubewarden`ネームスペースへのアクセス
-
ローカルにインストールされたhttps://docs.sigstore.dev/cosign/system_config/installation/[
cosign] CLI。 -
ローカルにインストールされたhttps://jqlang.org/[
jq]
ステップ1 - ClientTrustConfig JSONを生成する
PolicyServerは、プライベートSigstoreインスタンスの信頼アンカーと署名設定を記述した`ClientTrustConfig` JSONを期待します。
証明書と公開鍵を取得する
プライベートSigstoreインスタンスから以下を取得します:
-
fulcio.pem- Fulcio CA証明書チェーン(PEM) -
rekor.pub- Rekor透明性ログ公開鍵 -
tsa.pem- タイムスタンプ認証局証明書チェーン(PEM) -
ctfe.pub- CTログ公開鍵
# Fulcio CA certificate chain
curl --fail -o fulcio.pem "${FULCIO_URL}/api/v1/rootCert"
# Rekor transparency log public key
curl --fail -o rekor.pub "${REKOR_URL}/api/v1/log/publicKey"
# Timestamp Authority certificate chain
curl --fail -o tsa.pem "${TSA_URL}/api/v1/timestamp/certchain"
# CT log public key (from the Kubernetes secret in tuf-system namespace)
kubectl get secret -o json -n tuf-system ctlog-public-key \
| jq -r ".data.public" | base64 -d > ctfe.pub
|
セキュリティ上の考慮事項
Sigstoreインスタンスから証明書とキーを安全にダウンロードしてください。そうしないと、SUSE Security Admission Controllerが改ざんされたデータで構成される可能性があります。 上記のコマンドは、テスト環境でそれを行う方法の例です。 この情報を正しく取得する方法を学ぶために、組織内の適切なチームに相談してください。 |
信頼されたルートと署名設定を生成します。
プライベートSigstoreサービスのURLを指す環境変数を設定します:
export FULCIO_URL=https://fulcio.example.com
export REKOR_URL=https://rekor.example.com
export TSA_URL=https://tsa.example.com
export CTLOG_URL=https://ctlog.example.com
export ISSUER_URL=https://oidc.example.com
信頼されたルートを生成するには、`cosign`を実行します:
cosign trusted-root create \
--fulcio="url=$FULCIO_URL,certificate-chain=fulcio.pem" \
--rekor="url=$REKOR_URL,public-key=rekor.pub,start-time=2024-01-01T00:00:00Z" \
--tsa="url=$TSA_URL,certificate-chain=tsa.pem" \
--ctfe="url=$CTLOG_URL,public-key=ctfe.pub,start-time=2024-01-01T00:00:00Z" \
--out trusted_root.json
署名設定を生成するには、`cosign`を実行します:
cosign signing-config create \
--fulcio="url=$FULCIO_URL,api-version=1,start-time=2024-01-01T00:00:00Z,operator=sigstore.dev" \
--rekor="url=$REKOR_URL,api-version=1,start-time=2024-01-01T00:00:00Z,operator=sigstore.dev" \
--rekor-config="ANY" \
--oidc-provider="url=$ISSUER_URL/auth,api-version=1,start-time=2024-01-01T00:00:00Z,operator=sigstore.dev" \
--tsa="url=$TSA_URL/api/v1/timestamp,api-version=1,start-time=2024-01-01T00:00:00Z,operator=sigstore.dev" \
--tsa-config="EXACT:1" \
--out signing_config.json
|
`--oidc-provider`はオプションです。プライベートSigstoreインスタンスに専用のOIDCプロバイダーがある場合のみ含めてください。ポリシーがKubernetesサービスアカウントトークン(`kubectl create token`経由)を使用して署名されている場合は、このフラグを省略してください。 `start-time`の値は、証明書が発行される前の日付(またはSigstoreインスタンスのデプロイ日)に設定する必要があります。 |
両方のコマンドのすべての利用可能なフラグとJSONフィールド定義の完全な説明については、https://docs.sigstore.dev/cosign/system_config/installation/[cosign CLIリファレンス]およびhttps://github.com/sigstore/protobuf-specs[Sigstoreクライアント信頼設定仕様]を参照してください。
ステップ2 - `kubewarden`ネームスペースにConfigMapを作成します。
ClientTrustConfig JSONをキー`sigstore-trust-config`を持つConfigMapに保存します。ConfigMap はアドミッションコントローラーのネームスペースに存在する必要があります。この例では`kubewarden`です:
kubectl --namespace kubewarden create configmap my-sigstore-trust-config \
--from-file=sigstore-trust-config=trust_config.json
ステップ3 - 検証設定ConfigMapを作成します。
署名されたポリシーの証明書のアイデンティティ制約を指定する`verification_config.yaml`ファイルを作成します。例えば、Kubernetesサービスアカウントトークンを使用する場合:
allOf:
- kind: genericIssuer
issuer: https://kubernetes.default.svc.cluster.local
subject:
equal: https://kubernetes.io/namespaces/<namespace>/serviceaccounts/<serviceaccount>
anyOf: null
<namespace>`と<serviceaccount>`をポリシー署名時に使用するネームスペースとサービスアカウントに置き換えてください。
ConfigMapを作成します:
kubectl --namespace kubewarden create configmap my-verification-config \
--from-file=verification-config=verification_config.yaml
|
ConfigMap キーは`verification-config`でなければなりません(ファイル名ではありません)。Admission Controllerはこの正確なキーを探します。 |
ステップ4 - PolicyServerを構成します
PolicyServerの`spec.sigstoreTrustConfig`と`spec.verificationConfig`を、作成したConfigMapの名前に設定します:
apiVersion: policies.kubewarden.io/v1
kind: PolicyServer
metadata:
name: default
spec:
image: ghcr.io/kubewarden/policy-server:latest
replicas: 1
sigstoreTrustConfig: my-sigstore-trust-config
verificationConfig: my-verification-config
コントローラーはConfigMapをポリシーサーバーポッドにマウントし、署名検証のためにプライベートSigstoreインスタンスを使用するように構成し、検証設定で指定されたアイデンティティ制約を強制します。
|
セキュリティ上の考慮事項
`sigstoreTrustConfig`によって参照されるConfigMapに書き込みアクセス権を持つユーザーは、ポリシー署名検証に影響を与えることができます。これにより、異なるSigstore信頼ルートを置き換え、署名チェックを回避することが可能になる場合があります。 Kubernetes RBACを使用してこのConfigMapへのアクセスを制限し、最小特権の原則に従ってください。 |