Nesta página, você encontra instruções sobre como configurar permissões específicas de leitura, gravação ou gerenciamento de identidade e acesso (IAM, na sigla em inglês) para diferentes zonas gerenciadas no mesmo projeto.
Para ver informações detalhadas sobre as políticas do IAM, consulte
Noções básicas sobre políticas de permissões. Para ver informações sobre a API
IAM policy, consulte Policy. Para saber como criar papéis personalizados do IAM que podem ser usados nas suas zonas gerenciadas, consulte Noções básicas sobre papéis personalizados do IAM.
Para este procedimento, presumimos que você tenha criado uma zona gerenciada em um projeto. Para instruções sobre como criar uma zona gerenciada, consulte Criar, modificar e excluir zonas.
Definir política do IAM para uma zona gerenciada
Para definir a política do IAM em uma zona gerenciada específica, siga estas etapas:
Console
No console do Google Cloud , acesse a página Zonas do Cloud DNS.
Selecione uma ou mais zonas para adicionar permissões de controle de acesso.
Na página Permissões para recursos, clique em Adicionar principal.
Na página Conceder acesso ao recurso, em Novos principais, adicione o endereço de e-mail do usuário, grupo, domínio ou conta de serviço que você quer adicionar como o novo principal.
Na lista Atribuir papéis, selecione o papel que você quer atribuir ao principal.
Para atribuir mais papéis, clique em Adicionar outro papel.
Clique em Save.
gcloud
Execute o comando gcloud dns managed-zones set-iam-policy:
gcloud dns managed-zones set-iam-policy NAME \ --policy-file=POLICY-FILE
Substitua:
NAME: o nome da zona gerenciada em que você quer definir a permissão do IAM.POLICY-FILE: o arquivo que contém a política do IAM que você quer especificar para a zona gerenciada. Para ver um exemplo de arquivo de política, consulte Política.
Se esse comando for executado corretamente, ele retorna a política IAM. Caso contrário, uma mensagem de erro retorna especificando o erro.
API
Envie uma solicitação POST usando o método managedZone.setIamPolicy:
POST https://dns.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/MANAGED_ZONE:setIamPolicy
Substitua:
PROJECT_ID: o nome ou ID do projetoMANAGED_ZONE: o nome da zona gerenciada em que você quer definir a permissão do IAM.
Para informações detalhadas sobre essa chamada de API, consulte
Vinculação na
página da API Policy do IAM.
Conceder acesso a conjuntos de registros de recursos específicos
O Cloud DNS aceita o uso de condições do IAM para fornecer controle de acesso granular a conjuntos de registros de recursos (RRsets) específicos em uma zona gerenciada.
É possível configurar o controle de acesso granular usando um dos seguintes métodos:
- Papel padrão (recomendado): use o papel padrão
roles/dns.admincom uma condição específica do IAM que permita as operações necessárias que não sejam de conjunto de registros. Essa é a abordagem mais simples, já que não exige a criação de papéis personalizados. - Funções personalizadas:crie duas funções personalizadas para separar o gerenciamento de conjuntos de registros de outras tarefas administrativas.
Método 1: função padrão (recomendado)
Para usar o papel padrão roles/dns.admin, inclua outros recursos na condição do IAM. Isso ocorre porque, para modificar registros DNS, o principal precisa ter permissão para realizar a modificação do registro e as operações associadas nos recursos de mudança.
Dependendo dos seus requisitos de segurança, você pode escolher uma das seguintes estruturas de condição:
- Permissiva:permite todas as outras ações administrativas de DNS. Isso é equivalente à abordagem de papéis personalizados se o papel complementar tiver todas as outras permissões administrativas padrão.
none (resource.type == 'dns.googleapis.com/ResourceRecordSet' && <RRSET_CONDITION>) || (resource.type != 'dns.googleapis.com/ResourceRecordSet') - Restritiva:permite apenas modificações no conjunto de registros e operações em recursos de mudança. Outras ações administrativas, incluindo listar conjuntos de registros (
dns.resourceRecordSets.list) e descrever a zona gerenciada, são bloqueadas.none (resource.type == 'dns.googleapis.com/ResourceRecordSet' && <RRSET_CONDITION>) || (resource.type == 'dns.googleapis.com/Change')
Substitua <RRSET_CONDITION> pelos seus requisitos de acesso específicos. Consulte Exemplo de condições.
Para conceder permissões:
1. Atribua o papel roles/dns.admin ao principal na zona gerenciada.
- Adicione a condição (permissiva ou restritiva) à vinculação.
Método 2: funções personalizadas
Se você não quiser usar condições complexas, crie papéis personalizados para separar as permissões.
Pré-requisito: criar funções personalizadas
Crie um papel de gerenciamento de conjuntos de registros (por exemplo,
DnsRecordSetAdmin) que contenha as seguintes permissões:dns.resourceRecordSets.createdns.resourceRecordSets.deletedns.resourceRecordSets.getdns.resourceRecordSets.update
Crie um papel complementar (por exemplo,
DnsNonRecordSetAdmin) que contenha todas as permissões restantes do papel padrãoroles/dns.admin. Essas permissões adicionais (comodns.changes.createedns.managedZones.get) são necessárias para a administração geral da zona e para atender às verificações de pré-requisitos ao modificar registros.
Conceder permissões
Para garantir que suas políticas condicionais funcionem conforme o esperado, conceda estes papéis ao principal da seguinte maneira:
- Conceda o papel complementar incondicionalmente: atribua o papel que contém
as permissões administrativas restantes (por exemplo,
DnsNonRecordSetAdmin) ao principal incondicionalmente na zona gerenciada. - Conceda o papel de gerenciamento de conjunto de registros de forma condicional:atribua o papel
que contém as permissões do conjunto de registros (por exemplo,
DnsRecordSetAdmin) ao principal condicionalmente com base nos seus requisitos de acesso específicos.
Exemplos de condições
Os exemplos a seguir mostram como restringir o acesso usando os atributos resource.name e resource.type.
Se você estiver usando o Método 1 (papel padrão), adicione a cláusula não recordset apropriada (por exemplo, || (resource.type != 'dns.googleapis.com/ResourceRecordSet')) a essas expressões.
Correspondência exata de registro:conceda permissão para gerenciar apenas o registro A de
api.example.com..- Funções personalizadas / condição bruta:
none (resource.type == 'dns.googleapis.com/ResourceRecordSet' && resource.name.endsWith('/rrsets/api.example.com./A')) - Função padrão (permissiva):
none (resource.type == 'dns.googleapis.com/ResourceRecordSet' && resource.name.endsWith('/rrsets/api.example.com./A')) || (resource.type != 'dns.googleapis.com/ResourceRecordSet') - Função padrão (restritiva):
none (resource.type == 'dns.googleapis.com/ResourceRecordSet' && resource.name.endsWith('/rrsets/api.example.com./A')) || (resource.type == 'dns.googleapis.com/Change')
- Funções personalizadas / condição bruta:
Delegação de subdomínio:conceda permissão para gerenciar todos os registros no subdomínio
p.example.com..- Funções personalizadas / condição bruta:
none (resource.type == 'dns.googleapis.com/ResourceRecordSet' && resource.name.extract('/rrsets/{name}/').endsWith('.p.example.com.')) - Função padrão (permissiva):
none (resource.type == 'dns.googleapis.com/ResourceRecordSet' && resource.name.extract('/rrsets/{name}/').endsWith('.p.example.com.')) || (resource.type != 'dns.googleapis.com/ResourceRecordSet')
- Funções personalizadas / condição bruta:
Gerenciar todos os registros de um tipo específico:conceda permissão para gerenciar todos os registros
Ana zona.- Funções personalizadas / condição bruta:
none (resource.type == 'dns.googleapis.com/ResourceRecordSet' && resource.name.endsWith('/A')) - Função padrão (permissiva):
none (resource.type == 'dns.googleapis.com/ResourceRecordSet' && resource.name.endsWith('/A')) || (resource.type != 'dns.googleapis.com/ResourceRecordSet')
- Funções personalizadas / condição bruta:
Acessar política de IAM para uma zona gerenciada
Para conseguir a política do IAM de uma zona gerenciada específica, siga estas etapas:
gcloud
Execute o comando gcloud dns managed-zones get-iam-policy:
gcloud dns managed-zones get-iam-policy NAME
Substitua NAME pelo nome da zona gerenciada que receberá a política do IAM.
Se esse comando for executado corretamente, ele retorna a política IAM. Caso contrário, uma mensagem de erro retorna especificando o erro.
API
Envie uma solicitação POST usando o método managedZone.getIamPolicy:
POST https://dns.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/ManagedZone:getIamPolicy
Substitua:
PROJECT_ID: o nome ou ID do projetoMANAGED_ZONE: o nome da zona gerenciada em que você quer definir a permissão do IAM.
Verificar as permissões do IAM para uma zona gerenciada
Envie uma solicitação POST usando o método managedZone.testIamPermissions:
POST https://dns.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/ManagedZone:testIamPermissions
Substitua:
PROJECT_ID: o nome ou ID do projetoMANAGED_ZONE: o nome da zona gerenciada em que você quer verificar a permissão do IAM.
A seguir
- Para trabalhar com zonas gerenciadas, consulte Criar, modificar e excluir zonas.
- Para achar soluções de problemas comuns que podem ser encontrados ao usar o Cloud DNS, consulte Solução de problemas.
- Para uma visão geral do Cloud DNS, consulte Visão geral do Cloud DNS.