Generating Signed URLsをgcloudでしてみました。
https://cloud.google.com/storage/docs/access-control/signing-urls-with-helpers
※aws s3 presignに相当する機能になります。
ConsoleではService accounsのページでservice account keysを作成できますが、gcloudでは、「roles/iam.serviceAccountKeyAdmin」を付与しないと、下記のエラーメッセージが出力されます。
$ gcloud iam service-accounts keys create ~/key.json --iam-account gcs-signurl2@xxxxxxxxxxxxxxxxxxx.iam.gserviceaccount.com ERROR: (gcloud.iam.service-accounts.keys.create) PERMISSION_DENIED: Permission iam.serviceAccountKeys.create is required to perform this operation on service account projects/-/serviceAccounts/gcs-signurl2@xxxxxxxxxxxxxxxxxxx.iam.gserviceaccount.com.
まず、下記コマンドで権限付与しておく必要があります。
gcloud projects add-iam-policy-binding xxxxxxxxxxxxxxxxxxx --member serviceAccount:gcs-signurl@xxxxxxxxxxxxxxxxxxx.iam.gserviceaccount.com --role roles/iam.serviceAccountKeyAdmin
上記実行後に、gcloud iam service-accounts keys createコマンドを実行します。
次に、Generating Signed URLs with gsutilでテンポラリなURLを作成自体はできますが、テンポラリURLをブラウザからアクセスする場合、オブジェクトへの参照権限をサービスアカウントに付与しておく必要があります。
gcloud projects add-iam-policy-binding xxxxxxxxxxxxxxxxxxx --member=serviceAccount:gcs-signurl@xxxxxxxxxxxxxxxxxxx.iam.gserviceaccount.com --role=roles/storage.objectViewer
あとは、Generating Signed URLs with gsutilを実行すればテンポラリなURLを発行することができます。
(この場合10分間有効なURLとなります。)
$ gsutil signurl -d 10m Desktop/key.json gs://gcs-to-bigquery/2.5_month.csv URL HTTP Method Expiration Signed URL gs://gcs-to-bigquery/2.5_month.csv GET 2018-11-18 18:14:07
10分間経過すると下記エラーとなります。
<Error> <Code>ExpiredToken</Code> <Message>The provided token has expired.</Message> <Details> Request signature expired at: 2018-11-18T09:14:07+00:00 </Details> </Error>