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

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

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

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

前提条件

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

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

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

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

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

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

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

  3. 前提条件 - テンプレートの準備ペインで、既存のテンプレートの選択を選択します。

  4. このリンクで「基本スタックテンプレート」 をコピーして [Amazon S3 URL] フィールドに貼り付けます。

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

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

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

    • [ユーザーホームディレクトリ] には、前に作成したAmazon S3バケットまたはAmazon EFSファイルシステムのストレージの詳細を入力してください。

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

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

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

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

    注記

    ページ下部の [Capabilities] (機能) の下で、 CloudFormation で IAM リソースが作成される可能性があることを承認する必要があります。

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

注記

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

API Gateway キャッシュを有効にしない

Transfer Family のカスタム ID プロバイダーとして使用する場合、API Gateway メソッドのキャッシュを有効にしないでください。次の理由により、キャッシュは認証リクエストに対して不適切で無効です。

  • 各認証リクエストは一意であり、キャッシュされたレスポンスではなくライブレスポンスが必要です

  • Transfer Family は API Gateway に重複または繰り返しリクエストを送信しないため、キャッシュには利点はありません。

  • キャッシュを有効にすると、API Gateway が不一致データで応答し、認証リクエストへの無効な応答が発生します。

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

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

  3. [Resource] (リソース) ペインで[GET] を選択してから[Method Request] (メソッドの作成) を選択します。

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

    API Gateway メソッドが正常にデプロイされると、[Stage Editor] (ステージエディタ) セクションにそのパフォーマンスが表示されます。

    注記

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

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

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

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

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

  3. [リソース] タブを選択してください。

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

    サーバー ARN は、[TransferServer] [行の物理 ID] 列に表示されます。サーバー ID は ARN に含まれています (例: [s-11112222333344445])。

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

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

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

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

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

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

  4. [Server Protocol] (サーバープロトコル) について、[SFTP] を選択し、[Source IP] (送信元 IP) に 127.0.0.1 を入力します。

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

    ユーザー認証が成功すると、テストの結果として StatusCode: 200 HTML レスポンスおよびユーザーのロールとパーミッションの詳細を含む 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 Gateway 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 スタック内およびユーザーについて選択したポリシー内で使用する設定を示しています。

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

  • [CreateServer]: true

  • [UserHomeDirectory]: /amzn-s3-demo-bucket1

  • [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:::amzn-s3-demo-bucket1" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObjectAcl", "s3:GetObject", "s3:DeleteObjectVersion", "s3:DeleteObject", "s3:PutObjectAcl", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*" } ] }

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: /amzn-s3-demo-bucket1

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

sftp> pwd Remote working directory: /amzn-s3-demo-bucket1 sftp> cd .. sftp> ls Couldn't read directory: Permission denied

Amazon EFS を使用する場合に Lambda を更新する

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

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

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

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

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

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

    uid-valuegid-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 '/' };