2021/5/6 追記
本記事に記載されている手順は VPC_ENDPOINT
エンドポイントタイプと呼ばれる現在は非推奨となった方式を利用する手順になっています。2020年1月以降は VPC
エンドポイントタイプが利用可能になっており、現在はこちらの方式が推奨されています。
VPC_ENDPOINT
エンドポイントタイプではユーザーが事前に PrivateLink による VPC Endopoint を作成しておく必要はありましたが、VPC
エンドポイントタイプではその必要はありません。サーバー作成時にエンドポイントのタイプに VPC でホスト
、アクセスを 内部
とすることで自動的に AWS マネージドのエンドポイントが作成され、それを利用する形になります。PrivateLink の利用料金も発生しません。
VPC_ENDPOINT
エンドポイントタイプ と VPC
エンドポイントタイプの機能は同等ですが、新機能は VPC
エンドポイントタイプ に実装されます。また 2020年1月以降は VPC_ENDPOINT
エンドポイントタイプのサーバー起動は AWS CLI/SDK 経由でのみ可能でしたが、2021/5/19 以降、VPC_ENDPOINT
エンドポイントタイプを使用した新規サーバー構築ができなくなる旨が AWS Storage Blog で発表されています。
その他参考リンク
追記おわり。
はじめに
AWS Transfer for SFTP が PrivateLink をサポートしたため、VPCエンドポイントを使用して
インターネットを経由せずにS3へのSFTP転送が可能になりました。
やってみる
最初にVPCコンソールからVPCエンドポイントを作成します。
コンソールからは 2つのサービス名
(com.amazonaws.<region>.transfer と com.amazonaws.<region>.transfer.server )
が確認できるのですが、サーバー作成&接続に必要なのは
com.amazonaws.<region>.transfer.server のエンドポイントです。
com.amazonaws.<region>.transfer はCLI操作等でAPIエンドポイントへの
接続が必要な場合に利用します。
VPCやサブネット、セキュリティグループを設定してエンドポイントを作成します。
Transfer for SFTP サーバーの作成は Endpoint configurationで VPC を選択し
最初に作成したVPCエンドポイントのIDを選択すればOK、その他オプションの設定は通常と変わらずです。
作成後すぐに利用可能になります。
通常のパブリックエンドポイントと比較した注意点としては
カスタムホスト名をサポートしていないくらいかなと思います。
VPCエンドポイントのDNS名を指定して接続、転送することができました。
$ sftp -i .ssh/id_rsa user@vpce-xxxxxxxxxxxxxxxxx-yyyyyyyy.server.transfer.ap-northeast-1.vpce.amazonaws.com
Connected to user@vpce-xxxxxxxxxxxxxxxxx-yyyyyyyy.server.transfer.ap-northeast-1.vpce.amazonaws.com.
sftp> !ls test.txt
test.txt
sftp> put test.txt
Uploading test.txt to /<bucket_name>/test.txt
test.txt 100% 0 0.0KB/s 00:00
sftp> ls test.txt
test.txt
sftp> bye
エンドポイント作成時にプライベートDNS名を有効にするにチェックを入れていれば、
VPC内やRoute53 Resolverを利用している環境では
server.transfer.ap-northeast-1.amazonaws.com を使用しても名前解決可能です。
$ dig server.transfer.ap-northeast-1.amazonaws.com +short
10.xxx.xxx.xxx
10.xxx.xxx.xxx
Direct Connect経由やVPCに閉じた形でS3へのSFTP転送が可能に
なったことでより使いやすくなったと思います。
簡単ですが、参考になれば幸いです。