适用于 LiveAnalytics 的 Amazon Timestream 基于身份的策略示例 - Amazon Timestream

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

适用于 LiveAnalytics 的 Amazon Timestream 基于身份的策略示例

默认情况下,IAM 用户和角色没有创建或修改适用于 LiveAnalytics 的 Timestream 资源的权限。它们还无法使用 AWS 管理控制台、CQLSH、AWS CLI 或 AWS API 执行任务。IAM 管理员必须创建 IAM 策略,以便为用户和角色授予权限以对所需的指定资源执行特定的 API 操作。然后,管理员必须将这些策略附加到需要这些权限的 IAM 用户或组。

要了解如何使用这些示例 JSON 策略文档创建 IAM 基于身份的策略,请参阅《IAM 用户指南》中的 在 JSON 选项卡上创建策略

策略最佳实践

基于身份的策略确定某个人是否可以创建、访问或删除您账户中的适用于 LiveAnalytics 的 Timestream 资源。这些操作可能会使 AWS 账户 产生成本。创建或编辑基于身份的策略时,请遵循以下指南和建议:

  • AWS 托管式策略及转向最低权限许可入门 – 要开始向用户和工作负载授予权限,请使用 AWS 托管式策略来为许多常见使用场景授予权限。您可以在 AWS 账户 中找到这些策略。我们建议通过定义特定于您的使用场景的 AWS 客户托管式策略来进一步减少权限。有关更多信息,请参阅《IAM 用户指南》中的 AWS 托管式策略工作职能的 AWS 托管式策略

  • 应用最低权限:在使用 IAM 策略设置权限时,请仅授予执行任务所需的权限。为此,您可以定义在特定条件下可以对特定资源执行的操作,也称为最低权限许可。有关使用 IAM 应用权限的更多信息,请参阅《IAM 用户指南》中的 IAM 中的策略和权限

  • 使用 IAM 策略中的条件进一步限制访问权限:您可以向策略添加条件来限制对操作和资源的访问。例如,您可以编写策略条件来指定必须使用 SSL 发送所有请求。如果通过特定 AWS 服务(例如 CloudFormation)使用服务操作,您还可以使用条件来授予对服务操作的访问权限。有关更多信息,请参阅《IAM 用户指南》中的 IAM JSON 策略元素:条件

  • 使用 IAM Access Analyzer 验证您的 IAM 策略,以确保权限的安全性和功能性 – IAM Access Analyzer 会验证新策略和现有策略,以确保策略符合 IAM 策略语言(JSON)和 IAM 最佳实践。IAM Access Analyzer 提供 100 多项策略检查和可操作的建议,以帮助您制定安全且功能性强的策略。有关更多信息,请参阅《IAM 用户指南》中的使用 IAM Access Analyzer 验证策略

  • 需要多重身份验证(MFA):如果您所处的场景要求您的 AWS 账户 中有 IAM 用户或根用户,请启用 MFA 来提高安全性。若要在调用 API 操作时需要 MFA,请将 MFA 条件添加到您的策略中。有关更多信息,请参阅《IAM 用户指南》中的使用 MFA 保护 API 访问

有关 IAM 中的最佳实操的更多信息,请参阅《IAM 用户指南》中的 IAM 中的安全最佳实践

使用适用于 LiveAnalytics 的 Timestream 控制台

适用于 LiveAnalytics 的 Timestream 不需要特定权限即可访问适用于 LiveAnalytics 的 Amazon Timestream 控制台。您至少需要只读权限才能列出和查看您 AWS 账户中适用于 LiveAnalytics 的 Timestream 资源的相关详细信息。如果您创建的基于身份的策略比所需的最低权限更严格,则无法为具有该策略的实体(IAM 用户或角色)正常运行控制台。

允许用户查看他们自己的权限

该示例说明了您如何创建策略,以允许 IAM 用户查看附加到其用户身份的内联和托管式策略。此策略包括在控制台上完成此操作或者以编程方式使用 AWS CLI 或 AWS API 所需的权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ViewOwnUserInfo", "Effect": "Allow", "Action": [ "iam:GetUserPolicy", "iam:ListGroupsForUser", "iam:ListAttachedUserPolicies", "iam:ListUserPolicies", "iam:GetUser" ], "Resource": ["arn:aws:iam::*:user/${aws:username}"] }, { "Sid": "NavigateInConsole", "Effect": "Allow", "Action": [ "iam:GetGroupPolicy", "iam:GetPolicyVersion", "iam:GetPolicy", "iam:ListAttachedGroupPolicies", "iam:ListGroupPolicies", "iam:ListPolicyVersions", "iam:ListPolicies", "iam:ListUsers" ], "Resource": "*" } ] }

适用于 LiveAnalytics 的 Timestream 中的常见操作

以下是允许在适用于 LiveAnalytics 的 Timestream 服务中进行常见操作的 IAM 策略示例。

允许所有操作

以下是允许适用于 LiveAnalytics 的 Timestream 中所有操作的示例策略。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "timestream:*" ], "Resource": "*" } ] }

