.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
セクションを試しました。
私はそれを理解しました、そしてこれをもっと早く手に入れなかったので少しばかげています。
したがって、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デプロイツールに認証に何を使用するかを伝えるだけですが、ソースバケット(明らかにプライベートの場合)はそのプリンシパルアクセスを許可する必要があります!!!