新着情報:プロジェクトの最新情報はこちらで入手できますTwitterMastodon

cert-manager csi-driver-spiffeのインストール

インストール手順

1. cert-managerのインストール

csi-driver-spiffeはcert-managerのインストールを必要としますが、cert-managerのデフォルトインストールでは動作しません。

⚠️ cert-managerのデフォルト承認者を無効にすることが不可欠です。デフォルト承認者の無効化 ⚠️

デフォルト承認者を無効にしないと、csi-driver-spiffe承認者とcert-managerが競合し、ポリシー適用が無効になります。

ポリシー適用は、csi-driver-spiffeを安全に使用するために絶対に重要です。セキュリティに関する考慮事項セクションで詳細を確認してください。

インストール済みのcert-manager (v1.15.0以上)を自動承認者なしで実行するように再構成する例を示します。

# ⚠️ This Helm option is only available in cert-manager v1.15.0 and later.
existing_cert_manager_version=$(helm get metadata -n cert-manager cert-manager | grep '^VERSION' | awk '{ print $2 }')
helm upgrade cert-manager jetstack/cert-manager \
--reuse-values \
--namespace cert-manager \
--version $existing_cert_manager_version \
--set disableAutoApproval=true

2. Issuer/ClusterIssuerの設定

この手順は、ランタイム設定を使用する場合、延期できますが、podがcsi-driver-spiffeを使用してSVIDを取得するには、有効なissuerを設定する必要があります。

信頼ドメインでCertificateRequestリソースの署名に使用されるissuerをインストールまたは設定します。

名前空間スコープのissuerを使用する場合は、Podがボリュームをマウントするすべての名前空間に作成する必要があります。

カスタムURI SANを使用して証明書に署名できるIssuerタイプを使用する必要があります。ACME issuerは一般的に動作せず、SelfSigned issuerは適切ではありません。

例となるデモClusterIssuercsi-driver-spiffeリポジトリにあります。

⚠️ この信頼ドメインのルートCAはcert-managerによって生成され、秘密鍵はクラスタに保存されます!

これは、脅威モデルによっては本番環境への展開に適さない場合があります。

また、上記のデフォルト承認者を無効にしたため、cmctlを使用してCertificateRequestを承認します。

kubectl apply -f https://raw.githubusercontent.com/cert-manager/csi-driver-spiffe/ed646ccf28b1ecdf63f628bf16f1d350a9b850c1/deploy/example/clusterissuer.yaml
# We must also approve the CertificateRequest since we
# disabled the default approver
cmctl approve -n cert-manager \
$(kubectl get cr -n cert-manager -ojsonpath='{.items[0].metadata.name}')

3. csi-driver-spiffeのインストール

設定したissuerを使用して、csi-driver-spiffeをクラスタにインストールします。また、承認者が参照するCertificateRequestを承認する権限を持つように、設定したissuerのリソースタイプとissuerの名前を設定する必要があります。

ランタイム設定を使用するかどうかによって、インストール方法は多少異なります。ランタイム設定が推奨されます。

ランタイム設定を使用する場合

まず、使用するissuerの詳細を含むConfigMapをインストール名前空間に作成します。

podがcsi-driver-spiffeをマウントしようとするまで、issuerが存在する必要はありません。

ConfigMapの名前は、インストール時にcsi-driver-spiffeに渡されます。

kubectl create configmap -n cert-manager spiffe-issuer \
--from-literal=issuer-name=csi-driver-spiffe-ca \
--from-literal=issuer-kind=ClusterIssuer \
--from-literal=issuer-group=cert-manager.io
helm upgrade -i -n cert-manager cert-manager-csi-driver-spiffe jetstack/cert-manager-csi-driver-spiffe --wait \
--set "app.logLevel=1" \
--set "app.trustDomain=my.trust.domain" \
--set "app.issuer.name=" \
--set "app.issuer.kind=" \
--set "app.issuer.group=" \
--set "app.runtimeIssuanceConfigMap=spiffe-issuer"

上記の例では、デフォルトのissuer値(つまり、app.issuer.nameapp.issuer.kindapp.issuer.group)は明示的に空に設定されているため、ランタイム設定のみが使用されます。

ランタイム設定のConfigMapが無効または削除された場合に、そのissuerにフォールバックする場合は、デフォルトのissuer値を設定できます。

ランタイム設定を使用しない場合

issuer.nameissuer.kindissuer.groupを実際に使用しているissuerに合わせて変更する必要があることに注意してください。

helm repo add jetstack https://charts.jetstack.io --force-update
helm upgrade cert-manager-csi-driver-spiffe jetstack/cert-manager-csi-driver-spiffe \
--install \
--namespace cert-manager \
--wait \
--set "app.logLevel=1" \
--set "app.trustDomain=my.trust.domain" \
--set "app.issuer.name=csi-driver-spiffe-ca" \
--set "app.issuer.kind=ClusterIssuer" \
--set "app.issuer.group=cert-manager.io"

使用方法

📖 csi-driver-spiffe ドキュメントをお読みください。