ユーザーの作成 - AWS Transfer Family

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

ユーザーの作成

このセクションでは、 Transfer Family または custo ID プロバイダーを使用してユーザーを追加する方法について説明します。

サービス管理型 ID タイプを使用する場合は、ファイル転送プロトコル対応のサーバーにユーザーを追加します。その場合、各ユーザー名はサーバーで一意である必要があります。

各ユーザーのプロパティの一部として、そのユーザーの Secure Shell (SSH) パブリックキーも保存します。この「使用開始」実習で使用する、キーベースの認証では、そうする必要があります。秘密キーは、ユーザーのコンピュータにローカルに保存されます。ユーザーがクライアントを使用してサーバーに認証要求を送信すると、サーバーはまず、ユーザーが関連付けられた SSH 秘密キーにアクセスできることを確認します。その後、サーバーはユーザーを正常に認証します。

さらに、ユーザーの AWS Identity and Access Management ディレクトリ、またはランディングディレクトリを指定し、ユーザーに IAM ロールを割り当てます。必要に応じて、スコープダウンポリシーを提供してユーザーアクセスを S3 バケットの Amazon S3 ディレクトリのみに限定できます。

サービスマネージド型ユーザー

サービスマネージドユーザーをサーバーに追加するには

  1. [Servers] ページで、ユーザーを追加するサーバーのチェックボックスをオンにします。

  2. Add user.] を選択します。

  3. [User configuration (ユーザー設定)] セクションの [Username (ユーザー名)] にユーザー名を入力します。このユーザー名は、最小 3 文字、最大 32 文字である必要があります。ユーザー名には、z、A-–Z、0–9、アンダースコア '_'、ハイフン '-'、ピリオド 'を使用できます。', そして記号「@」. ユーザー名をハイフン、ピリオド、アットマークで始めることはできません。

  4. [アクセス] で、 IAM バケットへのアクセスを提供する、以前に作成した Amazon S3 ロールを選択します。

    「」の手順を使用して、このIAMロールを作成しましたIAM ロールとポリシーを作成する。このIAMロールには、 IAM バケットへのアクセスを提供する Amazon S3 ポリシーが含まれています。また、別のAWS Transfer Familyポリシーで定義された IAM サービスとの信頼関係も含まれます。

  5. (オプション) [ポリシー] で、次のいずれかを選択します。

    • なし

    • 既存のポリシー

    • 既存の@@ポリシーを選択するには IAM、から ポリシーを選択します。[View (表示)] を選択して、ポリシーの詳細を含む JSON オブジェクトを表示します。

    スコープダウンポリシーの詳細については、「」を参照してください。IAM ロールとポリシーを作成する. スコープダウンポリシーの作成の詳細については、「」を参照してください スコープダウンポリシーを作成する.

  6. [ホームディレクトリ] で、 を使用して転送するデータを保存する Amazon S3 バケットを選択しますAWS Transfer Family。ユーザーが SFTP クライアントを使用してログインしたときにアクセスする、home ディレクトリへのパスを入力します。

    このパラメータを空白のままにした場合、root バケットの Amazon S3 ディレクトリが使用されます。この場合、 IAM ロールがこのrootディレクトリへのアクセスを提供することを確認します。

    注記

    ユーザーのユーザー名が含まれるディレクトリパスを選択することをお勧めします。そうすることで、スコープダウンポリシーを効果的に使用できます。スコープダウンポリシーは、Amazon S3バケット内のユーザーアクセスをそのユーザーのhomeディレクトリに制限します。

  7. (オプション) [Restricted (制限)] で、ユーザーがそのフォルダの外にあるものにアクセスできずAmazon S3、バケット名またはフォルダ名を表示できないように、チェックボックスをオンにします。

    注記

    ユーザーにホームディレクトリを割り当てて、ユーザーをそのホームディレクトリに制限する場合、指定したフォルダへのユーザーのアクセスをロックダウンするのに十分なはずです。さらにコントロールを適用する必要がある場合は、スコープダウンポリシーを使用します。

  8. [SSH public key (SSH パブリックキー)] に、SSH キーペアのパブリック SSH キー部分を入力します。

    新しいユーザーを追加する前に、キーがサービスによって検証されます。

    重要

    SSH パブリックキーの形式は ですssh-rsa <string>。 SSH キーペアを生成する方法についてはSSH キーの生成、「」を参照してください。

  9. (オプション) [キー] と [] に、1 つ以上のタグをキーと値のペアとして入力し、[タグの追加] を選択します。

  10. [Add] を選択して、選択したサーバーに新しいユーザーを追加します。

    新しいユーザーが [Server details] ページの [Users] セクションに表示されます。

