こんにちは。GMOインサイトのT.Oです。
クラウドストレージに保存したファイルを、特定の取引先や顧客と一時的に共有したいというニーズは多いのではないでしょうか。Google Cloud Storage(GCS)の署名付きURL(Signed URL)機能を使うと、一時的なアクセス権を持つURLを発行でき、安全にファイル共有を行うことができます。
この記事では、署名付きURLの特徴と、Pythonを使った実装方法をご紹介します。
主な特徴
・有効期限を設定可能(数分から最大7日間)
・URLを知っている方のみがアクセス可能
・特別な認証情報なしでアクセス可能
実装方法
0.前提
Google Cloudの管理コンソールでCloud Shellを利用してコマンドラインで以下の手順を実行します。
1.事前準備
まず必要なツールとライブラリをインストールします。
1 2 3 4 5 6 |
# 認証設定 $ gcloud auth login $ gcloud config set project {Google CloudのプロジェクトID} # Pythonライブラリのインストール $ pip install google-cloud-storage |
2.サービスアカウントの設定
署名付きURLを生成するためのサービスアカウントを作成し、サービスアカウントキーをダウンロードします。
*1) サービスアカウント名は任意です。以下の例では”signed-url-generator”としています
*2) サービスアカウントキーは安全に保管してください
1 2 3 4 5 6 7 8 9 10 11 12 |
# サービスアカウントの作成 $ gcloud iam service-accounts create signed-url-generator \ --display-name="Signed URL Generator" # 権限の付与 $ gcloud projects add-iam-policy-binding {Google CloudのプロジェクトID} \ --member="serviceAccount:signed-url-generator@{Google CloudのプロジェクトID}.iam.gserviceaccount.com" \ --role="roles/storage.objectViewer" # サービスアカウントキーファイルのダウンロード $ gcloud iam service-accounts keys create key.json \ --iam-account=signed-url-generator@{Google CloudのプロジェクトID}.iam.gserviceaccount.com |
3.署名付きURL生成スクリプトの作成
署名付きURLを生成するためのスクリプトを作成します。今回はPythonで実装します。
ファイル名は”generate_signed_url.py”とします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
from google.cloud import storage import datetime def generate_signed_url(bucket_name, blob_name, expiration_minutes=30): """署名付きURLを生成する関数""" try: storage_client = storage.Client.from_service_account_json('key.json') bucket = storage_client.bucket(bucket_name) blob = bucket.blob(blob_name) url = blob.generate_signed_url( version="v4", expiration=datetime.timedelta(minutes=expiration_minutes), method="GET", # ダウンロード時のファイル名を指定する場合 query_parameters={ "response-content-disposition": f"attachment; filename={blob_name}" } ) return url except Exception as e: print(f"エラーが発生しました: {e}") return None # 使用例 if __name__ == "__main__": bucket_name = "{Cloud Storageのバケット名}" blob_name = "{ダウンロード対象ファイルまでのパス/ダウンロード対象ファイル名}" expiration_minutes = 1440 # この例では24時間有効としています url = generate_signed_url(bucket_name, blob_name, expiration_minutes) if url: print(f"署名付きURL: {url}") print(f"有効期限: {expiration_minutes}分") |
4.署名付きURLの生成スクリプトを実行する
1 |
$ python generate_signed_url.py |
実行すると以下の実行例のように署名付きURLが表示されます。このURLをダウンロードの対象者にお伝えします。

5.署名付きURLの利用
以下のように利用手順や注意事項をダウンロードの対象者に連絡します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
【ご利用手順】 1.以下のURLをクリックしてください {署名付きURLを記載} 2.ブラウザでダウンロードが開始されます 3.ダウンロードしたファイルを開いて内容をご確認ください *)URLの有効期限:YYYY/MM/DD HH:MM まで *)ファイルサイズ:XX MB 【ご注意いただきたい点】 ・URLの有効期限を過ぎるとアクセスできなくなります ・URLは第三者に転送しないようお願いします ・ダウンロードに失敗した場合は、お手数ですが再度お試しください ・複数回ダウンロードする場合は、有効期限内であれば可能です |
まとめ
署名付きURLは、Google Cloud Storageのファイルを外部のユーザーと安全に共有するための優れた機能です。適切な有効期限を設定することで、セキュリティを保ちながら柔軟なファイル共有が可能になります。
今回紹介したコードやコマンドをご利用いただく場合、実際の環境に合わせて適切に修正してください。
また、より詳細な情報についてはGoogle Cloud の公式ドキュメントをご参照ください。