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. KMS(Key Management System)에 대한 액세스 구성

사용 사례에 따라 다음 방법 중 하나를 사용하여 KMS에 대한 액세스를 구성해야 합니다.

  • 자격 증명 모음 사용 : 사용자가 토큰 을 사용하여 인증할 수 있음
  • Thales CipherTrust Manager 사용 : KMIP (Key Management Interoperability Protocol) 사용
  • vaulttenantsa 사용(기술 프리뷰): 사용자가 serviceaccounts 를 사용하여 Vault로 인증할 수 있습니다.
중요

자격 증명 모음을 사용하여 KMS에 액세스하는 것은 기술 프리뷰 기능입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.

자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.

2.2.1.1. 자격 증명 모음을 사용하여 KMS에 대한 액세스 구성

사전 요구 사항

  • OpenShift Data Foundation 클러스터가 Ready 상태입니다.
  • 외부 키 관리 시스템 (KMS)에서 다음을 수행합니다.

    • 토큰이 있는 정책이 있고 Vault 의 키 값 백엔드 경로가 활성화되어 있는지 확인합니다.
    • Vault 서버에서 서명된 인증서를 사용하고 있는지 확인합니다.

절차

테넌트의 네임스페이스에 시크릿을 생성합니다.

  1. OpenShift Container Platform 웹 콘솔에서 워크로드 시크릿 으로 이동합니다.
  2. 생성 키/값 시크릿 을 클릭합니다.
  3. 시크릿 이름을 ceph-csi-kms-token 으로 입력합니다.
  4. Key토큰 으로 입력합니다.
  5. 값을 입력합니다.

    Vault의 토큰입니다. 찾아보기 를 클릭하여 토큰이 포함된 파일을 선택하고 업로드하거나 텍스트 상자에 직접 토큰을 입력할 수 있습니다.

  6. 생성을 클릭합니다.
참고

토큰은 ceph-csi-kms-token 을 사용하는 모든 암호화된 PVC가 삭제된 후에만 삭제할 수 있습니다.

2.2.1.2. Thales CipherTrust Manager를 사용하여 KMS 액세스 구성

사전 요구 사항

  1. KMIP 클라이언트가 없는 경우 해당 클라이언트를 생성합니다. 사용자 인터페이스에서 KMIP 클라이언트 프로필 프로필 추가를 선택합니다.

    1. 프로필 생성 중에 CipherTrust 사용자 이름을 Common Name 필드에 추가합니다.
  2. KMIP 등록 토큰 새로운 등록 토큰 으로 이동합니다. 다음 단계를 위해 토큰을 복사합니다.
  3. 클라이언트를 등록하려면 KMIP Registered Clients Add Client 로 이동합니다. 이름을 지정합니다. 이전 단계에서 등록 토큰 을 붙여넣은 다음 저장을 클릭합니다.
  4. 개인 키 저장을 클릭하고 인증서 저장을 클릭하여 개인 키와 클라이언트 인증서를 다운로드합니다.
  5. 새 KMIP 인터페이스를 생성하려면 관리자 설정 인터페이스 인터페이스 추가로 이동합니다.

    1. KMIP 키 관리 상호 운용성 프로토콜 을 선택하고 다음을 클릭합니다.
    2. 무료 포트 를 선택합니다.
    3. 네트워크 인터페이스를 모두 선택합니다.
    4. Interface ModeTLS로 선택하고 클라이언트 인증서에서 가져온 사용자 이름, auth request는 선택 사항입니다.
    5. (선택 사항) 키가 삭제될 때 하드 삭제를 활성화하여 메타 데이터 및 자료를 모두 삭제할 수 있습니다. 이는 기본적으로 비활성화되어 있습니다.
    6. 사용할 CA를 선택하고 저장을 클릭합니다.
  6. 서버 CA 인증서를 가져오려면 새로 생성된 인터페이스 오른쪽에 있는 작업 메뉴(ECDHE) 를 클릭하고 인증서 다운로드를 클릭합니다.

