Google Cloudの根幹を成すGoogle Cloud APIsとは何か

記事タイトルとURLをコピーする

G-gen の杉村です。Google Cloud は Google Cloud APIs と呼ばれる Web API 群によって成り立っています。この仕組みを理解すると、Google Cloud というパブリッククラウドサービス全体への理解が深まります。

Google Cloud APIs とは

Google Cloud APIs とは、Google Cloud がユーザーのために開放している Web API の総称です。

大事なポイントとして、Google Cloud APIs という名称の独立したプロダクトがあるわけではありません。Compute Engine や Cloud Storage、BigQuery といった各サービスには Web API が用意されていますが、そういった API 群を総称して Google Cloud APIs と呼んでいます。

Google Cloud APIs はインターネットに公開されており、誰でもアクセスすることができます。ただし、利用には Google アカウントと IAM による認証・認可が必要です。API エンドポイントはインターネットに公開されていますが、IAM という高度な仕組みによる認証・認可が必須なこと、また通信は SSL/TLS により暗号化されていることから、セキュアに利用することができます。

API 設計

設計ガイド

Google Cloud APIs は一定の設計ガイドに沿って設計されており、異なるサービスでも一貫した構成となっているので、効率良く理解することができます。

そのガイドは公開されており、以下のリンクから確認できます。このガイドは Google の API 設計に対する考え方が詳細に書かれており、我々が REST API などを設計する際にも参考にすることができます。

リソース指向

Google Cloud APIs の多くは、REST API として設計されています。

REST API では、原則的に URL(URI)をリソース名として、これに対する HTTP メソッド(CREATE、GET、POST、DELETE...)でリソースを操作します。REST API についてはインターネット上に多数の情報がありますので、そちらを参照してください。

Google Cloud の API はリソース指向で設計されており、リソースには親子関係があります。親となって複数の末端リソースを収容できるリソースをコレクション、またはコレクションリソースと呼び、末端のリソースを単にリソースまたはシンプルリソースと呼びます。

例として、Compute Engine のリソース URI を見てみます。以下は、インスタンス(VM)の URI です。

https://compute.googleapis.com/compute/v1/projects/{project}/zones/{zone}/instances/{resourceId}

instances というコレクションの中に、リソース ID で一意に特定されるリソースがあることが分かります。この URI に対して GET リクエストをすることで、インスタンスの情報を得ることができます。

例として gcloud compute instances describe ${INSTANCE_ID} というコマンドを考えます。このコマンドを実行すると、gcloud コマンドが内部的に上記のインスタンスリソースの URI に対して HTTP プロトコルで GET リクエストを投げています。

また、上記のようなコマンドでインスタンス ID を指定しても、デフォルト値で、もしくは明示的にゾーンを指定しなければ「ゾーンを指定してください」というプロンプトが返されます。これも、リソース URI にゾーンが含まれているからだと理解することができます。

リソース構成を始めとするこういった API 設計の原則を知っていれば、Google Cloud や gcloud、Cloud SDK の利用方法に統一性が見いだせるため、学習効率が良くなります。

API エンドポイント

各 Google Cloud サービスには API のエンドポイント URL があります。以下は、一例です。

サービス名 代表的なリソース エンドポイント リファレンスへのリンク
Compute Engine インスタンス、VPC、サブネット compute.googleapis.com リファレンス
BigQuery データセット、テーブル、ジョブ bigquery.googleapis.com リファレンス
Identity and Access Management (IAM) サービスアカウント、ロール iam.googleapis.com リファレンス
Cloud Monitoring タイムシリーズ、稼働時間チェック monitoring.googleapis.com リファレンス
Cloud Logging エントリ、ログバケット、シンク logging.googleapis.com リファレンス
Cloud Run サービス、サービスリビジョン run.googleapis.com リファレンス
Cloud Functions 関数 cloudfunctions.googleapis.com リファレンス
Cloud Pub/Sub トピック、サブスクリプション pubsub.googleapis.com リファレンス
Cloud Resource Manager プロジェクト、フォルダ、タグ cloudresourcemanager.googleapis.com リファレンス
Organization Policy 制約、ポリシー orgpolicy.googleapis.com リファレンス
Access Context Manager アクセスレベル、境界 (VPC SC) accesscontextmanager.googleapis.com リファレンス
Cloud Identity-Aware Proxy (Cloud IAP) IAP (top level)、宛先グループ iap.googleapis.com リファレンス
Cloud DNS マネージドゾーン、レコードセット dns.googleapis.com リファレンス

