Configurar o SCIM em um IdP OIDC ou SAML

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

Cada pool de identidade de colaboradores oferece suporte a apenas um locatário SCIM. Para configurar um novo locatário SCIM em um pool que já tem um, primeiro é necessário excluir o locatário atual.

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

Para configurar System for Cross-domain Identity Management (SCIM), faça o seguinte:
  1. Configurar um locatário e um token SCIM no Google Cloud
  2. Configurar o SCIM no IdP OIDC ou SAML
  3. Atualizar o provedor para ativar o SCIM
  4. Verificar a sincronização do SCIM

Configurar um locatário e um token SCIM no Google Cloud

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

  1. Criar um locatário 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 para o locatário SCIM.
    • WORKFORCE_POOL_ID: o ID do pool de colaboradores que você criou anteriormente neste documento.
    • PROVIDER_ID: o ID do provedor do pool de identidade de colaboradores que você criou anteriormente neste documento.
    • SCIM_TENANT_DISPLAY_NAME: um nome de exibição para o locatário SCIM.
    • SCIM_TENANT_DESCRIPTION: uma descrição para o locatário SCIM.
    • CLAIM_MAPPING: uma lista separada por vírgulas de mapeamentos de atributos. Para a lista estendida de atributos de mapeamento, consulte Mapear atributos de token e SCIM. 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 SCIM precisa se referir exclusivamente às mesmas identidades mapeadas no atributo google.subject no provedor do pool de identidade de colaboradores usando a flag --attribute-mapping. Depois que o locatário SCIM é criado, não é possível atualizar o mapeamento de declarações. Para substituí-lo, você pode excluir o locatário SCIM e criar um novo imediatamente. Para saber mais sobre as considerações para usar o SCIM, consulte Suporte ao SCIM.

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

    1. No campo baseUri na saída, salve o URI inteiro, que é formatado como https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID. Você precisa fornecer esse URI ao IdP.
    2. Além disso, no URI, salve apenas o SCIM_TENANT_UID. Você precisa desse UID para definir uma política de permissão do IAM no locatário SCIM mais tarde neste documento.
  3. Criar um token 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 SCIM
    • PROVIDER_ID: o ID do provedor do pool de identidade de colaboradores
  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 securityToken campo. Você precisa fornecer esse segurança token ao IdP. O token de segurança é mostrado apenas nessa saída, e se for perdido, você precisará criar um novo token SCIM.

    2. Para verificar se 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, você poderá pular essa etapa.

  5. Defina uma política de permissão do IAM no locatário e no token SCIM. Se o curl comando 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 SCIM.

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

Configurar o SCIM no IdP OIDC ou SAML

No IdP, configure o SCIM conforme descrito na documentação do IdP. Use o URL e o token SCIM recebidos na etapa anterior.

Atualizar o provedor para ativar o SCIM

Para ativar o SCIM para um provedor, faça o seguinte:

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 de colaboradores
  • 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 de colaboradores
  • 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.

Mapear atributos de token e SCIM

É necessário mapear atributos de forma consistente, tanto no provedor do pool de identidade de colaboradores quanto no locatário SCIM configurado para o provedor. Para o provedor do pool de identidade de colaboradores, use a flag --attribute-mapping e, para o locatário SCIM, use a flag --claim-mapping. O atributo do IdP mapeado para google.subject dos usuários precisa se referir exclusivamente à mesma identidade, definida em um token ou mapeamento SCIM. Para saber mais sobre o mapeamento de atributos ao usar o SCIM, consulte a seção Suporte ao SCIM. A tabela a seguir mostra como mapear atributos em declarações de token e atributos SCIM:

Atributo do Google Mapeamento do provedor do pool de identidade de colaboradores Mapeamento do locatário SCIM
google.subject assertion.sub user.externalId
google.group verifique se você atualizou o provedor com --scim-usage=enabled-for-groups N/A group.externalId

Verificar a sincronização do SCIM

Depois de configurar o SCIM, você pode usar 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 o ID do locatário SCIM.

Verificar a sincronização do usuário

Para verificar se um usuário foi sincronizado corretamente, pesquise o userName do usuário 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 do grupo

Para verificar se um grupo foi sincronizado corretamente, pesquise o displayName do grupo 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 membro:

{
  "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 membro:

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

Observação:para receber 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 valores reais.

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

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

  1. Se --scim-usage=enabled-for-groups estiver definido para o provedor, desative-o na configuração do provedor:
              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 de colaboradores
    • WORKFORCE_POOL_ID: o ID do pool de colaboradores
    • LOCATION: o local do pool de colaboradores

  2. Exclua o locatário 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 SCIM a ser excluído
    • WORKFORCE_POOL_ID: o ID do pool de colaboradores
    • PROVIDER_ID: o ID do provedor do pool de identidade de colaboradores
    Para saber mais sobre o SCIM, incluindo a exclusão de locatários SCIM, consulte Suporte ao SCIM.

A seguir