Conceder y obtener acceso a segmentos de almacenamiento de proyectos

En esta página se explica cómo gestionar el acceso a los contenedores de almacenamiento de los proyectos aislados de Google Distributed Cloud (GDC) para que las personas adecuadas tengan los permisos correctos. En él se explican los requisitos previos y los pasos para obtener y conceder acceso a usuarios y cuentas de servicio mediante vinculaciones de roles y roles predefinidos. Esta información te permite controlar de forma eficaz el acceso a tus recursos de almacenamiento y mantener tanto la seguridad como la eficiencia operativa.

Esta página está dirigida a audiencias como administradores de TI del grupo de operadores de infraestructuras o desarrolladores del grupo de operadores de aplicaciones que gestionan la configuración de acceso de los contenedores de almacenamiento en entornos aislados de GDC. Para obtener más información, consulta Audiencias de la documentación de GDC air-gapped.

Antes de empezar

Un espacio de nombres de proyecto gestiona los recursos de los contenedores en el servidor de la API Management. Debes tener un proyecto para trabajar con los contenedores y los objetos.

Conceder acceso al segmento

Puedes proporcionar acceso a un segmento a otros usuarios o cuentas de servicio creando y aplicando RoleBindings con roles predefinidos en el servidor de la API Management.

Funciones predefinidas

  • project-bucket-object-viewer: permite a un usuario enumerar todos los segmentos del proyecto, enumerar los objetos de esos segmentos y leer objetos y metadatos de objetos. No te permite escribir operaciones en objetos. Por ejemplo, subir, sobrescribir o eliminar. Tiene acceso de solo lectura a los segmentos de doble zona de la organización y sus proyectos, así como a los objetos de esos segmentos.

  • project-bucket-object-admin: permite a un usuario enumerar todos los segmentos del proyecto y realizar operaciones de lectura y escritura en objetos. Por ejemplo, subir, sobrescribir o eliminar. Tiene acceso de solo lectura a los segmentos de doble zona de la organización y sus proyectos, así como acceso de lectura y escritura a los objetos de esos segmentos.

  • project-bucket-admin: permite a los usuarios gestionar todos los contenedores del espacio de nombres dado, así como todos los objetos de esos contenedores. Tiene acceso de solo lectura a los segmentos de doble zona de la organización y sus proyectos, así como acceso de lectura y escritura a los objetos de esos segmentos.

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

Pide al administrador de gestión de identidades y accesos de tu proyecto que te conceda permisos para crear RoleBindings. A continuación, se muestra un ejemplo de cómo crear un RoleBinding para conceder acceso a un usuario y a 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: NAMESPACE_NAME
      name: readwrite-all-buckets
    roleRef:
      kind: Role
      name: project-bucket-object-admin
      apiGroup: rbac.authorization.k8s.io
    subjects:
    - kind: ServiceAccount
      namespace: NAMESPACE_NAME
      name: SA_NAME
    - kind: User
      namespace: NAMESPACE_NAME
      name: bob@example.com
      apiGroup: rbac.authorization.k8s.io
      # Could be bob or bob@example.com based on your organization settings.
    
  2. Aplica el archivo YAML:

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

Obtener credenciales de acceso al segmento

Cuando concedas acceso a un segmento, se crearán las credenciales de acceso en un secreto.

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

  • Los valores de STORAGE_CLASS son los siguientes:
    • 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

Obtener acceso de usuario

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

  1. Ejecuta el siguiente comando para encontrar el nombre del 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-nl-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja,object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja]        [get]
    
  2. Obtén el contenido del secreto correspondiente para acceder a los segmentos de 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 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 las instrucciones de la sección Configurar gcloud CLI con la información resultante.

Obtener acceso a la cuenta de servicio

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

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

    kubectl get -n=<PROJECT-NAME> serviceaccount <SA-NAME> -o json | jq -r '.secrets[] | select(.name | test("object-storage-key-std"))'
    
  2. Después, puedes buscar manualmente los nombres de los secretos que aparecen en la lista o usar grep para encontrar object-storage-key-(std|nl). Para la segunda 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 rol predefinidos

Los roles predefinidos están disponibles en el servidor de la API global para el acceso administrativo y operativo a los segmentos de doble zona. Estos roles también conceden acceso a los contenedores 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 el artículo sobre cómo conceder y revocar acceso.

Permisos project-bucket-object-viewer

Este rol concede permisos para obtener y enumerar objetos y metadatos de objetos en el segmento.

A continuación, se muestra una lista de todos los permisos de almacenamiento de objetos que concede el rol visor de objetos de proyecto, segmento y objeto Role:

  • Permisos de la API de cubos:

    1. get
    2. list
    3. ver
  • 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 project-bucket-object-admin

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

A continuación, se muestra una lista de todos los permisos de almacenamiento de objetos adicionales que concede el rol:

  • 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 global-project-bucket-object-viewer

Este rol concede permisos para obtener y enumerar objetos y metadatos de objetos en segmentos de dos zonas.

A continuación, se muestra una lista de todos los permisos de almacenamiento de objetos que concede el rol global-project-bucket-object-viewer Role:

  • Permisos de la API de cubos:

    1. get
    2. list
    3. ver
  • 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 global-project-bucket-object-admin

Este rol concede permisos para colocar y eliminar objetos, versiones de objetos y etiquetas en segmentos de dos zonas. Además, también concede todos los permisos de global-project-bucket-object-viewer.

A continuación, se muestra una lista de todos los permisos de almacenamiento de objetos adicionales que concede Role:

  • 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 global-project-bucket-admin

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

A continuación, se incluye una lista de permisos adicionales que concede Role:

  • Permisos de la API de cubos:

    1. Crear
    2. Actualizar
    3. Eliminar

Permisos project-bucket-admin

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

A continuación, se incluye una lista de permisos adicionales que concede el rol:

  • Permisos de la API de cubos:

    1. Crear
    2. Actualizar
    3. Eliminar