インターフェイス

概要

Google Cloud APIs は Web API であり、インターネットからアクセスできるようになっています。

しかし利用にはそれなりの手順が必要です。署名した認証情報をリクエストヘッダに含める必要がありますし、正しい形でパラメータを持たせてリクエストを作成しなくてはいけません。

これを自前のプログラムで全て実装するのには、大きい労力がかかります。その代わりに、Google Cloud がオフィシャルに配布するツールを使うことで、簡単に API を利用することができます。

Cloud SDK

Google からは、公式のクライアントライブラリ群である Cloud SDK が公開されています。

Cloud SDK は、以下を総称したものです。

  • Google Cloud CLI(別名 gcloud CLI)
  • クライアントライブラリ(Java、Python、Node.js、Ruby、Go、.NET、PHP、C#、C++ 用)

Google Cloud CLI は、Windows、macOS、Linux で動作するコマンドラインツールです。簡単な操作で Google Cloud API を利用することができます。gcloud コマンドは Python で書かれており、実行環境には Python のインストールが必要です。Google Cloud を利用する場合、日常的に使うことになるツールです。

クライアントライブラリは、各種プログラミング言語から Google Cloud API を呼び出すためのライブラリです。2025年4月現在では、Java、Python、Node.js、Ruby、Go、.NET、PHP、C#、C++ 用の公式ライブラリが公開されています。

これらの SDK を使えば、パラメータの整形や認証情報の取得、署名が自動的に行われ、簡単にリクエストを生成することができます。

Web コンソール

多くの人に馴染み深いであろう Google Cloud の Web コンソールも、API を呼ぶための操作インターフェイスの一種と言えます。

Web コンソール画面で操作を行うと、内部的にはログイン中の Google アカウントの認証情報を使って、各種 API へリクエストが行われます。

これを理解していれば、コンソール画面での操作中にエラーが発生した場合でも、API リファレンス等のドキュメントを活用してトラブルシューティングを適切に行うことができます。

認証・認可

アカウントと IAM

Google Cloud APIs への認証・認可は Google アカウントと Identity and Access Management(IAM)の仕組みによって行われます。

Google アカウントは Google Workspace もしくは Cloud Identity により管理されるアカウントです。またこれらによって組織的に管理されない無料の Google アカウントも利用可能です。

IAM は、Google Cloud リソース(VM や BigQuery データセット等)と Google アカウントの間での権限のひも付きを管理する機能です。詳細については、以下のドキュメントと、当社記事を参照してください。

リクエストへの署名

Google Cloud API へリクエストする際は、エンドポイント URI に対して HTTP リクエストを送りますが、このとき Authorization ヘッダに認証情報のトークンを含ませることで、認証・認可が行われます。

Cloud SDK や Web コンソールを用いていれば、ヘッダの追加は自動的に行われます。

なお、Google Maps Platform など一部の API は、IAM ではなく API キーによる認証もサポートしています。

プロジェクトと API の有効化

Google Cloud APIs は原則的に Google Cloud リソースであるプロジェクトにひも付きます。

Google Cloud のリソースは組織をトップとする階層構造になっており、プロジェクトはいわば「テナント」のイメージです。プロジェクトは、Amazon Web Services(AWS)で言うところの「AWS アカウント」に該当します。

プロジェクトで Google Cloud サービスごとの API を有効化することで、そのプロジェクトで該当 API を利用することができます。API リクエスト時には、プロジェクト ID を指定する必要があります。

以下は、Google Cloud CLI(gcloud コマンド)を使い my-project というプロジェクトで Compute Engine API を有効化するコマンドです。

gcloud services enable compute.googleapis.com --project=my-project

有効化するとそれ以降、Compute Engine のサービスが利用可能になります。以下がその例です。

gcloud compute instances create my-first-vm \
    --project=my-project \
    --zone=us-central1-a \
    --machine-type=e2-medium \
    --create-disk=auto-delete=yes,boot=yes,device-name=instance-1,image=projects/debian-cloud/global/images/debian-11-bullseye-v20221206,mode=rw,size=10,type=projects/my-project/zones/us-central1-a/diskTypes/pd-balanced 

上記のコマンドラインでは、--project オプションで、プロジェクトを指定しています。なお、gcloud ではデフォルトプロジェクトを設定すれば、都度指定しなくても構いません。このコマンドを実行すると、プロジェクト my-project に対して HTTP リクエストが生成され、実行されます。IAM 認証情報も自動的にリクエストヘッダに付与されます。

なお、クラウドリソースの料金は、通常はそのリソースが所属するプロジェクトに対して課金されます。

割り当てとシステム上限

割り当て

割り当て(Quota)とは、Google Cloud の各 API に設定された、API の呼び出しに関する制限のことです。Google Cloud プロダクトには、組織単位・プロジェクト単位・ユーザ単位など様々な粒度で割り当てが設定されています。

例えば、Compute Engine API には、1つのプロジェクトで利用可能な永続ディスクの合計サイズに、リージョンごとの割り当てが存在しています。割り当てを超えて永続ディスクを作成しようとすると、作成が失敗します。

割り当ての上限緩和

Google に対して、割り当ての引き上げリクエストを実行することができます。引き上げリクエストは Google Cloud コンソールの申請フォームから行うことができます。リクエストは Google によって審査され、これまでの使用実績や Google 側のリソース状況などを勘案して承認されます。

なお、他のパブリッククラウドでは、割り当ての上限緩和のためにサポート窓口でサポートケースを起票する必要がある場合があります。Google Cloud ではサポートケースを起票しなくても、Google Cloud コンソールの「割り当てとシステム上限」画面から割り当ての引き上げリクエストを申請できます。Google Cloudの技術サポート窓口である「カスタマーケア」は有償です。割り当ての引き上げリクエストのためだけに、有償のカスタマーケアを契約する必要はありません。

引き上げリクエストの手順については、以下の記事も参照してください。

blog.g-gen.co.jp

システム上限

Google Cloud には割り当ての他に、システム上限(System limit)があります。割り当ては引き上げリクエストができるのに対して、システム上限は固定値であり、変更できません。

各サービスの割り当てと上限

各 Google Cloud サービスには、割り当てや上限について説明した公式ドキュメントがあります。そのようなドキュメントを参考にしてください。

監査ログ

重要性

すべての Google Cloud のサービスは、API で操作されます。BigQuery にデータをロードするのも、クエリを投入するのも、API 経由です。Cloud Storage にオブジェクトをアップロードしたり、ダウンロードするときにも、API を使います。

セキュリティインシデントが発生したときに、API の操作ログが残っていないと「いつ・どこから・誰が・何を・どうした」の追跡ができません。逆に、監査ログが適切に記録されていれば、上記の追跡ができることに加え、監査ログが正しく取られているということ自体が、セキュリティ侵害に対する抑止力になります。

また、セキュリティ関連の各種第三者認証で、監査ログが適切に取得されていることが要件となっており、監査機関への提出が求められることもあります。

上記の理由から監査ログは重要です。

Google Cloud ではデフォルトで一定のレベルで監査ログが記録されるほか、追加の設定をすることで記録の粒度や、保存期間を変更することができます。

Google Cloud における監査ログ

Google Cloud では Cloud Audit Logs という仕組みで監査ログが記録されます。詳細は以下の記事をご参照ください。

blog.g-gen.co.jp

以下に、概要を記載します。

  • デフォルトではリソースに対する更新系の API リクエスト履歴のみが記録される
  • デフォルトでは保存期間は 30 日間
  • ログは Cloud Logging に保存される。追加の設定により BigQuery や他のストレージにも保存できる
  • 追加の設定により読み取り系の API リクエスト履歴や、リソース内のデータへのアクセス履歴の記録も可能

杉村 勇馬 (記事一覧)

執行役員 CTO

元警察官という経歴を持つ IT エンジニア。クラウド管理・運用やネットワークに知見。AWS 認定資格および Google Cloud 認定資格はすべて取得。X(旧 Twitter)では Google Cloud や Google Workspace のアップデート情報をつぶやいています。