Je souhaite accéder à Cloud Storage à partir d'une instance GCE. Puisqu'il est accessible depuis l'intérieur du projet, Méthode utilisant OAuth 2.0 directement Simpler [Compte de service]( Utilisez https://cloud.google.com/compute/docs/authentication).
Tout d'abord, récupérez le jeton d'accès auprès du serveur de métadonnées.
import json
import urllib2
METADATA_SERVER = "http://169.254.169.254/computeMetadata/v1/instance/service-accounts"
SERVICE_ACCOUNT = "default"
req = urllib2.Request("{0}/{1}/token".format(METADATA_SERVER, SERVICE_ACCOUNT))
req.add_header("Metadata-Flavor", "Google")
data = json.load(urllib2.urlopen(req))
token = data["access_token"]
token_type = data["token_type"]
L'accès à Cloud Storage utilise le jeton reçu.
from apiclient import discovery
sp = discovery.build("storage", "v1")
req = sp.objects().get_media(bucket=<BUCKET>, object=<PATH>)
req.headers["Authorization"] = "{0} {1}".format(token_type, token)
res = req.execute()
Exemple de code a utilisé ʻoauth2_client.AccessTokenCredentials`, mais il est également accessible par la méthode ci-dessus.
from apiclient import discovery
from apiclient.http import MediaIoBaseUpload
sp = discovery.build("storage", "v1")
# fp:Données à télécharger, mimetype: MIME type
media_body = MediaIoBaseUpload(fp, mimetype, resumable=True)
req = sp.objects().insert(bucket=<BUCKET>, body=dict(name=<PATH>), media_body=media_body)
req.headers["Authorization"] = "{0} {1}".format(token_type, token)
req.execute()
Recommended Posts