Portworx 의 암호화 이해
암호화 개요
다음 이미지는 볼륨별 암호화를 설정할 때의 Portworx 내 암호화 워크플로우를 보여줍니다.
{: caption="
- 사용자는 Portworx 스토리지 클래스로 PVC를 작성하고 스토리지를 암호화하도록 요청합니다.
- Portworx는 Portworx 시크릿에 저장된 고객 루트 키(CRK)를 사용하여 비밀번호 문구를 작성하기 위해 IBM Key Protect 또는 Hyper Protect Crypto Services API
WrapCreateDEK를 호출합니다. - IBM Key Protect 또는 Hyper Protect Crypto Services 서비스 인스턴스가 256비트 비밀번호 문구를 생성하고 DEK로 비밀번호 문구를 랩핑합니다. DEK가 Portworx 클러스터로 리턴됩니다.
- Portworx 클러스터에서는 비밀번호 문구를 사용하여 볼륨을 암호화합니다.
- Portworx 클러스터에서는 DEK를 Portworx etcd 데이터베이스에서 일반 텍스트로 저장하고, 볼륨 ID를 DEK와 연관시키고, 메모리에서 비밀번호 문구를 제거합니다.
복호화 개요
다음 이미지는 볼륨별 암호화를 설정할 때의 Portworx 내 복호화 워크플로우를 보여줍니다.
- Kubernetes는 암호화된 볼륨을 복호화하기 위한 요청을 보냅니다.
- Portworx는 Portworx etcd 데이터베이스에서 볼륨에 대한 DEK를 요청합니다.
- Portworx etcd는 DEK를 검색하여 Portworx 클러스터로 DEK를 리턴합니다.
- Portworx 클러스터가 Portworx 시크릿에 저장된 DEK 및 루트 키(CRK)를 제공하여 IBM Key Protect 또는 Hyper Protect Crypto Services API
UnWrapDEK를 호출합니다. - IBM Key Protect 또는 Hyper Protect Crypto Services에서 DEK를 랩핑 해제하여 비밀번호 문구를 추출하고 비밀번호 문구를 Portworx 클러스터에 리턴합니다.
- 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로 변경하고 있습니다.
-
서비스 ID를 작성하십시오.
-
사설 클러스터: KMS 인스턴스에 대한 액세스를 허용하는 가상 사설 엔드포인트 게이트웨이를 작성 하십시오. VPC의 각 서브넷에서 VPE로 하나 이상의 IP 주소를 바인드해야 합니다.
-
키 관리 공개 엔드포인트 URL 을 조회합니다. 엔드포인트를 올바른 형식 (예:
https://api.us-south.hs-crypto.cloud.ibm.com:<port>) 으로 기록해야 합니다. 자세한 정보는 Hyper Protect Crypto Services API 문서를 참조하십시오.
IBM Key Protect을 사용하여 볼륨 암호화 설정
-
서비스 ID를 작성하십시오.
-
서비스 인스턴스를 작성한 지역을 검색 하고 메모를 작성하십시오. 나중에 시크릿을 작성할 때 이 값이 필요합니다.
-
사설 클러스터: KMS 인스턴스에 대한 액세스를 허용하는 가상 사설 엔드포인트 게이트웨이를 작성 하십시오. VPC의 각 서브넷에서 VPE로 하나 이상의 IP 주소를 바인드해야 합니다.
클러스터에서 시크릿 작성
- 이전 절에서 검색한 인증 정보를 Base64로 인코딩하고 모든 Base64 인코딩된 값을 기록해 두십시오. 각 매개변수에 대해 이 명령을 반복하여 base64 인코딩 값을 검색하십시오.
echo -n "<value>" | base64 - 이름이
portworx인 클러스터의 네임스페이스를 작성하십시오.kubectl create ns portworx - IBM Key Protect 정보를 저장할 클러스터의
portworx네임스페이스에서 이름이px-ibm인 Kubernetes 시크릿을 작성하십시오.- 다음 컨텐츠를 사용하여 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 ```