この記事の目次
SFTPの基礎

SFTPとは何か
SFTPは、SSH File Transfer Protocolの略で、昔からFTPとして知られているファイル転送の仕組みを、SSHを利用したセキュアな通信を利用するための仕組みです。 なお、SSHとは、Secure Shellの略で、通信データを暗号化することで、送信の途中でのぞき見されないようにする技術です。 そしてSFTPは、昔からよく使われているFTPと同じ手順で、しかもデータを暗号化し安全に送れる点が特徴になっています。FTPとSFTPの違い
昔からファイル転送にはFTPが使われていましたが、FTPではデータをそのまま送信していたので、アカウント名やパスワードを途中で読み取られる危険性がありました。 そのため、以前ならWebブラウザもFTPによるファイル転送をサポートしていたのですが、セキュアな送信でないことから、今では使えません。 その点、SFTPは、データが全て暗号化されるので、そのような危険がありません。また、FTPクライアントアプリのほとんどが対応しているので、使い慣れたアプリをそのまま利用できます。 なお、SFTPと同じように、データ通信をTLSまたはSSLで暗号化するFTPSという方法もあり、AWS Transfer Familyでは、この方法もサポートしています。 この方法も、ほとんどのFTPクライアントアプリが対応しているので、AWSではSFTPと同じように利用できます。scpとSFTPの違い
AWSへのファイル転送を実現するAWS Transfer Familyでは、SFTP、FTP、FTPSの3つの方法に対応しています。 この他に、オープンソースのSSHを利用したファイル転送コマンドscpがあり、多くのLinuxで利用できます。そして、SSHを利用していることから、送信データが暗号化されるので、途中で読まれる心配はありません。 ただし、scpには「通信が途切れた場合に、自動的に再接続して送り直す」といったFTPに備わるフェイルセーフ機能がありません。その観点からも、SFTPの利用をおすすめします。AWSでSFTPを利用する方法

Amazon S3バケットを作成する
AWSでSFTPを利用する場合、転送したファイルを格納する領域が必要です。そして、その受け皿となるAWSのストレージサービスが、Amazon S3です。 SFTPの設定を実施する前に、Amazon S3の領域を作っておきましょう。SFTP対応サーバーを作成する
AWS Transfer FamilyでSFTPを利用するには、SFTP対応サーバーを作成する必要があります。AWS Transfer Familyの専用ページにアクセスし、サーバーを作成してください。なお、サーバー作成時に、次の4つの項目が求められます (1) プロトコルの選択 SFTP、FTPS、FTPの3つから、選択します。ここで、SFTPを選んでください。 (2) IDプロバイダータイプを選択 利用する予定のIDプロバイダータイプを指定します。 (3) エンドポイントとホスト名の設定 エンドポイントとは、SFTPでアクセスするクライアント端末のことです。インターネットに公開するか、それともAmazon VPCの仮想ネットワークのどちらかを選択します。さらに、SFTPサーバーのホスト名もここで設定可能です。 (4) その他の設定 ログの設定や暗号化する際に使用するキーなど、必要に応じて設定します。ユーザーを作成する
先ほどの手順でサーバーができたら、続いてアクセスの際に使用するユーザーを作成してください。AWS Transfer Familyの管理コンソールのUserセクションから、簡単に作成できます。 この場合Amazon S3に用意したバケットに対する操作を許可するポリシーが必要です。また、SFTPでアクセスする際、パスワードを使わず、SSHの公開鍵で認証します。「SSH public keys」も必ず設定してください。 この手順によりユーザーが作成できたら、SFTPによるファイル転送が可能です。AWS Transfer Family設定時の注意点

SSH public keyの設定が必要
AWS Transfer FamilyによりSFTPで接続する際は、パスワードを使いません。ユーザー作成時に、SSH public keyを登録することで、SSHのパスワードを省略する手順と同じ手順で認証します。 そのため、あらかじめアクセスするFTPクライアント側でSSH public keyを生成し、それをユーザー作成時に登録する必要があります。 AWSの公式ドキュメントにOS毎の生成手順が解説されていますので、それを参考にして作成してください。ポリシーの設定に注意
AWS Transfer Familyでユーザーを作成する際、必ずポリシーを設定しなければなりません。 そのポリシーとして、AWS Transfer Familyを利用するためのポリシーとAmazon S3に接続するためのポリシーの2つが必要です。 もし、SFTPで接続できたのに、「権利が無い」といったメッセージが表示される場合は、SFTPの接続で利用したユーザーに割り当てたロールの信頼関係に、次のように2つ設定されているかチェックしてみてください。アクセスコントロールポリシードキュメントの例 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "transfer.amazonaws.com" }, "Action": "sts:AssumeRole" }, { "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }この例では、「transfer.amazonaws.com」と「s3.amazonaws.com」の2つが設定されているので、SFTPを介してAmazon S3にアクセスできます。
まとめ
