ゼファーネットのロゴ

安全なAmazonSageMakerStudioの事前署名されたURLパート2:JWT認証を使用したプライベートAPI

日付:

In 一部1 このシリーズの中で、私たちは解決する方法を示しました Amazon SageMakerスタジオ インターネットを経由せずにAmazonプライベートVPCエンドポイントを使用する企業ネットワークからの事前署名されたURL。 この投稿では、以前のソリューションの上に構築を続け、を介してプライベートAPIゲートウェイを構築する方法を示します アマゾンAPIゲートウェイ 生成してアクセスするためのプロキシインターフェイスとして アマゾンセージメーカー 事前に署名されたURL。 さらに、ガードレールを追加して、企業ネットワーク内の認証されたエンドユーザーに対してのみ事前署名されたURLが生成およびアクセスされるようにします。

ソリューションの概要

次の図は、ソリューションのアーキテクチャを示しています。

プロセスには次のステップが含まれます。

  1. アマゾンコグニート ユーザープールでは、最初にStudioユーザープロファイルと一致する名前のユーザーを設定し、Studioをユーザープールのアプリクライアントとして登録します。
  2. ユーザーは、企業IDプロバイダー(IdP)からフェデレーションし、StudioにアクセスするためにAmazonCognitoユーザープールで認証します。
  3. Amazon Cognitoは、Studioアプリケーションへのアクセスを承認するユーザーにトークンを返します。
  4. ユーザーが呼び出す createStudioPresignedUrl APIゲートウェイ上のAPIとヘッダー内のトークン。
  5. APIゲートウェイはカスタムを呼び出します AWSラムダ 承認者とトークンを検証します。
  6. トークンが有効な場合、AmazonCognitoはスタジオユーザープロファイルIDを含むアクセス許可ポリシーをAPIGatewayに返します。
  7. APIゲートウェイは createStudioPresignedUrl スタジオの事前署名されたURLを作成するためのLambda関数。
  8.   createStudioPresignedUrl 関数は、SageMaker API VPCエンドポイントを使用して事前署名されたURLを作成し、呼び出し元に戻ります。
  9. ユーザーは、StudioVPCエンドポイントを介して解決される企業ネットワークから事前署名されたURLにアクセスします。
  10. 関数の AWS IDおよびアクセス管理 (IAM)ポリシーにより、事前署名されたURLの作成とアクセスがVPCエンドポイントを介して実行されるようになります。

次のセクションでは、VPCエンドポイントを使用して企業ネットワークからStudioの事前署名されたURLを作成および解決するための、API GatewayプライベートAPIのソリューションの展開、構成、および検証について説明します。

  1. ソリューションを展開する
  2. AmazonCognitoユーザーを設定します
  3. JSONWebトークンを使用して事前署名されたURLのプライベートAPIを認証する
  4. プライベートAPIにアクセスするための企業DNSサーバーを構成します
  5. 企業ネットワークからの事前署名されたURLについてAPIGatewayプライベートAPIをテストします
  6. 事前署名されたURLLambda認証ポリシー
  7. 掃除

ソリューションを展開する

ソリューションは、次のいずれかを介して展開できます。 AWSマネジメントコンソール または AWSサーバーレスアプリケーションモデル (AWS SAM)。

コンソールを介してソリューションを展開するには、以下を起動します AWS CloudFormation を選択してアカウントのテンプレート 発射スタック。 CloudFormationスタックが完了するまでに約10分かかります。

AWS SAMを使用してソリューションをデプロイするには、 aws-samplesGitHubリポジトリ、サンプルコードに貢献することもできます。 次のコマンドは、AWSSAMCLIを使用してソリューションをデプロイする方法を示しています。 現在インストールされていない場合は、 AWSSAMCLIをインストールします.

  1. https://github.com/aws-samples/secure-sagemaker-studio-presigned-urlでリポジトリのクローンを作成します。
  2. リポジトリのクローンを作成したら、ソースに移動して次のコードを実行します。
    sam deploy –guided

AmazonCognitoユーザーを設定します

Amazon Cognitoユーザーを設定するには、次の手順を実行します。

  1. SageMakerユーザープロファイルと同じ名前のAmazonCognitoユーザーを作成します。
    aws cognito-idp admin-create-user --user-pool-id <user_pool_id> --username <sagemaker_username>

  2. ユーザーパスワードを設定します。
    aws cognito-idp admin-set-user-password --user-pool-id <user_pool_id> --username <sagemaker_username> --password <password> --permanent

  3. アクセストークンを取得します。
    aws cognito-idp initiate-auth --auth-flow USER_PASSWORD_AUTH --client-id <cognito_app_client_id> --auth-parameters USERNAME=<sagemaker_username>,PASSWORD=<password>