允许 SELECT 操作

以下示例策略允许对特定资源执行 SELECT 风格的查询。

注意

<account_ID> 替换为您的 Amazon 账户 ID。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "timestream:Select", "timestream:DescribeTable", "timestream:ListMeasures" ], "Resource": "arn:aws:timestream:us-east-1:111122223333:database/sampleDB/table/DevOps" }, { "Effect": "Allow", "Action": [ "timestream:DescribeEndpoints", "timestream:SelectValues", "timestream:CancelQuery" ], "Resource": "*" } ] }

允许对多个资源进行 SELECT 操作

以下示例策略允许对多个资源执行 SELECT 风格的查询。

注意

<account_ID> 替换为您的 Amazon 账户 ID。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "timestream:Select", "timestream:DescribeTable", "timestream:ListMeasures" ], "Resource": [ "arn:aws:timestream:us-east-1:111122223333:database/sampleDB/table/DevOps", "arn:aws:timestream:us-east-1:111122223333:database/sampleDB/table/DevOps1", "arn:aws:timestream:us-east-1:111122223333:database/sampleDB/table/DevOps2" ] }, { "Effect": "Allow", "Action": [ "timestream:DescribeEndpoints", "timestream:SelectValues", "timestream:CancelQuery" ], "Resource": "*" } ] }

允许元数据操作

以下示例策略允许用户执行元数据查询,但不允许用户执行在适用于 LiveAnalytics 的 Timestream 中读取或写入实际数据的操作。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "timestream:DescribeEndpoints", "timestream:DescribeTable", "timestream:ListMeasures", "timestream:SelectValues", "timestream:ListTables", "timestream:ListDatabases", "timestream:CancelQuery" ], "Resource": "*" } ] }

允许 INSERT 操作

以下示例策略允许用户对账户 <account_id> 内的 database/sampleDB/table/DevOps 执行 INSERT 操作。

注意

<account_ID> 替换为您的 Amazon 账户 ID。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Action": [ "timestream:WriteRecords" ], "Resource": [ "arn:aws:timestream:us-east-1:111122223333:database/sampleDB/table/DevOps" ], "Effect": "Allow" }, { "Action": [ "timestream:DescribeEndpoints" ], "Resource": "*", "Effect": "Allow" } ] }

允许 CRUD 操作

以下策略示例允许用户在适用于 LiveAnalytics 的 Timestream 中执行 CRUD 操作。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "timestream:DescribeEndpoints", "timestream:CreateTable", "timestream:DescribeTable", "timestream:CreateDatabase", "timestream:DescribeDatabase", "timestream:ListTables", "timestream:ListDatabases", "timestream:DeleteTable", "timestream:DeleteDatabase", "timestream:UpdateTable", "timestream:UpdateDatabase" ], "Resource": "*" } ] }

在没有指定资源的情况下取消查询并选择数据

以下示例策略允许用户取消查询并对不需要指定资源的数据执行 Select 查询:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "timestream:SelectValues", "timestream:CancelQuery" ], "Resource": "*" } ] }

创建、描述、删除和描述数据库

以下示例策略允许用户创建、描述、删除和描述数据库 sampleDB

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "timestream:CreateDatabase", "timestream:DescribeDatabase", "timestream:DeleteDatabase", "timestream:UpdateDatabase" ], "Resource": "arn:aws:timestream:us-east-1:111122223333:database/sampleDB" } ] }

按标签 {"Owner": "${username}"} 限制列出的数据库

以下策略示例允许用户列出所有标有键值对 {"Owner": "${username}"} 的数据库:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "timestream:ListDatabases" ], "Resource": "arn:aws:timestream:us-east-1:111122223333:database/*", "Condition": { "StringEquals": { "aws:ResourceTag/Owner": "${aws:username}" } } } ] }

列出数据库中的所有表

以下示例策略用于列出数据库 sampleDB 中的所有表:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "timestream:ListTables" ], "Resource": "arn:aws:timestream:us-east-1:111122223333:database/sampleDB/" } ] }

在表上创建、描述、删除、更新和选择

以下示例策略允许用户创建表、描述表、删除表、更新表以及对数据库 sampleDB 中的表 DevOps 执行 Select 查询:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "timestream:CreateTable", "timestream:DescribeTable", "timestream:DeleteTable", "timestream:UpdateTable", "timestream:Select" ], "Resource": "arn:aws:timestream:us-east-1:111122223333:database/sampleDB/table/DevOps" } ] }

按表限制查询

以下示例策略允许用户查询数据库 DevOps 中除 sampleDB 之外的所有表:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "timestream:Select" ], "Resource": "arn:aws:timestream:us-east-1:111122223333:database/sampleDB/table/*" }, { "Effect": "Deny", "Action": [ "timestream:Select" ], "Resource": "arn:aws:timestream:us-east-1:111122223333:database/sampleDB/table/DevOps" } ] }

基于标签的适用于 LiveAnalytics 的 Timestream 资源访问权限

