web-dev-qa-db-ja.com

.ebextensionsを介したElastic Beanstalk S3アクセス

.ebextensionsフォルダに単純なファイルがあります。

-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

複数の回答によると、S3バケットにaws-elasticbeanstalk-ec2-roleロールへのアクセスを許可する方法です。

しかし、/var/log/eb-activity.logで403エラーが発生し続けます

[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)

S3アクセスポリシーを手動でaws-elasticbeanstalk-ec2-roleロールに追加すると、すべてが機能し、URLSやその他にスペルミスがないことがわかっている場合、EC2インスタンスは間違いなく正しいロールにあります。

なにが問題ですか?

PS。 「認証」設定の有無にかかわらず、filesセクションを試しました。

9
Strelok

私はそれを理解しました、そしてこれをもっと早く手に入れなかったので少しばかげています。

したがって、AWS::CloudFormation::Authenticationパス、ソリューションはもちろんです:

バケットポリシーでaws-elasticbeanstalk-ec2-roleが許可されていることを確認してください。DOH!!

次のようになります。

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

IAMコンソールからARNを取得できます。

.ebextensions設定ファイルの指示は、EBデプロイツールに認証に何を使用するかを伝えるだけですが、ソースバケット(明らかにプライベートの場合)はそのプリンシパルアクセスを許可する必要があります!!!

9
Strelok