Configurar o SCIM no Microsoft Entra ID

Neste documento, descrevemos como configurar um locatário do SCIM em um pool de identidades de colaboradores. Para saber mais sobre o SCIM, consulte Provisionamento do SCIM para a federação de identidade de colaboradores.

Cada pool de identidade da força de trabalho aceita apenas um locatário SCIM. Para configurar um novo locatário do SCIM em um pool que já tem um, primeiro exclua permanentemente o locatário atual.

A flag --claim-mapping de um locatário do SCIM pode conter apenas expressões específicas da Common Expression Language (CEL). Para saber quais expressões são aceitas, consulte Mapeamento de declarações.

Verifique se o IdP fornece valores exclusivos e não vazios para atributos mapeados para google.subject e google.group. A sincronização de valores duplicados falha com um erro HTTP 409 Conflict, e valores nulos ou vazios falham com um erro HTTP 400 Bad Request. Para mais informações, consulte Suporte ao SCIM.

Para configurar o System for Cross-domain Identity Management (SCIM), faça o seguinte:

  1. Configurar um locatário e um token do SCIM em Google Cloud
  2. Configurar o SCIM no Microsoft Entra ID
  3. Atualizar o provedor para ativar o SCIM
  4. Verificar a sincronização do SCIM

Configurar um locatário e um token do SCIM em Google Cloud

Para configurar um locatário do SCIM em Google Cloud, faça o seguinte:

  1. Crie um locatário do SCIM.

        gcloud iam workforce-pools providers scim-tenants create SCIM_TENANT_ID \
            --workforce-pool="WORKFORCE_POOL_ID" \
            --provider="PROVIDER_ID" \
            --display-name="SCIM_TENANT_DISPLAY_NAME" \
            --description="SCIM_TENANT_DESCRIPTION" \
            --claim-mapping="CLAIM_MAPPING" \
            --location="global"
        

    Substitua:

    • SCIM_TENANT_ID: um ID do seu locatário do SCIM.
    • WORKFORCE_POOL_ID: o ID do pool de força de trabalho que você criou anteriormente neste documento.
    • PROVIDER_ID: o ID do provedor de pool de identidade de colaboradores que você criou anteriormente neste documento.
    • SCIM_TENANT_DISPLAY_NAME: um nome de exibição para seu locatário do SCIM.
    • SCIM_TENANT_DESCRIPTION: uma descrição para seu locatário do SCIM.
    • CLAIM_MAPPING: uma lista separada por vírgulas de mapeamentos de atributos. Para a lista completa de atributos de mapeamento, consulte Mapeamento de declarações. O mapeamento a seguir é recomendado para o Gemini Enterprise:
      google.subject=user.emails[0].value.lowerAscii(),google.group=group.externalId

      O atributo google.subject que você mapeia no locatário do SCIM precisa se referir exclusivamente às mesmas identidades mapeadas no atributo google.subject no provedor do pool de identidades de colaboradores usando a flag --attribute-mapping. Depois que o locatário do SCIM é criado, não é possível atualizar o mapeamento de declarações. Para substituir, exclua permanentemente o locatário do SCIM e crie um novo imediatamente. Para saber mais sobre as considerações ao usar o SCIM, consulte Suporte ao SCIM.

  2. Quando o comando for concluído, faça o seguinte:

    1. No campo baseUri da saída, salve todo o URI, que está formatado como https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID. Você precisa fornecer esse URI ao seu IdP.
    2. Além disso, salve apenas o SCIM_TENANT_UID do URI. Você vai precisar desse UID para definir uma política de permissão do IAM no locatário do SCIM mais adiante neste documento.
  3. Crie um token do SCIM:

        gcloud iam workforce-pools providers scim-tenants tokens create SCIM_TOKEN_ID \
            --display-name DISPLAY_NAME \
            --scim-tenant SCIM_TENANT_ID \
            --workforce-pool WORKFORCE_POOL_ID \
            --provider PROVIDER_ID \
            --location global
        

    Substitua:

    • SCIM_TOKEN_ID: um ID para o token SCIM
    • DISPLAY_NAME: o nome de exibição do token SCIM
    • WORKFORCE_POOL_ID: o ID do pool de colaboradores
    • SCIM_TENANT_ID: o ID do locatário do SCIM
    • PROVIDER_ID: o ID do provedor do pool de identidade da força de trabalho
  4. Quando o comando gcloud iam workforce-pools providers scim-tenants tokens create for concluído, faça o seguinte:

    1. Na saída, salve o valor de SCIM_TOKEN no campo securityToken. Você precisa fornecer esse token de segurança ao seu IdP. O token de segurança é mostrado apenas nessa saída e, se for perdido, você precisará criar um novo token do SCIM.

    2. Para verificar se o SCIM_TOKEN foi rejeitado pela política da sua organização, execute o seguinte comando:

      curl -v -H "Authorization: Bearer SCIM_TOKEN"  https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID/Users

      Se o comando falhar com um erro relacionado a permissões, execute gcloud organizations add-iam-policy-binding, descrito em uma etapa posterior. Se o comando for bem-sucedido, pule essa etapa.

  5. Defina uma política de permissão do IAM no locatário e no token do SCIM. Se o comando curl em uma etapa anterior falhou com um erro relacionado a permissões, execute o seguinte comando:

        gcloud organizations add-iam-policy-binding ORGANIZATION_ID \
            --member=serviceAccount:SERVICE_AGENT_EMAIL \
            --role roles/iam.scimSyncer
        

    Substitua:

    • ORGANIZATION_ID: o ID da organização.
    • SERVICE_AGENT_EMAIL: o endereço de e-mail do agente de serviço. O endereço de e-mail está no seguinte formato: o-ORGANIZATION_ID-SCIM_TENANT_UID@gcp-sa-iamscim.iam.gserviceaccount.com. SCIM_TENANT_UID é retornado quando você cria o locatário do SCIM.

