Я слежу за документы при получении сертификатов из s3 при развертывании нового экземпляра в эластичном beanstalk. Инструкции довольно просты: создайте файл конфигурации в app-root/.ebextensions
это гласит:
Resources:
AWSEBAutoScalingGroup:
Metadata:
AWS::CloudFormation::Authentication:
S3Auth:
type: "s3"
buckets: ["elasticbeanstalk-us-west-2-123456789012"]
roleName:
"Fn::GetOptionSetting":
Namespace: "aws:autoscaling:launchconfiguration"
OptionName: "IamInstanceProfile"
DefaultValue: "aws-elasticbeanstalk-ec2-role"
files:
# Private key
/etc/pki/tls/certs/server.key:
mode: "000400"
owner: root
group: root
authentication: "S3Auth"
source: https://s3-us-west-2.amazonaws.com/elasticbeanstalk-us-west-2-123456789012/server.key
где ссылки указывают на местоположение вашего сертификата / ключа / чего угодно.
Однако при развертывании пакета приложений (zip) сборка завершается ошибкой. [Errno 404] HTTP Error 404...
предполагая, что мои файлы не могут быть найдены в указанном месте, что противоречит факт что файлы являются в точно указанном месте, так как я могу aws s3 cp s3://<pasted-link-to-file> .
их из моей командной строки (конечно, в том же регионе).
Кроме того, на первый взгляд, это не похоже на проблему с разрешениями, потому что я бы ожидал чего-то вроде «Доступ запрещен», если бы это было так; политика корзины предоставляет следующие действия для aws-elasticbeanstalk-ec2-role
:
"Action": [
"s3:ListBucket",
"s3:ListBucketVersions",
"s3:GetObject",
"s3:GetObjectVersion"
]
Я также приложил полную политику доступа к s3 к aws-elasticbeanstalk-ec2-role
в IAM.
Но тот факт, что я могу получить доступ к файлам из cli и aws-elasticbeanstalk-ec2-role
не может их найти, предполагает, что а) что-то может быть не так с моей настройкой: файлы на s3, разрешения s3, конфигурация в .ebextensions
или б) документы AWS по этому поводу совершенно не в порядке.
Решил это, явно указав:
roleName: "aws-elasticbeanstalk-ec2-role"
вместо того:
roleName:
"Fn::GetOptionSetting":
Namespace: "aws:autoscaling:launchconfiguration"
OptionName: "IamInstanceProfile"
DefaultValue: "aws-elasticbeanstalk-ec2-role"
в .ebextensions/my_conf.config
.
Это может быть связано с тем, что ключ конфигурационного файла и политика S3 относятся к «roleName», а не «IamInstanceProfile».
После устранения неполадок я понял, что проблема:
"Fn::GetOptionSetting":
Namespace: "aws:autoscaling:launchconfiguration"
OptionName: "IamInstanceProfile"
DefaultValue: "aws-elasticbeanstalk-ec2-role"
Эта опция возвращает профиль экземпляра. Однако для получения учетных данных нам понадобится роль AWS, связанная с профилем экземпляра.
Следующая команда вернет 404:
curl -vvv http://169.254.169.254/latest/meta-data/iam/security-credentials/{Instance-Profile}
Однако следующая команда работает и возвращает временные учетные данные:
curl -vvv http://169.254.169.254/latest/meta-data/iam/security-credentials/{Instance-ROLE}