JSONWebトークンを使用して事前署名されたURLのプライベートAPIを認証する

SageMakerの事前署名されたURLを作成するためのプライベートAPIをデプロイしたときに、企業ネットワークとVPCエンドポイントの外部の誰もが事前署名されたURLにアクセスするためのアクセスを制限するガードレールを追加しました。 ただし、企業ネットワーク内のプライベートAPIに別のコントロールを実装しなければ、企業ネットワーク内の内部ユーザーは、SageMakerユーザープロファイルの認証されていないパラメーターを渡して、SageMakerアプリにアクセスできます。

この問題を軽減するために、認証された呼び出し元のJSON Web Token(JWT)をAPI Gatewayに渡し、そのトークンをJWTオーソライザーで検証することをお勧めします。 カスタムAPIゲートウェイのいずれかを使用して、プライベートAPIゲートウェイの承認者を実装するための複数のオプションがあります ラムダ承認者 or アマゾンコグニート.

カスタムLambdaオーソライザーを使用すると、返されたポリシーにSageMakerユーザープロファイル名を埋め込むことができます。 これにより、企業ネットワーク内のユーザーは、作成が許可されていない事前署名されたURLを作成するためにSageMakerユーザープロファイル名を送信できなくなります。 Amazon Cognitoを使用してトークンを生成し、カスタムLambdaオーソライザーを使用して適切なポリシーを検証して返します。 詳細については、を参照してください。 Amazon Cognito、API Gateway、およびIAMを使用したきめ細かい承認の構築。 Lambdaオーソライザーは、AmazonCognitoユーザー名をユーザープロファイル名として使用します。

Amazon Cognitoを使用できない場合は、カスタムアプリケーションを開発して、エンドユーザートークンを認証してLambdaオーソライザーに渡すことができます。 詳細については、を参照してください。 APIGatewayLambda承認者を使用する.

プライベートAPIにアクセスするための企業DNSサーバーを構成します

企業のDNSサーバーを構成するには、次の手順を実行します。

  1. ソフトウェア設定ページで、下図のように アマゾン エラスティック コンピューティング クラウド (Amazon EC2)コンソール、オンプレミスDNSA EC2インスタンスを選択し、経由で接続します システムマネージャーセッションマネージャー.
  2. にゾーンレコードを追加します /etc/named.conf を介してAPIGatewayのDNS名に解決するためのファイル アマゾンルート53 次のコードに示すように、インバウンドリゾルバー:
    zone "zxgua515ef.execute-api.<region>.amazonaws.com" {
      type forward;
      forward only;
      forwarders { 10.16.43.122; 10.16.102.163; };
    };

  3. 次のコマンドを使用して、指定されたサービスを再起動します。
    sudo service named restart

承認されたユーザーのAPIGatewayプライベートAPIからの事前署名されたURLの要求を検証します

実際のシナリオでは、カスタムソリューションまたはレバレッジのいずれかを使用して、認証および承認されたリソースに適切な承認ヘッダーを渡すフロントエンドインターフェイスを実装します。 AWS 増幅。 このブログ投稿を簡潔にするために、次の手順では、Postmanを利用して、展開したソリューションが、許可されていない限り、内部ユーザーの事前署名されたURLの要求を実際に制限していることをすばやく検証します。

Postmanでソリューションを検証するには、次の手順を実行します。

  1. WINAPPEC2インスタンスにPostmanをインストールします。 手順を参照してください ここ
  2. Postmanを開き、アクセストークンを Authorization ヘッダ:
    Authorization: Bearer <access token>

  3. 内部EC2インスタンスからアクセスするようにAPIGatewayURLを変更します。
    1. VPCエンドポイントをAPIゲートウェイURLに追加します。
      https://<API-G-ID>-<VPCE-ID>.execute-api.<region>.amazonaws.com/dev/EMPLOYEE_ID

    2. 加えます Host APIゲートウェイURLの値を含むヘッダー:
      <API-G-ID>.execute-api.<region>.amazonaws.com

    3. まず、を変更します EMPLOYEE_ID AmazonCognitoユーザーとSageMakerユーザープロファイル名に。 承認された事前署名されたURLを受け取っていることを確認してください。
    4. 次に、 EMPLOYEE_ID あなたのものではないユーザーに、そしてあなたがアクセス失敗を受け取ることを確認してください。
  4. Amazon EC2コンソールで、オンプレミスのWINAPPインスタンスを選択し、RDPクライアントを介して接続します。
  5. Chromeブラウザを開き、承認済みの事前署名されたURLに移動してStudioを起動します。

