Policy

Uma política de gerenciamento de identidade e acesso (IAM, na sigla em inglês), que especifica controles de acesso para recursos do Google Cloud.

Um Policy é uma coleção de bindings. Uma binding vincula um ou mais members, ou principais, a um único role. Os membros podem ser contas de usuário, contas de serviço, Grupos do Google e domínios, como o G Suite. Um role é uma lista nomeada de permissões. Cada role pode ser um papel pré-definido do IAM ou um papel personalizado criado pelo usuário.

Para determinados tipos de recursos do Google Cloud, uma binding também pode especificar uma condition, que é uma expressão lógica que permitirá acesso a um recurso somente se a expressão for avaliada como true. Uma condição pode adicionar restrições com base nos atributos da solicitação, do recurso ou de ambos. Para saber quais recursos são compatíveis com as condições nas políticas do IAM, consulte a documentação do IAM.

Exemplo de JSON:

    {
      "bindings": [
        {
          "role": "roles/resourcemanager.organizationAdmin",
          "members": [
            "user:mike@example.com",
            "group:admins@example.com",
            "domain:google.com",
            "serviceAccount:my-project-id@appspot.gserviceaccount.com"
          ]
        },
        {
          "role": "roles/resourcemanager.organizationViewer",
          "members": [
            "user:eve@example.com"
          ],
          "condition": {
            "title": "expirable access",
            "description": "Does not grant access after Sep 2020",
            "expression": "request.time < timestamp('2020-10-01T00:00:00.000Z')",
          }
        }
      ],
      "etag": "BwWWja0YfJA=",
      "version": 3
    }

Exemplo de YAML:

    bindings:
    - members:
      - user:mike@example.com
      - group:admins@example.com
      - domain:google.com
      - serviceAccount:my-project-id@appspot.gserviceaccount.com
      role: roles/resourcemanager.organizationAdmin
    - members:
      - user:eve@example.com
      role: roles/resourcemanager.organizationViewer
      condition:
        title: expirable access
        description: Does not grant access after Sep 2020
        expression: request.time < timestamp('2020-10-01T00:00:00.000Z')
    etag: BwWWja0YfJA=
    version: 3

Para uma descrição do IAM e dos recursos dele, consulte a documentação do IAM.

Representação JSON
{
  "version": integer,
  "bindings": [
    {
      object (Binding)
    }
  ],
  "auditConfigs": [
    {
      object (AuditConfig)
    }
  ],
  "etag": string
}
Campos
version

integer

Especifica o formato da política.

Os valores válidos são 0, 1 e 3. As solicitações que especificam um valor inválido são rejeitadas.

Qualquer operação que afete as vinculações condicionais de papel precisa especificar a versão 3. Esse requisito se aplica às seguintes operações:

  • Como conseguir uma política que inclua uma vinculação de papel condicional
  • Como adicionar uma vinculação de papel condicional a uma política
  • Como alterar uma vinculação de papel condicional em uma política
  • Como remover qualquer vinculação de papel (com ou sem uma condição) de uma política que inclua condições

Importante: se você usar as condições do IAM, precisará incluir o campo etag sempre que chamar setIamPolicy. Se você omitir esse campo, o IAM permitirá substituir uma política de versão 3 por uma política de versão 1, e todas as condições na política de versão 3 serão perdidas.

Se uma política não incluir nenhuma condição, as operações nessa política poderão especificar qualquer versão válida ou deixar o campo não definido.

Para saber quais recursos são compatíveis com as condições nas políticas do IAM, consulte a documentação do IAM.

bindings[]

object (Binding)

Associa uma lista de members ou principais a um role. Como alternativa, pode especificar um condition que determina como e quando o bindings é aplicado. Cada bindings precisa conter pelo menos um membro.

O bindings em uma Policy pode se referir a até 1.500 principais. até 250 desses principais podem ser grupos do Google. Cada ocorrência de um principal conta para esses limites. Por exemplo, se o bindings conceder 50 papéis diferentes a user:alice@example.com, e não a qualquer outro principal, será possível adicionar mais 1.450 principais ao bindings no Policy.

auditConfigs[]

object (AuditConfig)

Especifica a configuração do Cloud Audit Logging para esta política.

etag

string (bytes format)

etag é usado para otimização do controle de simultaneidade, para ajudar a evitar que atualizações simultâneas de uma política substituam-se mutuamente. É altamente recomendável que os sistemas usem etag no ciclo de leitura-modificação-gravação para fazer atualizações de política e evitar disputas. Um etag é retornado na resposta a getIamPolicy e ele é colocado na solicitação a setIamPolicy para garantir que a alteração seja aplicada à mesma versão da política.

Importante: se você usar as condições do IAM, precisará incluir o campo etag sempre que chamar setIamPolicy. Se você omitir esse campo, o IAM permitirá substituir uma política de versão 3 por uma política de versão 1, e todas as condições na política de versão 3 serão perdidas.

Uma string codificada em base64.

Vinculação

