es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo configurar los permisos del cubo de GCS con Terraform?

Quiero establecer permisos para la cuenta de servicio sa-email.com en el bucket bucket_A.

¿Cómo puedo configurar lo siguiente con Terraform?
1. sa-email.com puede crear archivos en el bucket A.
2. sa-email.com no puede eliminar archivos en el bucket A.

ACTUALIZACIÓN:
Ahora en mi proyecto, sa-email es Administrador de Objetos de Almacenamiento.

resource "google_project_iam_member" "aaaa" {
    member  = "sa-email.com"
    project = "pid"
    role    = "roles/storage.objectAdmin"
}

Tengo alrededor de 20 buckets en mi proyecto.
Solo quiero cambiar los permisos para un bucket.
¿Tengo que usar googlestoragebucketiammember para configurar los 20 buckets?
¿Existe alguna forma de hacer solo una pequeña actualización?

ACTUALIZACIÓN 2:
Mi solución es:
Utilizar googleprojectiam_member con “condición”.

resource "google_project_iam_member" "aaaa" {
    member  = "sa-email.com"
    project = "pid"
    role    = "roles/storage.objectAdmin"
    condition {
        title      = "bucket can delete"
        expression = "!resource.name.startsWith(\"projects/_/buckets/bucket_can_not_delete\")"
    }
}

resource "google_project_iam_member" "bbbb" {
    member  = "sa-email.com"
    project = "pid"
    role    = "roles/storage.objectCreator"
    condition {
        title      = "bucket can not delete"
        expression = "resource.name.startsWith(\"projects/_/buckets/bucket_can_not_delete\")"
    }
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para establecer permisos para la cuenta de servicio sa-email.com en el bucket bucket_A con Terraform, puedes utilizar los recursos google_storage_bucket_iam_binding y google_storage_bucket_iam_member.

    Para permitir que sa-email.com cree archivos en bucket_A, puedes usar el recurso google_storage_bucket_iam_binding con el rol “roles/storage.objectCreator”:

    resource "google_storage_bucket_iam_binding" "bucket_A_creator_binding" {
      bucket = "bucket_A"
      members = ["serviceAccount:sa-email.com"]
      role = "roles/storage.objectCreator"
    }
    

    Para evitar que sa-email.com elimine archivos en bucket_A, puedes usar el recurso google_storage_bucket_iam_member con el rol “roles/storage.objectAdmin” y agregar una condición para limitar el acceso de eliminación a otros buckets:

    resource "google_storage_bucket_iam_member" "bucket_A_admin_member" {
      bucket = "bucket_A"
      member = "serviceAccount:sa-email.com"
      role = "roles/storage.objectAdmin"
    
      condition {
        title      = "solo puede eliminar bucket_A"
        expression = "resource.name == 'projects/_/buckets/bucket_A/*'"
      }
    }
    

    Si tienes múltiples buckets pero solo deseas cambiar los permisos para un bucket, puedes usar enlaces condicionales para limitar el efecto de los cambios. En este caso, puedes crear dos miembros IAM con condiciones opuestas, uno permitiendo la eliminación y otro evitándola:

    resource "google_storage_bucket_iam_member" "bucket_A_admin_member" {
      bucket = "bucket_A"
      member = "serviceAccount:sa-email.com"
      role = "roles/storage.objectAdmin"
    
      condition {
        title      = "solo puede eliminar bucket_A"
        expression = "resource.name == 'projects/_/buckets/bucket_A/*'"
      }
    }
    
    resource "google_storage_bucket_iam_member" "bucket_not_A_admin_member" {
      bucket = "bucket_not_A"
      member = "serviceAccount:sa-email.com"
      role = "roles/storage.objectAdmin"
    
      condition {
        title      = "no puede eliminar bucket_A"
        expression = "resource.name != 'projects/_/buckets/bucket_A/*'"
      }
    }
    

    Con esta configuración, sa-email.com tendrá acceso objectAdmin a todos los buckets excepto bucket_A, donde estará restringido al nivel del bucket utilizando la condición.

Comments are closed.