Conceda e obtenha acesso ao contentor de armazenamento

Esta página explica como gerir o acesso a contentores de armazenamento em projetos de dispositivos isolados do Google Distributed Cloud (GDC), para que as pessoas certas tenham as autorizações certas. Abrange os pré-requisitos e os passos para obter e conceder acesso de utilizadores e contas de serviço através de associações de funções e funções predefinidas. Estas informações permitem-lhe controlar eficazmente o acesso aos seus recursos de armazenamento e manter a segurança e a eficiência operacional.

Esta página destina-se a públicos-alvo, como administradores de TI no grupo de operadores de infraestrutura ou programadores no grupo de operadores de aplicações, que gerem as definições de acesso para contentores de armazenamento em ambientes isolados do GDC.

Antes de começar

Um espaço de nomes do projeto gere os recursos de contentores no servidor da API Management. Tem de ter um projeto para trabalhar com contentores e objetos.

Conceda acesso ao contentor

Pode conceder acesso ao contentor a outros utilizadores ou contas de serviço criando e aplicando RoleBindings com funções predefinidas.

Funções predefinidas

  • project-bucket-object-viewer: esta função permite que um utilizador liste todos os contentores no projeto, liste objetos nesses contentores e leia objetos e metadados de objetos. Esta função não lhe permite escrever operações em objetos, como carregar, substituir ou eliminar.

  • project-bucket-object-admin: esta função permite que um utilizador liste todos os contentores no projeto e execute operações de escrita e leitura em objetos, como carregar, substituir ou eliminar.

  • project-bucket-admin: esta função permite que os utilizadores façam a gestão de todos os contentores no espaço de nomes indicado, bem como de todos os objetos nesses contentores.

Para ver uma lista completa das autorizações concedidas para estas funções, consulte a secção autorizações de funções predefinidas.

Para receber as autorizações necessárias para criar associações de funções do projeto, peça ao administrador de IAM do projeto para lhe conceder a função de administrador de IAM do projeto (project-iam-admin).

Segue-se um exemplo de criação de um RoleBinding para conceder acesso a um utilizador e a uma conta de serviço:

  1. Crie um ficheiro 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 ficheiro YAML:

    kubectl apply \
    -f rolebinding-object-admin-all-buckets.yaml
    

Obtenha credenciais de acesso ao contentor

Quando concede acesso a um contentor, as credenciais de acesso são criadas num segredo.

O formato do nome do segredo é object-storage-key-std-SUBJECT_TYPE-SUBJECT_HASH.

  • Os valores de SUBJECT_TYPE são os seguintes:
    • user: o utilizador.
    • sa: o ServiceAccount.
  • SUBJECT_HASH é o hash SHA256 codificado em base32 do nome do assunto.

Por exemplo, o utilizador bob@foo.com tem o segredo com o nome:

object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja

Aceda ao segredo do utilizador

Para um utilizador sujeito, o segredo encontra-se no espaço de nomes object-storage-access-keys no servidor da API Management.

  1. Encontre o nome do segredo:

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

    Recebe um resultado semelhante ao seguinte:

    secrets        []        [object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja,object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja]        [get]
    
  2. Obtenha o conteúdo do segredo correspondente para aceder aos contentores:

    kubectl get -o yaml --namespace object-storage-access-keys secret
    object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja
    

    Recebe um resultado semelhante ao seguinte:

    data:
      access-key-id: MEhYM08wWUMySjcyMkVKTFBKRU8=
      create-time: MjAyMi0wNy0yMiAwMTowODo1OS40MTQyMTE3MDMgKzAwMDAgVVRDIG09KzE5OTAuMzQ3OTE2MTc3
      secret-access-key: Ump0MVRleVN4SmhCSVJhbmlnVDAwbTJZc0IvRlJVendqR0JuYVhiVA==
    
  3. Descodifique o ID da chave de acesso e o segredo:

    echo "MEhYM08wWUMySjcyMkVKTFBKRU8=" | base64 -d \
        && echo \
        && echo "Ump0MVRleVN4SmhCSVJhbmlnVDAwbTJZc0IvRlJVendqR0JuYVhiVA==" | base64 -d
    

    Recebe um resultado semelhante ao seguinte:

    0HX3O0YC2J722EJLPJEO
    Rjt1TeySxJhBIRanigT00m2YsB/FRUzwjGBnaXbT
    
  4. Siga a secção Configure s3cmd com as informações resultantes.

Aceda ao segredo da conta de serviço

Para um assunto de conta de serviço (SA), o segredo é criado no mesmo espaço de nomes que a conta de serviço. Para encontrar o nome, execute o seguinte comando:

  kubectl get --namespace NAMESPACE_NAME secrets -o=jsonpath=
  '{.items[?(@.metadata.annotations.object\.gdc\.goog/subject=="SA_NAME")].metadata.name}'

Recebe um resultado semelhante ao seguinte:

  object-storage-key-std-sa-mng3olp3vsynhswzasowzu3jgzct2ert72pjp6wsbzqhdwckwzbq

Pode fazer referência ao segredo no seu pod como variáveis de ambiente (https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-environment-variables) ou ficheiros (https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-files-from-a-pod).

Autorizações de funções predefinidas

Quando trabalha com o armazenamento de objetos, pode ter de pedir as seguintes funções.

Autorizações project-bucket-object-viewer

Esta função concede autorizações para obter e listar objetos e metadados de objetos no contentor.

A função project-bucket-object-viewer tem as seguintes autorizações:

  • Autorizações da API Bucket:

    1. Obter
    2. Lista
    3. Ver
  • Autorizações de armazenamento de objetos do S3:

    1. GetObject
    2. GetObjectAcl
    3. GetObjectVersion
    4. ListBucket
    5. ListBucketVersions
    6. ListBucketMultipartUploads
    7. ListMultipartUploadParts

autorizações project-bucket-object-admin

Esta função concede autorizações para colocar e eliminar objetos, versões de objetos e etiquetas no contentor. Além disso, também concede todas as autorizações no project-bucket-object-viewer.

A função project-bucket-object-admin tem as seguintes autorizações de armazenamento de objetos:

  • Autorizações de armazenamento de objetos do S3:

    1. AbortMultipartUpload
    2. DeleteObject
    3. PutObject

autorizações de administrador do projeto-contentor

Esta função concede autorizações para criar, atualizar ou eliminar recursos Bucket no namespace do projeto. Além disso, também concede todas as autorizações em project-bucket-object-admin.

A função project-bucket-object-admin tem as seguintes autorizações:

  • Autorizações da API Bucket:

    1. Criar
    2. Atualizar
    3. Eliminar