API를 통한 커스텀 문서 동기화

개발자 포털은 커스텀 콘텐츠를 동기화할 수 있는 특수한 API를 제공합니다. 이 API를 호출하려면 다음 안내를 따르세요.

  1. 한 번 이상 커스텀 콘텐츠를 수동으로 동기화합니다.
  2. 적절한 승인과 키로 서비스 계정을 만듭니다.
  3. 커스텀 콘텐츠를 동기화하는 HTTP 요청을 실행합니다.

이 문서에서는 서비스 계정을 만들기 위한 안내를 제공하고 Python 또는 명령줄을 통해 요청을 수행하는 예를 보여줍니다.

승인된 서비스 계정 만들기

API를 사용하여 커스텀 콘텐츠를 동기화하려면 적절한 승인을 받고 키가 있는 서비스 계정이 필요합니다. 서비스 계정을 만들려면 서비스 계정에 적절한 역할을 부여하고 필요한 키 파일을 확보한 후 다음 안내를 따르세요.

Console

  1. Cloud Console에서 서비스 계정 페이지를 엽니다.

    서비스 계정 페이지로 이동

  2. 프로젝트 선택을 클릭합니다.

  3. 프로젝트를 선택하고 열기를 클릭합니다.

  4. add 서비스 계정 만들기를 클릭합니다.

  5. 서비스 계정 이름 필드에 서비스 계정의 표시 이름을 입력합니다.

  6. 새 비공개 키 제공 체크박스를 선택합니다.

  7. 키 유형에 대해 기본 유형인 JSON을 사용합니다.

  8. 저장을 클릭합니다.

  9. 대화상자에 키의 정보가 표시됩니다. 대화상자를 닫고 계속 진행합니다.

  10. Cloud Console에서 프로젝트의 Endpoints > 서비스 페이지로 이동합니다.

    Endpoints 서비스

  11. 커스텀 콘텐츠를 동기화하여 액세스 권한을 변경하려는 API의 이름을 클릭합니다.

  12. 권한 측면 패널이 열려 있지 않으면 +권한을 클릭합니다.

  13. 생성한 서비스 계정에 API에 대한 액세스 권한을 부여하려면 생성한 서비스 계정의 이메일 주소를 구성원 추가 필드에 입력합니다.

  14. 역할 선택 드롭다운 목록에서 서비스 관리를 클릭하고 서비스 계정에 대해 서비스 구성 편집자 역할을 선택합니다.

수고하셨습니다. 서비스 계정이 생성되었고, 비공개 키가 JSON 파일로 다운로드되었으며 서비스 계정에 적절한 역할이 할당되었습니다.

gcloud

  1. 다음 명령어를 입력하여 Google Cloud 프로젝트의 프로젝트 ID를 표시합니다.

    gcloud projects list
    
  2. 다음 명령어에서 [YOUR_PROJECT_ID]를 바꿔 기본 프로젝트를 API가 있는 프로젝트로 설정합니다.

    gcloud config set project [YOUR_PROJECT_ID]
    
  3. Cloud SDK(gcloud)에 Google Cloud의 데이터 및 서비스에 액세스할 수 있는 권한이 있는지 확인합니다.

    gcloud auth login
    

    계정이 2개 이상이면 API가 포함된 Google Cloud 프로젝트에 있는 계정을 선택해야 합니다. gcloud auth list를 실행하면 선택한 계정이 프로젝트의 활성 계정으로 표시됩니다.

  4. 서비스 계정을 만들려면 다음 명령어를 실행합니다. 여기서 [SERVICE_ACCOUNT_NAME][Service Account to Sync Custom Content]는 사용하려는 이름과 표시 이름으로 바꿉니다.

    gcloud iam service-accounts create [SERVICE_ACCOUNT_NAME] \
      --display-name "[Service Account to Sync Custom Content]"
    

    이 명령어는 서비스 계정의 이메일 주소를 다음 형식으로 할당합니다.

    [SERVICE_ACCOUNT_NAME]@[YOUR_PROJECT_ID].iam.gserviceaccount.com
    

    다음 명령어에 이 이메일 주소가 필요합니다.

  5. 서비스 계정 키 파일을 만들고 [KEY_FILE]을 키의 파일 이름으로 바꿉니다.

    gcloud iam service-accounts keys create ~/[KEY_FILE] \
      --iam-account [SERVICE_ACCOUNT_NAME]@[YOUR_PROJECT_ID].iam.gserviceaccount.com
    
  6. 커스텀 콘텐츠가 있는 API에 대한 액세스 권한을 서비스 계정에 부여하기 위해 다음 명령어를 실행하고, [YOUR_SERVICE_NAME]은 커스텀 콘텐츠가 있는 API의 이름으로 바꿉니다.

    gcloud endpoints services add-iam-policy-binding [SERVICE-NAME] \
          --member=serviceAccount:[SERVICE_ACCOUNT_NAME]@[YOUR_PROJECT_ID].iam.gserviceaccount.com \
          --role roles/servicemanagement.configEditor
    

