Amazon API Gateway メソッドをカスタム ID プロバイダーとして設定する - AWS Transfer Family

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon API Gateway メソッドをカスタム ID プロバイダーとして設定する

このチュートリアルでは、Amazon API Gateway メソッドをセットアップし、それをカスタム ID プロバイダーとして使用して AWS Transfer Family サーバーにファイルをアップロードする方法について説明します。このチュートリアルでは、「基本スタックテンプレート」 やその他の基本的な機能のみを例として取り上げます。

前提条件

で Transfer Family リソースを作成する前に AWS CloudFormation、ストレージとユーザーロールを作成します。

ストレージを指定してユーザーの役割を作成する
  1. 使用しているストレージに応じて、次のドキュメントを参照してください。

  2. ユーザーロールを作成するには、IAM ロールとポリシーを作成する を参照してください

AWS CloudFormation 次のセクションで スタックを作成する際に、ストレージとユーザーの役割の詳細を入力します。

ステップ 1: CloudFormation スタックを作成する

提供されたテンプレートから AWS CloudFormation スタックを作成するには
  1. AWS CloudFormation コンソールを https://console.aws.amazon.com/cloudformation で開きます。

  2. [Create stack] (スタックの作成) を選択し、[With new resources (standard)] (新しいリソースを使用 (標準)) を選択します。

  3. [Prerequisite - Prepare template] (前提条件 - テンプレートを準備する) ペインで [Template is ready] (テンプレートの準備完了) を選択します。

  4. このリンク、ベーシックスタックテンプレート をコピーし、Amazon S3 URLフィールドに貼り付けます。

  5. [Next] (次へ) をクリックします。

  6. スタックの名前を含めてパラメータを指定します。必ず以下のことをしてください。

    • UserName と のデフォルト値を置き換えますUserPassword

    • にはUserHomeDirectory、以前に作成したストレージ (Amazon S3 バケットまたは Amazon EFS ファイルシステム) の詳細を入力します。

    • デフォルトを、以前に作成したユーザーロールUserRoleArnに置き換えます。 AWS Identity and Access Management (IAM) ロールには適切なアクセス許可が必要です。IAM ロールとバケットポリシーの例については、「」を参照してくださいステップ 6: バケットへのアクセスを制限する

    • パスワードの代わりにパブリックキーを使用して認証する場合は、UserPublicKey1 フィールドにパブリックキーを入力します。を使用してサーバーに初めて接続するときはSFTP、パスワードの代わりにプライベートキーを指定します。

  7. [Next] (次へ) を選択してから [Configure stack options] (スタックオプションの設定) ページでもう一度 [Next] (次へ) をクリックします。

  8. 作成しようとするスタックの詳細を確認してから [Create stack] (スタックの作成) を選択します。

    注記

    ページの下部の 機能 で、 が AWS CloudFormation IAMリソースを作成する可能性があることを確認する必要があります。

ステップ 2: サーバーの API Gateway メソッド設定を確認する

注記

セキュリティを向上させるために、ウェブアプリケーションファイアウォールを設定できます。 AWS WAF は、Amazon API Gateway に転送される HTTPおよび HTTPSリクエストをモニタリングできるウェブアプリケーションファイアウォールです。詳細については、「ウェブアプリケーションファイアウォールを追加する」を参照してください。

サーバーの API Gateway メソッド設定を確認してデプロイするには
  1. で API Gateway コンソールを開きますhttps://console.aws.amazon.com/apigateway/

  2. テンプレートが生成した Transfer Custom Identity Provider の基本API AWS CloudFormation テンプレートを選択します。

  3. リソースペインで、 を選択しGETメソッドリクエスト を選択します。

  4. アクション で、デプロイ APIを選択します。[Deplyment stage] (デプロイステージ) で [prod] を選択してから [Deploy] (デプロイ) を選択します。

    API Gateway メソッドが正常にデプロイされたら、ステージエディタセクションでそのパフォーマンスを表示します。

    注記

    ページの上部に表示される呼び出しURLアドレスをコピーします。次のステップで必要になります。

ステップ 3: Transfer Family サーバーの詳細を表示する

テンプレートを使用して AWS CloudFormation スタックを作成すると、Transfer Family サーバーが自動的に作成されます。

Transfer Family サーバーの詳細を表示するには
  1. AWS CloudFormation コンソールを https://console.aws.amazon.com/cloudformation で開きます。

  2. 作成したスタックを選択します。

  3. [リソース] タブを選択します。

    Transfer Family サーバーの詳細が強調表示された、 AWS CloudFormation スタックの作成中に作成されたリソースのリストを示す画面。

    サーバーARNは、TransferServer行の物理 ID 列に表示されます。サーバー ID は、s-11112222333344445 などARN、 に含まれています。

  4. で AWS Transfer Family コンソールを開きhttps://console.aws.amazon.com/transfer/サーバーページで新しいサーバーを選択します。

    サーバー ID は、 のTransferServerリソースに表示される ID と一致します AWS CloudFormation。

ステップ 4: ユーザーがサーバーに接続できることを確認する

