У меня есть приложение AWS Elastic Beanstalk Rails, которое я настраиваю с помощью сценария конфигурации для извлечения некоторых файлов из корзины 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?
Из вашего экземпляра EC2 вам также нужно будет получить временные учетные данные в метаданных экземпляра:
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/<your-iam-role-name>
Затем вы должны использовать предоставленный доступ и секретный ключ для доступа к вашей корзине S3.
Если это доступ между учетными записями, убедитесь, что он не связан с заголовками ACL, как указано здесь: https://stackoverflow.com/a/34055538/1736679 (подробнее в этой теме: https://github.com/aws/aws-cli/issues/1674)
Также дважды проверьте среду / пользователя, из которого вы работаете, чтобы увидеть, нет ли переопределяющих ключей (1AWS_ACCESS_KEY1 и т. Д.) В /etc/environment
или ~/.aws/credentials