如何使用僅限於 VPC 的 S3 存取點來存取另一個帳戶中的儲存貯體?

3 分的閱讀內容
0

我在不同的 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 儲存貯體的存取權,請執行下列操作:

  1. 建立 Amazon S3 存取點,並將其連接至帳戶 B 中的儲存貯體。
  2. 在帳戶 A 中建立 Amazon S3 VPC 閘道端點。
  3. 連接存取點、儲存貯體和 IAM 政策。

建立 Amazon S3 存取點,並將其連接至帳戶 B 中的儲存貯體

  1. 開啟 Amazon S3 主控台
  2. 在導覽窗格中,選擇 Access Points (存取點)。
  3. 選擇 Create access point (建立存取點)。
  4. 針對 Access point name (存取點名稱),輸入存取點的名稱。如需詳細資訊,請參閱命名 Amazon S3 存取點的規則
  5. 針對 Bucket name (儲存貯體名稱),輸入您要連接存取點的帳戶 B 中的儲存貯體名稱。
  6. 針對 Network Origin (網路來源),選擇 Virtual Private Cloud (VPC) (虛擬私有雲端 (VPC))。
  7. 針對 VPC ID,輸入第一個 AWS 帳戶 (帳戶 A) 中的 VPC ID。
  8. Block Public Access settings for this Access Point (封鎖此存取點的公有存取設定) 下方,選擇您要套用至存取點的封鎖公有存取設定。 
    注意:建立存取點後,Amazon S3 目前不支援變更存取點的區塊公有存取設定。
  9. Access Point policy (存取點政策) 保留空白。
  10. 選擇 Create access point (建立存取點)。

在帳戶 A 中建立 Amazon S3 VPC 閘道端點

在與要授予跨帳戶存取權的儲存貯體相同區域的初始 AWS 帳戶 (帳戶 A) 中,建立 S3 Gateway VPC 端點。

  1. 開啟 Amazon VPC 主控台
  2. 在導覽窗格中,選擇 Endpoints (端點)。
  3. 選擇 Create endpoint (建立端點)。
  4. 針對 Service category (服務類別),選擇 AWS services (AWS 服務)。
  5. 針對 Services (服務),新增篩選器 Type: Gateway (類型:閘道),然後選取用於建立存取點的相同區域。
  6. 針對 VPC,選擇用於建立存取點的相同 VPC。
  7. 針對 Route tables (路由表),選擇端點要使用的路由表。
  8. 選擇 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) 執行個體,且位於與儲存貯體相同的區域。


AWS 官方
AWS 官方已更新 1 年前