如何將 AWS Transfer Family 伺服器設定為使用另一個 AWS 帳戶中的 Amazon S3 儲存貯體?
我希望帳戶 A 中的 AWS Transfer Family 伺服器能夠存取另一個帳戶中的 Amazon Simple Storage Service (Amazon S3) 儲存貯體,即帳戶 B。我想透過對跨帳戶存取儲存貯體來設定我的伺服器。
簡短說明
請遵循下列步驟:
- 在可存取儲存貯體的帳戶 A 中建立 AWS Identity 和 Access Management (IAM) 角色。
- 更新儲存貯體政策以授予帳戶 B 中 IAM 角色的跨帳戶存取權。
- 在帳戶 A 中建立通過 IAM 角色設定的 Transfer Family 伺服器使用者。
- 確認帳戶 A 中的 Transfer Family 伺服器使用者可以存取帳戶 B 中的 S3 儲存貯體。
- (選用) 將 S3 Object Ownership 設為帳戶 B 中偏好的儲存貯體擁有者。
**注意:**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
如果命令傳回主目錄,則您的伺服器使用者可以跨帳戶存取儲存貯體。
(選用) 將 S3 物件擁有權設定為帳戶 B 中偏好的儲存貯體擁有者
根據預設,Amazon S3 物件由上傳物件的 AWS 帳戶擁有。這表示根據預設,上傳至目的地儲存貯體的物件由來源伺服器帳戶所擁有。
若要啟用目標帳戶以自動擁有跨帳戶上傳的物件,請將目的地儲存貯體的 S3 物件擁有權設定為偏好的儲存貯體擁有者。執行此操作之後,透過 AWS Transfer Family 伺服器上傳的所有新物件都會自動歸目的地儲存貯體的帳戶擁有。
相關資訊
建立使用者 (AWS Transfer Family 使用者指南)
新增使用者 (AWS Transfer Family 使用者指南)
相關內容
- 已提問 12 天前lg...
- 已提問 4 個月前lg...
- 已提問 2 年前lg...
- AWS 官方已更新 3 年前
- AWS 官方已更新 7 個月前