Weitergabe von SAML-Attributen konfigurieren

Auf dieser Seite wird beschrieben, wie Sie die Security Assertion Markup Language aktivieren und verwenden (SAML) Attributweitergabe. Mit dieser Funktion können Sie SAML-Daten propagieren Attribute von einem Identitätsanbieter zu Anwendungen, die durch Identity-Aware Proxy (IAP). Wenn Sie SAML-Attribute weitergeben, können Sie angeben, welche Attribute weitergegeben werden sollen und wie die Attribute gesendet werden sollen.

Hinweise

Wenn Sie die Funktion zur Weitergabe von SAML-Attributen verwenden möchten, benötigen Sie eine Chrome Enterprise Premium-Lizenz.

Sie sollten mit der SAML V2.0-Spezifikation für Assertions und -Protokolle vertraut sein.

Verstehen, wie die Daten verarbeitet werden

Bevor Sie die Weitergabe von SAML-Attributen aktivieren, sollten Sie sich mit der Funktionsweise Google Cloud verwaltet die Daten und welche Art von Informationen Sie und nicht über diesen Kanal hinausgehen.

Sie können IAP so konfigurieren, dass eine oder mehrere Attribute in den Informationen enthalten sind, die für Ihre geschützten Anwendungen bereitgestellt werden. Wenn Sie SSO über die Identität eines Drittanbieters Anbieter und Ihr Identitätsanbieter eine <AttributeStatement> in die SAML-Assertion einfügt, Google Cloud speichert die Attribute, die mit dem Google-Kontositzung. Wenn eine Google-Kontositzung abläuft, wird ein asynchroner die Informationen innerhalb einer Woche dauerhaft entfernt. Sie können die Gültigkeitsdatum.

Verwenden Sie die Weitergabe von SAML-Attributen nicht für sensible, personenidentifizierbare Informationen. personenidentifizierbare Informationen wie Anmeldedaten für das Konto oder ein amtlicher Ausweis Daten von Karteninhabern, Bankkonten, Gesundheitsinformationen oder vertrauliche Hintergrundinformationen.

Weitergabe von SAML-Attributen aktivieren

Aktivieren Sie die SAML-Attributweitergabe, indem Sie in Google Workspace ein SSO-Profil erstellen. Aktualisieren Sie dann die IAP-Einstellungen mit der Google Cloud CLI oder der REST API.

Console

  1. Rufen Sie in der Google Cloud Console die Seite "IAP" auf.
    Zu IAP
  2. Öffnen Sie die Einstellungen für eine Ressource und scrollen Sie zu Attributpropagierung.
  3. Wählen Sie Attributübertragung aktivieren aus und klicken Sie auf Speichern.
  4. Geben Sie auf dem Tab SAML-Attribute die Attribute ein, die Sie weitergeben möchten, und verwenden Sie dabei das folgende Format: attribute1, attribute2, attribute3

    Sie können die Attribute auch mit einem benutzerdefinierten Ausdruck eingeben. Die Attribute für Ihren benutzerdefinierten Ausdruck werden auf dem Tab SAML-Attribute angezeigt. Verwenden Sie das folgende Ausdrucksformat für Ihre Attribute, die auf dem Tab SAML-Attribute angezeigt werden sollen:
    attributes.saml_attributes.filter(attribute, attribute.name in ['attribute', 'attribute2', 'attribute1'])

  5. Wählen Sie unter Überzugebende Anmeldedatentypen mindestens ein Attributformat aus, das vom IdP an Anwendungen übergeben werden soll.

gcloud

Führen Sie die folgenden IAP-gcloud CLI-Befehle aus, um die Einstellungen zur Weitergabe von SAML-Attributen zu aktualisieren:

gcloud iap settings set SETTING_FILE [--folder=FOLDER --organization=ORGANIZATION --project=PROJECT> --resource-type=RESOURCE_TYPE --service=SERVICE --version=VERSION] [GCLOUD_WIDE_FLAG …]

Ersetzen Sie Folgendes:

  • FOLDER: Der Ordner, in dem sich Ihre Anwendung befindet.
  • ORGANIZATION: Die Organisation, in der sich Ihre Anwendung befindet.
  • PROJECT: Das Projekt, in dem sich Ihre Anwendung befindet.
  • RESOURCE_TYPE ist der Ressourcentyp.
  • SERVICE: Der Dienst.
  • VERSION: Die Versionsnummer.

