ヤマムギ

growing hard days.

*

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の呼び出しをすると、以下のメッセージが返ってきました。

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ベースのポリシーは以下をインラインポリシーに設定しました。

ARNは、API Gatewayコンソールのリソースのメソッドリクエストにありますので、コピーして貼り付けています。

段階的に確認していきますので、まずはユーザーを作成して、APIのリソースベースのポリシーはなしで試します。

IDベースのみで確認

APIの実行確認は、POSTMANで行いました。
IAM認証によるAPIの実行には、バージョン4での署名が必要なのですが、POSTMANにアクセスキーIDとシークレットアクセスキーを設定すると、生成してくれますので便利です。

同じアカウントでIDベースのポリシーなし

api-not-exe

IDベースのポリシーで許可していませんので、api-not-exeユーザーには権限が無いメッセージが返ってきました。
想定どおりです。

同じアカウントでIDベースのポリシーあり

api-exe-nonvalid

IAM認証が成功して、結果が表示されました。

違うアカウントでIDベースのポリシーあり

api-exe-valid

リソースに対しての権限がないというメッセージが表示されました。

リソースベースのポリシーを別アカウント向けに設定して確認

APIのリソースポリシーはこのようなポリシーです。

今回は特定のIAMユーザーのみですが、対象のアカウント側に誰に許可するかを委任する場合は、 “arn:aws:iam::098765432109:root”をPrincipalにします。

違うアカウントでIDベースのポリシーあり

api-exe-valid

認証が成功しました。
別のアカウントからはAPIにリソースポリシーが必要ということがわかりました。

ちなみに

同じアカウントでIDベースのポリシーあり

api-exe-nonvalid

認証成功しました。
リソースポリシーで別アカウントのみとしたいときは拒否ポリシーも必要ですね。

ということで、リソースポリシーに拒否ポリシーを追加してNotPrincipalにしてみました。

これで、別アカウントの特定のIAMユーザー以外からは拒否できるAPIができました。


最後までお読みいただきましてありがとうございました!

「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。

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

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

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

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

 - AWS , ,

ad

ad

  関連記事

AWS CLIからIAM Identity CenterへサインインしてCodeCommitのリポジトリを使用する

Macで操作しました。 AWS CLIバージョンアップ [crayon-661c …

Lambda関数からAWS Systems Managerパラメータストアの値を取得して更新する

Lambda関数で自分自身の環境変数を更新する だと、Lambdaのエイリアスと …

AWS AmplifyでTodoアプリを作るハンズオンをやってみました

【お手軽ハンズオンで AWS を学ぶ】AWS Amplify で Todo アプ …

Amazon S3アクセスポイント経由からアクション可能なポリシー

S3アクセスポイントを使うことで、複雑で長いバケットポリシーを避け、アクセスポイ …

AWS ControlTowerで既存アカウントをまとめて追加

AWS Organizationsに新たに招待したアカウントをAWS Contr …

Former2で既存リソースのCloudFormationテンプレート出力を試してみた

JAWS DAYS 2020の資料確認のお手伝いを少ししてまして、「ゼロからはじ …

VPC環境でLambdaを100同時実行してプライベートIPアドレスを確認した

2019年9月発表のLambda 関数が VPC 環境で改善されます以降に、VP …

S3バケットのデフォルト暗号化はデフォルトだったことを確認しました

S3バケットのデフォルト暗号化は名前のとおりだとデフォルトなので、暗号化を指定し …

AWS Organizationsで組織全体のAWS CloudTrailを有効にしました

Organizationsのサービスメニューから、CloudTrailを選択して …

AWS Systems Manager Session Managerでログを有効にする

AWS Systems Manager Session Managerでのコマン …