Sintaxe das regras de conversão de identidade
[ { "local": [ { "<user> or <group> or <groups>" } ], "remote": [ { "<condition>" } ] } ]
Descrição do parâmetro:
- local: informações de identidade de um usuário federado mapeado para o IAM. O valor desse campo pode conter espaços reservados, como {0...n}. Os atributos {0} e {1} representam o primeiro e o segundo atributos remotos das informações do usuário, respectivamente.
- remote: informações sobre um usuário federado do IdP. Esse campo é uma expressão que consiste em atributos e operadores de asserção. O valor deste campo é determinado pela asserção.
- condition: condições para que a regra de conversão de identidade entre em vigor. Os três tipos de condições a seguir são suportados:
- empty: a regra corresponde a todas as declarações que contêm o tipo de atributo. Essa condição não precisa ser especificada. O resultado da condição é o argumento que é passado como entrada.
- any_one_of: a regra é correspondida somente se qualquer uma das cadeias de caracteres especificadas aparecer no tipo de atributo. O resultado da condição é Boolean, não o argumento que é passado como entrada.
- not_any_of: a regra não é correspondida se qualquer uma das cadeias de caracteres especificadas aparecer no tipo de atributo. O resultado da condição é Boolean, não o argumento que é passado como entrada.
- condition: condições para que a regra de conversão de identidade entre em vigor. Os três tipos de condições a seguir são suportados:
As informações do usuário mapeadas para o IAM podem conter apenas letras, dígitos, espaços, hifens (-), sublinhados (_) e pontos (.) e não podem começar com um dígito.
Exemplos da condição empty
A condição empty retorna cadeias de caracteres para substituir os atributos locais {0..n}.
- No exemplo a seguir, o nome de usuário de um usuário federado será "o valor do primeiro atributo remoto+espaço+o valor do segundo atributo remoto" no IAM, ou seja, FirstName LastName. O grupo ao qual o usuário pertence é o valor do terceiro atributo remoto Group. Este atributo tem apenas um valor.
[ { "local": [ { "user": { "name": "{0} {1}" } }, { "group": { "name": "{2}" } } ], "remote": [ { "type": "FirstName" }, { "type": "LastName" }, { "type": "Group" } ] } ]
Se a seguinte asserção (simplificada para facilitar a compreensão) for recebida, o nome de usuário do usuário federado será John Smith e o usuário só pertencerá ao grupo admin.
{FirstName: John} {LastName: Smith} {Group: admin}
- Se um usuário federado pertencer a vários grupos de usuários no IAM, a regra de conversão de identidade poderá ser configurada da seguinte maneira:
No exemplo a seguir, o nome de usuário de um usuário federado será "o valor do primeiro atributo remoto+espaço+o valor do segundo atributo remoto" no IAM, ou seja, FirstName LastName. Os grupos aos quais o usuário pertence são o valor do terceiro atributo remoto Groups.
[ { "local": [ { "user": { "name": "{0} {1}" } }, { "group": { "name": "{2}" } } ], "remote": [ { "type": "FirstName" }, { "type": "LastName" }, { "type": "Groups" } ] } ]
Se a asserção a seguir for recebida, o nome de usuário do usuário federado será John Smith e o usuário pertencerá aos grupos admin e manager.
{FirstName: John} {LastName: Smith} {Groups: [admin, manager]}
Exemplos das condições "any one of" e "not any of"
Ao contrário da condição empty, as condições any one of e not any of retornam valores Boolean. Esses valores não serão usados para substituir os atributos locais. No exemplo a seguir, apenas {0} será substituído pelo valor retornado da primeira condição empty no bloco remote. O valor do group é fixo como admin.
- O nome de usuário do usuário federado no IAM é o valor do primeiro atributo remoto, ou seja, UserName. O usuário federado pertence ao grupo admin. Essa regra entra em vigor somente para usuários que são membros do grupo idp_admin no IdP.
[ { "local": [ { "user": { "name": "{0}" } }, { "group": { "name": "admin" } } ], "remote": [ { "type": "UserName" }, { "type": "Groups", "any_one_of": [ "idp_admin" ] } ] } ]
- Se um usuário federado pertencer a vários grupos de usuários no IAM, a regra de conversão de identidade poderá ser configurada da seguinte maneira:
O nome de usuário do usuário federado no IAM é o valor do primeiro atributo remoto, ou seja, UserName. O usuário federado pertence aos grupos admin e manager. Essa regra entra em vigor somente para usuários que são membros do grupo idp_admin no IdP.
[ { "local": [ { "user": { "name": "{0}" } }, { "group": { "name":"admin" } }, { "group": { "name":"manager" } } ], "remote": [ { "type": "UserName" }, { "type": "Groups", "any_one_of": [ "idp_admin" ] } ] } ]
- A asserção a seguir indica que o usuário federado John Smith é membro do grupo idp_admin. Portanto, o usuário pode acessar a Huawei Cloud.
{UserName: John Smith} {Groups: [idp_user, idp_admin, idp_agency]}
- A asserção a seguir indica que o usuário federado John Smith não é membro do grupo idp_admin. Portanto, a regra não entra em vigor para o usuário e o usuário não pode acessar a Huawei Cloud.
{UserName: John Smith} {Groups: [idp_user, idp_agency]}
- A asserção a seguir indica que o usuário federado John Smith é membro do grupo idp_admin. Portanto, o usuário pode acessar a Huawei Cloud.
Exemplo de condição contendo uma expressão regular
Você pode adicionar "regex": true a uma condição para calcular resultados usando uma expressão regular.
[ { "local": [ { "user": { "name": "{0}" } }, { "group": { "name": "admin" } } ], "remote": [ { "type": "UserName" }, { "type": "Groups", "any_one_of": [ ".*@mail.com$" ], "regex": true } ] } ]
Exemplos de condições combinadas
Várias condições podem ser combinadas usando o 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" ] } ] } ]
A regra anterior é equivalente à seguinte:
[ { "local": [ { "user": { "name": "{0}" } }, { "group": { "name": "admin" } } ], "remote": [ { "type": "UserName" }, { "type": "Groups", "not_any_of": [ "idp_user", "idp_agent" ] } ] } ]
Exemplos de regras combinadas
Se várias regras forem combinadas, os métodos para correspondência de nomes de usuários e grupos de usuários serão diferentes.
O nome de um usuário federado será o nome de usuário correspondente na primeira regra que entrar em vigor, e o usuário pertencerá a todos os grupos correspondentes em todas as regras que entrarem em vigor. Um usuário federado só pode fazer logon se pelo menos uma regra entrar em vigor para corresponder ao nome de usuário. Para facilitar a compreensão, as regras de nome de usuário e grupo de usuários podem ser configuradas separadamente.
No exemplo a seguir, as regras entram em vigor para usuários no grupo idp_admin. O nome de usuário de cada usuário federado aplicável é UserName no IAM e o usuário pertence ao grupo admin.
[ { "local": [ { "user": { "name": "{0}" } } ], "remote": [ { "type": "UserName" } ] }, { "local": [ { "group": { "name": "admin" } } ], "remote": [ { "type": "Groups", "any_one_of": [ "idp_admin" ] } ] } ]
A asserção a seguir indica que o usuário John Smith é membro do grupo idp_admin no IdP e, portanto, atende às regras. O nome de usuário desse usuário será John Smith no IAM e o usuário pertencerá ao grupo admin.
{UserName: John Smith} {Groups: [idp_user, idp_admin, idp_agency]}