Transfer Family コンソールを使用して、ユーザーがサーバーに接続できるかどうかをテストするには
  1. で AWS Transfer Family コンソールを開きますhttps://console.aws.amazon.com/transfer/

  2. [Servers] (サーバー) ページで新しいサーバーを選択し、[Actions] (アクション) を選択してから [Test] (テスト) を選択します。

  3. サインイン資格情報のテキストを[ユーザー名] フィールドと[パスワード] フィールドに入力します。これらは、 AWS CloudFormation スタックをデプロイしたときに設定した値です。

  4. サーバープロトコル で を選択しSFTPソース IP で と入力します127.0.0.1

  5. [テスト] を選択します。

    ユーザー認証が成功すると、テストはStatusCode: 200HTMLレスポンスと、ユーザーのロールとアクセス許可の詳細を含むJSONオブジェクトを返します。例:

    { "Response": "{\"Role\": \"arn:aws:iam::123456789012:role/my-user-role\",\"HomeDirectory\": \"/${transfer:HomeBucket}/\"}", "StatusCode": 200, "Message": "", "Url": "https://1a2b3c4d5e.execute-api.us-east-2.amazonaws.com/prod/servers/s-1234abcd5678efgh0/users/myuser/config" }

    テストが失敗した場合は、APIゲートウェイ AWS 管理ポリシーの 1 つを、 に使用しているロールに追加しますAPI。

ステップ 5: SFTP接続とファイル転送をテストする

SFTP 接続をテストするには
  1. Linux または macOS の場合、コマンドターミナルを開きます。

  2. 認証にパスワードまたはキーペアのどちらを使用すかに応じて、次のいずれかのコマンドを入力します。

    • パスワードを使用する場合、このコマンドを入力します。

      sftp -o PubkeyAuthentication=no myuser@server-ID.server.transfer.region-code.amazonaws.com

      プロンプトが表示されたら、パスワードを入力します。

    • キーペアを使用する場合、このコマンドを入力します。

      sftp -i private-key-file myuser@server-ID.server.transfer.region-code.amazonaws.com

    注記

    これらの sftp コマンドには、Transfer Family サーバーが置かれている AWS リージョン のコードを挿入します。たとえば、サーバーが米国東部 (オハイオ) にあるならば「us-east-2」を入力します。

  3. sftp> プロンプトで、ディレクトリとファイル (pwdls) をアップロード (put)、ダウンロード (get)、および表示できることを確認します。

ステップ 6: バケットへのアクセスを制限する

特定の Amazon S3 バケットにアクセスできるユーザーを制限できます。次の例は、 CloudFormation スタックおよびユーザー用に選択したポリシーで使用する設定を示しています。

この例では、 AWS CloudFormation スタックに次のパラメータを設定します。

  • CreateServer: true

  • UserHomeDirectory: /myuser-bucket

  • UserName: myuser

  • UserPassword: MySuperSecretPassword

    重要

    これはパスワードの例です。API Gateway メソッドを設定するときは、必ず強力なパスワードを入力してください。

  • UserPublicKey1: your-public-key

  • UserRoleArn: arn:aws:iam::role-id:role/myuser-api-gateway-role

UserPublicKey1 は、パブリック/プライベートキーペアの一部として生成したパブリックキーです。

role-id は、作成するユーザーロールに固有です。myuser-api-gateway-role にアタッチされるポリシーは次のとおりです。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::myuser-bucket" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObjectAcl", "s3:GetObject", "s3:DeleteObjectVersion", "s3:DeleteObject", "s3:PutObjectAcl", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::myuser-bucket/*" } ] }

を使用してサーバーに接続するにはSFTP、プロンプトに次のいずれかのコマンドを入力します。

  • パスワードで認証する場合、次のコマンドを実行します。

    sftp -o PubkeyAuthentication=no myuser@transfer-server-ID.server.transfer.region-id.amazonaws.com

    プロンプトが表示されたら、パスワードを入力します。

  • キーペアで認証する場合、次のコマンドを実行します。

    sftp -i private-key-file myuser@transfer-server-ID.server.transfer.region-id.amazonaws.com

注記

これらのsftpコマンドには、Transfer Family サーバー AWS リージョン がある の ID を使用します。たとえば、サーバーが米国東部 (オハイオ) にあるならば「us-east-2」を使用します。

sftp プロンプトで、ホームディレクトリに誘導され、pwd コマンドを実行することによってそれを表示できます。例:

sftp> pwd Remote working directory: /myuser-bucket

ユーザーは、ホームディレクトリよりも上位のディレクトリを表示できません。例:

sftp> pwd Remote working directory: /myuser-bucket sftp> cd .. sftp> ls Couldn't read directory: Permission denied

Amazon を使用している場合は Lambda を更新する EFS

Transfer Family サーバーのストレージオプションEFSとして Amazon を選択した場合は、スタックの Lambda 関数を編集する必要があります。

Lambda 関数に Posix プロファイルを追加するには
  1. で Lambda コンソールを開きますhttps://console.aws.amazon.com/lambda/

  2. 先ほど作成した Lambda 関数を選択します。Lambda 関数の形式は です。 stack-name-GetUserConfigLambda-lambda-identifier、ここで stack-name は CloudFormation スタック名で、lambda-identifier は関数の識別子です。

  3. [Code] (コード) タブで index.js を選択して関数のコードを表示します。

  4. responsePolicyHomeDirectory の間に次の行を追加します。

    PosixProfile: {"Uid": uid-value, "Gid": gid-value},

    ここで、uid-value また、gid-value は、それぞれユーザー ID とグループ ID を表す 0 以上の整数です。

    たとえば、Posix プロファイルを追加すると、レスポンスフィールドは次のようになります。

    response = { Role: 'arn:aws:iam::123456789012:role/api-gateway-transfer-efs-role', // The user will be authenticated if and only if the Role field is not blank Policy: '', // Optional JSON blob to further restrict this user's permissions PosixProfile: {"Gid": 65534, "Uid": 65534}, HomeDirectory: '/fs-fab2c234' // Not required, defaults to '/' };