Como definir uma Política da Organização com tags

As tags fornecem uma maneira de permitir ou negar políticas condicionalmente se um recurso tiver uma tag específica. Você pode usar tags e aplicação condicional de políticas da organização para fornecer controle centralizado dos recursos em sua hierarquia.

Antes de começar

Para mais informações sobre o que são tags e como elas funcionam, consulte a Visão geral das tags.

Para ver instruções detalhadas sobre como usar tags, consulte Como criar e gerenciar tags.

Como definir uma Política da Organização com tags

Para usar tags para determinar onde uma política da organização precisa entrar em vigor, especifique uma condição no arquivo YAML da política da organização. É possível definir a condição para corresponder a um determinado par de chave-valor de tag, exigindo que um determinado valor de tag seja definido para que a política da organização seja aplicada.

A maioria das políticas da organização é avaliada e aplicada quando um recurso é criado ou atualizado. Não é possível anexar uma tag a um recurso antes da criação. Portanto, as políticas condicionais da organização não podem avaliar tags em um recurso durante a criação, somente em tags herdadas de recursos pai.

As tags são avaliadas para recursos de organização, pasta e projeto. A maioria dos recursos abaixo dos projetos na hierarquia de recursos não é avaliada pela política da organização, com algumas exceções, como os serviços do Cloud Run. Para informações sobre restrições específicas da política da organização, consulte Restrições da política da organização.

Exemplo de política de lista

No exemplo a seguir, demonstramos como definir um arquivo de política da organização que aplica a restrição gcp.resourceLocations. Essa política da organização usa valores condicionais e não condicionais, definidos no mesmo arquivo de política.

Console

Para definir a política da organização usando , faça o seguinte:

  1. No console do Google Cloud, acesse a página Políticas da organização.

    Acessar as políticas da organização

  2. No seletor de projetos, escolha aquele em que você quer definir a política da organização.

  3. Na página Políticas da organização, selecione uma restrição na lista. A página Detalhes da política para essa restrição é exibida.

  4. Para atualizar a política da organização para esse recurso, clique em Gerenciar política.

  5. Na página Editar política, selecione Substituir a política do editor principal.

  6. Em Política de aplicação, selecione uma opção para aplicação:

    • Para mesclar e avaliar as políticas da organização juntas, selecione Mesclar com pai. Para saber mais informações sobre herança e hierarquia de recursos, consulte Noções básicas sobre avaliação de hierarquia.

    • Para modificar políticas herdadas de um recurso pai, selecione Substituir.

  7. Clique em Adicionar regra.

  8. Em Valores da política, selecione se esta política da organização precisa permitir ou negar valores ou especificar um conjunto personalizado de valores.

  9. Para tornar a política da organização condicional em uma tag, clique em Adicionar condição.

    1. No campo Título, insira um nome para a condição.

    2. No campo Descrição, defina uma descrição para a condição. A descrição oferece contexto sobre as tags necessárias e como elas afetam os recursos.

    3. Você pode usar o Criador de condições para criar uma condição que exija uma tag específica para que a restrição entre em vigor.

      1. Na caixa Tipo de condição, selecione Tag.

      2. Selecione o Operador para sua condição. Para corresponder a uma tag inteira, use o operador matches. Para combinar uma chave de tag e um valor de tag, use o operador match ID.

      3. Se você selecionou o operador corresponde, insira o nome do namespace de valor da tag. Se você selecionou o operador corresponde ao código, insira os códigos da chave e do valor.

      4. Para criar várias condições, clique em Adicionar. Se você adicionar outra condição, poderá definir a lógica condicional para exigir todas elas alternando E. É possível configurar a lógica condicional para exigir que apenas uma das condições seja verdadeira, alternando Or.

      5. É possível excluir uma expressão clicando no X grande à direita dos campos de condição.

      6. Quando terminar de editar as condições, clique em Salvar.

      Na figura a seguir, mostramos um exemplo de configuração de uma política da organização que inclui condições.

      Exemplo da IU das condições da política da organização.

    4. O Editor de condições pode ser usado para criar uma expressão condicional de maneira programática. Também será exibida uma renderização programática do conjunto atual de condições.

      1. É possível usar o Editor de condições para aplicar o operador lógico !. Por exemplo, a consulta !resource.matchTag('ORGANIZATION_ID/location', 'us-west1') aplicará a restrição da política da organização a qualquer recurso que não tenha a tag us-west1.
  10. Para aplicar a política, clique em Definir política.

gcloud

Para definir a política, execute o seguinte comando:

gcloud org-policies set-policy POLICY_PATH

Em que POLICY_PATH é o caminho completo para o arquivo JSON da política da organização, que deve ser semelhante ao seguinte:

{
  "name":"RESOURCE_TYPE/RESOURCE_ID/policies/gcp.resourceLocations",
  "spec":{
    "rules":[
       {
        // As there is no condition specified, this allowedValue is enforced
        // unconditionally.
        "values":{
          "allowedValues": ["us-east1-locations"]
        },
      },
     {
        // This condition applies to the values block.
        "condition":{
          "expression":"resource.matchTag('ORGANIZATION_ID/location', 'us-west1')"
        },
        "values":{
          "allowedValues": ["us-west1-locations"]
        }
      }
    ]
  }
}

