[GCP] Comment publier une URL signée Cloud Storage (URL temporaire) en Python

introduction

Il résume comment publier une URL signée Cloud Storage (une URL valide pendant une certaine période) en Python.

procédure

1. Création d'un compte de service et d'une clé

Ouvrez IAM et administration-> Comptes de service-> Comptes de service et sélectionnez Créer un compte de service.

Entrez ensuite le nom du compte de service et sélectionnez Créer. image.png

Ensuite, dans Select Role, sélectionnez Storage-> Storage Object Viewer et sélectionnez Continue. image.png

Sélectionnez ensuite Créer une clé, sélectionnez JSON, puis sélectionnez Créer. Ensuite, le fichier JSON sera téléchargé sur votre PC local, puis sélectionnez [Terminer]. image.png

2. Créer un programme

La documentation Google Cloud ne contenait que des informations fragmentaires, vous devrez donc les combiner vous-même. Tout d'abord, vérifiez le programme python sur le site suivant.

Processus de signature V4 avec les outils Cloud Storage (Open Language avec anglais) https://cloud.google.com/storage/docs/access-control/signing-urls-with-helpers

storage_generate_signed_url_v4.py


from google.cloud import storage
import datetime


def generate_download_signed_url_v4(bucket_name, blob_name):
    """Generates a v4 signed URL for downloading a blob.

    Note that this method requires a service account key file. You can not use
    this if you are using Application Default Credentials from Google Compute
    Engine or from the Google Cloud SDK.
    """
    # bucket_name = 'your-bucket-name'
    # blob_name = 'your-object-name'

    storage_client = storage.Client()
    bucket = storage_client.bucket(bucket_name)
    blob = bucket.blob(blob_name)

    url = blob.generate_signed_url(
        version="v4",
        # This URL is valid for 15 minutes
        expiration=datetime.timedelta(minutes=15),
        # Allow GET requests using this URL.
        method="GET",
    )

    print("Generated GET signed URL:")
    print(url)
    print("You can use this URL with any user agent, for example:")
    print("curl '{}'".format(url))
    return url

Lorsque j'essaye d'exécuter le programme ci-dessus (storage_generate_signed_url_v4.py), j'obtiens une erreur disant «vous avez besoin d'une clé privée». Le programme dit "Notez que cette méthode nécessite un fichier de clé de compte de service.", Vous savez donc que vous avez besoin d'un fichier de clé de compte de service. Le fichier de clé de compte de service est le fichier JSON créé à l'étape précédente, mais il n'y a pas de description sur la façon de le spécifier.

Ensuite, vérifiez le programme python suivant.

Authentification à l'aide d'un fichier de clé de compte de service https://cloud.google.com/bigquery/docs/authentication/service-account-file?hl=ja

from google.cloud import bigquery
from google.oauth2 import service_account

# TODO(developer): Set key_path to the path to the service account key
#                  file.
# key_path = "path/to/service_account.json"

credentials = service_account.Credentials.from_service_account_file(
    key_path,
    scopes=["https://www.googleapis.com/auth/cloud-platform"],
)

client = bigquery.Client(
    credentials=credentials,
    project=credentials.project_id,
)

Le programme ci-dessus est une méthode d'authentification utilisant un fichier de clé de compte de service pour BigQuery, mais nous allons le refaire pour Cloud Storage. Les changements sont les trois points suivants.

load_service_account.py


from google.cloud import storage
from google.oauth2 import service_account

# TODO(developer): Set key_path to the path to the service account key
#                  file.
key_path = "path/to/service_account.json"

credentials = service_account.Credentials.from_service_account_file(
    key_path,
    scopes=["https://www.googleapis.com/auth/cloud-platform"],
)

client = storage.Client(
    credentials=credentials,
    project=credentials.project_id,
)

Lorsque j'ai exécuté le programme ci-dessus (load_service_account.py) en tant qu'essai, aucune erreur ne s'est produite. Par conséquent, load_service_account.py et storage_generate_signed_url_v4.py sont combinés et certaines modifications sont apportées. Les corrections sont les suivantes.

storage_generate_signed_url_v4_auth.py


import datetime
from google.cloud import storage
from google.oauth2 import service_account

# TODO(developer): Set key_path to the path to the service account key
#                  file.
key_path = "path/to/service_account.json"

credentials = service_account.Credentials.from_service_account_file(
    key_path,
    scopes=["https://www.googleapis.com/auth/cloud-platform"],
)

storage_client = storage.Client(
    credentials=credentials,
    project=credentials.project_id,
)

