Sintaxis de las reglas de conversión de identidad
[ { "local": [ { "<user> or <group> or <groups>" } ], "remote": [ { "<condition>" } ] } ]
Descripción de parámetros:
- local: información de identidad de un usuario federado asignado a IAM. El valor de este campo puede contener marcadores de posición, como {0...n}. Los atributos {0} y {1} representan los atributos remotos primero y segundo de la información de usuario, respectivamente.
- remote: Información sobre un usuario federado del IdP. Este campo es una expresión que consiste en atributos de aserción y operadores. El valor de este campo viene determinado por la aserción.
- condition: Condiciones para que la regla de conversión de identidad entre en vigor. Se admiten los siguientes tres tipos de condiciones:
- empty: la regla coincide con todas las notificaciones que contienen el tipo de atributo. No es necesario especificar esta condición. El resultado de la condición es el argumento que se pasa como entrada.
- any_one_of: La regla solo coincide si alguna de las cadenas especificadas aparece en el tipo de atributo. El resultado de la condición es booleano, no el argumento que se pasa como entrada.
- not_any_of: La regla no coincide si alguna de las cadenas especificadas aparece en el tipo de atributo. El resultado de la condición es booleano, no el argumento que se pasa como entrada.
- condition: Condiciones para que la regla de conversión de identidad entre en vigor. Se admiten los siguientes tres tipos de condiciones:
La información de usuario asignada a IAM solo puede contener letras, dígitos, espacios, guiones (-) guiones bajos y puntos (.), y no puede comenzar con un dígito.
Ejemplos de la condición empty
La condición empty devuelve cadenas de caracteres para reemplazar los atributos locales {0..n}.
- En el siguiente ejemplo, el nombre de usuario de un usuario federado será, "el valor del primer atributo remoto+espacio+el valor del segundo atributo remoto" en IAM, es decir, FirstName LastName. El grupo al que pertenece el usuario es el valor del tercer atributo remoto Group. Este atributo solo tiene un valor.
[ { "local": [ { "user": { "name": "{0} {1}" } }, { "group": { "name": "{2}" } } ], "remote": [ { "type": "FirstName" }, { "type": "LastName" }, { "type": "Group" } ] } ]
Si se recibe la siguiente aserción (simplificada para una fácil comprensión), el nombre de usuario del usuario federado será John Smith y el usuario solo pertenecerá al grupo de admin.
{FirstName: John} {LastName: Smith} {Group: admin}
- Si un usuario federado pertenecerá a varios grupos de usuarios en IAM, la regla de conversión de identidad se puede configurar de la siguiente manera:
En el siguiente ejemplo, el nombre de usuario de un usuario federado será, "el valor del primer atributo remoto+espacio+el valor del segundo atributo remoto" en IAM, es decir, FirstName LastName. Los grupos a los que pertenece el usuario son el valor del tercer atributo remoto Groups.
[ { "local": [ { "user": { "name": "{0} {1}" } }, { "group": { "name": "{2}" } } ], "remote": [ { "type": "FirstName" }, { "type": "LastName" }, { "type": "Groups" } ] } ]
Si se recibe la siguiente aserción, el nombre de usuario del usuario federado será John Smith y el usuario pertenecerá a los grupos de admin y manager.
{FirstName: John} {LastName: Smith} {Groups: [admin, manager]}
Ejemplos de condiciones "any one of" y "not any of"
A diferencia de la condición empty, any one of y not any of ellas devuelven valores booleanos. Estos valores no se utilizarán para reemplazar los atributos locales. En el siguiente ejemplo, solo {0} será reemplazado por el valor devuelto de la primera condición de empty en el bloque remote. El valor de group se fija como admin.
- El UserName del usuario federado en IAM es el valor del primer atributo remoto, es decir, el UserName. El usuario federado pertenece al grupo de admin. Esta regla solo tiene efecto para los usuarios que son miembros del grupo idp_admin en el IdP.
[ { "local": [ { "user": { "name": "{0}" } }, { "group": { "name": "admin" } } ], "remote": [ { "type": "UserName" }, { "type": "Groups", "any_one_of": [ "idp_admin" ] } ] } ]
- Si un usuario federado pertenecerá a varios grupos de usuarios en IAM, la regla de conversión de identidad se puede configurar de la siguiente manera:
El UserName del usuario federado en IAM es el valor del primer atributo remoto, es decir, el UserName. El usuario federado pertenece a los grupos de admin y manager. Esta regla solo tiene efecto para los usuarios que son miembros del grupo idp_admin en el IdP.
[ { "local": [ { "user": { "name": "{0}" } }, { "group": { "name":"admin" } }, { "group": { "name":"manager" } } ], "remote": [ { "type": "UserName" }, { "type": "Groups", "any_one_of": [ "idp_admin" ] } ] } ]
- La siguiente afirmación indica que el usuario federado John Smith es miembro del grupo idp_admin. Por lo tanto, el usuario puede acceder a Huawei Cloud.
{UserName: John Smith} {Groups: [idp_user, idp_admin, idp_agency]}
- La siguiente afirmación indica que el usuario federado John Smith no es miembro del grupo idp_admin. Por lo tanto, la regla no tiene efecto para el usuario y el usuario no puede acceder a Huawei Cloud.
{UserName: John Smith} {Groups: [idp_user, idp_agency]}
- La siguiente afirmación indica que el usuario federado John Smith es miembro del grupo idp_admin. Por lo tanto, el usuario puede acceder a Huawei Cloud.
Ejemplo de condición que contiene una expresión regular
Puede agregar "regex": true a una condición para calcular los resultados usando una expresión regular.
[ { "local": [ { "user": { "name": "{0}" } }, { "group": { "name": "admin" } } ], "remote": [ { "type": "UserName" }, { "type": "Groups", "any_one_of": [ ".*@mail.com$" ], "regex": true } ] } ]
Ejemplos de condiciones combinadas
Se pueden combinar múltiples condiciones usando el operador lógico AND.
[ { "local": [ { "user": { "name": "{0}" } }, { "group": { "name": "admin" } } ], "remote": [ { "type": "UserName" }, { "type": "Groups", "not_any_of": [ "idp_user" ] }, { "type": "Groups", "not_any_of": [ "idp_agent" ] } ] } ]
La regla anterior es equivalente a la siguiente:
[ { "local": [ { "user": { "name": "{0}" } }, { "group": { "name": "admin" } } ], "remote": [ { "type": "UserName" }, { "type": "Groups", "not_any_of": [ "idp_user", "idp_agent" ] } ] } ]
Ejemplos de reglas combinadas
Si se combinan varias reglas, los métodos para coincidir nombres de usuario y grupos de usuarios son diferentes.
El nombre de un usuario federado será el nombre de usuario coincidente en la primera regla que surta efecto, y el usuario pertenecerá a todos los grupos coincidentes en todas las reglas que suban efecto. Un usuario federado solo puede iniciar sesión si al menos una regla entra en vigor para que coincida con el nombre de usuario. Para una fácil comprensión, las reglas de nombre de usuario y grupo de usuarios se pueden configurar por separado.
En el siguiente ejemplo, las reglas tienen efecto para los usuarios del grupo idp_admin. El UserName de cada usuario federado aplicable es el UserName en IAM y el usuario pertenece al grupo de admin.
[ { "local": [ { "user": { "name": "{0}" } } ], "remote": [ { "type": "UserName" } ] }, { "local": [ { "group": { "name": "admin" } } ], "remote": [ { "type": "Groups", "any_one_of": [ "idp_admin" ] } ] } ]
La siguiente afirmación indica que el usuario John Smith es miembro del grupo idp_admin en el IdP y, por lo tanto, cumple con las reglas. El nombre de usuario de este usuario será John Smith en IAM, y el usuario pertenecerá al grupo de admin.
{UserName: John Smith} {Groups: [idp_user, idp_admin, idp_agency]}