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

そのガイドは公開されており、以下のリンクから確認できます。

このガイドは詳細に書かれているので、我々が 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

公式のクライアントライブラリ群である Cloud SDK が公開されています。Cloud SDK は以下を総称したものです。

  • Google Cloud CLI (別名 gcloud コマンド)
  • クライアントライブラリ (Java, Python, Node.js, Ruby, Go, .NET, PHP)

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

クライアントライブラリ は各種プログラミング言語から Google Cloud API を呼び出すためのライブラリです。Java, Python, Node.js, Ruby, Go, .NET, PHP の各言語で公式ライブラリが用意されています。

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

Web コンソール

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

Web コンソール画面で操作を行うと、裏ではログイン中の Google アカウントの認証情報を使って各種 API が実行されます。

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

認証・認可

アカウントと IAM

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

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

Cloud IAM は Google Cloud リソース (VM や BigQuery データセット等) と Google アカウントの間での権限のひも付きを管理する機能です。この意味については、後述の2つ目の参考記事をご参照ください。

IAM の詳細は以下を参考にしてください。

リクエストへの署名

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

Cloud SDK や Web コンソールを用いていれば、この作業は自動的に行われます。

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

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

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

Google Cloud のリソースは 組織 をトップとする階層構造になっており、プロジェクトはいわば「テナント」のイメージです。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 

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

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

監査ログ

重要性

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 12資格、Google Cloud認定資格11資格。X (旧 Twitter) では Google Cloud や AWS のアップデート情報をつぶやいています。