Data Transfer ストレージ バケットへのアクセスは、Google アド マネージャーのユーザーロールで管理されます。必要なユーザーロール権限が付与されたら、任意の方法で Data Transfer ファイルにアクセスできます。
記事のセクションに移動する:
権限を持つユーザーロールについて
ストレージ バケットにアクセスするには、「データ転送バケットの表示」権限が有効になっているロールに所属している必要があります。
- 管理者ユーザーロール: 組み込みの管理者ユーザーロールでは、この権限がデフォルトで有効になっています。
- カスタムのユーザーロール: 権限をカスタムのユーザーロールに追加できます。
ユーザーロールを変更するには、ネットワークの管理者であるか、[管理タブでユーザー、役割、チームを編集する] 権限を持っている必要があります。ユーザーは一度に 1 つのロールにのみ関連付けることができます。
詳しくは、ユーザーロールのメンバーシップを管理するをご覧ください。
ロールの権限を表示する
ユーザーが現在所属しているロールを確認し、必要に応じて権限を追加または削除できます。
- Google アド マネージャーにログインします。
- [管理]、[アクセスと認証] をクリックします。
- [ロール]、ロールの名前をクリックします。
- [レポート] で、[データ転送バケットの表示] 権限を見つけます。
- (省略可)ロールの権限を有効にするには、チェックボックスをオンにします。
ストレージ バケットにアクセスする方法
Google Cloud Storage は、アド マネージャーでデータ転送レポートやオーディエンス セグメントに一括アップロードされる Cookie ID 用のデータ レポジトリとして使用されている、アド マネージャーとは別個の Google サービスです。
アド マネージャーのクラウド ストレージ バケットにアクセスするには、次の 3 つの方法があります。扱いやすい順に記載しています。
- ウェブ:
https://console.developers.google.com/storage/gdfp-[アド マネージャーのネットワーク コード]にアクセスします。 - gsutil: Python ベースのコマンドライン ツールである gsutil で Unix 系のコマンドを使用して、ストレージ バケットを操作できます。バケット認証は自動的に抽象化されて処理されます。
- Google Cloud Storage API: ストレージ バケットを操作するための高機能な API です。JSON や XML RESTful といったウェブ インターフェースを通じて使用できます。API クライアント ライブラリは、Java、JavaScript、Python、Objective-C など多くの一般的なプログラミング環境で利用可能です。ストレージ バケットを Google App Engine アプリや Java ウェブアプリと統合するためにプログラムで操作する必要がある場合は、この方法が最も便利です。
この記事では、Google Cloud Storage API について詳しく説明します。ただしウェブ経由と gsutil によるアクセス方法のほうが扱いやすく、まずそちらを試すことをおすすめします。これらの方法について詳しくは、Google Cloud Storage デベロッパー サイトをご覧ください。
Google Cloud Storage API を使用する
API によるアクセスがお客様のニーズに最適であることが判明した場合は、Google Cloud Storage のサービス アカウントを設定することをおすすめします。
Google Cloud Storage のサービス アカウントを設定する
API 経由でストレージ バケットにアクセスする場合は、ユーザー アカウントで実行せず、サービス アカウントを設定することをおすすめします。サービス アカウントでは、動的に生成される OAuth トークンの代わりに秘密キーを使って認証を行うので、アプリケーションの開発作業がよりシンプルになります。サービス アカウントの設定方法は次のとおりです。
-
Google Developers Console に移動します。
-
アプリケーションの親になる新しいプロジェクトを作成するか既存のプロジェクトを選択し、クリックしてプロジェクトを開きます。
-
(省略可)アド マネージャーのストレージ バケットからお客様自身の Google Cloud Storage アカウントにファイルをコピーする場合は、[課金と設定] をクリックして、プロジェクトに請求ソースを追加します。
-
次の方法で新しいクライアント ID を作成します。
-
[API とサービス]、[認証情報] をクリックします。
-
[新しいクライアント ID を作成] をクリックします。
-
アプリケーションの種類として [サービス アカウント] を指定し、[クライアント ID を作成] をクリックします。
-
[固有 ID]@developer.gserviceagccount.comの形式のメールアドレスが作成されます。サービス アカウント ユーザーをアド マネージャー ネットワークに追加し、そのユーザーが「データ転送バケットの表示」権限が付与されているロールに所属していることを確認します。 -
[新しい P12 キーを作成] をクリックします。ファイルはローカルに保存されます。このキーは、開発したアプリケーションで API にアクセスするときに使用します。コード例は以下をご覧ください。
-
- 「データ転送バケットの表示」権限を持つユーザーは、アド マネージャーのストレージ バケットにアクセスできます。
Google では Google Cloud Storage のサンプルコードとライブラリを提供しています。以下は、アド マネージャーのクラウド ストレージ バケットからファイルを読み取る Java コードの例です。サービス アカウントの設定時に設定した要素がどのようにコードに組み込まれるのかをご確認ください。
-
プロジェクト名: Google Cloud Storage プロジェクトの名前です。
-
サービス アカウントのメールアドレス: 生成したメールアドレスです。
-
.p12 キーファイル: ダウンロードしたファイルです。
-
バケット名: アド マネージャーのクラウド ストレージ バケットを使用する機能を有効にするときに Google から提供される名前です。
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.security.GeneralSecurityException;
import java.util.Collections;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.storage.Storage;
import com.google.api.services.storage.model.StorageObject;
public class GcsApiTest {
/**
* サービス アカウントが作成されたプロジェクトの名前。
*
* この情報は Google Developers Console に表示されます。
*/
private static final String PROJECT_NAME = "project name";
/**
* サービス アカウントのデベロッパー メールアドレス。
*
* このメールアドレスは、Google Developers Console でサービス アカウントの
* クライアント ID を作成すると生成され、[認証情報] ページから取得
* できます。
*/
private static final String SERVICE_ACCOUNT_EMAIL = "service account email address";
/**
* ストレージの操作に使用するバケット。
*
* このバケットの名前は、テクニカル アカウント マネージャーから提供
* されます。使用しているアド マネージャーのアドオンに応じて、「gdfp-12345678」や
* 「gdfp_cookieupload_12345678」のような名前になります。
*/
private static final String BUCKET_NAME = "bucket name";
/**
* Google Cloud Storage OAuth 2.0 の読み取り / 書き込みの対象範囲。これは
* バケットの「データ転送バケットの表示」権限のアクセス権に対応している
* 必要があります。この権限で付与されていないアクセス権をリクエストすることは
* できません。
*/
private static final String STORAGE_SCOPE =
"https://www.googleapis.com/auth/devstorage.read_write";
/**
* バケットへのアクセスを可能にする key.p12 ファイルのパス。
*
* このファイルは、サービス クライアント ID の作成時に生成されます。この
* ファイルがない場合は、Google Developers Console で新しいクライアント
* P12 キーを生成する必要があります。
*/
private static final String KEY_P12 = "path to .p12 key file";
/** HTTP 転送。 */
private HttpTransport httpTransport;
private Storage storage;
// コンストラクタで認証情報とストレージ オブジェクトを設定
public GcsApiTest() {
File p12File = new File(KEY_P12);
try {
httpTransport = GoogleNetHttpTransport.newTrustedTransport();
GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(JacksonFactory.getDefaultInstance())
.setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
.setServiceAccountScopes(
Collections.singleton(STORAGE_SCOPE))
.setServiceAccountPrivateKeyFromP12File(p12File).build();
storage = new Storage.Builder(httpTransport,
JacksonFactory.getDefaultInstance(), credential)
.setApplicationName(PROJECT_NAME).build();
} catch (GeneralSecurityException | IOException e1) {
e1.printStackTrace();
System.exit(1);
}
}
/**
* バケットの最初のファイルの名前を返すメソッド。
*
* @ファイル名、またはバケットが空の場合は null を返します。
* @IOException を発生させます。
*/
public String GetFirstFile() throws IOException {
Storage.Objects.List listObjects = storage.objects().list(BUCKET_NAME);
listObjects.setMaxResults(5L);
com.google.api.services.storage.model.Objects objects = listObjects
.execute();
// バケットが空の場合
if (null == objects.getItems() || objects.getItems().isEmpty()) {
System.out.println("Bucket \"" + BUCKET_NAME
+ "\" empty or invalid.");
return null;
}
StorageObject object = objects.getItems().get(0);
System.out.println("First object in bucket: \"" + object.getName()
+ "\".");
return object.getName();
}
/**
* 指定したファイルをストレージ バケットからダウンロードするためのメソッド。
*
* @パラメータ filename
* ダウンロードするファイルの名前。
* @IOException を発生させます。
*/
public void DownloadFile(String filename) throws IOException {
Storage.Objects.Get getObject = storage.objects().get(BUCKET_NAME,
filename);
OutputStream os = new FileOutputStream(filename, true);
getObject.getMediaHttpDownloader().setDirectDownloadEnabled(true);
getObject.executeMediaAndDownloadTo(os);
System.out.println("File \"" + filename + "\" downloaded.");
}
/**
* 各種テストを実行するメインのメソッド。
*
* @パラメータ args
*/
public static void main(String[] args) {
GcsApiTest gcsApiTest = new GcsApiTest();
try {
String filename = gcsApiTest.GetFirstFile();
gcsApiTest.DownloadFile(filename);
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
抑制と同時接続
同時接続に関して定義されている上限はありませんが、不正使用を回避するために、Google ではデータ転送のフェッチ リクエストを抑制します。