転送中の暗号化(対象:) 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を有効にすると、ワーカーノードに必要なパッケージがインストールされます。

  1. EITを有効にしたいクラスタ内のワーカープールをメモしておいてください。

  2. addon-vpc-file-csi-driver-configmap を編集します。

    oc edit cm addon-vpc-file-csi-driver-configmap -n kube-system
    
  3. 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
    
  4. EITを有効にした後、configmapを保存して閉じます。

この手順では、オペレーターが指定されたワーカーノードにEITパッケージをインストールするため、完了までに最大5分かかる場合があります。

  1. 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"
    
  2. ワーカープールに 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>
    
  3. EITに対応したプリインストール済みのストレージクラスを選択するか、独自のストレージクラスを作成してください。

    • ibmc-vpc-file-eit ストレージクラスを使用して PVC を作成します。
    • 独自のストレージクラスを作成し、 isEITEnabled パラメータを true に設定してください。
  4. 選択したストレージクラスを参照する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 以降によって保護されます。

トンネルのライフサイクルは、ドライバーによって完全に管理されます。ポッドがボリュームをマウントするとトンネルが作成され、ポッドが削除されるとトンネルは破棄されます。

開始前に

制限

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

転送中の暗号化機能を備えたリージョナル・ファイル共有をプロビジョニングするには、以下の手順を実行してください。

  1. 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
    
  2. ストレージクラスを適用します。

    oc apply -f rfs-eit-sc.yaml
    
  3. 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
    
  4. PVCを塗布してください。

    oc apply -f rfs-eit-pvc.yaml
    
  5. 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
    
  6. ポッドを塗布してください。

    oc apply -f rfs-eit-pod.yaml
    

転送中の暗号化が有効であることを確認する

ポッドの起動後、ファイル共有先を確認して、転送中の暗号化が正常に機能していることを確認してください。 EITが有効であることを確認するには、マウント先が「 Transit Encryption: stunnel 」と表示されている必要があります。

  1. ポッドが「 Running 」状態になり、PVCが「 Bound 」ステータスになるまで待ちます。

    oc get pod my-rfs-eit-app
    oc get pvc my-rfs-eit-pvc
    
  2. 永続ボリュームからファイル共有IDとマウント先IDを取得します。

    oc describe pv <pv-name> | grep -E "fileShareId|fileShareTargetId"
    

    出力から、 fileShareId および fileShareTargetId の値を確認してください。 これらは、次のステップでVPC側でのEITの検証に使用します。

  3. ファイル共有のマウント先で、転送時の暗号化方式として「 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 の転送中の暗号化に関するトラブルシューティング 」を参照してください。

次のステップ