Предоставьте роли EC2 IAM доступ на чтение к корзине S3

10

У меня есть приложение AWS Elastic Beanstalk Rails, которое я настраиваю с помощью скрипта config для извлечения некоторых файлов из корзины S3. Когда я запускаю приложение, я продолжаю получать следующую ошибку в журналах ( имя корзины было изменено в целях безопасности ):

Failed to retrieve https://s3.amazonaws.com/my.bucket/bootstrap.sh: HTTP Error 403 : <?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Access Denied</Message>

Конфиг файл:

packages:
  yum:
    git: []

files:
  /opt/elasticbeanstalk/hooks/appdeploy/pre/01a_bootstrap.sh:
    mode: "00755"
    owner: root
    group: root
    source: https://s3.amazonaws.com/my.bucket/bootstrap.sh

Среда Elastic Beanstalk настроена с aws-elasticbeanstalk-ec2-roleролью IAM в качестве роли экземпляра. Эта роль имеет следующую политику:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:Get*",
        "s3:List*"
      ],
      "Resource": "arn:aws:s3:::my.bucket/*"
    }
  ]
}

И ведро S3 имеет следующую политику:

{
"Version": "2008-10-17",
"Statement": [
    {
        "Sid": "Stmt1371012493903",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::<account #>:role/aws-elasticbeanstalk-ec2-role"
        },
        "Action": [
            "s3:List*",
            "s3:Get*"
        ],
        "Resource": "arn:aws:s3:::my.bucket/*"
    }
]
}

Что мне нужно изменить, чтобы мои экземпляры EC2 получили доступ к моей корзине S3?

dignoe
источник

Ответы:

6

Из вашей инспекции EC2 вам также придется извлечь временные учетные данные в метаданных экземпляра:

curl http://169.254.169.254/latest/meta-data/iam/security-credentials/<your-iam-role-name>

Затем вы должны использовать предоставленный доступ и секретный ключ для доступа к вашему S3 ведро.

Ален CELESTE
источник
1
Когда вы делаете это через AWS SDK для конкретного языка из приложения, SDK внутренне позаботился о том, чтобы получить временные учетные данные, а затем обновить их на основе определенных временных интервалов.
Whokares
2
Как вы используете доступ и секретный ключ для доступа к корзине S3? У вас есть пример? Приветствия
Селин Ауссурд
0

Если это доступ к нескольким учетным записям, убедитесь, что он не связан с заголовками ACL, как указано здесь: https://stackoverflow.com/a/34055538/1736679 (дополнительная информация в теме этого выпуска: https://github.com/aws/aws -cli / Issues / 1674 )

Также дважды проверьте среду / пользователя, из которого вы работаете, чтобы увидеть, нет ли переопределяющих ключей (1AWS_ACCESS_KEY1 и т. Д.) В /etc/environmentили~/.aws/credentials

Efren
источник