Google アナリティクス Management API を使用すると、ユーザー権限をプログラムによって管理することができます。この機能は特に、アクセス制御リスト(ACL)が頻繁に更新される大企業で役立ちます。
はじめに
アカウント、プロパティ、またはビュー(旧プロファイル)にアクセスできるユーザーの制御に使用する主なリソースは 3 つあります。
ユーザー権限の書き込み操作は、特殊なバッチ処理にも対応しています。
ユーザー権限
Google アカウントで表されるユーザーには、Google アナリティクスのアカウント、プロパティ、ビュー(旧プロファイル)へのアクセスを以下のレベルで許可することができます。
MANAGE_USERS
- ユーザー権限 API への書き込みをリクエストするのに必要です。EDIT
- データ管理リソースを編集するのに必要です。COLLABORATE
READ_AND_ANALYZE
各アクセスレベルの詳細については、ユーザー権限のヘルプセンターの記事を参照してください。
権限の割り当て
API では、local
と effective
の 2 種類の権限が公開されています。local 権限は、該当するアカウント、プロパティ、ビュー(旧プロファイル)に適用されます。API を使用して権限を割り当てる場合は、permissions.local
プロパティを使用してください。Effective
権限は、親リソースから継承される権限を表します。
権限の継承
ユーザーがアカウントの EDIT
権限を付与された場合、そのアカウントに含まれるすべてのプロファイルとプロパティにこの権限が継承されます。これは、permissions.effective プロパティで表されます。
使用例
Management API のユーザー権限を使用すると、次のような使用例を解決できます。
アカウントのすべてのユーザーを一覧表示する
accountUserLinks リソースの list
メソッドを実行するだけで、アカウントのすべてのユーザー(そのアカウントの任意のプロパティやビュー(旧プロファイル)に対する権限を持つすべてのユーザーを含む)を一覧表示することができます。
多くのユーザーを更新する
多くのユーザーの権限を更新する場合は、バッチ処理を実行することをおすすめします。バッチ処理によって、割り当てを節約できるだけでなく、パフォーマンスも向上します。詳細については、以下のバッチ処理セクションを参照してください。アカウントに対してこれを実行するために必要な手順は次のとおりです。
- アカウントのすべてのユーザーリンクを取得します。
list
メソッドを使用してすべてのaccountUserLinks
を一覧表示します。
- 適切な権限のある各ユーザーの更新リクエストを作成します。
update
メソッドを使用して、すべてのaccountUserLink
を更新します。
- 前述の更新リクエストを含むユーザー 300 人ごとに 1 つのバッチ リクエストを作成します。
batch
メソッドをユーザー 300 人ごとに呼び出します。
アカウントの階層構造からユーザーを削除する
アカウントの階層構造(アカウント、プロパティ、ビュー(旧プロファイル)など)で表示されているすべてのユーザーを削除します。これを実行するために必要な手順は次のとおりです。
- エンティティ レベルごとにすべてのユーザーリンクを取得します。 アカウントに対して次の 3 つの
list
リクエストを実行します。 - local 権限を持つユーザーを検索して削除します。 手順 1 で 3 つの list 操作から得られたレスポンスごとに、次のように各
entityUserLink
を反復処理します。userRef
プロパティがユーザーに一致しており、local
権限が設定されていることを条件に、リソースでdelete
を実行します。
アカウント ユーザーリンク、ウェブ プロパティ ユーザーリンク、ビュー(旧プロファイル)ユーザーリンクのリソースの delete
メソッドについて詳しくは、API リファレンスをご覧ください。
1 人のユーザーを更新する
ユーザー権限は、Management API を使用して更新することもできます。たとえば、ビュー(旧プロファイル)の名前や ID がわからない場合に、ユーザーの権限レベルを READ_AND_ANALYZE
から EDIT
に変更する手順は次のとおりです。
エンティティ レベルごとにすべてのユーザーリンクを取得します。アカウントに対して次の 3 つの
list
リクエストを実行します。local 権限を持つユーザーを検索して更新します。 手順 1 で 3 つの list 操作から得られたレスポンスごとに、次のように各
entityUserLink
を反復処理します。userRef
プロパティがユーザーと一致しており、READ_AND_ANALYZE
アクセスとともにlocal
権限が設定されていることを条件に、そのリソースでupdate
メソッドを実行します。
アカウント ユーザーリンク、ウェブ プロパティ ユーザーリンク、ビュー(旧プロファイル)ユーザーリンクのリソースの update
メソッドについて詳しくは、API リファレンスをご覧ください。
1 人のユーザーを追加する
ビュー(旧プロファイル)などのアカウントの階層構造にユーザーを追加するには、次の手順に従ってください。
- Management API または管理画面を使って、アカウント、プロパティ、ビュー(旧プロファイル)の ID を取得します。
profileUserLinks
リソースのinsert
メソッドを実行してユーザーを追加します。
バッチ処理
ユーザー権限 API 書き込み(delete、insert、update)リクエストをバッチ処理すると、パフォーマンスが向上し、割り当ての面でもメリットがあります。
- ユーザー権限リクエストをバッチ処理することで、バックエンドの最適化を利用でき、大幅にパフォーマンスが向上します。
- バッチ処理したユーザー権限 API リクエストは、30 件単位で 1 件の書き込み操作としてカウントされます。
- 1 件のバッチ リクエストで最大 300 件のユーザー権限 API リクエストを実行でき、ユーザー 1 人あたりの制限 QPS が向上します。
パフォーマンスを最大限向上させるには、次のようにしてください。
- API リクエストをユーザーごとにグループ化します。
- バッチ リクエストは 1 つのアカウントに対してのみ行います。複数の Google アナリティクス アカウントでユーザー権限リクエストをバッチ処理すると、エラーが発生し、「
All batched requests must be under the same account
」というメッセージが表示されます。
エラー処理
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 の使用方法を説明します。