이 페이지는 Apigee에 적용되지만 Apigee Hybrid에는 적용되지 않습니다.
Apigee Edge 문서 보기
이 섹션에서는 암호화 키의 유형과 암호화 키를 만드는 방법을 설명합니다.
Apigee 설정 프로세스 중에 다음과 같은 Cloud Key Management Service 암호화 키를 생성합니다.
키 유형 | 생성 시점 | 설명 |
---|---|---|
컨트롤 플레인 암호화 키 |
Google Cloud 콘솔: 명령줄 인터페이스(CLI): |
데이터 상주 사용 시 Apigee는 이 키를 사용하여 테넌트 프로젝트 내의 BigQuery에 저장된 분석 데이터를 암호화합니다. API 프록시, 대상 서버, 트러스트 저장소와 키 저장소, 분석 데이터, 런타임 동안 공유되는 기타 모든 항목을 암호화합니다. Apigee에서 제어 영역 CMEK 키 두 개를 제공하라고 요청할 것입니다. 이 키와 API 소비자 데이터 암호화 키입니다. 제어 영역 암호화 키 위치는 제어 영역 위치와 일치해야 합니다. |
API 소비자 데이터 암호화 키 |
Google Cloud 콘솔: 명령줄 인터페이스(CLI): |
데이터 상주 사용 시 Apigee에는 컨트롤 플레인 암호화 키 외에도 단일 리전 키가 필요하며, 이 키는 단일 리전에서만 사용 가능한 서비스에 사용됩니다. 예를 들면 Dataflow, Cloud SQL입니다. API 소비자 데이터 암호화 키의 위치는 제어 영역 위치 내에 있어야 합니다. |
런타임 데이터베이스 암호화 키 |
Google Cloud 콘솔: 명령줄 인터페이스(CLI): |
KVM, 캐시, 클라이언트 보안 비밀번호와 같은 애플리케이션 데이터를 암호화한 후 데이터베이스에 저장합니다. 조직별로 한 개의 런타임 데이터베이스 암호화 키가 있습니다. 조직의 모든 인스턴스/리전에서 동일한 런타임 데이터베이스 암호화 키를 공유합니다.
런타임 데이터베이스 암호화 키는 Cloud HSM 및 Cloud EKM을 지원하는 모든 Cloud KMS 위치를 지원합니다. 이 키를 만들 때 멀티 리전 위치(예: 데이터 상주를 사용할 때 런타임 데이터베이스 암호화 키의 위치는 제어 영역 위치 내에 있어야 합니다. |
디스크 암호화 키 |
Google Cloud 콘솔: 명령줄 인터페이스(CLI): |
디스크에 기록되기 전에 런타임 인스턴스 데이터를 암호화합니다. 암호화된 데이터 유형에는 키 관리 시스템(KMS), 키-값 맵(KVM), 할당량 정의, 버킷 및 카운터와 모든 캐시된 데이터가 포함됩니다. KMS 데이터에는 API 제품, 개발자, 개발자 앱, OAuth 토큰(액세스 토큰, 갱신 토큰, 승인 코드 포함), API 키가 포함됩니다. 이 키는 런타임 인스턴스와 동일한 리전에 있습니다. 새 키를 만들 때 키 위치를 런타임 인스턴스 위치와 일치시킵니다. 각 인스턴스/리전 조합마다 고유한 디스크 암호화 키가 있습니다. |
핵심 사항
디스크 및 런타임 데이터베이스 암호화 키를 만들 때는 다음 사항에 유의하세요.
- Apigee 런타임 데이터베이스 암호화 키의 위치는 Cloud HSM 및 Cloud EKM을 지원하는 모든 Cloud KMS 위치를 지원합니다.
- 디스크 암호화 키 위치는 키가 사용되는 런타임 인스턴스의 위치와 일치해야 합니다.
- 한 번 위치를 설정하면 키의 위치를 변경할 수 없습니다.
- 모든 키는 키링에 있어야 합니다.
- 다른 유형의 키는 별도의 키링에 있어야 합니다. 디스크 암호화 키는 런타임 데이터베이스 암호화 키와 같은 키링에 있을 수 없습니다.
-
키에는
purpose
가 있어야 합니다. 명령줄을 사용하여 새 키를 생성하는 경우purpose
를encryption
으로 설정합니다. Google Cloud 콘솔을 사용하는 경우 용도에 대칭 암호화/복호화를 선택합니다. - 키는 다음 패턴을 사용하는 키 경로에서 정의됩니다.
projects/PROJECT_ID/locations/KEY_LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME
기존 키 나열
Apigee에서 사용할 새 Cloud KMS 암호화 키를 이미 만든 경우 설정 과정에서 새 키를 만드는 대신 해당 키를 사용하면 됩니다.
키링의 모든 KMS 키를 나열하려면 다음 안내를 따르세요.
gcloud kms keys list
명령어를 실행합니다.
gcloud kms keys list --keyring KEY_RING_NAME --location KEY_RING_LOCATION
다음을 바꿉니다.
-
KEY_RING_NAME: 키링의 이름입니다. 예를 들면
my-key-ring
입니다. -
KEY_RING_LOCATION: 키링의 물리적 위치입니다(예:
us-west1
).
또는 Google Cloud 콘솔에서 키를 확인할 수 있습니다.
명령줄에서 새 키 생성
명령줄이나 Google Cloud 콘솔에서 키링 및 키를 만들 수 있습니다.
키 유형마다 고유한 키링이 있어야 합니다. 예를 들어 디스크 암호화 키를 한 키링에 저장하면 런타임 데이터베이스 암호화 키는 별도의 키링에 저장해야 합니다.
다음 단계에서는 키링 및 키를 만드는 방법과 Apigee 서비스 에이전트가 새 키를 사용할 수 있도록 액세스 권한을 부여하는 방법을 설명합니다. 제어 영역(데이터 상주를 사용하는 경우), 런타임 데이터베이스, 런타임 디스크에 대해 키링과 키를 만듭니다.
-
gcloud kms keyrings create
명령어를 사용하여 새 키링을 만듭니다.제어 영역
데이터 상주가 사용 설정되면 제어 영역에 대한 키링을 만들고 소비자 데이터 리전에 대한 키링을 만듭니다.
gcloud kms keyrings create CONTROL_PLANE_KEY_RING_NAME \ --location CONTROL_PLANE_LOCATION \ --project PROJECT_ID
gcloud kms keyrings create CONSUMER_DATA_KEY_RING_NAME \ --location CONSUMER_DATA_REGION \ --project PROJECT_ID
다음을 바꿉니다.
- CONTROL_PLANE_KEY_RING_NAME: 제어 영역 키링 이름입니다.
- CONTROL_PLANE_LOCATION: Apigee 제어 영역 데이터가 저장되는 물리적 위치입니다.
- PROJECT_ID: Google Cloud 프로젝트 ID입니다.
- CONSUMER_DATA_KEY_RING_NAME: 소비자 데이터 키링 이름입니다.
- CONSUMER_DATA_REGION: 제어 영역 리전의 하위 리전입니다. CONTROL_PLANE_LOCATION 및 CONSUMER_DATA_REGION을 모두 지정해야 합니다.
런타임 데이터베이스
gcloud kms keyrings create RUNTIMEDB_KEY_RING_NAME \ --location RUNTIMEDB_KEY_LOCATION \ --project PROJECT_ID
다음을 바꿉니다.
- RUNTIMEDB_KEY_RING_NAME: 만들려는 데이터베이스 키링의 이름입니다.
- RUNTIMEDB_KEY_LOCATION: 데이터베이스 키링의 물리적 위치입니다.
- PROJECT_ID: Google Cloud 프로젝트 ID입니다.
Apigee 암호화 키의 위치는 Cloud HSM 및 Cloud EKM을 지원하는 모든 Cloud KMS 위치를 지원합니다.
런타임 디스크
gcloud kms keyrings create RUNTIMEDISK_KEY_RING_NAME \ --location RUNTIMEDISK_KEY_LOCATION \ --project PROJECT_ID
다음을 바꿉니다.
- RUNTIMEDISK_KEY_RING_NAME: 만들려는 디스크 키링의 이름입니다.
- RUNTIMEDISK_KEY_LOCATION: 디스크 키링의 물리적 위치입니다.
- PROJECT_ID: Google Cloud 프로젝트 ID입니다.
디스크 키링이 인스턴스와 동일한 위치에 설정되었는지 확인합니다. 각 인스턴스와 키링에 고유한 위치가 있어야 합니다.
gcloud kms keyrings list \ --location \ --project $PROJECT_ID
gcloud kms keyrings describe $DISK_KEY_RING_NAME \ --location \ --project $PROJECT_ID
-
kms keys create
명령어를 사용하여 키를 만듭니다.제어 영역
데이터 상주가 사용 설정되면 제어 영역에 대한 키링을 만들고 소비자 데이터 리전에 대한 키링을 만듭니다.
gcloud kms keys create CONTROL_PLANE_KEY_NAME \ --keyring CONTROL_PLANE_KEY_RING_NAME \ --location CONTROL_PLANE_LOCATION \ --purpose "encryption" \ --project PROJECT_ID
gcloud kms keys create CONSUMER_DATA_KEY_NAME \ --keyring CONSUMER_DATA_KEY_RING_NAME \ --location CONSUMER_DATA_REGION \ --purpose "encryption" \ --project PROJECT_ID
다음을 바꿉니다.
- CONTROL_PLANE_KEY_NAME: 제어 영역 키 이름입니다.
- CONTROL_PLANE_KEY_RING_NAME: 제어 영역 키링 이름입니다.
- CONTROL_PLANE_LOCATION: Apigee 제어 영역 데이터가 저장되는 물리적 위치입니다.
- PROJECT_ID: Google Cloud 프로젝트 ID입니다.
- CONSUMER_DATA_KEY_NAME: 소비자 데이터 키 이름입니다.
- CONSUMER_DATA_KEY_RING_NAME: 소비자 데이터 키링 이름입니다.
- CONSUMER_DATA_REGION: 제어 영역 리전의 하위 리전입니다. CONTROL_PLANE_LOCATION 및 CONSUMER_DATA_REGION을 모두 지정해야 합니다.
런타임 데이터베이스
gcloud kms keys create RUNTIMEDB_KEY_NAME \ --keyring RUNTIMEDB_KEY_RING_NAME \ --location RUNTIMEDB_KEY_LOCATION \ --purpose "encryption" \ --project PROJECT_ID
다음을 바꿉니다.
- RUNTIMEDB_KEY_NAME: 만들려는 데이터베이스 키의 이름입니다.
- RUNTIMEDB_KEY_RING_NAME: 만들려는 데이터베이스 키링의 이름입니다.
- RUNTIMEDB_KEY_LOCATION: 데이터베이스 키링의 물리적 위치입니다.
- PROJECT_ID: Google Cloud 프로젝트 ID입니다.
런타임 디스크
gcloud kms keys create RUNTIMEDISK_KEY_NAME \ --keyring RUNTIMEDISK_KEY_RING_NAME \ --location RUNTIMEDISK_KEY_LOCATION \ --purpose "encryption" \ --project PROJECT_ID
다음을 바꿉니다.
- RUNTIMEDISK_KEY_NAME: 만들려는 디스크 키의 이름입니다.
- RUNTIMEDISK_KEY_RING_NAME: 만들려는 디스크 키링의 이름입니다.
- RUNTIMEDISK_KEY_LOCATION: 디스크 키링의 물리적 위치입니다.
- PROJECT_ID: Google Cloud 프로젝트 ID입니다.
이 명령어는 키링을 만들어 지정된 키링에 추가합니다.
키를 참조할 때는 키 ID를 사용합니다.
-
gcloud kms keys add-iam-policy-binding
명령어를 사용하여 Apigee 서비스 에이전트가 새 키를 사용할 수 있는 액세스 권한을 부여합니다.제어 영역
데이터 상주가 사용 설정되면 제어 영역에 대한 키링을 만들고 소비자 데이터 리전에 대한 키링을 만듭니다.
gcloud kms keys add-iam-policy-binding CONTROL_PLANE_KEY_NAME \ --location CONTROL_PLANE_LOCATION \ --keyring CONTROL_PLANE_KEY_RING_NAME \ --member "serviceAccount:service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com" \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter \ --project PROJECT_ID
gcloud kms keys add-iam-policy-binding CONSUMER_DATA_KEY_NAME \ --location CONSUMER_DATA_REGION \ --keyring CONSUMER_DATA_KEY_RING_NAME \ --member "serviceAccount:service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com" \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter \ --project PROJECT_ID
다음을 바꿉니다.
- CONTROL_PLANE_KEY_NAME: 제어 영역 키 이름입니다.
- CONTROL_PLANE_LOCATION: Apigee 제어 영역 데이터가 저장되는 물리적 위치입니다.
- CONTROL_PLANE_KEY_RING_NAME: 제어 영역 키링 이름입니다.
- PROJECT_NUMBER: Google Cloud 프로젝트 번호입니다.
- PROJECT_ID: Google Cloud 프로젝트 ID입니다.
- CONSUMER_DATA_KEY_NAME: 소비자 데이터 키 이름입니다.
- CONSUMER_DATA_REGION: 제어 영역 리전의 하위 리전입니다. CONTROL_PLANE_LOCATION 및 CONSUMER_DATA_REGION을 모두 지정해야 합니다.
- CONSUMER_DATA_KEY_RING_NAME: 소비자 데이터 키링 이름입니다.
런타임 데이터베이스
gcloud kms keys add-iam-policy-binding RUNTIMEDB_KEY_NAME \ --location RUNTIMEDB_KEY_LOCATION \ --keyring RUNTIMEDB_KEY_RING_NAME \ --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter \ --project PROJECT_ID
다음을 바꿉니다.
- RUNTIMEDB_KEY_NAME: 만들려는 데이터베이스 키의 이름입니다.
- RUNTIMEDB_KEY_RING_NAME: 만들려는 데이터베이스 키링의 이름입니다.
- RUNTIMEDB_KEY_LOCATION: 데이터베이스 키링의 물리적 위치입니다.
- PROJECT_NUMBER: Google Cloud 프로젝트 번호입니다.
- PROJECT_ID: Google Cloud 프로젝트 ID입니다.
런타임 디스크
gcloud kms keys add-iam-policy-binding RUNTIMEDISK_KEY_NAME \ --location RUNTIMEDISK_KEY_LOCATION \ --keyring RUNTIMEDISK_KEY_RING_NAME \ --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter \ --project PROJECT_ID
다음을 바꿉니다.
- RUNTIMEDISK_KEY_NAME: 만들려는 디스크 키의 이름입니다.
- RUNTIMEDISK_KEY_RING_NAME: 만들려는 디스크 키링의 이름입니다.
- RUNTIMEDISK_KEY_LOCATION: 디스크 키링의 물리적 위치입니다.
- PROJECT_NUMBER: Google Cloud 프로젝트 번호입니다.
- PROJECT_ID: Google Cloud 프로젝트 ID입니다.
이 명령어는 키를 Apigee 서비스 에이전트에 결합합니다.
이 요청이 완료되면
gcloud
는 다음과 비슷한 응답을 보냅니다.Updated IAM policy for key [runtime]. bindings: - members: - serviceAccount:service-1234567890@gcp-sa-apigee.iam.gserviceaccount.com role: roles/cloudkms.cryptoKeyEncrypterDecrypter etag: BwWqgEuCuwk= version: 1
다음과 같은 오류가 표시되는 경우
INVALID_ARGUMENT: Role roles/cloudkms.cryptokms.cryptoKeyEncrypterDecrypter is not supported for this resource.
서비스 계정 이메일 주소에 있는 프로젝트 이름이 아닌 프로젝트 번호를 사용했는지 확인합니다.
키가 Apigee 서비스 에이전트에 결합되었는지 확인하려면 다음 안내를 따르세요.
gcloud kms keys get-iam-policy $DISK_KEY_NAME \ --keyring $DISK_KEY_RING_NAME \ --location \ --project $PROJECT_ID
gcloud kms keys describe $DISK_KEY_NAME \ --keyring $DISK_KEY_RING_NAME \ --location \ --project $PROJECT_ID
키링의 이름은 조직에서 고유해야 합니다. 추가 리전을 만드는 경우 해당 리전의 키링 이름은 기존 키링 이름과 동일할 수 없습니다.
Google Cloud 콘솔을 사용하여 새 키 생성
대칭 암호화 키 만들기의 설명에 따라 콘솔을 사용하여 새 키를 생성할 수 있습니다.
콘솔을 사용하여 새 키를 만드는 경우:
- 런타임 데이터베이스 암호화 키의 경우 위치를 Cloud HSM 및 Cloud EKM을 지원하는 Cloud KMS 위치로 설정합니다. UI에서는 키의 다른 위치를 선택할 수 없으므로 키링에서 선택한 항목과 일치합니다.
- 키를 만든 후 키 옆에 있는 더보기를 클릭한 다음 리소스 이름 복사를 선택하여 암호화 키 창에서 키 경로를 가져옵니다.
키 ID를 가져옵니다.
Cloud KMS API 또는 Google Cloud CLI를 사용하여 Cloud Key Management Service 리소스를 참조하는 경우 리소스 ID를 사용합니다. gcloud kms keys list
명령어를 사용하여 키 ID를 가져올 수 있습니다.
제어 영역
데이터 상주 사용 설정 시 제어 영역에 대한 키링과 소비자 데이터 리전에 대한 키링이 하나씩 있습니다.
gcloud kms keys list \ --location=CONTROL_PLANE_LOCATION \ --keyring=CONTROL_PLANE_KEY_RING_NAME \ --project=PROJECT_ID
gcloud kms keys list \ --location=CONSUMER_DATA_REGION \ --keyring=CONSUMER_DATA_KEY_RING_NAME \ --project=PROJECT_ID
키 ID에는 다음 구문(파일 경로와 유사)이 포함됩니다.
projects/PROJECT_ID/locations/CONTROL_PLANE_LOCATION/keyRings/CONTROL_PLANE_KEY_RING_NAME/cryptoKeys/CONTROL_PLANE_KEY_NAME
런타임 데이터베이스
gcloud kms keys list \ --location=RUNTIMEDB_KEY_LOCATION \ --keyring=RUNTIMEDB_KEY_RING_NAME \ --project=PROJECT_ID
키 ID에는 다음 구문(파일 경로와 유사)이 포함됩니다.
projects/PROJECT_ID/locations/RUNTIMEDB_KEY_LOCATION/keyRings/RUNTIMEDB_KEY_RING_NAME/cryptoKeys/RUNTIMEDB_KEY_NAME
런타임 디스크
gcloud kms keys list \ --location=RUNTIMEDISK_KEY_LOCATION \ --keyring=RUNTIMEDISK_KEY_RING_NAME \ --project=PROJECT_ID
키 ID에는 다음 구문(파일 경로와 유사)이 포함됩니다.
projects/PROJECT_ID/locations/RUNTIMEDISK_KEY_LOCATION/keyRings/RUNTIMEDISK_KEY_RING_NAME/cryptoKeys/RUNTIMEDISK_KEY_NAME
예를 들면 다음과 같습니다.
NAME: projects/my-project/locations/us-west1/keyRings/my-key-ring/cryptoKeys/my-key PURPOSE: ENCRYPT_DECRYPT ALGORITHM: GOOGLE_SYMMETRIC_ENCRYPTION PROTECTION_LEVEL: SOFTWARE LABELS: PRIMARY_ID: 1 PRIMARY_STATE: ENABLED
Google Cloud 콘솔에서 키 ID를 가져올 수도 있습니다. 자세한 내용은 Cloud KMS 리소스 ID 가져오기를 참조하세요.