Conceder e receber acesso ao bucket de armazenamento para projetos

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:

  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: 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 projeto
    • SA_NAME: o nome da conta de serviço

  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, 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_CLASS são:
    • std para a classe de armazenamento Standard.
  • Os valores de 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 assunto do 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 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]
    
  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ê recebe uma saída semelhante a esta:

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

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

    Você recebe uma saída semelhante a esta:

    0HX3O0YC2J722EJLPJEO
    Rjt1TeySxJhBIRanigT00m2YsB/FRUzwjGBnaXbT
    
  4. Siga 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.

  1. 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"))'
    
  2. Em seguida, você pode procurar manualmente os nomes secretos 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 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:

    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 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:

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

    1. Criar
    2. Atualizar
    3. Delete