Google Cloud Storageの実務活用|バケット設計・権限管理・料金最適化

kento_morota 15分で読めます

「社内のファイルサーバーが容量不足になった」「バックアップデータの保管コストを削減したい」「Webアプリケーションの静的ファイルを安全にホスティングしたい」――こうしたストレージに関する課題は、企業規模を問わず共通の悩みです。

Google Cloud Storage(GCS)は、GCPが提供するオブジェクトストレージサービスです。高い耐久性、柔軟なアクセス制御、そして用途に応じた料金体系により、あらゆるデータ保管のニーズに対応できます。

この記事では、Cloud Storageの基本概念から実務的なバケット設計、権限管理のベストプラクティス、料金最適化まで、現場で即活用できる知識を解説します。

Cloud Storageの基本概念と特徴

Cloud Storageは、Googleのインフラ上でデータを保管するオブジェクトストレージサービスです。ファイルシステムのようなディレクトリ階層ではなく、フラットな名前空間にオブジェクト(ファイル)を格納する仕組みです。

オブジェクトストレージとは

従来のファイルストレージとの違いを理解しましょう。

ファイルストレージ(NASなど)は、フォルダ・ファイルの階層構造でデータを管理します。社内ファイルサーバーが典型例です。

オブジェクトストレージは、データをオブジェクト(ファイル本体+メタデータ)として格納します。URLで直接アクセスでき、容量の上限が実質的にありません。

Cloud Storageでは、データはバケットと呼ばれるコンテナに格納されます。バケット名はグローバルに一意でなければならず、プロジェクト内でのデータの論理的な区画となります。

Cloud Storageの主な特徴

  • 99.999999999%(イレブンナイン)の耐久性:データ損失のリスクが極めて低い設計
  • グローバルアクセス:世界中のどこからでもHTTPS経由でアクセス可能
  • 容量無制限:事前のプロビジョニングなしにデータを保管できます
  • バージョニング:オブジェクトの変更履歴を保持し、過去のバージョンに復元可能
  • ライフサイクル管理:保存期間に応じた自動的なストレージクラス変更や削除

ストレージクラスの選び方と料金体系

Cloud Storageには4つのストレージクラスがあり、データへのアクセス頻度に応じて最適なクラスを選ぶことで、コストを大幅に削減できます。

4つのストレージクラス

1. Standard Storage
頻繁にアクセスされるデータ向け。Webサイトの画像、アプリケーションの動的データなどに最適です。保存料金は$0.020/GB/月(東京リージョン)。

2. Nearline Storage
月1回程度のアクセス頻度のデータ向け。月次レポート、ログの短期保管などに適しています。保存料金は$0.010/GB/月で、最低保存期間は30日です。

3. Coldline Storage
四半期に1回程度のアクセス頻度のデータ向け。災害復旧用のバックアップなどに最適です。保存料金は$0.004/GB/月で、最低保存期間は90日です。

4. Archive Storage
年1回未満のアクセスしかないデータ向け。法令で保管が義務づけられたデータなどに使います。保存料金は$0.0012/GB/月で、最低保存期間は365日です。

料金の構成要素

Cloud Storageの料金は以下の要素で構成されます。

  • データ保存料:上記のストレージクラスごとの月額料金
  • オペレーション料:オブジェクトの作成、読み取り、一覧取得などの操作に対する課金
  • ネットワーク料:データのダウンロード(下り)に対する課金。GCP内の同一リージョンでの通信は無料
  • 早期削除料:Nearline/Coldline/Archiveの最低保存期間前に削除した場合の追加課金

コスト全般の最適化については、クラウドコスト削減の方法で詳しく解説しています。

バケット設計のベストプラクティス

バケットの設計は、運用効率、セキュリティ、コストに直結する重要な要素です。以下のポイントを押さえて設計しましょう。

バケットの命名規則

バケット名はグローバルに一意である必要があるため、体系的な命名規則を定めましょう。

[組織名]-[プロジェクト]-[環境]-[用途]

例:
mycompany-webapp-prod-assets      # 本番環境のWebアセット
mycompany-webapp-staging-assets   # ステージング環境のWebアセット
mycompany-analytics-prod-raw      # 分析用の生データ
mycompany-backup-prod-db          # データベースバックアップ

リージョンの選択

バケットの配置先は3種類から選択できます。

リージョン(単一リージョン):特定地域のユーザーへの低レイテンシアクセス。最もコストが低い。日本向けならasia-northeast1(東京)を選択。

デュアルリージョン:2つのリージョンにデータを複製。高可用性と低レイテンシの両立。

