傳統在架設 SFTP Server 的時候
我們需要先建立一個 VM
然後再建立使用者
最後則是限制使用者可存取的權限
架設往往都是最簡單的
然後我們就會發現我們需要對硬碟空間做監控
擔心不小心會達到空間上限
除此之外還要定期幫主機上 Patch
這樣的機制到了雲端
難道還是需要架設 EC2 來達成嗎?
其實 AWS 提供更簡單聰明的方式來達成
那就是使用 Transfer family 來達到
透過 Transfer family 我們可以快速建立檔案傳輸的伺服器
並透過目的指向 S3 達到按需付費
實現可靠度高的檔案傳輸機制並且大大減低維護成本
在 S3 頁面中建立儲存體
使用預設設定即可
物件擁有權選擇ACL 已停用 (建議)
「封鎖公開存取」設定選擇封鎖所有公開存取權
儲存體的名稱記得可鑑別度高一些以避免重複
儲存體政策之後再回來編輯也可以
因為裡面的 IAM Role 的 ARN 以及 VPC 端點
都是需要等到相關資源建立後才能取得
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"AWS": "{IAM Role ARN}"
},
"Action": [
"s3:PutObjectAcl",
"s3:PutObject",
"s3:ListBucket",
"s3:GetObjectVersion",
"s3:GetObject",
"s3:GetBucketLocation",
"s3:DeleteObjectVersion",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::{S3 Bucket Name}/*",
"arn:aws:s3:::{{S3 Bucket Name}}"
],
"Condition": {
"StringNotEquals": {
"aws:sourceVpce": "{VPC 端點}"
}
}
}
]
}
進到 CloudWatch 的頁面中
在左邊側欄日誌
中選擇日誌群組
並點按建立日誌群組
擔心日誌保留過久的可以設定保存天數為 90 天
或是保持原本設定勇不過期也可以
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "transfer.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
關聯至 AWS 受管政策 AWSTransferLoggingAccess
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "transfer.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
建立一個自訂政策並關聯到剛剛我們建立的角色
{
"Statement": [
{
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::{s3 bucket name}"
],
"Sid": "AllowListingOfUserFolder"
},
{
"Action": [
"s3:*"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::{s3 bucket name}/*",
"Sid": "HomeDirObjectAccess"
}
],
"Version": "2012-10-17"
}
通訊協定的部分選擇 SFTP
FTP 和 FTPS 的驗證方式不同
會需要使用到 AD 相關的設定
而 SFTP 相對獨立
身分提供者選擇管理的服務
由我們服務自行管理
端點的部分如果需要從 EC2 連
則需要選擇寄存於 VPC
否則選擇公開於 SFTP 並用 Security Group 控管即可
目的地選擇 S3
在日誌群組中選擇剛剛建立好的日誌群組
建立完成後複製端點詳細資訊
的端點
作為連線使用
可以使用 PuttyKeyGen 建立
填入使用者名稱
、選擇稍早建立的 IAM 角色、主目錄則選擇 S3 Bucket
下方SSH 公開金鑰
則填入剛剛建立的 Public Key
使用 WinSCP 進行連線測試