YAML:

applicationSettings:
 attributePropagationSettings:
  expression: CEL_EXPRESSION
  outputCredentials: ARRAY[OUTPUT_CREDENTIALS]
  enable: BOOLEAN

JSON:

{
   "application_settings":{
      "attribute_propagation_settings": {
        "expression": CEL_EXPRESSION,
        "output_credentials": ARRAY[OUTPUT_CREDENTIALS]
        "enable": BOOLEAN
      }
   }
}

REST API

Sie können die weitergegebenen SAML-Attribute mithilfe des Objekts ApplicationSettings in IapSettings konfigurieren, wie in den folgenden Beispielen gezeigt:

{
 "csmSettings": {
    object (CsmSettings)
  },
  "accessDeniedPageSettings": {
    object (AccessDeniedPageSettings)
  },
 "attributePropagationSettings": {
    object (AttributePropagationSettings)
  },
  "cookieDomain": string,
}

AttributePropagationSettings

{
 "expression": string,
 "output_credentials": array
 "enable": boolean
}

Anmeldedaten für die Ausgabe festlegen

Wenn Sie die SAML-Attributweitergabe verwenden, können Sie Attribute über mehrere Medien senden, einschließlich JSON Web Token (JWT) und Headern. Dazu müssen Sie Ausgabeanmeldedaten festlegen. Um die Anmeldedaten in der API festzulegen, können Sie eine Liste von durch Kommas getrennten Strings angeben, wie im folgenden Beispiel gezeigt:

"output_credentials": ["HEADER", "JWT", "RCTOKEN"]

SAML-Attribute mit Common Expression Language filtern

Sie können Common Expression Language (CEL)-Funktionen verwenden, um SAML-Attribute zu filtern.

Für die Verwendung von CEL-Ausdrücken mit der Weitergabe von SAML-Attributen gelten die folgenden Einschränkungen:

  • Ein Ausdruck muss eine Liste von Attributen zurückgeben.
  • Mit einem Ausdruck können maximal 45 Attribute ausgewählt werden.
  • Ein Ausdrucksstring darf 1.000 Zeichen nicht überschreiten.

Nachfolgend sind die CEL-Funktionen aufgeführt, die bei Verwendung der Funktion zur Weitergabe von SAML-Attributen IAP unterstützt werden.

Bei den Funktionen wird zwischen Groß- und Kleinschreibung unterschieden und sie müssen genau so verwendet werden, wie sie geschrieben sind. Die Reihenfolge der Funktionen strict und emitAs spielt keine Rolle, wenn Funktionsaufrufe verschachtelt werden.

Funktion Beispiel Beschreibung
Feldauswahl a.b Wählen Sie das Feld b aus der Proto-Datei a aus. Das Zeichen b kann ein anderes Proto, eine Liste oder ein einfacher Werttyp wie ein String sein.
Listen filtern list.Filter(iter_var, condition) Gibt eine Teilmenge von list zurück, wenn Elemente mit condition übereinstimmen.
Listenmitgliedschaft a“ in „b Gibt true zurück, wenn der Wert a Mitglied der Liste b ist.
selectByName list.selectByName("name") Wählen Sie in der Liste das Attribut aus, bei dem name = "name".
Anfügen list.append(attribute) Hängt das angegebene Attribut an die angegebene Liste an.
strikt attribute.strict() Gibt das Attribut ohne das Präfix x-goog-iap-attr- aus, wenn HEADERS als Anmeldedaten für die Ausgabe verwendet wird.
emitAs attribute.emitAs("new_name") Gibt das angegebene Attribut mit dem Namen "new_name" an alle ausgewählten Ausgabeanmeldedaten aus.

CEL-Beispielausdruck

Von einer SAML-Assertion ausgehen:

