对 CloudWatch Logs 使用基于身份的策略(IAM 策略)
本主题提供了基于身份的策略的示例,在这些策略中,账户管理员可以向 IAM 身份(即:用户、组和角色)附加权限策略。
我们建议您首先阅读以下介绍性主题,这些主题讲解了管理 CloudWatch Logs 资源访问的基本概念和选项。有关更多信息,请参阅管理您的 CloudWatch Logs 资源的访问权限概述。
本主题包含以下内容:
下面是权限策略的示例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:*:*:*" ] } ] }
本策略具有一个语句,该语句授予了创建日志组和日志流、将事件上传到日志流和列出有关日志流的详细信息的权限。
Resource
值结尾的通配符 (*) 表示一个语句,该语句授予了对任何日志组执行 logs:CreateLogGroup
、logs:CreateLogStream
、logs:PutLogEvents
和 logs:DescribeLogStreams
操作的权限。要将此权限限制到特定日志组,请使用将资源 ARN 中的通配符 (*) 替换为特定日志组 ARN。有关 IAM policy 语句中各部分的更多信息,请参阅 IAM 用户指南中的 IAM policy 元素引用。有关显示所有 CloudWatch Logs 操作的列表,请参阅 CloudWatch Logs 权限参考。
使用 CloudWatch 控制台所需的权限
用户若要能够在 CloudWatch 控制台中使用 CloudWatch Logs,则必须拥有一组最低的权限来允许其描述自己Amazon账户中的其他Amazon资源。要在 CloudWatch 控制台中使用 CloudWatch Logs,您必须拥有来自以下服务的权限:
-
CloudWatch
-
CloudWatch Logs
-
OpenSearch Service
-
IAM
-
Kinesis
-
Lambda
-
Amazon S3
如果创建比必需的最低权限更为严格的 IAM policy,对于附加了该 IAM policy 的用户, 控制台将无法按预期正常运行。要确保这些用户仍可使用 CloudWatch 控制台,也可向用户附加 CloudWatchReadOnlyAccess
托管策略,如 用于 CloudWatch Logs 的Amazon托管(预定义)策略 中所述。
对于只需要调用 Amazon CLI 或 CloudWatch Logs API 的用户,无需为其提供最低控制台权限。
对于未使用控制台管理日志订阅的用户,使用 CloudWatch 控制台所需的完整权限集为:
cloudwatch:getMetricData
cloudwatch:listMetrics
logs:cancelExportTask
logs:createExportTask
logs:createLogGroup
logs:createLogStream
logs:deleteLogGroup
logs:deleteLogStream
logs:deleteMetricFilter
logs:deleteQueryDefinition
logs:deleteRetentionPolicy
logs:deleteSubscriptionFilter
logs:describeExportTasks
logs:describeLogGroups
logs:describeLogStreams
logs:describeMetricFilters
logs:describeQueryDefinitions
logs:describeSubscriptionFilters
logs:filterLogEvents
logs:getLogEvents
logs:putMetricFilter
logs:putQueryDefinition
logs:putRetentionPolicy
logs:putSubscriptionFilter
logs:testMetricFilter
对于同时使用控制台来管理日志订阅的用户,还需要以下权限:
es:describeElasticsearchDomain
es:listDomainNames
iam:attachRolePolicy
iam:createRole
iam:getPolicy
iam:getPolicyVersion
iam:getRole
iam:listAttachedRolePolicies
iam:listRoles
kinesis:describeStreams
kinesis:listStreams
lambda:addPermission
lambda:createFunction
lambda:getFunctionConfiguration
lambda:listAliases
lambda:listFunctions
lambda:listVersionsByFunction
lambda:removePermission
s3:listBuckets
用于 CloudWatch Logs 的Amazon托管(预定义)策略
Amazon通过提供由Amazon创建和管理的独立 IAM 策略来满足许多常用案例的要求。托管式策略可授予常用案例的必要权限,因此,您可以免去调查都需要哪些权限的工作。有关更多信息,请参阅 IAM 用户指南中的Amazon托管策略。
以下 Amazon 托管式策略(可附加到您账户中的用户和角色)特定于 CloudWatch Logs:
CloudWatchLogsFullAccess – 授予对 CloudWatch Logs 的完全访问权限。
CloudWatchLogsReadOnlyAccess – 授予对 CloudWatch Logs 的只读访问权限。
CloudWatchLogsFullAccess
CloudWatchLogsFullAccess 策略授予对 CloudWatch Logs 的完全访问权限。内容如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:*" ], "Effect": "Allow", "Resource": "*" } ] }
CloudWatchLogsReadOnlyAccess
CloudWatchLogsReadOnlyAccess 策略授予对 CloudWatch Logs 的只读访问权限。内容如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:Describe*", "logs:Get*", "logs:List*", "logs:StartQuery", "logs:StopQuery", "logs:TestMetricFilter", "logs:FilterLogEvents" ], "Resource": "*" } ] }
客户托管式策略示例
您可以创建您自己的自定义 IAM 策略,以授予对 CloudWatch Logs 操作和资源的相关权限。您可以将这些自定义策略附加到需要这些权限的 IAM 用户或组。
本节的用户策略示例介绍如何授予对各 CloudWatch Logs 操作的权限。当您使用 CloudWatch Logs API、Amazon开发工具包或 Amazon CLI 时,可以使用这些策略。
示例 1:允许对 CloudWatch Logs 进行完全访问
以下策略允许用户访问所有 CloudWatch Logs 操作。
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "logs:*" ], "Effect": "Allow", "Resource": "*" } ] }
示例 2:允许对 CloudWatch Logs 进行只读访问
Amazon提供了一个 CloudWatchLogsReadOnlyAccess 策略,该策略允许对 CloudWatch Logs 数据进行只读访问。此策略包含以下权限。
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "logs:Describe*", "logs:Get*", "logs:List*", "logs:StartQuery", "logs:StopQuery", "logs:TestMetricFilter", "logs:FilterLogEvents" ], "Effect": "Allow", "Resource": "*" } ] }
示例 3:允许访问一个日志组
以下策略允许用户在一个指定的日志组中读取和写入日志事件。
Resource
行中日志组名称末尾的 :*
是必需的,以指示该策略适用于此日志组中的所有日志流。如果省略 :*
,则不会强制执行该策略。
{ "Version":"2012-10-17", "Statement":[ { "Action": [ "logs:CreateLogStream", "logs:DescribeLogStreams", "logs:PutLogEvents", "logs:GetLogEvents" ], "Effect": "Allow", "Resource": "arn:aws:logs:us-west-2:123456789012:log-group:SampleLogGroupName:*" } ] }
使用标记和 IAM 策略在日志组级别进行控制
您可以为用户授予某些日志组的访问权限,同时禁止他们访问其他日志组。为此,请标记您的日志组,并使用引用这些标记的 IAM 策略。要将标签应用于日志组,您需要拥有 logs:TagResource
或 logs:TagLogGroup
权限。这既适用于在创建日志组时为其分配标签,也适用于稍后分配标签。
有关标记日志组的更多信息,请参阅 在 Amazon CloudWatch Logs 中标记日志组。
在标记日志组时,您可以为用户授予 IAM policy 以仅允许访问具有特定标记的日志组。例如,以下策略语句仅授予 Team
标签键值为 Green
的日志组的访问权限。
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "logs:*" ], "Effect": "Allow", "Resource": "*", "Condition": { "StringLike": { "aws:ResourceTag/Team": "Green" } } } ] }
有关使用 IAM policy 语句的更多信息,请参阅 IAM 用户指南中的使用策略控制访问。