AWS Transfer for SFTPの権限まわりを確認してみた

Created
Aug 7, 2023 6:36 AM
Tags
AWS Transfer
Editor
Tomoya Kabe
image

チーフエンジニアの加辺です。

re:Invent 2018で発表された新規サービスの1つにSFTPサービスがあります。

古くから利用されている(けど運用はつらい)サービスのひとつで、これがmanagedで提供されるのは非常によいことなので検証してみました。

お題(今回の要件)

複数の協業先からSFTPでファイルをアップロード/ダウンロードしてもらう状況を考えましょう。

それぞれの協業先同士は存在すら見せたくないですし、ましてやファイルの中身が見えるようなことがあってはいけません。

  • 全ユーザが同一のS3 bucket内で操作する
  • ユーザごとに別々のホームディレクトリをもつ
  • ユーザのホームディレクトリ以下は自由に操作できる
  • 他ユーザのホームディレクトリは見えない

実装

SFTP側の設定

SFTPのサービス構築自体は別段難しいところはないので簡単に書き、後ろに肝心の権限設定まわりを書いていきます。

ユーザはSFTPサービスの管理とします(Directory Serviceではない)。ユーザaliceを作成し、公開鍵を設定しておきます。

登場する権限オブジェクト

命名は説明の都合で適当に決めています。

完成系のRole/Policyを生成するmiamのコードはgistに上げておきました

sftp-logging (role)

SFTPサービスに割り当てます(Logging Role)。

CloudWatchLogsFullAccessのようなCloudwatch Logsにログを書き出せる権限を付与します。

sftp-s3 (role)

SFTPユーザに割り当てます(User Configuration → Access)

付与する権限はbucketに対するs3:ListBucket, s3:GetBucketLocationと、bucket内全体に対するs3:PutObject, s3:GetObject, s3:DeleteObjectです。

sftp-alice (managed policy)

SFTPユーザに割り当てます(User Configuration → Policy)

ここでユーザ個別となる権限を記述していきます。ホームフォルダ以下へのs3:ListBucketおよびオブジェクト操作の権限を付与します。

踏んだ罠

sftp-aliceに十分な権限があるし、ログインした時のCloudwatch Logsにはその権限がちゃんと出力されているからsftp-s3には何の権限もなくても動くはず→動かない

sftp-s3に権限があって初めてsftp-aliceの権限が効力を持つようになっているらしいです。

ちなみに敢えてbucketの一覧を見せる権限をつけたい時はsftp-alice側にs3:ListAllMyBucketsを付与する必要がありました(sftp-s3に付与しても ls / が失敗しました)

所感

sftp-s3 roleに割り当てる権限とsftp-aliceに割り当てる権限の位置付けが当初よくわからず、所望の動きをさせるまでに大分時間を使ってしまいました。

sftp-s3のポリシーには変数を入れることはできませんが、sftp-aliceのmanaged policyにはAWS Transferでのみ使える変数を含めることができます(詳細は公式ドキュメント参照)。

この変数をうまく利用してやることで、今回sftp-aliceと命名した割には"alice"に依存することなく記述できています。

まとめ

AWS Transfer for SFTPの権限まわりについてまとめてみました。

Role 2つとManaged Policy 1つ、それぞれに付与すべき権限についてまとめました。

ここまでのリソース同士の関係を図にしておきました。参考にどうぞ

image

おまけ

  • テスト用と思いながらSFTPを起動したままにしておくと思ったよりお金かかります。
    • 実運用を考えると管理コスト含めて考えれば高くはないです
      • AWS Transfer for SFTPは $0.30/hour
      • EC2 (m5.largeを2台構成)は $0.124*2/hour = $0.246/hour
      • EC2 (c5.largeを2台構成)は $0.107*2/hour = $0.214/hour
  • さすがSFTPだけあって世界中からSSHの攻撃に晒されます(Cloudwatch Logsに大量のログが…)。
    • サポートに問い合わせましたが、今のところ(2019/02/20現在)防ぐ手段もログを抑制する設定項目もないそうです。