在 AWS 中的何处存储应用程序商店的配置

Where to store configuration for an application store in AWS

我正在构建一个使用 EC2、lambda、API 网关、S3、SQS 和其他服务的 AWS 应用程序。

是否有一种机制来存储可以在多个组件之间共享的全局应用程序设置

我想避免为每个组件设置环境变量;相反,每个组件应该从 配置存储库 .

读取配置

我尝试使用 S3 配置文件,但存储桶具有其他组件无法猜到的唯一 URL。在 RDS 中存储配置不起作用,因为 RDS 实例也具有唯一名称。

KMS 可以用于此吗?如果是,我如何将 S3 存储桶名称存储和检索到 KMS 中?我只找到了一种存储 256 位加密密钥的方法。

我意识到这是一个老问题,但专门针对:

Can KMS be used for this? If yes, how do I store and retrieve the S3 bucket name into KMS? I only found a way to store a 256 bit encryption key.

答案是否定的。 KMS 不是数据存储。 KMS 仅处理特定项目的加密或解密。密文的存储取决于您(或其他 AWS 服务)。

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 中,值可以存储为 StringStringListSecureString

SecureString 可用于存储密码,这可以使用内置或用户定义的 KMS 密钥进行保护。 所以 KMS 密钥只是提供了一个选项(密钥)来保护我们存储在各种 AWS 资源中的数据。

为了存储更安全的信息可以使用 AWS Secret Manager

定价:

  • Parameter Store 对于标准参数是免费的,而高级参数是 charged 每个高级参数每月 $0.05。
  • 秘密管理员 charged 每个秘密每月 0.40 美元。

标准参数足以存储正常使用的参数。但请确保不要过于频繁地获取参数,并有重试逻辑从 AWS 参数存储中获取参数,因为有 速率限制 到位(AWS 包将在内部处理重试逻辑,所以我们不需要担心这一点。它甚至提供了一个选项,可以在一段时间后刷新配置值)。最好在应用程序启动时获取所有必需的配置值并将其存储在 in-memory cache.

Parameter Store 和Secret Manager 使用路径形式的命名。这对于存储特定于环境的配置以及使用策略限制对基于路径的参数的访问很有用。

示例:

  • 参数名称 --> /AppName/Environment/ParameterName --> /app/dev/version, /app/prod/version(允许更长的路径)
  • 根据路径(名称)策略进行限制
{
    "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/*"
        },
    ]
}