Elastic Beanstalk S3 acceso a través de .ebextensions

9

Tengo un archivo simple en mi .ebextensionscarpeta:

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

De acuerdo con múltiples respuestas, esta es la forma de otorgar a S3 acceso a la aws-elasticbeanstalk-ec2-rolefunción.

Pero sigo recibiendo el error 403 en /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)

Si agrego manualmente una política de acceso S3 a la aws-elasticbeanstalk-ec2-rolefunción, todo funciona, por lo que sé que no tengo errores ortográficos en URLS o cualquier otra cosa, la instancia de EC2 está definitivamente en la función correcta.

¿Qué está mal?

PD. Probé la filessección con o sin la configuración de 'autenticación'.

Strelok
fuente

Respuestas:

9

Lo he descubierto y me siento un poco tonto por no haber captado esto antes.

Entonces, para cualquiera que use la AWS::CloudFormation::Authenticationruta, la solución, por supuesto, es:

Asegúrese de que su política de CUBO permita su rol aws-elasticbeanstalk-ec2. DOH !!

Debería verse más o menos así:

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

Puede tomar el ARN desde la consola de IAM.

¡Las instrucciones en sus archivos de configuración .ebextensions solo le dicen a las herramientas de implementación de EB qué usar para autenticarse, pero su grupo fuente (si es privado obviamente) necesita permitir ese acceso principal!

Strelok
fuente