Conceda e obtenha acesso ao contentor de armazenamento

Esta página explica como gerir o acesso a contentores de armazenamento em projetos 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. Para mais informações, consulte o artigo Públicos-alvo para a documentação isolada 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 no servidor da API Management.

Funções predefinidas

  • project-bucket-object-viewer: permite que um utilizador liste todos os contentores no projeto, liste objetos nesses contentores e leia objetos e metadados de objetos. Não lhe permite escrever operações em objetos. Por exemplo: carregar, substituir, eliminar. Tem acesso só de leitura a contentores de duas zonas na organização e nos respetivos projetos, bem como acesso só de leitura aos objetos nesses contentores.

  • project-bucket-object-admin: permite que um utilizador liste todos os contentores no projeto e realize operações de leitura e escrita em objetos. Por exemplo: carregar, substituir, eliminar. Tem acesso só de leitura a contentores de duas zonas na organização e nos respetivos projetos, bem como acesso de leitura/escrita aos objetos nesses contentores.

  • project-bucket-admin: 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. Tem acesso só de leitura a contentores de duas zonas na organização e nos respetivos projetos, bem como acesso de leitura/escrita aos objetos nesses contentores.

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

Peça ao administrador de IAM do projeto para lhe conceder autorizações para criar RoleBindings. Segue-se um exemplo de criação de uma 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.

    # 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 ficheiro YAML:

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

Obtenha credenciais de acesso ao contentor

Depois de conceder acesso a um contentor, são criadas as credenciais de acesso num segredo.

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

  • Os valores de STORAGE_CLASS são:
    • std para a classe de armazenamento Standard.
  • Os valores de SUBJECT_TYPE são:
    • user para User.
    • sa para ServiceAccount.
  • SUBJECT_HASH é o hash SHA256 codificado em base32 do nome do assunto.

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

object-storage-key-std-user-l74gbpyrsbmwy4mivocr3nur6dzrnhcfhe3otyplul42i732aama

Obtenha credenciais de acesso 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. Execute o seguinte comando para listar os recursos Secret que tem autorização para ver no espaço de nomes object-storage-access-keys:

    kubectl auth can-i --list --namespace object-storage-access-keys
    
    • NOTA: se for um administrador com autorização para ver todos os recursos Secret ou roubar a identidade de outros utilizadores, pode executar um dos seguintes comandos para encontrar o nome dos segredos de um utilizador especificado:

      Liste todos os segredos pertencentes a um utilizador 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'
      

      Roube a identidade de um utilizador para ver os segredos que pode ver:

      export USER_NAME=bob@example.com
      kubectl auth can-i --list --namespace object-storage-access-keys --as "${USER_NAME:?}"
      

    Se conseguir ver quaisquer segredos neste espaço de nomes, deve ver um resultado que contenha um nome secreto semelhante ao seguinte:

    object-storage-key-std-user-l74gbpyrsbmwy4mivocr3nur6dzrnhcfhe3otyplul42i732aama
    
  2. Obtenha o conteúdo do segredo correspondente:

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

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

Obtenha acesso à 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.

Execute o seguinte comando para verificar se consegue obter e listar recursos Secret no espaço de nomes. Se não for o caso, contacte o seu administrador:

export SA_NAMESPACE=NAMESPACE_NAME
kubectl auth can-i --list --namespace $SA_NAMESPACE

Para encontrar o nome do Secret, execute o seguinte comando:

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'

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 ou ficheiros.

Autorizações de funções predefinidas

Tenha em atenção que as funções predefinidas também estão disponíveis no servidor da API global para acesso administrativo e operacional a contentores de duas zonas.

Autorizações project-bucket-object-viewer

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

Seguem-se as autorizações concedidas pelo verbo project-bucket-object-viewer:

  • Autorizações da API Bucket:

    1. receber
    2. lista
    3. relógio
  • Autorizações de armazenamento de objetos do S3:

    1. GetBucketVersioning
    2. GetObject
    3. GetObjectAcl
    4. GetObjectLegalHold
    5. GetObjectRetention
    6. GetObjectTagging
    7. GetObjectVersion
    8. GetObjectVersionTagging
    9. ListBucket
    10. ListBucketVersions
    11. ListBucketMultipartUploads
    12. ListMultipartUploadParts

autorizações project-bucket-object-admin

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

Seguem-se as autorizações de armazenamento de objetos adicionais que a função concede:

  • Autorizaçõ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

autorizações de administrador do projeto-contentor

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

Seguem-se as autorizações adicionais concedidas pela função:

  • Autorizações da API Bucket:

    1. Criar
    2. Atualizar
    3. Eliminar