전송 중 암호화 대상: IBM Cloud File Storage for VPC

가상 사설 클라우드

전송 중 암호화(EIT)를 사용하여 워커 노드와 File Storage for VPC 서비스 간에 전송되는 데이터를 보호하십시오. 이 항목에서는 ‘ dp2 ’ 프로필을 사용하는 구역(zonal) 파일 공유와 ‘ rfs ’ 프로필을 사용하는 지역(regional) 파일 공유 모두에 대한 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 전송 중 암호화가 활성화된 경우에만 ‘금융 서비스 검증 완료’ 서비스로 간주됩니다. 자세한 내용은 ‘금융 서비스 검증(Financial Services Validated)서비스란 무엇인가’를 참조하십시오.

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 구성 맵의 이벤트를 검토하여 각 워커 노드에서 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 ’ 상태가 되면, 해당 노드의 uncordon을 실행하여 다시 워크로드를 스케줄링할 수 있도록 하십시오.

    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 애드온은 TLS 1.3 이상 버전에서 모든 NFS 트래픽을 감싸는 stunnel 사이드카를 각 워커 노드에서 자동으로 관리하며, 이 과정은 애플리케이션에 전혀 영향을 미치지 않습니다.

File Storage 의 지역별 기능에 대한 배경 정보는 ‘지역별 파일 저장소 개요’를 참조하십시오.

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를 마운트하는 포드를 생성합니다. 다음 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(RFS EIT)암호화 문제 해결’을 참조하십시오.

다음 단계