Amazon CloudWatch Events
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

为 CloudWatch Events 使用基于身份的策略(IAM 策略)

本主题提供了基于身份的策略的示例,在这些策略中,账户管理员可以向 IAM 身份(即:用户、组和角色)挂载权限策略。

下面显示了允许用户将事件数据放入 Kinesis 的权限策略的示例。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "CloudWatchEventsInvocationAccess", "Effect": "Allow", "Action": [ "kinesis:PutRecord" ], "Resource": "*" } ] }

本主题的各个部分涵盖以下内容:

使用 CloudWatch 控制台所需要的权限

用户若要能够在 CloudWatch 控制台中使用 CloudWatch Events,则必须拥有一组最低的权限来允许其为自己的账户描述其他 AWS 资源。要在 CloudWatch 控制台中使用 CloudWatch Events,您必须拥有来自以下服务的权限:

  • 自动化

  • Amazon EC2 Auto Scaling

  • CloudTrail

  • CloudWatch

  • CloudWatch Events

  • IAM

  • Kinesis

  • Lambda

  • Amazon SNS

  • Amazon SWF

如果创建比必需的最低权限更为严格的 IAM 策略,对于附加该 IAM 策略的用户,控制台将无法按预期正常运行。为确保这些用户仍可使用 CloudWatch 控制台,请另外附加 CloudWatchEventsReadOnlyAccess 托管策略,如适用于 CloudWatch Events 的 AWS 托管(预定义)策略所述。

对于只需要调用 AWS CLI 或 CloudWatch API 的用户,无需为其提供最低控制台权限。

以下是使用 CloudWatch 控制台所需的一整套权限:

  • automation:CreateAction

  • automation:DescribeAction

  • automation:UpdateAction

  • autoscaling:DescribeAutoScalingGroups

  • cloudtrail:DescribeTrails

  • ec2:DescribeInstances

  • ec2:DescribeVolumes

  • events:DeleteRule

  • events:DescribeRule

  • events:DisableRule

  • events:EnableRule

  • events:ListRuleNamesByTarget

  • events:ListRules

  • events:ListTargetsByRule

  • events:PutEvents

  • events:PutRule

  • events:PutTargets

  • events:RemoveTargets

  • events:TestEventPattern

  • iam:ListRoles

  • kinesis:ListStreams

  • lambda:AddPermission

  • lambda:ListFunctions

  • lambda:RemovePermission

  • sns:GetTopicAttributes

  • sns:ListTopics

  • sns:SetTopicAttributes

  • swf:DescribeAction

  • swf:ReferenceAction

  • swf:RegisterAction

  • swf:RegisterDomain

  • swf:UpdateAction

适用于 CloudWatch Events 的 AWS 托管(预定义)策略

AWS 通过提供由 AWS 创建和管理的独立 IAM 策略来解决许多常用案例。托管策略可授予常用案例的必要权限,因此,您可以免去调查都需要哪些权限的工作。有关更多信息,请参阅IAM 用户指南中的 AWS 托管策略

以下 AWS 托管策略(可附加到账户中的用户)特定于 CloudWatch Events:

  • CloudWatchEventsFullAccess – 授予对 CloudWatch Events 的完全访问权限。

  • CloudWatchEventsInvocationAccess – 允许 CloudWatch Events 将事件中继到您账户的 Amazon Kinesis Data Streams 中的流。

  • CloudWatchEventsReadOnlyAccess – 授予对 CloudWatch Events 的只读访问权限。

  • CloudWatchEventsBuiltInTargetExecutionAccess – 允许 CloudWatch Events 中的内置目标代表您执行 Amazon EC2 操作。

用于发送事件的 IAM 角色

为了让 CloudWatch Events 将事件中继到您的 Kinesis 流目标,您必须创建 IAM 角色。

创建用于发送 CloudWatch Events 的 IAM 角色。

  1. 通过以下网址打开 IAM 控制台:https://console.amazonaws.cn/iam/

  2. 执行 IAM 用户指南 中的创建角色以向 AWS 服务委派权限中的步骤以创建 IAM 角色。按步骤创建角色时,请执行以下操作:

    • Role Name (角色名称) 中,使用在账户内唯一的名称(例如,CloudWatchEventsSending)。

    • Select Role Type (选择角色类型) 中,选择 AWS Service Roles (AWS 服务角色),然后选择 Amazon CloudWatch Events。这会授予代入该角色的 CloudWatch Events 权限。

    • Attach Policy 中,选择 CloudWatchEventsInvocationAccess

此外,您还可以创建自己的自定义 IAM 策略,以授予 CloudWatch Events 操作和资源的相关权限。您可以将这些自定义策略附加到需要这些权限的 IAM 用户或组。有关 IAM 策略的详细信息,请参阅 IAM 用户指南 中的 IAM 策略概述。有关管理和创建自定义 IAM 策略的详细信息,请参阅 IAM 用户指南 中的管理 IAM 策略

CloudWatch Events 访问特定目标所需的权限

为了让 CloudWatch Events 访问特定目标,您必须指定访问该目标的 IAM 角色,且该角色必须附加了特定策略。

如果目标是 Kinesis 流,则用于将事件数据发送到该目标的角色必须包含以下策略:

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

如果目标是 Run Command 且您正在为命令指定一个或多个 InstanceIds 值,则您指定的角色必须包含以下策略:

{ "Version": "2012-10-17", "Statement": [ { "Action": "ssm:SendCommand", "Effect": "Allow", "Resource": [ "arn:aws:ec2:{{region}}:{{accountId}}:instance/[[instanceIds]]", "arn:aws:ssm:{{region}}:*:document/{{documentName}}" ] } ] }

如果目标是 Run Command 且您正在为命令指定一个或多个标签,则您指定的角色必须包含以下策略:

{ "Version": "2012-10-17", "Statement": [ { "Action": "ssm:SendCommand", "Effect": "Allow", "Resource": [ "arn:aws:ec2:{{region}}:{{accountId}}:instance/*" ], "Condition": { "StringEquals": { "ec2:ResourceTag/*": [ "[[tagValues]]" ] } } }, { "Action": "ssm:SendCommand", "Effect": "Allow", "Resource": [ "arn:aws:ssm:{{region}}:*:document/{{documentName}}" ] } ] }

如果目标是 Step Functions 状态机,则您指定的角色必须包含以下策略:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "states:StartExecution" ], "Resource": [ "arn:aws:states:*:*:stateMachine:*" ] } ] }

如果目标是 ECS 任务,则您指定的角色必须包含以下策略:

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ecs:RunTask" ], "Resource": [ "arn:aws:ecs:*:{{account-id}}:task-definition/{{task-definition-name}}" ], "Condition": { "ArnLike": { "ecs:cluster": "arn:aws:ecs:*:{{account-id}}:cluster/{{cluster-name}}" } } }] }

客户托管策略示例

本节的用户策略示例介绍如何授予各 CloudWatch Events 操作的权限。当您使用 CloudWatch Events API、AWS 开发工具包或 AWS CLI 时,这些策略将适用。

注意

所有示例都使用 美国西部(俄勒冈)区域 (us-west-2) 和虚构的账户 ID。

您可以使用列出的以下示例 IAM 策略来限制 IAM 用户和角色对 CloudWatch Events 的访问。

示例 1:CloudWatchEventsBuiltInTargetExecutionAccess

以下策略允许 CloudWatch Events 中的内置目标代表您执行 Amazon EC2 操作。

重要

只能在 AWS 管理控制台中创建带内置目标的规则。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "CloudWatchEventsBuiltInTargetExecutionAccess", "Effect": "Allow", "Action": [ "ec2:Describe*", "ec2:RebootInstances", "ec2:StopInstances", "ec2:TerminateInstances", "ec2:CreateSnapshot" ], "Resource": "*" } ] }

示例 2:CloudWatchEventsInvocationAccess

以下策略允许 CloudWatch Events 将事件中继到您账户的 Kinesis 流中的流。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "CloudWatchEventsInvocationAccess", "Effect": "Allow", "Action": [ "kinesis:PutRecord" ], "Resource": "*" } ] }

示例 3:CloudWatchEventsConsoleAccess

以下策略确保 IAM 用户可使用 CloudWatch Events 控制台。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "CloudWatchEventsConsoleAccess", "Effect": "Allow", "Action": [ "automation:CreateAction", "automation:DescribeAction", "automation:UpdateAction", "autoscaling:DescribeAutoScalingGroups", "cloudtrail:DescribeTrails", "ec2:DescribeInstances", "ec2:DescribeVolumes", "events:*", "iam:ListRoles", "kinesis:ListStreams", "lambda:AddPermission", "lambda:ListFunctions", "lambda:RemovePermission", "sns:GetTopicAttributes", "sns:ListTopics", "sns:SetTopicAttributes", "swf:DescribeAction", "swf:ReferenceAction", "swf:RegisterAction", "swf:RegisterDomain", "swf:UpdateAction" ], "Resource": "*" }, { "Sid": "IAMPassRoleForCloudWatchEvents", "Effect": "Allow", "Action": "iam:PassRole", "Resource": [ "arn:aws:iam::*:role/AWS_Events_Invoke_Targets", "arn:aws:iam::*:role/AWS_Events_Actions_Execution" ] } ] }

示例 4:CloudWatchEventsFullAccess

以下策略允许通过 AWS CLI 和 SDK 对 CloudWatch Events 执行操作。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "CloudWatchEventsFullAccess", "Effect": "Allow", "Action": "events:*", "Resource": "*" }, { "Sid": "IAMPassRoleForCloudWatchEvents", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::*:role/AWS_Events_Invoke_Targets" } ] }

示例 5:CloudWatchEventsReadOnlyAccess

以下策略提供对 CloudWatch Events 的只读访问权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "CloudWatchEventsReadOnlyAccess", "Effect": "Allow", "Action": [ "events:Describe*", "events:List*", "events:TestEventPattern" ], "Resource": "*" } ] }

示例 6:使用标记来控制对特定规则的访问

您可以授予用户访问指定 CloudWatch Events 规则的权限,但不允许他们访问其他规则。要执行此操作,请标记这些规则并使用引用这些标签的 IAM 策略。

有关标记 CloudWatch Events 资源的更多信息,请参阅标记您的 Amazon CloudWatch Events 资源

当您标记 CloudWatch Events 规则时,您可以向用户授予 IAM 策略,以允许其仅访问带有特定标签的规则。例如,以下策略语句仅授予对标签键 Stack 值为 Prod 的规则的访问权限。

{ "Statement": [ { "Effect": "Allow", "Action": "events:*", "Resource": "*", "Condition": { "StringEquals": { "events:ResourceTag/Stack": "Prod" } } } ] }

有关使用 IAM 策略语句的更多信息,请参阅IAM 用户指南中的使用策略控制访问