Elastic Beanstalk S3-Zugriff über .ebextensions

9

Ich habe eine einfache Datei in meinem .ebextensionsOrdner:

00-myconfig.config

Resources:
    AWSEBAutoScalingGroup:
        Metadata:
            AWS::CloudFormation::Authentication:
                S3Access:
                    type: S3
                    roleName: aws-elasticbeanstalk-ec2-role
                    buckets: my-bucket
files:
    "/tmp/ca-bundle.zip":
        mode: "000755"
        owner: root
        group: root
        source: https://s3-ap-southeast-2.amazonaws.com/my-bucket/ca/ca-bundle.zip
        authentication: S3Access

Dies ist nach mehreren Antworten der Weg, um S3-Bucket-Zugriff auf die aws-elasticbeanstalk-ec2-roleRolle zu gewähren .

Aber ich bekomme weiterhin den 403 Fehler in /var/log/eb-activity.log

[2015-08-26T01:27:03.544Z] INFO  [22320] - [Application update/AppDeployStage0/EbExtensionPreBuild/Infra-EmbeddedPreBuild] : Activity execution failed, because: Failed to retrieve https://s3-ap-southeast-2.amazonaws.com/my-bucket/ca/ca-bundle.zip: HTTP Error 403 : <?xml version="1.0" encoding="UTF-8"?> (ElasticBeanstalk::ExternalInvocationError)

Wenn ich der aws-elasticbeanstalk-ec2-roleRolle manuell eine S3-Zugriffsrichtlinie hinzufüge, funktioniert alles, sodass ich weiß, dass ich keine Rechtschreibfehler in URLs oder anderen Elementen habe, ist die EC2-Instanz definitiv in der richtigen Rolle.

Was ist falsch?

PS. Ich habe den filesAbschnitt mit oder ohne die Einstellung "Authentifizierung" ausprobiert .

Strelok
quelle

Antworten:

9

Ich habe es herausgefunden und fühle mich ein bisschen albern, weil ich das nicht früher aufgegriffen habe.

Für jeden, der AWS::CloudFormation::AuthenticationPfad verwendet, lautet die Lösung natürlich:

Stellen Sie sicher, dass Ihre BUCKET-Richtlinie Ihre aws-elasticbeanstalk-ec2-Rolle zulässt. DOH !!

Es sollte ungefähr so ​​aussehen:

{
    "Id": "Policy1111Blah",
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1440Blah",
            "Action": [
                "s3:GetObject"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::my-bucket/*",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::11111111111:role/aws-elasticbeanstalk-ec2-role"
                ]
            }
        }
    ]
}

Sie können die ARN von der IAM-Konsole abrufen.

Die Anweisungen in Ihren .ebextensions-Konfigurationsdateien teilen den EB-Bereitstellungstools nur mit, was zur Authentifizierung verwendet werden soll, aber Ihr Quell-Bucket (wenn er offensichtlich privat ist) muss diesen Hauptzugriff zulassen !!!

Strelok
quelle