Em que:

  • RESOURCE_TYPE é organizations, folders ou projects.

  • RESOURCE_ID é o ID da organização, da pasta, do ID ou o número do projeto, dependendo do tipo de recurso especificado em RESOURCE_TYPE.

  • ORGANIZATION_ID é a organização pai da chave de tag.

Para a Política da Organização acima, o recurso e todos os recursos filhos terão a restrição gcp.resourceLocations aplicada a eles, com allowedValues de us-east1-locations. Qualquer um desses recursos com a tag location: us-west1 terá a restrição gcp.resourceLocations aplicada a ela, com allowedValues de us-east1-locations e us-west1-locations.

Dessa forma, conjuntos de valores condicionais e não condicionais podem ser aplicados a uma restrição em uma única Política da Organização.

Exemplo de política booleana

No exemplo a seguir, demonstramos como definir um arquivo de política da organização que aplica a restrição compute.disableSerialPortAccess. Essa política da organização especifica que todas as portas seriais podem ser acessadas pelos recursos, mas usa uma condição para restringir apenas o acesso à porta serial para recursos que tenham a tag correspondente.

Console

Para definir a política da organização usando , faça o seguinte:

  1. No console do Google Cloud, acesse a página Políticas da organização.

    Acessar as políticas da organização

  2. No seletor de projetos, escolha aquele para o qual você quer definir a política da organização.

  3. Selecione uma restrição na lista da página Políticas da organização. A página Detalhes da política dessa restrição será exibida.

  4. Para atualizar a política da organização para esse recurso, clique em Gerenciar política.

  5. Na página Editar política, selecione Substituir a política do editor principal.

  6. Clique em Adicionar regra.

  7. Em Aplicação, selecione se a aplicação dessa política da organização precisa ser ativada ou desativada.

  8. Para tornar a política da organização condicional em uma tag, clique em Adicionar condição. Se você adicionar uma regra condicional a uma política da organização, será necessário adicionar apenas uma regra incondicional. Caso contrário, a política não poderá ser salva.

    1. No campo Título, insira um nome para a condição.

    2. No campo Descrição, defina uma descrição para a condição. A descrição oferece contexto sobre as tags necessárias e como elas afetam os recursos.

    3. Você pode usar o Criador de condições para criar uma condição que exija uma tag específica para que a restrição entre em vigor.

      1. Na caixa Tipo de condição, selecione Tag.

      2. Selecione o Operador para sua condição. Para corresponder a uma tag inteira, use o operador matches. Para combinar uma chave de tag e um valor de tag, use o operador match ID.

      3. Se você selecionou o operador corresponde, insira o nome do namespace de valor da tag. Se você selecionou o operador corresponde ao código, insira os códigos da chave e do valor.

      4. Para criar várias condições, clique em Adicionar. Se você adicionar outra condição, poderá definir a lógica condicional para exigir todas elas alternando E. É possível configurar a lógica condicional para exigir que apenas uma das condições seja verdadeira, alternando Or.

      5. É possível excluir uma expressão clicando no X grande à direita dos campos de condição.

      6. Quando terminar de editar as condições, clique em Salvar.

      7. Uma política da organização com uma condição aplicada precisa ter apenas uma regra incondicional. Clique em Adicionar regra e defina se a aplicação dessa política da organização deve ser ativada ou desativada por padrão.

      Na figura a seguir, mostramos um exemplo de configuração de uma política da organização que inclui condições.

      Exemplo da IU das condições da política da organização.

    4. O Editor de condições pode ser usado para criar uma expressão condicional de maneira programática. Também será exibida uma renderização programática do conjunto atual de condições.

      1. É possível usar o Editor de condições para aplicar o operador lógico !. Por exemplo, a consulta !resource.matchTag('ORGANIZATION_ID/location', 'us-west1') aplicará a restrição da política da organização a qualquer recurso que não tenha a tag us-west1.
  9. Para finalizar e aplicar a política da organização, clique em Salvar.

gcloud

Para definir a política, execute o seguinte comando:

gcloud org-policies set-policy POLICY_PATH

Em que POLICY_PATH é o caminho completo para o arquivo JSON da política da organização, que deve ser semelhante ao seguinte:

{
  "name": "RESOURCE_TYPE/RESOURCE_ID/policies/gcp.disableSerialPortAccess",
  "spec": {
    "rules": [
      {
        "condition": {
          "expression": "resource.matchTag(\"ORGANIZATION_ID/disableSerialAccess\", \"yes\")"
        },
        "enforce": true
      },
      {
        "enforce": false
      }
    ]
  }
}

Em que:

  • RESOURCE_TYPE é organizations, folders ou projects.

  • RESOURCE_ID é seu ID da organização, ID da pasta, ID do projeto ou o número do projeto.

  • ORGANIZATION_ID é a organização pai da chave de tag.

