适用于 InfluxDB 的 Amazon Timestream 如何使用密钥 - Amazon Timestream

要获得与亚马逊 Timestream 类似的功能 LiveAnalytics,可以考虑适用于 InfluxDB 的亚马逊 Timestream。适用于 InfluxDB 的 Amazon Timestream 提供简化的数据摄取和个位数毫秒级的查询响应时间,以实现实时分析。点击此处了解更多信息。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

适用于 InfluxDB 的 Amazon Timestream 如何使用密钥

适用于 InfluxDB 的 Timestream 支持通过用户界面进行用户名和密码身份验证,以及用于最低权限客户端和应用程序连接的令牌凭证。适用于 InfluxDB 的 Timestream 用户在其组织内拥有 allAccess 权限,而令牌则可拥有任何一组权限。遵循安全 API 令牌管理的最佳实践,应创建用户以管理令牌,从而在组织内进行精细访问。有关适用于 InfluxDB 的 Timestream 管理最佳实践的更多信息,请参阅 Influxdata 文档

AWS Secrets Manager 是一项密钥存储服务,可用于保护数据库凭据、API 密钥和其他机密信息。然后,您可以将硬编码凭证改为对 Secrets Manager 进行 API 调用。这有助于确保别人在检查您的代码时不会泄露密钥,因为代码中没有密钥。有关 Secrets Manager 的概述,请参阅什么是 S AWS ecrets Manager

当您创建数据库实例时,InfluxDB 的 Timestream 会自动创建一个管理员密钥供您使用多用户轮换功能。 AWS Lambda 为轮换适用于 InfluxDB 的 Timestream 用户和令牌,您必须手动为要轮换的每个用户或令牌创建新的密钥。可使用 Lambda 函数将每个密钥配置为按计划轮换。设置新轮换密钥的过程包括上传 Lambda 函数代码、配置 Lambda 角色、定义新密钥以及配置密钥轮换计划。

密钥的内容

将适用于 InfluxDB 的 Timestream 用户凭证存储在密钥中时,请使用以下格式。

单用户:

{ "engine": "<required: must be set to 'timestream-influxdb'>", "username": "<required: username>", "password": "<required: password>", "dbIdentifier": "<required: DB identifier>" }

创建适用于 InfluxDB 的 Timestream 实例,管理员密钥会自动存储在 Secrets Manager 中,其中包含用于多用户 Lambda 函数的凭证。将 adminSecretArn 设置为数据库实例摘要页面上显示的 Authentication Properties Secret Manager ARN 值或管理员密钥的 ARN。要创建新的管理员密钥,您必须已拥有关联的凭证,且该凭证必须具备管理员权限。

将适用于 InfluxDB 的 Timestream 令牌凭证存储在密钥中时,请使用以下格式。

多用户:

{ "engine": "<required: must be set to 'timestream-influxdb'>", "org": "<required: organization to associate token with>", "adminSecretArn": "<required: ARN of the admin secret>", "type": "<required: allAccess or operator or custom>", "dbIdentifier": "<required: DB identifier>", "token": "<required unless generating a new token: token being rotated>", "writeBuckets": "<optional: list of bucketIDs for custom type token, must be input within plaintext panel, for example ['id1','id2']>", "readBuckets": "<optional: list of bucketIDs for custom type token, must be input within plaintext panel, for example ['id1','id2']>", "permissions": "<optional: list of permissions for custom type token, must be input within plaintext panel, for example ['write-tasks','read-tasks']>" }

将适用于 InfluxDB 的 Timestream 管理员凭证存储在密钥中时,请使用以下格式:

管理员密钥:

{ "engine": "<required: must be set to 'timestream-influxdb'>", "username": "<required: username>", "password": "<required: password>", "dbIdentifier": "<required: DB identifier>", "organization": "<optional: initial organization>", "bucket": "<optional: initial bucket>" }

要为密钥启用自动轮换,则该密钥必须使用正确的 JSON 结构。有关如何轮换适用于 InfluxDB 的 Timestream 密钥,请参阅轮换密钥

修改密钥

