How do I generate a pre-signed URL in Google Cloud Function that links to a specific bucket GCS?

6.7k views Asked by At

How do I add the private key file generated with service account to the cloud function to authenticate ?

The following code returns an auth credential error, it says I need a private key to sign credentials. How do I create this and pass in the cloud function?

import datetime

from google.cloud import storage


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
1

There are 1 answers

2
Jaroslav On

I can help you to find information on how to create a signed url in GCF using Python. You need to use Cloud Storage Python Client libraries, as explained in this example on official GCP documentation. Also this example on Medium can help you.