Key Protect 통합

Gen 2

Cloud Databases 에 저장하는 데이터는 기본적으로 무작위로 생성된 키를 사용하여 암호화됩니다. 암호화 키를 관리하기 위해, IBM Key Protect 을 통해 BYOK(Bring Your Own Key) 기능을 활용하여 자체 키 중 하나를 사용하여 데이터베이스와 백업을 암호화할 수 있습니다.

시작하려면 Key ProtectIBM Cloud 계정에서 프로비저닝을 수행하십시오.

Key Protect에서 키 작성 또는 추가

Key Protect의 인스턴스로 이동하여 키를 생성하거나 입력하십시오.

UI에서 서비스 권한 부여

Key Protect 배치에 사용할 수 있도록 Cloud Databases에 권한을 부여하십시오.

  1. IBM Cloud 대시보드를 여십시오.
  2. 메뉴 모음에서 관리-> 액세스(IAM)를 클릭합니다.
  3. 사이드 탐색에서 권한을 클릭하십시오.
  4. 작성을 클릭하십시오.
  5. 소스 서비스 메뉴에서 배치 서비스를 선택하십시오. 예를 들어, Databases for PostgreSQL 혹은 Databases for MongoDB.
  6. 소스 서비스 리소스 메뉴에서 모든 리소스를 선택하십시오.
  7. 대상 서비스 메뉴에서 Key Protect를 선택하십시오.
  8. 대상 서비스 의 리소스 그룹으로 Account를 선택하거나 기본값을 유지하십시오
  9. 대상 서비스 인스턴스 ID 메뉴에서 권한 부여할 서비스 인스턴스를 선택하십시오.
  10. 독자 역할을 사용으로 설정하십시오.
  11. Bring your own key(BYOK)를 사용하려면, [ 종속 서비스 권한 부여] 섹션에서 [ 권한 위임 활성화 ] 확인란을 선택하십시오.
  12. 권한 부여를 클릭하십시오.

키로 배치를 프로비저닝하기 전에 서비스 권한이 없는 경우 프로비저닝이 실패합니다.

보다 엄격한 권한 부여 정책을 설정하려면, 명시적인 루트 키 CRN 또는 특정 Key Protect 인스턴스를 대상으로 정책을 구성하십시오.

CLI에서 서비스 권한 부여

  1. Cloud Databases 서비스가 CLI상의 Key Protect 서비스 인스턴스에 액세스할 수 있도록 권한 정책을 생성합니다. 전체 인수 목록을 보려면 IAM CLI 참조 문서를 참조하십시오.
ibmcloud iam authorization-policy-create <SERVICE-NAME> kms "Reader,AuthorizationDelegator"

키로 배치를 프로비저닝하기 전에 서비스 권한이 없는 경우 프로비저닝이 실패합니다.

보다 엄격한 권한 부여 정책을 설정하려면, 명시적인 루트 키 CRN 또는 특정 Key Protect 인스턴스를 대상으로 정책을 구성하십시오.

REST API를 통한 서비스 승인 부여

  1. Cloud Databases 서비스가 IAM REST API를 통해 Key Protect 서비스 인스턴스에 액세스할 수 있도록 권한 정책을 생성합니다.

전체 API 참조 내용은 IAM 정책 관리 API를 참조하십시오.

curl -X POST 'https://iam.cloud.ibm.com/v1/policies' -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' -d '{
  "type": "authorization",
  "subjects": [
      {
          "attributes": [
              {
                  "name": "accountId",
                  "value": "CUSTOMER_ACCOUNT_ID"
              },
              {
                  "name": "serviceName",
                  "value": "<SERVICE-NAME>"
              }
          ]
      }
  ],
  "roles": [
      {
        "role_id": "crn:v1:bluemix:public:iam::::serviceRole:Reader"
      },
      {
        "role_id": "crn:v1:bluemix:public:iam::::role:AuthorizationDelegator"
      }
    ],
    "resources": [
        {
            "attributes": [
                {
                    "name": "accountId",
                    "operator": "stringEquals",
                    "value": "CUSTOMER_ACCOUNT_ID"
                },
                {
                    "name": "serviceName",
                    "operator": "stringEquals",
                    "value": "kms"
                }
            ]
        }
    ]
}'

키로 배치를 프로비저닝하기 전에 서비스 권한이 없는 경우 프로비저닝이 실패합니다.

보다 엄격한 권한 부여 정책을 설정하려면, 명시적인 루트 키 CRN 또는 특정 Key Protect 인스턴스를 대상으로 정책을 구성하십시오.

Key Protect 키 사용

