Accorder et obtenir l'accès aux buckets de stockage pour les projets

Cette page vous explique comment gérer l'accès aux buckets de stockage dans les projets Google Distributed Cloud (GDC) avec isolation physique, afin que les bonnes personnes disposent des autorisations appropriées. Il décrit les conditions préalables et les étapes à suivre pour obtenir et accorder l'accès aux utilisateurs et aux comptes de service à l'aide de liaisons de rôles et de rôles prédéfinis. Ces informations vous permettent de contrôler efficacement l'accès à vos ressources de stockage, et de maintenir la sécurité et l'efficacité opérationnelle.

Cette page s'adresse aux administrateurs informatiques du groupe d'opérateurs d'infrastructure ou aux développeurs du groupe d'opérateurs d'applications qui gèrent les paramètres d'accès des buckets de stockage dans les environnements GDC sous air gap. Pour en savoir plus, consultez la documentation sur les audiences pour GDC sous air gap.

Avant de commencer

Un espace de noms de projet gère les ressources de bucket dans le serveur d'API Management. Vous devez disposer d'un projet pour utiliser des buckets et des objets.

Accorder l'accès au bucket

Vous pouvez accorder l'accès aux ressources de l'API S3, telles que les buckets et les objets qu'ils contiennent, aux sujets User et ServiceAccount en créant et en appliquant des RoleBindings qui font référence à des rôles prédéfinis dans le serveur de l'API Management.

Rôles prédéfinis

  • project-bucket-object-viewer: : permet à un utilisateur de lister tous les buckets du projet, de lister les objets de ces buckets, et de lire les objets et les métadonnées des objets. Il ne vous permet pas d'écrire des opérations sur des objets. Par exemple : importer, écraser, supprimer. Dispose d'un accès en lecture seule aux buckets birégionaux de l'organisation et de ses projets, ainsi qu'aux objets de ces buckets.

  • project-bucket-object-admin: : permet à un utilisateur de lister tous les buckets du projet, et d'effectuer des opérations d'écriture et de lecture sur les objets. Par exemple : importer, écraser, supprimer. Dispose d'un accès en lecture seule aux buckets birégionaux de l'organisation et de ses projets, ainsi que d'un accès en lecture/écriture aux objets de ces buckets.

  • project-bucket-admin: : permet aux utilisateurs de gérer tous les buckets de l'espace de noms donné, ainsi que tous les objets de ces buckets. Dispose d'un accès en lecture seule aux buckets birégionaux de l'organisation et de ses projets, ainsi que d'un accès en lecture/écriture aux objets de ces buckets.

Pour afficher la liste complète des autorisations accordées pour les rôles précédents, consultez la section Autorisations des rôles prédéfinis.

Vous devez disposer du rôle IAM d'administrateur de projet pour créer des liaisons de rôles dans ce projet. Voici un exemple de création d'une ressource RoleBinding qui accorde l'accès à un utilisateur et à un compte de service :

  1. Créez un fichier YAML sur votre système, par exemple 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.
    

    Remplacez les éléments suivants :

    • PROJECT_NAMESPACE : nom de l'espace de noms du projet
    • SA_NAME : nom du compte de service.

  2. Appliquez le fichier YAML :

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

Obtenir les identifiants d'accès au bucket

Une fois que vous avez accordé l'accès à un bucket, les identifiants d'accès sont créés dans un secret.

Le format du nom du secret est object-storage-key-STORAGE_CLASS-SUBJECT_TYPE-SUBJECT_HASH.

  • Les valeurs de STORAGE_CLASS sont les suivantes :
    • std pour la classe de stockage Standard.
  • Les valeurs de SUBJECT_TYPE sont les suivantes :
    • user pour l'utilisateur.
    • sa pour ServiceAccount.
  • SUBJECT_HASH est le hachage SHA256 encodé en base32 du nom du sujet.

Par exemple, l'utilisateur bob@foo.com dispose de deux secrets nommés :

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

Obtenir un accès utilisateur

