VPC 피어링으로 유료 조직 프로비저닝

VPC 피어링으로 유료 조직 프로비저닝

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

Apigee Edge 문서 보기

이 문서에서는 VPC 피어링으로 명령줄에서 Apigee를 설치하고 구성하는 방법을 설명합니다. 이 단계는 데이터 상주의 사용 설정 여부와 관계없이 유료 조직의 구독 및 사용한 만큼만 지불 가격 책정 모델에 모두 적용됩니다.

단계 요약

프로비저닝 단계는 다음과 같습니다.

1단계: 환경 변수 정의

gcloud를 설정하고 이후 단계에서 사용할 환경 변수를 정의합니다.

  1. 시작하기 전에에 나열된 설정 요구사항을 완료했는지 확인합니다.
  2. Cloud SDK가 설치되어 있어야 합니다. 이를 설치하려면 Cloud SDK 설치를 참조하세요.
  3. gcloud CLI 초기화의 설명대로 Cloud SDK를 초기화하거나 기본 요건에서 만든 Google Cloud 프로젝트가 gcloud의 기본 프로젝트인지 확인합니다.
  4. 명령어 터미널에서 다음 환경 변수를 정의합니다. 필요한 조직 유형에 해당하는 탭(데이터 상주 없음 또는 데이터 상주)을 선택합니다.

    데이터 상주 없음

    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_LOCATIONANALYTICS_REGION은 둘 다 같은 리전일 수 있지만 반드시 동일할 필요는 없습니다.

    • BILLING_TYPE은 만드는 조직의 결제 유형입니다. 유효한 값은 다음과 같습니다.

    데이터 상주

    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은 만드는 조직의 결제 유형입니다. 유효한 값은 다음과 같습니다.

  5. (선택사항) 방금 설정한 값을 에코하여 작업을 확인합니다. 명령어에 변수를 사용하려면 변수 이름 앞에 달러 기호($)를 추가합니다.

    데이터 상주 없음

    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
    SUBSCRIPTION
    

    데이터 상주

    echo $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 사용 설정

  1. Apigee를 사용하려면 Google Cloud API를 여러 개 사용 설정해야 합니다. 이를 사용 설정하려면 다음 services enable 명령어를 실행합니다.

    gcloud services enable apigee.googleapis.com \
        servicenetworking.googleapis.com \
        compute.googleapis.com \
        cloudkms.googleapis.com --project=$PROJECT_ID
  2. (선택사항) 작업을 확인하려면 services list 명령어를 사용하여 사용 설정된 모든 API를 표시합니다.

    gcloud services list

    방금 사용 설정한 API를 포함한 사용 설정된 모든 서비스가 응답으로 표시됩니다.

3단계: Apigee 서비스 에이전트 만들기

  1. Apigee 서비스 ID를 만듭니다.

    gcloud beta services identity create --service=apigee.googleapis.com \
      --project=$PROJECT_ID
  2. 에이전트가 성공적으로 생성되었는지 확인합니다. 응답에 에이전트 이름이 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를 여러 리전으로 확장도 참조하세요.

  1. 다음 환경 변수를 만듭니다.
    RANGE_NAME=YOUR_RANGE_NAME
    NETWORK_NAME=YOUR_NETWORK_NAME
    

    각 항목의 의미는 다음과 같습니다.

    • RANGE_NAME은 만들려는 IP 주소 범위의 이름입니다. 범위 이름은 원하는 대로 지정할 수 있습니다. 예를 들면 google-svcs입니다.
    • NETWORK_NAME은 주소를 예약할 네트워크 리소스의 이름입니다.

      Google에서는 새 프로젝트마다 기본 네트워크(default)를 만들 수 있으므로 이를 사용할 수 있습니다. 하지만 테스트 이외의 다른 용도로는 기본 네트워크를 사용하지 않는 것이 좋습니다.

  2. 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 주소 범위를 만든 후 주소는 해제할 때까지 프로젝트에 연결됩니다.

  3. CIDR 길이가 /22인 네트워크 IP 범위가 생성되었는지 확인합니다.
    gcloud compute addresses list --global --project=$PROJECT_ID
    gcloud compute addresses describe $RANGE_NAME --global --project=$PROJECT_ID
  4. 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 주소 범위를 선택합니다.

  5. CIDR 길이가 /28인 네트워크 IP 범위가 생성되었는지 확인합니다.
    gcloud compute addresses list --global --project=$PROJECT_ID
    gcloud compute addresses describe google-managed-services-support-1 --global \
      --project=$PROJECT_ID
  6. 다음 명령어를 사용하여 네트워크에 서비스를 연결합니다.
    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_IDLRO의 UUID입니다.

    Operation "operations/OPERATION_ID" finished successfully.
  7. Apigee가 네트워크와 Google 서비스 간의 연결을 만듭니다. 특히 Apigee는 VPC 피어링을 통해 프로젝트를 Service Networking API에 연결합니다. 또한 Apigee는 IP 주소도 프로젝트에 연결합니다.

  8. 몇 분 후 VPC 피어링이 성공했는지 확인합니다.
    gcloud services vpc-peerings list \
      --network=$NETWORK_NAME \
      --service=servicenetworking.googleapis.com \
      --project=$PROJECT_ID

