Accès à Elastic Beanstalk S3 via .ebextensions

9

J'ai un fichier simple dans mon .ebextensionsdossier:

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

Ce qui, selon plusieurs réponses, est le moyen d'accorder l'accès au compartiment S3 au aws-elasticbeanstalk-ec2-rolerôle.

Mais je continue d'obtenir l'erreur 403 dans /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 j'ajoute manuellement une stratégie d'accès S3 au aws-elasticbeanstalk-ec2-rolerôle, tout fonctionne, donc je sais que je n'ai pas d'orthographe erronée dans les URL ou quoi que ce soit d'autre, l'instance EC2 est définitivement dans le rôle correct.

Qu'est-ce qui ne va pas?

PS. J'ai essayé la filessection avec ou sans le paramètre «authentification».

Strelok
la source

Réponses:

9

Je l'ai compris et je me sens un peu idiot de ne pas l'avoir ramassé plus tôt.

Donc, pour tous ceux qui utilisent le AWS::CloudFormation::Authenticationchemin, la solution est bien sûr:

Assurez-vous que votre stratégie BUCKET autorise votre rôle aws-elasticbeanstalk-ec2. DOH !!

Ça devrait ressembler a quelque chose comme ca:

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

Vous pouvez récupérer l'ARN à partir de la console IAM.

Les instructions dans vos fichiers de configuration .ebextensions indiquent uniquement aux outils de déploiement EB ce qu'il faut utiliser pour s'authentifier, mais votre compartiment source (s'il est privé évidemment) doit autoriser cet accès principal !!!

Strelok
la source