Aplique políticas a grupos de utilizadores através de vinculações de acesso

Pode usar associações de acesso para controlar as aplicações e os recursos aos quais os seus grupos de utilizadores podem aceder. Uma associação de acesso especifica como aplicar níveis de acesso e controlos de sessão a um grupo de utilizadores. Pode aplicar o mesmo nível de acesso e controlo de sessão a todas as aplicações ou definir comportamentos específicos para aplicações individuais.

Para garantir que configurou tudo corretamente, pode testar as suas políticas antes de as aplicar.

Quando trabalhar com associações de acesso, tenha em atenção o seguinte comportamento:

  • Um grupo de utilizadores só pode ter uma associação de acesso.
  • Se um utilizador pertencer a vários grupos, o utilizador recebe acesso se alguma política o permitir (OR e não AND).
  • Para os controlos de sessão, apenas se aplica a associação de acesso criada mais recentemente.

Use uma única configuração para todas as aplicações

Este método aplica o mesmo nível de acesso e controlo de sessão a todas as aplicações acedidas por um grupo de utilizadores.

Recomendamos que teste a sua política com uma simulação ou a aplique a um pequeno grupo de teste antes de a implementar em produção.

gcloud

Crie a associação de acesso.

gcloud access-context-manager cloud-bindings create \
     --group-key GROUP_ID
     --organization ORG_ID
     --level DEFAULT_ACCESS_LEVEL
  [  --session-length=DEFAULT_SESSION_LENGTH                ]
  [  --session-reauth-method=DEFAULT_SESSION_REAUTH_METHOD  ]

Substitua o seguinte:

  • GROUP_ID: o ID do grupo. Se não tiver o ID do grupo disponível, pode obtê-lo através do método get no recurso do grupo.
  • ORG_ID: o ID da sua organização.
  • DEFAULT_ACCESS_LEVEL: o nome do nível de acesso opcional, que assume a forma accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME. Substitua POLICY_ID pelo ID da política de acesso e ACCESS_LEVEL_NAME pelo nome do nível de acesso.
  • DEFAULT_SESSION_LENGTH: a duração opcional da sessão no formato de duração ISO 8601, como 30m para 30 minutos ou 2h para duas horas.
  • DEFAULT_SESSION_REAUTH_METHOD: o método opcional para desafiar os utilizadores a validarem novamente a respetiva identidade, que tem de ser um dos seguintes:
    • LOGIN: aplique o início de sessão padrão, que pode incluir a MFA ou outros fatores definidos pelo Workspace.
    • PASSWORD: só requer uma palavra-passe, mesmo que outros fatores estejam definidos. Se as palavras-passe forem geridas através de um IdP externo, os utilizadores são redirecionados para o IdP. Se a sessão do IdP estiver ativa, os utilizadores são autenticados novamente de forma implícita. Se o IdP não estiver ativo, os utilizadores têm de iniciar sessão através do IdP.
    • SECURITY_KEY: exigir uma chave de segurança de hardware.

API

  1. Crie um corpo JSON:

    {
      "groupKey": "GROUP_ID",
      "accessLevels": [
        "DEFAULT_ACCESS_LEVEL"
      ],
      // optional:
      "sessionSettings": {
        "sessionLength": "DEFAULT_SESSION_LENGTH",
        "sessionReauthMethod": "DEFAULT_SESSION_REAUTH_METHOD"
      }
    }
    

    Substitua o seguinte:

    • GROUP_ID: o ID do grupo. Se não tiver o ID do grupo disponível, pode obtê-lo através do método get no recurso do grupo.
    • DEFAULT_ACCESS_LEVEL: o nome do nível de acesso opcional, que assume a forma accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME. Substitua POLICY_ID pelo ID da política de acesso e ACCESS_LEVEL_NAME pelo nome do nível de acesso.
    • DEFAULT_SESSION_LENGTH: a duração opcional da sessão no formato de duração ISO 8601, como 30m para 30 minutos ou 2h para duas horas.
    • DEFAULT_SESSION_REAUTH_METHOD: o método opcional para desafiar os utilizadores a validarem novamente a respetiva identidade, que tem de ser um dos seguintes:
      • LOGIN: aplique o início de sessão padrão, que pode incluir a MFA ou outros fatores definidos pelo Workspace.
      • PASSWORD: só requer uma palavra-passe, mesmo que outros fatores estejam definidos. Se as palavras-passe forem geridas através de um IdP externo, os utilizadores são redirecionados para o IdP. Se a sessão do IdP estiver ativa, os utilizadores são autenticados novamente de forma implícita. Se o IdP não estiver ativo, os utilizadores têm de iniciar sessão através do IdP.
      • SECURITY_KEY: exigir uma chave de segurança de hardware.
  2. Envie o pedido POST:

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

    ORG_ID É o ID da organização que usou para criar a função Administrador de associações de acesso à nuvem. Se a propriedade access-context-manager/organization não tiver sido definida, substitua ORG_ID na flag --organization opcional pelo ID da organização que usou quando criou a função de administrador de associação de acesso à nuvem.

