Berechtigungen für serverseitige benutzerdefinierte Vorlagen

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 queryPermission API.

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();
}