2016-08-11 3 views
0

В настоящее время у меня есть ведро с именем mets-logos. В настоящее время он имеет эту политику ведра, которая позволяет GetObjects от кого-либо.AWS S3 Ограничение политики ведра GET для набора IP-адресов?

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

Я хочу разрешить GetObjects только из белого списка IP-адресов. Вот то, что я пытался, но он не работает (за пределами IP по-прежнему могут получить объекты)

{ 
    "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", 
        ] 
       } 
      } 
     } 
    ] 
} 

Боковой вопрос: Если моя Ковш политика является правильным, нужно ли мне ждать AWS, чтобы отразить эти изменения, или должны это будет немедленно отражено?

+0

Вы пытаетесь заблокировать диапазон или только эти 2 IP-адреса? – error2007s

+0

Я хочу разрешить ТОЛЬКО для этих 2 IP-адресов. Никто другой –

ответ

1

Попробуйте добавить запрещающее, наряду с исключениями, например:

{ 
    "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" 
       } 
      } 
     } 
    ] 
} 

Это явно запрещает доступ ко всем IP-адресам, но позволяет два адреса, которые вы Whitelisting выполнять GetObject.

Я вижу, как это было бы полезно, если вы получаете доступ к S3 под учетными данными IAM, но хотите дополнительно контролировать доступ на уровне ковша. Deny в этой политике переопределит существующие политики пользователя IAM.

Чтобы ответить на ваш вопрос, изменения в политике вступают в силу немедленно.

0

Доступ к ведрам S3 регулируется как политикой пакета S3, так и политиками доступа IAM, которые привязаны к принципалам, обращающимся к ведру.

Возможно, что политика доступа IAM может «отменить» политику ведомости S3.

В вашей политике корзины S3 говорится: «Разрешите, если IP-адрес такой-то». Но в политике ведра нет ничего, что говорит «не позволяйте никому другому».

Если ваш пользователь/роль IAM, который обращается к ведру, позволяет использовать s3:GetObject в вашем ковше (или *), тогда эта политика позволяет им получить доступ к ведру.

Если пользователь/роль IAM не имеет явного «разрешения» для «s3: GetObject» (или «s3: *»), тогда ваша политика будет работать.

Чтобы запретить пользователям/ролям, которым в противном случае был бы разрешен доступ к ведру, для ограничения их IP-адресов, вам необходимо изменить политику, чтобы «запретить» кому-либо НЕ разрешенному IP-адресу. Явное «отклонение» в политике ведра приведет к отмене любого «разрешения» в политике пользователя/роли IAM.

Пробуйте эту политику.

{ 
    "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", 
        ] 
       } 
      } 
     } 
    ] 
}