用 AWS Transfer + S3 架設 FTP
2021-06-26
文章目錄
最近在專案執行中過程,不免遇到一些老舊系統或開發團隊習慣用 FTP 來傳送資料,因此在千百般不願意下,研究了從 AWS 上架設 FTP 的方式。由於 AWS 官方提供的文件已經算是蠻詳細了,所以本篇文章著重於官方文件沒有交代的細節,減少試誤過程花的時間,建議先讀完官方文件後,在參考本篇文章所補充的細節即可。
AWS 官方文件
- 利用 AWS Transfer 建立 FTP: https://docs.aws.amazon.com/zh_tw/transfer/latest/userguide/getting-started-server.html
- 為你的 FTP 建立登入帳號: https://docs.aws.amazon.com/zh_tw/transfer/latest/userguide/getting-started-add-user.html
- FTP 上傳檔案後,如何被動收到通知: https://docs.aws.amazon.com/AmazonS3/latest/userguide/NotificationHowTo.html
建立登入帳號注意事項
- IAM role 需要啟用對於 S3 和 Transfer 的權限,確保你的 IAM role 的 Trust Relationships 有以下 policy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "sts:AssumeRole" }, { "Effect": "Allow", "Principal": { "Service": "transfer.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
編輯位置
- 除了 Trust Relationships 之外, Permissions 也要確保有以下 policy:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowListingOfUserFolder", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::BUCKET_NAME" ] }, { "Sid": "HomeDirObjectAccess", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObjectVersion", "s3:DeleteObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::BUCKET_NAME/*" } ] }
其中 BUCKET_NAME 是你的 S3 bucket。
- FTP 登入帳號是以 ssh key 的方式登入,無法透過帳號密碼,所以要先產生 ssh key ,產生後會有一組密鑰、一組公鑰,建立使用者時要在 AWS console 上填入的是公鑰,登入時則使用密鑰。