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 で認証できるように、serviceAccountClusterRole、および ClusterRoleBinding を作成し、設定します。

    1. 以下の 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
    2. 上記で作成された serviceaccount (SA) に関連付けられたシークレット名を特定します。

      $ oc -n openshift-storage get sa rbd-csi-vault-token-review -o jsonpath="{.secrets[*]['name']}"
    3. シークレットからトークンと 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
    4. OCP クラスターエンドポイントを取得します。

      $ oc config view --minify --flatten -o jsonpath="{.clusters[0].cluster.server}"
    5. 上記の手順で収集した情報を使用して、以下に示すように 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>
    6. テナント 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 暗号化のストレージクラスを作成する手順」 に記載の手順を実行します。