カスタム ID プロバイダーの使用

既存の ID プロバイダーを に統合するにはAWS Transfer Family、単一のRESTfulメソッドでAmazon API Gatewayインターフェイスを提供します。 Transfer Family は、このメソッドを呼び出してユーザーを認証します。

この 1 つのメソッドは、 Amazon S3 または Amazon EFS ファイルシステムへのアクセスをユーザーに認証および許可します。メソッドを設定したら、新しいサーバーを作成するときにサーバーにアタッチします。コンソールAWS Transfer Familyまたは CreateServer API オペレーションを使用して、新しいサーバーを作成できます。

の使用の詳細についてはAPI Gateway、「」を参照してくださいAPI Gateway 開発者ガイド

カスタム ID プロバイダーを使用して認証する

のカスタム ID プロバイダーを作成するにはTransfer Family、 を使用します。これによりAPI Gateway、 の作成と提供を安全に行うことができますAPIs。 を使用するとAPI Gateway、HTTPS エンドポイントを作成して、すべての受信 API コールをセキュリティの高い方法で送信できます。API Gateway サービスの詳細については、『API Gateway 開発者ガイド.』を参照してください。

API Gateway には、 という名前の認証方法が用意されています。この方法ではAWS_IAM、AWS が内部的に使用する AWS Identity and Access Management (IAM) に基づく認証と同じ認証が提供されます。で認証を有効にするとAWS_IAM、API を呼び出す明示的なアクセス許可を持つ発信者のみが API の API Gateway メソッドに到達できます。

を のカスタム ID API Gateway プロバイダーとして使用するにはTransfer Family、IAMゲートウェイAPI Gatewayに対して を有効にします。このプロセスの一環として、 がゲートウェイIAMを使用するためのアクセス許可を持つ Transfer Family ロールを提供します。

を使用したカスタム認証API Gatewayに を使用するには Transfer Family

  1. AWS CloudFormation スタックを作成します。目的:

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

    2. のAWS CloudFormation「スタックテンプレートの選択」で、既存のテンプレートから スタックをデプロイする手順に従いAWS CloudFormation ユーザーガイドます。

    3. でカスタム ID AWS Lambda プロバイダーとして使用する API Gateway-Backed を作成するには、次の基本テンプレートのいずれかTransfer Familyを使用します。

    これらのスタックの 1 つをデプロイすることが、カスタム ID プロバイダーをTransfer Familyワークフローに統合する最も簡単な方法です。スタックは Lambda 関数を使用して、 に基づくゲートウェイをサポートしますAPI Gateway。その後、このゲートウェイを のカスタム ID プロバイダーとして使用できますTransfer Family。デフォルトでは、 Lambda 関数は という単一のユーザーを のパスワードmyuserで認証MySuperSecretPasswordします。 これらの認証情報を編集したり、 Lambda 関数コードを更新してデプロイ後に異なる操作を実行できます。

    注記

    デフォルトのユーザーとパスワードの認証情報を編集することをお勧めします。

    スタックがデプロイされたら、[出力] タブでスタックの詳細を表示できます。これらの詳細には、スタックの Amazon リソースネーム (ARN)、スタックが作成したIAMロールの ARN、新しいゲートウェイの URL が含まれます。

    注記

    カスタム ID プロバイダーオプションを使用してユーザーのパスワード–ベースの認証を有効にし、API Gateway のリクエストとレスポンスのログ記録を有効にすると、ユーザーのパスワードが Amazon に記録されますCloudWatch Logs。本稼働環境でこのログを使用することはお勧めしません。詳細については、『』の「API GatewayCloudWatch で API ログ記録をセットアップする」を参照してくださいAPI Gateway 開発者ガイド

  2. サーバーAPI Gatewayの設定を確認します。目的:

    1. API Gatewayapigateway/ https://console.aws.amazon.com/にある コンソールを開きます。

    2. Transfer Custom Identity Provider basic template API テンプレートAWS CloudFormationによって生成された を選択します。

      次のスクリーンショットは、完全な API 設定を示しています。この例のメソッドでは Lambda 関数が使用されますが、多数の統合タイプも使用できます。

    3. [リソース] ペインでGET、[]、[メソッドリクエスト] の順に選択します。次のスクリーンショットは、パラメータprotocolの一部として serverId、、sourceIpusername、および を含む正しいメソッド設定を示しています。

    この時点で、ゲートウェイはデプロイする準備が整いました。

  3. [アクション] で、[API のデプロイ] を選択します。[デプロイステージ] で、[prod]、[デプロイ] の順に選択します。

    API が正常にデプロイされたら、次に示すように、[Stage Editor (ステージエディタ)] セクションでそのパフォーマンスを表示します。

    注記

    画面の上部に表示される [呼び出し URL] をコピーします。これは次のステップで必要になります。

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

    [Create server (サーバーの作成)] を選択して、[Create server (サーバーの作成)] ページを開きます。次に示すように、[Choose an identity provider] で、[Custom] を選択します。

    [Custom provider] に、前のステップで作成したエンドポイントの [InvokeAPI Gateway URL] を貼り付けます。

    [呼び出しロール] でIAM、テンプレートによって作成されたAWS CloudFormationロールを選択します。このロールにより、 Transfer Family はゲートウェイを呼び出すことができます。

    呼び出しロールには、ステップ 1 で作成したAWS CloudFormationスタックに対して選択したスタック名が含まれます。次の形式になります。CloudFormation-stack-name-TransferIdentityProviderRole-ABC123DEF456GHI

  5. 残りのボックスに入力し、[Create server (サーバーの作成)] を選択します。