5단계: 조직 만들기

조직을 만들려면 먼저 런타임 데이터베이스 암호화 키링과 키를 만들고(1단계 참조), 데이터 상주를 사용하는 경우 컨트롤 플레인 암호화 키링과 키를 만들어야 합니다(2단계 참조). 이러한 Cloud KMS 키는 런타임 및 컨트롤 플레인 위치 전반에서 저장되고 복제되는 데이터를 암호화합니다. Apigee는 이러한 항목을 사용하여 KVM, 캐시, 데이터베이스에 저장되어 있는 클라이언트 보안 비밀번호와 같은 애플리케이션 데이터를 암호화합니다. 자세한 내용은 Apigee 암호화 키 정보를 참조하세요.

  1. 런타임 데이터베이스 암호화 키링과 키를 만듭니다.

    1. 런타임 데이터베이스 암호화 키링과 키의 위치에 대한 환경 변수를 정의합니다. 이렇게 하면 애플리케이션 키링 및 키를 만들 때 일관성을 유지하고 문서에서 더 쉽게 따를 수 있습니다.

      값은 런타임 데이터베이스 암호화 키링과 키가 저장되는 물리적 위치입니다.

      단일 리전

      단일 리전 구성(단일 리전에 인스턴스가 하나만 있는 경우): 지원되는 KMS 리전 위치에서 선택합니다.

      예를 들면 다음과 같습니다.

      RUNTIMEDBKEY_LOCATION="us-west1"

      이 값은 $RUNTIME_LOCATION(리전이라고도 함)과 같을 수 있지만 반드시 그럴 필요는 없습니다. 그러나 동일하면 성능상 이점이 있을 수 있습니다.

      멀티 리전

      멀티 리전 구성: 지원되는 멀티 리전 위치(예: us 또는 europe) 또는 이중 리전 위치에서 선택합니다.

      예를 들면 다음과 같습니다.

      RUNTIMEDBKEY_LOCATION="us"

      미국에서의 멀티 리전 구성을 갖고 있으면 가능한 경우 us를 사용자 위치로 사용합니다. 그렇지 않은 경우 nam4를 사용하세요.

    2. 데이터베이스 키링 및 키 이름의 환경 변수를 정의합니다.

      키링의 이름은 조직에서 고유해야 합니다. 두 번째 또는 후속 리전을 만드는 경우 이름은 다른 키링의 이름과 동일할 수 없습니다.

      RUNTIMEDB_KEY_RING_NAME=YOUR_DB_KEY_RING_NAME
      RUNTIMEDB_KEY_NAME=YOUR_DB_KEY_NAME
    3. (선택사항) 방금 설정한 값을 에코하여 작업을 확인합니다. 명령어에 변수를 사용하려면 변수 이름 앞에 달러 기호($)를 추가합니다.
      echo $RUNTIMEDBKEY_LOCATION
      echo $RUNTIMEDB_KEY_RING_NAME
      echo $RUNTIMEDB_KEY_NAME
    4. 새 키링을 만듭니다.
      gcloud kms keyrings create $RUNTIMEDB_KEY_RING_NAME \
        --location $RUNTIMEDBKEY_LOCATION --project $PROJECT_ID

      Apigee 런타임 데이터베이스 암호화 키의 위치는 Cloud HSMCloud EKM을 지원하는 모든 Cloud KMS 위치를 지원합니다.

    5. 키를 만듭니다.

      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
    6. 키 ID를 환경 변수에 입력합니다. 이후 명령어에서 이 변수를 사용하게 됩니다.

      RUNTIMEDB_KEY_ID=YOUR_RUNTIMEDB_KEY_ID
    7. 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.

      서비스 계정 이메일 주소에 있는 프로젝트 이름이 아닌 프로젝트 번호를 사용했는지 확인합니다.

  2. 데이터 상주를 사용하는 경우 컨트롤 플레인 암호화 키링과 키를 만듭니다. 데이터 상주를 사용하지 않는 경우 3단계로 이동합니다.
  3. 다음 단계를 수행하여 컨트롤 플레인 암호화 키링 및 키를 만듭니다.

    1. 컨트롤 플레인 데이터베이스 암호화 키링과 키의 위치에 대한 환경 변수를 정의합니다.
      CONTROL_PLANE_LOCATION=YOUR_CONTROL_PLANE_LOCATION
      CONSUMER_DATA_REGION=YOUR_CONSUMER_DATA_REGION

      각 항목의 의미는 다음과 같습니다.

      • CONTROL_PLANE_LOCATION은 Apigee 컨트롤 플레인 데이터가 저장되는 물리적 위치입니다. 사용 가능한 컨트롤 플레인 위치 목록은 Apigee 위치를 참조하세요.
      • CONSUMER_DATA_REGION은 컨트롤 플레인 리전의 하위 리전입니다. CONTROL_PLANE_LOCATION 및 CONSUMER_DATA_REGION을 모두 지정해야 합니다. 사용 가능한 소비자 데이터 리전 목록은 Apigee 위치를 참조하세요.
    2. 컨트롤 플레인 데이터베이스 키링과 키 이름에 대한 환경 변수를 정의합니다.

      키링의 이름은 조직에서 고유해야 합니다.

      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

      각 항목의 의미는 다음과 같습니다.

      • CONTROL_PLANE_KEY_RING_NAME은 컨트롤 플레인 암호화 키링을 식별하는 데 사용할 키링의 이름입니다.
      • CONTROL_PLANE_KEY_NAME은 컨트롤 플레인 암호화 키를 식별하는 데 사용할 키의 이름입니다.
      • CONSUMER_DATA_KEY_RING_NAME은 소비자 데이터 리전 암호화 키링을 식별하는 데 사용할 키링의 이름입니다.
      • CONSUMER_DATA_KEY_NAME은 소비자 데이터 리전 암호화 키를 식별하는 데 사용할 키의 이름입니다.
    3. 새 키링을 만듭니다.
      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
    4. 키를 만듭니다.
      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
    5. 키 ID를 환경 변수에 입력합니다. 이후 명령어에서 이 변수를 사용하게 됩니다.
      CONTROL_PLANE_KEY_ID=YOUR_CONTROL_PLANE_KEY_ID
      
      CONSUMER_DATA_KEY_ID=YOUR_CONSUMER_DATA_KEY_ID
    6. 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.

      서비스 계정 이메일 주소에 있는 프로젝트 이름이 아닌 프로젝트 번호를 사용했는지 확인합니다.

    참조: CMEK 문제 해결

  4. 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", ... }'
  5. 잠시만 기다려 주세요.
  6. 생성 요청의 상태를 확인하려면 다음 예시와 같이 Apigee List organizations APIGET 요청을 보내면 됩니다.

    데이터 상주 없음

    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 조직 만들기를 참조하세요.