Gewähren Sie dem Lesezugriff der EC2-IAM-Rolle auf den S3-Bucket


10

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-roleIAM-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?

Antworten:


6

Von Ihrer EC2-Insectance müssen Sie auch die temporären Anmeldeinformationen in den Instanzmetadaten abrufen:

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

Sie müssen dann den bereitgestellten Zugriff und den geheimen Schlüssel verwenden, um auf Ihren S3-Bucket zuzugreifen.


1
Wenn Sie dies über AWS SDKs für die bestimmte Sprache einer Anwendung tun, kümmert sich das SDK intern darum, die temporären Anmeldeinformationen abzurufen und sie dann basierend auf bestimmten Zeitintervallen zu aktualisieren.
Whokares

2
Wie verwenden Sie den Zugriffs- und den geheimen Schlüssel, um auf den S3-Bucket zuzugreifen? Hast du ein beispiel Prost
Céline Aussourd

0

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/environmentoder keine überschreibenden Schlüssel (1AWS_ACCESS_KEY1 usw.) vorhanden sind~/.aws/credentials

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.