Es wird zusammengefasst, wie eine mit Cloud Storage signierte URL (eine URL, die für einen bestimmten Zeitraum gültig ist) in Python veröffentlicht wird.
Öffnen Sie IAM und Administration-> Dienstkonten-> Dienstkonten und wählen Sie Dienstkonto erstellen.
Geben Sie dann den Namen des Dienstkontos ein und wählen Sie Erstellen.
Wählen Sie dann unter Rolle auswählen die Option Speicher-> Speicherobjekt-Viewer und dann Weiter.
Wählen Sie dann Schlüssel erstellen, JSON auswählen und dann Erstellen. Anschließend wird die JSON-Datei auf Ihren lokalen PC heruntergeladen und anschließend [Fertig stellen] ausgewählt.
Die Google Cloud-Dokumentation enthielt nur fragmentarische Informationen, sodass Sie die Informationen selbst kombinieren müssen. Überprüfen Sie zunächst das Python-Programm auf der folgenden Site.
V4-Signaturprozess mit Cloud Storage-Tools (Open Language mit Englisch) 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
Wenn ich versuche, das obige Programm (storage_generate_signed_url_v4.py) auszuführen, wird die Fehlermeldung "Sie benötigen einen privaten Schlüssel" angezeigt. Das Programm sagt "Beachten Sie, dass für diese Methode eine Dienstkonto-Schlüsseldatei erforderlich ist.". Sie wissen also, dass Sie eine Dienstkonto-Schlüsseldatei benötigen. Die Dienstkonto-Schlüsseldatei ist die im vorherigen Schritt erstellte JSON-Datei, es gibt jedoch keine Beschreibung zur Angabe.
Überprüfen Sie als Nächstes das folgende Python-Programm.
Authentifizierung mithilfe einer Dienstkonto-Schlüsseldatei 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,
)
Das obige Programm ist eine Authentifizierungsmethode, die eine Dienstkonto-Schlüsseldatei für BigQuery verwendet. Lassen Sie uns sie jedoch für Cloud Storage neu erstellen. Die Änderungen betreffen die folgenden drei Punkte.
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,
)
Als ich das obige Programm (load_service_account.py) als Test ausgeführt habe, ist kein Fehler aufgetreten. Daher werden load_service_account.py und storage_generate_signed_url_v4.py kombiniert und einige Änderungen vorgenommen. Die Korrekturen sind wie folgt.
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')
Führen Sie Python aus.
python3 storage_generate_signed_url_v4_auth.py
Sie erhalten folgende Ergebnisse. Dies ist die signierte URL.
Generated GET signed URL:
https://storage.googleapis.com/test_bucket/test_blob/Abkürzung
You can use this URL with any user agent, for example:
curl 'https://storage.googleapis.com/test_bucket/test_blob/Abkürzung
Signierte URL https://cloud.google.com/storage/docs/access-control/signed-urls?hl=ja
V4-Signaturprozess mit Cloud Storage-Tools (Sprache in Englisch) https://cloud.google.com/storage/docs/access-control/signing-urls-with-helpers
Authentifizierung mithilfe einer Dienstkonto-Schlüsseldatei https://cloud.google.com/bigquery/docs/authentication/service-account-file?hl=ja
Recommended Posts