このドキュメントでは、サーバーサイド カスタム テンプレートの権限について説明します。
各権限は…
- その権限を要求する API によってチェックされます。
- サンドボックス化された JavaScript から、使用されている API に応じて自動検出されます。検出処理は、カスタム テンプレート エディタでの編集時(迅速なフィードバック ループを実現するため)と、コードのコンパイル時(適切な権限が適用されていることを検証するため)に行われます。
- カスタム テンプレート エディタ内で編集して、権限をより具体的に指定できるようになっています。
queryPermission
API により、サンドボックス化された JavaScript 内でクエリ可能です。
access_bigquery
表示名: Accesses BigQuery
説明: Google Cloud Platform 上で BigQuery へのアクセスを許可します。
設定: BigQuery 上で、指定されたプロジェクト、データセット、テーブルの組み合わせの使用を許可するオプション。プロジェクト ID 設定を GOOGLE_CLOUD_PROJECT
にすると、projectId
が BigQuery API
parameter
から除外されている場合に、環境変数 GOOGLE_CLOUD_PROJECT
をプロジェクト ID として使用できます。
要求元: BigQuery
クエリ シグネチャ: queryPermission('access_bigquery', <operation>, <options>)
注: <operation>
は文字列です。次の値を指定できます。
- write
<options>
は次の項目を含むオブジェクトです。
{
'projectId': <project_id>,
'datasetId': <dataset_id>,
'tableId': <table_id>
}
コード例
const BigQuery = require('BigQuery');
const queryPermission = require('queryPermission');
const connectionInfo = {
'projectId': 'gcp-cloud-project-id',
'datasetId': 'destination-dataset',
'tableId': 'destination-table',
};
if (queryPermission('access_bigquery', 'write', connectionInfo)) {
const rows = [{
'column1': 'String1',
'column2': 1234,
}];
const options = {
'ignoreUnknownValues': true,
'skipInvalidRows': false,
};
BigQuery.insert(connectionInfo, rows, options)
.then(data.gtmOnSuccess, data.gtmOnFailure);
}
access_firestore
Display name: Accesses Firestore
説明: Google Firestore へのアクセスを許可します。
設定: 指定されたプロジェクトとパス(ワイルドカード構文に対応)の組み合わせで Firebase を使用することを許可するオプション。プロジェクト ID 設定を GOOGLE_CLOUD_PROJECT
にすると、projectId
が Firestore API parameter
から除外されている場合に、環境変数 GOOGLE_CLOUD_PROJECT
をプロジェクト ID として使用できます。
要求元: Firestore
クエリ シグネチャ: queryPermission('access_firestore', <operation>, <options>)
注: <operation>
は文字列です。次の値を指定できます。
- read - 読み取り用およびクエリ用の API へのアクセスを許可
- write - 書き込み用の API へのアクセスを許可
- read_write - 読み取り用、書き込み用、およびクエリ用の API へのアクセスを許可
<options>
は次の項目を含むオブジェクトです。
{
'projectId': <project_id>,
'path': <path>
}
コード例
const Firestore = require('Firestore');
const queryPermission = require('queryPermission');
const options = {
'projectId': 'gcp-cloud-project-id',
'path': 'collection/document',
};
if (queryPermission('access_firestore', 'read', options)) {
Firestore.read('collection/document', {
projectId: 'gcp-cloud-project-id',
}).then(data.gtmOnSuccess, data.gtmOnFailure);
}
access_response
表示名: Accesses response
説明: レスポンスの本文、ヘッダー、ステータスにアクセスします。
設定: 許可するアクセス先を任意または個別に指定できるオプション。各種サブコンポーネントへのアクセスを制御するサブオプションが用意されています。
要求元: setPixelResponse
、setResponseBody
、setResponseHeader
、setResponseStatus
クエリ シグネチャ: queryPermission('access_response', 'write', <component>[, <optional component name>])
注: 発信 HTTP レスポンス コンポーネントにアクセスできるかどうかを制御します。
コード例
const queryPermission = require('queryPermission');
const setResponseBody = require('setResponseBody');
const setResponseHeader = require('setResponseHeader');
const setResponseStatus = require('setResponseStatus');
if (queryPermission('access_response', 'write', 'header', 'Content-Type')) {
setResponseHeader('Content-Type', 'text/plain');
}
if (queryPermission('access_response', 'write', 'body')) {
setResponseBody('Not Found');
}
if (queryPermission('access_response', 'write', 'status')) {
setResponseStatus(404);
}
access_template_storage
表示名: Accesses Template Storage
説明: サーバー側プロセスの存続期間中は維持されるテンプレート用の一時的なストレージへのアクセスを許可します。
設定: なし
要求元: templateDataStorage
クエリ シグネチャ: queryPermission('access_template_storage')
コード例
const queryPermission = require('queryPermission');
const templateDataStorage = require('templateDataStorage');
const key = 'my_key';
if (queryPermission('access_template_storage')) {
const value = templateDataStorage.getItemCopy(key);
}
get_cookies
表示名: Reads cookie value(s)
説明: 指定した名前の Cookie の値を読み取ります。
構成: 読み取りが許可されている Cookie の名前のリスト。
要求元: getCookieValues
クエリ シグネチャ: queryPermission('get_cookies', <name>)
注: Cookie 名に基づいて、その Cookie の読み取りを許可するかどうかを制御します。
コード例
const queryPermission = require('queryPermission');
const getCookieValues = require('getCookieValues');
const cookieName = 'info';
let cookieValues;
if (queryPermission('get_cookies', cookieName)) {
cookieValues = getCookieValues(cookieName);
}
logging
表示名: Logs to console
説明: 開発者コンソールとタグ マネージャーのプレビューモードにログを記録します。
設定: 本番環境でのログを有効にするオプション。デフォルトでは、デバッグやプレビューでのみログを有効にします。権限が拒否された場合、logToConsole
はエラーをスローする代わりに、ログメッセージの表示を無効にします。
要求元: logToConsole
クエリ シグネチャ: queryPermission('logging')
注: カスタム テンプレートでデベロッパー コンソールへのログの記録を許可するかどうかを制御します。
コード例
const queryPermission = require('queryPermission');
const logToConsole = require('logToConsole');
// Note that it's fine to call log, since the log call will be ignored if
// logging isn't permitted in the current environment.
logToConsole('diagnostic info');
use_message
表示名: Uses messages
説明: addMessageListener
または sendMessage
API を使用してメッセージを送受信します。
設定: メッセージの種類と、テンプレートに許可する処理(リッスン、送信、またはその両方)を指定するオプション。
要求元: addMessageListener
、sendMessage
クエリ シグネチャ: queryPermission('use_message', <usage>, <message type>)
注: 使用方法は、listen
、send
、listen_and_send
のいずれかになります。
コード例
const queryPermission = require('queryPermission');
const sendMessage = require('sendMessage');
if (queryPermission('use_message', 'send', 'set_cookie')) {
sendMessage('set_cookie', {name: 'foo', value: 'bar'});
}
read_container_data
表示名: Reads container data
説明: コンテナに関するデータを読み取ります。
設定: なし。
要求元: getClientName
、getContainerVersion
クエリ シグネチャ: queryPermission('read_container_data')
注: カスタム テンプレートがコンテナ データを読み取れるかどうかを制御します。
コード例
const getContainerVersion = require('getContainerVersion');
const queryPermission = require('queryPermission');
if (queryPermission('read_container_data')) {
return getContainerVersion();
}
read_event_data
表示名: Reads event data
説明: イベントからデータを読み取ります。
設定: 許可するアクセス先を任意または個別に指定できるオプション。個別指定の場合のアクセス先は、許可されるキーパスのリスト(ワイルドカード構文に対応)によって制御します。
要求元: getAllEventData
、getEventData
クエリ シグネチャ: queryPermission('read_event_data'[, <optional key>])
注: 指定したキーパスのイベントデータ(キーパスを指定しない場合はすべてのイベントデータ)を、カスタム テンプレートに読み込めるかどうかを指定します。
コード例
const getAllEventData = require('getAllEventData');
const queryPermission = require('queryPermission');
if (queryPermission('read_event_data')) {
return getAllEventData();
}
const getEventData = require('getEventData');
const queryPermission = require('queryPermission');
const keyPath = 'parentField.childField';
if (queryPermission('read_event_data', keyPath)) {
return getEventData(keyPath);
}
read_event_metadata
表示名: Reads event metadata
説明: イベント コールバックのイベント メタデータを読み取ります。
構成: なし
要求元: addEventCallback
クエリ シグネチャ: queryPermission('read_event_metadata')
注: カスタム テンプレートでコールバックのイベント メタデータの読み取りを許可するかどうかを制御します。
コード例
const queryPermission = require('queryPermission');
const addEventCallback = require('addEventCallback');
if (queryPermission('read_event_metadata')) {
addEventCallback((containerId, eventMetadata) => {
// Read event metadata.
});
}
read_request
表示名: Reads HTTP request
説明: リクエスト ヘッダー、クエリ パラメータ、本文、パス、またはリモート IP アドレスを読み取ります。
設定: 許可するアクセス先を任意または個別に指定できるオプション。各種サブコンポーネントへのアクセスを制御するサブオプションが用意されています。
要求元: extractEventsFromMpv1
、extractEventsFromMpv2
、getRemoteAddress
、getRequestBody
、getRequestHeader
、getRequestPath
、getRequestQueryParameter
、getRequestQueryParameters
、getRequestQueryString
クエリ シグネチャ: queryPermission('read_request', <component>[, <optional component name>])
注: 着信 HTTP レスポンス コンポーネントにアクセスできるかどうかを制御します。
コード例
const queryPermission = require('queryPermission');
const getRequestBody = require('getRequestBody');
const getRequestHeader = require('getRequestHeader');
let body, contentType;
if (queryPermission('read_request', 'body')) {
body = getRequestBody();
}
if (queryPermission('read_request', 'header', 'content-type')) {
contentType = getRequestHeader('content-type');
}
if (body && contentType == 'application/json') { ... }
return_response
表示名: Returns response
説明: 呼び出し元にレスポンスを返します。
設定: なし
要求元: returnResponse
クエリ シグネチャ: queryPermission('return_response')
注: この権限には絞り込みフィールドがなく、通常はクエリの対象となりません。
run_container
表示名: Runs the container
説明: イベントが指定されたコンテナを実行します。
設定: なし
要求元: runContainer
クエリ シグネチャ: queryPermission('run_container')
注: この権限には絞り込みフィールドがなく、通常はクエリの対象となりません。
send_http
表示名: Sends HTTP requests
説明: 指定された URL に HTTP リクエストを送信します。
要求元: getGoogleScript
、sendEventToGoogleAnalytics
、sendHttpGet
、sendHttpRequest
クエリ シグネチャ: queryPermission('send_http', <url>)
注: URL に応じて、HTTP リクエストの実行可否を制御します。接続のセキュリティを確保するため、許可されるのは安全な URL(HTTPS)のみです。
コード例
const queryPermission = require('queryPermission');
const sendHttpGet = require('sendHttpGet');
const url = 'https://example.com/search?query=foo&results=10';
if (queryPermission('send_http', url)) {
sendHttpGet(url);
}
send_pixel_from_browser
表示名: Sends pixels from browsers
説明: 指定された URL にブラウザから GET リクエストを送信します。
要求元: sendPixelFromBrowser
クエリ シグネチャ: queryPermission('send_pixel_from_browser', <url>)
注: URL に基づいてブラウザからリクエストを送信できるかどうかを制御します。
コード例
const queryPermission = require('queryPermission');
const sendPixelFromBrowser = require('sendPixelFromBrowser');
const url = 'https://example.com/search?query=foo&results=10';
if (queryPermission('send_pixel_from_browser', url)) {
sendPixelFromBrowser(url);
}
set_cookies
表示名: Sets a cookie
説明: 指定された名前とパラメータを使用して Cookie を設定します。
構成: 許可されている Cookie 名のリスト。オプションとして、名前、ドメイン、パス、secure
属性、有効期限について制限できます。
要求元: setCookie
クエリ シグネチャ: queryPermission('set_cookies', <name>, <options>)
注: Cookie 名、ドメイン、パス、secure
属性、有効期限に基づき、指定した「Set-Cookie」ヘッダーをレスポンスに追加できるかどうか制御します。
コード例
const queryPermission = require('queryPermission');
const setCookie = require('setCookie');
const options = {
'domain': 'www.example.com',
'path': '/',
'max-age': 60*60*24*365,
'secure': true
};
if (queryPermission('set_cookies', 'info', options)) {
setCookie('info', 'xyz', options);
}
use_custom_private_keys
表示名: カスタムの秘密鍵の使用
説明: 暗号オペレーションに JSON キーファイル内の秘密鍵を使用します。
構成: 許可されるキー ID のリスト。ID は、サーバーの SGTM_CREDENTIALS
環境変数によって参照される JSON キーファイル内のキーと一致している必要があります。
要求元: hmacSha256
クエリ シグネチャ: queryPermission('use_custom_private_keys', <key id>)
注: 許可される秘密鍵のリストを管理します。
コード例
const hmacSha256= require('hmacSha256');
const queryPermission = require('queryPermission');
const keyId = 'key1';
let result;
if (queryPermission('use_custom_private_keys', keyId)) {
result = hmacSha256('my_data', keyId);
}
use_google_credentials
表示名: Uses Google Application Default Credentials
説明: Google のデフォルト認証情報を使用して Google API を呼び出します。
構成: 許可されている Google OAuth 2.0 スコープのリスト。
要求元: getGoogleAuth
クエリ シグネチャ: queryPermission('use_google_credentials', <scopes>)
注: Google API で使用できる Google OAuth 2.0 スコープを制限します。
コード例
const getGoogleAuth = require('getGoogleAuth');
const queryPermission = require('queryPermission');
const scopes = [
'https://www.googleapis.com/auth/datastore'
];
let auth;
if (queryPermission('use_google_credentials', scopes)) {
auth = getGoogleAuth(scopes);
}