配置 Amazon MQ for ActiveMQ 日志 - Amazon MQ
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

配置 Amazon MQ for ActiveMQ 日志

要允许 Amazon MQ 将日志发布到 CloudWatch Logs,您必须为 Amazon MQ 用户添加权限以及为 Amazon MQ 配置基于资源的策略,然后再创建或重启代理。

下面介绍了为您的 ActiveMQ 代理配置 CloudWatch Logs 的步骤。

了解 CloudWatch Logs 中的日志记录的结构

在创建代理或编辑代理时,您可以在配置高级代理设置时启用常规审核日志记录。

常规日志记录启用默认的 INFO 日志记录级别(不支持 DEBUG 日志记录)并将 activemq.log 发布到 CloudWatch 账户中的日志组。日志组的格式如下所示:

/aws/amazonmq/broker/b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9/general

审核日志记录用于记录使用 JMX 或使用 ActiveMQ Web 控制台执行的管理操作的日志并将 audit.log 发布到 CloudWatch 账户中的日志组。日志组的格式如下所示:

/aws/amazonmq/broker/b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9/audit

根据您是具有单实例代理还是主动/备用代理,Amazon MQ 将在每个日志组中创建一个或两个日志流。日志流的格式如下所示。

activemq-b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.log activemq-b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-2.log

-1-2 后缀表示单个代理实例。有关更多信息,请参阅 Amazon CloudWatch Logs 用户指南 中的使用日志组和日志流

向 Amazon MQ 用户添加 CreateLogGroup 权限

要允许 Amazon MQ 创建 CloudWatch Logs 日志组,您必须确保创建或重启代理的 IAM 用户具有 logs:CreateLogGroup 权限。

重要

如果您未在 Amazon MQ 用户创建或重启代理之前将 CreateLogGroup 权限添加给 Amazon MQ 用户,则 Amazon MQ 不会创建日志组。

以下示例介绍基于 IAM 的策略为附加此策略的用户授予 logs:CreateLogGroup 权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "logs:CreateLogGroup", "Resource": "arn:aws:logs:*:*:log-group:/aws/amazonmq/*" } ] }
注意

此处,术语“用户”是指 IAM 用户而不是 Amazon MQ 用户,后者是在配置新代理时创建的。有关设置 IAM 用户和配置 IAM 策略的更多信息,请参阅《IAM 用户指南》中的身份管理概述部分。

有关更多信息,请参阅《Amazon CloudWatch Logs API 参考》中的 CreateLogGroup

为 Amazon MQ 配置基于资源的策略。

重要

如果您没有为 Amazon MQ 配置基于资源的策略,则代理无法将日志发布到 CloudWatch Logs。

要允许 Amazon MQ 将日志发布到 CloudWatch Logs 日志组,请配置一个基于资源的策略来将 Amazon MQ 访问权限授予以下 CloudWatch Logs API 操作:

  • CreateLogStream – 为指定的日志组创建 CloudWatch Logs 日志流。

  • PutLogEvents – 将事件传送到指定的 CloudWatch Logs 日志流。

以下基于资源的策略将 logs:CreateLogStreamlogs:PutLogEvents 的权限授予 Amazon。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "mq.amazonaws.com" }, "Action": [ "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:log-group:/aws/amazonmq/*" } ] }

必须使用 Amazon CLI 配置此基于资源的策略,如以下命令所示。在示例中,将 us-east-1 替换为您自己的信息。

aws --region us-east-1 logs put-resource-policy --policy-name AmazonMQ-logs \ --policy-document "{\"Version\": \"2012-10-17\", \"Statement\":[{ \"Effect\": \"Allow\", \"Principal\": { \"Service\": \"mq.amazonaws.com\" }, \"Action\": [\"logs:CreateLogStream\", \"logs:PutLogEvents\"], \"Resource\": \"arn:aws:logs:*:*:log-group:\/aws\/amazonmq\/*\" }]}"
注意

由于此示例使用 /aws/amazonmq/ 前缀,您只需为每个区域的每个 Amazon 账户配置一次基于资源的策略。

跨服务混淆代理问题防范

混淆代理问题是一个安全性问题,即不具有操作执行权限的实体可能会迫使具有更高权限的实体执行该操作。在 Amazon 中,跨服务模拟可能会导致混淆代理问题。当一项服务(调用服务)调用另一项服务(被调用服务)时,可能会发生跨服务模拟。可以操纵调用服务,使用其权限以在其他情况下该服务不应有访问权限的方式对另一个客户的资源进行操作。为防止这种情况,Amazon 提供可帮助您保护所有服务的数据的工具,而这些服务中的服务委托人有权限访问账户中的资源。

我们建议在基于 Amazon MQ 资源的策略中使用 aws:SourceArnaws:SourceAccount 全局上下文键限制至一个或多个指定代理的 CloudWatch Logs 访问。

注意

如果使用两个全局条件上下文键,在同一策略语句中使用时,aws:SourceAccount 值和 aws:SourceArn 值中的账户必须使用相同的账户 ID。

以下示例演示了基于资源的策略,该策略可限制至单个 Amazon MQ 代理的 CloudWatch Logs 访问。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "mq.amazonaws.com" }, "Action": [ "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:log-group:/aws/amazonmq/*", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012", "aws:SourceArn": "arn:aws:mq:us-east-2:123456789012:broker:MyBroker:b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9" } } } ] }

此外,您还可以配置基于资源的策略,以限制至账户中的所有代理的 CloudWatch Logs 访问,如以下所示。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "mq.amazonaws.com" ] }, "Action": [ "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:log-group:/aws/amazonmq/*", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:mq:*:123456789012:broker:*" }, "StringEquals": { "aws:SourceAccount": "123456789012" } } } ] }

有关混淆代理人安全问题的更多信息,请参阅 IAM 用户指南中的混淆代理人问题

CloudWatch Logs 配置问题排查

在某些情况下,CloudWatch Logs 的行为可能并不总是符合预期。此部分概述了常见问题并说明如何解决这些问题。

日志组没有显示在 CloudWatch 中

将 CreateLogGroup 权限添加给 Amazon MQ 用户并重启代理。这样 Amazon MQ 就可以创建日志组了。

日志流没有显示在 CloudWatch 日志组中

为 Amazon MQ 配置基于资源的策略。这样代理就可以发布其日志了。