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:
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 proyectoSA_NAME: el nombre de la cuenta de servicio
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_CLASSson:stdpara la clase de almacenamientoStandard
- Los valores de
SUBJECT_TYPEson los siguientes:userpara el usuariosapara ServiceAccount
SUBJECT_HASHes el hash SHA256 codificado en base32 del nombre del asunto.
Por ejemplo, el usuario bob@foo.com tiene dos secretos llamados:
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.
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]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-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdjaRecibirás un resultado similar al siguiente:
data: access-key-id: MEhYM08wWUMySjcyMkVKTFBKRU8= create-time: MjAyMi0wNy0yMiAwMTowODo1OS40MTQyMTE3MDMgKzAwMDAgVVRDIG09KzE5OTAuMzQ3OTE2MTc3 secret-access-key: Ump0MVRleVN4SmhCSVJhbmlnVDAwbTJZc0IvRlJVendqR0JuYVhiVA==Decodifica el ID de la clave de acceso y el secreto:
echo "MEhYM08wWUMySjcyMkVKTFBKRU8=" | base64 -d \ && echo \ && echo "Ump0MVRleVN4SmhCSVJhbmlnVDAwbTJZc0IvRlJVendqR0JuYVhiVA==" | base64 -dRecibirás un resultado similar al siguiente:
0HX3O0YC2J722EJLPJEO Rjt1TeySxJhBIRanigT00m2YsB/FRUzwjGBnaXbTSigue 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.
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"))'Luego, puedes buscar manualmente los nombres secretos enumerados o usar
greppara encontrarobject-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)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:
- get
- list
- watch
Permisos de almacenamiento de objetos de S3:
- GetObject
- GetObjectAcl
- GetObjectLegalHold
- GetObjectRetention
- GetObjectTagging
- GetObjectVersion
- GetObjectVersionTagging
- ListBucket
- ListBucketVersions
- ListBucketMultipartUploads
- 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:
- AbortMultipartUpload
- DeleteObject
- DeleteObjectTagging
- DeleteObjectVersion
- DeleteObjectVersionTagging
- PutObject
- PutObjectTagging
- PutObjectVersionTagging
- PutOverwriteObject
- 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:
- Crear
- Actualizar
- Borrar