在适用于 InfluxDB 的 Timestream 实例创建过程中生成的凭证存储在账户的 Secrets Manager 密钥中。GetDbInstance响应对象包含一个,influxAuthParametersSecretArn其中包含此类机密的 Amazon 资源名称 (ARN)。仅在适用于 InfluxDB 的 Timestream 实例可用后才会填充该密钥。这是只读副本,因为此密钥的任何updates/modifications/deletions副本都不会影响创建的数据库实例。如果您删除此密钥,API 响应仍将引用已删除的密钥 ARN。

要在适用于 InfluxDB 的 Timestream 实例中创建新令牌而非存储现有令牌凭证,您可以通过将密钥中的 token 值留空,然后使用多用户轮换函数(将 AUTHENTICATION_CREATION_ENABLED Lambda 环境变量设置为 true),以创建非运算符令牌。如果您创建新令牌,密钥中定义的权限将分配给该令牌,且在首次成功轮换后不可更改。有关轮换密钥的更多信息,请参阅轮换 Secrets Manager AWS 密钥

如果已删除密钥,则不会删除适用于 InfluxDB 的 Timestream 实例中的关联用户或令牌。

轮换密钥

可使用适用于 InfluxDB 的 Timestream 单用户和多用户轮换 Lambda 函数轮换适用于 InfluxDB 的 Timestream 用户和令牌凭证。使用单用户 Lambda 函数轮换适用于 InfluxDB 的 Timestream 实例的用户凭证,并使用多用户 Lambda 函数轮换适用于 InfluxDB 的 Timestream 实例的令牌凭证。

使用单用户和多用户 Lambda 函数轮换用户和令牌为可选项。适用于 InfluxDB 的 Timestream 凭证永不过期,任何暴露的凭证都可能对数据库实例进行恶意操作。使用 Secrets Manager 轮换适用于 InfluxDB 的 Timestream 凭证的优势在于添加的安全层,可将暴露凭证的攻击向量限制在下一个轮换周期之前的时间范围内。如果数据库实例没有轮换机制,任何暴露的凭证都将保持有效,直至手动将其删除。

此外,您还可以配置 Secrets Manager 以根据指定的计划自动轮换密钥。这使您能够将长期密钥替换为短期密钥,这有助于显著减少泄露风险。有关使用 Secrets Manager 轮换密钥的更多信息,请参阅轮换 S AWS ecrets Manager 密钥

轮换用户

当使用单用户 Lambda 函数轮换用户时,每次轮换后都会为该用户分配新的随机密码。有关如何启用自动轮换的更多信息,请参阅为非数据库 Secrets Manager AWS 密钥设置自动轮换

轮换管理员密钥

要轮换管理员密钥,您可以使用单用户轮换函数。您需要将 enginedbIdentifier 值添加到密钥中,因为这些值不会在数据库初始化时自动填充。有关完整的密钥模板,请参阅密钥的内容

要查找适用于 InfluxDB 的 Timestream 实例的管理员密钥,可使用适用于 InfluxDB 的 Timestream 实例摘要页面中的管理员密钥 ARN。建议您轮换所有适用于 InfluxDB 的 Timestream 管理员密钥,因为管理员用户对适用于 InfluxDB 的 Timestream 实例具有更高的权限。

Lambda 轮换函数

您可以使用单用户轮换函数轮换适用于 InfluxDB 的 Timestream 用户,方法是使用带有新密钥的 密钥的内容,然后为适用于 InfluxDB 的 Timestream 用户添加必填字段。有关密钥轮换 Lambda 函数的更多信息,请参阅按 Lambda 函数轮换

您可以使用单用户轮换函数轮换适用于 InfluxDB 的 Timestream 用户,方法是使用带有新密钥的 密钥的内容,然后为适用于 InfluxDB 的 Timestream 用户添加必填字段。有关密钥轮换 Lambda 函数的更多信息,请参阅按 Lambda 函数轮换

单用户轮换函数使用密钥中定义的凭证,通过适用于 InfluxDB 的 Timestream 数据库实例进行身份验证,然后生成新的随机密码并为用户设置新密码。有关密钥轮换 Lambda 函数的更多信息,请参阅按 Lambda 函数轮换

Lambda 函数执行角色权限

