新サービスAWS Transfer for SFTPを使って、WinSCPからS3へアクセスする #reinvent

117件のシェア(ちょっぴり話題の記事)

はじめに

日本時間の2018年11月26日夕方、AWSからマネージドSFTPサーバ"AWS Transfer for SFTP"が発表されました。

“AWS Transfer for SFTP”発表!S3がSFTPで連携可能に!! #reinvent

こちらのサービスを早速使ってみました。

AWS Transfer for SFTP(AWS SFTP)を使う

SFTPサーバの起動

AWS管理コンソールにログインし、東京リージョンでサービスを検索します。ありました。

サービスのトップページです。Create Serverボタンを押します。

サーバ起動設定画面では、以下が設定できます。 これら設定の殆ど(Identity provider以外)はSFTPサーバ作成後にも変更できます。

  • DNS configuration: SFTPサーバの名前解決
    • None: 使用しない(自動生成されたエンドポイント名を使う)
    • Amazon Route53 DNS alias: Route53のエイリアス機能を使う(自動で)
  • Identity provider: 認証を行う場所
    • Service Managed: AWS SFTPの機能を利用する
    • Custom: 外部サービスをAmazon API Gateway経由で利用する
  • Logging role: CloudWatch logsに転送する際のロール
  • Tags: タグ

今回はお試しということで、以下の設定で作成しました。

  • DNS configuration: None
  • Identity provider: Service Managed
  • Logging role: なし
  • Tags: なし

画面一番下のCreate serverボタンでSFTPサーバが作成されます。

SFTPサーバ作成中の画面です。

約3分程でStateStartingからOnlineに変わりました。

Server IDをクリックすると、SFTPサーバの設定変更画面が表示されます。

Server configurationEndpointにSFTPサーバとしてアクセスできるホスト名が表示されるので、これを押さえておきます。

ここまででSFTPサーバの作成は出来上がりです。簡単ですね。引き続き、この画面からSFTPサーバへアクセスするSFTPユーザの作成を行います。

SFTPユーザの作成、パブリックキーの登録

Identity providerでService Managedを選択したので、SFTPサーバにログインするユーザの作成を行います。
UsersにあるAdd userボタンを押し、ユーザの設定を行います。

ユーザ作成画面では、以下の情報を登録します。

  • User configuration
    • Username: SFTPユーザ名
    • Access: SFTPサーバー用のS3バケットへのアクセスを提供するロール
    • Policy: ユーザによるS3ディレクトリのアクセス制限を限定する("スコープダウン"と言います)ポリシー設定
    • Home directory: ユーザがアクセスする際に使用するS3バケットとディレクトリ
  • SSH public keys: ログインに使用するSSHパブリックキー
  • Tags: タグ

基本的にあまり難しい設定項目はないのですが、1点だけ、Accessのロール設定で引っ掛かりました。
結論を先に言うと、SFTPユーザに設定するロールには、AWS SFTPサービスに対するAssumeRoleアクションが割り当てられている必要がありました。このユーザのロールに設定されたアクションによって、SFTPサーバーはSFTPユーザーの信頼関係を継承し、その代わりにファイル操作を実行できるという仕掛けです。
詳細は下記ドキュメントに図入りで載っているのでご参照ください。

AWS SFTPサービスに対してAssumeRoleアクションが割り当てられたロールを新規に作成します。

一旦AWS SFTPの管理画面は置いといて、別画面からIAMコンソールを表示し、IAMロールの新規作成を行います。

ここでサービスとしてAWS SFTPが選択できればよいのですが、このブログを書いている時点ではサービスが選択肢にないので、とりあえずS3を選択し、後でAWS SFTPサービスと差し替えることにします。

今回はロールにAmazonS3FullAccessポリシーを適用し、名前を"AWSSftpS3FullAccess"としました。

ロール作成後、ロールの編集画面を呼び出し、信頼関係タブから信頼関係の編集ボタンを押し、AWS AssumeRoleアクションが割り当て先をAWS SFTP(transfer.amazonaws.com)に変更します。

変更が済んだら保存し、このロールをAWS SFTPのユーザ設定画面User configurationAccessに設定します。

その他の設定ですが、Policyは今回は話を簡単にするため設定しません。Noneを選択します。

それからSSH public keyの設定です。Identity providerでService Managedを選択した場合、鍵を使った認証となります。今回は手元にEC2インスタンスにSSHログインするためのプライベートキー(.pemファイル)を持っていたのでそれを使いました。以下ドキュメントを参考にして、ローカルのMac PCで、ssh-keygenコマンドを使用して、キーペアのパブリックキーを取得し、SSH public keyのフォームにコピー&ペーストします。

ここまで設定できたらSFTPユーザ周りの設定は完了です。いよいよSFTPクライアントからアクセスします。

WinSCPからS3にアクセスする

WinSCPを起動し、以下の設定で新しいサイトを登録します。

  • 転送プロトコル: SFTP
  • ホスト名: <メモしておいたSFTPサーバーエンドポイント名>
  • ポート番号: 22
  • ユーザ名: <SFTPユーザー名>

パスワードはプライベートキーを設定します。設定ボタンを押して、左側のツリーから[SSH]-[認証]と辿って、秘密鍵に.pemファイルを設定します。

WinSCPはPuTTY形式のみ対応するので、ここで変換を促すダイアログが表示されます。

指示に従って.pemを.ppk形式に保存すると、自動的に秘密鍵に.ppkファイルが設定されます。

後はログインするだけです。ログインを押します。

ログインに成功し、設定した通りにS3バケット(およびディレクトリ)がホームディレクトリとして表示されます。

おわりに

新サービスAWS Transfer for SFTPを設定し、WinSCPからログインするまでを体験しました。いかがでしょうか。個人的にはロールの設定を理解するのが少し難しかったですが、丁寧に書かれたドキュメントが既に公開されているので、それを読むことでちゃんと設定を済ませることができました。みなさんも是非試してみてください。

今回は一番シンプルな設定で試しましたが、他にも、

  • Route53のエイリアス機能を使う
  • 独自IDプロバイダーと組み合わせる
  • スコープダウンを有効にして、特定フォルダだけ公開する
  • CloudWatchにログを出力させて内容を見る

など、確認したいことはまだ沢山あるので、関連エントリは今後も引き続くと思われます。どうぞお楽しみに。

それでは、また。yokatsukiでした。

おまけ

AWS SFTPのサーバは停止(Stop)ができるのですが、削除(Delete)する場合に一点注意。

EC2インスタンスと異なり、Delete前には、SFTPユーザ情報を全て削除する必要があります。