이 페이지는 Apigee에 적용되지만 Apigee Hybrid에는 적용되지 않습니다.
Apigee Edge 문서 보기
이 문서에서는 VPC 피어링으로 명령줄에서 Apigee를 설치하고 구성하는 방법을 설명합니다. 이 단계는 데이터 상주 사용 설정 여부에 관계없이 유료 조직의 구독 가격 책정 모델과 사용한 만큼만 지불 가격 책정 모델 모두에 적용됩니다.
단계 요약
프로비저닝 단계는 다음과 같습니다.
- 1단계: 환경 변수 정의:
gcloud
를 설정하고 환경 변수를 정의합니다. Google Cloud CLI는 인증, 로컬 구성, 개발자 워크플로, Google Cloud API와의 상호작용을 관리합니다. - 2단계: API 사용 설정: Apigee를 사용하려면 여러 Google Cloud API를 사용 설정해야 합니다.
- 3단계: Apigee 서비스 ID 만들기: 이 서비스 계정은 Google Cloud 클라이언트 라이브러리에서 사용하여 Google Cloud API로 인증합니다.
- 4단계: 서비스 네트워킹 구성: 서비스 네트워킹은 네트워크와 Apigee 간의 비공개 연결 설정(VPC 네트워크 피어링 사용)을 자동화합니다.
- 5단계: 조직 만들기: Apigee 조직(조직이라고도 함)은 Apigee의 최상위 컨테이너입니다. 여기에는 모든 환경 및 환경 그룹, 사용자, API 프록시, 관련 리소스가 포함됩니다.
- 6단계: 런타임 인스턴스 만들기: 인스턴스 또는 런타임은 프로젝트 및 관련 서비스가 저장된 위치입니다. 이 위치는 서비스에 대한 사용자 대상 엔드포인트를 제공합니다.
- 7단계: 환경 만들기: API 프록시가 노출하는 API에 네트워크를 통해 액세스하려면 먼저 API 프록시를 환경에 배포하고 환경 그룹에 추가해야 합니다.
- 8단계: 라우팅 구성: API에 대한 외부 액세스 또는 내부 전용 액세스를 허용합니다.
- 9단계: 샘플 프록시 배포: API 프록시를 배포하고 호출하여 프로비저닝을 테스트합니다.
1단계: 환경 변수 정의
gcloud
를 설정하고 이후 단계에서 사용할 환경 변수를 정의합니다.
- 시작하기 전에에 나열된 설정 요구사항을 완료했는지 확인합니다.
- Cloud SDK가 설치되어 있어야 합니다. 이를 설치하려면 Cloud SDK 설치를 참조하세요.
- gcloud CLI 초기화의 설명대로 Cloud SDK를 초기화하거나 기본 요건에서 만든 Google Cloud 프로젝트가
gcloud
의 기본 프로젝트인지 확인합니다. - 명령어 터미널에서 다음 환경 변수를 정의합니다.
필요한 조직 유형에 해당하는 탭(데이터 상주 없음 또는 데이터 상주)을 선택합니다.
AUTH="$(gcloud auth print-access-token)"
PROJECT_ID="
YOUR_PROJECT_ID "PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
RUNTIME_LOCATION="
YOUR_RUNTIME_LOCATION "ANALYTICS_REGION="
YOUR_ANALYTICS_REGION "BILLING_TYPE="
YOUR_BILLING_TYPE "각 항목의 의미는 다음과 같습니다.
-
AUTH는 Bearer 토큰이 있는
Authentication
헤더를 정의합니다. Apigee API를 호출할 때 이 헤더를 사용합니다. 토큰은 일정 시간 후 만료됩니다. 만료 후에는 동일 명령어를 사용해서 다시 생성할 수 있습니다. 자세한 내용은 print-access-token 명령어의 참조 페이지를 확인하세요. - PROJECT_ID는 기본 요건의 일부로 만든 Cloud 프로젝트 ID입니다.
- PROJECT_NUMBER는 기본 요건의 일부로 만든 Cloud 프로젝트 번호입니다.
-
RUNTIME_LOCATION은 나중에 만들 Apigee 인스턴스가 있는 물리적 위치입니다. 사용 가능한 런타임 위치 목록은 Apigee 위치를 참조하세요.
-
ANALYTICS_REGION은 Apigee 분석 데이터가 저장되는 물리적 위치입니다. 사용 가능한 Apigee API 분석 리전 목록은 Apigee 위치를 참조하세요.
RUNTIME_LOCATION과 ANALYTICS_REGION은 둘 다 같은 리전일 수 있지만 반드시 동일할 필요는 없습니다.
-
BILLING_TYPE은 만드는 조직의 결제 유형입니다. 유효한 값은 다음과 같습니다.
- Pay-as-you-go 조직의 경우
PAYG
- 구독 조직의 경우
SUBSCRIPTION
- Pay-as-you-go 조직의 경우
AUTH="$(gcloud auth print-access-token)"
PROJECT_ID="
YOUR_PROJECT_ID "PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
RUNTIME_LOCATION="
YOUR_RUNTIME_LOCATION "CONTROL_PLANE_LOCATION="
YOUR_CONTROL_PLANE_LOCATION "CONSUMER_DATA_REGION="
YOUR_CONSUMER_DATA_REGION "BILLING_TYPE="
YOUR_BILLING_TYPE "각 항목의 의미는 다음과 같습니다.
-
AUTH는 Bearer 토큰이 있는
Authentication
헤더를 정의합니다. Apigee API를 호출할 때 이 헤더를 사용합니다. 토큰은 일정 시간 후 만료됩니다. 만료 후에는 동일 명령어를 사용해서 다시 생성할 수 있습니다. 자세한 내용은 print-access-token 명령어의 참조 페이지를 확인하세요. - PROJECT_ID는 기본 요건의 일부로 만든 Cloud 프로젝트 ID입니다.
- PROJECT_NUMBER는 기본 요건의 일부로 만든 Cloud 프로젝트 번호입니다.
-
RUNTIME_LOCATION은 나중에 만들 Apigee 인스턴스가 있는 물리적 위치입니다. 사용 가능한 런타임 위치 목록은 Apigee 위치를 참조하세요.
런타임 위치는 컨트롤 플레인 위치 내에 있어야 합니다. - CONTROL_PLANE_LOCATION은 Apigee 컨트롤 플레인 데이터가 저장되는 물리적 위치입니다. 사용 가능한 컨트롤 플레인 위치 목록은 Apigee 위치를 참조하세요.
- CONSUMER_DATA_REGION은 컨트롤 플레인 리전의 하위 리전입니다. CONTROL_PLANE_LOCATION 및 CONSUMER_DATA_REGION을 모두 지정해야 합니다. 사용 가능한 소비자 데이터 리전 목록은 Apigee 위치를 참조하세요.
-
BILLING_TYPE은 만드는 조직의 결제 유형입니다. 유효한 값은 다음과 같습니다.
- Pay-as-you-go 조직의 경우
PAYG
- 구독 조직의 경우
SUBSCRIPTION
- Pay-as-you-go 조직의 경우
-
AUTH는 Bearer 토큰이 있는
- (선택사항) 방금 설정한 값을 에코하여 작업을 확인합니다. 명령어에 변수를 사용하려면 변수 이름 앞에 달러 기호($)를 추가합니다.
echo $AUTH
echo $PROJECT_ID
echo $PROJECT_NUMBER
echo $RUNTIME_LOCATION
echo $ANALYTICS_REGION
echo $BILLING_TYPE
echo
명령어에 대한 응답은 다음과 같이 표시됩니다.YOUR_TOKEN my-cloud-project 1234567890 us-west1 us-west1 SUBSCRIPTIONecho $AUTH
echo $PROJECT_ID
echo $PROJECT_NUMBER
echo $RUNTIME_LOCATION
echo $CONTROL_PLANE_LOCATION
echo $CONSUMER_DATA_REGION
echo $BILLING_TYPE
echo
명령어에 대한 응답은 다음과 같이 표시됩니다.YOUR_TOKEN my-cloud-project 1234567890 us-west1 us us-west1 SUBSCRIPTION
2단계: API 사용 설정
이 태스크에 필요한 권한
이 태스크를 완료하는 데 필요한 권한이 포함된 사전 정의된 역할을 Apigee 프로비저닝 도구에 제공하거나 필요한 최소 권한을 제공하는 보다 세분화된 권한을 부여할 수 있습니다. 사전 정의된 역할과 API 사용 설정 권한을 참조하세요.
-
Apigee를 사용하려면 Google Cloud API를 여러 개 사용 설정해야 합니다. 이를 사용 설정하려면 다음
services enable
명령어를 실행합니다.gcloud services enable apigee.googleapis.com \ servicenetworking.googleapis.com \ compute.googleapis.com \ cloudkms.googleapis.com --project=$PROJECT_ID
(선택사항) 작업을 확인하려면
services list
명령어를 사용하여 사용 설정된 모든 API를 표시합니다.gcloud services list
방금 사용 설정한 API를 포함한 사용 설정된 모든 서비스가 응답으로 표시됩니다.
3단계: Apigee 서비스 에이전트 만들기
-
Apigee 서비스 ID를 만듭니다.
gcloud beta services identity create --service=apigee.googleapis.com \ --project=$PROJECT_ID
에이전트가 성공적으로 생성되었는지 확인합니다. 응답에 에이전트 이름이
service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com
형식으로 표시됩니다. 예를 들면 다음과 같습니다.Service identity created: service-1234567890@gcp-sa-apigee.iam.gserviceaccount.com
4단계: 서비스 네트워킹 구성
이 단계에서는 IP 주소 범위 쌍(/22 및 /28 CIDR 범위)을 Apigee에 할당하고 네트워크와 Apigee 네트워크 간에 VPC 피어링을 수행합니다. 각 Apigee 인스턴스에는 /22 및 /28의 중첩되지 않는 CIDR 범위가 필요합니다. Apigee 런타임 영역에는 이 CIDR 범위 내의 IP 주소가 할당됩니다. 따라서 이 범위는 Apigee에 예약되어야 하며 VPC 네트워크의 다른 애플리케이션에서 사용하면 안 됩니다. 자세한 내용 및 중요한 고려사항은 피어링 범위 이해를 참조하세요.
지금 만드는 것은 Apigee 인스턴스 1개에 충분한 네트워크 IP 범위입니다. 추가 Apigee 인스턴스를 만들려면 각 인스턴스에 대해 이 단계를 반복해야 합니다. 인스턴스 간에 범위를 공유할 수 없습니다. Apigee를 여러 리전으로 확장도 참조하세요.
이 태스크에 필요한 권한
이 태스크를 완료하는 데 필요한 권한이 포함된 사전 정의된 역할을 Apigee 프로비저닝 도구에 제공하거나 필요한 최소 권한을 제공하는 보다 세분화된 권한을 부여할 수 있습니다. 사전 정의된 역할과 서비스 네트워킹 권한을 참조하세요.
- 다음 환경 변수를 만듭니다.
RANGE_NAME=
YOUR_RANGE_NAME NETWORK_NAME=
YOUR_NETWORK_NAME 각 항목의 의미는 다음과 같습니다.
- RANGE_NAME은 만들려는 IP 주소 범위의 이름입니다.
범위 이름은 원하는 대로 지정할 수 있습니다. 예를 들면
google-svcs
입니다. - NETWORK_NAME은 주소를 예약할 네트워크 리소스의 이름입니다.
Google에서는 새 프로젝트마다 기본 네트워크(
default
)를 만들 수 있으므로 이를 사용할 수 있습니다. 하지만 테스트 이외의 다른 용도로는 기본 네트워크를 사용하지 않는 것이 좋습니다.
- RANGE_NAME은 만들려는 IP 주소 범위의 이름입니다.
범위 이름은 원하는 대로 지정할 수 있습니다. 예를 들면
- CIDR 길이가 /22인 네트워크 IP 범위를 만듭니다.
gcloud compute addresses create $RANGE_NAME \ --global \ --prefix-length=22 \ --description="Peering range for Apigee services" \ --network=$NETWORK_NAME \ --purpose=VPC_PEERING \ --addresses=
OPTIONAL_ADDRESSES \ --project=$PROJECT_ID여기서
--addresses
를 사용하면 IP 주소 범위를 필요에 따라 지정할 수 있습니다. 예를 들어 CIDR 블록192.168.0.0/22
를 할당하려면 주소에192.168.0.0
을 지정하고 프리픽스 길이에22
를 지정합니다. IP 할당 만들기도 참조하세요.--addresses
매개변수를 제공하지 않으면 gcloud에서 사용 가능한 IP 주소 범위를 선택합니다.성공하면
gcloud
가 다음과 같이 응답합니다.Created [https://www.googleapis.com/compute/v1/projects/
PROJECT_NAME /global/addresses/google-svcs].IP 주소 범위를 만든 후 주소는 해제할 때까지 프로젝트에 연결됩니다.
- CIDR 길이가 /22인 네트워크 IP 범위가 생성되었는지 확인합니다.
gcloud compute addresses list --global --project=$PROJECT_ID
gcloud compute addresses describe $RANGE_NAME --global --project=$PROJECT_ID
- CIDR 길이가 /28인 네트워크 IP 범위를 만듭니다. 이 범위는 필수이며 Apigee에서 문제 해결 목적으로 사용되며 맞춤설정 또는 변경할 수 없습니다.
gcloud compute addresses create google-managed-services-support-1 \ --global \ --prefix-length=28 \ --description="Peering range for supporting Apigee services" \ --network=$NETWORK_NAME \ --purpose=VPC_PEERING \ --addresses=
OPTIONAL_ADDRESSES \ --project=$PROJECT_ID여기서
--addresses
를 사용하면 IP 주소 범위를 필요에 따라 지정할 수 있습니다. 예를 들어 CIDR 블록192.168.0.0/28
를 할당하려면 주소에192.168.0.0
을 지정하고 프리픽스 길이에28
를 지정합니다. IP 할당 만들기도 참조하세요.--addresses
매개변수를 제공하지 않으면 gcloud에서 사용 가능한 IP 주소 범위를 선택합니다. - CIDR 길이가 /28인 네트워크 IP 범위가 생성되었는지 확인합니다.
gcloud compute addresses list --global --project=$PROJECT_ID
gcloud compute addresses describe google-managed-services-support-1 --global \ --project=$PROJECT_ID
- 다음 명령어를 사용하여 네트워크에 서비스를 연결합니다.
gcloud services vpc-peerings connect \ --service=servicenetworking.googleapis.com \ --network=$NETWORK_NAME \ --ranges=$RANGE_NAME,google-managed-services-support-1 \ --project=$PROJECT_ID
이 작업을 완료하는 데 몇 분 정도 걸릴 수 있습니다. 성공하면
gcloud
가 다음과 같이 응답합니다. 여기서 OPERATION_ID는 LRO의 UUID입니다.Operation "operations/
OPERATION_ID " finished successfully. - 몇 분 후 VPC 피어링이 성공했는지 확인합니다.
gcloud services vpc-peerings list \ --network=$NETWORK_NAME \ --service=servicenetworking.googleapis.com \ --project=$PROJECT_ID
Apigee가 네트워크와 Google 서비스 간의 연결을 만듭니다. 특히 Apigee는 VPC 피어링을 통해 프로젝트를 Service Networking API에 연결합니다. 또한 Apigee는 IP 주소도 프로젝트에 연결합니다.
5단계: 조직 만들기
이 태스크에 필요한 권한
이 작업을 완료하는 데 필요한 권한이 포함된 사전 정의된 역할을 Apigee 프로비저닝 도구에 제공하거나 필요한 최소 권한을 제공하는 보다 세분화된 권한을 부여할 수 있습니다. 다음을 참조하세요.
조직을 만들려면 먼저 런타임 데이터베이스 암호화 키링과 키를 만들고(1단계 참조), 데이터 상주를 사용하는 경우 컨트롤 플레인 암호화 키링과 키를 만들어야 합니다(2단계 참조). 이러한 Cloud KMS 키는 런타임 및 컨트롤 플레인 위치 전반에서 저장되고 복제되는 데이터를 암호화합니다. Apigee는 이러한 항목을 사용하여 KVM, 캐시, 데이터베이스에 저장되어 있는 클라이언트 보안 비밀번호와 같은 애플리케이션 데이터를 암호화합니다. 자세한 내용은 Apigee 암호화 키 정보를 참조하세요.
-
런타임 데이터베이스 암호화 키링과 키를 만듭니다.
-
런타임 데이터베이스 암호화 키링과 키의 위치에 대한 환경 변수를 정의합니다. 이렇게 하면 애플리케이션 키링 및 키를 만들 때 일관성을 유지하고 문서에서 더 쉽게 따를 수 있습니다.
값은 런타임 데이터베이스 암호화 키링과 키가 저장되는 물리적 위치입니다.
단일 리전 구성(단일 리전에 인스턴스가 하나만 있는 경우): 지원되는 KMS 리전 위치에서 선택합니다.
예를 들면 다음과 같습니다.
RUNTIMEDBKEY_LOCATION="us-west1"
이 값은 $RUNTIME_LOCATION(리전이라고도 함)과 같을 수 있지만 반드시 그럴 필요는 없습니다. 그러나 동일하면 성능상 이점이 있을 수 있습니다.
멀티 리전 구성: 지원되는 멀티 리전 위치(예:
us
또는europe
) 또는 이중 리전 위치에서 선택합니다.예를 들면 다음과 같습니다.
RUNTIMEDBKEY_LOCATION="us"
미국에서의 멀티 리전 구성을 갖고 있으면 가능한 경우
us
를 사용자 위치로 사용합니다. 그렇지 않은 경우nam4
를 사용하세요. - 데이터베이스 키링 및 키 이름의 환경 변수를 정의합니다.
키링의 이름은 조직에서 고유해야 합니다. 두 번째 또는 후속 리전을 만드는 경우 이름은 다른 키링의 이름과 동일할 수 없습니다.
RUNTIMEDB_KEY_RING_NAME=
YOUR_DB_KEY_RING_NAME RUNTIMEDB_KEY_NAME=
YOUR_DB_KEY_NAME - (선택사항) 방금 설정한 값을 에코하여 작업을 확인합니다. 명령어에 변수를 사용하려면 변수 이름 앞에 달러 기호($)를 추가합니다.
echo $RUNTIMEDBKEY_LOCATION
echo $RUNTIMEDB_KEY_RING_NAME
echo $RUNTIMEDB_KEY_NAME
- 새 키링을 만듭니다.
gcloud kms keyrings create $RUNTIMEDB_KEY_RING_NAME \ --location $RUNTIMEDBKEY_LOCATION --project $PROJECT_ID
Apigee 런타임 데이터베이스 암호화 키의 위치는 Cloud HSM 및 Cloud EKM을 지원하는 모든 Cloud KMS 위치를 지원합니다.
키를 만듭니다.
gcloud kms keys create $RUNTIMEDB_KEY_NAME \ --keyring $RUNTIMEDB_KEY_RING_NAME \ --location $RUNTIMEDBKEY_LOCATION \ --purpose "encryption" \ --project $PROJECT_ID
이 명령어는 키링을 만들어 지정된 키링에 추가합니다.
키 ID를 가져옵니다.
gcloud kms keys list \ --location=$RUNTIMEDBKEY_LOCATION \ --keyring=$RUNTIMEDB_KEY_RING_NAME \ --project=$PROJECT_ID
키 ID에는 다음 문법(파일 경로와 유사)이 포함됩니다.
projects/
PROJECT_ID /locations/RUNTIMEDBKEY_LOCATION /keyRings/RUNTIMEDB_KEY_RING_NAME /cryptoKeys/RUNTIMEDB_KEY_NAME 키 ID를 환경 변수에 입력합니다. 이후 명령어에서 이 변수를 사용하게 됩니다.
RUNTIMEDB_KEY_ID=
YOUR_RUNTIMEDB_KEY_ID Apigee 서비스 에이전트가 새 키를 사용할 수 있는 액세스 권한을 부여합니다.
gcloud kms keys add-iam-policy-binding $RUNTIMEDB_KEY_NAME \ --location $RUNTIMEDBKEY_LOCATION \ --keyring $RUNTIMEDB_KEY_RING_NAME \ --member serviceAccount:service-$PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter \ --project $PROJECT_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.
서비스 계정 이메일 주소에 있는 프로젝트 이름이 아닌 프로젝트 번호를 사용했는지 확인합니다.
-
- 데이터 상주를 사용하는 경우 컨트롤 플레인 암호화 키링과 키를 만듭니다. 데이터 상주를 사용하지 않는 경우 3단계로 이동합니다.
- 컨트롤 플레인 데이터베이스 암호화 키링과 키의 위치에 대한 환경 변수를 정의합니다.
CONTROL_PLANE_LOCATION=
YOUR_CONTROL_PLANE_LOCATION CONSUMER_DATA_REGION=
YOUR_CONSUMER_DATA_REGION 각 항목의 의미는 다음과 같습니다.
컨트롤 플레인 데이터베이스 키링과 키 이름에 대한 환경 변수를 정의합니다.
키링의 이름은 조직에서 고유해야 합니다.
CONTROL_PLANE_KEY_RING_NAME=
YOUR_CONTROL_PLANE_KEY_RING_NAME CONTROL_PLANE_KEY_NAME=
YOUR_CONTROL_PLANE_KEY_NAME CONSUMER_DATA_KEY_RING_NAME=
YOUR_CONSUMER_DATA_KEY_RING_NAME CONSUMER_DATA_KEY_NAME=
YOUR_CONSUMER_DATA_REGION_KEY_NAME 각 항목의 의미는 다음과 같습니다.
- 새 키링을 만듭니다.
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
- 키를 만듭니다.
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
이 명령어는 키링을 만들어 지정된 키링에 추가합니다.
키 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 projects/
PROJECT_ID /locations/CONSUMER_DATA_REGION /keyRings/CONSUMER_DATA_KEY_RING_NAME /cryptoKeys/CONSUMER_DATA_KEY_NAME - 키 ID를 환경 변수에 입력합니다. 이후 명령어에서 이 변수를 사용하게 됩니다.
CONTROL_PLANE_KEY_ID=
YOUR_CONTROL_PLANE_KEY_ID CONSUMER_DATA_KEY_ID=
YOUR_CONSUMER_DATA_KEY_ID - 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
이 명령어는 키를 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 organizations API에 다음 요청을 전송하여 조직을 만듭니다.
curl "https://apigee.googleapis.com/v1/organizations?parent=projects/$PROJECT_ID" \ -H "Authorization: Bearer $AUTH" \ -X POST \ -H "Content-Type:application/json" \ -d '{ "name":"'"$PROJECT_ID"'", "analyticsRegion":"'"$ANALYTICS_REGION"'", "runtimeType":"CLOUD", "billingType":"'"$BILLING_TYPE"'", "authorizedNetwork":"'"$NETWORK_NAME"'", "runtimeDatabaseEncryptionKeyName":"'"$RUNTIMEDB_KEY_ID"'" }'
각 항목의 의미는 다음과 같습니다.
-d
: 요청의 데이터 페이로드를 정의합니다. 이 페이로드에는 다음이 포함되어야 합니다.name
: 새 조직의 식별자입니다. 프로젝트 ID와 동일한 이름이어야 합니다.analyticsRegion
: 분석 데이터가 저장되는 물리적 위치입니다.runtimeType
: 이 값을CLOUD
로 설정합니다.billingType
: 만든 조직의 결제 유형을 지정합니다.authorizedNetwork
: 서비스 네트워킹 구성에서 지정한 피어링 네트워크를 식별합니다.runtimeDatabaseEncryptionKeyName
: 이전 단계에서 만든 애플리케이션 암호화 키의 ID입니다. ID는 파일 경로와 같이 구성되어 있습니다. 예를 들면 다음과 같습니다.projects/my-project/locations/us-west1/keyRings/my-key-ring/cryptoKeys/my-key
API를 사용하여 조직을 만듭니다.
curl "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations?parent=projects/$PROJECT_ID" \ -H "Authorization: Bearer $AUTH" \ -X POST \ -H "Content-Type:application/json" \ -d '{ "name":"'"$PROJECT_ID"'", "runtimeType":"CLOUD", "billingType":"'"$BILLING_TYPE"'", "controlPlaneEncryptionKeyName":"'"$CONTROL_PLANE_KEY_ID"'", "apiConsumerDataLocation":"'"$CONSUMER_DATA_REGION"'", "apiConsumerDataEncryptionKeyName":"'"$CONSUMER_DATA_KEY_ID"'", "authorizedNetwork":"'"$NETWORK_NAME"'", "runtimeDatabaseEncryptionKeyName":"'"$RUNTIMEDB_KEY_ID"'" }'
각 항목의 의미는 다음과 같습니다.
-d
: 요청의 데이터 페이로드를 정의합니다. 이 페이로드에는 다음이 포함되어야 합니다.name
: 새 조직의 식별자입니다. 프로젝트 ID와 동일한 이름이어야 합니다.runtimeType
: 이 값을CLOUD
로 설정합니다.billingType
: 만든 조직의 결제 유형을 지정합니다.controlPlaneEncryptionKeyName
: 컨트롤 플레인 키 ID입니다.apiConsumerDataLocation
: 내부 리소스에서 사용할 하위 리전도 지정해야 합니다. 지원되는 값은 데이터 상주 리전을 참조하세요.apiConsumerDataEncryptionKeyName
: 소비자 데이터 리전 키 ID입니다.authorizedNetwork
: 서비스 네트워킹 구성에서 지정한 피어링 네트워크를 식별합니다.runtimeDatabaseEncryptionKeyName
: 이전 단계에서 만든 애플리케이션 암호화 키의 ID입니다. ID는 파일 경로와 같이 구성되어 있습니다. 예를 들면 다음과 같습니다.
projects/my-project/locations/us-west1/keyRings/my-key-ring/cryptoKeys/my-key
이 명령어를 실행하면 Apigee가 장기 실행 작업을 시작합니다. 이 작업을 완료하는 데 몇 분 정도 걸릴 수 있습니다.
오류가 발생하면 데이터 페이로드의 변수 값에 따옴표를 사용했는지 확인합니다. 다음 예시와 같이 $PROJECT_ID 변수를 큰따옴표-작은따옴표-큰따옴표로 묶어야 합니다.
"'"$PROJECT_ID"'"
요청 값에 일반 문자열(환경 변수 아님)을 사용하는 경우 다음 예시와 같이 작은따옴표로 묶은 페이로드 문자열 안에 큰따옴표로 묶을 수 있습니다.
'{ "name":"my-gcp-project", ... }'
- 잠시만 기다려 주세요.
- 생성 요청의 상태를 확인하려면 다음 예시와 같이 Apigee List organizations API로
GET
요청을 보내면 됩니다.curl -H "Authorization: Bearer $AUTH" "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID"
curl -H "Authorization: Bearer $AUTH" "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID"
이 응답이 표시되면 조직 만들기가 아직 완료되지 않은 것입니다.
{ "error": { "code": 403, "message": "Permission denied on resource \"organizations/apigee-docs-m\" (or it may not exist)", "status": "PERMISSION_DENIED" } }
Apigee가 새 조직을 성공적으로 만들면 다음과 비슷한 응답이 수신됩니다.
{ "name": "my-cloud-project", "createdAt": "1592586495539", "lastModifiedAt": "1592586495539", "environments": [], "properties": { "property": [ { "name": "features.hybrid.enabled", "value": "true" }, { "name": "features.mart.connect.enabled", "value": "true" } ] }, "analyticsRegion": "us-west1", "runtimeType": "CLOUD", "subscriptionType": "PAID", "caCertificate": "
YOUR_CERTIFICATE ", "authorizedNetwork": "my-network", "projectId": "my-cloud-project" }{ "name": "my-cloud-project", "createdAt": "1681412783749", "lastModifiedAt": "1681412783749", "environments": [ "test-env" ], "properties": { "property": [ { "name": "features.mart.connect.enabled", "value": "true" }, { "name": "features.hybrid.enabled", "value": "true" } ] }, "authorizedNetwork": "default", "runtimeType": "CLOUD", "subscriptionType": "PAID", "caCertificate": "
YOUR_CERTIFICATE ", "runtimeDatabaseEncryptionKeyName": "projects/my-cloud-project/locations/us/keyRings/my-key-ring/cryptoKeys/my-key-name", "projectId": "my-cloud-project", "state": "ACTIVE", "billingType": "PAYG", "addonsConfig": { "advancedApiOpsConfig": {}, "integrationConfig": {}, "monetizationConfig": {}, "connectorsPlatformConfig": {} }, "apiConsumerDataEncryptionKeyName": "projects/my-cloud-project/locations/us-central1/keyRings/my-key-ring/cryptoKeys/my-key-name", "controlPlaneEncryptionKeyName": "projects/my-cloud-project/locations/us/keyRings/my-key-ring/cryptoKeys/my-key-name", "apiConsumerDataLocation": "us-central1", "apigeeProjectId": "i0c2a37e80f9850ab-tp" }Apigee가 HTTP 오류 응답을 반환하는 경우 Apigee 조직 만들기를 참조하세요.
다음 단계를 수행하여 컨트롤 플레인 암호화 키링 및 키를 만듭니다.
참조: CMEK 문제 해결