ウェブアプリケーションファイアウォールの追加

AWS WAF は、ウェブアプリケーションや攻撃APIsから保護するウェブアプリケーションファイアウォールです。お客様が定義するカスタマイズ可能なウェブセキュリティルールと条件に基づいて、ウェブリクエストを許可、ブロック、またはカウントする一連のルール (ウェブアクセスコントロールリストまたはウェブ ACL と呼ばれます) を設定することができます。詳細については AWS WAF を使用して を保護する」を参照してくださいAPIs

WAF を追加するには

  1. API Gatewayapigateway/ https://console.aws.amazon.com/にある コンソールを開きます。

  2. APIs ナビゲーションペインで、カスタム ID プロバイダーテンプレートを選択します。

  3. ステージ.] を選択します。

  4. [ステージ] ペインで、ステージの名前を選択します。

  5. [ステージエディタ] ペインで、[設定] タブを選択します。

  6. 次のいずれかを行ってください。

    • [Web Application Firewall (WAF) (ウェブアプリケーションファイアウォール (WAF))] の [Web ACL (ウェブ ACL)] で、このステージに関連付けるウェブ ACL を選択します。

    • 必要なウェブ ACL が存在しない場合は、次の手順を実行して作成する必要があります。

      1. [Create Web ACL (ウェブ ACL の作成)] を選択します。

      2. AWS WAF サービスのホームページで、[Create web ACL (ウェブ ACL の作成)] を選択します。

      3. [Web ACL details (ウェブ ACL の詳細)] の [Name (名前)] に、ウェブ ACL の名前を入力します。

      4. [ルール] で、[ルールの追加]、[独自のルールとルールグループの追加] の順に選択します。

      5. [Rule type (ルールタイプ)] で、[IP set (IP セット)] を選択して、特定の IP アドレスのリストを識別します。

      6. [ルール] に、ルールの名前を入力します。

      7. [IP set (IP セット)] で、既存の IP セットを選択します。IP セットを作成するには、「IP セットhttps://docs.aws.amazon.com/waf/latest/developerguide/waf-ip-set-creating.htmlの作成」を参照してください。

      8. [IP address to use the originating address (送信元アドレスとして使用する IP アドレス)] で、[IP address in header (ヘッダーの IP アドレス)] を選択します。

      9. [ヘッダーフィールド名] に「」と入力しますSourceIP

      10. [Position inside header (ヘッダー内の位置)] で、[First IP address (最初の IP アドレス)] を選択します。

      11. [Fallback for missing IP address] で、ヘッダー内の無効な (または欠落している) IP アドレスの処理方法に応じて、[Match] または [No Match] を選択します。

      12. [アクション] で、IP セットのアクションを選択します。

      13. ルールに一致しないリクエストの [Default web ACL action] で、[Allow] または [Block] を選択し、[Next] をクリックします。

      14. ステップ 4 と 5 で、[次へ] を選択します。

      15. [Review and create (確認と作成)] で選択内容を確認し、[Create web ACL (ウェブ ACL の作成)] を選択します。

  7. 変更を保存.] をクリックします。

  8. リソース.] を選択します。

  9. [アクション] で、[API のデプロイ] を選択します。

設定をテストする

カスタム ID プロバイダーを作成したら、設定をテストする必要があります。

Console