您可以在基于身份的策略中使用条件,以便基于标签控制对适用于 LiveAnalytics 的 Timestream 资源的访问。本章节提供了一些示例。

以下示例说明如何创建一个策略,该策略授予用户查看表的权限(如果表的 Owner 包含该用户的用户名的值)。

您可以将该策略附加到您账户中的 IAM 用户。如果名为 richard-roe 的用户尝试查看适用于 LiveAnalytics 的 Timestream 表,则必须为该表添加 Owner=richard-roeowner=richard-roe 标签。否则,他将被拒绝访问。条件标签键 Owner 匹配 Ownerowner,因为条件键名称不区分大小写。有关更多信息,请参阅 IAM 用户指南 中的 IAM JSON 策略元素:条件

如果请求中传递的标签具有键 Owner 和值 username,则以下策略授予用户创建带标签的表的权限:

以下策略允许在 env 标签设置为 devtest 的任何数据库上使用 DescribeDatabase API:

此策略使用 Condition 键来允许将键 env 且值为 testqadev 的标签添加到资源中。

计划查询

列出、删除、更新、执行 ScheduledQuery

以下策略示例允许用户列出、删除、更新和执行计划查询。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "timestream:DeleteScheduledQuery", "timestream:ExecuteScheduledQuery", "timestream:UpdateScheduledQuery", "timestream:ListScheduledQueries", "timestream:DescribeEndpoints" ], "Resource": "*" } ] }

CreateScheduledQuery 使用客户托管的 KMS 密钥

以下示例策略允许用户创建使用客户托管的 KMS 密钥进行加密的计划查询;<keyid for ScheduledQuery>

JSON
{ "Version":"2012-10-17", "Statement": [ { "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::123456789012:role/ScheduledQueryExecutionRole" ], "Effect": "Allow" }, { "Action": [ "timestream:CreateScheduledQuery", "timestream:DescribeEndpoints" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "kms:DescribeKey", "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:us-west-2:123456789012:key/<keyid for ScheduledQuery>", "Effect": "Allow" } ] }

DescribeScheduledQuery 使用客户托管的 KMS 密钥

以下示例策略允许用户描述使用客户托管的 KMS 密钥进行创建的计划查询;<keyid for ScheduledQuery>

JSON
{ "Version":"2012-10-17", "Statement": [ { "Action": [ "timestream:DescribeScheduledQuery", "timestream:DescribeEndpoints" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "kms:Decrypt" ], "Resource": "arn:aws:kms:us-west-2:123456789012:key/<keyid for ScheduledQuery>", "Effect": "Allow" } ] }

执行角色权限(使用客户托管的 KMS 密钥实现计划查询,使用 SSE-KMS 进行错误报告)

将以下示例策略附加到 CreateScheduledQuery API ScheduledQueryExecutionRoleArn 参数中指定的 IAM 角色,该角色使用客户托管的 KMS 密钥实现计划查询以及 SSE-KMS 加密进行错误报告。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Action": [ "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:us-west-2:123456789012:key/<keyid for ScheduledQuery>", "Effect": "Allow" }, { "Action": [ "kms:Decrypt" ], "Resource": [ "arn:aws:kms:us-west-2:123456789012:key/<keyid for database-1>", "arn:aws:kms:us-west-2:123456789012:key/<keyid for database-n>", "arn:aws:kms:us-west-2:123456789012:key/<keyid for ScheduledQuery>" ], "Effect": "Allow" }, { "Action": [ "sns:Publish" ], "Resource": [ "arn:aws:sns:us-west-2:123456789012:scheduled-query-notification-topic-*" ], "Effect": "Allow" }, { "Action": [ "timestream:Select", "timestream:SelectValues", "timestream:WriteRecords" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "s3:PutObject", "s3:GetBucketAcl" ], "Resource": [ "arn:aws:s3:::scheduled-query-error-bucket", "arn:aws:s3:::scheduled-query-error-bucket/*" ], "Effect": "Allow" } ] }

执行角色信任关系

以下是 CreateScheduledQuery API ScheduledQueryExecutionRoleArn 参数中指定的 IAM 角色的信任关系。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "timestream.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

允许访问在账户内创建的所有计划查询

将以下示例策略附加到 CreateScheduledQuery API ScheduledQueryExecutionRoleArn 参数中指定的 IAM 角色,以允许访问在账户 Account_ID 内创建的所有计划查询。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "timestream.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "Account_ID" }, "ArnLike": { "aws:SourceArn": "arn:aws:timestream:us-west-2:111122223333:scheduled-query/*" } } } ] }

允许访问所有带特定名称的计划查询

将以下示例策略附加到 CreateScheduledQuery API ScheduledQueryExecutionRoleArn 参数中指定的 IAM 角色,以允许访问账户 Account_ID 内名称以 Scheduled_Query_Name 开头的所有计划查询。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "timestream.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "Account_ID" }, "ArnLike": { "aws:SourceArn": "arn:aws:timestream:us-west-2:111122223333:scheduled-query/Scheduled_Query_Name*" } } } ] }