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'.

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!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.