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 referenciam 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 a seguir um exemplo de criação de 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.
O formato do nome secreto é 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 ServiceAccount.
SUBJECT_HASHé o hash SHA256 codificado em base32 do nome do assunto.
Por exemplo, o usuário bob@foo.com tem dois secrets chamados:
object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja
Receber acesso do usuário
Para um assunto do usuário, o secret está no namespace object-storage-access-keys no servidor da API Management.
Execute o comando a seguir para encontrar o nome secreto:
kubectl auth can-i --list --namespace object-storage-access-keys | grep "object-storage-key-"Você recebe uma saída semelhante a esta:
secrets [] [object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja] [get]Receba o conteúdo do secret correspondente para acessar buckets na classe de armazenamento
Standard:kubectl get -o yaml --namespace object-storage-access-keys secret object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdjaVocê recebe 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ê recebe uma saída semelhante a esta:
0HX3O0YC2J722EJLPJEO Rjt1TeySxJhBIRanigT00m2YsB/FRUzwjGBnaXbTSiga a seção Configurar a CLI gdcloud com as informações resultantes.
Receber acesso da conta de serviço
As credenciais secretas do S3 só são criadas e disponibilizadas para serem recebidas se um bucket existir no namespace do projeto.
Para um assunto de conta de serviço (SA), encontre o nome secreto no cluster do usuário.
Para a classe de armazenamento padrão, execute o comando a seguir para receber o nome secreto:
kubectl get -n=<PROJECT-NAME> serviceaccount <SA-NAME> -o json | jq -r '.secrets[] | select(.name | test("object-storage-key-std"))'Em seguida, você pode procurar manualmente os nomes secretos listados ou usar
greppara encontrarobject-storage-key-(std|nl). Para a última opção, execute o seguinte:kubectl get -n=<PROJECT-NAME> serviceaccount <SA-NAME> -o=jsonpath='{.secrets}{"\n"}' | grep object-storage-key-(std|nl)É possível referenciar o secret no pod como variáveis de ambiente ou arquivos.
Permissões de papéis predefinidos
Os papéis predefinidos estão disponíveis no servidor da API global para acesso administrativo e operacional a buckets de zona dupla. Esses papéis também concedem acesso a buckets zonais, mas somente se um recurso IAMRoleBinding for usado em vez de um recurso RoleBinding ou ClusterRoleBinding. Para mais informações sobre vinculações de papéis, consulte Conceder e revogar acesso.
Permissões de project-bucket-object-viewer
Esse papel concede permissões para receber e listar objetos e metadados de objetos no bucket.
Uma lista de todas as permissões de armazenamento de objetos que o Role do project-bucket-object-viewer concede é a seguinte:
Permissões da API Bucket:
- get
- list
- assistir
Permissões de armazenamento de objetos do S3:
- 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 no project-bucket-object-viewer.
Uma lista de todas as permissões de armazenamento de objetos adicionais que o Role concede é a seguinte:
Permissões de armazenamento de objetos do 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 Bucket no namespace do projeto. Além disso, ele também concede todas as permissões no project-bucket-object-admin.
Uma lista de permissões adicionais que o Role concede é a seguinte:
Permissões da API Bucket:
- Criar
- Atualizar
- Delete