Acesso ao Sastic Beanstalk S3 via .ebextensions

6

Eu tenho um arquivo simples na minha pasta .ebextensions :

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

Que, de acordo com várias respostas, é a maneira de conceder acesso ao bucket S3 à função aws-elasticbeanstalk-ec2-role .

Mas continuo recebendo o erro 403 em /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 eu adicionar manualmente uma política de acesso S3 à função aws-elasticbeanstalk-ec2-role , tudo funciona, por isso sei que não tenho erros de ortografia em URLS ou qualquer outra coisa, a instância do EC2 está definitivamente na função correta.

O que está errado?

PS. Eu tentei a seção files com ou sem a configuração 'autenticação'.

    
por Strelok 26.08.2015 / 07:28

1 resposta

5

Eu percebi isso e me sinto um pouco boba por não pegar isso mais cedo.

Então, para qualquer pessoa que use AWS::CloudFormation::Authentication path, a solução é:

Certifique-se de que sua política BUCKET permite sua função aws-elasticbeanstalstalk-ec2. DOH !!

Deve ser algo assim:

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

Você pode pegar o ARN no console do IAM.

As instruções nos seus arquivos de configuração .ebextensions dizem apenas às ferramentas de implantação do EB o que usar para autenticar, mas o seu intervalo de origem (se for privado, obviamente) precisa permitir o acesso principal !!!

    
por 26.08.2015 / 09:51