Conceder e receber acesso ao bucket de armazenamento para projetos

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:

  1. 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.
    
  2. 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 armazenamento Standard.
  • 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 dois secrets chamados:

  1. object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja

Receber acesso do usuário

Para um usuário, o Secret está no namespace object-storage-access-keys no servidor da API Management.

  1. Execute o comando a seguir para encontrar o nome da chave secreta:

    kubectl auth can-i --list --namespace object-storage-access-keys | grep object-storage-key-
    

    Você vai receber uma saída parecida com esta:

    secrets        []        [object-storage-key-nl-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja,object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja]        [get]
    
  2. 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-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 o segredo:

    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 a CLI gdcloud com as informações resultantes.

Obter acesso à conta de serviço

Para um assunto de conta de serviço (SA), encontre o nome do secret no cluster de usuário.

  1. Para a classe de armazenamento padrão, execute o seguinte comando para receber o nome da chave secreta:

    kubectl get -n=<PROJECT-NAME> serviceaccount <SA-NAME> -o json | jq -r '.secrets[] | select(.name | test("object-storage-key-std"))'
    
  2. Em seguida, você pode procurar manualmente os nomes de secrets listados ou usar grep para encontrar object-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)
    
  3. É 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:

    1. get
    2. list
    3. assistir
  • Permissões de armazenamento de objetos do S3:

    1. GetObject
    2. GetObjectAcl
    3. GetObjectLegalHold
    4. GetObjectRetention
    5. GetObjectTagging
    6. GetObjectVersion
    7. GetObjectVersionTagging
    8. ListBucket
    9. ListBucketVersions
    10. ListBucketMultipartUploads
    11. 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:

    1. AbortMultipartUpload
    2. DeleteObject
    3. DeleteObjectTagging
    4. DeleteObjectVersion
    5. DeleteObjectVersionTagging
    6. PutObject
    7. PutObjectTagging
    8. PutObjectVersionTagging
    9. PutOverwriteObject
    10. 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:

    1. Criar
    2. Atualizar
    3. Delete