1

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

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

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

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

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

4

2 回答 2

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

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

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

价钱:

标准参数足以存储正常使用的参数。但请确保不要过于频繁地获取参数,并且有一个重试逻辑来从 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/*"
        },
    ]
}
于 2021-07-05T07:57:20.537 回答
1

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

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

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

于 2021-07-03T18:47:54.560 回答