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
関連記事
-
-
ACM(AWS Certificate Manager)の承認メールを受け取るためにAmazon SESを設定する
何のためでもいいのですが、ドメインは持っているけど、そのドメイン宛にメールを送ら …
-
-
Microsoft TeamsのOutgoing Webhooksを使ってAWS Lambda(Python), Amazon API Gatewayとbot
Microsoft Teamsの検証その2、Slackで実装しているbotも対応 …
-
-
AWS CLIからIAM Identity CenterへサインインしてCodeCommitのリポジトリを使用する
Macで操作しました。 AWS CLIバージョンアップ [crayon-67d7 …
-
-
Amazon ECS Workshop for AWS Summit Online
INTRODUCTION TO AMAZON ECSに手順や必要なリンクがありま …
-
-
EKS「現在の IAM プリンシパルは、このクラスター上の Kubernetes オブジェクトにアクセスできません」
マネジメントコンソールでクラスターのオブジェクトを見ようと、リソースの名前空間や …
-
-
EC2インスタンスの起動で、–cli-input-jsonと–cli-input-yamlを使いました
AWS CloudShellから実行しました。 JSON実行 [crayon-6 …
-
-
このブログからパブリックIPv4 IPアドレスをなくしてコスト最適化
2024年2月より使用中のパブリックIPv4アドレスに1時間あたり0.005US …
-
-
VyOSでssm-userからvyosユーザーに切り替える
EC2 VyOSで/etc/resolv.confを設定しました VyOSにSS …
-
-
AWS Toolkit for Eclipseをセットアップ(2021年版)
AWS Toolkit for Eclipseをセットアップするで6年前に書いて …
-
-
Feedlyのフィードを自動でSlackへ投稿する(AWS Lambda , Amazon DynamoDB)
やりたいこと Feedlyで共有したいフィードに特定のタグを付けます。 特定のタ …