5.2.2. vaulttenantsaを使用するための前提条件
-
OpenShift Data Foundation クラスターは
Ready
状態である。 外部の鍵管理システム (KMS) で、以下を実行します。
- ポリシーが存在し、Vault のキー値のバックエンドパスが有効になっていることを確認します。詳細は、Enabling key value and policy in Vaultを参照してください。
- Vault サーバーで署名済みの証明書を使用していることを確認します。
以下のようにテナント namespace に以下の serviceaccount を作成します。
$ cat <<EOF | oc create -f - apiVersion: v1 kind: ServiceAccount metadata: name: ceph-csi-vault-sa EOF
Kubernetes の認証方法は、OpenShift Data Foundation が Vault を使用して認証し、開始する前に設定する必要があります。以下の手順では、OpenShift Data Foundation が Vault で認証できるように、
serviceAccount
、ClusterRole
、およびClusterRoleBinding
を作成し、設定します。以下の YAML を Openshift クラスターに適用します。
apiVersion: v1 kind: ServiceAccount metadata: name: rbd-csi-vault-token-review --- kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: rbd-csi-vault-token-review rules: - apiGroups: ["authentication.k8s.io"] resources: ["tokenreviews"] verbs: ["create", "get", "list"] --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: rbd-csi-vault-token-review subjects: - kind: ServiceAccount name: rbd-csi-vault-token-review namespace: openshift-storage roleRef: kind: ClusterRole name: rbd-csi-vault-token-review apiGroup: rbac.authorization.k8s.io
上記で作成された serviceaccount (SA) に関連付けられたシークレット名を特定します。
$ oc -n openshift-storage get sa rbd-csi-vault-token-review -o jsonpath="{.secrets[*]['name']}"
シークレットからトークンと CA 証明書を取得します。
$ oc get secret <secret associated with SA> -o jsonpath="{.data['token']}" | base64 --decode; echo $ oc get secret <secret associated with SA> -o jsonpath="{.data['ca\.crt']}" | base64 --decode; echo
OCP クラスターエンドポイントを取得します。
$ oc config view --minify --flatten -o jsonpath="{.clusters[0].cluster.server}"
上記の手順で収集した情報を使用して、以下に示すように Vault で kubernetes 認証方法を設定します。
$ vault auth enable kubernetes $ vault write auth/kubernetes/config token_reviewer_jwt=<SA token> kubernetes_host=<OCP cluster endpoint> kubernetes_ca_cert=<SA CA certificate>
テナント namespace の Vault にロールを作成します。
$ vault write "auth/kubernetes/role/csi-kubernetes" bound_service_account_names="ceph-csi-vault-sa" bound_service_account_namespaces=<tenant_namespace> policies=<policy_name_in_vault>
csi-kubernetes
は、OpenShift Data Foundation が Vault を検索するデフォルトのロール名です。Openshift Data Foundation クラスターのテナント namespace のデフォルトのサービスアカウント名はceph-csi-vault-sa
です。これらのデフォルト値は、テナント namespace に ConfigMap を作成して上書きできます。デフォルト名の上書きに関する詳細は、テナント ConfigMap を使用した Vault 接続の詳細の上書き を参照してください。
PV 暗号化の
vaulttenantsa
メソッドを使用する storageclass を作成するには、既存の ConfigMap を編集するか、Vault との接続を確立するのに必要なすべての情報を保持するcsi-kms-connection-details
という名前の ConfigMap を作成する必要があります。以下の yaml のサンプルを使用して、
csi-kms-connection-detail
ConfigMap を更新または作成できます。apiVersion: v1 data: vault-tenant-sa: |- { "encryptionKMSType": "vaulttenantsa", "vaultAddress": "<https://hostname_or_ip_of_vault_server:port>", "vaultTLSServerName": "<vault TLS server name>", "vaultAuthPath": "/v1/auth/kubernetes/login", "vaultAuthNamespace": "<vault auth namespace name>" "vaultNamespace": "<vault namespace name>", "vaultBackendPath": "<vault backend path name>", "vaultCAFromSecret": "<secret containing CA cert>", "vaultClientCertFromSecret": "<secret containing client cert>", "vaultClientCertKeyFromSecret": "<secret containing client private key>", "tenantSAName": "<service account name in the tenant namespace>" } metadata: name: csi-kms-connection-details
-
encryptionKMSType
: vault との認証にサービスアカウントを使用するには、vaulttenantsa
に設定する必要があります。 -
vaultAddress
: ポート番号のある vault サーバーのホスト名または IP アドレス。 -
vaultTLSServerName
: (オプション) vault TLS サーバー名 -
vaultAuthPath
: (オプション) Vault で kubernetes 認証メソッドが有効になっているパス。デフォルトのパスはkubernetes
です。auth メソッドがkubernetes
以外のパスで有効になっている場合は、この変数を"/v1/auth/<path>/login"
として設定する必要があります。 -
vaultAuthNamespace
: (オプション) kubernetes 認証メソッドが有効な Vault namespace -
vaultNamespace
: (オプション) キーの保存に使用されるバックエンドパスが存在する Vault namespace -
vaultBackendPath
: 暗号化キーが保存される Vault のバックエンドパス -
vaultCAFromSecret
: Vault からの CA 証明書が含まれる OpenShift Data Foundation クラスターのシークレット -
vaultClientCertFromSecret
: Vault からのクライアント証明書が含まれる OpenShift Data Foundation クラスターのシークレット -
vaultClientCertKeyFromSecret
: Vault のクライアント秘密鍵を含む OpenShift Data Foundation クラスターのシークレット -
tenantSAName
: (オプション) テナント namespace のサービスアカウント名。デフォルト値はceph-csi-vault-sa
です。別の名前を使用する場合は、この変数を適切に設定する必要があります。
-
次に、「PV 暗号化のストレージクラスを作成する手順」 に記載の手順を実行します。