Может помочь следующее:
- Роли IAM (Если ваше приложение уже работает в AWS, роли экземпляра могут помочь вам получить временные токены для доступа к ресурсам, таким как S3. AWS CLI ИЛИ официальные SDK уже созданы с этими возможностями, и вам не нужно реализовывать какой-либо пользовательский код. Чтобы это работало, вы назначаете Роль 'X' для экземпляра EC2, а Роль 'X' должна иметь отображение политики, в котором вы определяете права доступа)
Пример политики может выглядеть примерно так:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowAccessToObjects",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:GetObjectVersion",
"s3:GetObjectVersionAcl",
"s3:ListMultipartUploadParts"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::<Bucket_Name>/*"
],
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"w.x.y.z/32"
]
}
}
},
{
"Sid": "AllowAccessToBucket",
"Action": [
"s3:PutObject",
"s3:ListBucket",
"s3:GetBucketVersioning",
"s3:ListBucketVersions"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::<Bucket_Name>"
],
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"a.b.c.d/32"
]
}
}
}
]
}
Обычно лучший способ - никогда не иметь никаких статически предоставленных учетных данных вообще. В случае, если реализация чего-либо подобного вообще невозможна, тогда:
- Другими вариантами может быть сохранение секретов во внешнем хранилище секретных данных, таких как Vault et c., И когда контейнер запускается, секреты могут быть извлечены и введены перед загрузкой приложения. Затем они доступны как ENVs