Conceder e obter acesso ao bucket de armazenamento

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:

  1. 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
     ```
    
  2. 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: o ServiceAccount.
  • 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.

  1. 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]
    
  2. 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==
    
  3. 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
    
  4. 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:

    1. Get
    2. Lista
    3. ASSISTIR
  • Permissões de armazenamento de objetos do S3:

    1. GetObject
    2. GetObjectAcl
    3. GetObjectVersion
    4. ListBucket
    5. ListBucketVersions
    6. ListBucketMultipartUploads
    7. 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:

    1. AbortMultipartUpload
    2. DeleteObject
    3. 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:

    1. Criar
    2. Atualizar
    3. Delete