En esta página, se describe cómo habilitar y usar la propagación de atributos del lenguaje de marcado para confirmaciones de seguridad (SAML). Puedes usar esta función para propagar SAML atributos de un proveedor de identidad a las aplicaciones protegidas por Identity-Aware Proxy (IAP). Cuando propagas atributos SAML, puedes especificar qué atributos propagar y cómo entregarlos.
Antes de comenzar
Para usar la función de propagación de atributos de SAML, debes tener una licencia de Chrome Enterprise Premium.
Debes conocer la especificación de aserciones y protocolos de SAML V2.0.
Comprender cómo se manejan los datos
Antes de habilitar la propagación de atributos de SAML, asegúrate de comprender cómo Google Cloud administra los datos y el tipo de información que deberías y no deben pasar por este canal.
Puedes configurar IAP para que incluya uno o más atributos en
la información que proporciona a tus aplicaciones protegidas. Si configuraste
SSO a través de una identidad de terceros
proveedor y
tu proveedor de identidad incluya un <AttributeStatement>
en la aserción de SAML.
Google Cloud almacena temporalmente los atributos asociados a la cuenta
sesión de la Cuenta de Google. Cuando vence la sesión de una Cuenta de Google, se produce un error
elimina de forma permanente la información en una semana. Puedes configurar el
fecha de vencimiento.
No uses la propagación de atributos SAML para la información de identificación personal (PII) sensible, como credenciales de cuenta, números de ID gubernamental, datos de titulares de tarjetas, datos de cuentas financieras, información de atención médica o información de antecedentes sensible.
Habilita la propagación de atributos de SAML
Para habilitar la propagación de atributos de SAML, crea un perfil de SSO en Google Workspace y, luego, actualízalo la configuración de IAP con Google Cloud CLI o la API de REST.
Console
- En la consola de Google Cloud, ve a la página IAP.
Ir a IAP - Abre la configuración de un recurso y, luego, desplázate hasta Propagación de atributos.
- Selecciona Habilitar la propagación de atributos y, luego, haz clic en Guardar.
En la pestaña Atributos de SAML, ingresa los atributos que deseas. se propagan con el siguiente formato:
attribute1, attribute2, attribute3
También puedes ingresar los atributos con una expresión personalizada. Los atributos de tu expresión personalizada se muestran en la pestaña Atributos de SAML. Debes usar el siguiente formato de expresión para que tus atributos se muestren en la pestaña Atributos de SAML:
attributes.saml_attributes.filter(attribute, attribute.name in ['attribute', 'attribute2', 'attribute1'])
En Tipos de credenciales que se deben pasar, selecciona al menos un formato de atributo provenientes del IdP para pasarlos a las aplicaciones.
gcloud
Ejecuta los siguientes comandos de la CLI de gcloud de IAP para actualizar la configuración de propagación de atributos de SAML:
gcloud iap settings set SETTING_FILE [--folder=FOLDER --organization=ORGANIZATION --project=PROJECT> --resource-type=RESOURCE_TYPE --service=SERVICE --version=VERSION] [GCLOUD_WIDE_FLAG …]
Reemplaza lo siguiente:
- FOLDER: Es la carpeta en la que reside tu aplicación.
- ORGANIZATION: Es la organización en la que reside tu aplicación.
- PROJECT: Es el proyecto en el que reside tu aplicación.
- RESOURCE_TYPE: El tipo de recurso
- SERVICE: Es el servicio.
- VERSION: Es el número de versión.
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 } } }
API de REST
Puedes configurar los atributos de SAML que se propagarán mediante el objeto ApplicationSettings
en IapSettings, como se muestra en los siguientes ejemplos:
{ "csmSettings": { object (CsmSettings) }, "accessDeniedPageSettings": { object (AccessDeniedPageSettings) }, "attributePropagationSettings": { object (AttributePropagationSettings) }, "cookieDomain": string, }
AttributePropagationSettings
{ "expression": string, "output_credentials": array "enable": boolean }
Cómo configurar las credenciales de salida
Cuando usas la propagación de atributos de SAML, puedes configurar credenciales de salida para enviar atributos a través de varios medios, incluidos los encabezados y los tokens web JSON (JWT). Para configurar las credenciales en la API, puedes especificar una lista de cadenas separadas por comas, como se muestra en el siguiente ejemplo:
"output_credentials": ["HEADER", "JWT", "RCTOKEN"]
Filtra los atributos de SAML con Common Expression Language
Puedes usar las funciones de Common Expression Language (CEL) para filtrar los atributos de SAML.
El uso de expresiones en CEL con la propagación de atributos de SAML tiene las siguientes limitaciones:
- Una expresión debe mostrar una lista de atributos.
- Una expresión puede seleccionar un máximo de 45 atributos.
- Una cadena de expresión no puede superar los 1,000 caracteres.
A continuación, se muestran las funciones de CEL que se admiten cuando se usa la función de propagación de atributos SAML de IAP.
Ten en cuenta que las funciones distinguen mayúsculas de minúsculas y deben usarse exactamente como están escritas. El orden de las funciones strict
y emitAs
no importa cuando se encadenan llamadas a funciones.
Función | Ejemplo | Descripción |
---|---|---|
Selección de campos | a.b |
Selecciona el campo b del proto a . El carácter b puede ser otro proto, una lista o un tipo de valor simple, como una cadena. |
Filtra listas | list.Filter(iter_var, condition) |
Muestra un subconjunto de list en el que los elementos cumplen con condition . |
Membresía de la lista | a en b |
Muestra true si el valor a es miembro de la lista b . |
selectByName | list.selectByName("name") |
En la lista, selecciona el atributo en el que name = "name" . |
append | list.append(attribute) |
Agrega el atributo especificado a la lista especificada. |
Estricta | attribute.strict() |
Emite el atributo sin el prefijo x-goog-iap-attr- cuando se usa HEADERS como credencial de salida. |
emitAs | attribute.emitAs("new_name") |
Muestra el atributo dado con el nombre "new_name" a todas las credenciales de salida seleccionadas. |
Expresión en CEL de ejemplo
Supongamos una aserción de SAML:
<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>
Para seleccionar my_saml_attr_1
, usa la siguiente expresión en CEL:
attributes.saml_attributes.filter(attribute, attribute.name in ["my_saml_attr_1"])
Para seleccionar my_saml_attr_1
y my_saml_attr_2
, usa la siguiente expresión CEL:
attributes.saml_attributes.filter(attribute, attribute.name in ["my_saml_attr_1", "my_saml_attr_2"])
Formato del atributo
Todos los atributos seleccionados están completamente duplicados en todas las credenciales de salida seleccionadas.
Ejemplo: supone una aserción de SAML
<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 y token RC
El token JWT proporciona los atributos a través del campo additional_claims
. El campo es un objeto y contiene una asignación de los nombres de los atributos a una lista de los valores de los atributos. Los nombres de los atributos no se modifican de las aserciones de SAML proporcionadas.
Para el ejemplo de aserción de SAML, el JWT de IAP contiene el lo siguiente:
{
"additional_claims": {
"my_saml_attr_1": ["value_1", "value_2"]
}
}
Encabezados en una aserción de SAML
En los encabezados, los valores de los atributos, las claves y los nombres tienen formato de escape de URL
según RFC 3986, y se unieron
comas. Por ejemplo, header&name: header$value
se convierte en x-goog-iap-attr-header%26name: header%24value
.
Para identificar de manera única los encabezados de IAP, cada encabezado contiene el
Prefijo de IAP x-goog-iap-attr-
. Por motivos de seguridad, la carga
balanceador quita cualquier encabezado de solicitud con el prefijo x-goog-iap-attr
. Esta
garantiza que IAP genere los encabezados que recibe la aplicación.
En el ejemplo de aserción de SAML, el encabezado se ve de la siguiente manera:
"x-goog-iap-attr-my_saml_attr_1": "value_1,value_2"
En el siguiente ejemplo, se muestra cómo IAP escapa de forma especial
caracteres cuando se propagan atributos en encabezados, como value&1
, value$2
,
y value,3
:
"x-goog-iap-attr-my_saml_attr_1": "value%261,value%242,value%2C3"
A continuación, se muestra un ejemplo de cómo se escapa un nombre de encabezado.
Nombre del encabezado:
"iap,test,3": "iap_test3_value1,iap_test3_value2"
Nombre del encabezado con escape:
"X-Goog-IAP-Attr-iap%2Ctest%2C3": "iap_test3_value1,iap_test3_value2"
Personaliza atributos
Puedes usar las funciones selectByName
, append
, strict
y emitas
para modificar los nombres de los atributos propagados, especificar si se debe usar o no el prefijo de encabezado para algunos atributos y seleccionar atributos nuevos proporcionados por la IAP.
Si no exiges la propagación de atributos de SAML, pero sí necesitas la dirección de correo electrónico,
ID de dispositivo o marca de tiempo en un campo SM_USER, puedes seleccionar esos atributos
de iap_attributes list
: attributes.iap_attributes
...
IAP proporciona los siguientes atributos: user_email
,
device_id
y timestamp
.
Ejemplos
En los siguientes ejemplos, se muestra cómo personalizar atributos con el
Funciones selectByName
, append
, strict
y emitas
.
Supongamos la ejemplo de aserción de SAML.
selectByName
Usa la función selectByName
para seleccionar un solo atributo de una lista determinada por su nombre. Por ejemplo, para seleccionar my_saml_attr_1
, usa la siguiente expresión:
attributes.saml_attributes.selectByName("my_saml_attr_1")
append
Usa la función append
para agregar un atributo a una lista de atributos. Debes seleccionar este atributo de una de las listas de atributos de IAP compatibles. Por ejemplo, para agregar my_saml_attr_2
a una lista que contiene my_saml_attr_1
, usa la siguiente expresión:
attributes.saml_attributes.filter(x, x.name in ["my_saml_attr_1"]).append(attributes.saml_attributes.selectByName("my_saml_attr_2"))
Puedes agregar "my_saml_attr_2"
a la lista de filtros. También puedes agregar varios atributos y, luego, unirlos a una lista encadenando las uniones, como en el siguiente ejemplo:
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"))
El agregado de atributos individuales es más útil cuando se combina con la funcionalidad de strict
y emitAs
.
strict
Usa la función strict
para marcar un atributo de modo que el IAP no prefije el nombre con x-goog-iap-attr-
. Esto es útil cuando un elemento
el nombre del atributo debe ser exacto para la aplicación de backend. Ejemplo:
attributes.saml_attributes.selectByName("my_saml_attr_1").strict()
emitAs
Usa la función emitAs
para especificar un nombre nuevo para el atributo. El nombre que
especificar se mostrará como resultado para todas las credenciales. Por ejemplo, para cambiar el nombre
De my_saml_attr_1
a custom_name
, usa la siguiente expresión:
attributes.saml_attributes.selectByName("my_saml_attr_1").emitAs("custom_name")
Puedes usar las diversas funciones para personalizar los atributos para casos de uso específicos. Por ejemplo, puedes usar la siguiente expresión para propagar el correo electrónico de un usuario desde los atributos de la CDA como "SM_USER"
junto con otros atributos de SAML:
attributes.saml_attributes.filter(x, x.name in ["my_saml_attr_1"]).append(
attributes.iap_attributes.selectByName("user_email").emitAs("SM_USER").strict())
Los encabezados de salida se ven de la siguiente manera:
"x-goog-iap-attr-my_saml_attr_1": "value_1,value_2"
"SM_USER": "email@domain.com"
Restricciones cuando se usa la propagación de atributos SAML
Durante el acceso, los atributos entrantes del proveedor de identidad tienen un límite de 2 KB de datos de atributos de SAML. Se rechazan las aserciones que superan el límite de 2 KB falla el acceso.
La mayoría de los servidores web tienen un límite de tamaño de solicitud de 8 KB. Esto limita el tamaño los atributos personalizados salientes, incluida la duplicación de atributos en los encabezados. Si el botón de los atributos (nombre más valores) supera los 5,000 bytes cuando se duplican y codificada, IAP rechaza la solicitud y devuelve la Código de error de IAP 401.
Caracteres Unicode en la propagación de atributos de SAML
Esta función no es compatible con los caracteres Unicode y UTF-8, por lo que los valores de los atributos deben o cadenas de baja ASCII. Si una aserción no es de ASCII bajo, el acceso fallará.