def generate_download_signed_url_v4(bucket_name, blob_name):
    """Generates a v4 signed URL for downloading a blob.

    Note that this method requires a service account key file. You can not use
    this if you are using Application Default Credentials from Google Compute
    Engine or from the Google Cloud SDK.
    """
    # bucket_name = 'your-bucket-name'
    # blob_name = 'your-object-name'

    storage_client = storage.Client()
    bucket = storage_client.bucket(bucket_name)
    blob = bucket.blob(blob_name)

    url = blob.generate_signed_url(
        version="v4",
        # This URL is valid for 15 minutes
        expiration=datetime.timedelta(minutes=15),
        # Allow GET requests using this URL.
        method="GET",
    )

    print("Generated GET signed URL:")
    print(url)
    print("You can use this URL with any user agent, for example:")
    print("curl '{}'".format(url))
    return url

def generate_download_signed_url_v4('test_bucket', 'test_blob')

3. Exécuter

Exécutez python.

python3 storage_generate_signed_url_v4_auth.py

Vous obtiendrez les résultats suivants. Ceci est l'URL signée.

Generated GET signed URL:
https://storage.googleapis.com/test_bucket/test_blob/Abréviation
You can use this URL with any user agent, for example:
curl 'https://storage.googleapis.com/test_bucket/test_blob/Abréviation

URL de référence

URL signée https://cloud.google.com/storage/docs/access-control/signed-urls?hl=ja

Processus de signature V4 avec les outils Cloud Storage (langue en anglais) https://cloud.google.com/storage/docs/access-control/signing-urls-with-helpers

Authentification à l'aide d'un fichier de clé de compte de service https://cloud.google.com/bigquery/docs/authentication/service-account-file?hl=ja

Recommended Posts

[GCP] Comment publier une URL signée Cloud Storage (URL temporaire) en Python
Comment changer de version de Python dans cloud9
Comment développer en Python
Comment télécharger des fichiers sur Cloud Storage avec le SDK Python de Firebase
Comment spécifier Cache-Control pour le stockage BLOB dans le stockage Azure en Python
[GCP] Comment générer des journaux Cloud Functions vers Cloud Logging (Stackdriver Logging) (Python)
[Python] Comment faire PCA avec Python
Comment collecter des images en Python
Comment utiliser SQLite en Python
Comment utiliser Mysql avec python
Comment envelopper C en Python
Comment utiliser ChemSpider en Python
Comment utiliser PubChem avec Python
Comment gérer le japonais avec Python
Comment installer OpenCV sur Cloud9 et l'exécuter en Python
Comment définir les paramètres CORS pour le service de stockage Azure dans Python
Comment mettre à jour la version Python de Cloud Shell dans GCP
[Introduction à Python] Comment utiliser la classe en Python?
Comment définir dynamiquement des variables en Python
Comment faire R chartr () en Python
[Itertools.permutations] Comment créer une séquence en Python
Comment utiliser BigQuery en Python
Comment obtenir stacktrace en python
Comment afficher la table quatre-vingt-dix-neuf en python
Comment extraire une zone de polygone en Python
Comment vérifier la version d'opencv avec python
[GCP] Exploitez Google Cloud Storage avec Python
Comment régler le contraste de l'image en Python
Comment utiliser __slots__ dans la classe Python
Comment remplir dynamiquement des zéros avec Python
Comment utiliser les expressions régulières en Python
Comment afficher Hello World en python
Comment utiliser is et == en Python
Comment écrire Ruby to_s en Python
Convertir une URL absolue en URL relative en Python
Que faire lorsque la version Python est ancienne dans Cloud 9 créée par une autre personne
Comment utiliser la bibliothèque C en Python
Comment recevoir des arguments de ligne de commande en Python
[REAPER] Comment jouer à Reascript avec Python
Comment effacer un taple dans une liste (Python)
Comment générer une séquence en Python et C ++
Comment incorporer des variables dans des chaînes python
Résumé de la façon d'importer des fichiers dans Python 3
Comment simplifier l'ajustement polymorphe restreint en python
Comment utiliser la bibliothèque d'images Python dans la série python3
Comment implémenter la mémoire partagée en Python (mmap.mmap)
Comment créer un fichier JSON en Python
Résumé de l'utilisation de MNIST avec Python
Comment appeler l'API Cloud à partir de GCP Cloud Functions
Comment spécifier la version TLS dans les requêtes python
Comment notifier les canaux Discord en Python
Comment obtenir les fichiers dans le dossier [Python]
Comment utiliser tkinter avec python dans pyenv
Comment exécuter LeapMotion avec Python non-Apple
[Python] Comment dessiner un histogramme avec Matplotlib
Comment générer "Ketsumaimo" en standard en Python
Comment gérer le type datetime dans sqlite3 de python
Comment apporter des modifications à l'interpréteur Python dans Pycharm
Comment tracer l'autocorrélation et l'autocorrélation partielle avec Python