Tags e controle de acesso

Nesta página, fornecemos uma visão geral das tags. Ela também descreve como usar tags com o Gerenciamento de identidade e acesso (IAM, na sigla em inglês) para ajudar a controlar o acesso aos recursos do Google Cloud.

Visão geral das tags

Uma tag é um par de chave-valor anexado a uma organização, pasta ou projeto. Conceda papéis de IAM condicionalmente se um recurso tiver uma tag específica.

Outros recursos herdam valores de tag da organização pai, das pastas e do projeto. Como resultado, é possível usar tags para gerenciar o acesso a qualquer recurso do Google Cloud.

Usos comuns de tags

Veja alguns casos de uso comuns para gerenciar o acesso com tags:

  • Ambientes de desenvolvimento, preparação e produção. Por exemplo, é possível adicionar as tags environment: dev ao ambiente de desenvolvimento e environment: prod ao ambiente de produção.
  • Tipos de componentes Por exemplo, é possível adicionar as tags component: frontend aos recursos de front-end e component: batch aos recursos para processamento em lote.
  • Nomes de projetos. Por exemplo, se sua equipe está trabalhando em um projeto com o codinome Atlas, é possível adicionar a tag project: atlas aos recursos de desenvolvimento dela.

Tags e hierarquia de recursos

No Google Cloud, os recursos fazem parte de uma hierarquia, e os recursos de nível inferior podem herdar propriedades de recursos de nível superior. As tags são uma das propriedades que podem ser herdadas pelos recursos. Por exemplo, se você anexar uma tag a uma organização, as pastas, os projetos e os recursos específicos do serviço dessa organização herdarão essa tag.

Para impedir que os recursos herdem um valor de tag, anexe outra tag a uma pasta ou projeto, usando a mesma chave, mas um valor diferente da tag na organização ou pasta de nível superior. Na verdade, cada tag em uma organização ou pasta fornece um valor padrão e cada tag em um recurso de nível inferior, como uma pasta ou projeto, modifica o valor padrão.

Por exemplo, suponha que você aplique a tag environment: dev a uma pasta e que ela tenha duas pastas filho chamadas team-a e team-b. Também é possível aplicar uma tag diferente, environment: test, à pasta team-b. Como resultado, os projetos e outros recursos na pasta team-a herdam a tag environment: dev e projetos e outros recursos na pasta team-b herdam a tagenvironment: test:

Se você remover a tag environment: test da pasta team-b, essa pasta e os recursos dela herdarão a tag environment: dev.

Definições e identificadores de tags

Antes de anexar tags aos recursos, você precisa definir a chave para a tag, bem como os valores que a tag permite. Essas definições estão vinculadas à sua organização. Você usa o Resource Manager para gerenciar definições de tags. Para saber mais, consulte Como criar e definir uma nova tag.

Cada chave e valor de tag tem alguns identificadores diferentes:

  • Um código permanente, que é globalmente exclusivo e não pode ser reutilizado. Por exemplo, uma chave de tag pode ter o ID permanente tagKeys/123456789012 e um valor de tag pode ter o ID permanente tagValues/567890123456.
  • Um nome curto. O nome curto de cada chave precisa ser exclusivo na organização, e o nome curto de cada valor precisa ser exclusivo para a chave associada. Por exemplo, uma chave de tag pode ter o nome abreviado env, e um valor de tag pode ter o nome abreviado prod.
  • Um nome de namespace, que adiciona o código numérico da sua organização ao nome curto de uma chave de tag. Por exemplo, uma chave de tag pode ter o nome com namespace 123456789012/env. Saiba como conseguir o código da organização.

Conforme explicado nesta página, depois de anexar tags a um recurso, você pode gravar condições para conceder acesso com base em tags. Para gravar uma condição, você precisa escolher qual tipo de identificador usar na condição. Siga estas diretrizes para escolher entre elas:

  • Para testar tags, use o nome com namespace (para chaves) e o nome curto (para valores). Esses identificadores são mais fáceis de entender e lembrar, especialmente ao começar.
  • Se você gerenciar a configuração de maneira declarativa,usando uma ferramenta como o Terraform, use o nome de namespace (para chaves) e o nome curto (para valores). É possível reutilizar esses identificadores ao longo do tempo, o que significa que uma ferramenta declarativa pode excluí-los e recriá-los, e suas condições continuarão a funcionar.

    Essa abordagem tem uma desvantagem: digamos que você exclua uma chave ou um valor de tag e crie uma nova chave ou valor com o mesmo nome, mas com um significado diferente. Se sua condição se referir ao nome de namespace ou nome curto, a condição continua sendo aplicada à nova chave ou ao valor.

    Em alguns casos, esse comportamento pode fazer com que os membros tenham acesso que você não pretendia.

  • Para ajudar a minimizar riscos, considere usar códigos permanentes, que nunca podem ser reutilizados.

    Veja por que os códigos permanentes ajudam a minimizar riscos: Suponha que você exclua uma chave ou um valor de tag e, em seguida, crie uma nova chave ou valor com o mesmo nome, mas um significado diferente. Se sua condição se referir ao código permanente, ela não se aplicará à nova chave ou valor. Consequentemente, é menos provável que os membros tenham acesso que não foi pretendido para eles.

    Uma desvantagem é que, se você excluir e recriar chaves e valores e quiser preservar o acesso dos membros, também será necessário atualizar suas políticas de IAM para fazer referência aos novos IDs permanentes.

Acesso a recursos com tag

Use tags com condições do IAM para conceder um papel condicionalmente, dependendo das tags anexadas ou herdadas por um recurso. Se uma condição for avaliada como true, o acesso será concedido. caso contrário, o acesso não será concedido. Para saber mais, consulte a visão geral das condições do IAM.

As seções a seguir mostram exemplos de expressões de condição que verificam as tags em um recurso. A condição chama funções diferentes dependendo da verificação do ID permanente ou do nome curto. Para saber mais sobre essas funções, consulte Tags de recurso.

Condições que usam IDs permanentes

Essa condição concede um papel em recursos com a tag tagKeys/123456789012: tagValues/567890123456:

resource.matchTagId('tagKeys/123456789012', 'tagValues/567890123456')

Essa condição concede um papel nos recursos que têm qualquer tag com a chave tagKeys/123456789012, independentemente do valor:

resource.hasTagKeyId('tagKeys/123456789012')

Essa condição concede um papel em recursos que têm a tag tagKeys/123456789012: tagValues/567890123456 e qualquer tag que use a chave tagKeys/987654321098:

resource.matchTagId('tagKeys/123456789012', 'tagValues/567890123456') &&
    resource.hasTagKeyId('tagKeys/987654321098')

Condições que usam nomes com namespace e nomes curtos

Essa condição concede um papel em recursos com a tag env: prod, indicando que o recurso está em um ambiente de produção:

resource.matchTag('123456789012/env', 'prod')

Essa condição concede um papel nos recursos que têm qualquer tag com a chave env, independentemente do valor:

resource.hasTagKey('123456789012/env')

Essa condição concede um papel nos recursos que têm a tag env: prod e qualquer tag que usa a chave project:

resource.matchTag('123456789012/env', 'prod') &&
    resource.hasTagKey('123456789012/project')

A seguir