APIゲートウェイエンドポイントからラムダオーソライザーにカスタムデータを提供する方法

StV

使用しているAPIGatewayエンドポイントは、特定のオーディエンスへのアクセス許可によって制限されます。

ラムダオーソライザーを使用して外部サービスからアクセス許可を取得し、エンドポイントへのアクセスを許可または拒否するポリシーを作成するという考え方です。

APIエンドポイントにアクセス許可を一致させるには、エンドポイントが必要なアクセス許可を承認者に提供する必要があります。

私の質問は、エンドポイントデータを独自の必要なアクセス許可で強化し、それらをオーソライザーラムダで(おそらくイベントを介して)使用してさらに検証する方法です。

例:

  • User1は最初のエンドポイントGET / petstore / petsに転送されます(このエンドポイントには権限が必要です-> View:Pets
  • Lambda承認者が外部サービスにユーザー権限を要求します
  • サービスは次を返します:[ View:PetsView:Somethingelseなど]
  • ラムダオーソライザーは、ユーザー権限を必要なエンドポイント権限と照合し、照合時に許可ポリシーを作成します
  • User2も同じことをしますが、ペットを表示する権限がありません。一致しません->拒否

これがラムダの私のコードです:

import {Callback, Context} from 'aws-lambda';
import {Authorizer} from './authorizer';

export class App {

    constructor(private authorizer: Authorizer = new Authorizer()) {
    }

    public handleEvent(event, callback: Callback): Promise<void> {
        return this.authorizer.checkAuthorization(event, callback)
            .then((policy) => callback(null, policy))
            .catch((error) => callback(error, null));
    }

}

const app: App = new App();

module.exports.lambda_handler = async (event) => {
    return await app.handleEvent(event);
};

checkAuthorizationメソッドのコード:

export class Authorizer {


    public resourceAuthorizer: ResourceAuthorizer = new ResourceAuthorizer();
    public authenticationChecker: AuthenticationChecker = new AuthenticationChecker();

    public checkAuthorization(event, callback): Promise<object> {

        const endpointPermissions = event.endpointPermissions;  // <== this is what I need, a custom field in the event which
                                                            // is provided from the api endpoint in some way
                                                            // in my example this whould contain a string or json 
                                                            // with 'View:Pets' and 'View:Somethingelse'

        return this.authenticationChecker.check(event)
            .then((decodedJwt) => {
                const principalId: string = decodedJwt.payload.sub;

            return Promise.resolve(decodedJwt)
                .then((jwt) => this.resourceAuthorizer.check(jwt, event.endpointPermissions))
                .then((payload) => callback(null,
                getAuthorizationPolicy(principalId, 'Allow', event.endpointPermissions, payload)))
                .catch((payload) => callback(null,
                getAuthorizationPolicy(principalId, 'Deny', event.endpointPermissions, payload)));
            }).catch((error) => {
                console.log(error);
                callback('Unauthorized');
            });
    }
}

event.endpointPermissions私が探しています何を基本的にあります。APIエンドポイントに応じて、そのエンドポイントに必要な権限を入力する必要があります。次に、resourceAuthorizerは、外部サービスからユーザーのアクセス許可を取得し、それらをendpointPermissionsと比較して、許可または拒否ポリシーを作成します。

では、APIエンドポイントのendpointPermissionsをどこに入力して、承認者に提供できますか?

K Mo

Authorizerに渡されるイベントには、次の形式のmethodArnが含まれています。

arn:aws:execute-api:<Region id>:<Account id>:<API id>/<Stage>/<Method>/<Resource path>

これにより、必要なメソッドとリソースパスが得られます。また、APIの識別子は提供されますが、API自体の名前は提供されません。

API IDは、AWSSDKを使用してAPI名を取得するために使用できます。こちらをご覧ください

これにより、endpointPermissions値を作成するために必要なすべてのものが得られます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

エンドポイントURLから特定のAPIゲートウェイ/ラムダを見つける方法

分類Dev

Lambda を使用した API ゲートウェイからのサーバーレス オフライン カスタム エラー

分類Dev

AWSAPIゲートウェイカスタムオーソライザーAuthorizerConfigurationException

分類Dev

クラウドファイヤーストアからローカルエミュレーターにデータをインポートする方法は?

分類Dev

カスタム支払いゲートウェイをソーシャルエンジンに追加する方法

分類Dev

カスタム支払いゲートウェイをソーシャルエンジンに追加する方法

分類Dev

Amazon APIゲートウェイを使用してカスタムエンドポイントを作成するにはどうすればよいですか?

分類Dev

カスタムオーソライザーのAWSAPIゲートウェイ403エラー

分類Dev

AWS APIゲートウェイステージを特定のラムダ関数エイリアスにポイントする方法は?

分類Dev

LoopBack:コードでカスタムRESTエンドポイントを動的に作成する方法(オンザフライ)

分類Dev

カスタム認証プロバイダーからコントローラーにカスタム オブジェクトを渡す方法は?

分類Dev

Powershell System.Net.WebClientとカスタムユーザーエージェント文字列を使用して「ブラウザーが開始するダウンロード」ファイルを保存するにはどうすればよいですか?

分類Dev

APIゲートウェイ-ネストされたRESTリソースを異なるテラフォームデプロイメントに分割する方法

分類Dev

クライアントブラウザからのPOSTリクエストを受け付けているフロントエンドサーバーからバックエンドサーバー(アップロード用)にファイルを送信する方法(フォームデータ->ファイル入力)?

分類Dev

クライアントブラウザからのPOSTリクエストを受け付けているフロントエンドサーバーからバックエンドサーバー(アップロード用)にファイルを送信する方法(フォームデータ->ファイル入力)?

分類Dev

データベースMVC4からドロップダウンリストでランタイムエラーを取得する

分類Dev

sklearnデータセットからMNISTデータをダウンロードするとタイムアウトエラーが発生する

分類Dev

Googleスプレッドシートからウェブアプリのタイムラインにデータを配置する方法

分類Dev

カスタムAndroidライブラリをインポートするときにtransformClassesWithDesugarForDebugビルドエラー

分類Dev

APIゲートウェイとラムダコンソールテスト間でイベントを同じにする方法

分類Dev

GAEエンドポイントでカスタムユーザーオブジェクトを取得するにはどうすればよいですか?

分類Dev

OAuth2承認サーバー/ユーザーエンドポイントからカスタムユーザー情報を取得する方法

分類Dev

ジャクソンのカスタムデシリアライザーからデフォルトのデシリアライザーを呼び出す方法

分類Dev

AWS API GatewayカスタムオーソライザーにLambdaパーミッションを提供するにはどうすればよいですか?

分類Dev

プライベートCKANデータセットからリソースをダウンロードする

分類Dev

Google SheetsのPipedrive APIからデータをインポートする - カスタムフィールド?

分類Dev

ロボットフレームワークを使用してWeb自動化を行うときに、カスタムライブラリからWebドライバーオブジェクトをインスタンス化する方法

分類Dev

Pythonインポートエラーをカスタムエラーページにリダイレクトする方法をDjango

分類Dev

カスタムドメインを設定するAWSAPIゲートウェイ

Related 関連記事

  1. 1

    エンドポイントURLから特定のAPIゲートウェイ/ラムダを見つける方法

  2. 2

    Lambda を使用した API ゲートウェイからのサーバーレス オフライン カスタム エラー

  3. 3

    AWSAPIゲートウェイカスタムオーソライザーAuthorizerConfigurationException

  4. 4

    クラウドファイヤーストアからローカルエミュレーターにデータをインポートする方法は?

  5. 5

    カスタム支払いゲートウェイをソーシャルエンジンに追加する方法

  6. 6

    カスタム支払いゲートウェイをソーシャルエンジンに追加する方法

  7. 7

    Amazon APIゲートウェイを使用してカスタムエンドポイントを作成するにはどうすればよいですか?

  8. 8

    カスタムオーソライザーのAWSAPIゲートウェイ403エラー

  9. 9

    AWS APIゲートウェイステージを特定のラムダ関数エイリアスにポイントする方法は?

  10. 10

    LoopBack:コードでカスタムRESTエンドポイントを動的に作成する方法(オンザフライ)

  11. 11

    カスタム認証プロバイダーからコントローラーにカスタム オブジェクトを渡す方法は?

  12. 12

    Powershell System.Net.WebClientとカスタムユーザーエージェント文字列を使用して「ブラウザーが開始するダウンロード」ファイルを保存するにはどうすればよいですか?

  13. 13

    APIゲートウェイ-ネストされたRESTリソースを異なるテラフォームデプロイメントに分割する方法

  14. 14

    クライアントブラウザからのPOSTリクエストを受け付けているフロントエンドサーバーからバックエンドサーバー(アップロード用)にファイルを送信する方法(フォームデータ->ファイル入力)?

  15. 15

    クライアントブラウザからのPOSTリクエストを受け付けているフロントエンドサーバーからバックエンドサーバー(アップロード用)にファイルを送信する方法(フォームデータ->ファイル入力)?

  16. 16

    データベースMVC4からドロップダウンリストでランタイムエラーを取得する

  17. 17

    sklearnデータセットからMNISTデータをダウンロードするとタイムアウトエラーが発生する

  18. 18

    Googleスプレッドシートからウェブアプリのタイムラインにデータを配置する方法

  19. 19

    カスタムAndroidライブラリをインポートするときにtransformClassesWithDesugarForDebugビルドエラー

  20. 20

    APIゲートウェイとラムダコンソールテスト間でイベントを同じにする方法

  21. 21

    GAEエンドポイントでカスタムユーザーオブジェクトを取得するにはどうすればよいですか?

  22. 22

    OAuth2承認サーバー/ユーザーエンドポイントからカスタムユーザー情報を取得する方法

  23. 23

    ジャクソンのカスタムデシリアライザーからデフォルトのデシリアライザーを呼び出す方法

  24. 24

    AWS API GatewayカスタムオーソライザーにLambdaパーミッションを提供するにはどうすればよいですか?

  25. 25

    プライベートCKANデータセットからリソースをダウンロードする

  26. 26

    Google SheetsのPipedrive APIからデータをインポートする - カスタムフィールド?

  27. 27

    ロボットフレームワークを使用してWeb自動化を行うときに、カスタムライブラリからWebドライバーオブジェクトをインスタンス化する方法

  28. 28

    Pythonインポートエラーをカスタムエラーページにリダイレクトする方法をDjango

  29. 29

    カスタムドメインを設定するAWSAPIゲートウェイ

ホットタグ

アーカイブ