Speicher-Bucket-Zugriff für Projekte gewähren und abrufen

Auf dieser Seite erfahren Sie, wie Sie den Zugriff auf Speicher-Buckets in GDC-Projekten (Google Distributed Cloud) mit Air Gap verwalten, damit die richtigen Personen die richtigen Berechtigungen haben. Darin werden die Voraussetzungen und Schritte zum Abrufen und Gewähren von Nutzer- und Dienstkonto-Zugriff mithilfe von Rollenbindungen und vordefinierten Rollen beschrieben. Mit diesen Informationen können Sie den Zugriff auf Ihre Speicherressourcen effektiv steuern und sowohl die Sicherheit als auch die betriebliche Effizienz aufrechterhalten.

Diese Seite richtet sich an Nutzer wie IT-Administratoren in der Gruppe der Infrastrukturbetreiber oder Entwickler in der Gruppe der Anwendungsbetreiber, die die Zugriffseinstellungen für Speicher-Buckets in GDC-Umgebungen ohne Internetverbindung verwalten. Weitere Informationen finden Sie unter Zielgruppen für die GDC-Dokumentation für Air-Gap-Umgebungen.

Hinweise

In einem Projektnamespace werden Bucket-Ressourcen auf dem Management API-Server verwaltet. Sie benötigen ein Projekt, um mit Buckets und Objekten arbeiten zu können.

Bucket-Zugriff gewähren

Sie können anderen Nutzern oder Dienstkonten Bucket-Zugriff gewähren, indem Sie RoleBindings mit vordefinierten Rollen auf dem Management API-Server erstellen und anwenden.

Vordefinierte Rollen

  • project-bucket-object-viewer::Damit kann ein Nutzer alle Buckets im Projekt und Objekte in diesen Buckets auflisten sowie Objekte und Objektmetadaten lesen. Sie können damit keine Schreibvorgänge für Objekte ausführen. Beispiele: Hochladen, Überschreiben, Löschen. Hat Lesezugriff auf Buckets mit zwei Zonen in der Organisation und ihren Projekten sowie Lesezugriff auf die Objekte in diesen Buckets.

  • project-bucket-object-admin::Damit kann ein Nutzer alle Buckets im Projekt auflisten sowie Schreib- und Lesevorgänge für Objekte ausführen. Beispiele: Hochladen, Überschreiben, Löschen. Hat Lesezugriff auf Buckets mit zwei Zonen in der Organisation und ihren Projekten sowie Lese-/Schreibzugriff auf die Objekte in diesen Buckets.

  • project-bucket-admin::Damit können Nutzer alle Buckets im angegebenen Namespace sowie alle Objekte in diesen Buckets verwalten. Hat Lesezugriff auf Buckets mit zwei Zonen in der Organisation und ihren Projekten sowie Lese-/Schreibzugriff auf die Objekte in diesen Buckets.

Eine vollständige Liste der Berechtigungen, die für die oben genannten Rollen gewährt werden, finden Sie im Abschnitt Voreingestellte Rollenberechtigungen.

Bitten Sie Ihren Projekt-IAM-Administrator, Ihnen die Berechtigungen zum Erstellen von RoleBindings zu gewähren. Das folgende Beispiel zeigt, wie Sie eine RoleBinding erstellen, um einem Nutzer und einem Dienstkonto Zugriff zu gewähren:

  1. Erstellen Sie auf Ihrem System eine YAML-Datei, z. B. 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. Wenden Sie die YAML-Datei an:

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

Anmeldedaten für den Bucket-Zugriff abrufen

Wenn Sie Zugriff auf einen Bucket gewähren, werden die Anmeldedaten in einem Secret erstellt.

Das Format des Secret-Namens ist object-storage-key-STORAGE_CLASS-SUBJECT_TYPE-SUBJECT_HASH.

  • Mögliche Werte für STORAGE_CLASS:
    • std für die Speicherklasse Standard.
  • Mögliche Werte für SUBJECT_TYPE:
    • user für Nutzer.
    • sa für ServiceAccount.
  • SUBJECT_HASH ist der base32-codierte SHA256-Hash des Betreffnamens.

Beispiel: Der Nutzer bob@foo.com hat zwei Secrets mit den folgenden Namen:

  1. object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja

Nutzerzugriff erhalten

Bei einem Nutzer-Subjekt befindet sich das Secret im Namespace object-storage-access-keys auf dem Management API-Server.

  1. Führen Sie den folgenden Befehl aus, um den Secret-Namen zu ermitteln:

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

    Die Ausgabe sollte in etwa so aussehen:

    secrets        []        [object-storage-key-nl-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja,object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja]        [get]
    
  2. Rufen Sie den Inhalt des entsprechenden Secrets ab, um auf Buckets in der Speicherklasse Standard zuzugreifen:

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

    Die Ausgabe sollte in etwa so aussehen:

    data:
      access-key-id: MEhYM08wWUMySjcyMkVKTFBKRU8=
      create-time: MjAyMi0wNy0yMiAwMTowODo1OS40MTQyMTE3MDMgKzAwMDAgVVRDIG09KzE5OTAuMzQ3OTE2MTc3
      secret-access-key: Ump0MVRleVN4SmhCSVJhbmlnVDAwbTJZc0IvRlJVendqR0JuYVhiVA==
    
  3. Decodieren Sie die Zugriffsschlüssel-ID und das Secret:

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

    Die Ausgabe sollte in etwa so aussehen:

    0HX3O0YC2J722EJLPJEO
    Rjt1TeySxJhBIRanigT00m2YsB/FRUzwjGBnaXbT
    
  4. Folgen Sie dem Abschnitt gcloud CLI konfigurieren mit den resultierenden Informationen.

Zugriff auf Dienstkonto erhalten

Suchen Sie für ein Dienstkonto (SA) den Secret-Namen im Nutzercluster.

  1. Führen Sie für die Standardspeicherklasse den folgenden Befehl aus, um den Secret-Namen abzurufen:

    kubectl get -n=<PROJECT-NAME> serviceaccount <SA-NAME> -o json | jq -r '.secrets[] | select(.name | test("object-storage-key-std"))'
    
  2. Anschließend können Sie die aufgeführten Secret-Namen manuell durchsuchen oder grep verwenden, um object-storage-key-(std|nl) zu finden. Führen Sie für die zweite Option Folgendes aus:

    kubectl get -n=<PROJECT-NAME> serviceaccount <SA-NAME> -o=jsonpath='{.secrets}{"\n"}' | grep object-storage-key-(std|nl)
    
  3. Sie können im Pod als Umgebungsvariablen oder Dateien auf das Secret verweisen.

Voreingestellte Rollenberechtigungen

Vordefinierte Rollen sind auch auf dem globalen API-Server für den administrativen und operativen Zugriff auf Dual-Zone-Buckets verfügbar.

Berechtigungen für „Projekt-Bucket-Objekt-Betrachter“

Diese Rolle gewährt Berechtigungen zum Abrufen und Auflisten von Objekten und Objektmetadaten im Bucket.

Eine Liste aller Object Storage-Berechtigungen, die durch das Verb „project-bucket-object-viewer“ gewährt werden, ist die folgende:

  • Bucket-API-Berechtigungen:

    1. get
    2. list
    3. Ansehen
  • Berechtigungen für S3-Objektspeicher:

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

Berechtigungen vom Typ „Projekt-Bucket-Objekt-Administrator“

Diese Rolle gewährt Berechtigungen zum Einfügen und Löschen von Objekten, Objektversionen und Tags im Bucket. Außerdem werden damit alle Berechtigungen in der project-bucket-object-viewer gewährt.

Eine Liste aller zusätzlichen Berechtigungen für den Objektspeicher, die durch die Rolle gewährt werden, ist unten aufgeführt:

  • Berechtigungen für S3-Objektspeicher:

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

Berechtigungen als Projekt-Bucket-Administrator

Mit dieser Rolle werden Berechtigungen zum Erstellen, Aktualisieren oder Löschen von Bucket-Ressourcen im Projekt-Namespace gewährt. Außerdem werden alle Berechtigungen in project-bucket-object-admin gewährt.

Die Rolle gewährt die folgenden zusätzlichen Berechtigungen:

  • Bucket-API-Berechtigungen:

    1. Erstellen
    2. Aktualisieren
    3. Delete