如何使用我的 CloudFront 分佈限制對 Amazon S3 儲存貯體的存取?

2 分的閱讀內容
0

我想限制對我的 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),請完成下列步驟:

  1. 開啟 CloudFront 主控台
  2. 從分佈清單中,選擇您要限制存取權限的 S3 儲存貯體提供內容的分佈。
  3. 選擇原始伺服器索引標籤。
  4. 選取 S3 原始伺服器,然後選擇編輯
  5. 原始存取下,選取原始存取控制設定 (建議使用)
  6. 原始存取控制,選取現有的 OAC,或選擇建立控制設定。
  7. 在對話方塊中,為您的控制設定命名。最佳實務是將預設設定保留為簽署請求 (建議)
  8. 選擇建立
  9. S3 儲存貯體存取下,選擇複製政策,然後選擇儲存來將儲存貯體政策套用至 S3 儲存貯體。
  10. 選擇前往 S3 儲存貯體許可,將您帶到 S3 儲存貯體主控台。
  11. 選擇儲存變更
  12. Amazon S3 主控台中,從儲存貯體清單中選擇作為 CloudFront 分佈原始伺服器的儲存貯體。
  13. 選擇許可標籤。
  14. 儲存貯體政策下,確認您看到類似下列內容的陳述式:
{
    "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),請完成下列步驟:

  1. 開啟 CloudFront 主控台
  2. 從分佈清單中,選擇您要限制存取權限的 S3 儲存貯體提供內容的分佈。
  3. 選擇原始伺服器索引標籤。
  4. 選取 S3 原始伺服器,然後選擇編輯
  5. 原始存取下,選擇舊版存取身分
  6. 原始存取身分下拉式清單中,選取原始存取身分名稱。或選擇建立新的 OAI
  7. 在對話方塊中,為新的原始存取身分命名,然後選擇建立
  8. 在儲存貯體政策下,請選取是,更新儲存貯體政策
  9. 選擇儲存變更
  10. Amazon S3 主控台中,從儲存貯體清單中選擇作為 CloudFront 分佈原始伺服器的儲存貯體。
  11. 選擇許可標籤。
  12. 儲存貯體政策下,確認您看到類似下列內容的陳述式:
{{

"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 中的身分和存取管理

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