사용자 관리

Google 애널리틱스 Management API를 사용하면 사용자 권한을 프로그래매틱 방식으로 관리할 수 있습니다. 이 기능은 액세스 제어 목록 (ACL)을 자주 업데이트하는 대기업에 특히 유용합니다.

소개

계정, 속성 또는 보기 (프로필)에 액세스할 수 있는 사용자를 제어하는 데 사용되는 세 가지 기본 리소스가 있습니다.

사용자 권한 쓰기 작업에 대한 특별 일괄 처리 지원도 있습니다.

사용자 권한

Google 계정으로 표시되는 사용자에게 Google 애널리틱스 계정, 속성, 보기 (프로필)에 대한 다음 수준의 액세스 권한을 부여할 수 있습니다.

  • MANAGE_USERS - 사용자 권한 API에 쓰기 요청을 하는 데 필요합니다.
  • EDIT - 데이터 관리 리소스를 수정하는 데 필요합니다.
  • COLLABORATE
  • READ_AND_ANALYZE

각 액세스 수준에 관한 자세한 내용은 사용자 권한 고객센터 도움말을 참고하세요.

권한 할당

API는 localeffective, 두 가지 유형의 권한을 노출합니다. 로컬 권한은 주어진 계정, 속성 또는 보기 (프로필)에 적용됩니다. API에 권한을 할당할 때는 permissions.local 속성을 사용해야 합니다. Effective 권한은 상위 리소스에서 상속된 권한을 나타냅니다.

상속된 권한

사용자에게 계정에 대한 EDIT 권한이 부여된 경우 해당 계정의 모든 프로필 및 속성에 이 권한이 상속되며 이는 permissions.effective 속성으로 표시됩니다.

사용 사례

Management API의 사용자 권한을 사용하여 다음과 같은 사용 사례를 해결할 수 있습니다.

계정의 모든 사용자 나열

계정의 속성 또는 보기 (프로필)에 대한 권한을 가진 사용자를 포함하여 계정의 모든 사용자를 나열하려면 accountUserLinks 리소스의 list 메서드를 실행합니다.

다수의 사용자 업데이트하기

많은 사용자의 권한을 업데이트하려면 일괄 처리를 사용하는 것이 좋습니다. 이렇게 하면 할당량이 절약될 뿐만 아니라 성능이 훨씬 더 우수합니다. 자세한 내용은 아래 일괄 처리 섹션을 참고하세요. 계정에서 이 작업을 수행하는 데 필요한 단계는 다음과 같습니다.

  1. 계정의 모든 사용자 링크 가져오기:
    • list 모두 accountUserLinks
  2. 적절한 권한을 사용하여 각 사용자의 업데이트 요청을 구성합니다.
    • accountUserLink마다 update
  3. 위의 업데이트 요청이 포함된 사용자 300명당 일괄 요청 1개를 구성합니다.
    • 사용자 300명당 batch을 호출합니다.

계정 계층 구조에서 사용자 삭제

계정 계층 구조에서 사용자의 모든 일치하는 항목 (계정, 속성, 보기 (프로필))을 삭제할 수 있습니다. 이 작업을 실행하는 데 필요한 단계는 다음과 같습니다.

  1. 각 항목 수준의 모든 사용자 링크를 가져옵니다. 계정에 대해 3개의 list 요청을 실행합니다.
    • list 모두 accountUserLinks
    • list 모두 webpropertyId 매개변수를 ~all로 설정하여 모든 webpropertyUserLinks.
    • list 모두 webpropertyIdprofileId 매개변수를 ~all로 설정하여 확인합니다.
  2. 로컬 권한이 있는 사용자를 찾아 삭제합니다. 1단계의 목록 작업 3개에서 수신된 각 응답에 대해 각 entityUserLink를 반복합니다.
    • userRef 속성이 사용자와 일치하고 그리고 local 권한이 설정된 경우 그러면 리소스에서 delete를 실행합니다.

계정 사용자 링크, 웹 속성 사용자 링크, 보기 (프로필) 사용자 링크 리소스의 delete 메서드에 대한 자세한 내용은 API 참조를 참고하세요.

단일 사용자 업데이트하기

Management API를 사용하여 사용자 권한을 업데이트할 수도 있습니다. 예를 들어 보기 (프로필) 이름 또는 ID를 모르면 사용자의 권한 수준을 READ_AND_ANALYZE에서 EDIT로 변경하는 단계는 다음과 같습니다.

  1. 각 항목 수준의 모든 사용자 링크 가져오기 계정에 대해 3개의 list 요청을 실행합니다.

    • list 모두 accountUserLinks
    • list 모두 webpropertyId 매개변수를 ~all로 설정하여 모든 webpropertyUserLinks.
    • list 모두 webpropertyIdprofileId 매개변수를 ~all로 설정하여 확인합니다.
  2. 로컬 권한이 있는 사용자를 찾고 업데이트합니다. 1단계의 목록 작업 3개에서 수신된 각 응답에 대해 각 entityUserLink를 반복합니다.

    • userRef 속성이 사용자와 일치하고 그리고 사용자에게 READ_AND_ANALYZE 액세스 권한이 있는 local 권한이 있으면 그러면 리소스에서 update를 실행합니다.

