2017-10-20 108 views
2

我試圖使用S3存儲作爲一個簡單的虛擬主機,但是想要把它背後的反向代理能夠分層一些必要的安全控制措施。AWS桶政策的反向代理

我有,我想限制對S3的Web訪問的反向代理相關的IP地址。當我在存儲桶策略中應用基於IP的限制時,雖然它似乎使帳戶中的管理交互非常難以阻止。

我想不會破壞通過控制檯/ IAM用戶/聯合角色從帳戶中訪問,但啓用HTTP訪問S3網站只是反向代理相關的IP地址。

對什麼是需要啓用Web訪問表明,我需要這個政策聲明,所以我已經包括它開始與AWS文檔。

{ 
    "Id": "S3_Policy", 
    "Statement": [ 
     { 
      "Sid": "AllowWebAccess", 
      "Effect": "Allow", 
      "Principal": "*", 
      "Action": [ 
       "s3:GetObject" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::mybucket/*" 
      ] 
     } 
    ] 
} 

然後我想限制網絡流量到一組特定的IP,所以我添加了這個語句。

{ 
    "Id": "S3_Policy", 
    "Statement": [ 
     { 
      "Sid": "AllowWebAccess", 
      "Effect": "Allow", 
      "Principal": "*", 
      "Action": [ 
       "s3:GetObject" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::mybucket/*" 
      ] 
     }, 
     { 
      "Sid": "DenyNonProxyWebAccess", 
      "Effect": "Deny", 
      "Principal": "*", 
      "Action": "s3:*", 
      "Resource": [ 
       "arn:aws:s3:::mybucket/*", 
       "arn:aws:s3:::mybucket" 
       ], 
      "Condition": { 
       "NotIpAddress": { 
        "aws:SourceIp": [ 
         "99.99.99.1/32", 
         "99.99.99.2/32", 
         "99.99.99.3/32", 
         "99.99.99.4/32", 
         "99.99.99.5/32" 
        ] 
       } 
      } 
     } 
    ] 
} 

這種拒絕策略具有阻止我從與IAM用戶訪問我的帳戶內的能力的意想不到的後果或聯合承擔的角色,所以我增加了一個明確允許這些資源。如果可能的話,我想只是爲了「賬戶」而放置一個毯子。這讓我有了這個政策,而且這似乎並不符合我的願望。我似乎無法將其作爲我的用戶進行管理,也無法從代理訪問網絡內容。

{ 
    "Id": "S3_Policy", 
    "Statement": [ 
     { 
      "Sid": "AllowWebAccess", 
      "Effect": "Allow", 
      "Principal": "*", 
      "Action": [ 
       "s3:GetObject" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::mybucket/*" 
      ] 
     }, 
     { 
      "Sid": "DenyNonProxyWebAccess", 
      "Effect": "Deny", 
      "Principal": "*", 
      "Action": "s3:*", 
      "Resource": [ 
       "arn:aws:s3:::mybucket/*", 
       "arn:aws:s3:::mybucket" 
       ], 
      "Condition": { 
       "NotIpAddress": { 
        "aws:SourceIp": [ 
         "99.99.99.1/32", 
         "99.99.99.2/32", 
         "99.99.99.3/32", 
         "99.99.99.4/32", 
         "99.99.99.5/32" 
        ] 
       } 
      } 
     }, 
     { 
      "Sid": "AllowAccountUsersAccess", 
      "Effect": "Allow", 
      "Principal": { 
       "AWS": [ 
        "arn:aws:IAM::999999999999:user/[email protected]", 
        "arn:aws:IAM::999999999999:user/[email protected]", 
        "999999999999" 
       ] 
      }, 
      "Action": "s3:*", 
      "Resource": [ 
       "arn:aws:s3:::mybucket/*", 
       "arn:aws:s3:::my bucket" 
      ] 
     } 
    ] 
} 

有沒有辦法有一個S3存儲是僅限於選擇的IP範圍的網絡訪問,而無需中斷從賬戶管理桶本身的能力的靜態虛擬主機?

回答

1

有訪問可以在Amazon S3的桶被授予資源多種方式:

  • IAM權限
  • 桶政策
  • 預標識的URL

如果訪問請求滿足任何以上,他們將被授予訪問權限(雖然拒絕可能會覆蓋它)。

IAM權限用於將權限分配給一個用戶。例如,如果您想要訪問存儲桶,則可以添加創建策略並將其作爲IAM用戶分配給您。如果您希望所有管理員訪問存儲桶,請將其置於IAM組中,並將策略分配給該組。以這種方式進行的所有訪問都需要使用AWS憑據(無匿名訪問)完成。

一個桶政策通常用於授予匿名訪問(無需證書),但可以包括一些限制,例如IP地址範圍,僅支持SSL,和時間的一天。這是您授予訪問您的反向代理服務器的方式,因爲它不會將憑據作爲其請求的一部分發送。

前置簽名URL可以通過應用程序生成的授予臨時訪問到特定對象。該URL包含驗證訪問的計算簽名。這通常用於在HTML頁面上生成鏈接(例如鏈接到私人圖像)。

你的情況

所以,首先,你應該授予訪問你自己和你的管理員,使用類似的策略:

{ 
    "Id": "S3_Policy", 
    "Statement": [ 
     { 
      "Sid": "AllowWebAccess", 
      "Effect": "Allow", 
      "Action": [ 
       "s3:GetObject" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::mybucket/*" 
      ] 
     } 
    ] 
} 

注意,沒有Principal,因爲它適用於任何用戶/組已被分配此策略。

接下來,您希望授予對您的反向代理的訪問權限。這可以通過一個桶政策來完成:

{ 
    "Id": "S3_Policy", 
    "Statement": [ 
     { 
      "Sid": "DenyNonProxyWebAccess", 
      "Effect": "Allow", 
      "Principal": "*", 
      "Action": "s3:*", 
      "Resource": [ 
       "arn:aws:s3:::mybucket/*", 
       "arn:aws:s3:::mybucket" 
       ], 
      "Condition": { 
       "IpAddress": { 
        "aws:SourceIp": [ 
         "99.99.99.1/32", 
         "99.99.99.2/32", 
         "99.99.99.3/32", 
         "99.99.99.4/32", 
         "99.99.99.5/32" 
        ] 
       } 
      } 
     } 
    ] 
} 

該政策允許(Allow)訪問指定的水桶,但前提是請求從規定一個IP地址來。

通過Allow授予訪問權總是優於拒絕訪問,因爲Deny總是覆蓋Allow。因此,謹慎使用Deny,因爲一旦被拒絕,它就不能被允許(例如,如果拒絕阻止管理訪問,則不能再允許訪問)。拒絕主要用在你肯定想阻止某些事情的地方(例如一個已知的壞角色)。

VPC端點

最後一個值得考慮的選擇是S3使用VPC端點。這允許VPC和S3之間的直接通信,而不必通過互聯網網關。這非常適合私有子網中的資源希望與S3進行通信而不使用NAT網關的情況。

可以將附加策略添加到VPC端點以定義哪些資源可以訪問VPC端點(例如您的反向代理範圍)。存儲桶策略可以專門引用VPC終端,允許來自該訪問方法的請求。例如,您可以配置允許僅從特定VPC訪問的存儲桶策略 - 這對於將存取/測試/產品存取分隔爲存儲區很有用。

但是,它可能不適合您的給定用例,因爲它會強制 S3流量通過VPC端點,即使在反向代理之外也是如此。這可能不是你的體系結構所期望的行爲。

底線: IAM策略授予用戶訪問權限。桶策略授予匿名訪問權限。

您當然不會「需要」您列出的第一項政策,實際上您應該很少使用該政策,因爲它授予對存儲區的完整訪問權限。