Concedere e ottenere l'accesso al bucket di archiviazione

Questa pagina ti guida nella gestione dell'accesso ai bucket di archiviazione all'interno dei progetti di appliance air-gap di Google Distributed Cloud (GDC), in modo che le persone giuste dispongano delle autorizzazioni corrette. Vengono trattati i prerequisiti e i passaggi per ottenere e concedere l'accesso a utenti e account di servizio utilizzando le associazioni di ruoli e i ruoli predefiniti. Queste informazioni ti consentono di controllare in modo efficace l'accesso alle risorse di archiviazione e di mantenere la sicurezza e l'efficienza operativa.

Questa pagina è rivolta a segmenti di pubblico come gli amministratori IT all'interno del gruppo di operatori dell'infrastruttura o gli sviluppatori all'interno del gruppo di operatori dell'applicazione che gestiscono le impostazioni di accesso per i bucket di archiviazione negli ambienti isolati di GDC.

Prima di iniziare

Uno spazio dei nomi del progetto gestisce le risorse bucket nel server API Management. Devi avere un progetto per lavorare con bucket e oggetti.

Concedi l'accesso al bucket

Puoi fornire l'accesso al bucket ad altri utenti o service account creando e applicando RoleBinding con ruoli predefiniti.

Ruoli predefiniti

  • project-bucket-object-viewer: questo ruolo consente a un utente di elencare tutti i bucket nel progetto, elencare gli oggetti in questi bucket e leggere gli oggetti e i metadati degli oggetti. Questo ruolo non ti consente di eseguire operazioni di scrittura sugli oggetti, come caricamento, sovrascrittura o eliminazione.

  • project-bucket-object-admin: questo ruolo consente a un utente di elencare tutti i bucket nel progetto ed eseguire operazioni di scrittura e lettura sugli oggetti, ad esempio caricamento, sovrascrittura o eliminazione.

  • project-bucket-admin::questo ruolo consente agli utenti di gestire tutti i bucket nello spazio dei nomi specificato, nonché tutti gli oggetti in questi bucket.

Per visualizzare un elenco completo delle autorizzazioni concesse per questi ruoli, consulta la sezione Autorizzazioni dei ruoli preimpostati.

Per ottenere le autorizzazioni necessarie per creare associazioni di ruoli del progetto, chiedi all'amministratore IAM del progetto di concederti il ruolo Amministratore IAM del progetto (project-iam-admin).

Di seguito è riportato un esempio di creazione di un RoleBinding per concedere l'accesso a un utente e a un account di servizio:

  1. Crea un file YAML sul tuo sistema, ad esempio 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. Applica il file YAML:

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

Ottenere le credenziali di accesso al bucket

Quando concedi l'accesso a un bucket, le credenziali di accesso vengono create in un secret.

Il formato del nome del secret è object-storage-key-std-SUBJECT_TYPE-SUBJECT_HASH.

  • I valori per SUBJECT_TYPE sono i seguenti:
    • user: l'utente.
    • sa: il ServiceAccount.
  • SUBJECT_HASH è l'hash SHA256 con codifica base32 del nome del soggetto.

Ad esempio, l'utente bob@foo.com ha il secret denominato:

object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja

Accedere al secret utente

Per un soggetto utente, il secret si trova nello spazio dei nomi object-storage-access-keys nel server dell'API Management.

  1. Trova il nome del secret:

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

    Riceverai un output simile al seguente:

    secrets        []        [object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja,object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja]        [get]
    
  2. Recupera i contenuti del secret corrispondente per accedere ai bucket:

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

    Riceverai un output simile al seguente:

    data:
      access-key-id: MEhYM08wWUMySjcyMkVKTFBKRU8=
      create-time: MjAyMi0wNy0yMiAwMTowODo1OS40MTQyMTE3MDMgKzAwMDAgVVRDIG09KzE5OTAuMzQ3OTE2MTc3
      secret-access-key: Ump0MVRleVN4SmhCSVJhbmlnVDAwbTJZc0IvRlJVendqR0JuYVhiVA==
    
  3. Decodifica l'ID chiave di accesso e il secret:

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

    Riceverai un output simile al seguente:

    0HX3O0YC2J722EJLPJEO
    Rjt1TeySxJhBIRanigT00m2YsB/FRUzwjGBnaXbT
    
  4. Segui la sezione Configura s3cmd con le informazioni risultanti.

Accedi al secret del account di servizio

Per un soggetto service account (SA), il secret viene creato nello stesso spazio dei nomi dell'account di servizio. Per trovare il nome, esegui:

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

Riceverai un output simile al seguente:

  object-storage-key-std-sa-mng3olp3vsynhswzasowzu3jgzct2ert72pjp6wsbzqhdwckwzbq

Puoi fare riferimento al secret nel pod come variabili di ambiente (https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-environment-variables) o file (https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-files-from-a-pod).

Autorizzazioni dei ruoli preimpostate

Quando lavori con l'archiviazione di oggetti, potresti dover richiedere i seguenti ruoli.

Autorizzazioni project-bucket-object-viewer

Questo ruolo concede le autorizzazioni per ottenere ed elencare gli oggetti e i relativi metadati nel bucket.

Il ruolo project-bucket-object-viewer dispone delle seguenti autorizzazioni:

  • Autorizzazioni API bucket:

    1. Ottieni
    2. Elenco
    3. Guarda
  • Autorizzazioni di archiviazione degli oggetti S3:

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

project-bucket-object-admin permissions

Questo ruolo concede le autorizzazioni per inserire ed eliminare oggetti, versioni degli oggetti e tag nel bucket. Inoltre, concede anche tutte le autorizzazioni in project-bucket-object-viewer.

Il ruolo project-bucket-object-admin dispone delle seguenti autorizzazioni di archiviazione di oggetti:

  • Autorizzazioni di archiviazione degli oggetti S3:

    1. AbortMultipartUpload
    2. DeleteObject
    3. PutObject

autorizzazioni di amministratore del bucket del progetto

Questo ruolo concede le autorizzazioni per creare, aggiornare o eliminare risorse Bucket nello spazio dei nomi del progetto. Inoltre, concede anche tutte le autorizzazioni in project-bucket-object-admin.

Il ruolo project-bucket-object-admin dispone delle seguenti autorizzazioni:

  • Autorizzazioni API bucket:

    1. Crea
    2. Aggiornamento
    3. Elimina