Pour un sujet utilisateur, le Secret se trouve dans l'espace de noms object-storage-access-keys du serveur d'API Management.

  1. Exécutez la commande suivante pour trouver le nom du secret :

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

    Vous obtenez un résultat semblable à celui-ci :

    secrets        []        [object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja]        [get]
    
  2. Obtenez le contenu du secret correspondant pour accéder aux buckets de la classe de stockage Standard :

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

    Vous obtenez un résultat semblable à celui-ci :

    data:
      access-key-id: MEhYM08wWUMySjcyMkVKTFBKRU8=
      create-time: MjAyMi0wNy0yMiAwMTowODo1OS40MTQyMTE3MDMgKzAwMDAgVVRDIG09KzE5OTAuMzQ3OTE2MTc3
      secret-access-key: Ump0MVRleVN4SmhCSVJhbmlnVDAwbTJZc0IvRlJVendqR0JuYVhiVA==
    
  3. Décodez l'ID et le secret de la clé d'accès :

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

    Vous obtenez un résultat semblable à celui-ci :

    0HX3O0YC2J722EJLPJEO
    Rjt1TeySxJhBIRanigT00m2YsB/FRUzwjGBnaXbT
    
  4. Suivez la section Configurer la CLI gdcloud avec les informations obtenues.

Obtenir l'accès au compte de service

Les identifiants secrets S3 ne sont créés et disponibles que si un bucket existe dans l'espace de noms du projet.

Pour un sujet de compte de service (SA), recherchez le nom du secret à partir du cluster d'utilisateur.

  1. Pour la classe de stockage standard, exécutez la commande suivante pour obtenir le nom du secret :

    kubectl get -n=<PROJECT-NAME> serviceaccount <SA-NAME> -o json | jq -r '.secrets[] | select(.name | test("object-storage-key-std"))'
    
  2. Parcourez manuellement les noms des secrets listés ou utilisez grep pour trouver object-storage-key-(std|nl) :

    kubectl get -n=PROJECT_NAME \
        serviceaccount SA_NAME \
        -o=jsonpath='{.secrets}{"\n"}' | grep -E 'object-storage-key-(std|nl)'
    

    Remplacez les éléments suivants :

    • PROJECT_NAME : nom de votre projet.
    • SA_NAME : nom de votre compte de service.
  3. Vous pouvez référencer le secret dans votre pod en tant que variables d'environnement ou fichiers.

Autorisations des rôles prédéfinis

Des rôles prédéfinis sont disponibles dans le serveur d'API global pour l'accès administratif et opérationnel aux buckets birégionaux. Ces rôles accordent également l'accès aux buckets zonaux, mais uniquement si une ressource IAMRoleBinding est utilisée plutôt qu'une ressource RoleBinding ou ClusterRoleBinding. Pour en savoir plus sur les liaisons de rôles, consultez Accorder et révoquer l'accès.

Autorisations project-bucket-object-viewer

Ce rôle accorde des autorisations pour obtenir et lister les objets et leurs métadonnées dans le bucket.

Voici la liste de toutes les autorisations de stockage d'objets accordées par le rôle project-bucket-object-viewer Role :

  • Autorisations de l'API Bucket :

    1. get
    2. list
    3. watch
  • Autorisations de stockage d'objets S3 :

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

Autorisations d'administrateur d'objets de bucket de projet

Ce rôle accorde des autorisations pour placer et supprimer des objets, ainsi que des versions d'objets et des tags dans le bucket. De plus, il accorde toutes les autorisations du rôle project-bucket-object-viewer.

Voici la liste de toutes les autorisations de stockage d'objets supplémentaires accordées par Role :

  • Autorisations de stockage d'objets S3 :

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

autorisations d'administrateur de bucket de projet

Ce rôle accorde des autorisations pour créer, mettre à jour ou supprimer des ressources Bucket dans l'espace de noms du projet. De plus, il accorde toutes les autorisations dans project-bucket-object-admin.

Voici une liste d'autorisations supplémentaires accordées par Role :

  • Autorisations de l'API Bucket :

    1. Créer
    2. Mettre à jour
    3. Supprimer