如何將 AWS Transfer Family 伺服器設定為使用另一個 AWS 帳戶中的 Amazon S3 儲存貯體?
我希望帳戶 A 中的 AWS Transfer Family 伺服器能夠存取另一個帳戶中的 Amazon Simple Storage Service (Amazon S3) 儲存貯體,即帳戶 B。我想透過對跨帳戶存取儲存貯體來設定我的伺服器。
簡短說明
請依照下列步驟執行:
- 在帳戶 A 中建立可存取儲存貯體的 AWS Identity and Access Management (IAM) 角色。
- 更新儲存貯體政策,授予帳戶 B 中 IAM 角色的跨帳戶存取權。
- 在帳戶 A 中建立已設定使用 IAM 角色的 Transfer Family 伺服器使用者。
- 確認帳戶 A 中的 Transfer Family 伺服器使用者可以存取帳戶 B 中的 S3 儲存貯體。
- (選用) 在帳戶 B 中將 S3 物件擁有權設定為偏好的儲存貯體擁有者。
**注意:**AWS Transfer Family 主控台只會顯示相同帳戶中的 Amazon S3 儲存貯體。若要讓您的 Transfer Family 伺服器搭配另一個帳戶中的儲存貯體使用,您必須使用 AWS Command Line Interface (AWS CLI) 或 AWS SDK。
解決方法
在帳戶 A 中建立可存取儲存貯體的 IAM 角色
為您的伺服器使用者建立 IAM 角色。對於角色的 IAM 政策,請使用以下內容:
**注意:**請將 destination-DOC-EXAMPLE-BUCKET 替換為您要讓伺服器存取的 S3 儲存貯體名稱。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowListingBucketReadandWriteandDelete", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:PutObjectAcl", "s3:GetObject", "s3:DeleteObjectVersion", "s3:DeleteObject", "s3:GetObjectVersion", "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET/*", "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET" ] } ] }
**注意:**Transfer Family 需要 s3:PutObjectAcl 權限,才能進行跨帳戶 S3 上傳。
建立 IAM 角色後,請執行 get-role 命令以取得角色 ID,如下所示:
$ aws iam get-role --role-name "ROLE_NAME"
您需要在下一個步驟中使用此角色 ID。
更新儲存貯體政策,授予帳戶 B 中 IAM 角色的跨帳戶存取權
修改目的地儲存貯體的政策,以授予您所建立 IAM 角色的存取權。您可以使用類似以下的儲存貯體政策:
**注意:**請將 arn:aws:iam::123456789012:root 替換為伺服器所屬帳戶的 Amazon Resource Name (ARN)。請將 destination-DOC-EXAMPLE-BUCKET 替換為儲存貯體名稱。請將 AROA1234567890 替換為您所建立 IAM 角色的角色 ID。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "BucketPolicyForTransferFamily", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Action": [ "s3:PutObject", "s3:PutObjectAcl", "s3:GetObject", "s3:DeleteObjectVersion", "s3:DeleteObject", "s3:GetObjectVersion", "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET", "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET/*" ], "Condition": { "StringLike": { "aws:userId": "AROA1234567890:*" } } } ] }
此範例政策中的「條件」元素為選用。若要僅授予您指定的 IAM 角色儲存貯體存取權,請包含「條件」元素。或者,移除該元素,以授予伺服器所屬帳戶中所有 IAM 角色與使用者的存取權。
在帳戶 A 中建立使用 IAM 角色設定的 Transfer Family 伺服器使用者
1. 為您的 Transfer Family 伺服器產生 SSH 金鑰。
2. 取得您伺服器的伺服器 ID。
3. 使用 AWS CLI 執行 create-user 命令。在 --server-id,請輸入您的伺服器 ID。在 --role,請輸入您所建立 IAM 角色的 ARN。在 --ssh-public-key-body,請輸入您在建立 SSH 金鑰時所產生的 .pub 檔案內容。
$ aws transfer create-user --user-name "MY_SERVER_USER_NAME" --server-id "MY_SERVER_ID" --role "MY_IAM_ROLE_ARN" --home-directory "/destination-DOC-EXAMPLE-BUCKET/MY_SERVER_USER_NAME" --ssh-public-key-body "CONTENTS_OF_MY_SSH_.PUB_FILE"
**注意:**如果您在執行 AWS CLI 命令時收到錯誤訊息,請確定您使用的是最新版本的 AWS CLI。
此命令會傳回伺服器 ID 與您所建立的使用者:
{ "ServerId": "MY_SERVER_ID", "UserName": "MY_SERVER_USER_NAME" }
**重要:**若要將伺服器使用者的存取權限制為僅限其主目錄,請在 IAM 中建立縮減範圍政策。接著,編輯伺服器使用者的屬性,以套用您所建立的縮減範圍政策。
確認帳戶 A 中的 Transfer Family 伺服器使用者可以存取帳戶 B 中的儲存貯體
1. 以您所建立的使用者身分連線至您的伺服器。例如,下列 OpenSSH 命令會連線至 SFTP 伺服器:
$ sftp -i myserveruser MY_SERVER_USER_NAME@MY_SERVER_ID.server.transfer.us-east-1.amazonaws.com
2. 請列出儲存貯體的主目錄作為測試。若您使用 OpenSSH,請執行以下命令:
$ ls
若命令成功傳回主目錄,則表示您的伺服器使用者具有儲存貯體的跨帳戶存取權。
(選用) 在帳戶 B 中將 S3 物件擁有權設定為偏好的儲存貯體擁有者
根據預設,Amazon S3 物件由上傳物件的 AWS 帳戶擁有。這表示上傳至目的地儲存貯體的物件,預設會由來源伺服器的帳戶所擁有。
若要讓目的地帳戶自動擁有跨帳戶上傳的物件,請將目的地儲存貯體的 S3 物件擁有權設定為偏好的儲存貯體擁有者。完成此設定後,所有透過 AWS Transfer Family 伺服器上傳的新物件,將自動由目的地儲存貯體的帳戶所擁有。
相關資訊
CreateUser (AWS Transfer Family 使用者指南)
新增使用者 (AWS Transfer Family 使用者指南)
- 語言
- 中文 (繁體)

相關內容
- 已提問 2 年前
- 已提問 3 年前