Cloud Databases 배치에 키 사용 권한을 부여한 후 배치를 프로비저닝할 때 키 이름 또는 CRN을 제공합니다. 배치는 암호화 키를 사용하여 데이터를 암호화합니다.

프로비저닝 시 UI에서 ‘ Key Protect ’ 키 사용

카탈로그 페이지에서 프로비저닝하는 경우, 드롭다운 메뉴에서 Key Protect 인스턴스와 키를 선택하십시오.

프로비저닝 시 CLI에서 Key Protect 키 사용

CLI에서 parameters JSON 객체의 dataservices.encryption.disk 매개변수를 사용하여 서비스 인스턴스에 루트 키 CRN을 할당하십시오.

ibmcloud resource service-instance-create <INSTANCE-NAME> <SERVICE-NAME> <PLAN-NAME> REGION -p '{"dataservices":{"encryption":{"disk":"KMS_KEY_CRN"}}}'

Key Protect 키는 단순히 ID가 아닌 전체 CRN으로 식별되어야 합니다. Key Protect 의 CRN은 다음과 같은 형식을 따릅니다 crn:v1:<...>:key:<id>.

프로비저닝 시 API에서 Key Protect 키 사용

API에서는 요청 본문에 dataservices.encryption.disk 매개변수를 사용하십시오.

  curl -X POST https://resource-controller.cloud.ibm.com/v2/resource_instances -H "Authorization: Bearer <IAM token>" -H 'Content-Type: application/json' -d '{
    "name": "<INSTANCE-NAME>",
    "target": "ca-mon",
    "resource_group": "<A RESOURCE GROUP GUID>",
    "resource_plan_id": "<A PLAN ID>",
    "parameters": {
      "dataservices": {
          "encryption": {
            "disk": "KMS_KEY_CRN"
          }
      }
    }

Key Protect 키는 단순히 ID가 아닌 전체 CRN으로 식별되어야 합니다. Key Protect 의 CRN은 다음과 같은 형식을 따릅니다 crn:v1:<...>:key:<id>.

키 순환

Key Protect 수동 및 자동 키 회전 기능을 제공하며, 키 회전 기능은 Cloud Databases 배포 환경에서 지원됩니다. 키를 순환하는 경우 프로세스에서 KMS 상태 동기화 태스크를 시작하고 배치는 새 키로 다시 암호화됩니다. 이 작업은 배포의 개요 페이지의 작업 탭에 표시되며, 관련 Key Protect 및 Cloud Databases 이벤트가 Activity Tracker 로 전송됩니다.

자세한 내용은 ‘수동 또는 자동 회전’을 참조하십시오.

배치 삭제

Key Protect 키로 보호되는 배포를 삭제하더라도, 소프트 삭제 기간(최대 9일) 동안 해당 배포는 키에 계속 등록된 상태로 유지됩니다. 소프트 삭제 기간 내에 키를 삭제하려면 키를 강제 삭제하십시오. 소프트 삭제 기간이 지나면 키를 정상적으로 삭제할 수 있습니다. 키를 언제 삭제할 수 있는지 확인하려면, 해당 키와 배포 간의 연결 관계를 확인하십시오.

암호 제거

암호 제거는 파괴적인 조치입니다. 키가 삭제되면 데이터를 복구할 수 없습니다.

Key Protect IBM Cloud® 서비스(Gen 2 배포 환경 포함)에서 사용 중인 키에 대해 Cloud Databases 강제 삭제를 시작할 수 있습니다. 이 조치를 암호 제거라고 합니다. 배치에서 사용 중인 키를 삭제하면 데이터가 포함된 디스크가 잠기고 배치가 사용 안함으로 설정됩니다. UI, CLI, API의 보안 설정과 같은 일부 메타데이터와 UI에 액세스할 수 있지만 여기에 포함된 데이터베이스나 데이터에는 액세스할 수 없습니다. 키 삭제 요청은 Activity Tracker Event Routing 로. 형식으로 전송됩니다 kms.secrets.delete.

백업을 위한 고유 키 가져오기

Key Protect 를 사용하는 경우, 데이터베이스를 프로비저닝할 때 배포 환경의 백업을 저장하는 IBM® Cloud Block Storage for Virtual Private Cloud 디스크를 암호화할 키를 지정할 수도 있습니다.

백업은 데이터베이스와 동일한 암호화 키를 상속받습니다. 데이터베이스에서 백업을 생성할 때는 다른 암호화 키를 지정할 수 없습니다.

위임 권한 부여

배포에서 ‘ Key Protect ’ 키를 사용하려면, 서비스 권한을 부여할 때 ‘권한 위임 허용’을 설정해야 합니다. 키로 배치를 프로비저닝하기 전에 위임 권한이 없는 경우 프로비저닝이 실패합니다.

