SFTP コネクタのセットアップと使用 - AWS Transfer Family

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

SFTP コネクタのセットアップと使用

コネクタの目的は、 AWS ストレージとパートナーのSFTPサーバーとの関係を確立することです。Amazon S3 からパートナーが所有する外部の宛先にファイルを送信できます。SFTP コネクタを使用して、パートナーのSFTPサーバーからファイルを取得することもできます。

このチュートリアルでは、SFTPコネクタをセットアップし、Amazon S3 ストレージとSFTPサーバー間でファイルを転送する方法について説明します。

SFTP コネクタは からSFTP認証情報を取得し AWS Secrets Manager 、リモートSFTPサーバーに認証して接続を確立します。コネクタは、リモートサーバーにファイルを送信または取得し、Amazon S3 にファイルを保存します。IAM ロールは、Amazon S3 バケットと Secrets Manager に保存されている認証情報へのアクセスを許可するために使用されます。また、Amazon にログインすることもできます CloudWatch。

SFTP コネクタが Secrets Manager、Amazon S3、 CloudWatch ログ、IAMロール、リモートSFTPサーバーとやり取りする方法を示すアーキテクチャ図。

ステップ 1: 必要なサポートリソースを作成する

SFTP コネクタを使用して、Amazon S3 と任意のリモートSFTPサーバー間でファイルをコピーできます。このチュートリアルでは、リモート AWS Transfer Family サーバーとしてSFTPサーバーを使用しています。次のリソースを作成して設定する必要があります。

Amazon S3 バケットを作成する

Amazon S3 バケットを作成するには
  1. で AWS Transfer Family コンソールにサインインしますhttps://console.aws.amazon.com/s3/

  2. リージョンを選択し、名前を入力します。

    このチュートリアルでは、バケットは にありUS East (N. Virginia) us-east-1、名前は ですsftp-server-storage-east

  3. デフォルトを受け入れ、 バケットの作成 を選択します。

Amazon S3 バケットの作成の詳細については、「Amazon Simple Storage Service ユーザーガイド」のS3 バケットの作成方法」を参照してください。

必要なアクセス許可を持つIAMロールを作成する

アクセスロールには、次のアクセス許可を持つポリシーを作成します。

