構成
前回、AWS Transfer Family - S3 + サービスマネージドの構成で試してみたが、AWS Transfer Family - EFS + サービスマネージドの構成で検証してみようと思う。
設定
EFS
EFSの作成
IAM
Amazon Transfer FamilyがEFSにアクセスするためのIAMロールとポリシーを作成しておきます。
2種類のIAMロールとポリシーを作成しておいて下さい。信頼関係はいずれも同じです。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "transfer.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
rootファイルシステムアクセス権を付与したポリシー
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "RootFileSystemAccess",
"Effect": "Allow",
"Action": [
"elasticfilesystem:ClientRootAccess",
"elasticfilesystem:ClientMount",
"elasticfilesystem:ClientWrite"
],
"Resource": "arn:aws:elasticfilesystem:region:account-id:file-system/file-system-id"
}
]
}
ユーザーファイルシステムアクセス権のみを付与したポリシー
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "UserFileSystemAccess",
"Effect": "Allow",
"Action": [
"elasticfilesystem:ClientMount",
"elasticfilesystem:ClientWrite"
],
"Resource": "arn:aws:elasticfilesystem:region:account-id:file-system/file-system-id"
}
]
}
Amazon Transfer Family
サーバー
サーバーは基本的には、保存先を「Amazon EFS」にするところ以外は前回作成したS3のパターンと同じです。
ユーザーの追加
ユーザーは今回検証のため3つ準備しておきます。
user1 | user2 | user3 | |
---|---|---|---|
ユーザーID | 0 | 9999 | 1111 |
グループID | 0 | 9999 | 9999 |
ロール | rootファイルシステムアクセス権を付与したポリシー | ユーザーファイルシステムアクセス権のみを付与したポリシー | ユーザーファイルシステムアクセス権のみを付与したポリシー |
ホームディレクトリ | root/ | root/transfer | root/transfer |
動作確認
user1での作業
user1はrootユーザーを使用してフォルダーを作成し、残りのユーザーにPOSIX ID所有者を割り当てる管理用です。
# user1で接続
sftp -i sftp user1@s-XXX.server.transfer.ap-northeast-1.amazonaws.com
Transfer family connection test
Connected to XXX.server.transfer.ap-northeast-1.amazonaws.com.
# 現在のディレクトリを確認
sftp> pwd
Remote working directory: /fs-XXX
# transferディレクトリを作成
sftp> mkdir transfer
sftp> ls -l
drwxrwxrwx 2 0 0 6144 Oct 28 08:11 transfer
# uidとgidを9999に変更し、パーミッションを755に設定
sftp> chown 9999 transfer
Changing owner on /fs-XXX/transfer
sftp> chgrp 9999 transfer
Changing group on /fs-XXX/transfer
sftp> chmod 755 transfer
Changing mode on /fs-XXX/transfer
sftp> ls -l
drwxr-xr-x 2 9999 9999 6144 Oct 28 09:14 transfer
user2での接続確認
user2はtransferディレクトリに書き込み権限があるので、put,getどちらも成功するはずです。
sftp -i sftp user2@s-XXX.server.transfer.ap-northeast-1.amazonaws.com
Transfer family connection test
Connected to s-XXX.server.transfer.ap-northeast-1.amazonaws.com.
# 現在のディレクトリを確認
sftp> pwd
Remote working directory: /fs-XXX/transfer
# put
sftp> put test.txt
Uploading test.txt to /fs-XXX/transfer/test.txt
test.txt
sftp> ls -l
-rw-r--r-- 1 9999 9999 0 Oct 28 08:15 test.txt
# get
sftp> get test.txt
Fetching /fs-XXX/transfer/test.txt to test.txt
user3での接続確認
user3はtransferディレクトリに読み取り権限はありますが、書き込み権限はないので、putは失敗し、getは成功するはずです。
sftp -i sftp user3@s-XXX.server.transfer.ap-northeast-1.amazonaws.com
Transfer family connection test
Connected to s-XXX.server.transfer.ap-northeast-1.amazonaws.com.
# 現在のディレクトリを確認
sftp> pwd
Remote working directory: /fs-XXX/transfer
# put
sftp> put test.txt
Uploading test.txt to /fs-XXX/transfer/test.txt
dest open "/fs-xxx/transfer/test.txt": Permission denied
# get
sftp> get test.txt
Fetching /fs-XXX/transfer/test.txt to test.txt
参考リンク