1つのクライアントIDで複数の顧客グループを管理する方法

課題の内容

自社でYahoo!広告APIおよび広告アカウントの運用を行っている企業様において、システム上で商流別、管理する組織別、広告主別などに分けて管理したいケースがあります。

ルートMCCに権限のあるYahoo! JAPANビジネスID(以下、ビジネスID)で認可認証したトークンは、ルートMCC配下のすべての広告アカウントにアクセスが可能であるため、閲覧権限上の問題が懸念されます。
全体図
上記の例では、グループAとグループBをシステム的に分けて管理したいと考えていますが、ツール管理権限を持つビジネスIDで発行したトークンは、すべてのアカウントにアクセスできてしまいます。

事前準備

事前準備として、まずは管理したいグループ別にMCCを作成します。

例では、MCCアカウント1とMCCアカウント2を用意し、それぞれに広告アカウントを紐づけています。以後、広告アカウントを追加する際は、対象グループのMCCアカウント配下に作成します。
グループ別MCCの図

管理方法

それぞれのグループを分けて管理する方法として、以下2案を推奨しています。

方法1:ベースアカウントを使用する方法

事前準備で追加した各MCCアカウントに対して、認可認証に使用したビジネスIDを招待します(参考:アカウントに招待する)。
これにより、各MCCアカウントをベースアカウントとして利用することができます(参考:ベースアカウントの選択と適用される権限について)。 グループAで認証している図
補足:
広告管理ツールの管理権限のみを持っているものの、アカウントに招待されていないビジネスIDでは、通常、BaseAccountService/getで取得できるアカウントはルートMCCのみとなります。上記のとおり各MCCアカウントに招待されると、ルートMCC、MCCアカウント1、MCCアカウント2の3つがベースアカウントとして利用可能なアカウントとして取得できるようになります。

APIコール時のHTTPヘッダーの設定
従来の設定
Authorization: Bearer "アクセストークン"
x-z-base-account-id: ルートMCC

 →ルートMCC配下のすべての広告アカウントにアクセスすることが可能
下向き矢印
グループ別のMCCをベースアカウントに設定
Authorization: Bearer "アクセストークン"
x-z-base-account-id:

 →グループA(MCCアカウント1配下)の広告アカウントにのみアクセスすることが可能
Authorization: Bearer "アクセストークン"
x-z-base-account-id:

 →グループB(MCCアカウント2配下)の広告アカウントにのみアクセスすることが可能

上記のとおりベースアカウントを指定することで、ベースアカウント配下の広告アカウントに操作を限定することが可能です。

メリット:
 ・既存のトークンを使い回せるため、再度認可認証の作業を行う必要がない。
デメリット:
 ・ベースアカウントで制御を分けているが、トークン自体はすべてにアクセス可能であるため、厳密にはアクセスを分割できているわけではない。

方法2:トークンを分ける方法

ツール管理権限を持つビジネスIDでは、ルートMCCへの権限を持つため、すべての広告にアクセスできてしまいます。アクセス可能なアカウントを制限するために、ツール利用権限のビジネスIDを用意し、対象のMCCアカウントにそれぞれ招待します(参考:アカウントに招待する)。 トークンを分けた図
APIコールを実施する」の手順の2で認可認証を実施する際、上記2つのビジネスIDで認可認証をそれぞれ実施し、複数のトークンを発行します。
発行したアクセストークンとベースアカウントIDを以下のとおり設定してコールすることで、明確にアクセスを分けることが可能になります。

APIコール時のHTTPヘッダーの設定
Authorization: Bearer "グループA用のビジネスIDで発行したアクセストークン"
x-z-base-account-id:

 →グループA(MCCアカウント1配下)の広告アカウントにのみアクセスすることが可能
Authorization: Bearer "グループB用のビジネスIDで発行したアクセストークン"
x-z-base-account-id:

 →グループB(MCCアカウント2配下)の広告アカウントにのみアクセスすることが可能

メリット:
 ・トークンレベルでアクセス可能な対象が明確に分かれている。
デメリット:
 ・トークンを再度払い出すために再認証が必要となる。
 ・ビジネスIDと権限の設定を別途行う必要がある。