Studioは、リモートアドレスをStudioVPCエンドポイントIPとして使用してVPCエンドポイントを介して起動されます。

事前署名されたURLが企業ネットワークの外部でアクセスされる場合、事前署名されたURLのIAMポリシー条件により、VPCエンドポイントからの作成とアクセスが強制されるため、解決は失敗します。

事前署名されたURLLambda認証ポリシー

上記のソリューションは、SageMakerStudioにアクセスするための事前署名されたURLを生成するLambdaに対して次の認証ポリシーを作成しました。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Condition": {
                "IpAddress": {
                    "aws:VpcSourceIp": "10.16.0.0/16"
                }
            },
            "Action": "sagemaker:CreatePresignedDomainUrl",
            "Resource": "arn:aws:sagemaker:<region>:<account-id>:user-profile/*/*",
            "Effect": "Allow"
        },
        {
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "192.168.10.0/24"
                }
            },
            "Action": "sagemaker:CreatePresignedDomainUrl",
            "Resource": "arn:aws:sagemaker:<region>:<account-id>:user-profile/*/*",
            "Effect": "Allow"
        },
        {
            "Condition": {
                "StringEquals": {
                    "aws:sourceVpce": [
                        "vpce-sm-api-xx",
                        "vpce-sm-api-yy"
                    ]
                }
            },
            "Action": "sagemaker:CreatePresignedDomainUrl",
            "Resource": "arn:aws:sagemaker:<region>:<account-id>:user-profile/*/*",
            "Effect": "Allow"
        }
    ]
}

上記のポリシーは、Studioの事前署名されたURLが生成され、次のXNUMXつのエントリポイントのいずれかを介してアクセスされることを強制します。

  1. AWS VPC CIDRとしてのaws:VpcSourceIp
  2. aws:SourceIpを企業ネットワークCIDRとして
  3. SageMaker API VPCエンドポイントとしてのaws:sourceVpce

掃除

継続的な請求を回避するために、 CloudFormationスタックを削除します あなたが作成しました。 または、SAMを使用してソリューションをデプロイした場合は、ソリューションがデプロイされて実行されたAWSアカウントに対して認証する必要があります サム削除.

まとめ

この投稿では、AmazonプライベートVPCエンドポイントを使用して企業ネットワークからプライベートAPIゲートウェイを使用してStudioにアクセスする方法、企業ネットワーク外の事前署名されたURLへのアクセスを防止する方法、AmazonCognitoとカスタムLambdaを使用してJWTオーソライザーでAPIゲートウェイを保護する方法を示しました。承認者。

このソリューションを試して、これを企業ポータルと統合して実験し、コメントにフィードバックを残してください。


著者について

ラムヴィタル AWSの機械学習ソリューションアーキテクトです。 彼は、分散型、ハイブリッド、およびクラウドアプリケーションの設計と構築に20年以上の経験があります。 彼は、安全でスケーラブルなAI / MLおよびビッグデータソリューションを構築して、企業のお客様がクラウドを採用し、ビジネスの成果を向上させるための最適化の道のりを支援することに情熱を注いでいます。 余暇には、テニス、写真、アクション映画を楽しんでいます。

ジョナサン・グエン AWSの共有配信チームのシニアセキュリティコンサルタントです。 彼の経歴は、脅威の検出とインシデント対応に焦点を当てたAWSセキュリティにあります。 現在、彼は企業のお客様が包括的なAWSセキュリティ戦略を開発し、セキュリティソリューションを大規模に展開し、AWSセキュリティのベストプラクティスについてお客様をトレーニングするのを支援しています。

クリスチャイルダーズ AWSのプロフェッショナルサービスのクラウドインフラストラクチャアーキテクトです。 彼はAWSのお客様と協力して、クラウドインフラストラクチャを設計および自動化し、DevOpsの文化とプロセスの採用を改善しています。

スポット画像

最新のインテリジェンス

スポット画像

私たちとチャット

やあ! どんな御用でしょうか?