Amazon CloudWatch 事件
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

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

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

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

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

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

使用 CloudWatch 控制台所需的权限

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

  • 自动化

  • 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 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 中,使用在 AWS 账户内唯一的名称 (例如,CloudWatchEventsSending)。

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

    • Attach Policy 中,选择 CloudWatchEventsInvocationAccess

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

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

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

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

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

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

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

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

Copy
{ "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 状态机,则您指定的角色必须包含以下策略:

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

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

Copy
{ "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 管理控制台中创建带内置目标的规则。

Copy
{ "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 流中的流。

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

示例 3:CloudWatchEventsConsoleAccess

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

Copy
{ "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 执行操作。

Copy
{ "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 的只读访问权限。

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