我使用 Amazon Simple Storage Service (Amazon S3) 託管我的靜態網站。我附加了一個儲存貯體原則,該原則限制只有來自特定的 Amazon Virtual Private Cloud (Amazon VPC) 才可存取。但是,我仍然可以從公有 IP 地址存取該網站。
解決方法
疑難排解此問題之前,請務必先完成下列步驟:
- 清除網頁瀏覽器或代理緩存,以便檢視最新的設定。
- 確認您從中存取儲存貯體的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體與儲存貯體位於相同的 AWS 區域。
- 將 VPC 端點與您使用的 EC2 執行個體的路由表建立關聯。如此一來,流量就會與儲存貯體原則中參照的 VPC ID 產生關聯。
檢查儲存貯體原則
確認儲存貯體原則允許從 VPC 存取儲存貯體。為了確認這一點,請檢閱儲存貯體原則中的陳述。例如,在請求來自於 vpc-id123456 的情況下,下列儲存貯體原則陳述允許 s3:GetObject。
{
"Version": "2012-10-17",
"Id": "Policy1",
"Statement": \[{
"Sid": "Access-to-Trusted-VPC-only",
"Effect": "Allow",
"Principal": "\*",
"Action": "s3:GetObject\*",
"Resource": "arn:aws:s3:::awsexamplebucket/\*",
"Condition": {
"StringEquals": {
"aws:sourceVpc": "vpc-id123456"
}
}
}\]
}
**注意:**靜態網站託管允許未經身份驗證 (匿名) 請求。不過,如果使用者進行驗證,則您可以根據使用者的憑證來授予存取權限。例如,假設使用者使用具有 Amazon S3 完整存取權限的 AWS 身分和 Access Management (IAM) 角色進行身份驗證。儘管有以下儲存貯體原則,此使用者仍然可以在 VPC 之外下載物件。如需更嚴格的儲存貯體原則,請參閱僅限特定 VPC 存取。限制僅有來自特定 VPC 才可存取,即使是管理員或 AWS 帳戶根使用者,只要不是來自該特定 VPC 的請求,也會遭到拒絕存取。
檢查物件存取控制清單 (ACL)
確認儲存貯體原則正確後,請檢查是否有任何物件 ACL 允許公開存取。如果某些物件 ACL 允許公共存取,而您想要覆寫該 ACL,請執行下列其中一個動作:
- 設定個別儲存貯體或 AWS 帳戶的公開存取設定。
- 在儲存貯體原則中新增明確的拒絕陳述。
若要覆寫物件 ACL,請使用 Amazon S2 主控台設定個別儲存貯體的公開存取設定或帳戶的公開存取設定。選取下列選項:
- 封鎖_新的_存取控制清單 (ACL) 所授權的儲存貯體和物件公開存取權限
- 封鎖_任何_存取控制清單 (ACL) 所授權的儲存貯體和物件公開存取權限
**注意:**您也可以使用 AWS Command Line Interface (AWS CLI)、AWS SDK 或 Amazon S3 REST API 來設定儲存貯體的公開存取設定。如需詳細資訊,請參閱封鎖對您 Amazon S3 儲存的公開存取。
若要使用儲存貯體原則覆寫物件 ACL,請新增陳述,在請求不是來自特定 VPC 時,明確拒絕執行動作。例如,下列儲存貯體原則包含一項陳述,當請求不是來自 vpc-id123456 時,會明確拒絕執行 s3:GetObjectt。
**警告:**由於此範例貯體原則包含明確的拒絕陳述,請在保存原則之前,檢閱參數是否明確拒絕存取。如果您不慎遭到封鎖,請參閱我不小心拒絕了所有人存取我的 Amazon S3 儲存貯體。如何重新獲得存取權限?
{
"Version": "2012-10-17",
"Id": "Policy1",
"Statement": \[{
"Sid": "Access-to-Trusted-VPC-only",
"Effect": "Allow",
"Principal": "\*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::awsexamplebucket/\*",
"Condition": {
"StringEquals": {
"aws:sourceVpc": "vpc-id123456"
}
}
},
{
"Sid": "Deny-Access-Except-For-Trusted-VPC",
"Effect": "Deny",
"Principal": "\*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::awsexamplebucket/\*",
"Condition": {
"StringNotEquals": {
"aws:sourceVpc": "vpc-id123456"
}
}
}
\]
}
相關資訊
AWS 原則產生器