Google Cloud Storage
Google Cloud Storageアクションでは、ファイルのアップロードとダウンロードを行なえます。
Google Cloud Storageのデータソースに接続する
1. 右上のメニューから「データソース」を選択する
2. 「データソースの追加」をクリックする
3. データソースの種類の中から「Google Cloud Storage」を選択する

4. データソースへの接続に必要な情報を入力して保存する

サービスアカウントの作成
上記の 4 のステップでは、Google Cloud Storageの操作に必要な認証情報を登録します。
Google Cloudコンソール上でサービスアカウントを作成し、JSON形式のサービスアカウントキーをダウンロードします。そのファイルの内容を登録してください。
サービスアカウント作成の詳しい方法については、Google Cloudドキュメントのサービスアカウントを作成する (opens in a new tab)をご参照ください。
必要なロールの割り当て
サービスアカウントには、下記の権限を与える必要があります。
- アップロード:
storage.objects.create(既存のオブジェクトを上書きする場合にはstorage.objects.deleteも必要です) - ダウンロード:
storage.objects.get - オブジェクトの一覧取得:
storage.objects.list
ロールの割り当ての詳しい方法に関しては、Google Cloudドキュメントのサービスアカウントに対するアクセス権の管理 (opens in a new tab)をご参照ください。
Workload Identity Federation で接続する
Workload Identity Federation (opens in a new tab)を使用すると、サービスアカウントキーをベースマキナに渡すことなく、そのサービスアカウントの権限でGoogle Cloud Storageを操作できます。
以下のTerraformコード(Terraform v1.14.7 / Google provider v7.23.0で動作確認済み)で必要なリソースを作成します。<PROJECT_ID>、<BUCKET_NAME>、<SA_NAME> を環境に合わせて置き換えてください。
既存のバケットを使用する場合は google_storage_bucket の定義を削除し、google_storage_bucket_iam_member の bucket を既存バケット名に変更してください。
provider "google" {
project = "<PROJECT_ID>"
}
data "google_project" "project" {}
# GCS バケット(既存バケットを使う場合は不要)
resource "google_storage_bucket" "bucket" {
name = "<BUCKET_NAME>"
location = "asia-northeast1"
uniform_bucket_level_access = true
}
# ベースマキナが権限借用するサービスアカウント
resource "google_service_account" "sa" {
account_id = "<SA_NAME>"
display_name = "<SA_NAME>"
}
# サービスアカウントにバケットの読み書き権限を付与
resource "google_storage_bucket_iam_member" "object_admin" {
bucket = google_storage_bucket.bucket.name
role = "roles/storage.objectAdmin"
member = "serviceAccount:${google_service_account.sa.email}"
}
# Workload Identity Federation Pool
resource "google_iam_workload_identity_pool" "pool" {
workload_identity_pool_id = "basemachina"
display_name = "BaseMachina"
}
# Workload Identity Federation Pool Provider
resource "google_iam_workload_identity_pool_provider" "provider" {
workload_identity_pool_id = google_iam_workload_identity_pool.pool.workload_identity_pool_id
workload_identity_pool_provider_id = "basemachina"
display_name = "BaseMachina"
oidc {
issuer_uri = "https://idp.basemachina.com"
}
attribute_mapping = {
"google.subject" = "assertion.sub"
"attribute.project_id" = "assertion.project_id"
}
}
# サービスアカウントの権限借用を許可
resource "google_service_account_iam_member" "workload_identity_user" {
service_account_id = google_service_account.sa.name
role = "roles/iam.workloadIdentityUser"
member = "principalSet://iam.googleapis.com/projects/${data.google_project.project.number}/locations/global/workloadIdentityPools/${google_iam_workload_identity_pool.pool.workload_identity_pool_id}/*"
}
# 署名付き URL 発行用の signBlob 権限(最小権限のカスタムロール)
resource "google_project_iam_custom_role" "sign_blob" {
role_id = "customSignBlob"
title = "Custom Sign Blob"
description = "Allows signing blobs with service account keys"
permissions = ["iam.serviceAccounts.signBlob"]
}
resource "google_service_account_iam_member" "sign_blob" {
service_account_id = google_service_account.sa.name
role = "projects/${data.google_project.project.project_id}/roles/${google_project_iam_custom_role.sign_blob.role_id}"
member = "serviceAccount:${google_service_account.sa.email}"
}IDトークンのカスタムクレーム
ベースマキナが発行するID Tokenには、以下のカスタムクレームが含まれます。attribute_mapping や attribute_condition で利用できます。
| クレーム | 内容 |
|---|---|
tenant_subdomain | ご利用のサブドメイン(xxx.basemachina.com の xxx 部分) |
project_id | プロジェクトID |
environment_id | 環境ID |
ベースマキナ側の設定
セットアップ完了後、データソースの接続設定で認証方式として「Workload Identity Federation」を選択し、以下の情報を入力します。
| 項目 | 値 | 例 |
|---|---|---|
| プロバイダー | projects/<PROJECT_NUMBER>/locations/global/workloadIdentityPools/<POOL_ID>/providers/<PROVIDER_ID> | projects/123456789/locations/global/workloadIdentityPools/basemachina/providers/basemachina |
| サービスアカウント | <SA_NAME>@<PROJECT_ID>.iam.gserviceaccount.com | basemachina@my-project.iam.gserviceaccount.com |
Google Cloud Storageをアクションで利用する
1. 右上のメニューから「アクション」を選択する
2. 「アクションの追加」をクリックする
3. アクション名やパラメーターを設定する

