【AWS】AWS Transfer Family でEFSにWinSCPでSFTP接続する

EFSへは踏み台サーバーのEC2経由でログインして利用していたが、作業効率が悪いのでWinSCPとかで繋げたいなということで、AWS Transfer Familyを利用することにした。手順は以下の通り(※EFSは作成済のものとする)

1) SFTPサーバーの作成

  1. AWS Transfer Familyのマネジメントコンソールから「サーバーを作成」ボタンを押下
  2. プロトコルを選択します。今回はWinSCPからSFTP接続したかったのでSFTPを選択
  3. IDプロバイダーも今回は鍵認証でそのまま「サービスマネージド」で次へ
  4. エンドポイントの選択も外部からWinSCPで接続するため「パブリックアクセス可能」のまま次へ
  5. ドメインの選択。ここで今回は「Amazon EFS」の方を選択
  6. 「追加の詳細を設定」のページは特に何もないのでそのまま次へ
  7. 「確認と作成」のページもそのままで「サーバーを作成」ボタン押下

2) (ユーザー用の) ロールの作成

作成したSFTPサーバーを経由してEFSにアクセスするユーザーは、対象のEFSへの操作権限を持つロールが設定されている必要があるため、ユーザー作成前にそのロール及びポリシーを作成しておく

  1. まずはEFSへの操作を許可するIAMポリシーを作成する。IAM→ポリシー→ポリシーの作成でJSON形式で以下のように設定する EFSってなぜかコンソール画面でARNが載っておらず、自分でリージョン情報やらアカウント情報やらをくっつけて作らないといけなくて、自分は東京リージョンにEFS作ってたんですが、リージョン名を「ap-norheast-1」としないといけないところを「ap-norheast-1a」とAZ名にしてしまっていてハマりました。
  2. 次にロールを作成します。任意の名前で作成し、許可ポリシーのセクションで「許可を追加」ボタンを押下し、「1」で作成したポリシーをアタッチします。 ちなみにここで「AmazonElasticFileSystemFullAccess」ポリシーを付与すると、WinSCPで接続した際にアカウント内の全てのEFSにアクセスすることができた。※AWSのBestPracticeの「最小権限」に基づいて、ポリシーは必要最小限の設定推奨
  3. こちらは確認だけになりますが、「信頼ポリシー」が以下のような設定になっているかもチェック

3) ユーザーの作成

  1. 1)で作成したSFTPサーバーのリンクを押下しサーバーのページを開く
  2. 「ユーザー」セクションにて「ユーザーを追加」ボタンを押下
  3. ユーザー名などを入力。 POSIXユーザーID/POSIXグループIDというのはアクセスポイントに割り当てられたユーザー情報のことで、今回作成したユーザーでSFTPサーバー経由でEFSにアクセスした際に適用される。例えばLinux上で「ls -la」コマンドでファイルの一覧を表示したときに記載がある「所有ユーザー:所有グループ」を「chown」コマンドなどでここで指定したユーザーIDやグループIDに変更することで、SFTPから指定の権限にてそのファイルを操作できるようになる。セカンダリグループIDでもう一つ別のグループも割り当てることができる。
  4. ロールは2)で作成したロールを指定、ホームディレクトリは対象のEFSを指定する。「オプションのフォルダを入力」のテキストボックスにはログイン時のデフォルトパスを入力。「/」などのルートディレクトリは非推奨となっている。
  5. SSHパブリックキー」のセクションには公開鍵を入力するが、今回はWinSCPで接続するためputtyの鍵が必要。ローカルのWinSCPのツールから「PuTTYgenを実行」を選択
  6. 「Generate」ボタンを押下
  7. 以下赤枠の部分にてマウスを細かく動かすと鍵の生成が進行する
  8. 赤枠の公開鍵はコピーして5の「SSHパブリックキー」に貼り付け・保存する。緑枠部分にパスフレーズを入力し「Save private key」ボタン押下でローカルの任意の場所に秘密鍵を保存

4) WinSCPにてEFSにアクセスする

  1. WinSCPの「新しいサイト」にホスト名にAWS Transfer Familyで作成したSFTPサーバーのエンドポイントを入力。SFTP接続のためポート番号は22、ユーザー名は3)で作成したユーザー名、パスワードは今回は鍵認証なので入力しない。
  2. 「設定」ボタンを押下し、認証→秘密鍵で3)で作成した秘密鍵ファイル(ppkファイル)を選択し「OK」ボタン
  3. 元の画面に戻って「ログイン」ボタン押下。パスフレーズを聞かれるので3)-8で指定したパスフレーズを入力
  4. 無事ログインできました!

ちなみにここで「Unable to load key file "new.ppk" (PuTTY key format too new)」などのエラーメッセージが出た場合(私は出ました)、鍵とWinSCPのバージョンが合っていないのが原因のため、以下記事を参考にしてもらえると解決すると思います。 ccportal.ims.ac.jp

以上、長々とお付き合い頂きありがとうございました!この記事がどなたかのお役に立てれば幸いです。