2016-08-11 1 views
0

Ich habe derzeit einen Eimer namens Mets-Logos. Es hat derzeit diese Bucket-Richtlinie, die GetObjects von jedem ermöglicht.AWS S3 Bucket Policy Limit Greift auf eine Reihe von IPs zu?

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

Ich möchte GetObjects nur von einer Whitelist von IPs erlauben. Hier ist, was ich versucht, aber es funktioniert nicht (außerhalb von IP-Adressen noch Objekte erhalten können)

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Sid": "AddPerm", 
      "Effect": "Allow", 
      "Principal": "*", 
      "Action": "s3:GetObject", 
      "Resource": "arn:aws:s3:::mets-logos/*", 
      "Condition": { 
       "IpAddress": { 
        "aws:SourceIp": [ 
         "100.77.17.80/32", 
         "100.77.26.210/32", 
        ] 
       } 
      } 
     } 
    ] 
} 

Side Frage: Wenn mein Eimer Politik richtig ist, muss ich für AWS warten, um diese Änderung widerzuspiegeln, oder sollte es wird sofort reflektiert?

+0

Versuchen Sie, einen Bereich oder nur diese 2 IPs zu blockieren? – error2007s

+0

Ich möchte nur für diese 2 IPs erlauben. Niemand anders –

Antwort

1

Versuchen das Hinzufügen einer Deny, zusammen mit Ausnahmen, wie folgt aus:

{ 
    "Version":"2012-10-17", 
    "Id":"S3PolicyId1", 
    "Statement": 
    [ 
     { 
      "Sid"  : "IPAllow", 
      "Effect" : "Deny", 
      "Principal": "*", 
      "Action" : "s3:GetObject", 
      "Resource" : "arn:aws:s3:::mets-logos/*", 
      "Condition": { 
       "IpAddress" : { 
        "aws:SourceIp": "0.0.0.0/0" 
       }, 
       "NotIpAddress": { 
        "aws:SourceIp": "100.77.17.80/32" 
       }, 
       "NotIpAddress": { 
        "aws:SourceIp": "100.77.26.210/32" 
       } 
      } 
     } 
    ] 
} 

Dies bestreitet ausdrücklich den Zugriff auf alle IP-Adressen, sondern erlaubt es, die beiden Adressen, die Sie Whitelisting GetObject auszuführen.

Ich kann sehen, wie dies nützlich wäre, wenn Sie auf S3 unter IAM-Anmeldeinformationen zugreifen, aber Sie den Zugriff auf der Bucket-Ebene weiter steuern möchten. Die Deny in dieser Richtlinie überschreibt vorhandene IAM-Benutzerrichtlinien.


Um Ihre Nebenfrage zu beantworten, werden Richtlinienänderungen sofort wirksam.

0

Der Zugriff auf S3-Buckets wird sowohl von der S3-Bucket-Richtlinie als auch von den IAM-Zugriffsrichtlinien bestimmt, die den Principals zugeordnet sind, die auf den Bucket zugreifen.

Es ist also möglich, dass eine IAM-Zugriffsrichtlinie eine S3-Bucket-Richtlinie "außer Kraft setzt".

Ihre S3-Bucket-Richtlinie besagt: "Erlauben Sie es, wenn die IP-Adresse so und so ist". Aber es gibt nichts in der Bucket-Politik, das sagt: "Erlaube niemandem sonst".

Wenn Ihr IAM-Benutzer/die IAM-Benutzerrolle, die auf den Bucket zugreift, s3:GetObject für Ihren Bucket (oder *) zulässt, können sie mit dieser Richtlinie auf den Bucket zugreifen.

Wenn der IAM-Benutzer/die Rolle kein explizites "Zulassen" für "s3: GetObject" (oder "s3: *") hat, dann würde Ihre Richtlinie funktionieren.

Um zu verhindern, dass Benutzer/Rollen, die sonst Zugriff auf den Bucket hätten, auf die IP-Adressen beschränkt wären, müssen Sie Ihre Richtlinie so ändern, dass sie niemanden ablehnen, der sich NICHT in einer erlaubten IP-Adresse befindet. Ein explizites "Verweigern" in der Bucket-Richtlinie würde jedes "Zulassen" in der IAM-Benutzer-/Rollenrichtlinie außer Kraft setzen.

Versuchen Sie diese Richtlinie.

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Sid": "DenyAllButFromAllowedIp", 
      "Effect": "Deny", 
      "Principal": "*", 
      "Action": "s3:GetObject", 
      "Resource": "arn:aws:s3:::mets-logos/*", 
      "Condition": { 
       "NotIpAddress": { 
        "aws:SourceIp": [ 
         "100.77.17.80/32", 
         "100.77.26.210/32", 
        ] 
       } 
      } 
     } 
    ] 
} 
Verwandte Themen