Service Control API 액세스 제어

관리형 서비스의 Service Control API를 호출하려면 호출자가 서비스에서 다음과 같은 Identity and Access Management(IAM) 권한을 가지고 있어야 합니다.

IAM 역할 roles/servicemanagement.serviceController, roles/owner, roles/editor에 이러한 권한이 포함되어 있으며, 각 역할을 사용해서 권한을 부여할 수 있습니다. 관리형 서비스 실행을 위해서는 IAM 역할 roles/servicemanagement.serviceController를 사용하는 것이 좋습니다. roles/ownerroles/editor도 해당 권한을 부여하지만, 보안상의 이유로 역할에 포함된 권한이 작을수록 더 좋습니다.

리소스 모델

IAM은 리소스에 IAM 정책을 적용하여 리소스에서 누가 어떤 작업을 수행할 수 있는지를 제어합니다. Service Control API는 다음과 같은 리소스를 사용하여 기능을 제공합니다.

  • 서비스 제작자 프로젝트: 서비스 제작자 프로젝트는 0개 이상의 관리형 서비스를 소유할 수 있습니다. 서비스 제작자 프로젝트는 이 계층 구조에서 서비스의 상위 요소입니다.
  • 관리형 서비스: 관리형 서비스에는 0개 이상의 서비스 소비자가 있을 수 있습니다.
  • 서비스 소비자: 서비스 소비자는 서비스를 사용 설정한 Google Cloud 프로젝트를 의미합니다.

IAM 액세스 제어는 리소스 모델에 적용됩니다. 서비스 프로듀서 프로젝트 수준에서 역할이 부여된 경우에는 프로듀서 프로젝트가 소유하는 모든 관리형 서비스에 영향을 미칩니다. 관리형 서비스 수준에서 역할이 부여된 경우에는 관리형 서비스의 모든 서비스 소비자에 영향을 미칩니다.

보안 및 격리를 위해 서비스 프로듀서 프로젝트 한 개에 관리형 서비스 한 개만 만드는 것이 좋습니다. 그렇지 않으면, 예를 들어 서비스 제작자 프로젝트가 할당량이 부족하여 Service Control API에 요청을 보낼 수 없는 경우 여러 개의 관리형 서비스가 영향을 받게 됩니다.

멀티 테넌트 서비스가 있으면 관리형 서비스 수준에서 roles/servicemanagement.serviceController 역할을 부여해야 합니다. 단일 테넌트 서비스가 있는 경우, 즉 각 서비스 소비자에 고유의 관리형 서비스 인스턴스가 있는 서비스에서는 서비스 소비자 수준에서 역할을 부여해야 합니다. 모든 서비스 소비자에게 영향을 미치는 백그라운드 데이터 처리의 경우, 관리형 서비스 수준에서 역할을 부여해야 합니다.

역할 부여

Service Control API를 호출하려면 호출자에게 필요한 역할을 부여해야 합니다. 다음의 세 가지 방법 중 하나를 통해 역할을 부여할 수 있습니다. 서비스 프로듀서 프로젝트의 소유자여야 필요한 역할을 부여할 수 있습니다.

서비스 프로듀서 프로젝트 수준에서 역할 부여

리소스에 대한 액세스 권한 부여, 변경, 취소의 안내를 따라 관리형 서비스가 속한 프로젝트에 필요한 역할을 부여하거나, Google Cloud SDK를 사용하여 add-iam-policy-binding 명령어를 사용하여 역할을 부여할 수 있습니다.

예를 들어 foo@developer.gserviceaccount.com과 같은 서비스 계정에 역할을 부여할 수 있습니다.

gcloud projects add-iam-policy-binding PRODUCER_PROJECT_ID --member serviceAccount:SERVICE_ACCOUNT --role roles/servicemanagement.serviceController

마찬가지로 bar@gmail.com과 같은 사용자 계정에 역할을 부여할 수 있습니다.

gcloud projects add-iam-policy-binding PRODUCER_PROJECT_ID --member user:USER_ACCOUNT --role roles/servicemanagement.serviceController

서비스 수준에서 역할 부여

다음 예시에 표시된 것처럼 서비스 수준에서 roles/servicemanagement.serviceController 역할을 부여할 수 있습니다.

gcurl -d "{
  'policy': {
    'bindings': [ {
      role: 'roles/servicemanagement.serviceController',
      members: 'serviceAccount:SERVICE_ACCOUNT'
    } ]
  }
}" https://servicemanagement.googleapis.com/v1/services/YOUR_SERVICE_NAME:setIamPolicy

서비스 소비자 수준에서 역할 부여

서비스 소비자 수준에서 roles/servicemanagement.serviceController 역할을 부여할 수 있습니다. 서비스 소비자 수준 권한의 경우 Service Control API에 대한 요청에 최소 한 개 이상의 유효한 서비스 소비자 프로젝트 ID가 포함되어야 합니다. 예를 들어 표시된 것처럼 다음 명령어로 역할을 부여할 수 있습니다.

gcurl -d "{
  'policy': {
    'bindings': [ {
      role: "roles/servicemanagement.serviceController",
      members: "serviceAccount:SERVICE_ACCOUNT"
    } ]
  }
}" https://servicemanagement.googleapis.com/v1/services/YOUR_SERVICE_NAME/consumers/CONSUMER_PROJECT_NUMBER:setIamPolicy

자세한 내용은 Cloud 인증 가이드를 참조하세요.