2.4. Kubernetes 認証方式を使用した KMS でのクラスター全体の暗号化の有効化
キー管理システム (KMS) を使用して、クラスター全体の暗号化に対して Kubernetes 認証方式を有効にできます。
前提条件
- Vault への管理者アクセス。
- 有効な Red Hat OpenShift Data Foundation Advanced サブスクリプション。詳細は、OpenShift Data Foundation サブスクリプションに関するナレッジベースの記事 を参照してください。
- OpenShift Data Foundation Operator が Operator Hub からインストールされている。
-
バックエンド
pathとして一意のパス名を選択する。これは命名規則に厳密に準拠する必要があります。このパス名は後で変更できません。
手順
サービスアカウントを作成します。
$ oc -n openshift-storage create serviceaccount <serviceaccount_name>ここで、
<serviceaccount_name>はサービスアカウントの名前を指定します。以下に例を示します。
$ oc -n openshift-storage create serviceaccount odf-vault-authclusterrolebindingsとclusterrolesを作成します。$ oc -n openshift-storage create clusterrolebinding vault-tokenreview-binding --clusterrole=system:auth-delegator --serviceaccount=openshift-storage:_<serviceaccount_name>_以下に例を示します。
$ oc -n openshift-storage create clusterrolebinding vault-tokenreview-binding --clusterrole=system:auth-delegator --serviceaccount=openshift-storage:odf-vault-authserviceaccountトークンおよび CA 証明書のシークレットを作成します。$ cat <<EOF | oc create -f - apiVersion: v1 kind: Secret metadata: name: odf-vault-auth-token namespace: openshift-storage annotations: kubernetes.io/service-account.name: <serviceaccount_name> type: kubernetes.io/service-account-token data: {} EOFここで、
<serviceaccount_name>は、前の手順で作成したサービスアカウントです。シークレットからトークンと CA 証明書を取得します。
$ SA_JWT_TOKEN=$(oc -n openshift-storage get secret odf-vault-auth-token -o jsonpath="{.data['token']}" | base64 --decode; echo) $ SA_CA_CRT=$(oc -n openshift-storage get secret odf-vault-auth-token -o jsonpath="{.data['ca\.crt']}" | base64 --decode; echo)OCP クラスターエンドポイントを取得します。
$ OCP_HOST=$(oc config view --minify --flatten -o jsonpath="{.clusters[0].cluster.server}")サービスアカウントの発行者を取得します。
$ oc proxy & $ proxy_pid=$! $ issuer="$( curl --silent http://127.0.0.1:8001/.well-known/openid-configuration | jq -r .issuer)" $ kill $proxy_pid前の手順で収集した情報を使用して、Vault で Kubernetes 認証方法を設定します。
$ vault auth enable kubernetes$ vault write auth/kubernetes/config \ token_reviewer_jwt="$SA_JWT_TOKEN" \ kubernetes_host="$OCP_HOST" \ kubernetes_ca_cert="$SA_CA_CRT" \ issuer="$issuer"重要発行者が空の場合は Vault で Kubernetes 認証方法を設定します。
$ vault write auth/kubernetes/config \ token_reviewer_jwt="$SA_JWT_TOKEN" \ kubernetes_host="$OCP_HOST" \ kubernetes_ca_cert="$SA_CA_CRT"Vault で Key/Value (KV) バックエンドパスを有効にします。
Vault KV シークレットエンジン API の場合は、バージョン 1 を使用します。
$ vault secrets enable -path=odf kvVault KV シークレットエンジン API の場合は、バージョン 2 を使用します。
$ vault secrets enable -path=odf kv-v2シークレットに対して
writeまたはdelete操作を実行するようにユーザーを制限するポリシーを作成します。echo ' path "odf/*" { capabilities = ["create", "read", "update", "delete", "list"] } path "sys/mounts" { capabilities = ["read"] }'| vault policy write odf -ロールを作成します。
$ vault write auth/kubernetes/role/odf-rook-ceph-op \ bound_service_account_names=rook-ceph-system,rook-ceph-osd,noobaa \ bound_service_account_namespaces=openshift-storage \ policies=odf \ ttl=1440hロール
odf-rook-ceph-opは、後でストレージシステムの作成中に KMS 接続の詳細を設定するときに使用されます。$ vault write auth/kubernetes/role/odf-rook-ceph-osd \ bound_service_account_names=rook-ceph-osd \ bound_service_account_namespaces=openshift-storage \ policies=odf \ ttl=1440h
2.4.1. KMS 使用時の鍵のローテーションの有効化と無効化 リンクのコピーリンクがクリップボードにコピーされました!
一般的なセキュリティープラクティスでは、定期的な暗号鍵のローテーションが求められます。KMS を使用する場合、鍵のローテーションを有効または無効にできます。
2.4.1.1. キーローテーションの有効化 リンクのコピーリンクがクリップボードにコピーされました!
鍵のローテーションを有効にするには、PersistentVolumeClaims、Namespace、または StorageClass (優先順位の降順) に keyrotation.csiaddons.openshift.io/schedule: <value> アノテーションを追加します。
<value> は @hourly、@daily、@weekly、@monthly、または @yearly のいずれかになります。<value> が空の場合、デフォルトは @weekly になります。以下の例では @weekly を使用しています。
キーのローテーションは、RBD バックアップボリュームでのみサポートされます。
名前空間のアノテーション
$ oc get namespace default
NAME STATUS AGE
default Active 5d2h
$ oc annotate namespace default "keyrotation.csiaddons.openshift.io/schedule=@weekly"
namespace/default annotated
StorageClass のアノテーション
$ oc get storageclass rbd-sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
rbd-sc rbd.csi.ceph.com Delete Immediate true 5d2h
$ oc annotate storageclass rbd-sc "keyrotation.csiaddons.openshift.io/schedule=@weekly"
storageclass.storage.k8s.io/rbd-sc annotated
PersistentVolumeClaims のアノテーション
$ oc get pvc data-pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
data-pvc Bound pvc-f37b8582-4b04-4676-88dd-e1b95c6abf74 1Gi RWO default 20h
$ oc annotate pvc data-pvc "keyrotation.csiaddons.openshift.io/schedule=@weekly"
persistentvolumeclaim/data-pvc annotated
$ oc get encryptionkeyrotationcronjobs.csiaddons.openshift.io
NAME SCHEDULE SUSPEND ACTIVE LASTSCHEDULE AGE
data-pvc-1642663516 @weekly 3s
$ oc annotate pvc data-pvc "keyrotation.csiaddons.openshift.io/schedule=*/1 * * * *" --overwrite=true
persistentvolumeclaim/data-pvc annotated
$ oc get encryptionkeyrotationcronjobs.csiaddons.openshift.io
NAME SCHEDULE SUSPEND ACTIVE LASTSCHEDULE AGE
data-pvc-1642664617 */1 * * * * 3s
2.4.1.2. 鍵のローテーションの無効化 リンクのコピーリンクがクリップボードにコピーされました!
次の鍵のローテーションを無効にできます。
- ストレージクラスのすべての永続ボリューム要求 (PVC)
- 特定の PVC
ストレージクラスのすべての PVC の鍵ローテーションを無効にする
すべての PVC の鍵ローテーションを無効にするには、ストレージクラスのアノテーションを更新します。
$ oc get storageclass rbd-sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
rbd-sc rbd.csi.ceph.com Delete Immediate true 5d2h
$ oc annotate storageclass rbd-sc "keyrotation.csiaddons.openshift.io/enable: false"
storageclass.storage.k8s.io/rbd-sc annotated
特定の永続ボリューム要求の鍵ローテーションを無効にする
鍵のローテーションを無効にする PVC の
EncryptionKeyRotationCronJobCR を特定します。$ oc get encryptionkeyrotationcronjob -o jsonpath='{range .items[?(@.spec.jobTemplate.spec.target.persistentVolumeClaim=="<PVC_NAME>")]}{.metadata.name}{"\n"}{end}'<PVC_NAME>は、無効にする PVC の名前です。鍵のローテーションを無効にするには、前の手順の
EncryptionKeyRotationCronJobCR に以下を適用します。csiaddons.openshift.io/stateアノテーションをmanagedからunmanagedに更新します。$ oc annotate encryptionkeyrotationcronjob <encryptionkeyrotationcronjob_name> "csiaddons.openshift.io/state=unmanaged" --overwrite=trueここで、<encryptionkeyrotationcronjob_name> は
EncryptionKeyRotationCronJobCR の名前です。specフィールドの下にsuspend: trueを追加します。$ oc patch encryptionkeyrotationcronjob <encryptionkeyrotationcronjob_name> -p '{"spec": {"suspend": true}}' --type=merge.
- 保存して終了します。PVC の鍵のローテーションは無効になります。