Otorga y obtén acceso a bucket de almacenamiento para proyectos

En esta página, se explica cómo administrar el acceso a los buckets de almacenamiento en proyectos aislados de Google Distributed Cloud (GDC), de modo que las personas adecuadas tengan los permisos correctos. Se abarcan los requisitos previos y los pasos para obtener y otorgar acceso a usuarios y cuentas de servicio mediante vinculaciones de roles y roles predefinidos. Esta información te permite controlar de manera eficaz el acceso a tus recursos de almacenamiento y mantener la seguridad y la eficiencia operativa.

Esta página está destinada a públicos como administradores de TI dentro del grupo de operadores de infraestructura o desarrolladores dentro del grupo de operadores de aplicaciones que administran la configuración de acceso para los buckets de almacenamiento en entornos aislados de GDC. Para obtener más información, consulta Públicos de la documentación de Google Distributed Cloud aislado.

Antes de comenzar

Un espacio de nombres del proyecto administra los recursos del bucket en el servidor de la API de Management. Debes tener un proyecto para trabajar con buckets y objetos.

Otorga acceso al bucket

Puedes proporcionar acceso al bucket a otros usuarios o cuentas de servicio mediante la creación y aplicación de RoleBindings con roles predefinidos en el servidor de la API de Management.

Funciones predefinidas

  • project-bucket-object-viewer: Permite que un usuario enumere todos los buckets del proyecto, los objetos de esos buckets y que lea los objetos y los metadatos de objetos. No te permite escribir operaciones en objetos. Por ejemplo, subir, reemplazar y borrar. Tiene acceso de solo lectura a los buckets de zona doble dentro de la organización y sus proyectos, así como acceso de solo lectura a los objetos de esos buckets.

  • project-bucket-object-admin: Permite que un usuario enumere todos los buckets del proyecto y que escriba y lea operaciones en objetos. Por ejemplo, subir, reemplazar y borrar. Tiene acceso de solo lectura a los buckets de zona doble dentro de la organización y sus proyectos, así como acceso de lectura y escritura a los objetos de esos buckets.

  • project-bucket-admin: Permite que los usuarios administren todos los buckets en el espacio de nombres determinado, así como todos los objetos de esos buckets. Tiene acceso de solo lectura a los buckets de zona doble dentro de la organización y sus proyectos, así como acceso de lectura y escritura a los objetos de esos buckets.

Para ver una lista completa de los permisos otorgados para los roles anteriores, consulta la sección Permisos de roles predefinidos.

Debes tener el rol de administrador de IAM del proyecto para crear vinculaciones de roles en ese proyecto. A continuación, se muestra un ejemplo de cómo crear un recurso RoleBinding que otorga acceso a un usuario y una cuenta de servicio:

  1. Crea un archivo YAML en tu sistema, como rolebinding-object-admin-all-buckets.yaml.

    # Example file name:
    # rolebinding-object-admin-all-buckets.yaml
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      namespace: PROJECT_NAMESPACE
      name: readwrite-all-buckets
    roleRef:
      kind: Role
      name: project-bucket-object-admin
      apiGroup: rbac.authorization.k8s.io
    subjects:
    - kind: ServiceAccount
      namespace: PROJECT_NAMESPACE
      name: SA_NAME
    - kind: User
      namespace: PROJECT_NAMESPACE
      name: bob@example.com
      apiGroup: rbac.authorization.k8s.io
      # Could be bob or bob@example.com based on your organization settings.
    

    Reemplaza lo siguiente:

    • PROJECT_NAMESPACE: el nombre del espacio de nombres del proyecto
    • SA_NAME: el nombre de la cuenta de servicio

  2. Aplica el archivo YAML:

    kubectl apply \
    -f rolebinding-object-admin-all-buckets.yaml
    

Obtén credenciales de acceso al bucket

Una vez que otorgas acceso a un bucket, se crean las credenciales de acceso en un secreto.

El formato del nombre secreto es object-storage-key-STORAGE_CLASS-SUBJECT_TYPE-SUBJECT_HASH.

  • Los valores de STORAGE_CLASS son:
    • std para la clase de almacenamiento Standard
  • Los valores de SUBJECT_TYPE son los siguientes:
    • user para el usuario
    • sa para ServiceAccount
  • SUBJECT_HASH es el hash SHA256 codificado en base32 del nombre del asunto.

Por ejemplo, el usuario bob@foo.com tiene dos secretos llamados:

  1. object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja

Obtén acceso de usuario

