簡體   English   中英

如何通過網絡限制S3存儲桶訪問

[英]How to restrict S3 bucket access by network

我想允許對我的S3存儲桶進行公共讀取訪問,但2個文件夾除外。

在2個文件夾中,我只想允許來自特定網絡的訪問者訪問。

有沒有辦法定義這個?

有幾種方法可以授予對存儲在Amazon S3中的數據的訪問權限:

  • 對單個對象本身的權限(已終止)
  • 授予對整個存儲桶或目錄的訪問權限的存儲桶策略
  • 授予特定IAM用戶/組權限的IAM用戶策略
  • 預先簽名的URL允許對對象進行臨時的,有時間限制的訪問(適用於以編程方式通過應用程序授予訪問權限)

您的用例將符合“ 存儲桶策略”

您可以使用以下策略授予對整個Amazon S3存儲桶的訪問權限

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"AddPerm",
      "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::examplebucket/*"]
    }
  ]
}

您可以根據以下IP地址范圍授予訪問權限

{
  "Version": "2012-10-17",
  "Id": "S3PolicyId1",
  "Statement": [
    {
      "Sid": "IPAllow",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::examplebucket/*",
      "Condition": {
         "IpAddress": {"aws:SourceIp": "54.240.143.0/24"},
         "NotIpAddress": {"aws:SourceIp": "54.240.143.188/32"} 
      } 
    } 
  ]
}

您希望“允許對我的S3存儲桶進行公共讀取訪問,但2個文件夾除外”的情況要困難一些,因為這是一個“除”之外的所有用例。

選項1:特定的文件夾

  • 授予對特定文件夾的公共訪問權限,並且
  • 授予對特定文件夾的受限訪問權限

例如:

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"AddPerm",
      "Effect":"Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource":["arn:aws:s3:::examplebucket/folder1/*",
                  "arn:aws:s3:::examplebucket/folder2/*"]
    },
    {
      "Sid": "IPAllow",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": ["arn:aws:s3:::examplebucket/folder3/*",
                   "arn:aws:s3:::examplebucket/folder4/*"],
      "Condition": {
         "IpAddress": {"aws:SourceIp": "54.240.143.0/24"} 
      } 
  ]
}

但是,這要求您專門列出每個文件夾。

選項2:除...以外的所有內容

在此規則中,您授予公共訪問權限,但是如果某些文件夾不在正確的IP范圍內,則拒絕它們:

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"AddPerm",
      "Effect":"Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource":["arn:aws:s3:::examplebucket/*"]
    },
    {
      "Sid": "IPAllow",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": ["arn:aws:s3:::examplebucket/folder3/*",
                   "arn:aws:s3:::examplebucket/folder4/*"],
      "Condition": {
         "NotIpAddress": {"aws:SourceIp": "54.240.143.0/24"} 
      } 
  ]
}

注意使用的DenyNotIpAddress ,它說,訪問被拒絕,如果請求不是從定義的IP地址范圍的到來。

但是, DENY會覆蓋ALLOW ,因此這也意味着,除非您來自該IP地址范圍,否則您將無法訪問受限存儲區-即使您的IAM用戶已被明確授予ALLOW權限也是如此。 例如,如果您是具有S3中所有權限的管理員,但如果您來自給定IP范圍,則仍將拒絕訪問受限制的文件夾。 因此,它可能對您來說過於嚴格,因為它會影響所有使用情況,即使通過控制台/ API訪問也是如此。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM