2013-11-18 4 views
2

У меня есть ниже клавиш под ковшом demo.for.customersIAM политики в список конкретных папок внутри S3 ведра для пользователя

demo.for.customers/customer1/ 
demo.for.customers/customer2/ 

Теперь у меня есть 2 клиентов, а именно customer1 и customer2 , Это то, что я хочу:

  1. Даруй им доступ только demo.for.customers ведро.
  2. customer1 должен иметь доступ только demo.for.customers/customer1/, а customer2 должен иметь доступ только demo.for.customers/customer2/.

И я могу достичь этого с помощью нижеприведенной политики (я создаю политику для каждого клиента, поэтому я вставляю ее только для клиента1 ниже). Я определил эту политику в IAM, а не в S3.

{ 
"Version":"2012-10-17", 
"Statement": [ 
    { 
    "Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"], 
    "Effect": "Allow", 
    "Resource": ["arn:aws:s3:::*"] 
    }, 
    { 
     "Action": ["s3:ListBucket"], 
     "Effect": "Allow", 
     "Resource": ["arn:aws:s3:::demo.for.customers"], 
     "Condition":{"StringEquals":{"s3:prefix":["","customer1/"],"s3:delimiter":["/"]}} 
    }, 
    { 
     "Effect": "Allow", 
     "Action": ["s3:*"], 
     "Resource": ["arn:aws:s3:::demo.for.customers/customer1/*"] 
    } 
] 
} 

Проблема:

  1. customer1 способен видеть мое ведро, хотя он не может получить доступ к любому из них. Я не хочу этого. Он должен быть способен увидеть только demo.for.customers
  2. Customer1 также может видеть demo.for.customers/customer2, хотя он не может получить к нему доступ. Это очень неприемлемо, так как я не хочу, чтобы он даже видел, какие другие папки для клиентов у меня под этим ведром.

ВОПРОСЫ:

  1. После этого много прибегая к помощи, я узнал, что нет никакого способа список конкретных ведер. Это правда?
  2. Однако я должен найти способ перечислить только определенные папки внутри ведра для данного пользователя. Как это сделать?

Спасибо.

ответ

1

Что касается ваших проблем:

  1. К сожалению, нет никакой возможности перечислить только некоторые ведра. Если целью является только разрешение доступа к одному известному ведру, я бы полностью удалил первый оператор, поскольку он не добавляет никакого значения (ведро уже известно и не нужно будет перечислять).
  2. Можете ли вы показать код, который вы используете, чтобы перечислить содержимое ведра? Основываясь на том, что вы показали здесь, я бы ожидал, что client1 сможет отображать содержимое ведра в корне их префикса и нигде больше.

Что касается ваших вопросов:

  1. Да, нет никакого способа, чтобы перечислить некоторые ведра. API кодов списка - это операция «все или ничего».
  2. Это делается с помощью префикса. На каком языке вы используете? У нас есть образец для SDK для мобильных устройств AWS, который использует Token Vending Machine для доставки per user access to an S3 bucket.
+0

+1 для вашего времени. Я использую 'aws s3 ls s3: // demo.for.customers' и' aws s3api list-objects -bucket demo.for.customers' команды для моего тестирования. Кроме того, я также проверяю консоль и запускаю простой рубиновый скрипт, который использует AWS ruby ​​SDK. Я ожидаю, что мой клиент получит консольный доступ, и поэтому я очень обеспокоен ** перечислением ** папок внутри ведра. Я не хочу, чтобы какой-либо клиент так даже ** смотрел ** какие другие папки находятся в ковше. – slayedbylucifer

+0

Есть ли конкретная причина, по которой вашим пользователям нужен доступ в консоль? Это немного осложняет ситуацию. –

+0

Да. Мои клиенты будут загружать вспомогательные данные в S3. И они не люди с техническими навыками. Следовательно, я не хочу, чтобы они столкнулись с проблемами использования S3 API для того, чтобы сделать то же самое. Фактически, они просто хотят получить данные для меня самым простым способом. – slayedbylucifer

 Смежные вопросы

  • Нет связанных вопросов^_^