APIGatewayのIAM認証
lambdaのAPI化としてよく使われるAPIGatewayですが、APIの認証を入れたいときがあると思います。
特にAWS内部への処理をする場合、誰でも叩かれたらマズいですしね。
なのでAPIGatewayには認証機能が実装されています。
一番簡単なのはAPIキーを設定して、それがヘッダーに存在していて、かつ一致するかを判断する方法です。
が、これだと特定のユーザーだけ許可したい時とかに不便になります・・・
そこで出てくるのがIAM認証です。
APIGatewayの設定
APIGateway側はメソッドの部分を変えてリリースするだけで認証なしではアクセスできなくなります。
メソッドリクエストの認証をAWS_IAMにします。(下記はterraformのソース)
resource "aws_api_gateway_method" "test-post" { rest_api_id = aws_api_gateway_rest_api.test.id resource_id = aws_api_gateway_resource.test.id http_method = "POST" authorization = "AWS_IAM" }
Cognito
認証済みとそうでないものを判別するため、Cognitoのアイデンティティプールを使って判断します。
Cognitoは認証基盤のようなサービスなのですが、主にユーザープールとアイデンティティプールの2つの機能があります。
今回はアイデンティティプールを利用します。
アイデンティティプールを作成すると、~~Unauth_Roleという未認証ロールとAuth_Roleという認証ロールが作られます。
これのロールポリシーの作成で、許可するARNに作ったAPIGatewayのメソッドのARNを渡してあげればOKです。
認証済みならポリシーをアタッチしたユーザーのみアクセスできるようになります。