In diesem Dokument werden die Berechtigungen für serverseitige benutzerdefinierte Vorlagen beschrieben.
Jede Berechtigung ist:
- Wird von APIs geprüft, die sie benötigen.
- Wird in JavaScript in einer Sandbox automatisch erkannt, je nachdem, welche APIs verwendet werden. Dies geschieht, wenn Änderungen im Editor für benutzerdefinierte Vorlagen vorgenommen werden (für eine schnelle Feedbackschleife) und wenn Code kompiliert wird (um zu prüfen, ob die richtigen Berechtigungen erzwungen werden).
- Im Editor für benutzerdefinierte Vorlagen bearbeitbar, um die Berechtigung genauer zu definieren.
- Abfragbar in JavaScript in der Sandbox über die
queryPermissionAPI.
access_bigquery
Anzeigename: Accesses BigQuery
Beschreibung: Ermöglicht den Zugriff auf BigQuery auf der Google Cloud Platform.
Konfiguration: Option, mit der bestimmte Kombinationen aus Projekt, Dataset und Tabelle mit BigQuery verwendet werden können. Wenn Sie die Projekt-ID-Konfiguration auf GOOGLE_CLOUD_PROJECT festlegen, kann die Umgebungsvariable GOOGLE_CLOUD_PROJECT als Projekt-ID verwendet werden, wenn projectId aus der BigQuery API
parameter ausgeschlossen ist.
Erforderlich von: BigQuery
Abfragesignatur:
queryPermission('access_bigquery', <operation>, <options>)
Hinweise: <operation> ist ein String und kann die folgenden Werte haben:
- write
<options> ist ein Objekt, das die folgenden Elemente enthält:
{
'projectId': <project_id>,
'datasetId': <dataset_id>,
'tableId': <table_id>
}
Beispielcode
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
Anzeigename: Zugriff auf Google Firestore
Beschreibung: Ermöglicht den Zugriff auf Google Firestore.
Konfiguration: Option, mit der bestimmte Kombinationen aus Projekt und Pfad (Platzhaltersyntax wird unterstützt) mit Firestore verwendet werden können. Wenn Sie die Projekt-ID-Konfiguration auf GOOGLE_CLOUD_PROJECT festlegen, kann die Umgebungsvariable GOOGLE_CLOUD_PROJECT als Projekt-ID verwendet werden, wenn projectId aus der Firestore API parameter ausgeschlossen ist.
Erforderlich von: Firestore
Abfragesignatur:
queryPermission('access_firestore', <operation>, <options>)
Hinweise: <operation> ist ein String und kann die folgenden Werte haben:
- read – Gewährt Zugriff zum Lesen und Abfragen von APIs
- write – Gewährt Zugriff auf die Schreib-API
- read_write – Gewährt Zugriff zum Lesen, Schreiben und Abfragen von APIs
<options> ist ein Objekt, das die folgenden Elemente enthält:
{
'projectId': <project_id>,
'path': <path>
}
Beispielcode
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
Anzeigename: Zugriff auf Antwort
Beschreibung: Hat Zugriff auf den Text, die Header oder den Status von Antworten.
Konfiguration: Option, um beliebigen oder bestimmten Zugriff zuzulassen, mit Unteroptionen zum Steuern des Zugriffs auf verschiedene Unterkomponenten.
Erforderlich für: setPixelResponse, setResponseBody,
setResponseHeader, setResponseStatus
Abfragesignatur:
queryPermission('access_response', 'write', <component>[, <optional component name>])
Notes: Legt fest, ob auf die ausgehende HTTP-Antwortkomponente zugegriffen werden kann.
Beispielcode
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
Anzeigename: Auf Vorlagenspeicher zugreifen
Beschreibung: Ermöglicht den Zugriff auf temporären Speicher für Vorlagen, die für die Lebensdauer des serverseitigen Prozesses beibehalten werden können.
Konfiguration: Keine
Erforderlich von: templateDataStorage
Abfragesignatur: queryPermission('access_template_storage')
Beispielcode
const queryPermission = require('queryPermission');
const templateDataStorage = require('templateDataStorage');
const key = 'my_key';
if (queryPermission('access_template_storage')) {
const value = templateDataStorage.getItemCopy(key);
}
get_cookies
Anzeigename: Cookie-Wert(e) lesen
Beschreibung: Liest die Werte der Cookies mit dem angegebenen Namen.
Konfiguration: Liste der Namen von Cookies, die gelesen werden dürfen.
Erforderlich von: getCookieValues
Abfragesignatur: queryPermission('get_cookies', <name>)
Hinweise: Legt fest, ob ein Cookie abhängig von seinem Namen gelesen werden kann.
Beispielcode
const queryPermission = require('queryPermission');
const getCookieValues = require('getCookieValues');
const cookieName = 'info';
let cookieValues;
if (queryPermission('get_cookies', cookieName)) {
cookieValues = getCookieValues(cookieName);
}
Logging
Anzeigename: In Console aufzeichnen
Beschreibung: Protokolliert Meldungen in der Entwicklerkonsole und im Vorschaumodus von Tag Manager.
Konfiguration: Option zum Aktivieren des Loggings in der Produktion. Standardmäßig ist das Logging nur im Debug-/Vorschaumodus aktiviert. Wenn die Berechtigung verweigert wird, gibt logToConsole keinen Fehler aus, sondern unterdrückt den Logeintrag.
Erforderlich von: logToConsole
Abfragesignatur: queryPermission('logging')
Hinweise: Hiermit wird festgelegt, ob eine benutzerdefinierte Vorlage in der Entwicklerkonsole protokollieren kann.
Beispielcode
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
Anzeigename: Nachrichten verwenden
Beschreibung: Sendet oder empfängt Nachrichten über die addMessageListener- oder sendMessage-API.
Konfiguration: Option zum Angeben des Nachrichtentyps und ob die Vorlage Nachrichten empfangen, senden oder beides kann.
Erforderlich für: addMessageListener, sendMessage
Abfragesignatur: queryPermission('use_message', <usage>, <message type>)
Hinweise: Die Nutzung kann listen, send oder listen_and_send sein.
Beispielcode
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
Anzeigename: Containerdaten lesen
Beschreibung: Liest containerbezogene Daten.
Konfiguration: Keine.
Erforderlich für: getClientName, getContainerVersion
Abfragesignatur: queryPermission('read_container_data')
Hinweise: Hiermit wird festgelegt, ob eine benutzerdefinierte Vorlage Containerdaten lesen kann.
Beispielcode
const getContainerVersion = require('getContainerVersion');
const queryPermission = require('queryPermission');
if (queryPermission('read_container_data')) {
return getContainerVersion();
}
read_event_data
Anzeigename: Ereignisdaten lesen
Beschreibung: Liest Daten aus dem Ereignis.
Konfiguration: Option, um jeden Zugriff oder einen bestimmten Zugriff zuzulassen, der durch eine Liste zulässiger Schlüsselpfade gesteuert wird (Platzhaltersyntax wird unterstützt).
Erforderlich für: getAllEventData, getEventData
Abfragesignatur: queryPermission('read_event_data'[, <optional key>])
Hinweise: Damit wird festgelegt, ob eine benutzerdefinierte Vorlage Ereignisdaten für einen bestimmten Schlüsselpfad (oder alle Ereignisdaten, wenn kein Schlüsselpfad angegeben ist) lesen kann.
Beispielcode
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
Anzeigename: Ereignis-Metadaten lesen
Beschreibung: Liest Ereignis-Metadaten in Ereignis-Callbacks
Konfiguration: Keine
Erforderlich von: addEventCallback
Abfragesignatur: queryPermission('read_event_metadata')
Hinweise: Hiermit wird festgelegt, ob eine benutzerdefinierte Vorlage Ereignismetadaten in Callbacks lesen kann.
Beispielcode
const queryPermission = require('queryPermission');
const addEventCallback = require('addEventCallback');
if (queryPermission('read_event_metadata')) {
addEventCallback((containerId, eventMetadata) => {
// Read event metadata.
});
}
read_request
Anzeigename: Liest HTTP-Anfrage
Beschreibung: Liest Anfrageheader, Suchparameter, Text, Pfad oder Remote-IP-Adresse.
Konfiguration: Option, um beliebigen oder bestimmten Zugriff zuzulassen, mit Unteroptionen zum Steuern des Zugriffs auf verschiedene Unterkomponenten.
Erforderlich für: extractEventsFromMpv1, extractEventsFromMpv2,
getRemoteAddress, getRequestBody, getRequestHeader,
getRequestPath, getRequestQueryParameter, getRequestQueryParameters,
getRequestQueryString
Abfragesignatur:
queryPermission('read_request', <component>[, <optional component name>])
Hinweise: Bestimmt, ob auf die eingehende HTTP-Antwortkomponente zugegriffen werden kann.
Beispielcode
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
Anzeigename: Returns response
Beschreibung: Gibt eine Antwort an den Aufrufer zurück.
Konfiguration: Keine
Erforderlich von: returnResponse
Abfragesignatur: queryPermission('return_response')
Hinweise: Diese Berechtigung hat keine Felder, die eingeschränkt werden können, und wird in der Regel nicht abgefragt.
run_container
Anzeigename: Führt den Container aus
Beschreibung: Führt den Container mit einem Ereignis aus
Konfiguration: Keine
Erforderlich von: runContainer
Abfragesignatur: queryPermission('run_container')
Hinweise: Diese Berechtigung hat keine Felder, die eingeschränkt werden können, und wird in der Regel nicht abgefragt.
send_http
Anzeigename: HTTP-Anfragen senden
Beschreibung: Sendet eine HTTP-Anfrage an eine angegebene URL.
Erforderlich für: getGoogleScript, sendEventToGoogleAnalytics,
sendHttpGet, sendHttpRequest
Abfragesignatur: queryPermission('send_http', <url>)
Hinweise: Legt fest, ob eine HTTP-Anfrage gestellt werden kann, je nach URL. Um eine sichere Verbindung zu gewährleisten, sind nur sichere URLs (HTTPS) zulässig.
Beispielcode
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
Anzeigename: Pixel von Browsern senden
Beschreibung: Sendet eine GET-Anfrage an eine bestimmte URL vom Browser.
Erforderlich von: sendPixelFromBrowser
Abfragesignatur: queryPermission('send_pixel_from_browser', <url>)
Hinweise: Legt fest, ob eine Anfrage vom Browser gesendet werden kann, je nach URL.
Beispielcode
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
Anzeigename: Cookie setzen
Beschreibung: Setzt ein Cookie mit dem angegebenem Namen sowie Parametern.
Konfiguration: Eine Tabelle mit zulässigen Cookie-Namen, jeweils mit optionalen Einschränkungen für Name, Domain, Pfad, secure-Attribut und Ablauf.
Erforderlich von: setCookie
Abfragesignatur: queryPermission('set_cookies', <name>, <options>)
Hinweise: Legt fest, ob ein bestimmter „Set-Cookie“-Header der Antwort hinzugefügt werden kann, je nach Cookiename, Domain, Pfad, secure-Attribut und Ablaufdatum.
Beispielcode
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
Anzeigename: Verwendung von benutzerdefinierten privaten Schlüsseln
Beschreibung: Bei kryptografischen Vorgängen werden private Schlüssel aus einer JSON-Schlüsseldatei verwendet.
Konfiguration: Eine Liste der zulässigen Schlüssel-IDs. Die IDs müssen mit den Schlüsseln in der JSON-Schlüsseldatei übereinstimmen, die in der Umgebungsvariable SGTM_CREDENTIALS auf dem Server referenziert wird.
Erforderlich von: hmacSha256
Abfragesignatur: queryPermission('use_custom_private_keys', <key id>)
Hinweise: Regelt die Liste der zulässigen privaten Schlüssel.
Beispielcode
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
Anzeigename: Verwendet Google-Standardanmeldedaten für Anwendungen
Beschreibung: Verwendet Google-Standardanmeldedaten, um Google APIs aufzurufen.
Konfiguration: Eine Liste der zulässigen Google OAuth 2.0-Bereiche.
Erforderlich von: getGoogleAuth
Abfragesignatur: queryPermission('use_google_credentials', <scopes>)
Hinweise: Schränkt die zulässigen Google OAuth 2.0-Bereiche für die Verwendung mit Google APIs ein.
Beispielcode
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);
}
user_ip
Anzeigename: IP-Adresse des Nutzers lesen
Beschreibung: Liest die IP-Adresse des Nutzers.
Konfiguration: Keine
Erforderlich von: getAnonymizedIpAddress
Abfragesignatur: queryPermission('user_ip')
Hinweise: Legt fest, ob eine benutzerdefinierte Vorlage die IP-Adresse des Nutzers lesen kann.
Beispielcode
const getAnonymizedIpAddress = require('getAnonymizedIpAddress');
const queryPermission = require('queryPermission');
if (queryPermission('user_ip')) {
return getAnonymizedIpAddress();
}