2.2. 永続ボリュームの暗号化のためのストレージクラス
永続ボリューム (PV) 暗号化は、テナント (アプリケーション) の分離および機密性を保証します。PV 暗号化を使用する前に、PV 暗号化のストレージクラスを作成する必要があります。永続ボリュームの暗号化は RBD PV の場合にのみ利用できます。
OpenShift Data Foundation は、HashiCorp Vault および Thales CipherTrust Manager での暗号化パスフレーズの保存をサポートしています。永続的なボリュームの暗号化のために、外部の鍵管理システム (KMS) を使用して、暗号化対応のストレージクラスを作成することができます。ストレージクラスを作成する前に、KMS へのアクセスを設定する必要があります。
PV 暗号化には、有効な Red Hat OpenShift Data Foundation Advanced サブスクリプションが必要です。詳細は、OpenShift Data Foundation サブスクリプションに関するナレッジベースの記事 を参照してください。
2.2.1. Key Management System (KMS) のアクセス設定 リンクのコピーリンクがクリップボードにコピーされました!
ユースケースに基づいて、次のいずれかの方法を使用して KMS へのアクセスを設定する必要があります。
-
vaulttokensの使用: ユーザーはトークンを使用して認証できるようになります。 -
Thales CipherTrust Managerの使用: Key Management Interoperability Protocol (KMIP) を使用します。 -
vaulttenantsaの使用: ユーザーがサービスアカウントを使用してVaultで認証できるようにします
2.2.1.1. vaulttokens を使用した KMS へのアクセス設定 リンクのコピーリンクがクリップボードにコピーされました!
前提条件
-
OpenShift Data Foundation クラスターは
Ready状態である。 外部の鍵管理システム (KMS) で、以下を行っている。
-
トークンのあるポリシーが存在し、
Vaultのキー値のバックエンドパスが有効になっていることを確認している。 -
Vaultサーバーで署名済みの証明書を使用していることを確認している。
-
トークンのあるポリシーが存在し、
手順
テナントの namespace にシークレットを作成します。
-
OpenShift Container Platform Web コンソールで、Workloads
Secrets に移動します。 -
Create
Key/value secret をクリックします。 -
Secret Name に
ceph-csi-kms-tokenと入力します。 -
Key に
tokenと入力します。 Value を入力します。
これは Vault のトークンです。Browse をクリックしてトークンが含まれるファイルを選択し、アップロードするか、テキストボックスにトークンを直接入力します。
- Create をクリックします。
トークンは、ceph-csi-kms-token を使用するすべての暗号化された PVC が削除された後にのみ削除できます。
2.2.1.2. Thales CipherTrust Manager を使用した KMS へのアクセスの設定 リンクのコピーリンクがクリップボードにコピーされました!
前提条件
KMIP クライアントが存在しない場合は作成します。ユーザーインターフェイスから、KMIP
Client Profile Add Profile を選択します。 -
プロファイルの作成中に、
CipherTrustのユーザー名を Common Name フィールドに追加します。
-
プロファイルの作成中に、
-
KMIP
Registration Token New Registration Token に移動してトークンを作成します。次のステップのためにトークンをコピーしておきます。 -
クライアントを登録するために、KMIP
Registered Clients Add Client に移動します。Name を指定します。前のステップの Registration Token を貼り付けて、Save をクリックします。 - Save Private Key と Save Certificate をクリックして、それぞれ秘密鍵とクライアント証明書をダウンロードします。
新しい KMIP インターフェイスを作成するために、Admin Settings
Interfaces Add Interface に移動します。 - KMIP Key Management Interoperability Protocol を選択し、Next をクリックします。
- 空いている Port を選択します。
- Network Interface は all を選択します。
- Interface Mode は TLS, verify client cert, user name taken from client cert, auth request is optional を選択します。
- (オプション) 物理削除を有効にして、鍵が削除されたときにメタデータとマテリアルの両方を削除できます。これはデフォルトでは無効になっています。
- 使用する CA を選択し、Save をクリックします。
- サーバー CA 証明書を取得するために、新しく作成されたインターフェイスの右側にあるアクションメニュー (⋮) をクリックし、Download Certificate をクリックします。
手順
storageclass 暗号化のキー暗号化キー (KEK) として機能するキーを作成するには、次の手順に従います。
-
Keys
Add Key に移動します。 - Key Name を入力します。
- Algorithm と Size をそれぞれ AES と 256 に設定します。
- Create a key in Pre-Active state を有効にして、アクティベーションの日時を設定します。
- Key Usage で Encrypt と Decrypt が有効になっていることを確認します。
- 新しく作成した鍵の ID をコピーして、デプロイメント中に一意の識別子として使用します。
-
Keys
2.2.1.3. vaulttenantsa を使用した KMS へのアクセスの設定 リンクのコピーリンクがクリップボードにコピーされました!
前提条件
-
OpenShift Data Foundation クラスターは
Ready状態である。 外部の鍵管理システム (KMS) で、以下を行っている。
- ポリシーが存在し、Vault のキー値のバックエンドパスが有効になっていることを確認している。
- Vault サーバーで署名済みの証明書を使用していることを確認している。
以下のようにテナント namespace に以下の serviceaccount を作成します。
$ cat <<EOF | oc create -f - apiVersion: v1 kind: ServiceAccount metadata: name: ceph-csi-vault-sa EOF
手順
OpenShift Data Foundation が Vault で認証して使用を開始する前に、Kubernetes 認証方法を設定する必要があります。以下の手順では、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.ioserviceaccount トークンおよび CA 証明書のシークレットを作成します。
$ cat <<EOF | oc create -f - apiVersion: v1 kind: Secret metadata: name: rbd-csi-vault-token-review-token namespace: openshift-storage annotations: kubernetes.io/service-account.name: "rbd-csi-vault-token-review" type: kubernetes.io/service-account-token data: {} EOFシークレットからトークンと CA 証明書を取得します。
$ SA_JWT_TOKEN=$(oc -n openshift-storage get secret rbd-csi-vault-token-review-token -o jsonpath="{.data['token']}" | base64 --decode; echo) $ SA_CA_CRT=$(oc -n openshift-storage get secret rbd-csi-vault-token-review-token -o jsonpath="{.data['ca\.crt']}" | base64 --decode; echo)OpenShift クラスターエンドポイントを取得します。
$ OCP_HOST=$(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_JWT_TOKEN" \ kubernetes_host="$OCP_HOST" \ kubernetes_ca_cert="$SA_CA_CRT"テナント 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 を作成して上書きできます。デフォルト名の上書きに関する詳細は、Overriding Vault connection details using tenant ConfigMap を参照してください。
YAML 例
PV 暗号化の
vaulttenantsaメソッドを使用する storageclass を作成するには、既存の ConfigMap を編集するか、Vault との接続を確立するために必要なすべての情報を保持するcsi-kms-connection-detailsという名前の ConfigMap を作成する必要があります。以下の yaml のサンプルを使用して、
csi-kms-connection-detailConfigMap を更新または作成できます。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-detailsencryptionKMSTypeVault での認証にサービスアカウントを使用するには、
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 のバックエンドパス
vaultCAFromSecretVault の CA 証明書が含まれる OpenShift Data Foundation クラスターのシークレット
vaultClientCertFromSecretVault のクライアント証明書を含む OpenShift Data Foundation クラスターのシークレット
vaultClientCertKeyFromSecretVault のクライアントプライベートキーが含まれる OpenShift Data Foundation クラスターのシークレット
tenantSAName(オプション) テナント namespace のサービスアカウント名。デフォルト値は
ceph-csi-vault-saです。別の名前を使用する場合は、この変数を適切に設定する必要があります。