概要
外部ユーザー向けに、SFTPサーバーを立てる要件があり、AWS Transfer Familyで立てられるようだったので、構築をしてみました。
S3バケットを使用したものになります。
こちらはユーザー認証にユーザーIDとSSHのパブリックキーを使用します。
SFTPでユーザーIDとパスワードの認証を使用する場合は、こちらの記事をご確認ください。
公式の入門チュートリアル:
https://docs.aws.amazon.com/ja_jp/transfer/latest/userguide/getting-started.html
それにしても、料金が高いんですね(後で知りました)
サーバーが停止含めて立ってるだけで月 $216
ちょっとした使用程度だと、ちょっと通らない金額だなーと思いました。
https://dev.classmethod.jp/articles/202210-aws-transfer-family-sftp/
https://aws.amazon.com/jp/aws-transfer-family/pricing/
前提
- AWSコンソールに接続出来る
- 各サービスの作成、編集が出来る権限を持っている
事前準備
S3バケットの作成
S3にバケットを作成します。
今回は sftp-server-bucket-atf
を作成しました。
バケット名以外はすべてデフォルト設定のままです。
ロールの作成
SFTPの接続ユーザーに操作を許可するためのロールが必要になるため事前に作成しておきます
ポリシーを作成
ロールに紐つけるポリシーを作成します
- IAMのポリシーから「ポリシーの作成」を選択します
- 「アクセス許可を指定」:「JSON」での編集モードにします
- 以下の内容を記載します
- Resourceの
バケット名
は各自が作成したバケット名に変更してください。
- Resourceの
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject",
"s3:GetObjectVersion"
],
"Resource": [
"arn:aws:s3:::sftp-server-bucket-atf",
"arn:aws:s3:::sftp-server-bucket-atf/*"
]
}
]
}
- すべての操作を許可したい場合
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::sftp-server-bucket-atf",
"arn:aws:s3:::sftp-server-bucket-atf/*"
]
}
]
}
ロールを作成
- IAMのロールから「ロールの作成」を選択します
- 「信頼されたエンティティを選択」:
- 「許可を追加」:先程作成したポリシー
SftpS3UserAccessPolicy
を選択し「次へ」
- 「名前、確認、および作成」:ロール名などを入力
- 「ロールを作成」する
構築
SFTPサーバーを作成する
AWS Transfer Family サービスにアクセスします。
- サーバーから、「サーバー作成」を選択
- 「プロトコルを選択」:「SFTP」のみチェックの状態で「次へ」
- 「IDプロバイダーの選択」:「サービスマネージド」を選択して「次へ」
- 「エンドポイントを選択」:外部公開するので「パブリックアクセス可能」を選択して「次へ」
- 「ドメインを選択」:データの保存先はS3なので「Amazon S3」を選択して「次へ」
- 「追加の詳細を設定」:デフォルトのまま「次へ」
- 「確認と作成」:内容を確認して「作成」をする
- サーバーページで作成が開始されます
ユーザーの追加
- AWS Transfer Family作成したサーバーの詳細に入ります。
- 「ユーザーを追加」を選択します
- 「ユーザーを追加」:必要な情報を入力・選択します
- 「ユーザー設定」:
- 「SSH パブリックキー」:
- ユーザーのSSHパブリックキーを記載します
- パブリックキーの作成は下記URLを参照してください
https://docs.aws.amazon.com/ja_jp/transfer/latest/userguide/key-management.html#sshkeygen
- 「タグ」:任意
- 「追加」する
- ユーザーが追加されます
接続・確認
接続はSFTP接続が出来るクライアント等を使用して確認してください。
例としてCyberduckでの設定を記載します
-
サーバー(エンドポイント):サーバーの詳細ページのエンドポイント
-
ユーザー名:作成したユーザー
sftp-user01
-
接続しファイルをアップロード
以上です。