Akses Beanstalk S3 elastis melalui ekstensi

9

Saya memiliki file sederhana di .ebextensionsfolder saya :

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

Yang menurut beberapa jawaban adalah cara untuk memberikan akses ember S3 ke aws-elasticbeanstalk-ec2-roleperan tersebut.

Tapi saya terus mendapatkan kesalahan 403 di /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)

Jika saya secara manual menambahkan kebijakan akses S3 ke aws-elasticbeanstalk-ec2-roleperan semuanya berfungsi, jadi saya tahu saya tidak memiliki salah eja dalam URL atau apa pun, contoh EC2 pasti dalam peran yang benar.

Apa yang salah?

PS. Saya mencoba filesbagian dengan atau tanpa pengaturan 'otentikasi'.

Strelok
sumber

Jawaban:

9

Saya sudah memikirkannya dan saya merasa sedikit konyol karena tidak mengambil ini lebih cepat.

Jadi bagi siapa saja yang menggunakan AWS::CloudFormation::Authenticationpath, solusinya tentu saja adalah:

Pastikan kebijakan BUCKET Anda memungkinkan peran aws-elasticbeanstalk-ec2 Anda. DOH !!

Seharusnya terlihat seperti ini:

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

Anda dapat mengambil ARN dari konsol IAM.

Instruksi dalam file konfigurasi .ebextensions Anda hanya memberi tahu alat penyebaran EB apa yang harus digunakan untuk mengotentikasi, tetapi ember sumber Anda (jika jelas-jelas pribadi) perlu mengizinkan akses utama itu !!!

Strelok
sumber