Para a política da organização acima, o recurso e todos os recursos filhos terão a restrição gcp.disableSerialPortAccess aplicada a eles. Todos os recursos com a tag disableSerialAccess: yes serão negados pela política da organização. Os recursos que não tiverem a tag disableSerialAccess: yes não terão a restrição aplicada.

Adicionar restrições condicionalmente à política da organização

Você pode usar tags para adicionar restrições de política da organização condicionalmente a recursos com base nas tags anexadas. É possível adicionar várias condições na mesma política da organização, o que oferece um controle refinado dos recursos a que você quer aplicar a política da organização.

Common Expression Language, ou CEL, é a linguagem de expressão usada para especificar expressões condicionais. Uma expressão condicional consiste em uma ou mais instruções unidas por operadores lógicos (&&, || ou !). Para saber mais, consulte a especificação da CEL e a respectiva definição de linguagem.

Considere uma política da organização para restringir os locais em que os recursos podem ser criados com base nas tags aplicadas a eles. Para fazer isso, crie uma política da organização que aplique a restrição gcp.resourceLocations e use condições para restringir a aplicação apenas a determinados recursos.

Comece criando um arquivo temporário, /tmp/policy.yaml, para conter a política da organização:

name: organizations/ORGANIZATION_ID/policies/gcp.resourceLocations
spec:
    rules:
    - condition:
        expression: "resource.matchTag('ORGANIZATION_ID/location', 'us-east')"
      values:
        allowedValues:
        - in:us-east1-locations
    - condition:
        expression: "resource.matchTag('ORGANIZATION_ID/location', 'us-west')"
      values:
        allowedValues:
        - in:us-west1-locations
    - values:
        deniedValues:
        - in:asia-south1-locations

Em que ORGANIZATION_ID é a organização pai da chave de tag.

No exemplo acima, qualquer recurso que tenha a tag location: us-east anexada será restrito a locais dentro do grupo de valor us-east1-locations. Qualquer recurso que tenha a tag location: us-west anexada será restrito a locais dentro do grupo de valores us-west1-locations. Todos os recursos da organização serão bloqueados nos locais dentro do grupo de valores asia-south1-locations.

Em seguida, defina a política usando o comando set-policy:

gcloud org-policies set-policy /tmp/policy.yaml

Como restringir recursos sem tag

Use tags e políticas condicionais da organização para restringir todos os recursos que não usam uma tag específica. Se você definir uma política da organização em um recurso que restringe serviços e torná-lo condicional à presença de uma tag, nenhum recurso filho desse recurso poderá ser usado, a menos que tenham sido marcados. Dessa forma, os recursos precisam ser configurados de acordo com seu plano de governança antes de serem usados.

Para restringir recursos de organização, pasta ou projeto sem tag, use o operador lógico ! em uma consulta condicional ao criar sua política da organização.

Por exemplo, para permitir o uso de sqladmin.googleapis.com somente em projetos que tenham a tag sqladmin=enabled, crie uma política da organização que nega sqladmin.googleapis.com em projetos que não têm a tag sqladmin=enabled.

  1. Crie uma tag que identifique se os recursos foram corretamente aplicados. Por exemplo, é possível criar uma tag com a chave sqlAdmin e o valor enabled para designar que esse recurso permite o uso da API Cloud SQL Admin. Exemplo:

    Como criar uma chave e um valor de tag

  2. Clique no nome da tag recém-criada. Nas próximas etapas para criar uma condição, você precisará do nome com namespace da chave de tag, listado em Caminho da chave da tag.

  3. Crie uma política da organização Restringir o uso do serviço de recursos no nível do recurso da sua organização para negar acesso à API Cloud SQL Admin. Exemplo:

    Como criar uma política da organização para restringir recursos

  4. Adicione uma condição à política da organização acima, especificando que a política será aplicada se a tag de governança não estiver presente. O operador lógico NOT não é compatível com o criador de condições. Por isso, essa condição precisa ser integrada no editor de condições. Exemplo:

    Como criar uma política condicional da organização

    !resource.matchTag("012345678901/sqlAdmin", "enabled")

Agora, a tag sqlAdmin=enabled precisa ser anexada ou herdada por um projeto, antes que os desenvolvedores possam usar a API Cloud SQL Admin com esse projeto.

Herança da Política da Organização

As restrições da lista da Política da Organização ativadas usando tags irão se mesclar com a Política da Organização, de acordo com as regras normais da de herança. Essas regras condicionais serão aplicadas apenas se a condição for verdadeira.

As restrições booleanas da Política da Organização ativadas usando tags substituirão a Política da Organização. Além disso, como as políticas booleanas podem ter apenas dois estados, verdadeiro ou falso, todas as instruções condicionais precisam ser o oposto da declaração sem condição, impedindo que várias tags entrem em conflito.

Por exemplo, considere uma Política da Organização que imponha a restrição disableSerialPortAccess. O valor incondicional, usado se nenhuma condição o substituir, é verdadeiro. Portanto, qualquer outra declaração condicional dessa política precisa ser configurada como falsa para não entrar em conflito.

A seguir

Para obter mais informações sobre como usar tags, leia a página Criando e gerenciando tags.

Para mais informações sobre como criar e gerenciar restrições da política da organização, consulte Como usar restrições.