이 페이지는 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 가져오기를 참조하세요.