Para un asunto de usuario, el secreto se encuentra en el object-storage-access-keys espacio de nombres en el servidor de la API de Management.

  1. Ejecuta el siguiente comando para encontrar el nombre secreto:

    kubectl auth can-i --list --namespace object-storage-access-keys | grep "object-storage-key-"
    

    Recibirás un resultado similar al siguiente:

    secrets        []        [object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja]        [get]
    
  2. Obtén el contenido del secreto correspondiente para acceder a los buckets en la clase de almacenamiento Standard:

    kubectl get -o yaml --namespace object-storage-access-keys secret object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja
    

    Recibirás un resultado similar al siguiente:

    data:
      access-key-id: MEhYM08wWUMySjcyMkVKTFBKRU8=
      create-time: MjAyMi0wNy0yMiAwMTowODo1OS40MTQyMTE3MDMgKzAwMDAgVVRDIG09KzE5OTAuMzQ3OTE2MTc3
      secret-access-key: Ump0MVRleVN4SmhCSVJhbmlnVDAwbTJZc0IvRlJVendqR0JuYVhiVA==
    
  3. Decodifica el ID de la clave de acceso y el secreto:

    echo "MEhYM08wWUMySjcyMkVKTFBKRU8=" | base64 -d \
        && echo \
        && echo "Ump0MVRleVN4SmhCSVJhbmlnVDAwbTJZc0IvRlJVendqR0JuYVhiVA==" | base64 -d
    

    Recibirás un resultado similar al siguiente:

    0HX3O0YC2J722EJLPJEO
    Rjt1TeySxJhBIRanigT00m2YsB/FRUzwjGBnaXbT
    
  4. Sigue la sección Configura la CLI de gdcloud con la información resultante.

Obtén acceso a la cuenta de servicio

Para un asunto de cuenta de servicio (SA), busca el nombre secreto en el clúster de usuario.

  1. Para la clase de almacenamiento estándar, ejecuta el siguiente comando para obtener el nombre secreto:

    kubectl get -n=<PROJECT-NAME> serviceaccount <SA-NAME> -o json | jq -r '.secrets[] | select(.name | test("object-storage-key-std"))'
    
  2. Luego, puedes buscar manualmente los nombres secretos enumerados o usar grep para encontrar object-storage-key-(std|nl). Para la última opción, ejecuta lo siguiente:

    kubectl get -n=<PROJECT-NAME> serviceaccount <SA-NAME> -o=jsonpath='{.secrets}{"\n"}' | grep object-storage-key-(std|nl)
    
  3. Puedes hacer referencia al secreto en tu pod como variables de entorno o archivos.

Permisos de roles preestablecidos

Los roles predefinidos están disponibles en el servidor de la API global para el acceso administrativo y operativo a los buckets de zona doble. Estos roles también otorgan acceso a los buckets zonales, pero solo si se usa un recurso IAMRoleBinding en lugar de un recurso RoleBinding o ClusterRoleBinding. Para obtener más información sobre las vinculaciones de roles, consulta Otorga y revoca el acceso.

Permisos de project-bucket-object-viewer

Este rol otorga permisos para obtener y enumerar objetos y metadatos de objetos en el bucket.

La siguiente es una lista de todos los permisos de almacenamiento de objetos que otorga el project-bucket-object-viewer Role

  • Permisos de la API de Bucket:

    1. get
    2. list
    3. watch
  • Permisos de almacenamiento de objetos de S3:

    1. GetObject
    2. GetObjectAcl
    3. GetObjectLegalHold
    4. GetObjectRetention
    5. GetObjectTagging
    6. GetObjectVersion
    7. GetObjectVersionTagging
    8. ListBucket
    9. ListBucketVersions
    10. ListBucketMultipartUploads
    11. ListMultipartUploadParts

Permisos de project-bucket-object-admin

Este rol otorga permisos para colocar y borrar objetos, y versiones y etiquetas de objetos en el bucket. Además, también otorga todos los permisos en el project-bucket-object-viewer.

La siguiente es una lista de todos los permisos adicionales de almacenamiento de objetos que el Role otorga son los siguientes:

  • Permisos de almacenamiento de objetos de S3:

    1. AbortMultipartUpload
    2. DeleteObject
    3. DeleteObjectTagging
    4. DeleteObjectVersion
    5. DeleteObjectVersionTagging
    6. PutObject
    7. PutObjectTagging
    8. PutObjectVersionTagging
    9. PutOverwriteObject
    10. RestoreObject

Permisos de project-bucket-admin

Este rol otorga permisos para crear, actualizar o borrar recursos Bucket en el espacio de nombres del proyecto. Además, también otorga todos los permisos en project-bucket-object-admin.

La siguiente es una lista de permisos adicionales que el Role otorga:

  • Permisos de la API de Bucket:

    1. Crear
    2. Actualizar
    3. Borrar