Se for bem-sucedido, deve receber uma representação do objeto JSON. Se existir um problema, recebe uma mensagem de erro.

Defina configurações para aplicações específicas

Este método permite-lhe aplicar diferentes níveis de acesso e controlos de sessão a diferentes aplicações. Também pode definir regras predefinidas para aplicações que não tenham configurações específicas.

Pode especificar aplicações em associações de acesso através do respetivo ID de cliente OAuth. Pode especificar as seguintes aplicações através do respetivo nome:

Este método é útil quando quer fazer o seguinte:

  • Aplicar políticas apenas a determinadas aplicações.
  • Criar uma política geral, mas excluir algumas aplicações da mesma.

gcloud

  1. Crie um ficheiro de associação no formato YAML com uma lista de entradas de âmbito na lista scopedAccessSettings. Para cada aplicação que quer mapear para um nível de acesso específico, inclua uma entrada clientScope.

    scopedAccessSettings:
    - scope:
        clientScope:
          restrictedClientApplication:
            clientId: CLIENT_ID
      activeSettings:
        accessLevels:
        - ACCESS_LEVEL_A
        sessionSettings:
        - sessionLength: SESSION_LENGTH
          sessionReauthMethod: SESSION_REAUTH_METHOD
          sessionLengthEnabled: true
    - scope:
        clientScope:
          restrictedClientApplication:
            #
            # because this app is specified by `name`,
            # it won't work with sessionSettings.
            #
            # if you add sessionSettings, make sure to
            # replace the `name` key with `clientId`,
            # and use the OAuth client ID as the value.
            #
            name: CLIENT_NAME
      activeSettings:
        accessLevels:
        - ACCESS_LEVEL_B
    

    Substitua o seguinte:

    • CLIENT_ID: o ID de cliente OAuth. Tem de usar clientId quando uma aplicação contém sessionSettings.
    • ACCESS_LEVEL_A: um nome de nível de acesso no formato accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.
    • SESSION_LENGTH: a duração da sessão no formato de duração ISO 8601, como 30m para 30 minutos ou 2h para duas horas.
    • SESSION_REAUTH_METHOD: o método opcional para desafiar os utilizadores a validarem novamente a respetiva identidade, que tem de ser um dos seguintes:

      • LOGIN: aplique o início de sessão padrão, que pode incluir a MFA ou outros fatores definidos pelo Workspace.
      • PASSWORD: Exigir apenas uma palavra-passe, mesmo que outros fatores estejam definidos. Se as palavras-passe forem geridas através de um IdP externo, os utilizadores são redirecionados para o IdP. Se a sessão do IdP estiver ativa, os utilizadores são autenticados novamente de forma implícita. Se o IdP não estiver ativo, os utilizadores têm de iniciar sessão através do IdP.
      • SECURITY_KEY: exigir uma chave de segurança de hardware.
    • CLIENT_NAME: o nome do cliente. Se a aplicação contiver sessionSettings, não pode usar o nome do cliente. Em alternativa, use o ID de cliente OAuth.

    • ACCESS_LEVEL_B: um nome de nível de acesso no formato accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.

    Para definir um nível de acesso predefinido para aplicações não definidas no ficheiro YAML, use o argumento --level. O ficheiro YAML só suporta definições específicas da aplicação (scopedAccessSettings).

  2. Crie a associação de acesso.

    gcloud access-context-manager cloud-bindings create
        --organization ORG_ID
        --group-key GROUP_ID
        --binding-file BINDING_FILE_PATH
      [  --level DEFAULT_ACCESS_LEVEL ]
      [  --session-length=DEFAULT_SESSION_LENGTH                ]
      [  --session-reauth-method=DEFAULT_SESSION_REAUTH_METHOD  ]
    

    Substitua o seguinte:

    • ORG_ID: o ID da sua organização.
    • GROUP_ID: o ID do grupo. Se não tiver o ID do grupo disponível, pode obtê-lo através do método get no recurso do grupo.
    • BINDING_FILE_PATH: o caminho para o ficheiro YAML que contém o esquema de associação de acesso. O ficheiro de associação só suporta scopedAccessSettings.
    • DEFAULT_ACCESS_LEVEL: o nome do nível de acesso opcional, que assume a forma accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME. Substitua POLICY_ID pelo ID da política de acesso e ACCESS_LEVEL_NAME pelo nome do nível de acesso.
    • DEFAULT_SESSION_LENGTH: a duração opcional da sessão no formato de duração ISO 8601, como 30m para 30 minutos ou 2h para duas horas.
    • DEFAULT_SESSION_REAUTH_METHOD: o método opcional para desafiar os utilizadores a validarem novamente a respetiva identidade, que tem de ser um dos seguintes:
      • LOGIN: aplique o início de sessão padrão, que pode incluir a MFA ou outros fatores definidos pelo Workspace.
      • PASSWORD: só requer uma palavra-passe, mesmo que outros fatores estejam definidos. Se as palavras-passe forem geridas através de um IdP externo, os utilizadores são redirecionados para o IdP. Se a sessão do IdP estiver ativa, os utilizadores são autenticados novamente de forma implícita. Se o IdP não estiver ativo, os utilizadores têm de iniciar sessão através do IdP.
      • SECURITY_KEY: exigir uma chave de segurança de hardware.

