Accesso elastico Beanstalk S3 tramite .ebextensions


9

Ho un semplice file nella mia .ebextensionscartella:

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

Che, in base a risposte multiple, è il modo di concedere l'accesso bucket al aws-elasticbeanstalk-ec2-roleruolo S3 .

Ma continuo a ricevere l'errore 403 /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)

Se aggiungo manualmente una politica di accesso S3 al aws-elasticbeanstalk-ec2-roleruolo che tutto funziona, quindi so che non ho errori di ortografia negli URL o altro, l'istanza EC2 ha sicuramente il ruolo corretto.

Che c'è?

PS. Ho provato la filessezione con o senza l'impostazione di "autenticazione".

Risposte:


9

L'ho capito e mi sento un po 'sciocco per non averlo capito prima.

Quindi, per chiunque utilizzi AWS::CloudFormation::Authenticationpath, la soluzione ovviamente è:

Assicurati che la tua politica BUCKET consenta il tuo ruolo aws-elasticbeanstalk-ec2. DOH !!

Dovrebbe assomigliare a qualcosa di simile a questo:

{
    "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"
                ]
            }
        }
    ]
}

Puoi prendere l'ARN dalla console IAM.

Le istruzioni nei tuoi file di configurazione .ebextensions dicono solo agli strumenti di distribuzione di EB cosa usare per autenticare, ma il tuo bucket di origine (se privato ovviamente) deve consentire l'accesso principale !!!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.