허용 제어

소개

이 페이지에서는 Service Infrastructure에 통합된 관리형 서비스에서 허용 제어를 위해 Service Control API v2를 사용하는 방법을 설명합니다. 이 서비스는 Google Cloud와 서비스를 긴밀하게 통합하려는 서비스 제작자를 대상으로 합니다.

Service Infrastructure는 개발자가 API와 서비스를 생성, 관리, 보호, 사용할 수 있는 기본 플랫폼입니다. 여기에는 간단하고 일반적인 서비스 사용 모델이 사용됩니다. 소비자는 제작자가 관리하는 서비스를 소비합니다. 모든 Google APIs 및 Google Cloud API에 이 모델이 사용되므로, 이들 역시 Service Infrastructure를 기반으로 빌드되었습니다.

클라이언트가 서비스에 액세스할 때 액세스와 관련된 모든 항목에는 일반적으로 소비자, 서비스, 제작자, 사용자, 애플리케이션, 네트워크, 리소스를 포함하여 상태 및 정책 검사가 필요합니다. Service Infrastructure에서 이러한 프로세스를 허용 제어라고 부릅니다. 허용 제어에는 인증, 승인, 감사, 비율 제한 등이 포함됩니다.

Service Control API v2

Service Control API v2는 Service Infrastructure와 통합된 모든 서비스에 대해 허용 제어 기능을 제공하는 간단한 services.check 메서드를 제공합니다. 이 메서드를 사용하면 단일 메서드 호출로 다음을 수행할 수 있습니다.

  • 상태 확인
    • 악용 상태
    • 결제 상태
    • 소비자 상태
    • 서비스 상태
    • 서비스 사용
  • 인증
    • Google OAuth 액세스 토큰
    • Google 서비스 계정 서명 JWT
  • 승인
  • 감사
    • Cloud 감사 로그. 감사 로그는 'externalaudit.googleapis.com' 서비스와 연결됩니다.

서비스가 Service Control API를 호출할 때는 제작자도 Service Control API의 소비자입니다. 따라서 services.check 메서드도 Service Control API를 호출할 때 허용 제어를 수행합니다.

서비스가 Service Control API를 호출할 수 있으려면 사용자가 제작자 프로젝트에서 Service Control API를 사용 설정하고 서비스에 대해 적합한 권한을 갖고 있어야 합니다. 자세한 내용은 Cloud API 시작하기 및 Service Control 액세스 제어를 참조하세요.

요청 속성

클라이언트가 서비스에 액세스할 때 서비스는 액세스를 허용 제어로 확인될 수 있는 하나 이상의 API 요청으로 추상화해야 합니다. 대부분의 경우 이러한 액세스는 실제 API 요청입니다. 즉, 데이터 가져오기 작업 또는 SQL 쿼리로 액세스를 복잡하게 만들 수 있고, 서비스가 가상 API 요청 집합 측면에서 액세스를 모델링하고 각 요청에 대해 허용 제어를 수행해야 합니다.

Service Control API를 사용하여 허용 제어를 수행하려면 서비스가 필요한 요청 속성으로 services.check 메서드를 호출해야 합니다. 다음 표에는 허용 제어에 필요한 속성을 보여줍니다. 전체 사양은 AttributeContext를 참조하세요.

속성 설명 예시
origin.ip 호출자의 IP 주소입니다. '1.2.3.4'
api.service API 서비스 이름입니다. 'endpointsapis.appspot.com'
api.operation API 메서드 이름입니다. 'google.example.hello.v1.HelloService.GetHello'
api.version API 버전 문자열입니다. 'v1'
api.protocol API 프로토콜 이름입니다. 'https'
request.id 고유한 요청 ID입니다. '123e4567-e89b-12d3-a456-426655440000'
request.time 요청 시간입니다. '2019-07-31T05:20:00Z'
request.method HTTP 메서드 이름입니다. 'POST'
request.scheme URL 스키마입니다. 'https'
request.host HTTP 호스트 헤더입니다. 'endpointsapis.appspot.com'
request.path URL 경로입니다. '/v1/hello'
request.headers HTTP 요청 헤더입니다. 필요한 헤더는 'authorization', 'user-agent', 'origin', 'referer'입니다.

