我正在构建一个使用EC2,lambda,API网关,S3,SQS和其他服务的AWS应用程序。
是否存在可以在多个组件之间共享的存储全局应用程序设置的机制?
我想避免为每个组件设置环境变量;相反,每个组件都应该从配置库中读取配置。
我尝试使用S3配置文件,但是存储桶具有其他组件无法猜到的唯一网址。在RDS中存储配置并不起作用,因为RDS实例也具有唯一的名称。
可以使用KMS吗?如果是,我如何将S3存储桶名称存储和检索到KMS中?我只找到了存储256位加密密钥的方法。
答案 0 :(得分:1)
我意识到这是一个老问题,但专门针对:
<块引用>KMS 可以用于此吗?如果是,如何将 S3 存储桶名称存储和检索到 KMS 中?我只找到了一种存储 256 位加密密钥的方法。
答案是否定的。 KMS 不是数据存储。 KMS 仅处理特定项目的加密或解密。密文的存储取决于您(或其他 AWS 服务)。
答案 1 :(得分:1)
AWS System Manager Parameter Store 可用于存储配置。
可以使用 AWS API 直接在您的应用程序中使用这些配置。 AWS 还提供了从参数存储中获取值的包。 示例:对于 dotnet 核心 -- https://aws.amazon.com/blogs/developer/net-core-configuration-provider-for-aws-systems-manager/
在 Parameter Store 中,值可以存储为 String
、StringList
或 SecureString
。
SecureString
可用于存储密码,并可使用内置或用户定义的 KMS 密钥进行保护。
因此,KMS 密钥只是提供了一个选项(密钥)来保护我们存储在各种 AWS 资源中的数据。
为了存储更安全的信息,可以使用 AWS Secret Manager。
定价:
标准参数足以存储正常使用的参数。但请确保不要过于频繁地获取参数,并具有从 AWS 参数存储中获取参数的重试逻辑,因为存在速率限制(AWS 包将在内部处理重试逻辑,因此我们不会需要担心。它甚至提供了在一段时间后刷新配置值的选项)。最好在应用程序启动时获取所有必需的配置值并将其存储在 in-memory cache
中。
Parameter Store 和 Secret Manager 以路径的形式使用命名。这对于存储特定于环境的配置以及使用策略限制对基于路径的参数的访问非常有用。
示例:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowSSMAccess",
"Effect": "Allow",
"Action": [
"ssm:PutParameter",
"ssm:DeleteParameter",
"ssm:GetParameterHistory",
"ssm:GetParametersByPath",
"ssm:GetParameters",
"ssm:GetParameter",
"ssm:DescribeParameters",
"ssm:DeleteParameters"
],
"Resource": "arn:aws:ssm:*:*:parameter/*"
},
]
}