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版」という本を書きました。
![](https://www.sbcr.jp/wp-content/uploads/2023/01/9784815617929-1-407x596.jpg)
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。
![](https://www.sbcr.jp/wp-content/uploads/2024/01/9784815625382-3-420x596.jpg)
「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。
![](https://www.shuwasystem.co.jp//images/book/637791.jpg)
「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
![](https://book.mynavi.jp/files/topics/135344_ext_06_0.jpg?v=1673514682)
「AWSではじめるLinux入門ガイド」という本を書きました。
![](https://www.yamamanx.com/wp-content/uploads/2023/12/81Rp5O9We6L._SY522_.jpg)
![@yamamanx](https://www.yamamanx.com/wp-content/plugins/lazy-load/images/1x1.trans.gif)
開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
Active Directory認証でAWSマネジメントコンソールにSSO
こちらの2つのサイトを参考にすすめました。 Active Directory資産 …
-
-
Former2で既存リソースのCloudFormationテンプレート出力を試してみた
JAWS DAYS 2020の資料確認のお手伝いを少ししてまして、「ゼロからはじ …
-
-
S3オブジェクトへのリクエストをCloudTrail, Athenaで識別する(パーティショニング)
Amazon S3オブエジェクトへのリクエストをCloudTrail, Athe …
-
-
ads.txtをS3に配置してCloudFrontで設定する
ads.txtのダウンロード ads.txt設置してねってメールが来てました。 …
-
-
AWS Expert Online at JAWS-UG首都圏エリアに参加して「Amazon EC2 スポットインスタンス再入門」を聞いてきた
AWS Expert Onlineという勉強会がありまして、AWS ソリューショ …
-
-
Amazon API GatewayをLambda(Python)で削除する
やりたいこと 特定のAWSアカウント、特定のリージョン内のAPI Gateway …
-
-
S3バケットのデフォルト暗号化はデフォルトだったことを確認しました
S3バケットのデフォルト暗号化は名前のとおりだとデフォルトなので、暗号化を指定し …
-
-
YouTubeチャンネル「ヤマムギ」をはじめました
YouTubeチャンネル「ヤマムギ」をはじめました。 2021年GWチャレンジと …
-
-
Amazon S3オブエジェクトへのリクエストをCloudTrail, Athenaで識別
こちらCloudTrail を使用した Amazon S3 リクエストの識別に書 …
-
-
Lucidchart AWSアカウントからインポート機能で自動作図
SNSでLucidchartというサービスが話題になってました。 AWSの環境を …