Global outage event
If you're experiencing issues with your AWS services, then please refer to the AWS Health Dashboard. You can find the overall status of ongoing outages, the health of AWS services, and the latest updates from AWS engineers.
如何將 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 使用者指南)
- 語言
- 中文 (繁體)

相關內容
- 已提問 3 年前