ヤマムギ

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

  関連記事

DynamoDB IAMポリシーで特定項目だけを許可する

検証記録です。 対象テーブル 書籍のサンプルで作ったこちらです。 所属バンドの楽 …

Amazon Location Service入門ワークショップ-トラッカー

トラッカーでデバイスの位置や移動履歴を追跡できます。 関連記事 Amazon L …

T3.nanoで仮想メモリ割当をユーザーデータで実行する

T3.nanoはメモリがだいたい500MBです。 実行する処理によってはメモリエ …

AWS Toolkit for EclipseからLambda関数を直接作成できずにMavenでパッケージ化して作成

AWS Toolkit for EclipseからLambda関数を直接作成 チ …

Amazon SNSサブスクリプションフィルターを設定してPython(boto3)からPublish

上記のような構成でRocketChatを使うとき使わないときがあります。 都度都 …

Redmineの添付ファイルをS3に同期する

RedmineをAWS上で構築するデザインを考えていて、せっかくなので冗長化しよ …

Active Directory認証でAWSマネジメントコンソールにSSO

こちらの2つのサイトを参考にすすめました。 Active Directory資産 …

AWS Lambda(Python)で生成した文字をAmazon Connectで音声を設定して発信する

Amazon Connectから発信する電話の音声を動的に設定します。 Lamb …

ALBのヘルスチェックでPHPとMySQL接続をチェック

当ブログで504エラーが発生して、オートスケーリングにより自動でインスタンスが置 …

試したい事があるのでAWS でとりあえずAmazon Linuxのサーバを作る

1年間の無料キャンペーン期間中に検証する とある勉強会でせっかくAWSのアカウン …