アップロード

- アクションパラメーターを設定します
- ファイルパラメーターを 必須 にします
- またアップロードするファイル名を指定するためにファイル名を入力するためのテキストパラメーターも必須にします
- バケット名を
test-bucketのように設定します - 実行メソッドを「アップロード」に設定します
- オブジェクト名(オブジェクトキー)を
images/{{ ファイル名 }}のように設定します- アップロードされるファイルのオブジェクト名となります
- ファイル内容に使うパラメーターを1で作成したファイルパラメーターに設定します
アクション実行画面でパラメーターとしてファイル名を test.png と設定し実行した場合は下記にアップロードされます。
gs://test-bucket/images/test.png
ダウンロード

- アクションパラメーターを設定します
- ダウンロードするファイル名を指定するためのテキストパラメーターを必須にします
- バケット名を
test-bucketのように設定します - 実行メソッドを「ダウンロード」に設定します
- オブジェクト名(オブジェクトキー)を
images/{{ ファイル名 }}のように設定します- ダウンロードされるファイルのオブジェクト名となります
アクション実行画面でパラメーターとしてファイル名を test.png と設定し実行した場合は下記のファイルがダウンロードされます。
gs://test-bucket/images/test.png
オブジェクトの一覧

- バケット名を入力します。
- 実行メソッドで「オブジェクトの一覧」を選択します。
- 必要に応じてオブジェクト名(オブジェクトキー)を入力します。
- 保存します。
設定したアクションを実行すると、オブジェクトの一覧を取得できます。
指定したオブジェクト名(オブジェクトキー)は、一覧取得時の接頭辞による絞り込みに使われます。

実行結果の形式
下記の形式のオブジェクトを含んだ配列を返します。
| キー名 | 説明 |
|---|---|
| objectKey | オブジェクト名(オブジェクトキー) |
| lastModified | ファイルの更新日時のUnixTimestamp (秒) |
| size | ファイルのバイトサイズ |
署名付きURLの発行

- バケット名を入力します。
- 実行メソッドで「署名付きURLの発行」を選択します。
- オブジェクト名(オブジェクトキー)を入力します。
- HTTPメソッドを「GET」または「PUT」から選択します。
- 保存します。
設定したアクションを実行すると、署名付きURLが発行されます。

実行結果の形式
下記の形式のオブジェクトを返します。
| キー名 | 説明 |
|---|---|
| signedUrl | 発行した署名付きURL |
便利な使い方
「バケット名」と「オブジェクト名(オブジェクトキー)」では、アクションのパラメーターのほかに、変数・シークレットと事前定義パラメーターをご利用いただくことができます。環境に応じて値を変更したい場合などにご利用ください。
書式については変数・シークレットの使用方法をご覧ください。