我想限制對我的 Amazon Simple Storage Service (Amazon S3) 儲存貯體的存取,以便使用者只能通過我的 Amazon CloudFront 分佈存取物件。
解決方法
若要限制對 S3 儲存貯體的存取,您可以建立原始存取控制 (OAC),或建立舊式原始存取身分 (OAI)。最佳實務是建立 OAC 而不是舊式 OAI。
**重要:**開始之前,請確認您已將 CloudFront 指派的 Amazon S3 來源設定為 REST API 端點,例如 AWSDOC-EXAMPLE-BUCKET.s3.amazonaws.com。此解決方案不適用於您設定為網站端點的 Amazon S3 來源,例如 AWSDOC-EXAMPLE-BUCKET.s3-website-us-east-1.amazonaws.com。如需詳細資訊,請參閱如何使用 CloudFront 為託管在 Amazon S3 上的靜態網站提供服務?
建立 CloudFront OAC
請完成下列步驟:
- 開啟 CloudFront console (CloudFront 主控台)。
- 在導覽窗格中,選擇 Distributions (發佈項目),然後選擇提供您想限制存取的 S3 儲存貯體所提供內容的發佈項目。
- 選擇 Origins (來源) 索引標籤。
- 選取 Amazon S3 來源,然後選擇 Edit (編輯)。
- 在 Origin access (原始存取) 下,選取 Origin access control settings (recommended) (原始存取控制設定 (建議使用))。
- 在 Origin access control (原始存取控制),選取現有的 OAC。或選擇 Create new OAC (建立新的 OAC)。
- 在對話方塊中,輸入控制設定的名稱。最佳實務是將預設設定保留為簽署請求 (建議使用)。
- 選擇 Create (建立)。
- 在 S3 bucket access (S3 儲存貯體存取),選擇 Copy policy (複製政策)。
- 選擇 Save changes (儲存變更)。
- 開啟 Amazon S3 console (Amazon S3 主控台)。
- 在導覽窗格中,選擇 General purpose buckets (通用儲存貯體),然後選取作為 CloudFront 發佈項目來源的儲存貯體。
- 選擇 Permissions (權限) 索引標籤。
- 在 Bucket policy (儲存貯體政策) 下,確認您看到類似以下範例的陳述式:
{
"Version": "2012-10-17",
"Statement": {
"Sid": "AllowCloudFrontServicePrincipalReadOnly",
"Effect": "Allow",
"Principal": {
"Service": "cloudfront.amazonaws.com"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
"Condition": {
"StringEquals": {
"AWS:SourceArn": "arn:aws:cloudfront::111122223333:distribution/EDFDVBD6EXAMPLE"
}
}
}
}
**注意:**將 DOC-EXAMPLE-BUCKET 替換為您的儲存貯體名稱,並將 arn:aws:cloudfront::111122223333:distribution/EDFDVBD6EXAMPLE 替換為您的 CloudFront 發佈項目 Amazon Resource Name (ARN)。若要允許 CloudFront OAC 從您的儲存貯體讀取物件,您必須將上述陳述式新增至您的儲存貯體政策。限制儲存貯體的存取權之後,您可以整合 AWS WAF 來增添額外一層安全性。
建立舊版 CloudFront OAI
請完成下列步驟:
- 開啟 CloudFront console (CloudFront 主控台)。
- 在導覽窗格中,選擇 Distributions (發佈項目),然後選擇提供您想限制存取的 S3 儲存貯體所提供內容的發佈項目。
- 選擇 Origins (來源) 索引標籤。
- 選取 Amazon S3 來源,然後選擇 Edit (編輯)。
- 在 Origin access (原始存取),選擇 Legacy access identities (舊版存取身分)。
- 在 Origin access identity (原始存取身分) 下拉式清單中,選取 OAI 名稱。或選擇 Create new OAI (建立新的 OAI)。
- 在對話方塊中,輸入新 OAI 的名稱,然後選擇 Create (建立)。
- 在 Bucket policy (儲存貯體政策),選取 Yes, update the bucket policy (是,更新儲存貯體政策)。
- 選擇 Save changes (儲存變更)。
- 開啟 Amazon S3 console (Amazon S3 主控台)。
- 在導覽窗格中,選擇通用儲存貯體,然後選取作為 CloudFront 發佈項目來源的儲存貯體。
- 選擇 Permissions (權限) 索引標籤。
- 在 Bucket Policy (儲存貯體政策) 下,確認您看到類似以下範例的陳述式:
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EAF5XXXXXXXXX"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::AWSDOC-EXAMPLE-BUCKET/*"
}
注意:將 arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EAF5XXXXXXXXX 替換為您的 CloudFront 發佈項目 ARN,並將 AWS****DOC-EXAMPLE-BUCKET 替換為您的儲存貯體名稱。檢查儲存貯體政策中是否存在包含 "Effect": "Deny" 的陳述式,這些陳述式會阻止從 CloudFront OAI 存取儲存貯體。將動作變更為允許,以便 CloudFront OAI 可以存取儲存貯體中的物件。此外,請檢查儲存貯體政策中是否有包含 **"Effect": **"Allow" 的陳述式,這些陳述式允許從非 CloudFront OAI 的任何來源存取儲存貯體。請根據您的使用案例修改這些陳述式。
相關資訊
建立發佈項目
Amazon S3 的身分和存取管理