跳至內容

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

2 分的閱讀內容
0

我想限制對我的 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

請完成下列步驟:

  1. 開啟 CloudFront console (CloudFront 主控台)。
  2. 在導覽窗格中,選擇 Distributions (發佈項目),然後選擇提供您想限制存取的 S3 儲存貯體所提供內容的發佈項目。
  3. 選擇 Origins (來源) 索引標籤。
  4. 選取 Amazon S3 來源,然後選擇 Edit (編輯)。
  5. Origin access (原始存取) 下,選取 Origin access control settings (recommended) (原始存取控制設定 (建議使用))。
  6. Origin access control (原始存取控制),選取現有的 OAC。或選擇 Create new OAC (建立新的 OAC)。
  7. 在對話方塊中,輸入控制設定的名稱。最佳實務是將預設設定保留為簽署請求 (建議使用)。
  8. 選擇 Create (建立)。
  9. S3 bucket access (S3 儲存貯體存取),選擇 Copy policy (複製政策)。
  10. 選擇 Save changes (儲存變更)。
  11. 開啟 Amazon S3 console (Amazon S3 主控台)。
  12. 在導覽窗格中,選擇 General purpose buckets (通用儲存貯體),然後選取作為 CloudFront 發佈項目來源的儲存貯體。
  13. 選擇 Permissions (權限) 索引標籤。
  14. 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

請完成下列步驟:

  1. 開啟 CloudFront console (CloudFront 主控台)。
  2. 在導覽窗格中,選擇 Distributions (發佈項目),然後選擇提供您想限制存取的 S3 儲存貯體所提供內容的發佈項目。
  3. 選擇 Origins (來源) 索引標籤。
  4. 選取 Amazon S3 來源,然後選擇 Edit (編輯)。
  5. Origin access (原始存取),選擇 Legacy access identities (舊版存取身分)。
  6. Origin access identity (原始存取身分) 下拉式清單中,選取 OAI 名稱。或選擇 Create new OAI (建立新的 OAI)。
  7. 在對話方塊中,輸入新 OAI 的名稱,然後選擇 Create (建立)。
  8. Bucket policy (儲存貯體政策),選取 Yes, update the bucket policy (是,更新儲存貯體政策)。
  9. 選擇 Save changes (儲存變更)。
  10. 開啟 Amazon S3 console (Amazon S3 主控台)。
  11. 在導覽窗格中,選擇通用儲存貯體,然後選取作為 CloudFront 發佈項目來源的儲存貯體。
  12. 選擇 Permissions (權限) 索引標籤。
  13. 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 的身分和存取管理