2017-07-18 135 views

回答

2

有幾種不同的方式授予訪問Amazon S3存儲數據:

  • 權限的各個對象自身是允許訪問整個桶或目錄
  • (灰心)
  • 桶政策
  • IAM用戶策略授予特定IAM用戶/組的權限
  • 預先簽名即授予對象暫時的,有時間限制的訪問(好程序批准通過應用訪問)的URL

你的用例將適合Bucket Policies

您可以授予訪問整個亞馬遜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進行訪問也是如此。

+0

非常感謝你!這正是我需要的。所以不可能根據網絡進行限制? –

+0

「按照網絡」是什麼意思?對我而言,這意味着一個IP地址範圍。你的定義是什麼? –

+0

我的意思是ISP。指定ISP比IP地址範圍更容易。 –

相關問題