Ao provisionar grupos no IdP, verifique se o nome de exibição de cada grupo, conforme fornecido no campo displayName, é exclusivo em um locatário do SCIM. Para saber mais sobre grupos e SCIM no Microsoft Entra ID, consulte Grupos.

Configurar o SCIM no Microsoft Entra ID

Para configurar o SCIM no Microsoft Entra ID, faça o seguinte:

  1. Abra o portal do Azure e faça login como um usuário com privilégios de administrador global.
  2. Selecione Microsoft Entra ID > Apps empresariais.
  3. Clique em Novo aplicativo.
  4. Em Procurar na galeria de apps do Microsoft Entra, clique em Criar seu próprio aplicativo.
  5. No painel Criar seu próprio aplicativo, faça o seguinte:
    1. Em Qual é o nome do seu app?, insira o nome do app.
    2. Selecione Integrar outros apps que você não encontra na galeria (não galeria).
    3. Para criar o app, clique em Criar.
  6. No seu aplicativo, faça o seguinte:
    1. Na seção Gerenciar, clique em Provisionamento.
    2. No painel à direita, clique em Nova configuração.
    3. Em Credenciais de administrador, no URL do locatário, insira o URL do SCIM que você recebeu ao criar o locatário do SCIM, anexado com ?aadOptscim062020. Adicione ?aadOptscim062020 ao final do URI base.

      Esse parâmetro de consulta é exigido pelo Microsoft Entra ID para garantir que as solicitações PATCH do SCIM estejam em conformidade com os padrões RFC do SCIM. Para mais detalhes, consulte a documentação da Microsoft.

      O URL final do locatário no Microsoft Entra ID precisa estar no seguinte formato:

      https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID?aadOptscim062020

      Substitua SCIM_TENANT_UID pelo UID do locatário do SCIM.

    4. Em Token secreto, insira o token secreto que você recebeu ao criar o token SCIM.
    5. Para testar a configuração do SCIM com a federação de identidade de colaboradores, clique em Testar conexão.
    6. Para salvar a configuração, clique em Criar.
  7. Na seção Gerenciar, faça o seguinte:
    1. Clique em Mapeamento de atributos.
    2. Clique em Provisionar usuários do Microsoft Entra ID.
    3. Na página Mapeamento de atributos, faça o seguinte:
      1. Na tabela Mapeamentos de atributos, encontre a linha de externalId e clique em Editar nessa linha. Na página Editar atributos, faça o seguinte:
        1. Na lista suspensa Atributo de origem, selecione objectId.
        2. Clique em OK.
      2. Para salvar o mapeamento de atributos, clique em Salvar.

Atualizar o provedor para ativar o SCIM

Para ativar o SCIM em um provedor, defina a flag --scim-usage com base na meta do produto:

Ativar o SCIM para grupos (Gemini Enterprise)

OIDC

      gcloud iam workforce-pools providers update-oidc PROVIDER_ID \
          --workforce-pool=WORKFORCE_POOL_ID \
          --location=LOCATION \
          --scim-usage=enabled-for-groups
    

Substitua:

  • PROVIDER_ID: o ID do provedor do pool de identidade da força de trabalho
  • WORKFORCE_POOL_ID: o ID do pool de colaboradores
  • LOCATION: o local do pool de colaboradores

SAML

      gcloud iam workforce-pools providers update-saml PROVIDER_ID \
          --workforce-pool=WORKFORCE_POOL_ID \
          --location=LOCATION \
          --scim-usage=enabled-for-groups
    

Substitua:

  • PROVIDER_ID: o ID do provedor do pool de identidade da força de trabalho
  • WORKFORCE_POOL_ID: o ID do pool de colaboradores
  • LOCATION: o local do pool de colaboradores

Ativar o SCIM para usuários e grupos (Looker) (prévia)

OIDC

      gcloud iam workforce-pools providers update-oidc PROVIDER_ID \
          --workforce-pool=WORKFORCE_POOL_ID \
          --location=LOCATION \
          --scim-usage=enabled-for-users-groups
    

Substitua:

  • PROVIDER_ID: o ID do provedor do pool de identidade da força de trabalho
  • WORKFORCE_POOL_ID: o ID do pool de colaboradores
  • LOCATION: o local do pool de colaboradores

SAML

      gcloud iam workforce-pools providers update-saml PROVIDER_ID \
          --workforce-pool=WORKFORCE_POOL_ID \
          --location=LOCATION \
          --scim-usage=enabled-for-users-groups
    

Substitua:

  • PROVIDER_ID: o ID do provedor do pool de identidade da força de trabalho
  • WORKFORCE_POOL_ID: o ID do pool de colaboradores
  • LOCATION: o local do pool de colaboradores

Para verificar a sincronização do SCIM, consulte Verificar a sincronização do SCIM.

Mapeamento de declarações

Ao configurar o SCIM, você define mapeamentos de declarações (--claim-mapping) no locatário do SCIM para mapear atributos de usuários e grupos do SCIM para atributos do Google.

Atributos Google Cloud compatíveis para mapeamento de declarações

A tabela a seguir lista os atributos Google Cloud que podem ser mapeados no seu locatário do SCIM (--claim-mapping) usando a Common Expression Language (CEL):

AtributoGoogle Cloud Requisito Descrição Expressões e limites aceitos
google.subject Obrigatório

Identificador exclusivo do usuário autenticado.

O atributo do IdP usado para preencher google.subject precisa ser idêntico no mapeamento do provedor (--attribute-mapping) e no locatário do SCIM (--claim-mapping). Se esses mapeamentos forem inconsistentes, os usuários poderão fazer login, mas não serão reconhecidos como membros de grupos provisionados pelo SCIM.

Restrito às seguintes expressões básicas (ou com .lowerAscii()):
  • user.externalId
  • user.userName
  • user.emails[0].value

Comprimento máximo: 127 bytes.

Observação:esse mapeamento é imutável depois que o locatário do SCIM é criado. Para atualizá-lo, é necessário excluir permanentemente e recriar o locatário do SCIM.

google.group Obrigatório para grupos do SCIM Identificador exclusivo da associação ao grupo sincronizada usando o SCIM. Restrito às seguintes expressões básicas (ou com .lowerAscii()):
  • group.externalId
  • group.displayName

Observação:esse mapeamento é imutável depois que o locatário do SCIM é criado. Para atualizá-lo, é necessário excluir permanentemente e recriar o locatário do SCIM.

google.display_name Opcional Um atributo que define o nome do usuário conectado no console Google Cloud . Ele não pode ser usado em políticas de permissão do IAM. Mapeia para um atributo de string, como user.displayName ou user.name.formatted. Tamanho máximo: 100 bytes.
google.profile_photo Opcional Um URL da miniatura da foto do usuário que aparece como foto do perfil no console do Google Cloud . Ele não pode ser usado em políticas de permissão do IAM. Precisa ser avaliado como uma string de URL válida (como user.photos.filter(p, p.type == 'thumbnail')[0].value ou user.photos[0].value).
google.email Opcional Um atributo usado para mapear endereços de e-mail do IdP para produtos integrados usando a integração do cliente OAuth da federação de identidade de colaboradores. Ele não pode ser usado em políticas de permissão do IAM. Mapeia para um atributo de e-mail, como user.emails.filter(e, e.type == 'work')[0].value ou user.emails[0].value.
google.posix_username Opcional Uma string de nome de usuário exclusiva compatível com POSIX usada para SSH no navegador e Login do SO com a federação de identidade de colaboradores. Esse atributo não pode ser usado nas políticas de permissão do IAM. O tamanho máximo é de 32 caracteres.
attribute.KEY Opcional

Atributos personalizados do seu IdP que podem ser usados para definir sua estratégia de autorização em uma política de permissão do IAM. Substitua KEY pelo nome do atributo que você quer usar.

Por exemplo, é possível definir um atributo personalizado como costcenter = "1234" e se referir a ele usando principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workforcePools/WORKFORCE_POOL_ID/attribute.costcenter/1234. Conceder acesso a esse identificador principal dá acesso a todas as identidades configuradas no IdP com esse centro de custo.

Até 50 regras de mapeamento de atributos personalizados. Tamanho máximo por regra: 256 caracteres.

Exemplos de mapeamentos para consistência de assunto

Conforme descrito em Atributos compatíveis para mapeamento de declarações, o atributo do IdP usado para preencher google.subject precisa ser idêntico no mapeamento do provedor (--attribute-mapping) e no locatário do SCIM (--claim-mapping). A tabela a seguir mostra exemplos de referência para o Microsoft Entra ID:

Atributo do Google Mapeamento de provedor de pool de identidade de colaboradores Mapeamento de locatário do SCIM
google.subject assertion.oid user.externalId
google.subject assertion.attributes['http://schemas.microsoft.com/identity/claims/objectidentifier'][0] user.externalId
google.subject assertion.email user.emails[0].value
google.subject assertion.attributes['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress'][0] user.emails[0].value
google.subject assertion.email.lowerAscii() user.emails[0].value.lowerAscii()
google.subject assertion.attributes['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress'][0].lowerAscii() user.emails[0].value.lowerAscii()
google.subject assertion.preferred_username user.userName
google.subject assertion.attributes['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name'][0] user.userName
google.subject assertion.preferred_username.lowerAscii() user.userName.lowerAscii()
google.subject assertion.attributes['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name'][0].lowerAscii() user.userName.lowerAscii()

Verificar a sincronização do SCIM

Depois de configurar o SCIM, use curl para verificar se os usuários e grupos estão sendo sincronizados corretamente com Google Cloud. Esses comandos exigem um token SCIM válido e seu ID de locatário do SCIM.

Verificar a sincronização de usuários

Para verificar se um usuário foi sincronizado corretamente, pesquise o userName dele usando o seguinte filtro:

curl -H "Authorization: Bearer SCIM_TOKEN" \
  "https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID/Users?filter=userName%20eq%20%22USER_NAME%22"

Exemplo de resposta:

{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
  "totalResults": 1,
  "Resources": [
    {
      "id": "USER_ID",
      "userName": "USER_NAME",
      ...
    }
  ]
}

Verificar a sincronização de grupo

Para verificar se um grupo foi sincronizado corretamente, pesquise o displayName dele usando o seguinte filtro:

curl -H "Authorization: Bearer SCIM_TOKEN" \
  "https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID/Groups?filter=displayName%20eq%20%22GROUP_NAME%22"

Exemplo de resposta:

{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
  "totalResults": 1,
  "Resources": [
    {
      "id": "GROUP_ID",
      "displayName": "GROUP_NAME",
      ...
    }
  ]
}

Verificar a associação ao grupo

Para verificar se um usuário específico é membro de um grupo, use um filtro que especifique o ID do grupo e o ID do usuário.

curl -H "Authorization: Bearer SCIM_TOKEN" \
  "https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID/Groups?filter=id%20eq%20%22GROUP_ID%22%20and%20members%20eq%20%22USER_ID%22"

Exemplo de resposta se o usuário for assinante:

{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
  "totalResults": 1,
  "Resources": [
    {
      "id": "GROUP_ID",
      "displayName": "GROUP_NAME",
      ...
    }
  ]
}

Exemplo de resposta se o usuário não for assinante:

{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
  "totalResults": 0,
  "Resources": []
}

Observação:para conseguir o GROUP_ID e o USER_ID, primeiro encontre o grupo e o usuário usando os filtros displayName e userName. Os IDs são retornados no campo id da resposta. Substitua SCIM_TOKEN, SCIM_TENANT_UID, USER_NAME, GROUP_NAME, GROUP_ID e USER_ID pelos seus valores reais.

Forçar a exclusão de um locatário do SCIM

Para forçar a exclusão de um locatário do SCIM, faça o seguinte:

  1. Se --scim-usage=enabled-for-groups ou --scim-usage=enabled-for-users-groups estiver definido para seu provedor, desative-o na configuração do provedor:

    OIDC

    gcloud iam workforce-pools providers update-oidc PROVIDER_ID \
        --workforce-pool=WORKFORCE_POOL_ID \
        --location=LOCATION \
        --scim-usage=SCIM_USAGE_UNSPECIFIED
    

    Substitua:

    • PROVIDER_ID: o ID do provedor do pool de identidade da força de trabalho
    • WORKFORCE_POOL_ID: o ID do pool de colaboradores
    • LOCATION: o local do pool de colaboradores

    SAML

    gcloud iam workforce-pools providers update-saml PROVIDER_ID \
        --workforce-pool=WORKFORCE_POOL_ID \
        --location=LOCATION \
        --scim-usage=SCIM_USAGE_UNSPECIFIED
    

    Substitua:

    • PROVIDER_ID: o ID do provedor do pool de identidade da força de trabalho
    • WORKFORCE_POOL_ID: o ID do pool de colaboradores
    • LOCATION: o local do pool de colaboradores

  2. Exclua o locatário do SCIM:
    gcloud iam workforce-pools providers scim-tenants delete SCIM_TENANT_ID \
        --workforce-pool=WORKFORCE_POOL_ID \
        --provider=PROVIDER_ID \
        --hard-delete \
        --location=global
    

    Substitua:

    • SCIM_TENANT_ID: o ID do locatário do SCIM a ser excluído
    • WORKFORCE_POOL_ID: o ID do pool de colaboradores
    • PROVIDER_ID: o ID do provedor do pool de identidade da força de trabalho
    Para saber mais sobre o SCIM, incluindo a exclusão de locatários do SCIM, consulte Suporte ao SCIM.

A seguir