ユーザー管理

Google アナリティクス Management API を使用すると、ユーザー権限をプログラムによって管理することができます。この機能は特に、アクセス制御リスト(ACL)が頻繁に更新される大企業で役立ちます。

はじめに

アカウント、プロパティ、またはビュー(旧プロファイル)にアクセスできるユーザーの制御に使用する主なリソースは 3 つあります。

ユーザー権限の書き込み操作は、特殊なバッチ処理にも対応しています。

ユーザー権限

Google アカウントで表されるユーザーには、Google アナリティクスのアカウント、プロパティ、ビュー(旧プロファイル)へのアクセスを以下のレベルで許可することができます。

  • MANAGE_USERS - ユーザー権限 API への書き込みをリクエストするのに必要です。
  • EDIT - データ管理リソースを編集するのに必要です。
  • COLLABORATE
  • READ_AND_ANALYZE

各アクセスレベルの詳細については、ユーザー権限のヘルプセンターの記事を参照してください。

権限の割り当て

API では、localeffective の 2 種類の権限が公開されています。local 権限は、該当するアカウント、プロパティ、ビュー(旧プロファイル)に適用されます。API を使用して権限を割り当てる場合は、permissions.local プロパティを使用してください。effective 権限は、親リソースから継承される権限を表します。

権限の継承

ユーザーがアカウントの EDIT 権限を付与された場合、そのアカウントに含まれるすべてのプロファイルとプロパティにこの権限が継承されます。これは、permissions.effective プロパティで表わされます。

使用例

Management API のユーザー権限を使用すると、次のような使用例を解決できます。

アカウントのすべてのユーザーを一覧表示する

accountUserLinks リソースの list メソッドを実行するだけで、アカウントのすべてのユーザー(そのアカウントの任意のプロパティやビュー(旧プロファイル)に対する権限を持つすべてのユーザーを含む)を一覧表示することができます。

多くのユーザーを更新する

多くのユーザーの権限を更新する場合は、バッチ処理を実行することをおすすめします。バッチ処理によって、割り当てを節約できるだけでなく、パフォーマンスも向上します。詳細については、以下のバッチ処理セクションを参照してください。アカウントに対してこの操作を実行するには以下の手順を実行します。

  1. アカウントのすべてのユーザーリンクを取得します。
    • list メソッドを使用して、すべての accountUserLinks を一覧表示します。
  2. 適切な権限のある各ユーザーの更新リクエストを作成します。
    • update メソッドを使用して、すべての accountUserLink を更新します。
  3. 前述の更新リクエストを含むユーザー 300 人ごとに 1 つのバッチ リクエストを作成します。
    • batch メソッドをユーザー 300 人ごとに呼び出します。

アカウントの階層構造からユーザーを削除する

アカウントの階層構造(アカウント、プロパティ、ビュー(旧プロファイル)など)で表示されているすべてのユーザーを削除します。これを実行するために必要な手順は次のとおりです。

  1. エンティティ レベルごとにすべてのユーザーリンクを取得します。 アカウントに対して次の 3 つの list リクエストを実行します。
    • list メソッドを使用して、すべての accountUserLinks を一覧表示します。
    • list メソッドを使用して、すべての webpropertyUserLinks を一覧表示します(このとき webpropertyId パラメータを ~all に設定します)。
    • list メソッドを使用して、すべての profileUserLinks を一覧表示します(このとき webpropertyId パラメータと profileId パラメータを ~all に設定します)。
  2. local 権限を持つユーザーを検索して削除します。 手順 1 で 3 つの list 操作から得られたレスポンスごとに、次のように各 entityUserLink を反復処理します。
    • userRef プロパティがユーザーに一致しており、かつ local 権限が設定されていることを条件に、リソースで delete を実行します。

アカウント ユーザーリンク、ウェブ プロパティ ユーザーリンク、ビュー(旧プロファイル)ユーザーリンクのリソースの delete メソッドの詳細については、API リファレンスをご覧ください。

