Nesta página, mostramos como gerenciar o acesso a buckets de armazenamento em projetos de dispositivos isolados do Google Distributed Cloud (GDC) para que as pessoas certas tenham as permissões adequadas. Ele aborda os pré-requisitos e as etapas para conseguir e conceder acesso a contas de usuário e de serviço usando vinculações de função e papéis predefinidos. Com essas informações, você controla o acesso aos recursos de armazenamento e mantém a segurança e a eficiência operacional.
Esta página é destinada a públicos-alvo como administradores de TI no grupo de operadores de infraestrutura ou desenvolvedores no grupo de operadores de aplicativos que gerenciam configurações de acesso para buckets de armazenamento em ambientes isolados do GDC.
Antes de começar
Um namespace de projeto gerencia recursos de bucket no servidor da API Management. Você precisa ter um projeto para trabalhar com buckets e objetos.
Conceder acesso ao bucket
É possível conceder acesso ao bucket a outros usuários ou contas de serviço criando e aplicando RoleBindings com papéis predefinidos.
Papéis predefinidos
project-bucket-object-viewer::permite que um usuário liste todos os buckets do projeto, os objetos nesses buckets e leia objetos e metadados de objetos. Essa função não permite operações de gravação em objetos, como upload, substituição ou exclusão.
project-bucket-object-admin::esse papel permite que um usuário liste todos os buckets no projeto e faça operações de leitura e gravação em objetos, como upload, substituição ou exclusão.
project-bucket-admin::permite que os usuários gerenciem todos os buckets no namespace especificado, bem como todos os objetos nesses buckets.
Para conferir uma lista completa das permissões concedidas para esses papéis, consulte a seção permissões de papéis predefinidos.
Para receber as permissões necessárias para criar vinculações de função do projeto,
peça ao administrador do IAM do projeto para conceder a você a função de administrador do IAM do projeto
(project-iam-admin
).
Confira um exemplo de criação de um RoleBinding
para conceder acesso a um usuário e uma conta de serviço:
Crie um arquivo YAML no seu 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 ```
Aplique o arquivo YAML:
kubectl apply \ -f rolebinding-object-admin-all-buckets.yaml
Receber credenciais de acesso ao bucket
Quando você concede acesso a um bucket, as credenciais de acesso são criadas em um Secret.
O formato do nome do secret é object-storage-key-std-SUBJECT_TYPE-SUBJECT_HASH
.
- Os valores para
SUBJECT_TYPE
são:user
: o usuário.sa
: oServiceAccount
.
SUBJECT_HASH
é o hash SHA256 codificado em base32 do nome do assunto.
Por exemplo, o usuário bob@foo.com
tem o secret chamado:
object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja
Acessar a chave secreta do usuário
Para um usuário, o Secret está no namespace object-storage-access-keys
no servidor da API Management.
Encontre o nome do secret:
kubectl auth can-i --list --namespace object-storage-access-keys | grep object-storage-key-std
Você vai receber uma saída parecida com esta:
secrets [] [object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja,object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja] [get]
Receba o conteúdo do secret correspondente para acessar os buckets:
kubectl get -o yaml --namespace object-storage-access-keys secret object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja
Você vai receber uma saída parecida com esta:
data: access-key-id: MEhYM08wWUMySjcyMkVKTFBKRU8= create-time: MjAyMi0wNy0yMiAwMTowODo1OS40MTQyMTE3MDMgKzAwMDAgVVRDIG09KzE5OTAuMzQ3OTE2MTc3 secret-access-key: Ump0MVRleVN4SmhCSVJhbmlnVDAwbTJZc0IvRlJVendqR0JuYVhiVA==
Decodifique o ID da chave de acesso e a chave secreta:
echo "MEhYM08wWUMySjcyMkVKTFBKRU8=" | base64 -d \ && echo \ && echo "Ump0MVRleVN4SmhCSVJhbmlnVDAwbTJZc0IvRlJVendqR0JuYVhiVA==" | base64 -d
Você vai receber uma saída parecida com esta:
0HX3O0YC2J722EJLPJEO Rjt1TeySxJhBIRanigT00m2YsB/FRUzwjGBnaXbT
Siga a seção Configurar s3cmd com as informações resultantes.
Acessar o secret da conta de serviço
Para um assunto de conta de serviço (SA), o secret é criado no mesmo namespace da conta de serviço. Para encontrar o nome, execute:
kubectl get --namespace NAMESPACE_NAME secrets -o=jsonpath=
'{.items[?(@.metadata.annotations.object\.gdc\.goog/subject=="SA_NAME")].metadata.name}'
Você vai receber uma saída parecida com esta:
object-storage-key-std-sa-mng3olp3vsynhswzasowzu3jgzct2ert72pjp6wsbzqhdwckwzbq
É possível fazer referência ao Secret no pod como variáveis de ambiente (https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-environment-variables) ou arquivos (https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-files-from-a-pod).
Permissões de função predefinidas
Ao trabalhar com armazenamento de objetos, talvez seja necessário solicitar os seguintes papéis.
Permissões de visualizador de objetos de bucket do projeto
Essa função concede permissões para receber e listar objetos e metadados de objetos no bucket.
O papel project-bucket-object-viewer
tem estas permissões:
Permissões da API de bucket:
- Get
- Lista
- ASSISTIR
Permissões de armazenamento de objetos do S3:
GetObject
GetObjectAcl
GetObjectVersion
ListBucket
ListBucketVersions
ListBucketMultipartUploads
ListMultipartUploadParts
permissões de administrador de objetos e buckets do projeto
Esse papel concede permissões para inserir e excluir objetos, versões de objetos e tags no bucket. Além disso, ela também concede todas as permissões em project-bucket-object-viewer
.
O papel project-bucket-object-admin
tem as seguintes permissões de armazenamento de objetos:
Permissões de armazenamento de objetos do S3:
AbortMultipartUpload
DeleteObject
PutObject
permissões de administrador de bucket do projeto
Essa função concede permissões para criar, atualizar ou excluir recursos Bucket
no namespace do projeto. Além disso, ela também concede todas as permissões em
project-bucket-object-admin
.
O papel project-bucket-object-admin
tem estas permissões:
Permissões da API de bucket:
- Criar
- Atualizar
- Delete