Ich habe eine AWS Elastic Beanstalk Rails-App, die ich über das Konfigurationsskript konfiguriere, um einige Dateien aus einem S3-Bucket abzurufen. Wenn ich die Anwendung starte, wird in den Protokollen immer wieder der folgende Fehler angezeigt (der Name des Buckets wurde aus Sicherheitsgründen geändert ):
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>
Konfigurationsdatei:
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
Die Elastic Beanstalk-Umgebung wird mit der aws-elasticbeanstalk-ec2-role
IAM-Rolle als Instanzrolle eingerichtet. Diese Rolle hat folgende Richtlinien:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:Get*",
"s3:List*"
],
"Resource": "arn:aws:s3:::my.bucket/*"
}
]
}
Für den S3-Bucket gelten folgende Richtlinien:
{
"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/*"
}
]
}
Was muss ich ändern, um meinen EC2-Instanzen Zugriff auf meinen S3-Bucket zu gewähren?
Wenn es sich um kontenübergreifenden Zugriff handelt, überprüfen Sie, ob er nicht mit ACL-Headern zusammenhängt, wie hier erwähnt: /programming//a/34055538/1736679 (weitere Informationen in diesem Issue-Thread: https://github.com/aws/aws -cli / issue / 1674 )
Überprüfen Sie auch die Umgebung / den Benutzer, in der / dem Sie ausgeführt werden, um festzustellen, ob in
/etc/environment
oder keine überschreibenden Schlüssel (1AWS_ACCESS_KEY1 usw.) vorhanden sind~/.aws/credentials
quelle