転送中の暗号化(対象:) IBM Cloud File Storage for VPC
仮想プライベートクラウド
ワーカーノードと File Storage for VPC サービス間でデータが転送される際に、転送中暗号化(EIT)を使用してデータを保護します。 このトピックでは、「 dp2 」プロファイルを使用するゾーン単位のファイル共有と、「 rfs 」プロファイルを使用するリージョン単位のファイル共有の両方について、EITを解説します。
ゾーン別ファイル共有 — 転送中の暗号化の設定
転送中の暗号化を使用する場合は、セキュリティ要件とパフォーマンスのニーズのバランスを考慮してください。 転送中のデータを暗号化すると、エンドポイントでデータの暗号化と復号化が必要になるため、パフォーマンスに影響が出る可能性があります。 詳細については、「 VPC 転送中の暗号化 」を参照してください。
RHCOS( CoreOS )のワーカーノードでは、オペレーターが必要なパッケージをインストールした後、ノードを再起動するまで、EITは有効になりません。 EITを有効にする際は、段階的な再起動を計画してください。
- EITは、 4.16 以降のクラスターバージョンで利用可能です。
- デフォルトでは、ファイル共有は IBM による管理型暗号化により、 保存時に暗号化 されます。
- 「Secure by Default」クラスターで EIT を使用するには、
kube-<clusterID>セキュリティグループに以下の送信ルール追加する必要があります。 このルールは、バージョン 4.18 以降のROKSクラスタに対して自動的に追加されます。 古いバージョンのクラスターの場合は、ルールを手動で追加してください。- プロトコル :任意
- ソースの種類 :任意
- 出典 :
0.0.0.0/0 - 目的地 :
169.254.169.254
- EITは、静的にプロビジョニングされたボリュームでは利用できません。 EITを設定するには、動的プロビジョニングを使用する必要があります。
- EITを有効にすると、クラスター内のEITパッケージは自動的に更新されます。
- 転送中のデータを暗号化すると、パフォーマンスに影響が出る可能性があります。 その影響は、ワークロードの特性によって異なります。 データベースなど、同期書き込みを実行したりVSIキャッシュをバイパスしたりするワークロードでは、EITを有効にした際にパフォーマンスに大きな影響が生じる可能性があります。 その影響を評価するには、EITを使用する場合と使用しない場合でワークロードを比較検討してください。
- EITがなくても、データは安全なデータセンターのネットワークを経由して送信されます。 ネットワークセキュリティに関する詳細については、「 VPC のセキュリティ 」および「 コンテキストベースの制限による仮想プライベートクラウド(VPC)インフラストラクチャサービスの保護 」を参照してください。
File Storage for VPC 転送中の暗号化が有効になっている場合にのみ、このサービスは「金融サービス認定」サービスとみなされます。 詳細については、 「金融サービス検証済みサービスとは」 をご覧ください。
Red Hat OpenShift on IBM Cloud クラスタ内のファイル共有に対して転送中暗号化(EIT)を設定するには、以下の手順を実行してください。 EITを有効にすると、ワーカーノードに必要なパッケージがインストールされます。
-
EITを有効にしたいクラスタ内のワーカープールをメモしておいてください。
-
addon-vpc-file-csi-driver-configmapを編集します。oc edit cm addon-vpc-file-csi-driver-configmap -n kube-system -
ConfigMap内で、
ENABLE_EIT: "true"を設定し、EITを有効にしたい場所のワーカープールをEIT_ENABLED_WORKER_POOLSフィールドに追加してください。 例えば、"wp1,wp2"などです。 また、EIT_METADATA_RETRY_COUNTおよびEIT_METADATA_RETRY_INTERVALパラメータを設定することで、インスタンスのメタデータを取得する際の再試行動作を制御することもできます。apiVersion: v1 data: EIT_ENABLED_WORKER_POOLS: "wp1,wp2" # Specify the worker pools where you want to enable EIT. If this field is blank, EIT is not enabled on any worker pools. ENABLE_EIT: "true" # Specify true/false EIT_METADATA_RETRY_COUNT: "3" # Number of retries for fetching instance metadata before an error is returned EIT_METADATA_RETRY_INTERVAL: "30" # Interval in seconds between each metadata fetch retry kind: ConfigMap metadata: creationTimestamp: "2024-06-18T09:45:48Z" labels: app.kubernetes.io/name: ibm-vpc-file-csi-driver name: addon-vpc-file-csi-driver-configmap namespace: kube-system ownerReferences: - apiVersion: csi.drivers.ibmcloud.io/v1 blockOwnerDeletion: true controller: true kind: VPCFileCSIDriver name: ibm-vpc-file-csi-driver uid: d3c8bbcd-24fa-4203-9352-4ab7aa72a055 resourceVersion: "1251777" uid: 5c9d6679-4135-458b-800d-217b34d27c75 -
EITを有効にした後、configmapを保存して閉じます。
この手順では、オペレーターが指定されたワーカーノードにEITパッケージをインストールするため、完了までに最大5分かかる場合があります。
-
EITが有効になっていることを確認するには、
file-csi-driver-statusのconfigmapのイベントを確認し、各ワーカーノードでEITのインストールが正常に完了したことを確認してください。 指定したワーカープール内の各ノードについて、「Package installation successful」イベントを探してください。oc describe cm file-csi-driver-status -n kube-system出力例
apiVersion: v1 data: EIT_ENABLED_WORKER_NODES: | default: - 10.240.0.10 - 10.240.0.8 PACKAGE_DEPLOYER_VERSION: v1.0.0 events: | - event: EnableVPCFileCSIDriver description: 'VPC File CSI Driver enable successful, DriverVersion: v2.0.3' timestamp: "2024-06-13 09:17:07" - event: EnableEITRequest description: 'Request received to enableEIT, workerPools: , check the file-csi-driver-status configmap for eit installation status on each node of each workerpool.' timestamp: "2024-06-13 09:17:31" - event: 'Enabling EIT on host: 10.240.0.10' description: 'Package installation successful on host: 10.240.0.10, workerpool: wp1' timestamp: "2024-06-13 09:17:48" - event: 'Enabling EIT on host: 10.240.0.8' description: 'Package installation successful on host: 10.240.0.8, workerpool: wp2' timestamp: "2024-06-13 09:17:48" -
ワーカープールに RHCOS( CoreOS )ノードが含まれている場合は、影響を受ける各ノードのデータを完全に排出してから再起動し、EIT パッケージを有効にしてください。 RHCOSノードでは、ノードを再起動するまでEITは機能しません。 まずノードをドレインすることで、再起動前に実行中のワークロードが他のノードに再スケジューリングされることが保証され、本番アプリケーションへの影響を回避できます。
ノードをドレインして、実行中のすべてのポッドを安全に終了させます。
oc drain <node-name> --ignore-daemonsets --delete-emptydir-data電源が切れたノードを再起動してください。
ibmcloud ks worker reboot --cluster CLUSTER_ID --worker WORKER_IDノードがオンラインに戻り、「
Ready」状態になったら、アンコードン処理を実行して、そのノード上で再びワークロードがスケジューリングされるようにします。oc uncordon <node-name> -
EITに対応したプリインストール済みのストレージクラスを選択するか、独自のストレージクラスを作成してください。
ibmc-vpc-file-eitストレージクラスを使用して PVC を作成します。- 独自のストレージクラスを作成し、
isEITEnabledパラメータをtrueに設定してください。
-
選択したストレージクラスを参照するPVCを作成し、そのPVCを使用するアプリをデプロイします。
これらの手順を完了した後もEITで問題が発生する場合は、以下のトラブルシューティングの項目を参照してください
地域ごとのファイル共有 — 転送中の暗号化の設定(ベータ版)
転送中暗号化(EIT)機能を備えたリージョン間 File Storage (RFS)は、リージョン内の複数のアベイラビリティゾーンにまたがるファイル共有に対して、 TLS で暗号化された安全な NFS 接続を提供します。 File Storage for VPC アドオンは、各ワーカーノード上でstunnelサイドカーを自動的に管理し、 TLS 1.3 以降において、 NFS のすべてのトラフィックをラップします。この処理は、アプリケーションからは透過的に行われます。
「Regional File Storage 」の概要については、「 Regional ファイルストレージの概要 」を参照してください。
EIT 搭載の RFS はベータ版サポートのみ提供されており、実験的な用途でのみ使用することを推奨します。 本番環境のワークロードでは、この機能を使用しないでください。
仕組みについて
RFS EIT ストレージクラスを持つ PVC を作成し、ポッドがそれをマウントすると、アドオンは自動的にワーカーノード上で暗号化された stunnel トンネルを設定し、すべての NFS トラフィックをそのトンネル経由でルーティングします。 この暗号化はアプリケーションからは透過的に行われます。アプリケーションは引き続き標準の NFS マウントを使用し、転送中のすべてのデータは TLS 1.3 以降によって保護されます。
トンネルのライフサイクルは、ドライバーによって完全に管理されます。ポッドがボリュームをマウントするとトンネルが作成され、ポッドが削除されるとトンネルは破棄されます。
開始前に
- クラスタには、 File Storage for VPC アドオンのバージョン 2.0 以降がインストールされています。 詳細については、「 IBM Cloud File Storage for VPC クラスタ・アドオンの有効化 」を参照してください。
制限
RFS EIT を有効にする前に、以下の制限事項を確認してください。
- ノードあたりのPVCマウント数の上限: 300。ポート範囲11300~11599からPVCごとに1つのポートが割り当てられ、
127.0.0.1にバインドされます。 hostNetwork: trueを使用するアプリケーションにおけるポートの競合:hostNetwork: trueを使用し、ポート範囲 11300–11599 で127.0.0.1にバインドするアプリケーションのポッドは、既存の RFS EIT PVC マウントと競合する可能性があります。- VPC File Storage に適用されるすべての制限事項も同様に適用されます。
リージョナル向けの転送中の暗号化の設定 File Storage
転送中の暗号化機能を備えたリージョナル・ファイル共有をプロビジョニングするには、以下の手順を実行してください。
-
rfsプロファイルを指定し、isEITEnabled: "true"を設定するストレージクラスを作成します。 以下のYAMLを「rfs-eit-sc.yaml」という名前のファイルに保存してください。RFS EIT を使用するには、マウントオプションに以下のパラメータを指定する必要があります:
profile: "rfs"、isENIEnabled: "true"、isEITEnabled: "true"、およびproto=tcp。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ibmc-vpc-file-rfs-eit-custom labels: app.kubernetes.io/name: ibm-vpc-file-csi-driver provisioner: vpc.file.csi.ibm.io parameters: profile: "rfs" # Regional File Storage profile billingType: "hourly" throughput: "1000" # Bandwidth in MB/s (25–8192 MB/s for RFS profile) encrypted: "false" encryptionKey: "" # Specify the CRK CRN if encrypted is true resourceGroup: "" # Defaults to the resource group in the storage secret store isENIEnabled: "true" # Required for RFS — enables ENI/VNI feature isEITEnabled: "true" # Enables encryption in transit with stunnel securityGroupIDs: "" # Defaults to the cluster security group kube-<clusterID> subnetID: "" # Defaults to an available subnet in the cluster VPC region: "" # Defaults to the region from the cluster node topology primaryIPID: "" # Optional: existing reserved IP ID (region is required) primaryIPAddress: "" # Optional: IP address for ENI/VNI (region and subnetID required) tags: "" uid: "0" gid: "0" classVersion: "1" mountOptions: - hard - nfsvers=4.1 - sec=sys - proto=tcp # Required for stunnel (encryption in transit) reclaimPolicy: "Delete" allowVolumeExpansion: true -
ストレージクラスを適用します。
oc apply -f rfs-eit-sc.yaml -
ibmc-vpc-file-rfs-eit-customストレージクラスを参照する PVC を作成します。 以下のYAMLを「rfs-eit-pvc.yaml」という名前のファイルに保存してください。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-rfs-eit-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi storageClassName: ibmc-vpc-file-rfs-eit-custom -
PVCを塗布してください。
oc apply -f rfs-eit-pvc.yaml -
PVCをマウントするPodを作成します。 以下のYAMLを「
rfs-eit-pod.yaml」という名前のファイルに保存してください。apiVersion: v1 kind: Pod metadata: name: my-rfs-eit-app spec: containers: - name: app image: nginx:latest volumeMounts: - name: rfs-eit-storage mountPath: /data volumes: - name: rfs-eit-storage persistentVolumeClaim: claimName: my-rfs-eit-pvc -
ポッドを塗布してください。
oc apply -f rfs-eit-pod.yaml
転送中の暗号化が有効であることを確認する
ポッドの起動後、ファイル共有先を確認して、転送中の暗号化が正常に機能していることを確認してください。 EITが有効であることを確認するには、マウント先が「 Transit Encryption: stunnel 」と表示されている必要があります。
-
ポッドが「
Running」状態になり、PVCが「Bound」ステータスになるまで待ちます。oc get pod my-rfs-eit-app oc get pvc my-rfs-eit-pvc -
永続ボリュームからファイル共有IDとマウント先IDを取得します。
oc describe pv <pv-name> | grep -E "fileShareId|fileShareTargetId"出力から、
fileShareIdおよびfileShareTargetIdの値を確認してください。 これらは、次のステップでVPC側でのEITの検証に使用します。 -
ファイル共有のマウント先で、転送時の暗号化方式として「
stunnel」が指定されていることを確認してください。ibmcloud is share-mount-target FILE_SHARE_ID FILE_SHARE_TARGET_ID | grep "Transit Encryption"EITが有効であることを確認できる出力例:
Transit Encryption stunnel
RFS EITのトラブルシューティング
RFS EIT でよく発生するエラーに関するヘルプについては、「 File Storage の転送中の暗号化に関するトラブルシューティング 」を参照してください。