用 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 上填入的是公鑰,登入時則使用密鑰。