절차

  1. 스토리지 클래스 암호화를 위한 KEK(Key Encryption Key) 역할을 할 키를 만들려면 다음 단계를 따르십시오.

    1. 추가로 이동합니다.
    2. 키 이름 을 입력합니다.
    3. AlgorithmSize 를 각각 AES256 으로 설정합니다.
    4. Pre-Active 상태에서 키 만들기를 활성화하고 활성화할 날짜와 시간을 설정합니다.
    5. Key Usage 에서 EncryptDecrypt 가 활성화되어 있는지 확인합니다.
    6. 배포 중에 사용할 새로 생성된 키의 ID를 복사합니다.

2.2.1.3. 자격 증명 테넌트sa를 사용하여 KMS 액세스 구성

사전 요구 사항

  • OpenShift Data Foundation 클러스터가 Ready 상태입니다.
  • 외부 키 관리 시스템 (KMS)에서 다음을 수행합니다.

    • 정책이 존재하고 Vault의 키 값 백엔드 경로가 활성화되어 있는지 확인합니다.
    • Vault 서버에서 서명된 인증서를 사용하고 있는지 확인합니다.
  • 아래와 같이 테넌트 네임스페이스에 다음 serviceaccount를 생성합니다.

    $ cat <<EOF | oc create -f -
    apiVersion: v1
    kind: ServiceAccount
    metadata:
        name: ceph-csi-vault-sa
    EOF
    Copy to Clipboard

절차

OpenShift Data Foundation에서 Vault 를 인증하고 사용하기 전에 Kubernetes 인증 방법을 구성해야 합니다. 다음 명령은 OpenShift Data Foundation이 Vault 로 인증할 수 있도록 하는 데 필요한 serviceAccount,ClusterRoleClusterRoleBinding 을 생성 및 구성합니다.

  1. Openshift 클러스터에 다음 YAML을 적용합니다.

    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
    Copy to Clipboard
  2. serviceaccount 토큰 및 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
    Copy to Clipboard
  3. 시크릿에서 토큰과 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)
    Copy to Clipboard
  4. OpenShift 클러스터 끝점을 검색합니다.

    $ OCP_HOST=$(oc config view --minify --flatten -o jsonpath="{.clusters[0].cluster.server}")
    Copy to Clipboard
  5. 이전 단계에서 수집한 정보를 사용하여 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"
    Copy to Clipboard
  6. 테넌트 네임스페이스에 대한 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>
    Copy to Clipboard

    CSI-kubernetes 는 OpenShift Data Foundation이 Vault에서 찾는 기본 역할 이름입니다. OpenShift Data Foundation 클러스터의 테넌트 네임스페이스에 있는 기본 서비스 계정 이름은 ceph-csi-vault-sa 입니다. 이러한 기본값은 테넌트 네임스페이스에 ConfigMap을 생성하여 덮어쓸 수 있습니다.

    기본 이름을 재정의하는 방법에 대한 자세한 내용은 테넌트 ConfigMap을 사용하여 Vault 연결 세부 정보 덮어쓰기를 참조하십시오.

샘플 YAML

  • PV encrytpion에 vaulttenantsa 메서드를 사용하는 스토리지 클래스를 생성하려면 기존 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
    Copy to Clipboard

    encryptionKMSType

    자격 증명 모음을 사용한 인증에 서비스 계정을 사용하려면 vaulttenantsa 로 설정합니다.

    vaultAddress

    포트 번호가 있는 자격 증명 모음 서버의 호스트 이름 또는 IP 주소입니다.

    vaultTLSServerName

    (선택 사항) 자격 증명 TLS 서버 이름

    vaultAuthPath

    (선택 사항) Vault에서 kubernetes auth method가 활성화된 경로입니다. 기본 경로는 kubernetes 입니다. auth 메서드가 kubernetes 이외의 다른 경로에서 활성화되는 경우 이 변수를 "/v1/auth/<path>/login" 으로 설정해야 합니다.

    vaultAuthNamespace

    (선택 사항) kubernetes auth 메서드가 활성화된 Vault 네임스페이스입니다.

    vaultNamespace

    (선택 사항) 키를 저장하는 데 사용되는 백엔드 경로를 사용하는 Vault 네임스페이스

    vaultBackendPath

    암호화 키가 저장되는 Vault의 백엔드 경로입니다.

    vaultCAFromSecret

    Vault의 CA 인증서가 포함된 OpenShift Data Foundation 클러스터의 시크릿

    vaultClientCertFromSecret

    Vault의 클라이언트 인증서가 포함된 OpenShift Data Foundation 클러스터의 시크릿

    vaultClientCertKeyFromSecret

    Vault의 클라이언트 개인 키가 포함된 OpenShift Data Foundation 클러스터의 시크릿

    tenantSAName

    (선택 사항) 테넌트 네임스페이스의 서비스 계정 이름입니다. 기본값은 ceph-csi-vault-sa 입니다. 다른 이름을 사용해야 하는 경우 이 변수를 적절하게 설정해야 합니다.