계정 사용자 링크, 웹 속성 사용자 링크, 보기 (프로필) 사용자 링크 리소스의 update 메서드에 대한 자세한 내용은 API 참조를 참고하세요.

단일 사용자 추가

계정 계층 구조, 예를 들어 보기 (프로필)에 사용자를 추가하려면 다음 단계를 따라야 합니다.

  1. Management API 또는 웹 인터페이스를 사용하여 계정, 속성, 보기 (프로필)에 대한 ID를 검색합니다.
  2. profileUserLinks 리소스의 insert 메서드를 실행하여 사용자를 추가합니다.

일괄 처리

권한 API 쓰기 (삭제, 삽입, 업데이트) 요청을 일괄 처리하면 성능이 향상되고 할당량 인센티브가 발생합니다.

  • 사용자 권한 요청을 일괄 처리하면 백엔드 최적화를 활용할 수 있으며 성능이 크게 향상됩니다.
  • 일괄 사용자 권한 API 요청 30회당 단일 쓰기 작업으로 집계됩니다.
  • 일괄 요청당 최대 300개의 사용자 권한 API 요청을 수행할 수 있으므로 사용자당 한도 QPS가 높아집니다.

이러한 성능 개선의 효과를 극대화하려면 다음과 같은 조치를 취해야 합니다.

  • API 요청을 사용자별로 그룹화합니다.
  • 계정 1개에 대한 일괄 요청만 Google 애널리틱스 계정을 두 개 이상 사용하는 사용자 권한 요청을 일괄 처리하면 All batched requests must be under the same account 메시지와 함께 오류가 발생합니다.

오류 처리

일괄 요청의 모든 권한 호출은 단일 트랜잭션으로 취급됩니다. 즉, 변형에 오류가 있는 경우 변경사항이 없습니다. 단일 통화로 처리하는 이유는 다음과 같습니다.

  • 사용자 1명의 권한을 조정하려면 여러 번 수정해야 할 수 있습니다. 수정사항 중 하나의 형식이 잘못된 경우 일괄 작업의 일부를 커밋하면 사용자의 권한이 바람직하지 않은 상태가 될 수 있습니다.
  • 수정 작업을 단일 트랜잭션으로 처리하면 트래픽을 최적화하고 호출에 필요한 할당량을 줄일 수 있습니다.

일괄 처리 예시 - Python

다음은 Python에 여러 개의 보기 (프로필)에 사용자 목록을 추가하기 위한 요청을 일괄 처리하는 방법의 간단한 예입니다. 이 예시에서는 승인된 사용자의 계정을 순환시키며 각 계정에 대해 하나의 일괄 요청을 만듭니다. 각 일괄 요청 내에서 특정 사용자의 모든 변경사항을 그룹화합니다.


"""A simple example of Google Analytics batched user permissions."""
import json
from googleapiclient.errors import HttpError
from googleapiclient.http import BatchHttpRequest

def call_back(request_id, response, exception):
  """Handle batched request responses."""
  print request_id
  if exception is not None:
    if isinstance(exception, HttpError):
      message = json.loads(exception.content)['error']['message']
      print ('Request %s returned API error : %s : %s ' %
             (request_id, exception.resp.status, message))
  else:
    print response


def add_users(users, permissions):
  """Adds users to every view (profile) with the given permissions.

  Args:
    users: A list of user email addresses.
    permissions: A list of user permissions.
  Note: this code assumes you have MANAGE_USERS level permissions
  to each profile and an authorized Google Analytics service object.
  """

  # Get the a full set of account summaries.
  account_summaries = analytics.management().accountSummaries().list().execute()

  # Loop through each account.
  for account in account_summaries.get('items', []):
    account_id = account.get('id')

    # Loop through each user.
    for user in users:
      # Create the BatchHttpRequest object.
      batch = BatchHttpRequest(callback=call_back)

      # Loop through each property.
      for property_summary in account.get('webProperties', []):
        property_id = property_summary.get('id')

        # Loop through each view (profile).
        for view in property_summary.get('profiles', []):
          view_id = view.get('id')

          # Construct the Profile User Link.
          link = analytics.management().profileUserLinks().insert(
              accountId=account_id,
              webPropertyId=property_id,
              profileId=view_id,
              body={
                  'permissions': {
                      'local': permissions
                  },
                  'userRef': {
                      'email': user
                  }
              }
          )
          batch.add(link)

      # Execute the batch request for each user.
      batch.execute()

if __name__ == '__main__':

  # Construct a list of users.
  emails = ['ona@gmail.com', 'emi@gmail.com', 'sue@gmail.com', 'liz@gmail.com']

  # call the add_users function with the list of desired permissions.
  add_users(emails, ['READ_AND_ANALYZE'])

다음 단계

다음으로 Google 애널리틱스 Management API를 사용하여 다양한 데이터 리소스를 구성하는 방법을 살펴보겠습니다.