Como funcionam em conjunto os argumentos --level e --binding-file

  • Se usar apenas --binding-file, apenas as aplicações no ficheiro têm as políticas aplicadas.
  • Se usar apenas --level, o nível de acesso aplica-se a todas as aplicações.
  • Se usar ambas, as regras são combinadas. O valor --level aplica-se a todas as aplicações, enquanto as políticas no ficheiro YAML especificadas por --binding-file aplicam-se apenas às aplicações conforme definido no ficheiro.

Trabalhar com controlos de sessão

  • Para definir controlos de sessão predefinidos para todas as aplicações, use --session-length e --session-reauth-method.
  • Se também definir controlos de sessão no ficheiro YAML, esses controlos de sessão substituem as predefinições para essas aplicações específicas.
  • Tem de usar o --session-length e o --session-reauth-method em conjunto.

API

Crie um corpo JSON:

{
  "groupKey": "GROUP_ID",
   //
   // Optional; if specified, all applications that aren't defined in
   // scopedAccessSettings have these access levels applied.
   //
   // If more than one access level is specified, the user is
   // granted access if any one resolves to TRUE (OR logic, not AND).
   //
   // If you omit this key entirely, then no policy enforcement is
   // applied by default.
   //
  "accessLevels": [
    "DEFAULT_ACCESS_LEVEL"
  ],
  "scopedAccessSettings": [
    {
      "scope": {
        "clientScope": {
          "restrictedClientApplication": {
            "clientId": "CLIENT_ID"
          }
        }
      },
      "activeSettings": {
        "accessLevels": [
          "ACCESS_LEVEL_A"
        ],
        "sessionSettings": [
          {
            "sessionLength": "SESSION_LENGTH",
            "sessionReauthMethod": "SESSION_REAUTH_METHOD",
            "sessionLengthEnabled": true
          }
        ]
      }
    },
    {
      "scope": {
        "clientScope": {
          "restrictedClientApplication": {
            "name": "CLIENT_NAME"
          }
        },
        "activeSettings": {
          "accessLevels": [
            "ACCESS_LEVEL_B"
          ]
        }
      }
    }
  ]
}

