En esta página, se explica cómo administrar el acceso a los buckets de almacenamiento en los proyectos de dispositivos aislados de Google Distributed Cloud (GDC), de modo que las personas adecuadas tengan los permisos correctos. En esta guía, se explican los requisitos previos y los pasos para obtener y otorgar acceso a cuentas de usuario y de servicio con 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 los administradores de TI dentro del grupo de operadores de infraestructura o los 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.
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.
Cómo otorgar acceso al bucket
Puedes proporcionar acceso bucket a otros usuarios o cuentas de servicio creando y aplicando RoleBindings con roles predefinidos.
Funciones predefinidas
project-bucket-object-viewer: Este rol permite que un usuario enumere todos los buckets del proyecto, enumere los objetos de esos buckets y lea los objetos y los metadatos de objetos. Este rol no te permite realizar operaciones de escritura en objetos, como subirlos, reemplazarlos o borrarlos.
project-bucket-object-admin: Este rol permite que un usuario enumere todos los buckets del proyecto y realice operaciones de lectura y escritura en objetos, como subir, reemplazar o borrar.
project-bucket-admin: Este rol permite a los usuarios administrar todos los buckets en el espacio de nombres determinado, así como todos los objetos en esos buckets.
Para ver una lista completa de los permisos otorgados para estos roles, consulta la sección permisos de roles predeterminados.
Para obtener los permisos que necesitas para crear vinculaciones de roles del proyecto, pídele a tu administrador de IAM del proyecto que te otorgue el rol de administrador de IAM del proyecto (project-iam-admin
).
A continuación, se muestra un ejemplo de cómo crear un objeto RoleBinding
para otorgar acceso a un usuario y a una cuenta de servicio:
Crea un archivo YAML en tu sistema, como
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 # Could be bob or bob@example.com based on your organization settings. apiGroup: rbac.authorization.k8s.io ```
Aplica el archivo YAML:
kubectl apply \ -f rolebinding-object-admin-all-buckets.yaml
Obtén credenciales de acceso al bucket
Cuando otorgas acceso a un bucket, las credenciales de acceso se crean en un secreto.
El formato del nombre del secreto es object-storage-key-std-SUBJECT_TYPE-SUBJECT_HASH
.
- Los valores de
SUBJECT_TYPE
son los siguientes:user
: El usuariosa
: Es elServiceAccount
.
SUBJECT_HASH
es el hash SHA256 codificado en base32 del nombre del sujeto.
Por ejemplo, el usuario bob@foo.com
tiene el secreto llamado:
object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja
Accede al secreto del usuario
Para un usuario sujeto, el secreto se encuentra en el espacio de nombres object-storage-access-keys
en el servidor de la API de Management.
Busca el nombre del secreto:
kubectl auth can-i --list --namespace object-storage-access-keys | grep object-storage-key-std
Obtendrás un resultado similar al siguiente:
secrets [] [object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja,object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja] [get]
Obtén el contenido del Secret correspondiente para acceder a los buckets:
kubectl get -o yaml --namespace object-storage-access-keys secret object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja
Obtendrá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
Obtendrás un resultado similar al siguiente:
0HX3O0YC2J722EJLPJEO Rjt1TeySxJhBIRanigT00m2YsB/FRUzwjGBnaXbT
Sigue la sección Configura s3cmd con la información resultante.
Accede al secreto de la cuenta de servicio
En el caso de un sujeto de cuenta de servicio (SA), el secreto se crea en el mismo espacio de nombres que la cuenta de servicio. Para encontrar el nombre, ejecuta el siguiente comando:
kubectl get --namespace NAMESPACE_NAME secrets -o=jsonpath=
'{.items[?(@.metadata.annotations.object\.gdc\.goog/subject=="SA_NAME")].metadata.name}'
Obtendrás un resultado similar al siguiente:
object-storage-key-std-sa-mng3olp3vsynhswzasowzu3jgzct2ert72pjp6wsbzqhdwckwzbq
Puedes hacer referencia al Secret en tu Pod como variables de entorno (https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-environment-variables) o archivos (https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-files-from-a-pod).
Permisos de roles predeterminados
Cuando trabajes con el almacenamiento de objetos, es posible que debas solicitar los siguientes roles.
Permisos de project-bucket-object-viewer
Este rol otorga permisos para obtener y enumerar objetos, y los metadatos de los objetos en el bucket.
La función project-bucket-object-viewer
tiene los siguientes permisos:
Permisos de la API de Bucket:
- Obtener
- Lista
- Mirar
Permisos de almacenamiento de objetos de S3:
GetObject
GetObjectAcl
GetObjectVersion
ListBucket
ListBucketVersions
ListBucketMultipartUploads
ListMultipartUploadParts
Permisos de administrador de objetos y bucket del proyecto
Este rol otorga permisos para colocar y borrar objetos, versiones de objetos y etiquetas en el bucket. Además, también otorga todos los permisos en project-bucket-object-viewer
.
El rol project-bucket-object-admin
tiene los siguientes permisos de almacenamiento de objetos:
Permisos de almacenamiento de objetos de S3:
AbortMultipartUpload
DeleteObject
PutObject
Permisos de administrador de bucket del proyecto
Este rol otorga permisos para crear, actualizar o borrar recursos de Bucket
en el espacio de nombres del proyecto. Además, también otorga todos los permisos en project-bucket-object-admin
.
La función project-bucket-object-admin
tiene los siguientes permisos:
Permisos de la API de Bucket:
- Crear
- Actualizar
- Borrar