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
)。
- 適切な権限を持つユーザーごとに更新リクエストを作成します。
accountUserLink
ごとにupdate
。
- 上記の更新リクエストを含むユーザー 300 人ごとに 1 つのバッチ リクエストを作成します。
- 300 ユーザーごとに
batch
を呼び出す。
- 300 ユーザーごとに
アカウントの階層構造からユーザーを削除する
アカウントの階層構造(アカウント、プロパティ、ビュー(旧プロファイル)など)で表示されているすべてのユーザーを削除します。これを実行するために必要な手順は次のとおりです。
- エンティティ レベルごとにすべてのユーザーリンクを取得します。アカウントに対して 3 つの
list
リクエストを実行します。 - ローカル権限を持つユーザーを検索して削除する。手順 1 で 3 つの list 操作から受信したレスポンスごとに、各
entityUserLink
を反復処理します。userRef
プロパティがユーザーと一致している場合、かつ、local
権限が設定されている場合は、リソースに対してdelete
を実行する
アカウント ユーザーリンク、ウェブ プロパティ ユーザーリンク、ビュー(旧プロファイル)ユーザーリンクのリソースの delete
メソッドについて詳しくは、API リファレンスをご覧ください。
1 人のユーザーを更新する
ユーザー権限は Management API を使用して更新することもできます。たとえば、ビュー(旧プロファイル)の名前や ID が不明であると仮定して、ユーザーの権限レベルを READ_AND_ANALYZE
から EDIT
に変更する手順は次のようになります。
エンティティ レベルのすべてのユーザーリンクを取得します。アカウントに対して 3 つの
list
リクエストを実行します。ローカル権限を持つユーザーを検索して更新します。ステップ 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 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 の使用方法を説明します。