
Amazon Quick Flow から呼び出す OpenAPI コネクタアクションに API キー認証を追加してみた
いわさです。
以前、Amazon Quick の Flow から OpenAPI コネクタ経由で API Gateway + Lambda を呼び出す記事を書きました。
このときは API Gateway を認証なしのパブリック API として作っていました。
作っていたというか、この時は Quick 側で OpenAPI コネクタを定義する際に「認証なし」しか選べなかったのです。
実はちゃんと準備すれば認証オプションを使うことができます。
その後セキュリティ強化する機会があったので、まずは API キーを使えないか試してみることにしました。紹介します。
実際にやってみる
まず検証用に、固定の JSON を返すだけの API を API Gateway で作りました。
GET /hello でレスポンスを返します。
認証はまだ設定していないので、この時点では API キーなしで呼び出し可能です。レスポンスはこんな感じ・
curl -s "https://xxxxxx.execute-api.ap-northeast-1.amazonaws.com/prod/hello"
{
"message": "hello from hoge-iwasa1101",
"authenticated": false
}
そしてこの API を前回と同じように Quick の OpenAPI コネクタに登録するため、OpenAPI スキーマを作りました。
{
"openapi": "3.0.3",
"info": {
"title": "hoge iwasa1101 API key demo",
"description": "Returns a fixed test response.",
"version": "1.0.0"
},
"servers": [
{ "url": "https://xxxxxx.execute-api.ap-northeast-1.amazonaws.com/prod" }
],
"components": {
"securitySchemes": {}
},
"paths": {
"/hello": {
"get": {
"operationId": "getHello",
"summary": "Get a fixed test response",
"description": "Returns a fixed JSON message. No request body.",
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"message": { "type": "string" },
"authenticated": { "type": "boolean" }
}
}
}
}
}
}
}
}
}
}
API が出来たので Amazon Quick 上でコネクターを設定しましょう。
Open API Specification コネクタ作成で先ほど作成した OpenAPI スキーマ定義をアップロードします。
ちなみに最初titleプロパティを「hoge-iwasa1101 API key demo`」で定義していたところ、Quick のコネクタにアップロードした時に以下のエラーが発生しました。
Missing or invalid value for field: 'title'. Must be in format '^[a-zA-Z0-9 ]{1,100}$'
title に使えるのは半角英数字とスペースだけで、ハイフンが入っているとエラーになります。
で、アップロードしたのですが次のように Auth 設定は None しか選べませんでした。あれ?そうなのか。

一旦こちらでコネクタを用意しフローから呼び出せるかまず確認しました。

はい。まずは認証なしでの API 呼び出しは成功しました。
この状態で API Gateway 側で API キー必須にしてみましょう。

次のように呼び出しに失敗するようになりましたね。API キー指定してないから、当然ですね。

続いて API キーを設定できるようにしてみましょう。
ただし、先ほどのコネクターを編集しようと思ったのですが、次のように認証方法や Auth 設定は変更が出来ませんでした。


どうやら、作成済みコネクタの編集では今回の変更反映は出来ないようです。
ということで新しくコネクタを作成してフロー側を差し替えるようにしたいと思います。コネクタの OpenAPI Specification コネクタを選択して以下から新規作成できます。

そしてコネクタ作成画面で認証方式を選べるようにするには、OpenAPI スキーマ側に認証の定義(securityScheme)が必要です。
公式ドキュメントに記載がありました。
No authentication — Default option when no security schemes are defined in the specification.
OpenAPI コネクタがサポートする認証方式は、OAuth 2.0・API Key・認証なしの3つです。API Key はクエリパラメータかヘッダーで渡せます。
なので最初にアップロードした securitySchemes が空のスキーマだと、Auth 設定のプルダウンには「None」しか出てこなかったんですね。
そこで、API キー認証を OpenAPI に定義しました。x-api-key ヘッダーで渡す形です。
{
"components": {
"securitySchemes": {
"ApiKeyAuth": {
"type": "apiKey",
"in": "header",
"name": "x-api-key"
}
}
},
"security": [
{ "ApiKeyAuth": [] }
]
}
このスキーマでアップロードし直すと、Auth 設定のプルダウンに「API Key」が出てくるようになりました。これだ!

そしてここで「API Key」を選び API キーの入力欄に API Gateway で作成したキーの値を入れます。
このコネクタをフローのアクションに指定し直して実行すると、今度は 200 が返ってきました。


API キーを設定したコネクタからのみ呼び出せるようになりましたね!!
さいごに
本日は Amazon Quick Flow から呼び出す OpenAPI コネクタアクションに API キー認証を追加してみました。
API キーを設定して OpenAPI スキーマでsecuritySchemesを定義することで、キーを持つ Quick のコネクタからだけ呼び出せるようになりましたね。
他にも認証方法として OAuth 2.0 もサポートされているので認証・認可周りの制御にうまく使えそうです。








