Esta página orienta você sobre 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. Ela aborda os pré-requisitos e as etapas para receber e conceder acesso de usuários e conta de serviço usando vinculações de papéis e papéis predefinidos. Essas informações permitem controlar o acesso aos recursos de armazenamento e manter 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 as configurações de acesso para buckets de armazenamento em ambientes GDC com isolamento físico. Para mais informações, consulte Públicos-alvo da documentação do GDC com isolamento físico.
Antes de começar
Um namespace do projeto gerencia recursos de bucket no servidor da API Management. É necessário ter um projeto para trabalhar com buckets e objetos.
Conceder acesso ao bucket
É possível conceder acesso a recursos da API S3, como buckets e objetos nesses buckets, a assuntos User e ServiceAccount criando e aplicando RoleBindings que fazem referência a 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 permite operações de gravação em objetos. Por exemplo: upload, substituição, exclusão. Tem acesso somente leitura a buckets de zona dupla 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 grave e leia operações em objetos. Por exemplo: upload, substituição, exclusão. Tem acesso somente leitura a buckets de zona dupla na organização e nos projetos dela, bem como acesso de leitura e 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 zona dupla na organização e nos projetos dela, bem como acesso de leitura e 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.
É necessário ter o papel de Administrador de IAM do projeto para criar vinculações de papéis nele. Confira abaixo um exemplo de como criar um recurso RoleBinding que concede acesso a um usuário e a 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: 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.Substitua:
PROJECT_NAMESPACE: o nome do namespace do projetoSA_NAME: o nome da conta de serviço
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, ele cria as credenciais de acesso em um secret. As credenciais são necessárias para configurar a CLI do Distributed Cloud e executar comandos para interagir com o bucket.
O formato do nome do secret é object-storage-key-STORAGE_CLASS-SUBJECT_TYPE-SUBJECT_HASH.
- Os valores de
STORAGE_CLASSsão:stdpara a classe de armazenamentoStandard.
- Os valores de
SUBJECT_TYPEsão:userpara o usuário.sapara a conta de serviço.
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 assunto de 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 de secret que você tem permissão para visualizar no namespace
object-storage-access-keys:kubectl auth can-i --list --namespace object-storage-access-keys | grep "object-storage-key-"Se você puder visualizar secrets nesse namespace, verá uma saída que contém um ou mais nomes de secret que começam com
object-storage-key-, semelhante a esta:secrets [] [object-storage-key-std-user-l74gbpyrsbmwy4mivocr3nur6dzrnhcfhe3otyplul42i732aama] [get]OBSERVAÇÃO: se você for um administrador com permissão para visualizar todos os recursos de secret ou representar outros usuários, poderá executar um dos comandos a seguir para encontrar o nome dos secrets de um usuário especificado:
Liste todos os secrets pertencentes a um usuário especificado:
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 conferir quais secrets ele pode visualizar:
export USER_NAME=bob@example.com kubectl auth can-i --list --namespace object-storage-access-keys --as "${USER_NAME:?} | grep "object-storage-key-"
Receba o conteúdo do secret correspondente:
kubectl get -o yaml --namespace object-storage-access-keys secret SECRET_NAMEVocê vai receber uma saída semelhante a esta:
data: access-key-id: MEhYM08wWUMySjcyMkVKTFBKRU8= create-time: MjAyMi0wNy0yMiAwMTowODo1OS40MTQyMTE3MDMgKzAwMDAgVVRDIG09KzE5OTAuMzQ3OTE2MTc3 secret-access-key: Ump0MVRleVN4SmhCSVJhbmlnVDAwbTJZc0IvRlJVendqR0JuYVhiVA==Decodifique o ID da chave de acesso e o secret:
echo "MEhYM08wWUMySjcyMkVKTFBKRU8=" | base64 -d \ && echo \ && echo "Ump0MVRleVN4SmhCSVJhbmlnVDAwbTJZc0IvRlJVendqR0JuYVhiVA==" | base64 -dVocê vai receber uma saída semelhante a esta:
0HX3O0YC2J722EJLPJEO Rjt1TeySxJhBIRanigT00m2YsB/FRUzwjGBnaXbTSiga a seção Configurar a CLI gdcloud com as informações resultantes.
Receber acesso à conta de serviço
As credenciais secretas do S3 só são criadas e ficam disponíveis para serem recebidas se um bucket existir no namespace do projeto.
Para um assunto de conta de serviço (SA), 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 de secret no namespace. Entre em contato com o administrador se esse não for o caso:
export SA_NAMESPACE=PROJECT_NAMESPACE
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 semelhante a 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 papéis predefinidos
Os papéis predefinidos também estão disponíveis no servidor da API global para acesso administrativo e operacional a buckets de zona dupla.
Permissões de project-bucket-object-viewer
Esse papel concede permissões para receber e listar objetos e metadados de objetos no bucket.
Confira abaixo uma lista de todas as permissões de armazenamento de objetos que o verbo project-bucket-object-viewer concede:
Permissões da API Bucket:
- get
- list
- assistir
Permissões de armazenamento de objetos S3:
- GetBucketVersioning
- GetObject
- GetObjectAcl
- GetObjectLegalHold
- GetObjectRetention
- GetObjectTagging
- GetObjectVersion
- GetObjectVersionTagging
- ListBucket
- ListBucketVersions
- ListBucketMultipartUploads
- ListMultipartUploadParts
Permissões de project-bucket-object-admin
Esse papel concede permissões para colocar e excluir objetos, versões de objetos e tags no bucket. Além disso, ele também concede todas as permissões em project-bucket-object-viewer.
Confira abaixo uma lista de todas as permissões adicionais de armazenamento de objetos que o papel concede:
Permissões de armazenamento de objetos S3:
- AbortMultipartUpload
- DeleteObject
- DeleteObjectTagging
- DeleteObjectVersion
- DeleteObjectVersionTagging
- PutObject
- PutObjectTagging
- PutObjectVersionTagging
- PutOverwriteObject
- RestoreObject
Permissões de project-bucket-admin
Esse papel concede permissões para criar, atualizar ou excluir recursos de bucket no namespace do projeto. Além disso, ele também concede todas as permissões em project-bucket-object-admin.
Confira abaixo uma lista de permissões adicionais que o papel concede:
Permissões da API Bucket:
- Criar
- Atualizar
- Delete