AWS Transfer Family コンソールを使用して設定をテストするには

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

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

  3. スタックのデプロイ時に設定した [Username (ユーザー名)] と [Password (パスワード)]AWS CloudFormation のテキストを入力します。デフォルトのオプションを維持した場合、ユーザー名は myuser 、パスワードは ですMySuperSecretPassword

  4. スタックのデプロイ時に設定する場合は、[Server protocol (サーバープロトコル)] を選択し、[Source IP AWS CloudFormation(送信元 IP)] に IP アドレスを入力します。

    ユーザー認証が成功すると、次に示すようにStatusCode: 200、HTML レスポンスとユーザーのロールとアクセス許可の詳細を含む JSON オブジェクトがテストから返されます。

CLI

AWS CLI を使用して設定をテストするには

  1. test-identity-provider コマンドを実行します。

    aws transfer test-identity-provider --server-id s-1234abcd5678efgh --user-name myuser --user-password MySuperSecretPassword --server-protocol FTP --source-ip 127.0.0.1
  2. サーバー ID を入力します。

  3. AWS CloudFormation スタックのデプロイ時に設定したユーザー名とパスワードを入力します。デフォルトのオプションを維持した場合、ユーザー名は myuser 、パスワードは ですMySuperSecretPassword

  4. AWS CloudFormation スタックのデプロイ時に設定する場合は、サーバーのプロトコルと送信元 IP を入力します。

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

    { "Response": "{\"Policy\": \"{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n{\n \"Sid\": \"ReadAndListAllBuckets\",\n \"Effect\": \"Allow\",\n \"Action\": [\n \"s3:ListAllMybuckets\",\n \"s3:GetBucketLocation\",\n \"s3:ListBucket\",\n \"s3:GetObjectVersion\",\n \"s3:GetObjectVersion\"\n],\n \"Resource\":\"*\"\n}\n]\n}\",\"Role\": \"arn:aws:iam::000000000000:role/MyUserS3AccessRole\",\"HomeDirectory\": \"/\"}", "StatusCode": 200, "Message": "", "Url": "https://abcde1234.execute-api.us-east-2.amazonaws.com/prod/servers/s-123a4567bcd891e23/users/myuser/config" }

API Gateway メソッドを実装する

のカスタム ID プロバイダーを作成するにはTransfer Family、API Gatewayゲートウェイが のリソースパスを持つ単一のメソッドを実装する必要があります/servers/serverId/users/username/configserverId および username の値はRESTful、リソースパスから取得されます。必要に応じて、 sourceIp および protocol 値をRESTfulリソースパスに追加できます。

注記

ユーザー名は、最小 3 文字、最大 100 文字である必要があります。ユーザー名には、z、A-–Z、0–9、アンダースコア '_'、ハイフン '-'、ピリオド 'を使用できます。', そして記号「@」. ユーザー名をハイフン、ピリオド、アットマークで始めることはできません。

がユーザーのパスワード認証Transfer Familyを試みると、サービスによってPassword:ヘッダーフィールドが提供されます。Password: ヘッダーがない場合、 はパブリックキー認証をTransfer Family試行してユーザーを認証します。

ID プロバイダーを使用してエンドユーザーを認証および承認するとき、認証情報の検証に加えて、エンドユーザーが使用するクライアントの IP アドレスに基づいてアクセスリクエストを許可または拒否できるようになりました。これによりS3 バケットまたは Amazon EFS ファイルシステムに保存されたデータに、信頼されたものとして指定した IP アドレスからのみ、サポートされているプロトコルを介してアクセスできるようになります。これを有効にするにはsourceIp、リソースパスに RESTful 値を含める必要があります。

サーバーに対して複数のプロトコルを有効にしていて、複数のプロトコルで同じユーザー名を使用してアクセスを提供する場合は、プロトコルに固有の認証情報が ID プロバイダーで設定されていれば、それを行うことができます。これを有効にするにはprotocol、リソースパスに RESTful 値を含める必要があります。

このメソッドは常に HTTP ステータス を返す必要があります200。 その他の HTTP ステータスコードは、API へのアクセスエラーを意味します。

Amazon S3 レスポンスの例

レスポンス本文の例は、 の以下の形式の JSON ドキュメントAmazon S3です。

{ "Role": "IAM role with configured S3 permissions", "PublicKeys": [ "ssh-rsa public-key1", "ssh-rsa public-key2" ], "Policy": "STS Assume role scope down policy", "HomeDirectory": "/<bucketName>/path/to/home/directory" }

Amazon EFS レスポンスの例

レスポンス本文の例は、 の以下の形式の JSON ドキュメントAmazon EFSです。

