AWS Step FunctionsのCall third-party APIでGoogle Cloud APIsを認証する方法
前提
- ※2024/09/23時点の情報
- 動作未確認
TL;DR
- Google Cloud APIs の 一部の API に関しては API キーを使用して認証できそう(ただほとんどの Google Cloud APIs で API キーはサポートしていない)
- その他は基本的に対応していなさそう
Call third-party API とは
AWS Step Functions からサードパーティの外部 API を直接呼び出せる機能。ドキュメントでは HTTP タスクと表現され、ステートの1種として扱われている。指定した HTTP エンドポイントへ Step Functions から直接 API を呼び出せる。
AWS公式ドキュメント - Step Functions ワークフローAPIsでサードパーティーを呼び出す
認証については Step Functions ではなく EventBridge の Connection を用いて行う。下記は公式で紹介されている図解。
AWS公式ドキュメント - API destinations as targets in Amazon EventBridge
下記のいずれかの認証が選択できる。
- Basic 認証
- OAuth Client Credentials Grant の認証
- API キー認証
Google Cloud APIsとは(Google Cloud の API 仕様)
Google Cloud APIs は Google Cloud がユーザー向けに公開している Web API のこと。インターフェースとして JSON 形式の HTTP と gRPC をサポートしている。
Google Cloud 公式ドキュメント - Google Cloud API
Google Cloud 公式ドキュメント - API 設計ガイド
Step Functions の Call third-party API では HTTP エンドポイントを指定する形となっているので、REST API のインターフェースを使用することになる。そしてその多くは当然認証が必要。
Google Cloud の REST API で利用することのできる認証情報として下記が挙げられている。
- gcloud CLI 認証情報
- アプリケーションのデフォルト認証情報(ADC)に指定する認証情報
- サービスアカウントの権限を借用して指定する認証情報
- メタデータサーバーから返される認証情報
- API キーの認証情報
Google Cloud 公式ドキュメント - REST を使用して認証する
Google Cloud 公式ドキュメント - API キーを使用して認証する
Call third-party API から Google Cloud APIs の API を叩くにはどの認証情報を使えばよさそうか
Google Cloud APIs の 認証に関するドキュメントを中心に調べ、Call third-party API との相性を考えた結果、 API キーくらいしか認証に使えなさそうという結論に至った。 その他の Google Cloud の認証情報については基本的に gcloud によるアクセストークン発行が伴うが、Call third-party API の State 上でトークンを発行しそのまま利用するといった方法は取れないため現実的ではない。
ただ、ほとんどの Google Cloud APIs は API キーをサポートしていないとのこと。
ほとんどの Google Cloud APIs は API キーをサポートしていません。この認証方法を使用する前に、使用する API が API キーをサポートしていることを確認してください。
Google Cloud 公式ドキュメント - API キーを使用して認証する
余談
-
Workload Identity 連携 による認証も考えたが、ADC 等の認証情報がファイルシステム上に存在しないといけないことから Call third-party API では不向きだと感じた(ファイルアップロード等はできない)。
-
独自のアプリケーションで OAuth2.0 を組み込むといったユースケースであれば Client Credentials Grant は使えそう。
おわりに
マルチクラウドで Step Functions から直接 Google Cloud の外部 API を呼び出したいといったケースで認証したい場合はどうすれば良いのだろうと思ったので調べたが、なかなかネックになりそうな感じだった。
Discussion