Substitua o seguinte:

  • GROUP_ID: o ID do grupo. Se não tiver o ID do grupo disponível, pode obtê-lo através do método get no recurso do grupo.
  • DEFAULT_ACCESS_LEVEL: o nome do nível de acesso opcional, que assume a forma accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME. Substitua POLICY_ID pelo ID da política de acesso e ACCESS_LEVEL_NAME pelo nome do nível de acesso.
  • CLIENT_ID: o ID de cliente OAuth. Tem de usar clientId quando uma aplicação contém sessionSettings.
  • ACCESS_LEVEL_A: um nome de nível de acesso no formato accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.
  • SESSION_LENGTH: a duração da sessão no formato de duração ISO 8601, como 30m para 30 minutos ou 2h para duas horas.
  • SESSION_REAUTH_METHOD: O método opcional para desafiar os utilizadores a validarem novamente a respetiva identidade, que tem de ser um dos seguintes:

    • LOGIN: aplique o início de sessão padrão, que pode incluir a MFA ou outros fatores definidos pelo Workspace.
    • PASSWORD: Exigir apenas uma palavra-passe, mesmo que outros fatores estejam definidos. Se as palavras-passe forem geridas através de um IdP externo, os utilizadores são redirecionados para o IdP. Se a sessão do IdP estiver ativa, os utilizadores são autenticados novamente de forma implícita. Se o IdP não estiver ativo, os utilizadores têm de iniciar sessão através do IdP.
    • SECURITY_KEY: exigir uma chave de segurança de hardware.
  • CLIENT_NAME: o nome do cliente. Se a aplicação contiver sessionSettings, não pode usar o nome do cliente. Em alternativa, use o ID de cliente OAuth.

  • ACCESS_LEVEL_B: um nome de nível de acesso no formato accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.

Envie o pedido POST:

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

ORG_ID é o ID da organização que usou para criar a função Administrador de associações de acesso à nuvem. Se a propriedade access-context-manager/organization não tiver sido definida, substitua ORG_ID na flag --organization opcional pelo ID da organização que usou quando criou a função de administrador de associação de acesso à nuvem.

Se for bem-sucedido, deve receber uma representação do objeto JSON ou uma mensagem de erro se tiver ocorrido um problema.

Use níveis de acesso de teste para simular a aplicação

Os níveis de acesso de teste permitem-lhe testar as suas políticas de acesso sem as aplicar efetivamente. Isto ajuda a compreender o impacto de uma política antes de entrar em vigor. Pode ver os registos do teste de execução para saber o que teria acontecido se a política estivesse ativa.

Só é possível usar níveis de acesso no modo de teste. Os controlos de sessão não estão disponíveis no modo de teste.

Crie uma associação de execução de ensaio

Pode definir níveis de acesso de teste juntamente com níveis de acesso normais na mesma associação ou usar associações separadas para testes.

gcloud

  1. Configure as definições de acesso.

    scopedAccessSettings:
    - scope:
        clientScope:
          restrictedClientApplication:
            name: CLIENT_NAME
      activeSettings:
        accessLevels:
        - ACCESS_LEVEL_A
      dryRunSettings:
        accessLevels:
        - DRY_RUN_ACCESS_LEVEL_1
    - scope:
        clientScope:
          restrictedClientApplication:
            clientId: CLIENT_ID
        dryRunSettings:
          accessLevels:
          - DRY_RUN_ACCESS_LEVEL_2
    

    Substitua o seguinte:

    • CLIENT_NAME: o nome do cliente. Se a aplicação contiver sessionSettings, não pode usar o nome do cliente. Em alternativa, use o ID de cliente OAuth.
    • ACCESS_LEVEL_A: um nome de nível de acesso no formato accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.
    • DRY_RUN_ACCESS_LEVEL_1: um nome de nível de acesso no formato accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.
    • CLIENT_ID: o ID de cliente OAuth. Tem de usar clientId quando uma aplicação contém sessionSettings.
    • DRY_RUN_ACCESS_LEVEL_2: um nome de nível de acesso no formato accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.
  2. Crie a associação de acesso.

    gcloud access-context-manager cloud-bindings create
      --organization ORG_ID
      --group-key GROUP_ID
      --binding-file BINDING_FILE_PATH
      --dry-run-level DEFAULT_DRY_RUN_ACCESS_LEVEL
    

    Substitua o seguinte:

    • ORG_ID: o ID da sua organização.
    • GROUP_ID: o ID do grupo. Se não tiver o ID do grupo disponível, pode obtê-lo através do método get no recurso do grupo.
    • BINDING_FILE_PATH: o caminho para o ficheiro YAML que contém o esquema de associação de acesso. O ficheiro de associação só suporta scopedAccessSettings.
    • DEFAULT_DRY_RUN_ACCESS_LEVEL_2: um nome de nível de acesso opcional no formato accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.

    Inclua esta flag para aplicar o nível de acesso de teste especificado a todas as aplicações por predefinição se não forem especificadas no YAML.

