翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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 ARN を参照するポリシーが必要です。たとえば、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:lambda:
region
:account-id
:function:my-lambda-auth-function
", "Condition": { "ArnLike": { "AWS:SourceArn": "arn:aws:transfer:region
:account-id
:server/server-id
" } } } ] }"
注記
上記のポリシー例では、各「ユーザー入力プレースホルダー
」をあなた自身の情報で置き換えます。
イベントメッセージの構造
SFTP サーバーからカスタム IDP のオーソライザー Lambda 関数に送信されるイベントメッセージ構造は次のとおりです。
{ "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 で似ています。唯一の違いは、SFTP ではなく、これらの値がprotocol
パラメータに使用されることです。
認証用の 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 スタックを作成するには
-
https://console.aws.amazon.com/cloudformation
で AWS CloudFormation コンソールを開きます。 -
「 AWS CloudFormation ユーザーガイド」の AWS CloudFormation 「スタックテンプレートの選択」にある既存のテンプレートから スタックをデプロイする手順に従ってください。
-
以下のテンプレートのいずれかを使用して、Transfer Family で認証に使用するLambda 関数を作成します。
-
クラシック (Amazon Cognito) スタックテンプレート
でカスタム ID プロバイダー AWS Lambda として使用する を作成するための基本的なテンプレート AWS Transfer Family。Amazon Cognito に対してパスワードベースの認証を行い、パブリックキーベースの認証が使用されている場合、パブリックキーは Amazon S3 バケットから返されます。デプロイ後に Lambda 関数コードを変更すれば異なる処理を実行できます。
-
AWS Secrets Manager スタックテンプレート
Secrets Manager を ID プロバイダーとして統合するために、 を AWS Transfer Family サーバー AWS Lambda で使用する基本的なテンプレート。形式の 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 と使用して Okta を MultiFactor 認証と統合する、カスタム ID プロバイダーとしての基本的なテンプレート。 -
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 Resource Name (ARN) を指定します。このロールにアタッチされたポリシーにより、ファイルを Amazon S3 または Amazon EFS ファイルシステム間で転送する際のユーザーに付与するアクセスのレベルが決定されます。IAM ロールには、ユーザーの転送リクエストを処理する際に、サーバーによるリソースへのアクセスを許可する信頼関係も含まれる必要があります。 信頼関係の確立の詳細については、信頼関係を確立するには を参照してください。 |
必須 |
|
ユーザーの Amazon EFS ファイルシステムへのアクセスを制御する、ユーザー 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": "" }