2.2.2. 영구 볼륨 암호화의 스토리지 클래스 생성

사전 요구 사항

사용 사례에 따라 다음 중 하나에 대해 KMS에 대한 액세스를 구성해야 합니다.

절차

  1. OpenShift 웹 콘솔에서 스토리지 StorageClasses 로 이동합니다.
  2. 스토리지 클래스 생성을 클릭합니다.
  3. 스토리지 클래스 이름설명을 입력합니다.
  4. 거부 정책에 대해 Delete 또는 Retain 선택합니다. 기본적으로 Delete 가 선택됩니다.
  5. Immediate 또는 WaitForFirstConsumerVolume 바인딩 모드로 선택합니다. WaitForConsumer 가 기본 옵션으로 설정됩니다.
  6. 영구 볼륨을 프로비저닝하는 데 사용되는 플러그인인 RBD Provisioner openshift-storage.rbd.csi.ceph.com 을 선택합니다.
  7. 목록에서 볼륨 데이터가 저장된 스토리지 풀을 선택하거나 새 풀을 생성합니다.
  8. 암호화 사용 확인란을 선택합니다. KMS 연결 세부 정보를 설정하는 데 사용할 수 있는 두 가지 옵션이 있습니다.

    • 기존 KMS 연결 선택 : 드롭다운 목록에서 기존 KMS 연결을 선택합니다. csi-kms-connection-details ConfigMap에서 사용 가능한 연결 세부 정보에서 목록이 채워집니다.

      1. 드롭다운에서 공급자를 선택합니다.
      2. 목록에서 지정된 공급자의 키 서비스를 선택합니다.
    • 새 KMS 연결 생성: 이 기능은 vaulttokensThales CipherTrust Manager (KMIP 사용) 에만 적용됩니다.

      1. 키 관리 서비스 공급자를 선택합니다.
      2. Vault키 관리 서비스 공급자로 선택한 경우 다음 단계를 따르십시오.

        1. 고유한 연결 이름, Vault 서버의 호스트 주소 (https://<hostname 또는 ip>'), 포트 번호 및 토큰 을 입력합니다.
        2. 고급 설정을 확장하여 Vault 구성에 따라 추가 설정 및 인증서 세부 정보를 입력합니다.

          1. OpenShift Data Foundation 전용 및 고유한 백엔드 경로에 키 값 시크릿 경로를 입력합니다.
          2. 선택 사항: TLS 서버 이름Vault Enterprise 네임스페이스 를 입력합니다.
          3. 각 PEM 인코딩 인증서 파일을 업로드하여 CA 인증서,클라이언트 인증서클라이언트 개인 키를 제공합니다.
          4. 저장을 클릭합니다.
      3. Thales CipherTrust Manager (KMIP 사용)키 관리 서비스 공급자로 선택하는 경우 다음 단계를 따르십시오.

        1. 고유한 연결 이름을 입력합니다.
        2. 주소포트 섹션에서 Thales CipherTrust Manager의 IP와 KMIP 인터페이스가 활성화된 포트를 입력합니다. 예를 들면 주소:gradle.34.3.2, 포트:ECDHE96입니다.
        3. 클라이언트 인증서,CA 인증서클라이언트 개인 키를 업로드합니다.
        4. 위에서 생성된 암호화 및 암호 해독에 사용할 키의 고유 식별자 를 입력합니다.
        5. TLS Server 필드는 선택 사항이며 KMIP 엔드포인트에 대한 DNS 항목이 없는 경우 사용됩니다. 예를 들어, kmip_all_<port>.ciphertrustmanager.local.
      4. 저장을 클릭합니다.
      5. 생성을 클릭합니다.
  9. HashiCorp Vault 설정에서 백엔드 경로에서 사용하는 KV(Key/Value) 시크릿 엔진 API 버전을 자동으로 감지할 수 없는 경우 vaultBackend 매개변수를 추가하도록 ConfigMap을 편집합니다.

    참고

    vaultBackend 는 백엔드 경로와 연결된 KV 시크릿 엔진 API의 버전을 지정하기 위해 configmap에 추가된 선택적 매개변수입니다. 값이 백엔드 경로에 설정된 KV 시크릿 엔진 API 버전과 일치하는지 확인합니다. 그렇지 않으면 PVC(영구 볼륨 클레임) 생성 중에 오류가 발생할 수 있습니다.

    1. 새로 생성된 스토리지 클래스에서 사용하는 encryptionKMSID를 식별합니다.

      1. OpenShift 웹 콘솔에서 스토리지 스토리지 클래스로 이동합니다.
      2. 스토리지 클래스 이름 YAML 탭을 클릭합니다.
      3. 스토리지 클래스에서 사용하는 encryptionKMSID 를 캡처합니다.

        예제:

        encryptionKMSID: 1-vault
        Copy to Clipboard
    2. OpenShift 웹 콘솔에서 워크로드 ConfigMaps 로 이동합니다.
    3. KMS 연결 세부 정보를 보려면 csi-kms-connection-details 를 클릭합니다.
    4. ConfigMap을 편집합니다.

      1. Action menu (ECDHE) → Edit ConfigMap 을 클릭합니다.
      2. 이전에 식별된 encryptionKMSID 에 대해 구성된 백엔드에 따라 vaultBackend 매개변수를 추가합니다.

        KV 시크릿 엔진 API 버전 1 및 kv -v2 에 KV 시크릿 엔진 API 버전 2에 kv를 할당할 수 있습니다.

        예제:

         kind: ConfigMap
         apiVersion: v1
         metadata:
           name: csi-kms-connection-details
         [...]
         data:
           1-vault: |-
             {
               "encryptionKMSType": "vaulttokens",
               "kmsServiceName": "1-vault",
               [...]
               "vaultBackend": "kv-v2"
             }
           2-vault: |-
             {
               "encryptionKMSType": "vaulttenantsa",
               [...]
               "vaultBackend": "kv"
             }
        Copy to Clipboard
      3. 저장을 클릭합니다.

다음 단계

  • 스토리지 클래스를 사용하여 암호화된 영구 볼륨을 생성할 수 있습니다. 자세한 내용은 영구 볼륨 클레임 관리를 참조하십시오.

    중요

    Red Hat은 이 문서를 고객에게 서비스로 제공하기 위해 기술 파트너와 협력합니다. 그러나 Red Hat은 HashiCorp 제품에 대한 지원을 제공하지 않습니다. 이 제품에 대한 기술 지원은 HashiCorp 에 문의하십시오.

2.2.2.1. 테넌트 ConfigMap을 사용하여 Vault 연결 세부 정보 덮어쓰기

Vault 연결 세부 정보는 openshift-storage 네임스페이스의 csi-kms-connection-details ConfigMap에 설정된 값과 다른 구성 옵션으로 Openshift 네임스페이스에 ConfigMap을 생성하여 테넌트별로 재구성할 수 있습니다. ConfigMap은 테넌트 네임스페이스에 있어야 합니다. 테넌트 네임스페이스의 ConfigMap의 값은 해당 네임스페이스에서 생성된 암호화된 영구 볼륨에 대한 csi-kms-connection-details ConfigMap에 설정된 값을 재정의합니다.

절차

  1. 테넌트 네임스페이스에 있는지 확인합니다.
  2. 워크로드 ConfigMaps 를 클릭합니다.
  3. Create ConfigMap 을 클릭합니다.
  4. 다음은 샘플 yaml입니다. 지정된 테넌트 네임스페이스에 대해 덮어쓸 값을 다음과 같이 data 섹션에서 지정할 수 있습니다.

    ---
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: ceph-csi-kms-config
    data:
      vaultAddress: "<vault_address:port>"
      vaultBackendPath: "<backend_path>"
      vaultTLSServerName: "<vault_tls_server_name>"
      vaultNamespace: "<vault_namespace>"
    Copy to Clipboard
  5. yaml을 편집한 후 생성 을 클릭합니다.
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat