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 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. Per saperne di più, consulta la documentazione relativa ai segmenti di pubblico per GDC air-gapped.

Prima di iniziare

Uno spazio dei nomi del progetto gestisce le risorse bucket nel server API Management. Per utilizzare bucket e oggetti, devi disporre di un progetto.

Concedi l'accesso al bucket

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

Ruoli predefiniti

  • project-bucket-object-viewer: 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. Non consente di scrivere operazioni sugli oggetti. Ad esempio: caricamento, sovrascrittura, eliminazione. Dispone dell'accesso in sola lettura ai bucket dual-zone all'interno dell'organizzazione e dei relativi progetti, nonché dell'accesso in sola lettura agli oggetti in questi bucket.

  • project-bucket-object-admin: consente a un utente di elencare tutti i bucket del progetto ed eseguire operazioni di lettura e scrittura sugli oggetti. Ad esempio: caricamento, sovrascrittura, eliminazione. Dispone dell'accesso in sola lettura ai bucket dual-zone all'interno dell'organizzazione e dei relativi progetti, nonché dell'accesso in lettura/scrittura agli oggetti in questi bucket.

  • project-bucket-admin::consente agli utenti di gestire tutti i bucket nello spazio dei nomi specificato, nonché tutti gli oggetti in questi bucket. Dispone dell'accesso in sola lettura ai bucket dual-zone all'interno dell'organizzazione e dei relativi progetti, nonché dell'accesso in lettura/scrittura agli oggetti in questi bucket.

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

Chiedi all'amministratore IAM progetto di concederti le autorizzazioni per creare RoleBinding. 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.

    # 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. Applica il file YAML:

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

Ottenere le credenziali di accesso al bucket

Una volta concesso l'accesso a un bucket, vengono create le credenziali di accesso in un secret.

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

  • I valori per STORAGE_CLASS sono:
    • std per la classe di archiviazione Standard.
  • I valori per SUBJECT_TYPE sono:
    • user per l'utente.
    • sa per ServiceAccount.
  • SUBJECT_HASH è l'hash SHA256 con codifica base32 del nome del soggetto.

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

object-storage-key-std-user-l74gbpyrsbmwy4mivocr3nur6dzrnhcfhe3otyplul42i732aama

Ottenere le credenziali di accesso utente

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

  1. Esegui questo comando per elencare le risorse Secret che hai l'autorizzazione a visualizzare nello spazio dei nomi object-storage-access-keys:

    kubectl auth can-i --list --namespace object-storage-access-keys
    
    • NOTA: se sei un amministratore con l'autorizzazione per visualizzare tutte le risorse Secret o rappresentare altri utenti, puoi eseguire uno dei seguenti comandi per trovare il nome dei secret per un utente specificato:

      Elenca tutti i segreti appartenenti a un utente specificato:

      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'
      

      Impersonare un utente per vedere quali segreti può visualizzare:

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

    Se riesci a visualizzare i secret in questo spazio dei nomi, dovresti vedere un output che contiene un nome di secret simile al seguente:

    object-storage-key-std-user-l74gbpyrsbmwy4mivocr3nur6dzrnhcfhe3otyplul42i732aama
    
  2. Recupera i contenuti del secret corrispondente:

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

    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 Configurare l'interfaccia a riga di comando gcloud con le informazioni risultanti.

Ottenere l'accesso al account di servizio

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

Esegui il seguente comando per verificare di poter ottenere ed elencare le risorse Secret nello spazio dei nomi. Se non riesci, contatta l'amministratore:

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

Per trovare il nome del secret, esegui:

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'

Riceverai un output simile al seguente:

object-storage-key-std-sa-mng3olp3vsynhswzasowzu3jgzct2ert72pjp6wsbzqhdwckwzbq

Puoi fare riferimento al secret nel pod come variabili di ambiente o file.

Autorizzazioni dei ruoli preimpostate

Tieni presente che i ruoli predefiniti sono disponibili anche nel server API globale per l'accesso amministrativo e operativo ai bucket dual-zone.

Autorizzazioni project-bucket-object-viewer

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

Di seguito è riportato un elenco di tutte le autorizzazioni di archiviazione degli oggetti concesse dal verbo project-bucket-object-viewer:

  • Autorizzazioni API bucket:

    1. get
    2. list
    3. guarda
  • Autorizzazioni di archiviazione degli oggetti 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

project-bucket-object-admin permissions

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

Di seguito è riportato un elenco di tutte le autorizzazioni di archiviazione degli oggetti aggiuntive concesse dal ruolo:

  • Autorizzazioni di archiviazione degli oggetti S3:

    1. AbortMultipartUpload
    2. DeleteObject
    3. DeleteObjectTagging
    4. DeleteObjectVersion
    5. DeleteObjectVersionTagging
    6. PutObject
    7. PutObjectTagging
    8. PutObjectVersionTagging
    9. PutOverwriteObject
    10. RestoreObject

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.

Di seguito è riportato un elenco di autorizzazioni aggiuntive concesse dal ruolo:

  • Autorizzazioni API bucket:

    1. Crea
    2. Aggiornamento
    3. Elimina