公式ナレッジのAPI Gateway API に IAM 認証を有効化するにはどうすればよいですか?を参考に実装してみました!
Lambda関数を作成
一から作成/ランタイムPython3.8/他はデフォルト
関数作成ユーザーがiam:PassRole
の権限がないとエラーが発生します。
AWS のサービスにロールを渡すアクセス権限をユーザーに付与する
テストなので超超シンプルな関数です。
API Gateway作成
- REST API > 構築 > 新しいAPIの作成
- アクションのプルダウンからメソッドの作成でGETを選択する。
- 先ほど作成したLambda関数と統合する。
保存が完了したらデプロイ
URLが発行されるのでPostmanから叩いてみます。
この時点ではパブリックAPIです。
API GatewayのIAM認証を有効化
API Gatewayでは、APIに対して以下のような認証方式が存在します。
- Cognitoを使った認証
- サードパーティの認証基盤とLambda Authorizerを使った認証
- IAM認証
今回はIAM認証での実装なので作成したメソッドリクエストの認可をAWS_IAM
に変更し再度デプロイします。
再度、APIをPostmanから叩いてみます。
すると"Missing Authentication Token"
とメッセージが返ってきます。
IAMの設定
- 作成したAPIのリクエストの権限ポリシーを作成
- IAMユーザー作成しポリシーをアタッチ
ポリシーの作成
作成したAPIのarn
をResourceに指定しインラインポリシーを作成します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"execute-api:Invoke"
],
"Resource": [
"arn:aws:execute-api:........../*/GET/"
]
}
]
}
IAMユーザーを作成し上記ポリシーをアタッチします。Postmanでテストする際にAccess key ID
とSecret access key
を使うのでメモします。
動作確認
-
Postmanに作成したIAMの
Access key ID
とSecret access key
をセットして叩いてみます。
出来ました!
ちなみに権限が足りないと下記のようなエラーが出ます。
ポリシーを確認してみてください。
{
"Message": "User: arn:aws:iam::123456789:user/api-unvalid is not authorized to perform: execute-api:Invoke on resource: arn:aws:execute-api............../test/GET/"
}