Módulo Google IAM Terraform
Esta é uma coleção de submódulos que facilitam o gerenciamento não destrutivo de várias funções do IAM para recursos no Google Cloud Platform:
- Registro de artefato IAM
- Configuração de auditoria
- BigQuery IAM
- Contas de faturamento IAM
- Serviço Cloud Run IAM
- Função personalizada IAM
- Zona DNS IAM
- Pastas IAM
- Chaves criptográficas KMS IAM
- KMS_Key Rings IAM
- Organizações IAM
- Projetos IAM
- Assinaturas Pubsub IAM
- Tópicos Pubsub IAM
- Gerenciador de segredos IAM
- Contas de serviço IAM
- Baldes de armazenamento IAM
- Sub-redes IAM
- Chaves de tags IAM
- Valores de tags IAM
- Gerenciador de fonte segura
Compatibilidade
Este módulo deve ser usado com Terraform 1.3+ e testado usando Terraform 1.3+. Se você encontrar incompatibilidades usando Terraform >=1.3, abra um problema.
Atualizando
Os seguintes guias estão disponíveis para ajudar nas atualizações:
- 4,0 -> 5,0
- 3,0 -> 4,0
- 2,0 -> 3,0
Uso
Exemplos completos estão na pasta de exemplos, mas o uso básico é o seguinte para gerenciar funções em dois projetos:
module "projects_iam_bindings" {
source = " terraform-google-modules/iam/google//modules/projects_iam "
version = " ~> 8.0 "
projects = [ " project-123456 " , " project-9876543 " ]
bindings = {
" roles/storage.admin " = [
" group:[email protected] " ,
" user:[email protected] " ,
]
" roles/compute.networkAdmin " = [
" group:[email protected] " ,
" user:[email protected] " ,
]
" roles/compute.imageUser " = [
" user:[email protected] " ,
]
}
}
O módulo também oferece um modo autoritativo que removerá todas as funções não atribuídas por meio do Terraform. Este é um exemplo de uso do modo autoritativo para gerenciar o acesso a um bucket de armazenamento:
module "storage_buckets_iam_bindings" {
source = " terraform-google-modules/iam/google//modules/storage_buckets_iam "
version = " ~> 8.0 "
storage_buckets = [ " my-storage-bucket " ]
mode = " authoritative "
bindings = {
" roles/storage.legacyBucketReader " = [
" user:[email protected] " ,
" group:[email protected] " ,
]
" roles/storage.legacyBucketWriter " = [
" user:[email protected] " ,
" group:[email protected] " ,
]
}
}
Modos Aditivos e Autoritativos
A variável mode
controla o comportamento de um submódulo, por padrão está definida como "aditivo", as opções possíveis são:
- aditivo: adiciona membros à função, membros antigos não são excluídos desta função.
- autoritativo: define os membros da função (incluindo a remoção de quaisquer não listados), as funções não listadas não são afetadas.
No modo autoritativo, um submódulo assume controle total sobre as ligações IAM listadas no módulo. Isso significa que quaisquer membros adicionados a funções fora do módulo serão removidos na próxima vez que o Terraform for executado. No entanto, as funções não listadas no módulo não serão afetadas.
No modo aditivo, um submódulo não afeta as ligações existentes. Em vez disso, todos os membros listados no módulo serão adicionados ao conjunto existente de vinculações do IAM. No entanto, os membros listados no módulo são totalmente controlados pelo módulo. Isso significa que se você adicionar uma ligação por meio do módulo e removê-la posteriormente, o módulo tratará corretamente a remoção da ligação de função.
Advertências
Referenciando valores/atributos de outros recursos
Cada submódulo executa operações em algumas variáveis antes de fazer qualquer alteração nas vinculações do IAM no GCP. Devido às limitações de for_each
(mais informações), que é amplamente utilizado nos submódulos, existem certas limitações quanto ao tipo de valores dinâmicos que você pode fornecer a um submódulo:
- Entidades dinâmicas (por exemplo
projects
) são permitidas apenas para 1 entidade. - Se você passar 2 ou mais entidades (por exemplo,
projects
), a configuração DEVE ser estática, o que significa que não pode usar nenhum dos campos de outros recursos para obter o nome da entidade (isso inclui obter os hashes gerados aleatoriamente através do random_id
recurso). - Os próprios nomes das funções nunca podem ser dinâmicos.
- Os membros só podem ser dinâmicos no modo
authoritative
.
Ligações IAM
É possível escolher os seguintes tipos de recursos para aplicar as vinculações do IAM:
- Projetos (variável
projects
) - Organizações (variável
organizations
) - Pastas (variável
folders
) - Contas de serviço (variável
service_accounts
) - Sub-redes (variável
subnets
) - Buckets de armazenamento (variável
storage_buckets
) - Tópicos Pubsub (variável
pubsub_topics
) - Assinaturas Pubsub (variável
pubsub_subscriptions
) - Chaveiros Kms (variável
kms_key_rings
) - Chaves criptográficas Kms (variável
kms_crypto_keys
) - Segredos do Secret Manager (variável
secrets
) - Zonas DNS (variável
managed_zones
) - Secure Source Manager (
entity_ids
e variável location
)
Defina a variável especificada na chamada do módulo para escolher os recursos a serem afetados. Lembre-se de definir a variável mode
e conceder permissões suficientes para gerenciar o recurso selecionado também. Observe que a variável bindings
aceita um mapa vazio {}
passado como argumento caso os recursos não tenham vinculações do IAM para aplicar.
Requisitos
Plug-ins do Terraform
- Terraforma >= 0.13.0
- provedor-terraform-google 2.5
- terraform-provider-google-beta 2.5
Permissões
Para executar um submódulo, você deve ter uma conta de serviço com uma função apropriada para gerenciar o IAM do recurso aplicável. A função apropriada difere dependendo de qual recurso você está direcionando, como segue:
- Organização:
- Administrador da Organização: Acesso para administrar todos os recursos pertencentes à organização e não inclui privilégios para cobrança ou administração de função da organização.
- Personalizado: adicione permissões resourcemanager.organizations.getIamPolicy e resourcemanager.organizations.setIamPolicy.
- Projeto:
- Proprietário: Acesso total e todas as permissões para todos os recursos do projeto.
- Administrador do IAM de projetos: permite que os usuários administrem políticas do IAM em projetos.
- Personalizado: adicione permissões resourcemanager.projects.getIamPolicy e resourcemanager.projects.setIamPolicy.
- Pasta:
- O administrador da pasta: todas as permissões de pasta disponíveis.
- Administrador do IAM de pasta: permite que os usuários administrem políticas do IAM em pastas.
- Personalizado: adicione as permissões resourcemanager.folders.getIamPolicy e resourcemanager.folders.setIamPolicy (devem ser adicionadas na organização).
- Conta de serviço:
- Administrador de conta de serviço: crie e gerencie contas de serviço.
- Personalizado: adicione permissões resourcemanager.organizations.getIamPolicy e resourcemanager.organizations.setIamPolicy.
- Sub-rede:
- Administrador de computação do projeto: controle total dos recursos do Compute Engine.
- Administrador da rede de computação do projeto: controle total dos recursos de rede do Compute Engine.
- Projeto personalizado: adicione permissões computacional.subnetworks.getIamPolicy e computacional.subnetworks.setIamPolicy.
- Balde de armazenamento:
- Administrador de armazenamento: controle total dos recursos do GCS.
- Proprietário do bucket legado de armazenamento: acesso de leitura e gravação a buckets existentes com listagem/criação/exclusão de objetos.
- Personalizado: adicione permissões storage.buckets.getIamPolicy e storage.buckets.setIamPolicy.
- Tópico Pubsub:
- Administrador do Pub/Sub: crie e gerencie contas de serviço.
- Personalizado: adicione as permissões pubsub.topics.getIamPolicy e pubsub.topics.setIamPolicy.
- Assinatura do Pubsub:
- Função de administrador do Pub/Sub: crie e gerencie contas de serviço.
- Função personalizada: adicione as permissões pubsub.subscriptions.getIamPolicy e pubsub.subscriptions.setIamPolicy.
- Chaveiro Kms:
- Proprietário: Acesso total a todos os recursos.
- Administrador do Cloud KMS: permite o gerenciamento de recursos criptográficos.
- Personalizado: adicione permissões cloudkms.keyRings.getIamPolicy e cloudkms.keyRings.getIamPolicy.
- Chave criptográfica Kms:
- Proprietário: Acesso total a todos os recursos.
- Administrador do Cloud KMS: permite o gerenciamento de recursos criptográficos.
- Personalizado: adicione permissões cloudkms.cryptoKeys.getIamPolicy e cloudkms.cryptoKeys.setIamPolicy.
- Gerenciador secreto:
- Administrador do Secret Manager: acesso total para administrar o Secret Manager.
- Personalizado: adicione as permissões secretmanager.secrets.getIamPolicy e secretmanager.secrets.setIamPolicy.
- Zona DNS:
- Administrador DNS: acesso total para administrar a zona DNS.
- Personalizado: adicione as permissões dns.ManagedZones.setIamPolicy, dns.ownedZones.list e dns.ownedZones.getIamPolicy.
Instalar
Terraforma
Certifique-se de ter a versão correta do Terraform >= 1.3
Plug-ins do Terraform
Certifique-se de ter os plugins compilados em $HOME/.terraform.d/plugins/
- terraform-provider-google >= 5,37
- terraform-provider-google-beta >= 5,37
Consulte a página de cada plugin para obter mais informações sobre como compilá-los e usá-los.