Apigee 암호화 키 정보

이 페이지는 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 HSMCloud EKM을 지원하는 모든 Cloud KMS 위치를 지원합니다. 이 키를 만들 때 멀티 리전 위치(예: us 또는 europe) 또는 이중 리전 위치(예: eur5, nam4)를 사용하는 것이 좋습니다.

데이터 상주를 사용할 때 런타임 데이터베이스 암호화 키의 위치는 제어 영역 위치 내에 있어야 합니다.

디스크 암호화 키

Google Cloud 콘솔:

명령줄 인터페이스(CLI):

디스크에 기록되기 전에 런타임 인스턴스 데이터를 암호화합니다.

암호화된 데이터 유형에는 키 관리 시스템(KMS), 키-값 맵(KVM), 할당량 정의, 버킷 및 카운터와 모든 캐시된 데이터가 포함됩니다. KMS 데이터에는 API 제품, 개발자, 개발자 앱, OAuth 토큰(액세스 토큰, 갱신 토큰, 승인 코드 포함), API 키가 포함됩니다.

이 키는 런타임 인스턴스와 동일한 리전에 있습니다. 새 키를 만들 때 키 위치를 런타임 인스턴스 위치와 일치시킵니다.

각 인스턴스/리전 조합마다 고유한 디스크 암호화 키가 있습니다.

핵심 사항

디스크 및 런타임 데이터베이스 암호화 키를 만들 때는 다음 사항에 유의하세요.

  • Apigee 런타임 데이터베이스 암호화 키의 위치는 Cloud HSMCloud EKM을 지원하는 모든 Cloud KMS 위치를 지원합니다.
  • 디스크 암호화 키 위치는 키가 사용되는 런타임 인스턴스의 위치와 일치해야 합니다.
  • 한 번 위치를 설정하면 키의 위치를 변경할 수 없습니다.
  • 모든 키는 키링에 있어야 합니다.
  • 다른 유형의 키는 별도의 키링에 있어야 합니다. 디스크 암호화 키는 런타임 데이터베이스 암호화 키와 같은 키링에 있을 수 없습니다.
  • 키에는 purpose가 있어야 합니다. 명령줄을 사용하여 새 키를 생성하는 경우 purposeencryption으로 설정합니다. 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 서비스 에이전트가 새 키를 사용할 수 있도록 액세스 권한을 부여하는 방법을 설명합니다. 컨트롤 플레인(데이터 상주를 사용하는 경우), 런타임 데이터베이스, 런타임 디스크에 대해 키링과 키를 만듭니다.

  1. 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 HSMCloud 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
  2. 키링의 이름은 조직에서 고유해야 합니다. 추가 리전을 만드는 경우 해당 리전의 키링 이름은 기존 키링 이름과 동일할 수 없습니다.

  3. 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를 사용합니다.

  4. 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 HSMCloud 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 가져오기를 참조하세요.