Associa members, ou principais, a um role.

Representação JSON
{
  "role": string,
  "members": [
    string
  ],
  "condition": {
    object (Expr)
  }
}
Campos
role

string

Papel atribuído à lista de members ou principais. Por exemplo, roles/viewer, roles/editor ou roles/owner.

Para uma visão geral dos papéis e permissões do IAM, consulte a documentação do IAM. Consulte aqui uma lista dos papéis predefinidos disponíveis.

members[]

string

Especifica as identidades que solicitam acesso a um recurso do Google Cloud. members pode ter os seguintes valores:

  • allUsers: um identificador especial que representa qualquer pessoa na Internet, com ou sem uma conta do Google.

  • allAuthenticatedUsers: um identificador especial que representa qualquer pessoa autenticada com uma Conta do Google ou uma conta de serviço. Não inclui identidades de provedores de identidade externos (IdPs) pela federação de identidade.

  • user:{emailid}: um endereço de e-mail que representa uma Conta do Google específica. Por exemplo, alice@example.com.

  • serviceAccount:{emailid}: um endereço de e-mail que representa uma conta de serviço do Google. Por exemplo, my-other-app@appspot.gserviceaccount.com.

  • serviceAccount:{projectid}.svc.id.goog[{namespace}/{kubernetes-sa}]: identificador de uma conta de serviço do Kubernetes. Por exemplo, my-project.svc.id.goog[my-namespace/my-kubernetes-sa].

  • group:{emailid}: um endereço de e-mail que representa um grupo do Google. Por exemplo, admins@example.com.

  • domain:{domain}: domínio do G Suite (principal) que representa todos os usuários dele. Por exemplo, google.com ou example.com.
  • principal://iam.googleapis.com/locations/global/workforcePools/{pool_id}/subject/{subject_attribute_value}: uma identidade única em um pool de identidades de força de trabalho.

  • principalSet://iam.googleapis.com/locations/global/workforcePools/{pool_id}/group/{groupId}: todas as identidades de força de trabalho em um grupo.

  • principalSet://iam.googleapis.com/locations/global/workforcePools/{pool_id}/attribute.{attribute_name}/{attribute_value}: todas as identidades com um valor de atributo específico.

  • principalSet://iam.googleapis.com/locations/global/workforcePools/{pool_id}/*: todas as identidades em um pool de Identidades de força de trabalho.

  • principal://iam.googleapis.com/projects/{projectNumber}/locations/global/workloadIdentityPools/{pool_id}/subject/{subject_attribute_value}: identidade única em um pool de identidades de carga de trabalho.

  • principalSet://iam.googleapis.com/projects/{projectNumber}/locations/global/workloadIdentityPools/{pool_id}/group/{groupId}: um grupo de pools de identidades de cargas de trabalho.

  • principalSet://iam.googleapis.com/projects/{projectNumber}/locations/global/workloadIdentityPools/{pool_id}/attribute.{attribute_name}/{attribute_value}: todas as identidades em um pool de Identidades de carga de trabalho com um determinado atributo.

  • principalSet://iam.googleapis.com/projects/{projectNumber}/locations/global/workloadIdentityPools/{pool_id}/*: todas as identidades em um pool de Identidades de carga de trabalho.

  • deleted:user:{emailid}?uid={uniqueid}: um endereço de e-mail (mais identificador exclusivo) que representa um usuário que foi excluído recentemente. Por exemplo, alice@example.com?uid=123456789012345678901. Se o usuário for recuperado, esse valor será revertido para user:{emailid} e o usuário recuperado manterá o papel na vinculação.

  • deleted:serviceAccount:{emailid}?uid={uniqueid}: um endereço de e-mail (além do identificador exclusivo) que representa uma conta de serviço que foi excluída recentemente. Por exemplo, my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901. Se a exclusão da conta de serviço for revertida, esse valor será revertido para serviceAccount:{emailid}, e a conta de serviço não excluída manterá o papel na vinculação.

  • deleted:group:{emailid}?uid={uniqueid}: um endereço de e-mail, mais um identificador exclusivo, que representa um grupo do Google que foi excluído recentemente. Por exemplo, admins@example.com?uid=123456789012345678901. Se o grupo for recuperado, esse valor será revertido para group:{emailid} e o grupo recuperado manterá o papel na vinculação.

  • deleted:principal://iam.googleapis.com/locations/global/workforcePools/{pool_id}/subject/{subject_attribute_value}: identidade excluída em um pool de identidades de força de trabalho Por exemplo, deleted:principal://iam.googleapis.com/locations/global/workforcePools/my-pool-id/subject/my-subject-attribute-value.

condition

object (Expr)

A condição que está associada a essa vinculação.

Se a condição for avaliada como true, essa vinculação se aplicará à solicitação atual.

Se a condição for avaliada como false, essa vinculação não se aplicará à solicitação atual. No entanto, uma vinculação de papel diferente pode conceder o mesmo papel a um ou mais principais da vinculação.

