Configurar a duração estendida da sessão para a federação de identidade de colaboradores

Por padrão, as sessões da federação de identidade de colaboradores têm uma duração máxima de 12 horas. A duração estendida da sessão permite que as organizações configurem sessões de longa duração de até 90 dias para o Looker (Google Cloud Core) e o app Gemini Enterprise para dispositivos móveis:

  • Looker (Google Cloud Core): configurado usando escopos de projeto (restricted_project). As sessões estendidas permitem que os usuários da força de trabalho mantenham uma conexão ininterrupta com o Looker (Google Cloud Core) sem exigir a reautenticação diária no provedor de identidade externo (IdP). A interação do usuário no Looker (Google Cloud Core) continua sendo regida pela configuração de duração da sessão do Looker (Google Cloud Core).

  • O app Gemini Enterprise para dispositivos móveis: configurado usando escopos de aplicativo (restricted_client_application). As sessões estendidas permitem que os usuários da força de trabalho mantenham uma conexão ininterrupta com o app Gemini Enterprise para dispositivos móveis sem exigir a reautenticação diária no provedor de identidade externo (IdP).

Para manter a segurança durante as sessões estendidas, Google Cloud sincroniza periodicamente os atributos do usuário e as associações ao grupo diretamente do provedor de identidade externa (IdP) em segundo plano.

Este documento descreve como definir políticas de sessão estendida usando a API Access Context Manager com controles com escopo de projeto (para o Looker (Google Cloud Core)) e controles com escopo de aplicativo (para o app Gemini Enterprise para dispositivos móveis), configurar o provedor do pool de força de trabalho e gerenciar vinculações ativas.


Visão geral

A federação de identidade de colaboradores usa vinculações de acesso do Access Context Manager Google Cloud para configurar a duração estendida da sessão:

  • Google Cloud Vinculação de acesso: os administradores definem uma política de duração da sessão usando o Access Context Manager que se aplica a toda a organização em todos os pools de força de trabalho. As políticas concedem sessões estendidas de até 90 dias usando um dos seguintes:

    • Escopo do projeto (restricted_project): aplica sessões estendidas a instâncias do Looker (Google Cloud Core) no projeto designado.

    • Escopo do aplicativo (restricted_client_application): aplica sessões estendidas ao app Gemini Enterprise para dispositivos móveis.

  • Sincronização de atributos em segundo plano:

    • OIDC: com suporte usando um fluxo de código de autorização do OIDC com o escopo offline_access (usando tokens de atualização para atualizar periodicamente os atributos do usuário e as associações de grupo do IdP externo em segundo plano) ou pelo provisionamento do SCIM.

    • SAML: para provedores SAML, os atributos do usuário e as associações de grupo são mantidos atualizados usando o provisionamento do SCIM.

  • Proteção contra inatividade: se os atributos do usuário não puderem ser atualizados do IdP externo em 24 horas (por exemplo, se o usuário for desprovisionado ou as credenciais forem revogadas no IdP), Google Cloud terminará a sessão.


Antes de começar

Antes de configurar a duração estendida da sessão, verifique se você tem as permissões e APIs necessárias do Identity and Access Management ativadas:

Papéis e permissões necessárias

Para receber as permissões necessárias para configurar a duração estendida da sessão, peça ao administrador para conceder a você os papéis do IAM a seguir:

Ativar APIs

Ative as APIs do Access Context Manager e do IAM no seu projeto:

gcloud services enable \
    accesscontextmanager.googleapis.com \
    iam.googleapis.com

Limitações e requisitos

