Accédez à Google Cloud Storage à partir de Python (boto) à l'aide du compte de service et du fichier de clé (p12)

Lors de l'accès à Google Cloud Storage à partir de boto, il est possible d'accéder avec la clé d'accès et la clé secrète en activant un accès opérationnel compatible avec s3. http://qiita.com/itkr/items/d990e87a2540332ee0e5

Cependant, il y a un problème avec cette méthode. La clé d'accès qui peut être émise avec un accès opérationnel compatible est liée au compte utilisateur Google, ce qui n'est pas pratique pour les projets à plusieurs personnes. Ensuite, vous aurez la possibilité d'accéder avec un compte de service et un fichier clé (p12).

Installation de bibliothèques dépendantes

Ici, nous utilisons une bibliothèque appelée gcs-oauth2-boto-plugin.

pip install gcs-oauth2-boto-plugin

Préparation du fichier de réglage

Préparez un fichier de configuration décrivant le compte de service et le chemin du fichier de clé.

Emplacement du fichier

Par défaut, il regarde ~ / .boto, mais vous pouvez spécifier n'importe quel chemin en préparant l'un des éléments suivants dans la variable d'environnement. En passant, c'est la même chose que gsutil.

--BOTO_CONFIG (spécifier un seul fichier) --BOTO_PATH (spécifiez plusieurs fichiers séparés par :)

Lors de l'écriture de variables d'environnement en python, écrivez comme suit.

import os
os.environ['BOTO_CONFIG'] = '/path.to/boto_config'

Description requise

Vous pouvez écrire divers paramètres, mais les plus importants cette fois sont les paramètres suivants

[Credentials]
gs_service_key_file = /path.to/sample-KEYFILE.p12
gs_service_client_id = [email protected]

[GSUtil]
default_project_id = sampleproject-994

Référence: https://cloud.google.com/storage/docs/gsutil/commands/config#additional-configuration-controllable-features

la mise en oeuvre

Code de base

import boto

bucket_name = 'bucket_name'
uri = boto.storage_uri(bucket_name, 'gs')
print uri.get_bucket()

En gros, c'est tout ce dont vous avez besoin si vous avez installé gcs-oauth2-boto-plugin.

Commentaire

Pourquoi c'est tout ce dont vous avez besoin

boto a un mécanisme qui vous permet d'installer un plugin lors du collage d'une AuthConnection. Je vais l'omettre car je réimprimerai la plupart de l'implémentation de boto si je l'écris en détail, mais si vous regardez le code lié à l'auth de boto, vous pouvez trouver l'appel de la fonction get_plugin.

boto/plugin.py


def get_plugin(cls, requested_capability=None):
    if not requested_capability:
        requested_capability = []
    result = []
    for handler in cls.__subclasses__():
        if handler.is_capable(requested_capability):
            result.append(handler)
    return result

__subclasses__ affiche une liste de sous-classes, mais dans ce cas c'est une liste de classes qui héritent de la classe ʻAuthHandler. Puisque la classe ʻOAuth2ServiceAccountAuth dans gcs-oauth2-boto-plugin hérite de ʻAuthHandler, elle est reconnue comme un plug-in. Dans celui-ci, les informations nécessaires telles que gs_service_key_file` sont obtenues à partir du fichier de configuration.

Au fait

Vous pouvez également implémenter votre propre classe qui hérite de ʻAuthHandler` et écraser de force le chemin du fichier de configuration qu'il contient pour le changer dynamiquement. Mais je pense que cela peut probablement être plus intelligent.

from boto.auth_handler import AuthHandler
from boto.pyami.config import Config

boto_path = ''

class SpamAuth(AuthHandler):
    def __init__(self, path, config, provider):
        config = Config(path=boto_path)
        # ...Abréviation...

def spam(path='/path.to/boto_config'):
    global boto_path
    boto_path = path
    bucket_name = 'bucket_name'
    uri = boto.storage_uri(bucket_name, 'gs')
    print uri.get_bucket()

À ce stade, la classe URI (BucketStorageUri dans ce cas) contient la connexion dans le dict appelé provider_pool une fois la connexion établie, donc lors du changement de connexion,del BucketStorageUri.provider_pool ['gs'] Il semble que vous deviez l'effacer comme BucketStorageUri.provider_pool = {}.

Recommended Posts

Accédez à Google Cloud Storage à partir de Python (boto) à l'aide du compte de service et du fichier de clé (p12)
Utiliser Cloud Storage depuis Python3 (Introduction)
Copier des données d'Amazon S3 vers Google Cloud Storage avec Python (boto)
Firebase: utilisez Cloud Firestore et Cloud Storage depuis Python
Accéder à Cloud Storage à partir d'une instance Compute Engine
Procédure de transcription vocale à l'aide de Python et de l'API Google Cloud Speech
Définir la clé de compte de service Google Cloud dans heroku
Accéder aux feuilles de calcul à partir de Python à l'aide d'OAuth 2.0
J'ai essayé de livrer du courrier depuis Node.js et Python en utilisant le service de livraison de courrier (SendGrid) d'IBM Cloud!
Envoyez un e-mail depuis le serveur VirtualBox CentOS8 en utilisant votre compte Google comme adresse d'envoi et en utilisant le mot de passe de l'application
De Python à l'utilisation de MeCab (et CaboCha)
Utilisez boto pour télécharger le fichier depuis S3.
Essayez d'utiliser Python avec Google Cloud Functions
Utiliser l'API Google Cloud Vision de Python
[GCP] Exploitez Google Cloud Storage avec Python
Exploitez le stockage d'objets cloud de Sakura à partir de Python
J'ai essayé d'utiliser Google Translate à partir de Python et c'était trop facile
Comment utiliser OAuth et API de compte de service avec le client API Google pour python
Pièces jointes par e-mail à l'aide de votre compte gmail avec python.
Créer un fichier wav à partir du shader GLSL en utilisant python3
Exécutez des fichiers Python à partir de HTML en utilisant Django
Obtenez AccessToken pour le compte de service avec le SDK Firebase Admin Python