マルチリージョン:複数の大陸にまたがってデータを複製。グローバルに展開するサービス向け。

# 東京リージョンにバケットを作成
gsutil mb -l asia-northeast1 -c standard gs://mycompany-webapp-prod-assets

# バケットの詳細を確認
gsutil ls -L -b gs://mycompany-webapp-prod-assets

フォルダ構造の設計

Cloud Storageには実際のフォルダは存在しませんが、/区切りのプレフィックスでフォルダのような構造を表現できます。

gs://mycompany-webapp-prod-assets/
  images/
    products/
    banners/
  css/
  js/
  documents/
    invoices/2026/03/
    reports/2026/Q1/

プレフィックスによる構造を適切に設計することで、ライフサイクルルールやアクセス制御の適用が容易になります。

アクセス権限管理の実践

Cloud Storageの権限管理は、データの安全性を確保する上で最も重要な要素です。GCP IAMとセキュリティ設計の考え方をベースに、Cloud Storage固有の設定を行います。

均一バケットレベルアクセスの推奨

Cloud Storageには2つのアクセス制御モデルがあります。

均一バケットレベルアクセス(推奨):IAMのみでアクセス制御を行います。シンプルで管理しやすく、組織のセキュリティポリシーに適合しやすい方式です。

きめ細かいアクセス制御:IAMに加えてACL(アクセス制御リスト)も使います。オブジェクトごとに異なる権限を設定できますが、管理が複雑になります。

# 均一バケットレベルアクセスを有効化
gsutil uniformbucketlevelaccess set on gs://mycompany-webapp-prod-assets

よく使うIAMロール

Cloud Storageに関連する主要なIAMロールは以下の通りです。

  • roles/storage.objectViewer:オブジェクトの読み取りのみ
  • roles/storage.objectCreator:オブジェクトの作成のみ(読み取り不可)
  • roles/storage.objectUser:オブジェクトの読み取り・作成・削除
  • roles/storage.admin:バケットの管理を含むすべての操作
# サービスアカウントにオブジェクト閲覧権限を付与
gsutil iam ch serviceAccount:my-app@PROJECT_ID.iam.gserviceaccount.com:roles/storage.objectViewer \
  gs://mycompany-webapp-prod-assets

署名付きURL(Signed URL)の活用

特定のオブジェクトへの一時的なアクセスを許可する場合、署名付きURLが有効です。公開したくないファイルを、限られた時間だけ共有するシーンで使います。

# 1時間有効な署名付きURLを生成
gsutil signurl -d 1h service-account-key.json gs://mycompany-webapp-prod-assets/documents/report.pdf
# Pythonでの署名付きURL生成
from google.cloud import storage
import datetime

def generate_signed_url(bucket_name, blob_name):
    client = storage.Client()
    bucket = client.bucket(bucket_name)
    blob = bucket.blob(blob_name)

    url = blob.generate_signed_url(
        version="v4",
        expiration=datetime.timedelta(hours=1),
        method="GET",
    )
    return url

ライフサイクル管理による自動最適化

データの保持期間や利用頻度に応じて、ストレージクラスの自動変更やオブジェクトの自動削除を設定できます。これにより、手動のメンテナンスなしにコストを最適化できます。

ライフサイクルルールの設定

{
  "lifecycle": {
    "rule": [
      {
        "action": {"type": "SetStorageClass", "storageClass": "NEARLINE"},
        "condition": {"age": 30, "matchesStorageClass": ["STANDARD"]}
      },
      {
        "action": {"type": "SetStorageClass", "storageClass": "COLDLINE"},
        "condition": {"age": 90, "matchesStorageClass": ["NEARLINE"]}
      },
      {
        "action": {"type": "SetStorageClass", "storageClass": "ARCHIVE"},
        "condition": {"age": 365, "matchesStorageClass": ["COLDLINE"]}
      },
      {
        "action": {"type": "Delete"},
        "condition": {"age": 2555}
      }
    ]
  }
}
# ライフサイクルルールを適用
gsutil lifecycle set lifecycle.json gs://mycompany-backup-prod-db

この設定により、データが以下のように自動遷移します。

  • 作成から30日後:Standard → Nearline
  • 作成から90日後:Nearline → Coldline
  • 作成から1年後:Coldline → Archive
  • 作成から7年後:自動削除

バージョニングとの組み合わせ

オブジェクトのバージョニングを有効にすると、上書きや削除の操作で以前のバージョンが保持されます。ライフサイクルルールと組み合わせて、古いバージョンを自動削除しましょう。

