Amazon API GatewayのIAM認証の動作を確認しました
2021/10/17
API GatewayのIAM認証は、IAMユーザーが実行できるように認証する、ということはわかっていても細かい動作は手元で動かしてみないと、でしたのでやってみました。
主な手順は公式ナレッジのAPI Gateway API の IAM 認証を有効にする方法を教えてくださいを参考にしています。
Amazon API Gatewayでモックを作るで作ったAPIで試します。
目次
API Gatewayの設定
メソッドリクエストで、[認可]に[AWS_IAM]を選択しました。
[アクション]-[APIのデプロイ]でデプロイしておきました。
そして、ブラウザからAPIの呼び出しをすると、以下のメッセージが返ってきました。
1 2 3 4 |
{ message: "Missing Authentication Token" } |
IAM
IAMユーザーは同じアカウントと別アカウントで3ユーザー作っておきます。
* api-exe-valid
* api-exe-nonvalid
* api-not-exe
各IAMユーザーの最終的なシナリオです。
IAMユーザー | IDベースのポリシー | リソース(API)ベースのポリシー | アカウント |
---|---|---|---|
api-exe-valid | 許可 | 許可 | 別 |
api-exe-nonvalid | 許可 | なし | 同 |
api-not-exe | なし | なし | 同 |
IDベースのポリシーは以下をインラインポリシーに設定しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "execute-api:Invoke" ], "Resource": [ "arn:aws:execute-api:us-east-1:123456789012:apiid/prod/GET/" ] } ] } |
ARNは、API Gatewayコンソールのリソースのメソッドリクエストにありますので、コピーして貼り付けています。
段階的に確認していきますので、まずはユーザーを作成して、APIのリソースベースのポリシーはなしで試します。
IDベースのみで確認
APIの実行確認は、POSTMANで行いました。
IAM認証によるAPIの実行には、バージョン4での署名が必要なのですが、POSTMANにアクセスキーIDとシークレットアクセスキーを設定すると、生成してくれますので便利です。
同じアカウントでIDベースのポリシーなし
api-not-exe
1 2 3 4 |
{ "Message": "User: arn:aws:iam::123456789012:user/api-not-exe is not authorized to perform: execute-api:Invoke on resource: arn:aws:execute-api:us-east-1:********9012:apiid/prod/GET/" } |
IDベースのポリシーで許可していませんので、api-not-exeユーザーには権限が無いメッセージが返ってきました。
想定どおりです。
同じアカウントでIDベースのポリシーあり
api-exe-nonvalid
1 2 3 4 5 |
{ "statusCode": 200, "message": "Hello from API Gateway!" } |
IAM認証が成功して、結果が表示されました。
違うアカウントでIDベースのポリシーあり
api-exe-valid
1 2 3 4 |
{ "Message": "User: arn:aws:iam::098765432109:user/api-exe-valid is not authorized to access this resource" } |
リソースに対しての権限がないというメッセージが表示されました。
リソースベースのポリシーを別アカウント向けに設定して確認
APIのリソースポリシーはこのようなポリシーです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS":"arn:aws:iam::098765432109:user/api-exe-valid" }, "Action": "execute-api:Invoke", "Resource": "arn:aws:execute-api:us-east-1:1234566789012:apiid/prod/GET/" } ] } |
今回は特定のIAMユーザーのみですが、対象のアカウント側に誰に許可するかを委任する場合は、 “arn:aws:iam::098765432109:root”をPrincipalにします。
違うアカウントでIDベースのポリシーあり
api-exe-valid
1 2 3 4 5 |
{ "statusCode": 200, "message": "Hello from API Gateway!" } |
認証が成功しました。
別のアカウントからはAPIにリソースポリシーが必要ということがわかりました。
ちなみに
同じアカウントでIDベースのポリシーあり
api-exe-nonvalid
1 2 3 4 5 |
{ "statusCode": 200, "message": "Hello from API Gateway!" } |
認証成功しました。
リソースポリシーで別アカウントのみとしたいときは拒否ポリシーも必要ですね。
ということで、リソースポリシーに拒否ポリシーを追加してNotPrincipalにしてみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::098765432109:user/api-exe-valid" }, "Action": "execute-api:Invoke", "Resource": "arn:aws:execute-api:us-east-1:1234566789012:apiid/prod/GET/" }, { "Effect": "Deny", "NotPrincipal": { "AWS": "arn:aws:iam::098765432109:user/api-exe-valid" }, "Action": "execute-api:Invoke", "Resource": "arn:aws:execute-api:us-east-1:1234566789012:apiid/prod/GET/" } ] } |
これで、別アカウントの特定のIAMユーザー以外からは拒否できるAPIができました。
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。

「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。

「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。

「AWSではじめるLinux入門ガイド」という本を書きました。


開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
Application Load Balancer スティッキーセッションでどれぐらい偏るかを偶然見ました
Amazon Linux2のPHPを7.2から7.3へアップデートしましたでアッ …
-
-
CloudWatch インテリジェントオペレーションでこのブログのログを調査してみました
CloudWatch インテリジェントオペレーションを設定しました。 設定 マネ …
-
-
Projectタグを強制するSCPでアクションやリソースを限定しないとき成り立つのか
ふと疑問に思ったので試しました。 予想は、拒否されてしまう、です。 [crayo …
-
-
AWSのアカウントを新規作成と、最低限やっておいた方がいいMFAの設定
AWSのアカウントを新規作成する手順を書き出しておきます。 ※2017年8月6日 …
-
-
当ブログ(WordPress)のCloudFrontのキャッシュヒット率があがった
当ブログの構成です。 S3とALB+EC2 Auto Scalingで構成してい …
-
-
CloudTrailのログファイルの整合性検証をAWS CLIで実行しました
CloudTrailのログファイルの検証を「有効」にしました。 上記のようなCl …
-
-
AWSマネジメントコンソールのマルチセッションサポート
AWSマネジメントコンソールにマルチセッションサポートが追加されましたので使いま …
-
-
Aurora Serverless Data APIを有効にしてQuery Editorを使ってみました
Aurora ServerlessのMySQLでData APIを有効にして作成 …
-
-
EC2インスタンスを必要最小限のパラメータでCLIとSDKから起動する
EC2インスタンスをCLIとSDKから起動するデモで、パラメータを必要最小限にし …
-
-
AWS Summit 2016 Tokyoに参加してきました (Day2)
馬込は非常に良い天気です。 泊まっている部屋が2Fでしたので窓を明けると歩いてい …