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:
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.
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 almacenamientoStandard
.
- Los valores de
SUBJECT_TYPE
son los siguientes:user
para User.sa
para ServiceAccount.
SUBJECT_HASH
es el hash SHA256 codificado en base32 del nombre del asunto.
Por ejemplo, el usuario bob@foo.com
tiene un secreto llamado:
object-storage-key-std-user-l74gbpyrsbmwy4mivocr3nur6dzrnhcfhe3otyplul42i732aama
Obtener credenciales de 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.
Ejecuta el siguiente comando para enumerar los recursos Secret que tienes permiso para ver en el espacio de nombres
object-storage-access-keys
:kubectl auth can-i --list --namespace object-storage-access-keys
NOTA: Si eres administrador y tienes permiso para ver todos los recursos Secret o suplantar la identidad de otros usuarios, puedes ejecutar uno de los siguientes comandos para encontrar el nombre de los secretos de un usuario específico:
Lista todos los secretos que pertenecen a un usuario específico:
export USER_NAME=bob@example.com kubectl get secrets --namespace object-storage-access-keys -o json | jq -r --arg USER_NAME "${USER_NAME:?}" '.items[] | select( (.metadata.annotations."object.gdc.goog/subject"==$USER_NAME)) | .metadata.name'
Suplantar la identidad de un usuario para ver qué secretos puede ver:
export USER_NAME=bob@example.com kubectl auth can-i --list --namespace object-storage-access-keys --as "${USER_NAME:?}"
Si puedes ver algún secreto en este espacio de nombres, deberías ver un resultado que contenga un nombre de secreto similar al siguiente:
object-storage-key-std-user-l74gbpyrsbmwy4mivocr3nur6dzrnhcfhe3otyplul42i732aama
Obtén el contenido del secreto correspondiente:
kubectl get -o yaml --namespace object-storage-access-keys secret object-storage-key-std-user-l74gbpyrsbmwy4mivocr3nur6dzrnhcfhe3otyplul42i732aama
Recibirás un resultado similar al siguiente:
data: access-key-id: MEhYM08wWUMySjcyMkVKTFBKRU8= create-time: MjAyMi0wNy0yMiAwMTowODo1OS40MTQyMTE3MDMgKzAwMDAgVVRDIG09KzE5OTAuMzQ3OTE2MTc3 secret-access-key: Ump0MVRleVN4SmhCSVJhbmlnVDAwbTJZc0IvRlJVendqR0JuYVhiVA==
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
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, el secreto se crea en el mismo espacio de nombres que la cuenta de servicio.
Ejecuta el siguiente comando para verificar que puedes obtener y enumerar recursos Secret en el espacio de nombres. Si no es así, ponte en contacto con tu administrador:
export SA_NAMESPACE=NAMESPACE_NAME
kubectl auth can-i --list --namespace $SA_NAMESPACE
Para encontrar el nombre del secreto, ejecuta el siguiente comando:
export SA_NAME=SA_NAME
kubectl get secrets --namespace $SA_NAMESPACE -o json | jq -r --arg USER_NAME "${SA_NAME:?}" '.items[] | select( (.metadata.annotations."object.gdc.goog/subject"==$USER_NAME)) | .metadata.name'
Recibirás un resultado similar al siguiente:
object-storage-key-std-sa-mng3olp3vsynhswzasowzu3jgzct2ert72pjp6wsbzqhdwckwzbq
Puedes hacer referencia al secreto en tu pod como variables de entorno o archivos.
Permisos de rol predefinidos
Ten en cuenta que también hay roles predefinidos disponibles en el servidor de la API global para el acceso administrativo y operativo a los contenedores de doble zona.
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 verbo project-bucket-object-viewer:
Permisos de la API de cubos:
- get
- list
- ver
Permisos de almacenamiento de objetos de S3:
- GetBucketVersioning
- GetObject
- GetObjectAcl
- GetObjectLegalHold
- GetObjectRetention
- GetObjectTagging
- GetObjectVersion
- GetObjectVersionTagging
- ListBucket
- ListBucketVersions
- ListBucketMultipartUploads
- 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:
- AbortMultipartUpload
- DeleteObject
- DeleteObjectTagging
- DeleteObjectVersion
- DeleteObjectVersionTagging
- PutObject
- PutObjectTagging
- PutObjectVersionTagging
- PutOverwriteObject
- RestoreObject
Permisos project-bucket-admin
Este rol otorga permisos para crear, actualizar o eliminar recursos de segmento 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:
- Crear
- Actualizar
- Eliminar