# バージョニングを有効化
gsutil versioning set on gs://mycompany-webapp-prod-assets

# 古いバージョンを90日後に自動削除するルール
gsutil lifecycle set lifecycle-noncurrent.json gs://mycompany-webapp-prod-assets

データ転送と他サービスとの連携

Cloud Storageは、GCPの多くのサービスとシームレスに連携できます。

gsutilによるデータ転送

# ローカルからアップロード
gsutil cp local-file.csv gs://mycompany-analytics-prod-raw/data/

# ディレクトリごとアップロード(並列転送)
gsutil -m cp -r ./local-dir gs://mycompany-analytics-prod-raw/

# バケット間のコピー
gsutil -m cp -r gs://source-bucket/data/ gs://dest-bucket/data/

# rsyncで差分同期
gsutil -m rsync -r ./local-dir gs://mycompany-webapp-prod-assets/static/

-mフラグを付けると並列転送が有効になり、大量のファイルを高速に転送できます。

イベントトリガーによる自動処理

Cloud Storageへのオブジェクト作成・削除をトリガーにして、Cloud FunctionsCloud Runで自動処理を実行できます。

# Cloud Functionsでアップロードイベントを処理
gcloud functions deploy process-upload \
  --runtime python311 \
  --trigger-resource mycompany-analytics-prod-raw \
  --trigger-event google.storage.object.finalize \
  --region asia-northeast1

代表的なユースケースは以下の通りです。

  • 画像アップロード時のサムネイル自動生成
  • CSVアップロード時のデータ検証とBigQueryへの自動取り込み
  • ログファイルの自動解析と通知

静的Webサイトのホスティング

Cloud Storageは静的Webサイトのホスティングにも利用できます。

# Webサイト設定を有効化
gsutil web set -m index.html -e 404.html gs://www.example.com

# 公開アクセスを許可
gsutil iam ch allUsers:objectViewer gs://www.example.com

CDNとしてCloud CDNを前段に配置すると、キャッシュによる高速配信が可能になります。

セキュリティ対策とコンプライアンス

企業データを安全に保管するためのセキュリティ設定を実施しましょう。

暗号化の設定

Cloud Storageでは、すべてのデータがデフォルトでGoogle管理の暗号化キーにより暗号化されます。より高いセキュリティが求められる場合は、以下の選択肢があります。

  • CMEK(Customer-Managed Encryption Key):Cloud KMSで自社管理の暗号化キーを使用
  • CSEK(Customer-Supplied Encryption Key):自社で生成した暗号化キーを使用
# CMEKを使ったバケットの作成
gsutil mb -l asia-northeast1 \
  -k projects/PROJECT_ID/locations/asia-northeast1/keyRings/my-keyring/cryptoKeys/my-key \
  gs://mycompany-sensitive-data

パブリックアクセス防止

意図しないデータ公開を防ぐために、組織ポリシーでパブリックアクセスを制限しましょう。

# バケットレベルでパブリックアクセスを防止
gsutil pap set enforced gs://mycompany-sensitive-data

監査ログの有効化

Cloud Audit Logsを有効にすると、誰がいつどのオブジェクトにアクセスしたかを記録できます。コンプライアンス要件を満たすために重要な設定です。

まとめ:Cloud Storageを使いこなすためのチェックリスト

Cloud Storageを本番環境で安全かつ効率的に運用するためのポイントを振り返ります。

  • バケット設計:命名規則を統一し、リージョンとストレージクラスを適切に選択する
  • 権限管理:均一バケットレベルアクセスを採用し、IAMで最小権限の原則を徹底する
  • ライフサイクル:データの利用頻度に応じたストレージクラスの自動遷移を設定する
  • セキュリティ:パブリックアクセス防止、暗号化、監査ログを適切に構成する
  • コスト最適化:不要データの自動削除、ストレージクラスの最適化で無駄を排除する
  • 連携Cloud RunCloud Functionsと組み合わせてデータ処理を自動化する

まずは現在のファイルサーバーやバックアップデータの棚卸しから始め、Cloud Storageへの移行計画を策定してみてください。ストレージクラスの適切な選択とライフサイクル管理の導入だけでも、大幅なコスト削減を実現できるはずです。

#GCP#Cloud Storage#ストレージ
共有:
無料メルマガ

週1回、最新の技術記事をお届け

AI・クラウド・開発の最新記事を毎週月曜にメールでお届けします。登録は無料、いつでも解除できます。

プライバシーポリシーに基づき管理します

AI活用のヒントをお探しですか?お気軽にご相談ください。

まずは話だけ聞いてもらう