🖥

AWS Transfer Family で SFTPサーバーを起動してコンソールから接続する例

2024/07/10に公開

STEP 1. AWS S3 のバケットを作成しておく

SFTPサーバーのファイル保存先は選択できるが、デフォルトはS3なので、まずはバケットを作成しておく

この例ではバケット名を this-is-the-example-bucket とする

CleanShot 2024-07-05 at 13 32 10@2x

バケットのパブリックアクセスは全てブロックしたままで良い

STEP 2. SFTPサーバーを作成する

CleanShot 2024-07-05 at 13 22 33@2x

(途中にいくつかの画面が表示されるが、デフォルトのまま進む)

デフォルトのままS3を選択する

CleanShot 2024-07-05 at 13 23 52@2x

サーバー作成時にはまだ具体的なS3バケットは選択できない

STEP 3. ロールを作成する

SFTPユーザが利用するロールを作成する

ユースケースから選ぶと簡単だが、権限が広いので実利用の場合は注意が必要そう

CleanShot 2024-07-05 at 13 59 14@2x

ポリシーの選択

いろんなポリシーの候補が表示されるが、以下を選んでおく

ここではテストのため広い権限のポリシーを指定するが、実運用ではもっと権限を絞るべし

  • AmazonS3FullAccess
  • AWSTransferFullAccess

信頼関係

ユースケースからのロール作成では、以下の信頼関係も最初から設定されている

サービスに使用されるすべてのロールは、transfer.amazonaws.com を信頼する必要があります。

https://docs.aws.amazon.com/ja_jp/transfer/latest/userguide/requirements-roles.html#role-create-procedure

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "transfer.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

STEP 4 . SFTPユーザーの作成

AWSユーザーとは全く別の、SFTPサーバーへの接続用ユーザを作成する

local でユーザ用の鍵を作成する

鍵の作成

ssh-keygen -f sftp_example -N ''

生成された公開鍵のファイル内容をコピーするなどして控えておく

cat sftp_example.pub

AWSでサーバーのユーザーを登録する

基本項目

  • ここでS3バケットを選ぶ項目がある
  • さっき作ったロールを指定する

CleanShot 2024-07-05 at 14 04 02@2x

公開鍵の登録

localで作った公開鍵の中身を入力する

CleanShot 2024-07-05 at 13 50 57@2x

STEP 5. SFTPサーバーに接続する

こんなコマンドで接続する

localで試しても良いし、sftpコマンドが実行できる環境であればどこからでも良い

sftp -v -i <作成した秘密鍵のパス> <SFTPユーザー名>@<SFTPサーバーのエンドポイント>
  • 「作成した秘密鍵のパス」は実行環境のlocalでのファイルパス
  • 「SFTPユーザー名」はさっき作成したユーザ名
  • 「SFTPサーバーのエンドポイント」はAWS上で確認できる

具体例

sftp -v  -i ./sftp_example example-sftp-user@*****.server.transfer.*********.amazonaws.com

SFTPコマンド

接続できたらSFTPコマンドを試してみる

カレントディレクトリを表示する

sftp> pwd
Remote working directory: /this-is-the-example-bucket/example-sftp-user

接続元 (local)のファイルをSFTPサーバーに転送する

sftp> put example.txt

転送されたファイルの確認をする

sftp> ls
a.txt

終了する

sftp>quit

エラー対策

「sftpサーバーに接続は出来るが、権限エラーでコマンドが実行できない」という場合はロールの権限、もしくは信頼関係の設定が抜けていると思われるため、上記の手順通りの設定にする

sftp>ls
remote readdir("/****"): Permission denied

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

プロフィール・経歴

https://github.com/YumaInaura/YumaInaura

公開日時

2024-07-05

https://qiita.com/YumaInaura/items/7ed3d844e89af9c26e31

Discussion