Apigee 암호화 키 정보

이 페이지는 Apigee에 적용되지만 Apigee Hybrid에는 적용되지 않습니다.

Apigee Edge 문서 보기

이 섹션에서는 암호화 키의 유형과 암호화 키를 만드는 방법을 설명합니다.

Apigee 설정 프로세스 중에 다음과 같은 Cloud Key Management Service 암호화 키를 생성합니다.

키 유형 생성 시점 설명
제어 영역 암호화 키 3단계: 조직 만들기(구독)

3단계: 호스팅 및 암호화 구성(사용한 만큼만 지불)

데이터 상주 사용 시 Apigee는 이 키를 사용하여 테넌트 프로젝트 내의 BigQuery에 저장된 분석 데이터를 암호화합니다.

API 프록시, 대상 서버, 트러스트 저장소와 키 저장소, 분석 데이터, 런타임 간에 공유되는 기타 모든 항목을 암호화합니다.

Apigee에서 제어 영역 CMEK 키 두 개를 제공하라고 요청할 것입니다. 이 키와 API 소비자 데이터 암호화 키입니다.

제어 영역 암호화 키 위치는 제어 영역 위치와 일치해야 합니다.

API 소비자 데이터 암호화 키 3단계: 조직 만들기(구독)

3단계: 호스팅 및 암호화 구성(사용한 만큼만 지불)

데이터 상주 사용 시 Apigee에는 제어 영역 암호화 키 외에도 단일 리전 키가 필요하며, 이 키는 단일 리전에서만 사용 가능한 서비스에 사용됩니다. 예를 들면 Dataflow, Cloud SQL입니다.

API 소비자 데이터 암호화 키의 위치는 제어 영역 위치 내에 있어야 합니다.

런타임 데이터베이스 암호화 키 3단계: Apigee 조직 만들기(구독)

3단계: 호스팅 및 암호화 구성(사용한 만큼만 지불)

KVM, 캐시, 클라이언트 보안 비밀번호와 같은 애플리케이션 데이터를 암호화한 후 데이터베이스에 저장합니다.

조직별로 한 개의 런타임 데이터베이스 암호화 키가 있습니다. 조직의 모든 인스턴스/리전에서 동일한 런타임 데이터베이스 암호화 키를 공유합니다.

런타임 데이터베이스 암호화 키는 Cloud HSMCloud EKM을 지원하는 모든 Cloud KMS 위치를 지원합니다. 이 키를 만들 때 멀티 리전 위치(예: us 또는 europe) 또는 이중 리전 위치(예: eur5, nam4)를 사용하는 것이 좋습니다.

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

키링의 위치를 선택할 수 있는지 여부는 사용하는 설치 유형에 따라 다릅니다. Apigee 프로비저닝 마법사에서는 키링의 위치를 직접 선택할 수 없고 위치가 자동으로 선택됩니다. 명령줄을 사용하는 경우 키링의 위치를 선택할 수 있습니다.

디스크 암호화 키 5단계: Apigee 런타임 인스턴스 만들기(구독)

3단계: 호스팅 및 암호화 구성(사용한 만큼만 지불)

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

암호화된 데이터 유형에는 키 관리 시스템(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 가져오기를 참조하세요.