<saml2:AttributeStatement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <saml2:Attribute Name="my_saml_attr_1">
    <saml2:AttributeValue xsi:type="xsd:string">value_1</saml2:AttributeValue>
    <saml2:AttributeValue xsi:type="xsd:string">value_2</saml2:AttributeValue>
  </saml2:Attribute>
 <saml2:Attribute Name="my_saml_attr_2">
    <saml2:AttributeValue xsi:type="xsd:string">value_3</saml2:AttributeValue>
    <saml2:AttributeValue xsi:type="xsd:string">value_4</saml2:AttributeValue>
  </saml2:Attribute>
 <saml2:Attribute Name="my_saml_attr_3">
    <saml2:AttributeValue xsi:type="xsd:string">value_5</saml2:AttributeValue>
    <saml2:AttributeValue xsi:type="xsd:string">value_6</saml2:AttributeValue>
  </saml2:Attribute>
</saml2:AttributeStatement>

Verwenden Sie den folgenden CEL-Ausdruck, um my_saml_attr_1 auszuwählen:

attributes.saml_attributes.filter(attribute, attribute.name in ["my_saml_attr_1"])

Wenn Sie my_saml_attr_1 und my_saml_attr_2 auswählen möchten, verwenden Sie den folgenden CEL-Ausdruck:

attributes.saml_attributes.filter(attribute, attribute.name in ["my_saml_attr_1", "my_saml_attr_2"])

Attributformat

Alle ausgewählten Attribute werden in alle ausgewählten Ausgabeanmeldedaten vollständig dupliziert.

Beispiel: SAML-Assertion annehmen

<saml2:AttributeStatement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <saml2:Attribute Name="my_saml_attr_1">
    <saml2:AttributeValue xsi:type="xsd:string">value_1</saml2:AttributeValue>
    <saml2:AttributeValue xsi:type="xsd:string">value_2</saml2:AttributeValue>
  </saml2:Attribute>
</saml2:AttributeStatement>

JWT- und RC-Token

Das JWT-Token stellt die Attribute über das Feld additional_claims bereit. Das Feld ist ein Objekt und enthält eine Zuordnung der Attributnamen zu einer Liste der Attributwerte. Die Attributnamen haben keine Auswirkungen auf die bereitgestellten SAML-Assertions.

Für die Beispiel-SAML-Assertion enthält das IAP-JWT die Folgendes:

{
  "additional_claims": {
    "my_saml_attr_1": ["value_1", "value_2"]
  }
}

Header in einer SAML-Assertion

In Headern werden die Werte der Attribute, Schlüssel und Namen gemäß RFC 3986 URL-entkommentiert und durch Kommas getrennt. Aus header&name: header$value wird beispielsweise x-goog-iap-attr-header%26name: header%24value.

Zur eindeutigen Identifizierung von IAP-Headern enthält jeder Header den IAP-Präfix x-goog-iap-attr-. Aus Sicherheitsgründen entfernt der Load Balancer alle Anfrageheader mit dem Präfix x-goog-iap-attr. Dieses sorgt dafür, dass von der Anwendung empfangene Header von IAP generiert werden.

Für die Beispiel-SAML-Assertion sieht der Header so aus:

"x-goog-iap-attr-my_saml_attr_1": "value_1,value_2"

Im folgenden Beispiel wird gezeigt, wie IAP spezielle Zeichen bei der Weiterleitung von Attributen in Headern wie value&1, value$2 und value,3 entwirft:

"x-goog-iap-attr-my_saml_attr_1": "value%261,value%242,value%2C3"

Es folgt ein Beispiel für die Escapesequenz eines Headernamens.

Header name:

"iap,test,3": "iap_test3_value1,iap_test3_value2"

Maskierter Headername:

"X-Goog-IAP-Attr-iap%2Ctest%2C3": "iap_test3_value1,iap_test3_value2"

Attribute anpassen

Sie können die Funktionen selectByName, append, strict und emitas verwenden, um die weitergegebenen Attributnamen ändern und angeben, ob der Header verwendet werden soll für einige Attribute ein und wählen Sie Attribute.

Wenn Sie die Weitergabe von SAML-Attributen, aber die E-Mail-Adresse nicht verlangen, Geräte-ID oder Zeitstempel in einem SM_USER-Feld können Sie diese Attribute aus iap_attributes list: attributes.iap_attributes...

IAP bietet die folgenden Attribute: user_email, device_id und timestamp.

