我想限制對我的 Amazon Simple Storage Service (Amazon S3) 儲存貯體的存取,以便使用者只能通過我的 Amazon CloudFront 分佈存取物件。
解決方案
**重要事項:**在開始之前,請確定 CloudFront 分佈的 Amazon S3 來源已設定為 REST API 端點,例如 AWSDOC-EXAMPLE-BUCKET.s3.amazonaws.com。此解決方案不適用於設為網站端點的 S3 來源,例如 AWSDOC-EXAMPLE-BUCKET.s3-website-us-east-1.amazonaws.com。如需詳細資訊,請參閱如何使用 CloudFront 提供託管在 Amazon S3 上的靜態網站?
選項 1 (最佳實務): 建立 CloudFront OAC
若要建立 CloudFront 原始存取控制 (OAC),請完成下列步驟:
- 開啟 CloudFront 主控台。
- 從分佈清單中,選擇您要限制存取權限的 S3 儲存貯體提供內容的分佈。
- 選擇原始伺服器索引標籤。
- 選取 S3 原始伺服器,然後選擇編輯。
- 在原始存取下,選取原始存取控制設定 (建議使用)。
- 在原始存取控制,選取現有的 OAC,或選擇建立控制設定。
- 在對話方塊中,為您的控制設定命名。最佳實務是將預設設定保留為簽署請求 (建議)。
- 選擇建立。
- 在 S3 儲存貯體存取下,選擇複製政策,然後選擇儲存來將儲存貯體政策套用至 S3 儲存貯體。
- 選擇前往 S3 儲存貯體許可,將您帶到 S3 儲存貯體主控台。
- 選擇儲存變更。
- 在 Amazon S3 主控台中,從儲存貯體清單中選擇作為 CloudFront 分佈原始伺服器的儲存貯體。
- 選擇許可標籤。
- 在儲存貯體政策下,確認您看到類似下列內容的陳述式:
{
"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"
}
}
}
}
若要讓 CloudFront OAC 讀取儲存貯體中的物件,您必須新增上述陳述式。
**注意:**限制儲存貯體的存取權之後,您可以整合 AWS WAF 來增添額外一層安全性。
選項 2: 建立舊版 CloudFront OAI
若要建立舊版 CloudFront 原始存取身分 (OAI),請完成下列步驟:
- 開啟 CloudFront 主控台。
- 從分佈清單中,選擇您要限制存取權限的 S3 儲存貯體提供內容的分佈。
- 選擇原始伺服器索引標籤。
- 選取 S3 原始伺服器,然後選擇編輯。
- 在原始存取下,選擇舊版存取身分。
- 在原始存取身分下拉式清單中,選取原始存取身分名稱。或選擇建立新的 OAI。
- 在對話方塊中,為新的原始存取身分命名,然後選擇建立。
- 在儲存貯體政策下,請選取是,更新儲存貯體政策。
- 選擇儲存變更。
- 在 Amazon S3 主控台中,從儲存貯體清單中選擇作為 CloudFront 分佈原始伺服器的儲存貯體。
- 選擇許可標籤。
- 在儲存貯體政策下,確認您看到類似下列內容的陳述式:
{{
"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/*"
}
**注意:查看儲存貯體政策是否有任何含有「生效」的陳述式: 「拒絕」**以防止從 CloudFront OAI 存取儲存貯體。修改這些陳述式,讓 CloudFront OAI 可以存取儲存貯體中的物件。
另外,請查看您的儲存貯體政策是否有任何含有**「生效」的陳述式: "Allow"**,這會允許任何不是 CloudFront OAI 的原始伺服器存取儲存貯體。請針對您的使用案例修改這些陳述式。
相關資訊
建立分佈
Amazon S3 中的身分和存取管理