使用以下 IAM 策略作为单用户 Lambda 函数的角色。该策略为 Lambda 函数提供执行适用于 InfluxDB 的 Timestream 用户的密钥轮换所需的权限。

将 IAM 政策中下面列出的所有项目替换为 AWS 账户中的值:

  • {rotating_secret_arn}:正在轮换的密钥 ARN 可在 Secrets Manager 密钥详细信息中找到。

  • {db_instance_arn}:适用于 InfluxDB 的 Timestream 实例 ARN 可在适用于 InfluxDB 的 Timestream 实例摘要页面上找到。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:DescribeSecret", "secretsmanager:GetSecretValue", "secretsmanager:PutSecretValue", "secretsmanager:UpdateSecretVersionStage" ], "Resource": "arn:aws:secretsmanager:us-east-2:111122223333:secret:MySecret" }, { "Effect": "Allow", "Action": [ "secretsmanager:GetRandomPassword" ], "Resource": "*" }, { "Action": [ "timestream-influxdb:GetDbInstance" ], "Resource": "arn:aws:timestream-influxdb:us-east-2:111122223333:db-instance/MyDbInstance", "Effect": "Allow" } ] }

轮换令牌

您可以使用多用户轮换函数轮换适用于 InfluxDB 的 Timestream 令牌,方法是使用带有新密钥的 密钥的内容,然后为适用于 InfluxDB 的 Timestream 令牌添加必填字段。有关密钥轮换 Lambda 函数的更多信息,请参阅按 Lambda 函数轮换

可使用适用于 InfluxDB 的 Timestream 多用户 Lambda 函数轮换适用于 InfluxDB 的 Timestream 令牌。在 Lambda 配置中,将 true 环境变量设置为 AUTHENTICATION_CREATION_ENABLED,以启用令牌创建。要创建新令牌,请使用 密钥的内容 作为密钥值。省略新密钥中的 token 键值对,并将 type 设置为 allAccess,或者定义特定权限并将类型设置为 custom。轮换函数将在第一个轮换周期中创建一个新令牌。轮换后,您无法通过编辑密钥更改令牌权限,且任何后续轮换都将使用在数据库实例中设置的权限。

Lambda 轮换函数

多用户轮换函数通过使用管理员密钥中的管理员凭证创建新的权限相同令牌,以轮换令牌凭证。Lambda 函数在创建替换令牌前会验证密钥中的令牌值,将新令牌值存储在密钥中,并删除旧令牌。如果 Lambda 函数正在创建新令牌,则会首先验证 AUTHENTICATION_CREATION_ENABLED 环境变量是否设置为 true、密钥中是否不存在令牌值以及令牌类型是否非运算符类型。

Lambda 函数执行角色权限

使用以下 IAM 策略作为多用户 Lambda 函数的角色。该策略为 Lambda 函数提供执行适用于 InfluxDB 的 Timestream 令牌的密钥轮换所需的权限。

将 IAM 政策中下面列出的所有项目替换为 AWS 账户中的值:

  • {rotating_secret_arn}:正在轮换的密钥 ARN 可在 Secrets Manager 密钥详细信息中找到。

  • {authentication_properties_admin_secret_arn}:适用于 InfluxDB 的 Timestream 管理员密钥 ARN 可在适用于 InfluxDB 的 Timestream 实例摘要页面上找到。

  • {db_instance_arn}:适用于 InfluxDB 的 Timestream 实例 ARN 可在适用于 InfluxDB 的 Timestream 实例摘要页面上找到。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:DescribeSecret", "secretsmanager:GetSecretValue", "secretsmanager:PutSecretValue", "secretsmanager:UpdateSecretVersionStage" ], "Resource": "arn:aws:secretsmanager:us-east-2:111122223333:secret:MySecret" }, { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": "arn:aws:secretsmanager:us-east-2:111122223333:secret:MyAdminSecret" }, { "Effect": "Allow", "Action": [ "secretsmanager:GetRandomPassword" ], "Resource": "*" }, { "Action": [ "timestream-influxdb:GetDbInstance" ], "Resource": "arn:aws:timestream-influxdb:us-east-2:111122223333:db-instance/MyDbInstance", "Effect": "Allow" } ] }