{ "Role": "IAM role with configured EFS permissions", "PublicKeys": [ "ssh-rsa public-key1", "ssh-rsa public-key2" ], "PosixProfile": { "Uid": "POSIX user ID", "Gid": "POSIX group ID", "SecondaryGids": [<Optional list of secondary Group IDs>], }, "HomeDirectory": "/fs-<id>/path/to/home/directory" }

Role フィールドは、認証に成功したことを示します。パスワード認証を行う場合 (Password:ヘッダーを指定する場合)、SSH パブリックキーを指定する必要はありません。また、Policy および HomeDirectory フィールドはオプションです。home ディレクトリが指定されていない場合、 はデフォルトで親 S3 バケットまたはTransfer Familyファイル sysem Amazon EFS になります。ユーザーが認証できない場合 (パスワードが正しくない場合など)、メソッドはRole設定されていないレスポンスを返す必要があります。たとえば、空の JSON オブジェクトがあります。

Lambda 関数に JSON 形式のユーザーポリシーを含めます。でユーザーポリシーを設定する方法の詳細については、「Transfer Family」ユーザーの管理を参照してください。

認証用の Lambda 関数の例

異なる認証戦略を実装するには、ゲートウェイが使用する Lambda 関数を編集します。アプリケーションのニーズに応じて、Python で以下の Lambda 関数の例を見つけることができます。Lambda の詳細については、「AWS Lambda Developer Guide.」を参照してください。

デフォルトの Lambda 関数

次のLambda関数は、ユーザー名、パスワード (ヘッダーフィールド内IAM)、アクセスロール、パブリック SSH キー、およびプロトコルを受け取ります。プロトコルフィールドを使用して、ID プロバイダーを検索できます。サポートされているプロトコル値は、SFTP、FTPS、FTP です。

注記

サーバーに対して複数のプロトコルを有効にしていて、複数のプロトコルで同じユーザー名を使用してアクセスを提供する場合は、プロトコルに固有の認証情報が ID プロバイダーで設定されていれば、それを行うことができます。FTP の場合は、SFTP および FTPS とは別のクレデンシャルを維持することをお勧めします。SFTP および FTPS と異なり、FTP は認証情報をクリアテキストで送信します。FTP 認証情報を SFTP または FTPS から隔離することにより、FTP 認証情報が共有または公開されている場合、SFTP または FTPS を使用するワークロードは安全を維持します。

はそれらをLambda認証し、成功すると、関連するIAMアクセスロールとポリシーを返します。この関数はLambda、サンプルAWS CloudFormationテンプレートで使用されているものと同じです。

次の例のコメントアウトセクションは、 Transfer Family アーキテクチャで論理ディレクトリを使用する方法を示しています。論理ディレクトリを使用することで、ユーザーごとにAWSセットアップ内の特定のパスへのアクセスを委任できます。たとえばS3 バケットまたはAmazon EFSファイルシステムの異なるセクションへのアクセス権を委任できます。論理ディレクトリを使用するには、関数の HomeDirectoryType パラメータを に設定しますLOGICAL。 また、 HomeDirectoryDetails パラメータで、 Entry と のTargetペアのリストを指定します。

// GetUserConfig Lambda exports.handler = (event, context, callback) => { console.log("Username:", event.username, "ServerId: ", event.serverId); var response; // Check if the user name presented for authentication is correct. This doesn't check the value of the serverId, only that it is provided. // There is also event.protocol (one of "FTP", "FTPS", "SFTP") and event.sourceIp (e.g., "127.0.0.1") to further restrict logins. if (event.serverId !== "" && event.username == '${UserName}') { response = { Role: '${UserRoleArn}', // 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 HomeDirectory: '${UserHomeDirectory}' // Not required, defaults to '/' }; // Check if password is provided if (event.password == "") { // If no password provided, return the user's SSH public key response['PublicKeys'] = [ "${UserPublicKey1}" ]; // Check if password is correct } else if (event.password !== '${UserPassword}') { // Return HTTP status 200 but with no role in the response to indicate authentication failure response = {}; } } else { // Return HTTP status 200 but with no role in the response to indicate authentication failure response = {}; } callback(null, response); };

Lambda で使用する 関数 AWS Secrets Manager

を ID AWS Secrets Manager プロバイダーとして使用するには、サンプルLambdaテンプレートで AWS CloudFormation 関数を使用できます。認証情報を使用してSecrets Managerサービスをクエリし、成功した場合は、指定されたシークレットを返します。Secrets Manager の詳細については、「AWS Secrets Manager ユーザーガイド.」を参照してください。

このAWS CloudFormation関数を使用するサンプルLambdaテンプレートをダウンロードするには、 が提供する Amazon S3 バケットに移動しますAWS Transfer Family