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

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

チュートリアル: カスタム ID プロバイダーとして Amazon API Gateway メソッドを設定する

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

目次

ステップ 1: の作成 CloudFormation スタック

  1. https://console.aws.amazon.com/cloudformation で AWS CloudFormation コンソール を開きます。

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

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

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

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

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

    • UserNameUserPassword のデフォルト値を置き換えます。

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

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

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

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

    注記

    ページ下部の [Capabilities] (機能) の下で、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. AWS CloudFormation で生成された [Transfer Custom Identity Provider basic template API] (カスタム ID プロバイダーの基本テンプレート 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 サーバー

Transfer Family サーバーを作成するには

  1. https://console.aws.amazon.com/transfer/ で AWS Transfer Family コンソールを開きます。

  2. [Create server] (サーバーの作成) を選択すると [Create server] (サーバーの作成) ページが開きます。

  3. [Choose protocols] (プロトコルの選択) で SFTP (SSH File Transfer Protocol) を選択してから [Next] (次へ) を選択します。

  4. [Choose an identity provider] (ID プロバイダーを選択) で [Custom] (カスタム) を選択します。

  5. [Custom provider] (カスタムプロバイダー) について、ステップ 2 で作成した API Gateway エンドポイントの [Invoke URL] (呼び出し URL) アドレスを貼り付けます。

  6. [Invocation role] (呼び出しロール) について、AWS CloudFormation テンプレートで作成した IAM ロールを選択します。このロールにより、Transfer Family が API Gateway メソッドを呼び出せるようになります。

    呼び出しロールには、先ほど作成したスタックに付けた AWS CloudFormation スタック名が含まれています。次のような形式です: CloudFormation-stack-name-TransferIdentityProviderRole-ABC123DEF456GHI

  7. 正しいものを追加していることを確認します。 CloudWatch ログ記録ロール。次のような形式です。

    CloudFormation-stack-name-CloudWatchLoggingRole-ABC123DEF45

    注記

    サーバーのログ記録ロールと Transfer Family との間に信頼関係があることを確認します。詳細については、「信頼関係を確立するには」を参照してください。

  8. 残りのオプションを入力してから [Create server] (サーバーの作成) を選択します。

注記

ストレージオプションに Amazon EFS を選択した場合、Lambda 関数に Posix プロファイル設定を追加する必要があります。詳細については、「Amazon EFS を使用する場合に Lambda を更新する」を参照してください。

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

Transfer Family コンソールを使用して、ユーザーがサーバーに接続できるかどうかをテストするには

  1. https://console.aws.amazon.com/transfer/ で AWS Transfer Family コンソールを開きます。

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

  3. AWS CloudFormation スタックをデプロイする際に設定した [Username] (ユーザー名) と [Password] (パスワード) のテキストを入力します。

  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 マネージドポリシーのいずれかを API に使用するロールに追加します。

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

SFTP 接続をテストするには

  1. Linux または macOS の場合、コマンドターミナルを開きます。

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

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

      sftp 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 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 EFS を使用する場合に Lambda を更新する

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

Lambda 関数に Posix プロファイルを追加するには

  1. Lambda コンソール (https://console.aws.amazon.com/lambda/) を開きます。

  2. 先ほど作成した Lambda 関数を選択します。Lambda 関数の形式は次のとおりです。stack-name-GetUserConfigLambda-ラムダ識別子である。stack-nameは CloudFormation スタック名とラムダ識別子は関数の識別子です。

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