Antes de configurar a duração estendida da sessão, revise os seguintes requisitos e limitações:

  • Aplicativos com suporte: a duração estendida da sessão se aplica exclusivamente a:
    • Looker (Google Cloud Core) (configurado usando escopos de projeto)
    • O app Gemini Enterprise para dispositivos móveis (configurado usando escopos de aplicativo)
  • Requisito de lista de permissões para o app Gemini Enterprise para dispositivos móveis: a duração estendida da sessão para o app Gemini Enterprise para dispositivos móveis está disponível apenas na lista de permissões. Para solicitar acesso à lista de permissões durante a versão prévia, entre em contato com seu Google Cloud ponto de contato (POC) de suporte.
  • Tipos de escopo: as configurações de sessão precisam ser definidas em scopedAccessSettings usando um dos seguintes escopos de cliente:
    • Escopo do projeto (restricted_project): especifica o Google Cloud projeto que é proprietário da instância do Looker (Google Cloud Core) (projects/{PROJECT_NUMBER}). Apenas as instâncias do Looker (Google Cloud Core) pertencentes ao projeto designado são afetadas.
    • Escopo do aplicativo (restricted_client_application): especifica o aplicativo pelo nome de exibição canônico name.
    • Para configurar escopos de aplicativo para o app Gemini Enterprise para dispositivos móveis, você precisa usar explicitamente um ou ambos os seguintes nomes de aplicativo exatos:
      • "Gemini Enterprise mobile Android"
      • "Gemini Enterprise mobile IOS"
    • O escopo por ID do cliente OAuth (clientId) não é compatível com vinculações da federação de identidade de colaboradores e será rejeitado. Você precisa identificar o aplicativo usando o campo name.
  • Intervalo de duração da sessão: a duração da sessão precisa ser de no mínimo 1 hora (3600s) e no máximo 90 dias (7776000s).
  • Requisitos de parâmetro de configurações de sessão:
    • session_length_enabled: precisa ser definido como true.
    • session_length: duração necessária entre 1 hora (3600s) e 90 dias (7776000s).
    • session_reauth_method: precisa ser indefinido ou definido como LOGIN.
    • use_oidc_max_age: precisa ser indefinido ou definido como false.
    • max_inactivity: precisa ser indefinido (ou padrão 0s). Os tempos limite de sessão inativa não são compatíveis com vinculações restricted_project e restricted_client_application.
  • Provedores de identidade com suporte:
    • OIDC: requer um provedor OIDC configurado com o fluxo de código de autorização e o escopo offline_access para emitir tokens de atualização ou configurado com o provisionamento do SCIM.
    • SAML 2.0: requer o provisionamento do SCIM ativado no provedor do pool de força de trabalho.
  • Limite de inatividade do atributo: um limite de inatividade fixo de 24 horas é aplicado. Se Google Cloud não for possível atualizar os atributos do usuário do IdP em 24 horas, a sessão será invalidada e o usuário precisará se autenticar novamente.
  • Restrições do Access Context Manager:
    • Vinculação organizacional única: as vinculações de duração estendida da sessão para pools de força de trabalho precisam segmentar o principal "todos os pools de força de trabalho" da organização (principalSet://cloudresourcemanager.googleapis.com/organizations/{ORG_ID}/type/WorkforcePool). Como esse identificador principal federado se aplica a toda a organização em todos os pools de força de trabalho, apenas uma vinculação desse tipo pode existir por organização. Para configurar sessões estendidas para vários projetos do Looker (Google Cloud Core), o app Gemini Enterprise para dispositivos móveis ou uma combinação dos dois, inclua vários blocos de escopo restricted_project e restricted_client_application na lista scopedAccessSettings da vinculação única.
    • Os níveis de acesso (access_levels, dry_run_access_levels) não são compatíveis com vinculações de pool de força de trabalho.
    • O sessionSettings de nível superior diretamente no GcpUserAccessBinding não é compatível com vinculações de pool de força de trabalho. As configurações precisam ser definidas em scopedAccessSettings.activeSettings.sessionSettings.

Configurar o provedor do pool de força de trabalho

Para permitir a duração estendida da sessão, o provedor do pool de força de trabalho precisa ser configurado para oferecer suporte à atualização de atributos em segundo plano. É possível configurar o provedor para usar o protocolo OIDC ou SAML.

Configurar um provedor OIDC

A atualização de atributos em segundo plano para provedores OIDC pode ser processada usando tokens de atualização (escopo offline_access) ou provisionamento do SCIM. Se você estiver usando a atualização de atributos baseada em token:

  1. No IdP externo, configure um aplicativo OIDC com o fluxo de código de autorização e ative o acesso off-line para que um token de atualização seja retornado.
  2. Em Google Cloud, adicione offline_access aos escopos extras no provedor do pool de força de trabalho do OIDC.

O acesso off-line precisa ser configurado em todos os pools de identidade de colaboradores na sua Google Cloud organização para que a política de duração estendida da sessão tenha o efeito desejado.

gcloud

Se o provedor já tiver escopos extras, inclua-os com offline_access para que não sejam substituídos:

gcloud iam workforce-pools providers update-oidc PROVIDER_ID \
    --workforce-pool=WORKFORCE_POOL_NAME \
    --location=global \
    --web-sso-additional-scopes="offline_access[,EXISTING_ADDITIONAL_SCOPES]"

Substitua:

  • PROVIDER_ID: o nome do provedor do pool de identidade de colaboradores.
  • WORKFORCE_POOL_NAME: o nome do pool de identidade de colaboradores.
  • EXISTING_ADDITIONAL_SCOPES: todos os escopos extras separados por vírgula configurados anteriormente no provedor. Se você não tiver escopos extras, omita esse parâmetro.

API REST

Envie uma solicitação PATCH para atualizar o provedor. Inclua todos os escopos extras com offline_access:

PATCH https://iam.googleapis.com/v1/locations/global/workforcePools/WORKFORCE_POOL_NAME/providers/PROVIDER_ID?updateMask=oidc.webSsoConfig.additionalScopes

Corpo da solicitação:

{
  "oidc": {
    "webSsoConfig": {
      "additionalScopes": [
        "offline_access"
      ]
    }
  }
}

Substitua:

  • WORKFORCE_POOL_NAME: o nome do pool de identidade de colaboradores.
  • PROVIDER_ID: o ID do provedor do pool de identidade de colaboradores.

Configurar um provedor SAML

Para provedores SAML, a atualização de atributos em segundo plano requer o provisionamento do SCIM:

  1. Configure um locatário do SCIM para o provedor do pool de força de trabalho.
  2. Configure o provisionamento de usuários e grupos do provedor de identidade SAML para o endpoint do SCIM.

Para instruções detalhadas, consulte Provisionamento do SCIM para a federação de identidade de colaboradores.


Exemplo de configuração de política para o Looker (Google Cloud Core)

Crie um recurso GcpUserAccessBinding que atribua a política de duração estendida da sessão ao pool de força de trabalho da sua organização, definindo o escopo da política para o projeto que hospeda a instância do Looker (Google Cloud Core).

gcloud

Defina a política em um arquivo YAML chamado esl-binding.yaml:

scopedAccessSettings:
- scope:
    clientScope:
      restrictedProject:
        name: projects/PROJECT_NUMBER
  activeSettings:
    sessionSettings:
      sessionLength: 7776000s
      sessionLengthEnabled: true
      sessionReauthMethod: LOGIN

Crie a vinculação de acesso:

gcloud access-context-manager cloud-bindings create \
    --organization=ORG_ID \
    --federated-principal="principalSet://cloudresourcemanager.googleapis.com/organizations/ORG_ID/type/WorkforcePool" \
    --binding-file="esl-binding.yaml"

Substitua:

  • ORG_ID: o Google Cloud ID da organização (por exemplo, 123456789012).
  • PROJECT_NUMBER: o número do projeto que é proprietário da instância de destino do Looker (Google Cloud Core) (por exemplo, 987654321098). Apenas os aplicativos do Looker (Google Cloud Core) pertencentes a esse projeto recebem a duração estendida da sessão.
  • sessionLength: a duração da sessão em segundos seguida por s. Por exemplo, 7776000s especifica uma sessão de 90 dias.
  • sessionLengthEnabled: definido como true.
  • sessionReauthMethod: definido como LOGIN (ou deixado indefinido).

API REST

Envie uma solicitação POST para a API Access Context Manager:

POST https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings

Corpo da solicitação JSON:

{
  "principal": {
    "federatedPrincipal": "principalSet://cloudresourcemanager.googleapis.com/organizations/ORG_ID/type/WorkforcePool"
  },
  "scopedAccessSettings": [
    {
      "scope": {
        "clientScope": {
          "restrictedProject": {
            "name": "projects/PROJECT_NUMBER"
          }
        }
      },
      "activeSettings": {
        "sessionSettings": {
          "sessionLength": "7776000s",
          "sessionLengthEnabled": true,
          "sessionReauthMethod": "LOGIN"
        }
      }
    }
  ]
}

Substitua:

  • ORG_ID: o Google Cloud ID da organização (por exemplo, 123456789012).
  • PROJECT_NUMBER: o número do projeto que é proprietário da instância de destino do Looker (Google Cloud Core) (por exemplo, 987654321098). Apenas os aplicativos do Looker (Google Cloud Core) pertencentes a esse projeto recebem a duração estendida da sessão.
  • sessionLength: a duração da sessão em segundos seguida por s. Por exemplo, 7776000s especifica uma sessão de 90 dias.
  • sessionLengthEnabled: definido como true.
  • sessionReauthMethod: definido como LOGIN (ou deixado indefinido).

Exemplo de configuração de política para o app Gemini Enterprise para dispositivos móveis

Crie um recurso GcpUserAccessBinding que atribua a política de duração estendida da sessão ao pool de força de trabalho da sua organização, definindo o escopo da política para o app Gemini Enterprise para dispositivos móveis usando o escopo restricted_client_application. Você precisa identificar os aplicativos usando os nomes de exibição canônicos exatos: "Gemini Enterprise mobile Android" e "Gemini Enterprise mobile IOS".

gcloud

Defina a política em um arquivo YAML chamado esl-app-binding.yaml:

scopedAccessSettings:
- scope:
    clientScope:
      restrictedClientApplication:
        name: "Gemini Enterprise mobile Android"
  activeSettings:
    sessionSettings:
      sessionLength: 7776000s
      sessionLengthEnabled: true
      sessionReauthMethod: LOGIN
- scope:
    clientScope:
      restrictedClientApplication:
        name: "Gemini Enterprise mobile IOS"
  activeSettings:
    sessionSettings:
      sessionLength: 7776000s
      sessionLengthEnabled: true
      sessionReauthMethod: LOGIN

Crie a vinculação de acesso:

gcloud access-context-manager cloud-bindings create \
    --organization=ORG_ID \
    --federated-principal="principalSet://cloudresourcemanager.googleapis.com/organizations/ORG_ID/type/WorkforcePool" \
    --binding-file="esl-app-binding.yaml"

Substitua:

  • ORG_ID: o Google Cloud ID da organização (por exemplo, 123456789012).
  • name: precisa ser "Gemini Enterprise mobile Android" ou "Gemini Enterprise mobile IOS". A identificação de aplicativos por ID do cliente OAuth (clientId) não é compatível com pools de força de trabalho.
  • sessionLength: a duração da sessão em segundos seguida por s (entre 3600s e 7776000s).
  • sessionLengthEnabled: definido como true.
  • sessionReauthMethod: definido como LOGIN (ou deixado indefinido).

API REST

Envie uma solicitação POST para a API Access Context Manager:

POST https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings

Corpo da solicitação JSON:

{
  "principal": {
    "federatedPrincipal": "principalSet://cloudresourcemanager.googleapis.com/organizations/ORG_ID/type/WorkforcePool"
  },
  "scopedAccessSettings": [
    {
      "scope": {
        "clientScope": {
          "restrictedClientApplication": {
            "name": "Gemini Enterprise mobile Android"
          }
        }
      },
      "activeSettings": {
        "sessionSettings": {
          "sessionLength": "7776000s",
          "sessionLengthEnabled": true,
          "sessionReauthMethod": "LOGIN"
        }
      }
    },
    {
      "scope": {
        "clientScope": {
          "restrictedClientApplication": {
            "name": "Gemini Enterprise mobile IOS"
          }
        }
      },
      "activeSettings": {
        "sessionSettings": {
          "sessionLength": "7776000s",
          "sessionLengthEnabled": true,
          "sessionReauthMethod": "LOGIN"
        }
      }
    }
  ]
}

Substitua:

  • ORG_ID: o Google Cloud ID da organização (por exemplo, 123456789012).
  • name: precisa ser "Gemini Enterprise mobile Android" ou "Gemini Enterprise mobile IOS". A identificação de aplicativos por ID do cliente OAuth (clientId) não é compatível com pools de força de trabalho.
  • sessionLength: a duração da sessão em segundos seguida por s. Por exemplo, 7776000s especifica uma sessão de 90 dias.
  • sessionLengthEnabled: definido como true.
  • sessionReauthMethod: definido como LOGIN (ou deixado indefinido).

Visualizar e listar vinculações

Como a vinculação se aplica a todos os pools de força de trabalho na organização, há no máximo uma vinculação de acesso por organização.

Listar vinculações ativas

Para listar a vinculação de acesso ao pool de força de trabalho na sua organização, use o filtro principal:federatedPrincipal:

gcloud

gcloud access-context-manager cloud-bindings list \
    --organization=ORG_ID \
    --filter="principal:federatedPrincipal"

API REST

GET https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings?filter=principal:federated_principal

Conferir detalhes da vinculação

Para conferir os detalhes de uma vinculação de acesso ao pool de força de trabalho específico:

gcloud

gcloud access-context-manager cloud-bindings describe \
    --binding=BINDING_NAME

Substitua BINDING_NAME pelo nome completo do recurso da vinculação (por exemplo, organizations/123456789012/gcpUserAccessBindings/b1234567890).

API REST

GET https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings/BINDING_ID

Substitua:

  • ORG_ID: o Google Cloud ID da organização (por exemplo, 123456789012).
  • BINDING_ID: o ID da vinculação de acesso (por exemplo, b1234567890).

Atualizar uma vinculação de acesso

É possível atualizar uma vinculação de acesso ao pool de força de trabalho para modificar as durações da sessão, adicionar novos escopos de projeto ou aplicativo ou remover escopos atuais.

gcloud

  1. Defina a política atualizada em um arquivo YAML chamado updated-esl-binding.yaml:

    scopedAccessSettings:
    - scope:
        clientScope:
          restrictedProject:
            name: projects/PROJECT_NUMBER
      activeSettings:
        sessionSettings:
          sessionLength: 2592000s
          sessionLengthEnabled: true
          sessionReauthMethod: LOGIN
    
  2. Aplique a política atualizada:

    • Substituir configurações de acesso com escopo: para substituir os escopos atuais pela configuração definida em updated-esl-binding.yaml:
    gcloud access-context-manager cloud-bindings update \
        --binding=BINDING_NAME \
        --binding-file="updated-esl-binding.yaml"
    
    • Anexar às configurações atuais: para anexar os escopos definidos em updated-esl-binding.yaml aos escopos atuais da vinculação sem substituí-los, transmita a flag --append:
    gcloud access-context-manager cloud-bindings update \
        --binding=BINDING_NAME \
        --binding-file="updated-esl-binding.yaml" \
        --append
    

Substitua: * BINDING_NAME: o nome completo do recurso da vinculação (por exemplo, organizations/123456789012/gcpUserAccessBindings/b1234567890). * PROJECT_NUMBER: o número do projeto que é proprietário da instância de destino do Looker (Google Cloud Core). * sessionLength: a duração atualizada da sessão (por exemplo, 2592000s para 30 dias).

API REST

Envie uma solicitação PATCH para atualizar a vinculação.

  • Substituir configurações de acesso com escopo: para substituir os escopos atuais:
PATCH https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings/BINDING_ID?updateMask=scopedAccessSettings
  • Adicionar ao final das configurações atuais: para adicionar novos escopos sem substituir os atuais, defina o parâmetro de consulta append=true:
PATCH https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings/BINDING_ID?updateMask=scopedAccessSettings&append=true

Corpo da solicitação JSON:

{
"scopedAccessSettings": [
  {
    "scope": {
      "clientScope": {
        "restrictedProject": {
          "name": "projects/PROJECT_NUMBER"
        }
      }
    },
    "activeSettings": {
      "sessionSettings": {
        "sessionLength": "2592000s",
        "sessionLengthEnabled": true,
        "sessionReauthMethod": "LOGIN"
      }
    }
  }
]
}

Substitua: * ORG_ID: o ID da sua Google Cloud organização (por exemplo, 123456789012). * BINDING_ID: o ID da vinculação de acesso (por exemplo, b1234567890). * PROJECT_NUMBER: o número do projeto que é proprietário da instância de destino do Looker (Google Cloud Core). * sessionLength: a duração atualizada da sessão (por exemplo, 2592000s para 30 dias).


Excluir uma vinculação de acesso

Se você excluir a vinculação de acesso ao pool de força de trabalho, a duração estendida da sessão será desativada para todos os pools de força de trabalho na sua organização.

gcloud

gcloud access-context-manager cloud-bindings delete \
    --binding=BINDING_NAME

Substitua BINDING_NAME pelo nome completo do recurso da vinculação.

API REST

Envie uma solicitação DELETE para remover a vinculação:

DELETE https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings/BINDING_ID

Substitua:

  • ORG_ID: Google Cloud ID da organização.
  • BINDING_ID: o ID da vinculação de acesso a ser excluída.