Módulo Terraform de IAM de Google
Esta es una colección de submódulos que facilitan la gestión no destructiva de múltiples funciones de IAM para recursos en Google Cloud Platform:
- Registro de artefactos IAM
- Configuración de auditoría
- Gestión de identidades y accesos (IAM) de BigQuery
- Cuentas de facturación IAM
- Servicio de ejecución en la nube IAM
- IAM de rol personalizado
- IAM de zona DNS
- Carpetas IAM
- Claves criptográficas KMS IAM
- KMS_Llaveros IAM
- Organizaciones IAM
- Proyectos IAM
- Suscripciones Pubsub IAM
- Pubsub Temas IAM
- Administrador secreto IAM
- Cuentas de servicio IAM
- Cubos de almacenamiento IAM
- Subredes IAM
- Claves de etiqueta IAM
- Valores de etiqueta IAM
- Administrador de fuentes seguras
Compatibilidad
Este módulo está diseñado para usarse con Terraform 1.3+ y probado con Terraform 1.3+. Si encuentra incompatibilidades al usar Terraform>=1.3, abra un problema.
Actualización
Las siguientes guías están disponibles para ayudar con las actualizaciones:
- 4.0 -> 5.0
- 3.0 -> 4.0
- 2.0 -> 3.0
Uso
Los ejemplos completos se encuentran en la carpeta de ejemplos, pero el uso básico es el siguiente para administrar roles en dos proyectos:
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] " ,
]
}
}
El módulo también ofrece un modo autorizado que eliminará todos los roles no asignados a través de Terraform. Este es un ejemplo del uso del modo autoritativo para administrar el acceso a un depósito de almacenamiento:
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 y autoritativos
La variable mode
controla el comportamiento de un submódulo, por defecto está configurada en "aditiva", las opciones posibles son:
- aditivo: agregue miembros al rol, los miembros antiguos no se eliminan de este rol.
- autoritativo: establece los miembros del rol (incluida la eliminación de los que no figuran en la lista), los roles no listados no se ven afectados.
En modo autoritativo, un submódulo toma control total sobre los enlaces de IAM enumerados en el módulo. Esto significa que cualquier miembro agregado a roles fuera del módulo se eliminará la próxima vez que se ejecute Terraform. Sin embargo, los roles que no figuran en el módulo no se verán afectados.
En modo aditivo, un submódulo no afecta los enlaces existentes. En su lugar, todos los miembros enumerados en el módulo se agregarán al conjunto existente de enlaces de IAM. Sin embargo, los miembros enumerados en el módulo están totalmente controlados por el módulo. Esto significa que si agrega un enlace a través del módulo y luego lo elimina, el módulo manejará correctamente la eliminación del enlace de rol.
Advertencias
Hacer referencia a valores/atributos de otros recursos
Cada submódulo realiza operaciones sobre algunas variables antes de realizar cambios en los enlaces de IAM en GCP. Debido a las limitaciones de for_each
(más información), que se usa ampliamente en los submódulos, existen ciertas limitaciones sobre el tipo de valores dinámicos que puede proporcionar a un submódulo:
- Las entidades dinámicas (por ejemplo,
projects
) solo se permiten para 1 entidad. - Si pasa 2 o más entidades (por ejemplo,
projects
), la configuración DEBE ser estática, lo que significa que no puede usar ninguno de los campos de otros recursos para obtener el nombre de la entidad (esto incluye obtener los hashes generados aleatoriamente a través de random_id
recurso). - Los nombres de los roles en sí nunca pueden ser dinámicos.
- Los miembros sólo pueden ser dinámicos en modo
authoritative
.
Enlaces IAM
Puede elegir los siguientes tipos de recursos para aplicar los enlaces de IAM:
- Proyectos (variable
projects
) - Organizaciones (variable
organizations
) - Carpetas (variable
folders
) - Cuentas de servicio (variable
service_accounts
) - Subredes (variable
subnets
) - Depósitos de almacenamiento (variable
storage_buckets
) - Temas de Pubsub (variable
pubsub_topics
) - Suscripciones a Pubsub (variable
pubsub_subscriptions
) - Llaveros Kms (variable
kms_key_rings
) - Kms Crypto Keys (variable
kms_crypto_keys
) - Secretos del administrador de secretos (variable
secrets
) - Zonas DNS (variable de
managed_zones
) - Administrador de fuente segura (
entity_ids
y variable location
)
Establezca la variable especificada en la llamada del módulo para elegir los recursos a afectar. Recuerde configurar la variable mode
y otorgar suficientes permisos para administrar también el recurso seleccionado. Tenga en cuenta que la variable bindings
acepta un mapa vacío {}
pasado como argumento en el caso de que los recursos no tengan enlaces de IAM para aplicar.
Requisitos
Complementos de Terraform
- Terraforma >= 0.13.0
- proveedor-terraform-google 2.5
- proveedor-terraform-google-beta 2.5
Permisos
Para ejecutar un submódulo, debe tener una cuenta de servicio con una función adecuada para administrar IAM para el recurso aplicable. El rol apropiado difiere según el recurso al que se dirige, de la siguiente manera:
- Organización:
- Administrador de la organización: Acceso para administrar todos los recursos pertenecientes a la organización y no incluye privilegios de facturación ni administración de roles de la organización.
- Personalizado: agregue los permisos Resourcemanager.organizations.getIamPolicy y Resourcemanager.organizations.setIamPolicy.
- Proyecto:
- Propietario: acceso total y todos los permisos para todos los recursos del proyecto.
- Administrador de IAM de proyectos: permite a los usuarios administrar políticas de IAM en proyectos.
- Personalizado: agregue los permisos Resourcemanager.projects.getIamPolicy y Resourcemanager.projects.setIamPolicy.
- Carpeta:
- El administrador de carpetas: todos los permisos de carpeta disponibles.
- Administrador de IAM de carpetas: permite a los usuarios administrar políticas de IAM en carpetas.
- Personalizado: agregue los permisos Resourcemanager.folders.getIamPolicy y Resourcemanager.folders.setIamPolicy (deben agregarse en la organización).
- Cuenta de servicio:
- Administrador de cuentas de servicio: cree y administre cuentas de servicio.
- Personalizado: agregue los permisos Resourcemanager.organizations.getIamPolicy y Resourcemanager.organizations.setIamPolicy.
- Subred:
- Administrador informático del proyecto: control total de los recursos de Compute Engine.
- Administrador de la red informática del proyecto: control total de los recursos de red de Compute Engine.
- Personalizado del proyecto: agregue los permisos Compute.subnetworks.getIamPolicy y Compute.subnetworks.setIamPolicy.
- Cubo de almacenamiento:
- Administrador de almacenamiento: control total de los recursos de GCS.
- Propietario del depósito heredado de almacenamiento: acceso de lectura y escritura a los depósitos existentes con listado/creación/eliminación de objetos.
- Personalizado: agregue los permisos Storage.buckets.getIamPolicy y Storage.buckets.setIamPolicy.
- Tema del pubsub:
- Administrador de Pub/Sub: cree y administre cuentas de servicio.
- Personalizado: agregue los permisos pubsub.topics.getIamPolicy y pubsub.topics.setIamPolicy.
- Suscripción PubSub:
- Rol de administrador de Pub/Sub: crear y administrar cuentas de servicio.
- Rol personalizado: agregue los permisos pubsub.subscriptions.getIamPolicy y pubsub.subscriptions.setIamPolicy.
- Llavero Kms:
- Propietario: acceso completo a todos los recursos.
- Administrador de Cloud KMS: permite la gestión de recursos criptográficos.
- Personalizado: agregue los permisos cloudkms.keyRings.getIamPolicy y cloudkms.keyRings.getIamPolicy.
- Clave criptográfica de Kms:
- Propietario: acceso completo a todos los recursos.
- Administrador de Cloud KMS: permite la gestión de criptorecursos.
- Personalizado: agregue los permisos cloudkms.cryptoKeys.getIamPolicy y cloudkms.cryptoKeys.setIamPolicy.
- Gerente Secreto:
- Administrador de Secret Manager: acceso completo para administrar Secret Manager.
- Personalizado: agregue los permisos secretmanager.secrets.getIamPolicy y secretmanager.secrets.setIamPolicy.
- Zona DNS:
- Administrador de DNS: acceso completo para administrar la zona DNS.
- Personalizado: agregue los permisos dns.managedZones.setIamPolicy, dns.managedZones.list y dns.managedZones.getIamPolicy.
Instalar
Terraformar
Asegúrese de tener la versión correcta de Terraform >= 1.3
Complementos de Terraform
Asegúrese de tener los complementos compilados en $HOME/.terraform.d/plugins/
- proveedor-terraform-google >= 5.37
- proveedor-terraform-google-beta >= 5.37
Consulte la página de cada complemento para obtener más información sobre cómo compilarlos y usarlos.