次の例では、 にアクセスするために必要なアクセス許可を付与します。DOC-EXAMPLE-BUCKET Amazon S3、および Secrets Manager に保存されている指定されたシークレット。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowListingOfUserFolder", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET" ] }, { "Sid": "HomeDirObjectAccess", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObject", "s3:DeleteObjectVersion", "s3:GetObjectVersion", "s3:GetObjectACL", "s3:PutObjectACL" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" }, { "Sid": "GetConnectorSecretValue", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": "arn:aws:secretsmanager:region:account-id:secret:aws/transfer/SecretName-6RandomCharacters" } ] }

次のように項目を置き換えます。

  • [ DOC-EXAMPLE-BUCKET、チュートリアルでは を使用しますs3-storage-east

  • [ region、チュートリアルでは を使用しますus-east-1

  • [ account-id、ID を使用します AWS アカウント 。

  • [ SecretName-6RandomCharacters、名前using sftp-connector1は です (シークレットには独自の 6 つのランダムな文字があります)。

また、このロールに、ユーザーの転送リクエストを処理するときにコネクタがリソースにアクセスできるようにする信頼関係が含まれていることを確認する必要があります。信頼関係の確立の詳細については、信頼関係を確立するには を参照してください。

注記

チュートリアルで使用しているロールの詳細については、「」を参照してくださいユーザーロールとアクセスロールの組み合わせ

シークレットを作成して保存する AWS Secrets Manager

SFTP コネクタのユーザー認証情報を保存するには、Secrets Manager にシークレットを保存する必要があります。パスワード、SSHプライベートキー、またはその両方を使用できます。チュートリアルでは、プライベートキーを使用しています。

注記

Secrets Manager にシークレットを保存すると、 AWS アカウント に料金が発生します。料金については、「AWS Secrets Manager 料金表」を参照してください。

シークレットを保存する手順を開始する前に、プライベートキーを取得してフォーマットします。プライベートキーは、リモートSFTPサーバー上のユーザー用に設定されたパブリックキーに対応する必要があります。チュートリアルでは、プライベートキーは、リモートサーバーとして使用している Transfer Family SFTPサーバーにテストユーザー用に保存されているパブリックキーに対応する必要があります。

これを行うには、次のコマンドを実行します。

jq -sR . path-to-private-key-file

例えば、プライベートキーファイルが にある場合~/.ssh/sftp-testuser-privatekey、 コマンドは次のようになります。

jq -sR . ~/.ssh/sftp-testuser-privatekey

これにより、キーが正しい形式 (改行文字が埋め込まれている) で標準出力に出力されます。このテキストは、次の手順 (ステップ 6) で貼り付ける必要があるため、どこかにコピーします。

SFTP コネクタの Secrets Manager にユーザー認証情報を保存するには
  1. にサインイン AWS Management Console し、 で AWS Secrets Manager コンソールを開きますhttps://console.aws.amazon.com/secretsmanager/

  2. 左側のナビゲーションペインで [サーバー] を選択します。

  3. [シークレット]ページで、[新しいシークレットの保存]を選択します。

  4. [シークレットタイプの選択] ページの[シークレットタイプ] で[その他のシークレットタイプ] を選択します。

  5. [キー/値のペア] セクションで、[キー/値] タブを選択します。

    • キーUsernameと入力します。

    • value – ユーザーの名前を入力しますsftp-testuser

  6. キーを入力するには、プレーンテキストタブを使用することをお勧めします。

    1. 行の追加 を選択し、 を入力しますPrivateKey

    2. [プレーンテキスト] タブを選択します。フィールドには、次のテキストが含まれるようになりました。

      {"Username":"sftp-testuser","PrivateKey":""}
    3. 空の二重引用符 (「」) の間にプライベートキー (以前に保存) のテキストを貼り付けます。

      画面は次のようになります (キーデータはグレー表示されます)。

      ユーザー名とプライベートキーを示すプレーンテキストのシークレット。
  7. [Next (次へ)] を選択します。

  8. シークレットの設定ページで、シークレットの名前を入力します。このチュートリアルでは、シークレット に名前を付けますaws/transfer/sftp-connector1

  9. [次へ] を選択し、[ローテーションの設定] ページのデフォルトを受け入れます。次いで、[次へ] を選択します。

  10. [レビュー] ページで [ストア] を選択し、シークレットを作成して保存します。

ステップ 2: SFTP コネクタを作成してテストする

このセクションでは、前に作成したすべてのリソースを使用するSFTPコネクタを作成します。詳細については、「SFTP コネクタの設定」を参照してください。

SFTP コネクタを作成するには
  1. で AWS Transfer Family コンソールを開きますhttps://console.aws.amazon.com/transfer/

  2. 左側のナビゲーションペインで、[コネクタ] を選択し、[コネクタの作成] を選択します。

  3. SFTP コネクタタイプを選択してSFTPコネクタを作成し、次へ を選択します。

    Transfer Family コンソールに [コネクタの作成] ページが表示され、コネクタの種類を選択します。SFTP が選択されています。
  4. [コネクタ構成] セクションで、次の情報を入力します。

    • URL、URLリモートSFTPサーバーの を入力します。このチュートリアルでは、リモートサーバーとして使用している URL Transfer Family SFTPサーバーの を入力します。

      sftp://s-1111aaaa2222bbbb3.server.transfer.us-east-1.amazonaws.com

      置換 1111aaaa2222bbbb3 Transfer Family サーバー ID を使用します。

    • アクセスロール には、前に作成したロール を入力しますsftp-connector-role

    • ログ記録ロール で、 を選択しますAWSTransferLoggingAccess

      注記

      AWSTransferLoggingAccess は AWS マネージドポリシーです。このポリシーの詳細については、「」を参照してくださいAWS マネージドポリシー: AWSTransferLoggingAccess

    コネクタ設定を示す Transfer Family コネクタSFTPコンソール。
  5. SFTP 設定 セクションで、次の情報を指定します。

    • Connector 認証情報 では、SFTP認証情報を含む Secrets Manager リソースの名前を選択します。チュートリアルでは、 を選択しますaws/transfer/sftp-connector1

    • 信頼されたホストキー の場合、ホストキーのパブリック部分に貼り付けます。このキーを取得するには、 SFTP サーバーssh-keyscanで を実行します。信頼できるホストキーをフォーマットして保存する方法については、「」を参照してください。 SftpConnectorConfig データ型ドキュメント。

    Transfer Family SFTP コネクタコンソール。SFTP設定を示します。
  6. すべての設定を確認したら、コネクタの作成を選択してSFTPコネクタを作成します。

SFTP コネクタを作成したら、新しいコネクタを使用してファイルを転送する前に、それをテストすることをお勧めします。

Test a connector using the console
SFTP コネクタをテストするには
  1. で AWS Transfer Family コンソールを開きますhttps://console.aws.amazon.com/transfer/

  2. 左側のナビゲーション ウィンドウで、[コネクタ] を選択し、コネクタを選択します。

  3. [アクション] メニューから[テスト接続] を選択します。

    選択したSFTPコネクタを示す Transfer Family コンソールと、接続のテスト接続アクションが強調表示されます。

システムはテストが合格したかどうかを示すメッセージを返します。テストに失敗した場合、システムは失敗の理由に基づいたエラーメッセージを提供します。

SFTP コネクタテスト接続パネル。テストが成功したことを示します。
SFTP コネクタテスト接続パネルは、失敗したテストを示します。エラーメッセージは、コネクタのアクセスロールが正しくないことを示します。
Test a connector using the CLI

を使用してコネクタをテストするには AWS Command Line Interface、コマンドプロンプトで次のコマンドを実行します (置き換える connector-id 実際のコネクタ ID を使用):

aws transfer test-connection --connector-id c-connector-id

テストが成功すると、次の行が返されます。

{ "Status": "OK", "StatusMessage": "Connection succeeded" }

テストが失敗した場合は、次のような説明的なエラーメッセージが表示されます。

{ "Status": "ERROR", "StatusMessage": "Unable to assume the configured access role" }

ステップ 3: SFTP コネクタを使用してファイルを送信および取得する

簡単にするために、Amazon S3 バケットにファイルがすでにあることを前提としています。

注記

このチュートリアルでは、送信元と送信先の両方のストレージロケーションに Amazon S3 バケットを使用しています。SFTP サーバーが Amazon S3 ストレージを使用しない場合、次のコマンドsftp-server-storage-eastで表示される場所であれば、パスをSFTPサーバーからアクセスできるファイルの場所へのパスに置き換えることができます。

  • Amazon S3 ストレージSEND-to-SERVER.txtから という名前のファイルをSFTPサーバーに送信します。

  • SFTP サーバーRETRIEVE-to-S3.txtから Amazon S3 ストレージに という名前のファイルを取得します。

注記

次のコマンドで、 を置き換えます。connector-id コネクタ ID を使用します。

まず、Amazon S3 バケットからリモートSFTPサーバーにファイルを送信します。コマンドプロンプトから、次のコマンドを実行します。

aws transfer start-file-transfer --connector-id c-connector-id --send-file-paths "/s3-storage-east/SEND-to-SERVER.txt" / --remote-directory-path "/sftp-server-storage-east/incoming"

これで、sftp-server-storage-eastバケットは次のようになります。

新しく転送されたファイルを含むSFTPサーバーバケット。

ファイルが期待どおりに表示されない場合は、 CloudWatch ログを確認してください。

CloudWatch ログを確認するには
  1. で Amazon CloudWatch コンソールを開きます。 https://console.aws.amazon.com/cloudwatch/

  2. 左側のナビゲーションメニューからロググループを選択します。

  3. 検索バーにコネクタ ID を入力して、ログを検索します。

  4. 検索から返されるログストリームを選択します。

  5. 最新のログエントリを展開します。

成功すると、ログエントリは次のようになります。

{ "operation": "SEND", "timestamp": "2023-12-18T15:26:57.346283Z", "connector-id": "connector-id", "transfer-id": "transfer-id", "file-transfer-id": "transfer-id/file-transfer-id", "url": "sftp://server-id.server.transfer.us-east-1.amazonaws.com", "file-path": "/s3-storage-east/SEND-to-SERVER.txt", "status-code": "COMPLETED", "start-time": "2023-12-18T15:26:56.915864Z", "end-time": "2023-12-18T15:26:57.298122Z", "account-id": "500655546075", "connector-arn": "arn:aws:transfer:us-east-1:500655546075:connector/connector-id", "remote-directory-path": "/sftp-server-storage-east/incoming" }

ファイル転送が失敗した場合、ログエントリには問題を指定するエラーメッセージが含まれます。エラーの一般的な原因は、IAMアクセス許可の問題と誤ったファイルパスです。

次に、SFTPサーバーから Amazon S3 バケットにファイルを取得します。コマンドプロンプトから、次のコマンドを実行します。

aws transfer start-file-transfer --connector-id c-connector-id --retrieve-file-paths "/sftp-server-storage-east/RETRIEVE-to-S3.txt" --local-directory-path "/s3-storage-east/incoming"

転送が成功すると、Amazon S3 バケットには、ここに示すように転送されたファイルが含まれます。

新しく転送されたファイルを含む Amazon S3 バケット。

成功すると、ログエントリは次のようになります。

{ "operation": "RETRIEVE", "timestamp": "2023-12-18T15:36:40.017800Z", "connector-id": "c-connector-id", "transfer-id": "transfer-id", "file-transfer-id": "transfer-id/file-transfer-id", "url": "sftp://s-server-id.server.transfer.us-east-1.amazonaws.com", "file-path": "/sftp-server-storage-east/RETRIEVE-to-S3.txt", "status-code": "COMPLETED", "start-time": "2023-12-18T15:36:39.727626Z", "end-time": "2023-12-18T15:36:39.895726Z", "account-id": "500655546075", "connector-arn": "arn:aws:transfer:us-east-1:500655546075:connector/c-connector-id", "local-directory-path": "/s3-storage-east/incoming" }

リモートサーバーとして使用する Transfer Family SFTPサーバーを作成する手順

以下に、このチュートリアルのリモートサーバーとして機能する Transfer Family SFTPサーバーを作成する手順の概要を示します。次の点に注意してください。

  • Transfer Family サーバーを使用してリモートSFTPサーバーを表します。一般的なSFTPコネクタユーザーには、独自のリモートSFTPサーバーがあります。「Transfer Family SFTPサーバーとユーザーを作成する」を参照してください。

  • Transfer Family サーバーを使用しているため、サービスマネージドSFTPユーザーも使用しています。また、簡単にするために、このユーザーが Transfer Family サーバーにアクセスするために必要なアクセス許可を、コネクタを使用するために必要なアクセス許可と組み合わせました。繰り返しになりますが、ほとんどのSFTPコネクタユースケースには、Transfer Family サーバーに関連付けられていない別のSFTPユーザーがあります。「Transfer Family SFTPサーバーとユーザーを作成する」を参照してください。

  • チュートリアルでは、リモートSFTPサーバーに Amazon S3 ストレージを使用しているため、あるバケットから別のバケットにファイルを転送できるようにs3-storage-east、2 番目のバケット を作成する必要があります。

Transfer Family SFTPサーバーとユーザーを作成する

ほとんどのユーザーは、既にユーザーを持つSFTPサーバーがあり、このサーバーを使用してファイルを送受信できるため、Transfer Family SFTPサーバーとユーザーを作成する必要はありません。ただし、このチュートリアルでは、簡単にするために、Transfer Family サーバーを使用してリモートSFTPサーバーとして機能します。

で説明されている手順に従ってサーバーSFTP対応サーバーを作成するを作成し、ユーザーステップ 3: サービスマネージドユーザーを追加するを追加します。チュートリアルで使用しているユーザーの詳細は次のとおりです。

  • サービスマネージドユーザー を作成しますsftp-testuser

    • ホームディレクトリを に設定する /sftp-server-storage-east/sftp-testuser

    • ユーザーを作成するときは、パブリックキーを保存します。その後、Secrets Manager でシークレットを作成するときは、対応するプライベートキーを指定する必要があります。

  • ロール: sftp-connector-role。チュートリアルでは、SFTPユーザーとSFTPコネクタの両方に同じIAMロールを使用しています。組織のコネクタを作成する場合、ユーザーロールとアクセスロールがそれぞれ異なる場合があります。

  • サーバーホストキー: コネクタを作成するときは、サーバーホストキーを使用する必要があります。このキーを取得するには、 サーバーssh-keyscanで を実行します。例えば、サーバー ID が でs-1111aaaa2222bbbb3、エンドポイントが の場合us-east-1、次のコマンドはサーバーホストキーを取得します。

    ssh-keyscan s-1111aaaa2222bbbb3.server.transfer.us-east-1.amazonaws.com

    ステップ 2: SFTP コネクタを作成してテストする プロシージャに貼り付ける必要があるため、このテキストをどこかにコピーします。

ユーザーロールとアクセスロールの組み合わせ

チュートリアルでは、単一の複合ロールを使用しています。このロールは、SFTPユーザーとコネクタへのアクセスの両方に使用されます。次の例では、チュートリアルのタスクを実行する場合に備えて、このロールの詳細を示します。

次の例では、Amazon S3 の 2 つのバケットにアクセスするために必要なアクセス許可と、Secrets Manager に保存aws/transfer/sftp-connector1されている という名前のシークレットを付与します。このチュートリアルでは、このロールの名前は ですsftp-connector-role

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowListingOfUserFolder", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::sftp-server-storage-east", "arn:aws:s3:::s3-storage-east" ] }, { "Sid": "HomeDirObjectAccess", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObject", "s3:DeleteObjectVersion", "s3:GetObjectVersion", "s3:GetObjectACL", "s3:PutObjectACL" ], "Resource": [ "arn:aws:s3:::sftp-server-storage-east/*", "arn:aws:s3:::s3-storage-east/*" ] }, { "Sid": "GetConnectorSecretValue", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": "arn:aws:secretsmanager:us-east-1:500655546075:secret:aws/transfer/sftp-connector1-6RandomCharacters" } ] }

Transfer Family のロールの作成の詳細については、「」で説明されている手順に従ってロールユーザーロールの作成を作成します。