如何使用僅限於 VPC 的 S3 存取點來存取另一個帳戶中的儲存貯體?
我在不同的 AWS 帳戶中有一個 AWS Identity and Access Management (IAM) 實體和儲存貯體。我想要使用僅限於 Amazon Virtual Private Cloud (Amazon VPC) 的 Amazon Simple Storage Service (Amazon S3) 存取點,授予 IAM 實體對儲存貯體的跨帳戶存取權。
解決方案
若要使用僅限於 Amazon VPC 的 S3 存取點授予 AWS 帳戶 (帳戶 A) 中的 IAM 角色或使用者存取另一個 AWS 帳戶 (帳戶 B) 中 Amazon S3 儲存貯體的存取權,請執行下列操作:
- 建立 Amazon S3 存取點,並將其連接至帳戶 B 中的儲存貯體。
- 在帳戶 A 中建立 Amazon S3 VPC 閘道端點。
- 連接存取點、儲存貯體和 IAM 政策。
建立 Amazon S3 存取點,並將其連接至帳戶 B 中的儲存貯體
- 開啟 Amazon S3 主控台。
- 在導覽窗格中,選擇 Access Points (存取點)。
- 選擇 Create access point (建立存取點)。
- 針對 Access point name (存取點名稱),輸入存取點的名稱。如需詳細資訊,請參閱命名 Amazon S3 存取點的規則。
- 針對 Bucket name (儲存貯體名稱),輸入您要連接存取點的帳戶 B 中的儲存貯體名稱。
- 針對 Network Origin (網路來源),選擇 Virtual Private Cloud (VPC) (虛擬私有雲端 (VPC))。
- 針對 VPC ID,輸入第一個 AWS 帳戶 (帳戶 A) 中的 VPC ID。
- 在 Block Public Access settings for this Access Point (封鎖此存取點的公有存取設定) 下方,選擇您要套用至存取點的封鎖公有存取設定。
注意:建立存取點後,Amazon S3 目前不支援變更存取點的區塊公有存取設定。 - 將 Access Point policy (存取點政策) 保留空白。
- 選擇 Create access point (建立存取點)。
在帳戶 A 中建立 Amazon S3 VPC 閘道端點
在與要授予跨帳戶存取權的儲存貯體相同區域的初始 AWS 帳戶 (帳戶 A) 中,建立 S3 Gateway VPC 端點。
- 開啟 Amazon VPC 主控台。
- 在導覽窗格中,選擇 Endpoints (端點)。
- 選擇 Create endpoint (建立端點)。
- 針對 Service category (服務類別),選擇 AWS services (AWS 服務)。
- 針對 Services (服務),新增篩選器 Type: Gateway (類型:閘道),然後選取用於建立存取點的相同區域。
- 針對 VPC,選擇用於建立存取點的相同 VPC。
- 針對 Route tables (路由表),選擇端點要使用的路由表。
- 選擇 Full access (完整存取) 政策。或者,選擇 Custom (自訂),並確認政策允許必要的 S3 動作。
注意:閘道端點不允許從其他 AWS 區域存取。以下是允許所有 S3 動作存取所有儲存貯體的 VPC 端點政策範例:
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:*"
}]
}
連接存取點、儲存貯體和 IAM 政策
若要允許初始 AWS 帳戶 (帳戶 A) IAM 實體透過存取點,跨帳戶存取另一個 AWS 帳戶的 (帳戶 B) 儲存貯體,必須透過存取點、儲存貯體和 IAM 政策授予許可。以下是分別授予必要權限的政策。
存取點政策:
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "DelegateControlToAccessPoint",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::AccountA-ID:user/user1",
"arn:aws:iam::AccountA-ID:role/role01"
]
},
"Action": [
"s3:ListBucket",
"s3:PutObject",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:us-east-2:AccountB-ID:accesspoint/my-acess-point/object/*",
"arn:aws:s3:us-east-2:AccountB-ID:accesspoint/my-access-point"
]
}]
}
注意:此政策將授予來源 AWS 帳戶 (帳戶 A) 的 IAM 使用者或角色對目標 AWS 帳戶 (帳戶 B) 中存取點的許可。
儲存貯體政策︰
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "AllowCrossAccountAccess",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::AccountA-ID:user/user1",
"arn:aws:iam::AccountA-ID:role/role01"
]
},
"Action": [
"s3:GetObject",
"s3:ListBucket",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"
],
"Condition": {
"StringEquals": {
"s3:DataAccessPointArn": "arn:aws:s3:us-east-2:AccountB-ID:accesspoint/my-access-point"
}
}
}]
}
注意:此政策使用存取點授予來源 AWS 帳戶 (帳戶 A) IAM 使用者對儲存貯體 (帳戶 B) 的許可。
IAM 政策︰
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "AllowCrossAccountAccessToBucketAndAP",
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:PutObject",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:us-east-2:AccountB-ID:accesspoint/my-access-point",
"arn:aws:s3:us-east-2:AccountB-ID:accesspoint/my-access-point/object/*",
"arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"
]
}]
}
注意:此 IAM 政策連接至來源 AWS 帳戶的 (帳戶 A) IAM 角色或使用者,授予對目標 AWS 帳戶 (帳戶 B) 儲存貯體和存取點的許可。
使用存取點對儲存貯體執行 S3 動作的 AWS CLI 命令範例:
注意:如果您在執行 AWS CLI 命令時收到錯誤,請確保您使用的是最新版 AWS CLI。
清單︰
aws s3 ls arn:aws:s3:us-east-2:AccountB-ID:accesspoint/my-access-point
上傳︰
aws s3 cp file.txt s3://arn:aws:s3:us-east-2:AccountB-ID:accesspoint/my-access-point
下載︰
aws s3 cp s3://arn:aws:s3:us-east-2:AccountB-ID:accesspoint/my-access-point file.txt
注意:請求必須源自 VPC 中的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體,且位於與儲存貯體相同的區域。

相關內容
- 已提問 4 個月前lg...
- 已提問 4 個月前lg...
- 已提問 4 個月前lg...
- 已提問 3 個月前lg...
- 已提問 4 個月前lg...
- AWS 官方已更新 8 個月前
- AWS 官方已更新 3 個月前
- AWS 官方已更新 9 個月前
- AWS 官方已更新 5 個月前