2015-10-22 4 views
9

Мы хотим сохранить некоторые данные на S3 и разрешать доступ к ним только экземплярам EC2 или конкретному пользователю с определенной ролью IAM. К сожалению, у нас есть некоторые проблемы с этим.Как ограничить доступ к ведомости S3 для конкретной роли IAM?

Мы установили политику на ведре, как этот

{ 
"Version": "2012-10-17", 
"Id": "SamplePolicy", 
"Statement": [ 

    { 
     "Sid": "Stmt1331136294179", 
     "Effect": "Deny", 
     "NotPrincipal": { 
      "AWS": [ 
       "arn:aws:iam::our-account-number:user/the-user", 

       "arn:aws:iam::our-account-number:role/the-role" 
      ] 
     }, 
     "Action": "s3:*", 
     "Resource": "arn:aws:s3:::the-bucket/*" 
    }, 
     { 
     "Sid": "Stmt1331136364169", 
     "Effect": "Allow", 
     "Principal": { 
      "AWS": [ 
       "arn:aws:iam::our-account-number:user/the-user", 
       "arn:aws:iam::our-account-number:role/the-role" 
      ] 
     }, 
     "Action": "s3:*", 
     "Resource": "arn:aws:s3:::the-bucket/*" 
    } 

]} 

Когда мы получаем доступ к Bucket (используя Boto) с пользователями ключ работает нормально, с локального компьютера или любого экземпляра EC2.

Но, когда мы достигаем ведро с Бото мы получаем

ClientError: An error occurred (AccessDenied) when calling the GetObject operation: Access Denied

Я подтвердил, что экземпляр имеет правильную IAM роль

curl http://169.254.169.254/latest/meta-data/iam/info/ 
{ 
    "Code" : "Success", 
    "LastUpdated" : "2015-10-22T09:09:31Z", 
    "InstanceProfileArn" : "our-account-number:instance-profile/the-role", 
    "InstanceProfileId" : "instance-rpofile-id" 
} 

Я также попытался удалить политику из ковша, что действительно делает его доступным снова. Любые идеи, как справиться с этим?

Образец, который я использовал здесь, является упрощенной версией, которую я делал для отладки. В производстве мы хотим, чтобы объект был зашифрован с помощью KMS и также имел политику доступа к ключу. Нам нравится это решение, и мы предпочитаем хранить его, если можем.

Благодаря

+0

Можете ли вы показать свою политику роль? –

+0

'код { "Версия": "2012-10-17", "Заявление": [{ "Эффект": "Разрешить", "Действие": "s3: *", "Ресурс": "*" } ] } ' –

ответ

5

Одна ошибка с этим, что я сделал много раз вовлекает ваш ARN

Для некоторых разрешений, вам нужно это на самом ведре (нет/*) ... а некоторые вам нужно на это содержимое.

Я бы попытаться использовать то, что вы в настоящее время, включают в себя только как, так что-то вроде ...

"Resource": ["arn:aws:s3:::the-bucket/*", "arn:aws:s3:::the-bucket"] 
3

Проблема здесь в том, что для NotPrincipal вы должны предоставить конкретную сессионный роль. К сожалению, при использовании InstanceProfiles (или Lambda) эта роль сеанса является динамической. AWS не поддерживает подстановочные знаки в основном поле, поэтому в принципе невозможно использовать NotPrincipal с InstanceProfile.

См AWS ответ поддержки здесь, что признает его как известное ограничение: https://forums.aws.amazon.com/message.jspa?messageID=740656#740656

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