리소스 속성

클라이언트가 서비스에 액세스할 때 액세스에는 객체 읽기 또는 VM 인스턴스 만들기와 같은 서비스 내의 하나 이상의 리소스가 관여될 수 있습니다. 서비스는 IAMCloud 감사 로그에서 지원되는 리소스에서 액세스 제어를 위해 Service Infrastructure 허용 제어를 사용할 수 있습니다. 서비스에 액세스 제어가 필요하지 않으면 이 섹션을 건너 뛸 수 있습니다.

액세스 제어를 위해 서비스는 요청 속성과 함께 리소스 속성을 services.check 메서드에 전달해야 합니다. 다음 표에서는 액세스 제어를 위해 필요한 리소스 속성을 보여줍니다.

속성 설명 예시
name 리소스 이름입니다. 'projects/123/locations/global/instances/instance-1'
type 리소스 유형입니다. 형식은 '{service}/{Kind}'입니다. 'endpointsapis.appspot.com/Instance'
permission 리소스 권한입니다. 형식은 '{service}/{kinds}.{verb}'입니다. 'endpointsapis.appspot.com/instances.get'

성능 및 효율성을 위해 services.check 메서드를 사용하면 한 번의 호출로 단일 리소스에 대해 여러 권한을 확인할 수 있습니다.

허용 제어 수행

서비스 구성을 Service Management API에 배포했고 서비스가 클라이언트 요청을 처리할 준비가 되면 배포된 서비스에 대해 services.check 호출을 시작합니다. 서비스에 요청이 수신될 때마다 services.check를 호출하여 허용 제어를 수행해야 합니다.

허용 제어를 빠르게 실험해보려면 gcurl 명령어를 사용하여 services.check 메서드를 호출하면 됩니다. 초기 설정 단계는 Service Control API 시작하기를 참조하세요.

다음 예에서는 gcurl 명령어를 사용하여 HTTP로 services.check를 호출하는 방법을 보여줍니다.

gcurl -d '{
  "service_config_id": "latest",
  "attributes": {
    "origin": {
      "ip": "1.2.3.4"
    },
    "api": {
      "service": "endpointsapis.appspot.com",
      "operation", "google.example.hello.v1.HelloService.GetHello",
      "version": "v1",
      "protocol": "https"
    }
  },
  "request": {
    "id": "123e4567-e89b-12d3-a456-426655440000",
    "time": "2019-07-31T05:20:00Z",
    "scheme": "https",
    "host": "endpointsapis.appspot.com"
    "headers": {
      "authorization": "Bearer xxx",
      "user-agent": "curl/1.0"
    }
  },
  "resources": [
  ]
}' https://servicecontrol.googleapis.com/v2/services/endpointsapis.appspot.com:check
{
}

services.check 메서드의 응답에는 허용 제어가 통과되었는지 여부가 표시됩니다. 통과하면 응답이 비어 있습니다. 실패하면 응답의 status에 서비스가 클라이언트에 반환해야 하는 오류 정보가 포함됩니다. 서비스가 오류 정보를 고유 형식으로 변환해야 할 경우가 많습니다. 서비스는 또한 이 정보를 로깅 및 모니터링 목적에 사용할 수 있습니다.

프로덕션 서비스의 경우 Google에서 제공되는 클라이언트 라이브러리 중 하나를 사용하여 Service Control API를 호출해야 합니다. 이러한 라이브러리는 뛰어난 사용성을 제공하고 인증과 같은 일반적인 기능을 자동으로 처리합니다. 자세한 내용은 클라이언트 라이브러리 설명을 참조하세요.