위임을 사용으로 설정하고 배치를 프로비저닝하고 나면 IAM의 _권한_에 두 개의 항목이 표시됩니다. 하나는 해당 상태를 위임자로 나열하는 배치에 대한 항목입니다. 이는 "사용자 작성"입니다.

위임자 예시 Key Protect 의 승인
역할 소스 대상 유형
권한 위임자, 독자 <cloud-databases> 서비스 Key Protect 서비스 사용자 정의

그리고 서비스 인스턴스 및 해당 백업(있는 경우)에 대한 ‘ Block Storage for VPC ’ 볼륨에 하나씩 할당되며, 이 경우 배포가 시작자 역할을 합니다.

Cloud Databases 에서 Cloud Object Storage 에 대한 Key Protect 인증 예시
역할 소스 대상 유형
독자 Block Storage for VPC 서비스 Key Protect 서비스 작성자<cloud-databases-crn>

키 제거

IAM/ Key Protect 은 키와 Block Storage for VPC 간의 정책을 제거하는 것을 막지는 않지만(두 번째 예시), 이렇게 할 경우 토픽/파티션을 복구할 수 없게 될 수 있습니다.

Hyper Protect Crypto Services (HPCS) 사용

승인된 Cloud Databases Gen 2 배포의 경우, Key Protect 대신 Hyper Protect Crypto Services 를 사용할 수 있습니다. 이 통합은 이 페이지에 설명된 표준 BYOK 프로세스를 따르며, 다음과 같은 차이점이 있습니다:

  1. IAM 인증의 대상 서비스:

    서비스 권한을 부여할 때는 대신 Hyper Protect Crypto Services (또는 CLI/API에서는 hs-crypto )를 대상 서비스로 선택하십시오 kms. 독자 역할을 유지하고 권한 위임 허용 (AuthorizationDelegator)이 선택되어 있는지 확인하십시오.

  2. 프로비저닝 시 주요 CRN:

    프로비저닝 페이로드에 Hyper Protect Crypto Services 루트 키의 전체 CRN( crn:v1:bluemix:public:hs-crypto:... 대신 로 시작하는 kms)을 입력하십시오:

    • CLI/API: dataservices.encryption.disk 매개변수를 사용하여 CRN을 전달합니다:

      "dataservices": {
        "encryption": {
          "disk": "crn:v1:bluemix:public:hs-crypto:<REGION>:a/<ACCOUNT-ID>:<HPCS-INSTANCE-ID>:key:<KEY-ID>"
        }
      }
      
    • Terraform (ibm_database): Hyper Protect Crypto Services 키 CRN을 key_protect_key 인수에 전달합니다:

      key_protect_key = "crn:v1:bluemix:public:hs-crypto:<REGION>:a/<ACCOUNT-ID>:<HPCS-INSTANCE-ID>:key:<KEY-ID>"
      

배포 백업은 스토리지 위임을 통해 동일한 Hyper Protect Crypto Services 키를 자동으로 상속받습니다. 지역 간 독립적인 백업 사본(CRC)의 경우, 백업 사본의 dataservices.encryption.disk 페이로드에 별도의 대상 키 CRN을 선택적으로 지정할 수 있습니다.

흔히 빠지기 쉬운 함정

키 및 권한을 제거할 때 주의하십시오. 동일한 키를 사용하는 배포 환경이 여러 개인 경우, 위임 권한을 취소함으로써 해당 배포 환경 전체의 데이터가 의도치 않게 소실될 수 있습니다. 가능하다면 여러 배포에 동일한 키를 사용하지 마십시오.

인스턴스와 관련된 데이터를 완전히 삭제하려면 키를 삭제하면 됩니다. Block Storage for VPC 명령어는 해당 저장소가 읽기 및 쓰기 모두 불가능하도록 보장합니다. 그러나 동일한 키를 사용하는 다른 배포 환경(또는 해당 백업)에서는 이후 오류가 발생할 것입니다.

여러 배포 및/또는 백업에 동일한 키를 사용해야 하는 경우, 키와 권한을 제거하면 다음과 같은 부작용이 발생할 수 있습니다. (표 2에 표시된 대로) Block Storage for VPC 볼륨 권한을 삭제하면, 생성자로 표시된 배포뿐만 아니라 동일한 키를 사용하는 모든 배포에도 영향을 미칩니다. 지원 티켓을 제출하고 정책 재생성을 요청하기 전까지는 해당 배포 과정에서 오류가 발생할 것입니다.

키를 재사용하는 경우 주의하십시오.