Il résume comment publier une URL signée Cloud Storage (une URL valide pendant une certaine période) en Python.
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.
Ensuite, dans Select Role, sélectionnez Storage-> Storage Object Viewer et sélectionnez Continue.
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].
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.
client = storage.Client ()
par storage_client = storage.Client ()
minutes = 15
si vous souhaitez modifier la date d'expiration de l'URL signéestorage_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')
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 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