Nesta página, explicamos como gerenciar o acesso a buckets de armazenamento em projetos 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. Para mais informações, consulte Públicos-alvo para documentação isolada 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 no servidor da API Management.
Papéis predefinidos
project-bucket-object-viewer::permite que um usuário liste todos os buckets no projeto, liste objetos nesses buckets e leia objetos e metadados de objetos. Não é possível gravar operações em objetos. Por exemplo, upload, substituição e exclusão. Tem acesso somente leitura a buckets de duas zonas na organização e nos projetos dela, bem como acesso somente leitura aos objetos nesses buckets.
project-bucket-object-admin::permite que um usuário liste todos os buckets no projeto e faça operações de leitura e gravação em objetos. Por exemplo, upload, substituição e exclusão. Tem acesso somente leitura a buckets de duas zonas na organização e nos projetos dela, além de acesso de leitura/gravação aos objetos nesses buckets.
project-bucket-admin::permite que os usuários gerenciem todos os buckets no namespace especificado, bem como todos os objetos nesses buckets. Tem acesso somente leitura a buckets de duas zonas na organização e nos projetos dela, além de acesso de leitura/gravação aos objetos nesses buckets.
Para conferir uma lista completa das permissões concedidas para os papéis anteriores, consulte a seção permissões de papéis predefinidos.
Peça ao administrador do IAM do projeto para conceder permissões de criação de RoleBindings. 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
.# 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.
Aplique o arquivo YAML:
kubectl apply \ -f rolebinding-object-admin-all-buckets.yaml
Receber credenciais de acesso ao bucket
Depois de conceder acesso a um bucket, as credenciais de acesso são criadas em um secret.
O formato do nome do secret é object-storage-key-STORAGE_CLASS-SUBJECT_TYPE-SUBJECT_HASH
.
- Os valores para
STORAGE_CLASS
são:std
para a classe de armazenamentoStandard
.
- Os valores para
SUBJECT_TYPE
são:user
para o usuário.sa
para ServiceAccount.
SUBJECT_HASH
é o hash SHA256 codificado em base32 do nome do assunto.
Por exemplo, o usuário bob@foo.com
tem um secret chamado:
object-storage-key-std-user-l74gbpyrsbmwy4mivocr3nur6dzrnhcfhe3otyplul42i732aama
Receber credenciais de acesso do usuário
Para um usuário, o Secret está no namespace object-storage-access-keys
no servidor da API Management.
Execute o comando a seguir para listar os recursos Secret que você tem permissão para visualizar no namespace
object-storage-access-keys
:kubectl auth can-i --list --namespace object-storage-access-keys
OBSERVAÇÃO: se você for um administrador com permissão para ver todos os recursos Secret ou representar outros usuários, execute um dos seguintes comandos para encontrar o nome dos Secrets de um usuário especificado:
Liste todos os secrets pertencentes a um usuário 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'
Represente um usuário para ver quais secrets ele pode acessar:
export USER_NAME=bob@example.com kubectl auth can-i --list --namespace object-storage-access-keys --as "${USER_NAME:?}"
Se você puder ver algum secret nesse namespace, vai aparecer uma saída que contém um nome de secret semelhante a este:
object-storage-key-std-user-l74gbpyrsbmwy4mivocr3nur6dzrnhcfhe3otyplul42i732aama
Receba o conteúdo do secret correspondente:
kubectl get -o yaml --namespace object-storage-access-keys secret object-storage-key-std-user-l74gbpyrsbmwy4mivocr3nur6dzrnhcfhe3otyplul42i732aama
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 o segredo:
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 a CLI gdcloud com as informações resultantes.
Obter acesso à conta de serviço
Para um assunto de conta de serviço (SA, na sigla em inglês), o secret é criado no mesmo namespace da conta de serviço.
Execute o comando a seguir para verificar se é possível receber e listar recursos Secret no namespace. Se não for possível, entre em contato com o administrador:
export SA_NAMESPACE=NAMESPACE_NAME
kubectl auth can-i --list --namespace $SA_NAMESPACE
Para encontrar o nome do Secret, execute:
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'
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 ou arquivos.
Permissões de função predefinidas
Os papéis predefinidos também estão disponíveis no servidor global da API para acesso administrativo e operacional a buckets de duas zonas.
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.
A lista de todas as permissões de armazenamento de objetos concedidas pelo verbo project-bucket-object-viewer é a seguinte:
Permissões da API de bucket:
- get
- list
- assistir
Permissões de armazenamento de objetos do S3:
- GetBucketVersioning
- GetObject
- GetObjectAcl
- GetObjectLegalHold
- GetObjectRetention
- GetObjectTagging
- GetObjectVersion
- GetObjectVersionTagging
- ListBucket
- ListBucketVersions
- ListBucketMultipartUploads
- ListMultipartUploadParts
permissões de administrador de objetos e buckets do projeto
Essa função 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
.
Uma lista de todas as permissões extras de armazenamento de objetos que a função concede:
Permissões de armazenamento de objetos do S3:
- AbortMultipartUpload
- DeleteObject
- DeleteObjectTagging
- DeleteObjectVersion
- DeleteObjectVersionTagging
- PutObject
- PutObjectTagging
- PutObjectVersionTagging
- PutOverwriteObject
- RestoreObject
permissões de administrador de bucket do projeto
Essa função concede permissões para criar, atualizar ou excluir recursos de bucket no namespace do projeto. Além disso, ela também concede todas as permissões em
project-bucket-object-admin
.
Confira abaixo uma lista de outras permissões concedidas pelo papel:
Permissões da API de bucket:
- Criar
- Atualizar
- Delete