API

  1. Crie um corpo JSON:

    {
      "group_key": "GROUP_ID",
       //
       // Optional; if specified, all applications that aren't defined in
       // scopedAccessSettings have these access levels applied.
       //
       // If more than one access level is specified, the user is
       // granted access if any one resolves to TRUE (OR logic, not AND).
       //
       // If you omit this key entirely, then no policy enforcement is
       // be applied by default.
       //
      "access_levels": [
        "DEFAULT_ACCESS_LEVEL"
      ],
       //
       // Optional; if specified, all applications that aren't defined in
       // scopedAccessSettings will have these dry run access levels applied.
       //
      "dry_run_access_levels": [
        "DEFAULT_DRY_RUN_ACCESS_LEVEL"
      ],
      "scoped_access_settings": [
        {
          "scope": {
            "client_scope": {
              "restricted_client_application": {
                "name": "CLIENT_NAME"
              }
            }
          },
          "active_settings": {
            "access_levels": [
              "ACCESS_LEVEL_A"
            ]
          },
          "dry_run_settings": {
            "access_levels": [
              "DRY_RUN_ACCESS_LEVEL_1"
            ]
          }
        },
        {
          "scope": {
            "client_scope": {
              "restricted_client_application": {
                "client_id": "CLIENT_ID"
              }
            }
          },
          "active_settings": {
            "access_levels": [
              "DRY_RUN_ACCESS_LEVEL_2"
            ]
          }
        }
      ]
    }
    

    Substitua o seguinte:

    • GROUP_ID: o ID do grupo. Se não tiver o ID do grupo disponível, pode obtê-lo através do método get no recurso do grupo.
    • DEFAULT_ACCESS_LEVEL: o nome do nível de acesso opcional, que assume a forma accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME. Substitua POLICY_ID pelo ID da política de acesso e ACCESS_LEVEL_NAME pelo nome do nível de acesso.
    • DEFAULT_DRY_RUN_ACCESS_LEVEL: um nome de nível de acesso opcional no formato accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.
    • CLIENT_NAME: o nome do cliente. Se a aplicação contiver sessionSettings, não pode usar o nome do cliente. Em alternativa, use o ID de cliente OAuth.
    • ACCESS_LEVEL_A: um nome de nível de acesso no formato accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.
    • DRY_RUN_ACCESS_LEVEL_1: um nome de nível de acesso no formato accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.
    • CLIENT_ID: o ID de cliente OAuth. Tem de usar client_id quando uma aplicação contém sessionSettings.
    • DRY_RUN_ACCESS_LEVEL_2: um nome de nível de acesso no formato accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.
  2. Envie o pedido POST:

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

    ORG_ID É o ID da organização que usou para criar a função Administrador de associações de acesso à nuvem. Se a propriedade access-context-manager/organization não tiver sido definida, substitua ORG_ID na flag --organization opcional pelo ID da organização que usou quando criou a função de administrador de associação de acesso à nuvem.

    Se for bem-sucedido, deve receber uma representação do objeto JSON. Se existir um problema, recebe uma mensagem de erro.

Veja os registos do teste de execução

Depois de configurar um teste de execução, pode verificar os registos para ver que tentativas de acesso teriam sido recusadas.

A tabela seguinte lista os campos de registo que pode usar para criar e executar a consulta para obter os registos:

Nome do campo Descrição
protoPayload.authenticationInfo.principalEmail ID do email do principal para o qual o acesso é recusado.
protoPayload.metadata.deniedApplications Nome da aplicação para a qual o acesso é negado.
protoPayload.metadata.evaluationResult O resultado da avaliação da política de acesso ativa. Valores possíveis: GRANTED ou DENIED.
protoPayload.metadata.appliedAccessLevels Os níveis de acesso aplicados exigidos pela política de acesso ativa.
protoPayload.metadata.appliedDryRunAccessLevels Os níveis de acesso aplicados exigidos pela política de acesso de teste.
protoPayload.metadata.dryRunEvaluationResult O resultado da avaliação da política de acesso de teste de execução, que indica a ação pretendida quando a política de acesso é aplicada. Valores possíveis: GRANTED ou DENIED.

Para ver detalhes sobre como criar uma consulta para registos, consulte o artigo Linguagem de consulta de registo.