Portworx 의 암호화 이해

암호화 개요

다음 이미지는 볼륨별 암호화를 설정할 때의 Portworx 내 암호화 워크플로우를 보여줍니다.

![](images/cs_px_volume_encryption.svg "암호화 Portworx 볼륨 암호화 Portworx 볼륨 암호화 * 볼륨 암호화 Portworx " caption-side="bottom"}"){: caption="

  1. 사용자는 Portworx 스토리지 클래스로 PVC를 작성하고 스토리지를 암호화하도록 요청합니다.
  2. Portworx는 Portworx 시크릿에 저장된 고객 루트 키(CRK)를 사용하여 비밀번호 문구를 작성하기 위해 IBM Key Protect 또는 Hyper Protect Crypto Services API WrapCreateDEK를 호출합니다.
  3. IBM Key Protect 또는 Hyper Protect Crypto Services 서비스 인스턴스가 256비트 비밀번호 문구를 생성하고 DEK로 비밀번호 문구를 랩핑합니다. DEK가 Portworx 클러스터로 리턴됩니다.
  4. Portworx 클러스터에서는 비밀번호 문구를 사용하여 볼륨을 암호화합니다.
  5. Portworx 클러스터에서는 DEK를 Portworx etcd 데이터베이스에서 일반 텍스트로 저장하고, 볼륨 ID를 DEK와 연관시키고, 메모리에서 비밀번호 문구를 제거합니다.

복호화 개요

다음 이미지는 볼륨별 암호화를 설정할 때의 Portworx 내 복호화 워크플로우를 보여줍니다.

* 암호 해독 * 볼륨 * 암호 해독 Portworx
* 암호 해독

  1. Kubernetes는 암호화된 볼륨을 복호화하기 위한 요청을 보냅니다.
  2. Portworx는 Portworx etcd 데이터베이스에서 볼륨에 대한 DEK를 요청합니다.
  3. Portworx etcd는 DEK를 검색하여 Portworx 클러스터로 DEK를 리턴합니다.
  4. Portworx 클러스터가 Portworx 시크릿에 저장된 DEK 및 루트 키(CRK)를 제공하여 IBM Key Protect 또는 Hyper Protect Crypto Services API UnWrapDEK를 호출합니다.
  5. IBM Key Protect 또는 Hyper Protect Crypto Services에서 DEK를 랩핑 해제하여 비밀번호 문구를 추출하고 비밀번호 문구를 Portworx 클러스터에 리턴합니다.
  6. Portworx 클러스터에서는 비밀번호 문구를 사용하여 볼륨을 복호화합니다. 볼륨이 복호화되면 비밀번호 문구가 Portworx 클러스터에서 제거됩니다.

볼륨 암호화 설정

Portworx 볼륨의 데이터를 보호하려면 IBM Key Protect 또는 Hyper Protect Crypto Services 와 같은 키 관리 서비스(KMS) 공급업체를 사용할 수 있습니다.

볼륨을 암호화하는 데 IBM Key Protect 또는 Hyper Protect Crypto Services 루트 키를 사용하지 않으려는 경우에는 Portworx 설치 중에 Kubernetes 시크릿을 Portworx 시크릿 저장소 유형으로 선택할 수 있습니다. 이 옵션을 사용하면 Portworx 을 설치한 후, 사용자 정의 암호화 키를 ‘ Kubernetes ’ 시크릿에 저장할 수 있습니다. 자세한 내용은 ‘ Portworx ’ 문서를 참조하십시오.

KMS 인스턴스 및 인증 정보 가져오기

Hyper Protect Crypto Services을 사용하여 볼륨 암호화 설정

IBM Cloud는 전용 키 관리 서비스를 Hyper Protect Crypto Services에서 Key Protect Dedicated로 변경하고 있습니다.

  1. 서비스 인스턴스를 작성하십시오.

  2. 루트 키를 작성하십시오.

  3. 서비스 ID를 작성하십시오.

  4. 사설 클러스터: KMS 인스턴스에 대한 액세스를 허용하는 가상 사설 엔드포인트 게이트웨이를 작성 하십시오. VPC의 각 서브넷에서 VPE로 하나 이상의 IP 주소를 바인드해야 합니다.

  5. 키 관리 공개 엔드포인트 URL 을 조회합니다. 엔드포인트를 올바른 형식 (예: https://api.us-south.hs-crypto.cloud.ibm.com:<port>) 으로 기록해야 합니다. 자세한 정보는 Hyper Protect Crypto Services API 문서를 참조하십시오.

IBM Key Protect을 사용하여 볼륨 암호화 설정

  1. 서비스 인스턴스를 작성하십시오.

  2. 루트 키를 작성하십시오.

  3. 서비스 ID를 작성하십시오.

  4. 서비스 인스턴스를 작성한 지역을 검색 하고 메모를 작성하십시오. 나중에 시크릿을 작성할 때 이 값이 필요합니다.

  5. 사설 클러스터: KMS 인스턴스에 대한 액세스를 허용하는 가상 사설 엔드포인트 게이트웨이를 작성 하십시오. VPC의 각 서브넷에서 VPE로 하나 이상의 IP 주소를 바인드해야 합니다.

클러스터에서 시크릿 작성

  1. 이전 절에서 검색한 인증 정보를 Base64로 인코딩하고 모든 Base64 인코딩된 값을 기록해 두십시오. 각 매개변수에 대해 이 명령을 반복하여 base64 인코딩 값을 검색하십시오.
    echo -n "<value>" | base64
    
  2. 이름이 portworx인 클러스터의 네임스페이스를 작성하십시오.
    kubectl create ns portworx
    
  3. IBM Key Protect 정보를 저장할 클러스터의 portworx 네임스페이스에서 이름이 px-ibm인 Kubernetes 시크릿을 작성하십시오.
    1. 다음 컨텐츠를 사용하여 Kubernetes 시크릿에 대한 구성 파일을 작성하십시오.
        apiVersion: v1
        kind: Secret
        metadata:
          name: px-ibm
          namespace: portworx
        type: Opaque
        data:
          IBM_SERVICE_API_KEY: <base64_apikey>
          IBM_INSTANCE_ID: <base64_guid>
          IBM_CUSTOMER_ROOT_KEY: <base64_rootkey>
          IBM_BASE_URL: <base64_endpoint>
        ```
        `metadata.name`
        :   `px-ibm`을 Kubernetes 시크릿의 이름으로 입력하십시오. 다른 이름을 사용하는 경우 Portworx는 설치 중에 시크릿을 인식하지 않습니다.
    
        `data.IBM_SERVICE_API_KEY`
        :   이전에 검색한, Base64 인코딩된 IBM Key Protect 또는 Hyper Protect Crypto Services API 키를 입력하십시오.
    
        `data.IBM_INSTANCE_ID`
        :   이전에 검색한, Base64 인코딩된 서비스 인스턴스 GUID를 입력하십시오.
    
        `data.IBM_CUSTOMER_ROOT_KEY`
        :   이전에 검색한, Base64 인코딩된 루트 키를 검색하십시오.
    
        `data.IBM_BASE_URL`
        :   IBM Key Protect: 서비스 인스턴스의 base64 인코딩 API 엔드포인트를 입력하십시오.
            :   Hyper Protect Crypto Services: base64 인코딩  관리 공용 엔드포인트를 입력하십시오.
    
    2. 클러스터의 `portworx` 네임스페이스에 시크릿을 작성하십시오.
    ```sh {: pre}
        kubectl apply -f secret.yaml
        ```
    3. 시크릿이 작성되었는지 확인하십시오.
    ```sh {: pre}
        kubectl get secrets -n portworx
        ```