Beispiele

Die folgenden Beispiele zeigen, wie Attribute mithilfe der Methode selectByName-, append-, strict- und emitas-Funktionen.

Es wird von der Beispiel-SAML-Assertion ausgegangen.

selectByName

Mit der Funktion selectByName können Sie ein einzelnes Attribut aus einer Liste anhand des Namens auswählen. Verwenden Sie beispielsweise den folgenden Ausdruck, um my_saml_attr_1 auszuwählen:

attributes.saml_attributes.selectByName("my_saml_attr_1")

append

Mit der Funktion append können Sie einer Liste von Attributen ein Attribut anhängen. Sie müssen dieses Attribut aus einer der unterstützten Attributlisten für IAP-Käufe auswählen. Wenn Sie beispielsweise my_saml_attr_2 an eine Liste anhängen möchten, die my_saml_attr_1 enthält, verwenden Sie den folgenden Ausdruck:

attributes.saml_attributes.filter(x, x.name in ["my_saml_attr_1"]).append(attributes.saml_attributes.selectByName("my_saml_attr_2"))

Sie können "my_saml_attr_2" der Filterliste hinzufügen. Sie können auch und hängen Sie sie an eine Liste an, indem Sie die Anfügungen verketten, z. B. Folgendes:

attributes.saml_attributes.filter(x, x.name in ["my_saml_attr_1"]).append(
attributes.saml_attributes.selectByName("my_saml_attr_2")).append(
attributes.saml_attributes.selectByName("my_saml_attr_3"))

Das Anhängen einzelner Attribute ist am nützlichsten, wenn es mit den Funktionen strict und emitAs kombiniert wird.

strict

Mit der Funktion strict können Sie ein Attribut kennzeichnen, damit IAP ist x-goog-iap-attr- nicht vorangestellt. Das ist hilfreich, wenn ein Attributname für die Backend-Anwendung genau festgelegt werden muss. Beispiel:

attributes.saml_attributes.selectByName("my_saml_attr_1").strict()

emitAs

Verwenden Sie die Funktion emitAs, um einen neuen Namen für das Attribut anzugeben. Der Name, den Sie werden an alle Anmeldedaten ausgegeben. Um beispielsweise my_saml_attr_1 bis custom_name verwenden, verwenden Sie den folgenden Ausdruck:

attributes.saml_attributes.selectByName("my_saml_attr_1").emitAs("custom_name")

Sie können die verschiedenen Funktionen verwenden, um Attribute für bestimmte Anwendungsfälle anzupassen. Sie können beispielsweise den folgenden Ausdruck verwenden, um die E-Mail eines Nutzers aus IAP-Attributen zusammen mit anderen SAML-Attributen als "SM_USER" weiterzugeben:

attributes.saml_attributes.filter(x, x.name in ["my_saml_attr_1"]).append(
attributes.iap_attributes.selectByName("user_email").emitAs("SM_USER").strict())

Die Ausgabeheader sehen so aus:

"x-goog-iap-attr-my_saml_attr_1": "value_1,value_2"
"SM_USER": "email@domain.com"

Einschränkungen bei der Verwendung der SAML-Attributweitergabe

Bei der Anmeldung sind eingehende Attribute vom Identitätsanbieter auf 2 KB begrenzt von SAML-Attributdaten. Assertions, die die maximale Größe von 2 KB überschreiten, werden abgelehnt und Anmeldung schlägt fehl.

Bei den meisten Webservern gilt eine Größenbeschränkung von 8 KB für Anfragen. Dadurch wird die Größe der ausgehende benutzerdefinierte Attribute, einschließlich duplizierter Attribute in Headern. Wenn die Größe der Attribute (Name plus Werte) überschreitet 5.000 Byte, wenn dupliziert und codiert ist, lehnt IAP die Anfrage ab und gibt den Fehlercode IAP-Fehlercode 401.

Unicode-Zeichen bei der Weitergabe von SAML-Attributen

Diese Funktion unterstützt keine Unicode- und UTF-8-Zeichen. Attributwerte müssen daher Low-ASCII-Strings verwendet. Wenn eine Assertion nicht im niedrigen ASCII-Format vorliegt, schlägt die Anmeldung fehl.