Para saber quais recursos são compatíveis com as condições nas políticas do IAM, consulte a documentação do IAM.

Expr

Representa uma expressão textual na sintaxe Common Expression Language (CEL). A CEL é uma linguagem de expressão semelhante a C. A sintaxe e a semântica do CEL estão documentadas em https://github.com/google/cel-spec.

Exemplo (comparação):

title: "Summary size limit"
description: "Determines if a summary is less than 100 chars"
expression: "document.summary.size() < 100"

Exemplo (igualdade):

title: "Requestor is owner"
description: "Determines if requestor is the document owner"
expression: "document.owner == request.auth.claims.email"

Exemplo (lógica):

title: "Public documents"
description: "Determine whether the document should be publicly visible"
expression: "document.type != 'private' && document.type != 'internal'"

Exemplo (manipulação de dados):

title: "Notification string"
description: "Create a notification string with a timestamp."
expression: "'New message received at ' + string(document.create_time)"

As variáveis e funções exatas que podem ser referenciadas em uma expressão são determinadas pelo serviço que a avalia. Consulte a documentação do serviço para mais informações.

Representação JSON
{
  "expression": string,
  "title": string,
  "description": string,
  "location": string
}
Campos
expression

string

Representação textual de uma expressão na sintaxe Common Expression Language.

title

string

Opcional. Título da expressão, ou seja, uma string curta que descreve sua finalidade. Isso pode ser usado, por exemplo, em IUs que permitam inserir a expressão.

description

string

Opcional. Descrição da expressão. Este é um texto mais longo que descreve a expressão, por exemplo, quando o cursor é passado sobre ela em uma IU.

location

string

Opcional. String que indica o local da expressão para o relatório de erros, por exemplo, um nome de arquivo e uma posição no arquivo.

AuditConfig

Especifica a configuração de auditoria para um serviço. A configuração determina quais tipos de permissão são registrados e quais identidades, se houver, estão isentas de geração de registros. Um AuditConfig precisa ter um ou mais AuditLogConfigs.

Se houver AuditConfigs para allServices e um serviço específico, a união dos dois AuditConfigs será usada para esse serviço: os tipos de registro especificados em cada AuditConfig são ativados e os exemptedMembers em cada AuditLogConfig são isentos.

Exemplo de política com vários AuditConfigs:

{
  "auditConfigs": [
    {
      "service": "allServices",
      "auditLogConfigs": [
        {
          "logType": "DATA_READ",
          "exemptedMembers": [
            "user:jose@example.com"
          ]
        },
        {
          "logType": "DATA_WRITE"
        },
        {
          "logType": "ADMIN_READ"
        }
      ]
    },
    {
      "service": "sampleservice.googleapis.com",
      "auditLogConfigs": [
        {
          "logType": "DATA_READ"
        },
        {
          "logType": "DATA_WRITE",
          "exemptedMembers": [
            "user:aliya@example.com"
          ]
        }
      ]
    }
  ]
}

Para sampleservice, essa política permite a geração de registros de DATA_READ, DATA_WRITE e ADMIN_READ. Ela também isenta jose@example.com da geração de registros de DATA_READ e aliya@example.com da geração de registros de DATA_WRITE.

Representação JSON
{
  "service": string,
  "auditLogConfigs": [
    {
      object (AuditLogConfig)
    }
  ]
}
Campos
service

string

Especifica um serviço que é ativado para geração de registros de auditoria. Por exemplo: storage.googleapis.com e cloudsql.googleapis.com. allServices é um valor especial que abrange todos os serviços.

auditLogConfigs[]

object (AuditLogConfig)

A configuração para a geração de registros de cada tipo de permissão.

AuditLogConfig

Fornece a configuração para geração de registros de um tipo de permissões. Exemplo:

{
  "auditLogConfigs": [
    {
      "logType": "DATA_READ",
      "exemptedMembers": [
        "user:jose@example.com"
      ]
    },
    {
      "logType": "DATA_WRITE"
    }
  ]
}

Isso ativa a geração de registros de DATA_READ e DATA_WRITE e isenta jose@example.com da geração de registros de DATA_READ.

Representação JSON
{
  "logType": enum (LogType),
  "exemptedMembers": [
    string
  ]
}
Campos
logType

enum (LogType)

O tipo de registro permitido por essa configuração.

exemptedMembers[]

string

Especifica as identidades que não causam geração de registros para esse tipo de permissão. Segue o mesmo formato de Binding.members.

LogType

A lista de tipos de permissão válidos para os quais a geração de registros pode ser configurada. As gravações de administrador sempre são registradas e não são configuráveis.

Tipos enumerados
LOG_TYPE_UNSPECIFIED Caso padrão. Nunca deve ser isso.
ADMIN_READ O administrador lê. Exemplo: CloudIAM getIamPolicy
DATA_WRITE Dados são gravados. Exemplo: CloudSQL Users create
DATA_READ Dados são lidos. Exemplo: CloudSQL Users list