커스텀 콘텐츠 동기화 요청 전송

다음 예에서는 커스텀 콘텐츠 동기화를 요청하는 방법을 보여줍니다. 이 요청은 다음과 비슷합니다.

 POST https://endpointsportal.[YOUR_PROJECT_ID].cloud.goog/api/v1/[YOUR_SERVICE_NAME]/custom-content/

[YOUR_PROJECT_ID][YOUR_SERVICE_NAME]을 적절한 값으로 바꿉니다. 요청이 성공적으로 완료되면 응답에 HTTP 상태 코드 200이 표시됩니다.

다음 예시에서는 Google의 승인 서버에서 액세스 토큰을 가져와서 Python 또는 명령줄을 통해 포털의 엔드포인트에 요청을 수행하는 방법을 보여줍니다.

Python

  1. 필수 Python 라이브러리를 설치합니다.
        pip install --upgrade google-auth
  2. 엔드포인트에 필요한 서비스 계정의 사용자 인증 정보 및 범위로부터 Credentials 객체를 만들고 콘텐츠 동기화를 요청하려면 다음 스크립트에서 [YOUR_PROJECT_ID], /path/to/service.json, [YOUR_SERVICE_NAME]을 적합한 값으로 바꿉니다.
    from google.oauth2 import service_account
    from google.auth.transport.requests import AuthorizedSession
    
    SCOPES = ["https://www.googleapis.com/auth/service.management.readonly"]
    SERVICE_ACCOUNT_FILE = "/path/to/service.json"
    PROJECT_ID = "[YOUR_PROJECT_ID]"
    SERVICE_NAME = "[YOUR_SERVICE_NAME]"
    
    credentials = service_account.Credentials.from_service_account_file(
       SERVICE_ACCOUNT_FILE, scopes=SCOPES)
    authed_session = AuthorizedSession(credentials)
    endpoint =
    "https://endpointsportal.%s.cloud.goog/api/v1/%s/custom-content" % (PROJECT_ID, SERVICE_NAME)
    result = authed_session.post(endpoint)
    print result

명령줄

  1. Cloud Shell을 열거나 Linux 컴퓨터에 Cloud SDK가 설치되어 있는 경우 터미널 창을 엽니다.
  2. 서비스 계정에 인증하기 위해 아래의 명령어에서 [KEY_FILE]을 서비스 계정 키 파일의 경로로 바꿔서 실행합니다.
    gcloud auth activate-service-account --key-file [KEY_FILE]
  3. 서비스 계정을 사용하여 승인 토큰을 가져옵니다.
    ACCESS_TOKEN=$(gcloud auth print-access-token)
  4. API를 호출할 때 승인 헤더의 Bearer 토큰으로 이 토큰 값을 전달합니다. [YOUR_PROJECT_ID][YOUR_SERVICE_NAME]을 적절한 값으로 바꿉니다.
    curl -X POST -H "Authorization: Bearer ${ACCESS_TOKEN}" \
    https://endpointsportal.[YOUR_PROJECT_ID].cloud.goog/api/v1/[YOUR_SERVICE_NAME]/custom-content