[GCP] So veröffentlichen Sie eine mit Cloud Storage signierte URL (temporäre URL) in Python

Einführung

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.

Verfahren

1. Erstellen eines Dienstkontos und eines Schlüssels

Ö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. image.png

Wählen Sie dann unter Rolle auswählen die Option Speicher-> Speicherobjekt-Viewer und dann Weiter. image.png

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. image.png

2. Erstellen eines Programms

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')

3. Führen Sie aus

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

Referenz-URL

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

[GCP] So veröffentlichen Sie eine mit Cloud Storage signierte URL (temporäre URL) in Python
So wechseln Sie die Python-Version in Cloud9
Wie man in Python entwickelt
Hochladen von Dateien in den Cloud-Speicher mit dem Python-SDK von Firebase
Festlegen der Cache-Steuerung für den BLOB-Speicher in Azure Storage in Python
[GCP] Ausgeben von Cloud-Funktionsprotokollen an Cloud Logging (Stackdriver Logging) (Python)
[Python] Wie man PCA mit Python macht
So sammeln Sie Bilder in Python
Verwendung von SQLite in Python
Wie man MySQL mit Python benutzt
So verpacken Sie C in Python
Verwendung von ChemSpider in Python
Verwendung von PubChem mit Python
Umgang mit Japanisch mit Python
So installieren Sie OpenCV in Cloud9 und führen es in Python aus
Festlegen der CORS-Einstellungen für den Azure-Speicherdienst in Python
So aktualisieren Sie die Python-Version von Cloud Shell in GCP
[Einführung in Python] Wie verwende ich eine Klasse in Python?
Dynamisches Definieren von Variablen in Python
So machen Sie R chartr () in Python
[Itertools.permutations] So löschen Sie eine Sequenz in Python
So arbeiten Sie mit BigQuery in Python
Wie bekomme ich Stacktrace in Python?
So zeigen Sie die neunundneunzig Tabelle in Python an
So extrahieren Sie einen Polygonbereich in Python
So überprüfen Sie die Version von opencv mit Python
[GCP] Betreiben Sie Google Cloud Storage mit Python
So passen Sie den Bildkontrast in Python an
Verwendung von __slots__ in der Python-Klasse
So füllen Sie mit Python dynamisch Nullen aus
Verwendung regulärer Ausdrücke in Python
So zeigen Sie Hello World in Python an
Verwendung ist und == in Python
Wie schreibe ich Ruby to_s in Python
Konvertieren Sie die absolute URL in eine relative URL in Python
Was tun, wenn die Python-Version in Cloud 9 von einer anderen Person erstellt wurde?
Verwendung der C-Bibliothek in Python
So empfangen Sie Befehlszeilenargumente in Python
[REAPER] Wie man Reascript mit Python spielt
So löschen Sie einen Taple in einer Liste (Python)
So generieren Sie eine Sequenz in Python und C ++
Einbetten von Variablen in Python-Strings
Zusammenfassung zum Importieren von Dateien in Python 3
So vereinfachen Sie die eingeschränkte Polypoly-Anpassung in Python
Verwendung der Python-Bildbibliothek in der Python3-Serie
So implementieren Sie Shared Memory in Python (mmap.mmap)
So erstellen Sie eine JSON-Datei in Python
Zusammenfassung der Verwendung von MNIST mit Python
So rufen Sie die Cloud-API über GCP-Cloud-Funktionen auf
So geben Sie die TLS-Version in Python-Anforderungen an
So benachrichtigen Sie Discord-Kanäle in Python
So erhalten Sie die Dateien im Ordner [Python]
Wie man tkinter mit Python in Pyenv benutzt
So führen Sie LeapMotion mit Nicht-Apple Python aus
[Python] Wie zeichnet man mit Matplotlib ein Histogramm?
So geben Sie "Ketsumaimo" standardmäßig in Python aus
Wie man mit dem Datum / Uhrzeit-Typ in Pythons SQLite3 umgeht
So nehmen Sie Python Interpreter-Änderungen in Pycharm vor
Wie man Autokorrelation und partielle Autokorrelation mit Python zeichnet