2012-03-21 3 views
1

Я хотел бы ограничить публичный доступ к некоторым объектам, которые мы сохранили в S3, но показывать другие объекты в той же иерархии ключей. Например, предположим, что я хочу сделать bucketname/* общедоступным. Но хотите запретить доступ к bucketname/*/hidden/*для всех пользователей, которым явно не разрешен доступ в IAM.Политика экономии Amazon S3 только для общедоступных ограничений

я могу сделать это с политикой ковшового типа:

{ 
    "Id": "Policy123", 
    "Statement": [ 
    { 
     "Sid": "Stmt123", 
     "Action": [ "s3:GetObject" ], 
     "Effect": "Allow", 
     "Resource": "arn:aws:s3:::bucketname/*", 
     "Principal": { 
     "AWS": [ "*" ] 
     } 
    }, 
    { 
     "Sid": "Stmt124", 
     "Action": [ "s3:GetObject" ], 
     "Effect": "Deny", 
     "Resource": "arn:aws:s3:::bucketname/*/hidden/*", 
     "Principal": { 
     "AWS": [ "*" ] 
     } 
    ] 
} 

Но что предотвращает любые IAM пользователей/группы Я предоставленные от доступа к скрытым объектам. Есть ли настройка для Principal во втором утверждении, которое соответствует только не прошедшему проверку подлинности доступу? Или еще лучше, есть ли способ перечислять только те Принципы, которые должны NOT быть затронуты политикой?

+1

Обновление 2016: теперь вы можете использовать http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#NotPrincipal тег для обозначения «всех участников, но ... – Claude

ответ

3

Согласно поддержке AWS, в настоящее время это невозможно. Любая политика Deny переопределяет политику соответствия (или подмножества) Allow и нет возможности отклонить анонимный доступ.

Аналогичный эффект может быть достигнут путем указания частного ACL для всех объектов, соответствующих bucketname/*/hidden/*, но это не так гибко и должно применяться вручную.

0

Вам не нужно устанавливать политику в ковше. Фактически вы можете применить эту же политику к пользователю или группе IAM в зависимости от того, что лучше всего работает в вашем сценарии.

https://console.aws.amazon.com/iam/home?#

  • Пользователи
  • Выберите нужный пользователь Вкладка
  • Нажмите разрешения
  • Приложить политики пользователя
  • Пользовательские политики
  • Выберите
  • Копирование и вставка политики
  • Политика подачи заявлений

Иногда дополнительные разрешения необходимо добавить к пользователю, чтобы они могли видеть ведра для навигации. Если, например, они используют облачную берку, вам нужно будет предоставить им доступ к списку в главные ведра. См. Например, одну из моих политик.

{ 
    "Statement": [ 
    { 
     "Sid": "Stmt1330983243489", 
     "Action": [ 
     "s3:*" 
     ], 
     "Effect": "Allow", 
     "Resource": [ 
     "arn:aws:s3:::<allowbucket1>", 
     "arn:aws:s3:::<allowbucket1>/*" 
     ] 
    }, 
    { 
     "Sid": "Stmt1330983260440", 
     "Action": [ 
     "s3:ListAllMyBuckets" 
     ], 
     "Effect": "Allow", 
     "Resource": [ 
     "arn:aws:s3:::*" 
     ] 
    }, 
    { 
     "Sid": "Stmt1330983357419", 
     "Action": [ 
     "s3:CreateBucket", 
     "s3:DeleteBucket", 
     "s3:PutBucketNotification", 
     "s3:PutBucketPolicy", 
     "s3:PutBucketRequestPayment" 
     ], 
     "Effect": "Deny", 
     "Resource": [ 
     "arn:aws:s3:::*" 
     ] 
    } 
    ] 
} 
+0

Мне нужен ведро политика для обработки неавторизованного доступа. Пользователям IAM был предоставлен доступ ко всем объектам в их собственных политиках. Политика 'Deny' в ведре для' */hidden/* 'запрещает пользователям IAM видеть эти объекты. вопрос, чтобы сделать это более ясным. – bkirkbri

+0

Вы можете добавить правило allow с принципом, установленным на что-то вроде этого: 'arm: aws: iam :: : ' в политике ведра. Это должно позволить этому пользователю получить доступ. iam access добавляет * для имени пользователя. Тогда вы можете использовать разрешения iam, чтобы запретить доступ к ведру для аутентифицированных пользователей. – bwight