테넌시 유닛 관리

이 페이지에서는 서비스의 테넌시 유닛을 관리하는 방법을 보여줍니다. 테넌시 유닛서비스 소비자관리형 서비스 간의 관계를 나타내는 간단한 리소스입니다. 각 서비스 소비자는 관리형 서비스에 대해 하나의 활성 테넌시 유닛만 가질 수 있습니다. 서비스 인프라에서 제공하는 기능입니다.

테넌시 유닛의 리소스 이름은 다음과 같은 형식입니다.

services/{your service name}/projects/{consumer project number}/tenancyUnits/{id}

테넌시 유닛을 생성하면 테넌시 유닛의 ID가 자동 생성됩니다. services.tenancyUnits.create 메서드를 호출할 때 ID를 제공할 수도 있습니다. ID를 제공하는 경우 모든 서비스 소비자의 관리형 서비스 범위 내에서 전역적으로 고유해야 합니다.

이 페이지의 예시에서는 서비스 소비자 관리 REST API의 직접 호출을 사용합니다. 프로덕션 용도로는 Google에서 제공하는 클라이언트 라이브러리를 사용하여 사용성 및 안정성을 높이는 것이 좋습니다.

시작하기 전에

  • Service Consumer Management API는 관리형 서비스서비스 제작자 프로젝트와 함께 사용하기 위한 것입니다. 이미 Google Cloud 프로젝트가 있고 해당 프로젝트 안에 관리형 서비스(Cloud Endpoints를 사용하여 만든 서비스 등)가 있어야 합니다.
  • 임대 단위를 사용하려면 Service Consumer Management API가 서비스 프로듀서 조직 안에 테넌트 프로젝트를 만들어야 합니다. 서비스 소비자에게 필요한 테넌트 프로젝트 수에 충분한 할당량이 있는지 확인합니다.
  • 테넌시 유닛에서 생성된 각 테넌트 프로젝트는 테넌트 프로젝트 구성의 일부로 지정하는 폴더에도 있어야 합니다. 이 때문에 테넌시 유닛을 사용하려면 조직이 필요합니다.

인증

Service Consumer Management API 같은 Cloud API는 인증된 호출만 받습니다. 아직 없는 경우에는 서비스 계정을 만들고 Cloud API에 인증하기 위한 JSON 키를 받는 방법을 인증 시작하기에서 알아보세요. Google 클라이언트 라이브러리를 사용 중인 경우에는 기본적으로 서비스 계정 사용자 인증 정보를 사용하도록 환경을 설정할 수 있습니다. REST API에 직접 호출하기 위해서는 다음 예에서와 같이 각 헤더에서 액세스 토큰을 제공해야 합니다.

curl --header "Authorization: Bearer ${ACCESS_TOKEN}" --header 'Content-Type: application/json' --data '{"tag":"tag1", "project_config":{"folder":"folders/9876543210", "tenant_project_policy": {"policy_bindings":{"role":"roles/owner", "members":"user:user1@company.com"}}, "billing_config":{"billing_account":"billingAccounts/123456-472F22-28F9AA"}}}' -X POST "https://serviceconsumermanagement.googleapis.com/v1/services/your-service.example.com/consumers/12345678901/tenancyUnits/tu-hello:addProject"

테넌시 유닛을 만들고 삭제하려면 Service Consumer Management API 시작하기에 있는 초기 설정 안내를 따라야 합니다.

임대 단위 만들기

테넌시 유닛과 테넌트 프로젝트는 일반적으로 소비자에게 프로비저닝할 추가 Google Cloud 리소스에 의존하는 자체 서비스의 리소스를 만들 때 생성됩니다.

다음과 같이 임대 단위를 만들 수 있습니다.

POST https://serviceconsumermanagement.googleapis.com/v1/services/service.example.com/projects/12345678901/tenancyUnits

여기에서 'projects/12345678901'은 서비스 소비자를 나타내며 service.example.com은 서비스 이름입니다.

반환된 데이터 구조에는 임대 단위의 이름이 있고, 임대 단위에 액세스하는 데 사용할 수 있는 고유 ID가 생성됩니다. 이 예에서 생성된 이름은 services/your-service.example.com/projects/12345678901/tenancyUnits/absdef입니다.

테넌트 프로젝트 추가

이제 사용자를 위한 프로젝트를 추가할 수 있습니다. 이전 단계에서 만든 임대 단위에 새 테넌트 프로젝트를 추가하려면 다음 메소드를 호출하세요.

POST https://serviceconsumermanagement.googleapis.com/v1/services/your-service.example.com/projects/12345678901/tenancyUnits/absdef:addProject

다음 데이터를 함께 사용합니다.

{"tag":"tag1", "project_config":{"folder":"folders/9876543210", "tenant_project_policy":{"policy_bindings":{"role":"roles/owner", "members":"user:bob@example.com"}}, "billing_config":{"billing_account":"billingAccounts/123456-472F22-28F9AA"}}}

tag 값은 테넌시 유닛 내에서 프로젝트에 제공하는 식별자입니다. 리전, 소비자 네트워크, 단순한 문자열 ID 등 원하는 모든 것(여기에서는 tag1)을 사용할 수 있습니다.

이 호출은 프로젝트 생성이 성공적이었는지 알아보기 위해 쿼리할 수 있는 장기 실행 작업을 반환합니다.

예를 들어 새로운 관리형 서비스를 추가하기 위해 다른 구성을 적용해야 하는 경우 services.tenancyUnits.applyProjectConfig 메서드를 호출할 수 있습니다.

테넌시 유닛 검색

서비스 소비자의 임대 단위 찾기

특정 서비스 소비자의 테넌시 유닛을 찾으려면 services.tenancyUnits.ListTenancyUnits 메서드를 사용하고, 서비스 소비자 프로젝트 번호를 지정합니다.

GET https://serviceconsumermanagement.googleapis.com/v1/services/your-service.example.com/projects/12345678901/tenancyUnits

임대 단위 검색

services.tenancyUnits.SearchTenancyUnits 메서드를 사용하여 서비스에 정의된 테넌시 유닛을 검색할 수 있습니다. 예를 들어 다음 쿼리는 'tag1' 태그가 있는 프로젝트를 포함하는 모든 단위를 반환합니다.

GET https://serviceconsumermanagement.googleapis.com/v1/services/your-service.example.com:search?query=tenant_resources.tag=tag1

임대 단위 정리

서비스 소비자가 서비스 사용을 중지하면 리소스를 확보하고 사용자 데이터가 삭제되도록 테넌시 유닛을 삭제해야 합니다.

테넌트 프로젝트 삭제

해당 테넌시 유닛을 삭제하기 전에 모든 테넌트 프로젝트를 삭제해야 합니다. services.tenancyUnits.removeProject 메서드를 사용하여 테넌트 프로젝트와 프로젝트의 모든 리소스를 삭제해야 합니다.

POST https://serviceconsumermanagement.googleapis.com/v1/services/your-service.example.com/projects/12345678901/tenancyUnits/absdef:removeProject

임대 단위 삭제

테넌시 유닛의 모든 테넌트 프로젝트를 삭제했거나 모두 DELETED 상태인 경우 테넌시 유닛을 삭제할 수 있습니다.

DELETE https://serviceconsumermanagement.googleapis.com/v1/services/your-service.example.com/projects/12345678901/tenancyUnits/absdef