AWS Transfer Family で SFTPサーバーを起動してコンソールから接続する例
STEP 1. AWS S3 のバケットを作成しておく
SFTPサーバーのファイル保存先は選択できるが、デフォルトはS3なので、まずはバケットを作成しておく
この例ではバケット名を this-is-the-example-bucket
とする
バケットのパブリックアクセスは全てブロックしたままで良い
STEP 2. SFTPサーバーを作成する
(途中にいくつかの画面が表示されるが、デフォルトのまま進む)
デフォルトのままS3を選択する
サーバー作成時にはまだ具体的なS3バケットは選択できない
STEP 3. ロールを作成する
SFTPユーザが利用するロールを作成する
ユースケースから選ぶと簡単だが、権限が広いので実利用の場合は注意が必要そう
ポリシーの選択
いろんなポリシーの候補が表示されるが、以下を選んでおく
ここではテストのため広い権限のポリシーを指定するが、実運用ではもっと権限を絞るべし
- AmazonS3FullAccess
- AWSTransferFullAccess
信頼関係
ユースケースからのロール作成では、以下の信頼関係も最初から設定されている
サービスに使用されるすべてのロールは、transfer.amazonaws.com を信頼する必要があります。
{
"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バケットを選ぶ項目がある
- さっき作ったロールを指定する
公開鍵の登録
localで作った公開鍵の中身を入力する
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オープンチャットもご利用ください。
プロフィール・経歴
公開日時
2024-07-05
Discussion