翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS Lambda を使用して ID プロバイダーを統合する
カスタム ID プロバイダーに接続する AWS Lambda 関数を作成します。Okta、Secrets Manager、、認証ロジックを含むカスタムデータストアなど OneLogin、任意のカスタム ID プロバイダーを使用できます。
注記
Lambda を ID プロバイダーとして使用する Transfer Family サーバーを作成する前に、関数を作成する必要があります。サンプルの Lambda 関数については、「Lambda 関数の例」を参照してください。または、 のいずれかを使用する CloudFormation スタックをデプロイできますLambda 関数のテンプレート。また、Lambda 関数が Transfer Family と信頼関係にあるリソースベースのポリシーを使用していることを確認してください。ポリシーの例については、「Lambda リソースベースのポリシー」を参照してください。
-
[Create server] (サーバーの作成) を選択すると [Create server] (サーバーの作成) ページが開きます。[Choose an identity provider] (ID プロバイダーの選択) で [Custom Identity Provider] (カスタム ID プロバイダー) を選択します (次の画面例を参照)。
注記
認証方法の選択は、Transfer Family サーバーのプロトコルの 1 つSFTPとして を有効にする場合にのみ使用できます。
-
デフォルト値 AWS Lambda を使用して ID プロバイダー を接続します。
-
「AWS Lambda 関数」では、Lambda 関数の名前を選択します。
-
残りのフィールドに値を入力してから [Create server] (サーバーの作成) を選択します。サーバーを作成するための残りの手順の詳細については、「SFTP、FTPS、またはFTPサーバーエンドポイントの設定」を参照してください。
Lambda リソースベースのポリシー
Transfer Family サーバーと Lambda を参照するポリシーが必要ですARNs。たとえば、ID プロバイダーに接続する Lambda 関数で次のポリシーを使用できます。ポリシーは文字列JSONとしてエスケープされます。
"Policy": "{ "Version": "2012-10-17", "Id": "default", "Statement": [ { "Sid": "AllowTransferInvocation", "Effect": "Allow", "Principal": { "Service": "transfer.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:transfer:
region
:account-id
:function:my-lambda-auth-function
", "Condition": { "ArnLike": { "AWS:SourceArn": "arn:aws:transfer:region
:account-id
:server/server-id
" } } } ] }"
注記
上記のポリシー例で、各 を置き換えます。user input
placeholder
独自の情報。
イベントメッセージの構造
カスタムのオーソライザー Lambda 関数に送信されるSFTPサーバーからのイベントメッセージ構造IDPは次のとおりです。
{ 'username': 'value', 'password': 'value', 'protocol': 'SFTP', 'serverId': 's-abcd123456', 'sourceIp': '192.168.0.100' }
ここで、username
およびpassword
はサーバーに送信されるサインイン認証情報の値です。
例えば、以下のコマンドを入力して接続する:
sftp bobusa@server_hostname
その後、パスワードの入力を求められる:
Enter password: mysecretpassword
Lambda 関数内から渡されたイベントを出力することで、Lambda 関数からこれを確認できます。以下のテキストブロックのように見えるはずです。
{ 'username': 'bobusa', 'password': 'mysecretpassword', 'protocol': 'SFTP', 'serverId': 's-abcd123456', 'sourceIp': '192.168.0.100' }
イベント構造は FTPと で似ていますFTPS。唯一の違いは、これらの値が ではなく protocol
パラメータに使用されることですSFTP。
認証用の Lambda 関数
さまざまな認証戦略を実装するには、Lambda 関数を編集します。アプリケーションのニーズを満たすために、 CloudFormation スタックをデプロイできます。Lambda の詳細については、AWS Lambda デベロッパーガイドまたは「Node.js による Lambda 関数の構築」を参照してください。
Lambda 関数のテンプレート
認証に Lambda 関数を使用する AWS CloudFormation スタックをデプロイできます。ログイン認証情報を使用してユーザーを認証および認可するテンプレートがいくつか用意されています。これらのテンプレートまたは AWS Lambda コードを変更して、ユーザーアクセスをさらにカスタマイズできます。
注記
テンプレートで FIPS対応のセキュリティポリシーを指定 AWS CloudFormation することで、 FIPSを通じて 対応 AWS Transfer Family サーバーを作成できます。使用可能なセキュリティポリシーについては、のセキュリティポリシー AWS Transfer Familyで説明しています。
認証に使用する AWS CloudFormation スタックを作成するには
-
AWS CloudFormation コンソールを https://console.aws.amazon.com/cloudformation
で開きます。 -
「 ユーザーガイド」の AWS CloudFormation 「スタックテンプレートの選択」の「既存のテンプレートからスタックをデプロイする手順に従います。 AWS CloudFormation
-
以下のテンプレートのいずれかを使用して、Transfer Family で認証に使用するLambda 関数を作成します。
-
クラシック (Amazon Cognito) スタックテンプレート
でカスタム ID プロバイダーとして使用する AWS Lambda を作成するための基本的なテンプレート AWS Transfer Family。Amazon Cognito に対してパスワードベースの認証を行い、パブリックキーベースの認証が使用されている場合、パブリックキーは Amazon S3 バケットから返されます。デプロイ後に Lambda 関数コードを変更すれば異なる処理を実行できます。
-
AWS Secrets Manager スタックテンプレート
を AWS Transfer Family サーバー AWS Lambda で使用する基本的なテンプレートで、Secrets Manager を ID プロバイダーとして統合します。形式の AWS Secrets Manager のエントリに対して認証されます
aws/transfer/
。さらに、シークレットは、Transfer Family に返されるすべてのユーザープロパティのキーバリューペアを保持する必要があります。デプロイ後に Lambda 関数コードを変更すれば異なる処理を実行できます。server-id
/username
-
Okta スタックテンプレート
: を AWS Transfer Family サーバー AWS Lambda と使用して Okta をカスタム ID プロバイダーとして統合する基本的なテンプレート。 -
Okta-mfa スタックテンプレート
: を AWS Transfer Family サーバー AWS Lambda で使用する基本テンプレートで、カスタム ID プロバイダーとして Okta を MultiFactor Authentication と統合します。 -
Azure Active Directory テンプレート
: このスタックの詳細については、ブログ記事「Azure Active Directory と AWS Transfer Family による の認証 AWS Lambda 」で説明されています。
スタックがデプロイされたら、 CloudFormation コンソールの出力タブでスタックの詳細を表示できます。
これらのスタックのいずれかをデプロイすることが、カスタム ID プロバイダーをTransfer Family ワークフローに統合するうえで最も簡単な方法です。
-
有効な Lambda 値
次の表は、カスタム ID プロバイダーに使用される Lambda 関数について Transfer Family が受け入れる値の詳細についての説明です。
値 | 説明 | 必須 |
---|---|---|
|
Amazon S3 バケットまたは Amazon EFS ファイルシステムへのユーザーのアクセスを制御するIAMロールの Amazon リソースネーム (ARN) を指定します。 Amazon S3 このロールにアタッチされたポリシーは、Amazon S3 または Amazon EFS ファイルシステムとの間でファイルを転送する際にユーザーに提供するアクセスレベルを決定します。IAM ロールには、ユーザーの転送リクエストを処理するときにサーバーがリソースにアクセスできるようにする信頼関係も含める必要があります。 信頼関係の確立の詳細については、信頼関係を確立するには を参照してください。 |
必須 |
|
ユーザー ID ( |
Amazon EFS バッキングストレージに必要です |
|
このユーザーに有効なSSHパブリックキー値のリスト。空のリストはこれが有効なログインではないことを示します。パスワード認証中に返してはなりません。 |
オプションです。 |
|
複数のユーザーで同じIAMロールを使用できるように、ユーザーのセッションポリシー。このポリシーは、ユーザーアクセスのスコープを Amazon S3 バケットの一部に絞り込みます。 |
オプションです。 |
|
ユーザーがサーバーにログインするときにホームディレクトリにするランディングディレクトリ (フォルダ) のタイプ。
|
オプションです。 |
|
ユーザーに表示させる Amazon S3 または Amazon EFSパスとキーと、表示方法を指定する論理ディレクトリマッピング。 |
|
|
ユーザーがクライアントを使用してサーバーにログインするときの、ユーザーのランディングディレクトリ。 |
オプションです。 |
注記
HomeDirectoryDetails
はマップの文字列表現ですJSON。これは、実際のJSONマップオブジェクトでありPosixProfile
、文字列のJSON配列PublicKeys
である とは対照的です。言語固有の詳細については、コード例を参照してください。
Lambda 関数の例
このセクションでは、NodeJS と Python の両方で使用される Lambda 関数の例をいくつか紹介します。
注記
これらの例では、ユーザー、ロール、POSIXプロファイル、パスワード、ホームディレクトリの詳細がすべて例であり、実際の値に置き換える必要があります。
設定をテストする
カスタム ID プロバイダーを作成したら、設定をテストする必要があります。
ユーザー認証が成功すると、テストはStatusCode: 200
HTTPレスポンス、空の文字列 Message: ""
(それ以外の場合は失敗の理由を含む)、および Response
フィールドを返します。
注記
以下のレスポンス例では、 Response
フィールドは「文字列化」 (プログラム内で使用できるフラットJSON文字列に変換) されたJSONオブジェクトであり、ユーザーのロールとアクセス許可の詳細が含まれています。
{ "Response":"{\"Policy\":\"{\\\"Version\\\":\\\"2012-10-17\\\",\\\"Statement\\\":[{\\\"Sid\\\":\\\"ReadAndListAllBuckets\\\",\\\"Effect\\\":\\\"Allow\\\",\\\"Action\\\":[\\\"s3:ListAllMybuckets\\\",\\\"s3:GetBucketLocation\\\",\\\"s3:ListBucket\\\",\\\"s3:GetObjectVersion\\\",\\\"s3:GetObjectVersion\\\"],\\\"Resource\\\":\\\"*\\\"}]}\",\"Role\":\"arn:aws:iam::000000000000:role/MyUserS3AccessRole\",\"HomeDirectory\":\"/\"}", "StatusCode": 200, "Message": "" }