1 人のユーザーを更新する

ユーザー権限は、Management API を使用して更新することもできます。たとえば、ビュー(旧プロファイル)の名前や ID がわからない場合に、ユーザーの権限レベルを READ_AND_ANALYZE から EDIT に変更する手順は次のとおりです。

  1. エンティティ レベルごとにすべてのユーザーリンクを取得します。そのアカウントに対して 3 つの list リクエストを実行します。

    • list メソッドを使用して、すべての accountUserLinks を一覧表示します。
    • list メソッドを使用して、すべての webpropertyUserLinks を一覧表示します(このとき webpropertyId パラメータを ~all に設定します)。
    • list メソッドを使用して、すべての profileUserLinks を一覧表示します(このとき webpropertyId パラメータと profileId パラメータを ~all に設定します)。
  2. local 権限を持つユーザーを検索して更新します。 手順 1 で 3 つの list 操作から得られたレスポンスごとに、次のように各 entityUserLink を反復処理します。

    • userRef プロパティがユーザーと一致している、かつ READ_AND_ANALYZE アクセスと共に local 権限が設定されていることを条件に、そのリソースで update メソッドを実行します。

アカウント ユーザーリンク、ウェブ プロパティ ユーザーリンク、ビュー(旧プロファイル)ユーザーリンクのリソースの update メソッドの詳細については、API リファレンスを参照してください。

1 人のユーザーを追加する

ビュー(旧プロファイル)などのアカウントの階層構造にユーザーを追加するには、次の手順に従ってください。

  1. Management API または管理画面を使って、アカウント、プロパティ、ビュー(旧プロファイル)の ID を取得します。
  2. profileUserLinks リソースの insert メソッドを実行してユーザーを追加します。

バッチ処理

ユーザー権限 API 書き込み(delete、insert、update)リクエストをバッチ処理すると、パフォーマンスが向上し、割り当ての面でもメリットがあります。

  • ユーザー権限リクエストをバッチ処理することで、バックエンドの最適化を利用でき、大幅にパフォーマンスが向上します。
  • バッチ処理したユーザー権限 API リクエストは、30 件単位で 1 件の書き込み操作としてカウントされます。
  • 1 件のバッチ リクエストで最大 300 件のユーザー権限 API リクエストを実行でき、ユーザー 1 人あたりの制限 QPS が向上します。

パフォーマンスを最大限向上させるには、次のようにしてください。

  • API リクエストをユーザーごとにグループ化します。
  • バッチ リクエストは 1 つのアカウントに対してのみ行います。複数の Google アナリティクス アカウントでユーザー権限リクエストをバッチ処理すると、エラーが発生し、「バッチ リクエストはすべて同じアカウントで実行してください」というメッセージが出力されます。

エラー処理

1 件のバッチ リクエストに含まれるすべての権限呼び出しは、1 件のトランザクションとして処理されます。これはつまり、複数の変更のうち 1 つにでもエラーが発生すると、変更は実行されないことになります。複数の呼び出しを 1 つの呼び出しとして処理する理由は次のとおりです。

  • 1 人のユーザーの権限を調整するには、複数の編集が必要な場合があります。複数の編集のうち 1 つでも形式が正しくないと、バッチ処理の一部をコミットすることで、ユーザー権限が不適切に設定される場合があります。
  • 複数の編集を 1 件のトランザクションとして処理すると、トラフィックを最適化できるほか、呼び出しに必要な割り当てを減らすことができます。

バッチ処理の例 - Python

下に示す簡単な Python の例では、リクエストをバッチ処理して、ビュー(旧プロファイル)のセットにユーザーのリストを追加する方法を示しています。この例では、承認済みユーザーのアカウントをループ処理して、各アカウントにつき 1 件のバッチ リクエストを作成しています。各バッチ リクエストの中では、対象のユーザーのすべての変更をグループ化しています。

"""A simple example of Google Analytics batched user permissions."""
import json
from apiclient.errors import HttpError
from apiclient.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 の使用方法を説明します。