みな様こんにちは。
BriswellのSonと申します。
最近、帳票や画像などのファイルを読む・保存するために、SFTPサーバーの設定してみました。
SFTPサーバーは外部ユーザーがアクセスできるので、承認されていないものが公開されることを避けるために、適切な権限を与える必要があります。
AWSクラウドではSFTPサーバーを簡易的に管理するために、[Transfer Family]というサービスを提供しています。
添付した画像を参照すれば、大体な流れがわかると思いますが、詳しい設定方法を追記します。
I. S3バケットの作成
ファイルを保存するため、S3バケットを1つ作成する必要があります。
バケット名を bw-test-transferfamily
と設定します。
上記の画像により、バケットの作成が完了しました。
II. Transfer Familyの作成
①. ポリシーの作成
ユーザーを認証するために、最初にIAMサービス側でポリシーを作成しないといけないです。
作成方法は下記の通りです。
[アクセス許可を指定] 画面で [ポリシーエディタ] 項目でJSONを選び、下記のルール内容を入力する。
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::bw-test-transferfamily" ], "Effect": "Allow", "Sid": "CommonS3Role" }, { "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObject", "s3:DeleteObjectVersion", "s3:GetObjectVersion", "s3:GetObjectACL", "s3:PutObjectACL" ], "Resource": [ "arn:aws:s3:::bw-test-transferfamily/*" ], "Effect": "Allow", "Sid": "ReadWriteS3Role" } ] }
次の画面は [確認して作成] です。
[ポリシー名] 項目で bw-user-transferfamily-policy
を入力し、[ポリシーの作成] ボタンを押下する。
上記の画像により、ポリシーの作成が完了しました。
②. [Transfer Family] のユーザーのロール作成
ユーザーのアクションを管理するために、ロールを作成する必要があります。
詳しい作成方法は下記の通りです。
[信頼されたエンティティを選択] 画面では [信頼されたエンティティタイプ] を [AWS のサービス] に選択し、[ユースケース] 項目で [Transfer] を選択します。
選択後、[次へ] ボタンを押下する。
[許可を追加] 画面で bw-user-transferfamily-policy
のポリシーを検索する。
Hitしたレコードから該当のレコードにチェックを入れて、[次へ] ボタンをクリックする。
[名前、確認、および作成] 画面では、[ロール名] で bw-user-transferfamily-role
と入力する。
入力後、[ロールを作成] ボタンをクリックする。
上記の画像により、ロールの作成が完了しました。
③. [Transfer Family] 作成
最初に [AWS Transfer Family] 画面で [サーバーを作成] ボタンを押下します。
押下後、[プロトコルを選択] 画面に移動します。
SFTPメソッドでバケットへファイルをアップロードしたいので、[SFTP (SSH ファイル転送プロトコル) - Secure Shell 経由のファイル転送] を選択し、[次へ] ボタンをクリックする。
[ID プロバイダーを選択] 画面で [サービスマネージド] を選択します。
選択後、[次へ] ボタンを押下する。
[エンドポイントを選択] 画面でパブリックでアクセスしたいので、[パブリックアクセス可能] を選択します。
選択後、[カスタムホスト名]は [なし] に選択してもいいです。[次へ] ボタンを押下する。
[ドメインを選択] 画面でS3へ接続したいので、[Amazon S3] を選択します。
選択後、[次へ] ボタンを押下する。
[追加の詳細を設定] 画面でデフォルトのままにして、[次へ] ボタンを押下します。
確認と作成の画面で詳細な設定を確認し、OKだった場合、[作成] ボタンをクリックします。
注意:作成したら、1 時間あたり 0.30USDの料金がかかってしまうので、調査だけの場合は終わり次第削除したほうがいいです。
上記の画像により、[Transfer Family] の作成が完了しました。
④. [Transfer Family] のユーザー作成
ユーザーを作成するために、[Transfer Familyサーバー管理] 画面で先程作成したサーバーIDを押下する。
[詳細なサーバー] 画面に移動し、[ユーザー] 設定のグループで [ユーザーを追加] ボタンを押下する。
[ユーザーを追加] 画面で [ユーザー名] 項目を bw-user-transferfamily
と入力し、[ロール] 項目で bw-user-transferfamily-role
を選択し、ホームディレクトリで bw-test-transferfamily
を選びます。
bw-test-transferfamily/csv
のフォルダにファイルをアップしたいので、[オプションのフォルダ] 項目で csv
を入力し、[制限付き] のチェックを入れます。
最後に追加ボタンを押下する。
上記の画像により、ユーザーの作成が完了しました。
⑤. ユーザーの [SSH パブリックキー] 追加
SSHキーを作成しておくために、自分のパソコンのTerminalで下記のコマンドを実行する。
ssh-keygen -t rsa -C "bw-test-transferfamily" -f ~/.ssh/bw-test-transferfamily cat ~/.ssh/bw-test-transferfamily.pub
ssh-keygen -t rsa -C "bw-test-transferfamily" -f ~/.ssh/bw-test-transferfamily
:[プライベートキー] と [パブリックキー] を作成するため。cat ~/.ssh/bw-test-transferfamily.pub
:[パブリックキー] 内容を取得し、[Transfer Family] のユーザーのSSHキー設計部分に追加するため。
SSHキー作成方法は下記の画像の通りです。
SSHキーの作成が完了したら、先程作成した [Transfer Family] のユーザーを押下して、[明細ユーザー] 画面に移動します。
[SSH パブリックキー] 設定のグループで [SSH パブリックキーを追加] ボタンを押下する。
[キーを追加] 画面の [SSH パブリックキー] 項目で作成したばかりキー(~/.ssh/bw-test-transferfamily.pub
ファイル内容)を入力後、[キーを追加] ボタンを押下する。
上記の画像により、SSH パブリックキーの追加が完了しました。
III. テスト
今回S3へファイルをアップロードするために、Cyberduckを使います。
設定方法は下記の画像の通りです。
Connection型が、[SFTP]
Sever: Transfer Familyサーバのエンドポイントを参照
Username: Transfer Familyサーバのユーザー名
SSH Private Key: 自分のパソコンでSSHキーを作成した時に、このファイルを作成しました。
必須項目の入力が完了したら、[Connect] ボタンを押下する。
問題がなければS3の bw-test-transferfamily/csv
にあるファイルが表示されます。
上記の画像により、CyberduckアプリでS3へファイルをアップロードできました。
最後に
今回は、CyberduckなどからS3にSFTPの方法でアップロードするために、SFTPサーバの構成について共有しました。
最後まで読んでいただきありがとうございました。
疑問があれば、コメントをしてください。