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 :
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 projetSA_NAME: nom du compte de service.
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_CLASSsont les suivantes :stdpour la classe de stockageStandard.
- Les valeurs de
SUBJECT_TYPEsont les suivantes :userpour l'utilisateur.sapour ServiceAccount.
SUBJECT_HASHest le hachage SHA256 encodé en base32 du nom du sujet.
Par exemple, l'utilisateur bob@foo.com dispose de deux secrets nommés :
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.
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]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-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdjaVous obtenez un résultat semblable à celui-ci :
data: access-key-id: MEhYM08wWUMySjcyMkVKTFBKRU8= create-time: MjAyMi0wNy0yMiAwMTowODo1OS40MTQyMTE3MDMgKzAwMDAgVVRDIG09KzE5OTAuMzQ3OTE2MTc3 secret-access-key: Ump0MVRleVN4SmhCSVJhbmlnVDAwbTJZc0IvRlJVendqR0JuYVhiVA==Décodez l'ID et le secret de la clé d'accès :
echo "MEhYM08wWUMySjcyMkVKTFBKRU8=" | base64 -d \ && echo \ && echo "Ump0MVRleVN4SmhCSVJhbmlnVDAwbTJZc0IvRlJVendqR0JuYVhiVA==" | base64 -dVous obtenez un résultat semblable à celui-ci :
0HX3O0YC2J722EJLPJEO Rjt1TeySxJhBIRanigT00m2YsB/FRUzwjGBnaXbTSuivez 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.
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"))'Parcourez manuellement les noms des secrets listés ou utilisez
greppour trouverobject-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.
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 :
- get
- list
- watch
Autorisations de stockage d'objets S3 :
- GetObject
- GetObjectAcl
- GetObjectLegalHold
- GetObjectRetention
- GetObjectTagging
- GetObjectVersion
- GetObjectVersionTagging
- ListBucket
- ListBucketVersions
- ListBucketMultipartUploads
- 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 :
- AbortMultipartUpload
- DeleteObject
- DeleteObjectTagging
- DeleteObjectVersion
- DeleteObjectVersionTagging
- PutObject
- PutObjectTagging
- PutObjectVersionTagging
- PutOverwriteObject
- 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 :
- Créer
- Mettre à jour
- Supprimer