启用审核日志 - 亚马逊 WorkMail

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

启用审核日志

您可以使用审计日志来捕获有关您的 Amazon WorkMail 组织使用情况的详细信息。审核日志可用于监控用户对邮箱的访问权限、审核可疑活动以及调试访问控制和可用性提供商配置。

注意

AmazonWorkMailFullAccess托管策略不包括管理日志传输所需的所有权限。如果您使用此策略进行管理 WorkMail,请确保用于配置日志传输的委托人(例如,代入的角色)也具有所有必需的权限。

亚马逊 WorkMail 支持审核日志的三个传送目的地:日 CloudWatch 志、亚马逊 S3 和亚马逊 Data Firehose。有关更多信息,请参阅 Amazon Logs 用户指南中的需要额外权限的 CloudWatch 日志记录 [V2]

除了日志记录下列出的需要额外权限 [V2] 的权限外,Amazon 还 WorkMail 需要额外的权限来配置日志传输:workmail:AllowVendedLogDeliveryForResource

工作日志交付由三个元素组成:

  • DeliverySource,一个逻辑对象,表示发送日志的一个或多个资源。对于亚马逊来说 WorkMail,这是亚马逊 WorkMail组织。

  • A DeliveryDestination,它是一个逻辑对象,代表实际的交付目的地。

  • 交付,它将传送源与传送目标连接起来。

要在 Amazon WorkMail 和目标之间配置日志传输,您可以执行以下操作:

  • 使用创建交付来源PutDeliverySource

  • 使用创建配送目的地PutDeliveryDestination

  • 如果您要跨账户传送日志,则必须在目标账户PutDeliveryDestinationPolicy中使用向目标分配 IAM 策略。此策略授权创建从账户 A 中的交付源到账户 B 的交付目标的交付。

  • 通过使用将一个配送来源和一个配送目的地精确配对来创建配送CreateDelivery

以下各节详细介绍了您在登录时必须拥有的权限才能设置向每种类型的目标传送日志。这些权限可以授予您登录时使用的 IAM 角色。

重要

删除日志生成资源后,您有责任移除日志传输资源。

要在删除日志生成资源后移除日志传输资源,请按照以下步骤操作。

  1. 使用DeleteDelivery操作删除配送

  2. DeliverySource使用DeleteDeliverySource操作删除。

  3. 如果与您刚刚删除的DeliveryDestinationDeliverySource关联仅用于此特定用途 DeliverySource,则可以使用DeleteDeliveryDestinations操作将其删除。

使用 Amazon WorkMail 控制台配置审核日志

您可以在 Amazon WorkMail 控制台中配置审核日志:

  1. 打开亚马逊 WorkMail 控制台,网址为 https://console.aws.amazon.com/workmail/

    如有必要,请更改 AWS 区域。在控制台窗口顶部的栏中,打开 “选择区域” 列表并选择一个区域。有关更多信息,请参阅《Amazon Web Services 一般参考》中的区域和端点

  2. 在导航窗格中,选择组织,然后选择贵组织的名称。

  3. 选择 “日志设置”

  4. 选择 “审核日志设置” 选项卡。

  5. 使用相应的小组件为所需日志类型配置交付。

  6. 选择保存

发送到日志的 CloudWatch 日志

用户权限

要启用向日志发送 CloudWatch 日志,您必须使用以下权限登录。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadWriteAccessForLogDeliveryActions", "Effect": "Allow", "Action": [ "logs:GetDelivery", "logs:GetDeliverySource", "logs:PutDeliveryDestination", "logs:GetDeliveryDestinationPolicy", "logs:DeleteDeliverySource", "logs:PutDeliveryDestinationPolicy", "logs:CreateDelivery", "logs:GetDeliveryDestination", "logs:PutDeliverySource", "logs:DeleteDeliveryDestination", "logs:DeleteDeliveryDestinationPolicy", "logs:DeleteDelivery" ], "Resource": [ "arn:aws:logs:region:account-id:delivery:*", "arn:aws:logs:region:account-id:delivery-source:*", "arn:aws:logs:region:account-id:delivery-destination:*" ] }, { "Sid": "ListAccessForLogDeliveryActions", "Effect": "Allow", "Action": [ "logs:DescribeDeliveryDestinations", "logs:DescribeDeliverySources", "logs:DescribeDeliveries", "logs:DescribeLogGroups" ], "Resource": "*" }, { "Sid": "AllowUpdatesToResourcePolicyCWL", "Effect": "Allow", "Action": [ "logs:PutResourcePolicy", "logs:DescribeResourcePolicies", "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:region:account-id:*" ] } { "Sid":"AllowLogDeliveryForWorkMail", "Effect":"Allow", "Action":[ "workmail:AllowVendedLogDeliveryForResource" ], "Resource":[ "arn:aws:workmail:region:account-id:organization/organization-id" ] } ] }

日志组和资源策略

接收日志的日志组必须具有包含特定权限的资源策略。如果日志组当前没有资源策略,并且设置日志记录的用户拥有该日志组的logs:PutResourcePolicylogs:DescribeResourcePolicies、和logs:DescribeLogGroups权限,则在您开始将日志发送到 CloudWatch Logs 时, AWS 会自动为其创建以下策略。

{ "Version":"2012-10-17", "Statement":[ { "Sid":"AWSLogDeliveryWrite20150319", "Effect":"Allow", "Principal":{ "Service":[ "delivery.logs.amazonaws.com" ] }, "Action":[ "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource":[ "arn:aws:logs:region:account-id:log-group:my-log-group:log-stream:*" ], "Condition":{ "StringEquals":{ "aws:SourceAccount":[ "account-id" ] }, "ArnLike":{ "aws:SourceArn":[ "arn:aws:logs:region:account-id:*" ] } } } ] }

日志组资源策略大小限制注意事项

这些服务必须在资源策略中列出要向其发送日志的每个日志组。 CloudWatch 日志资源策略限制在 5,120 个字符以内。向大量日志组发送日志的服务可能会遇到此限制。

为了缓解这种情况, CloudWatch Logs 会监控发送日志的服务所使用的资源策略的大小。当它检测到策略接近 5,120 个字符的大小限制时, CloudWatch Logs 会自动/aws/vendedlogs/*在该服务的资源策略中启用。之后,您可以开始将名称以 /aws/vendedlogs/ 开头的日志组作为这些服务所发送的日志的目标。

发送到 Amazon S3 的日志

用户权限

要启用向 Amazon S3 发送日志,您必须使用以下权限登录。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadWriteAccessForLogDeliveryActions", "Effect": "Allow", "Action": [ "logs:GetDelivery", "logs:GetDeliverySource", "logs:PutDeliveryDestination", "logs:GetDeliveryDestinationPolicy", "logs:DeleteDeliverySource", "logs:PutDeliveryDestinationPolicy", "logs:CreateDelivery", "logs:GetDeliveryDestination", "logs:PutDeliverySource", "logs:DeleteDeliveryDestination", "logs:DeleteDeliveryDestinationPolicy", "logs:DeleteDelivery" ], "Resource": [ "arn:aws:logs:region:account-id:delivery:*", "arn:aws:logs:region:account-id:delivery-source:*", "arn:aws:logs:region:account-id:delivery-destination:*" ] }, { "Sid": "ListAccessForLogDeliveryActions", "Effect": "Allow", "Action": [ "logs:DescribeDeliveryDestinations", "logs:DescribeDeliverySources", "logs:DescribeDeliveries", "logs:DescribeLogGroups" ], "Resource": "*" }, { "Sid": "AllowUpdatesToResourcePolicyS3", "Effect": "Allow", "Action": [ "s3:PutBucketPolicy", "s3:GetBucketPolicy" ], "Resource": "arn:aws:s3:::bucket-name" } { "Sid":"AllowLogDeliveryForWorkMail", "Effect":"Allow", "Action":[ "workmail:AllowVendedLogDeliveryForResource" ], "Resource":[ "arn:aws:workmail:region:account-id:organization/organization-id" ] } ] }

接收日志的 S3 存储桶必须具有包含特定权限的资源策略。如果存储桶当前没有资源策略,并且设置日志记录的用户拥有该存储桶的S3:GetBucketPolicyS3:PutBucketPolicy权限,则在您开始将日志发送到 Amazon S3 时 AWS 会自动为其创建以下策略。

{ "Version":"2012-10-17", "Id":"AWSLogDeliveryWrite20150319", "Statement":[ { "Sid":"AWSLogDeliveryAclCheck", "Effect":"Allow", "Principal":{ "Service":"delivery.logs.amazonaws.com" }, "Action":"s3:GetBucketAcl", "Resource":"arn:aws:s3:::my-bucket", "Condition":{ "StringEquals":{ "aws:SourceAccount":[ "account-id" ] }, "ArnLike":{ "aws:SourceArn":[ "arn:aws:logs:region:account-id:delivery-source:*" ] } } }, { "Sid":"AWSLogDeliveryWrite", "Effect":"Allow", "Principal":{ "Service":"delivery.logs.amazonaws.com" }, "Action":"s3:PutObject", "Resource":"arn:aws:s3:::my-bucket/AWSLogs/account-id/*", "Condition":{ "StringEquals":{ "s3:x-amz-acl":"bucket-owner-full-control", "aws:SourceAccount":[ "account-id" ] }, "ArnLike":{ "aws:SourceArn":[ "arn:aws:logs:region:account-id:delivery-source:*" ] } } } ] }

在之前的策略中aws:SourceAccount,为指定要将日志传输到此存储桶的账户 ID 列表。对于 aws:SourceArn,请按 arn:aws:logs:source-region:source-account-id:* 格式指定生成日志的资源 ARN 列表。

如果存储桶有资源策略,但该策略不包含先前策略中显示的声明,并且设置日志记录的用户拥有该存储桶的S3:GetBucketPolicyS3:PutBucketPolicy权限,则该语句将附加到存储桶的资源策略中。

注意

在某些情况下, AWS CloudTrail 如果未授予s3:ListBucket权限,则可能会在中看到AccessDenied错误delivery.logs.amazonaws.com。为避免 CloudTrail日志中出现这些错误,您必须授予s3:ListBucket权限delivery.logs.amazonaws.com。您还必须包含在前面的存储桶策略中设置的s3:GetBucketAcl权限中显示的Condition参数。为了简化此操作,您可以直接将其更新为Statement,而不是创建新AWSLogDeliveryAclCheck“Action”: [“s3:GetBucketAcl”, “s3:ListBucket”]

Amazon S3 存储桶服务器端加密

您可以通过使用 Amazon S3 托管密钥启用服务器端加密 (SSE-S3) 或使用存储在 SSE-KMS 中的密钥启用服务器端加密 (SSE-KMS) 来保护 Amazon S3 存储桶中的 AWS Key Management Service 数据。 AWS KMS 有关更多信息,请参阅使用服务器端加密保护数据

如果选择 SSE-S3,则不需要额外的配置。Amazon S3 处理加密密钥。

警告

如果您选择 SSE-KMS,则必须使用客户托管密钥,因为这种 AWS 托管式密钥 情况不支持使用。如果您使用 AWS 托管密钥设置加密,则日志将以不可读的格式传送。

当您使用客户托管 AWS KMS 密钥时,您可以在启用存储桶加密时指定客户托管密钥的 Amazon 资源名称 (ARN)。将以下内容添加到客户托管密钥的密钥策略(而不是您的 S3 存储桶策略中),以便日志传输账户可以写入您的 S3 存储桶。

如果您选择 SSE-KMS,则必须使用客户托管密钥,因为这种情况不支持使用 AWS 托管密钥。当您使用客户托管 AWS KMS 密钥时,您可以在启用存储桶加密时指定客户托管密钥的 Amazon 资源名称 (ARN)。将以下内容添加到客户托管密钥的密钥策略(而不是您的 S3 存储桶策略中),以便日志传输账户可以写入您的 S3 存储桶。

{ "Sid":"Allow Logs Delivery to use the key", "Effect":"Allow", "Principal":{ "Service":[ "delivery.logs.amazonaws.com" ] }, "Action":[ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource":"*", "Condition":{ "StringEquals":{ "aws:SourceAccount":[ "account-id" ] }, "ArnLike":{ "aws:SourceArn":[ "arn:aws:logs:region:account-id:delivery-source:*" ] } } }

对于aws:SourceAccount,请指定要将日志传输到此存储桶的账户 ID 列表。对于 aws:SourceArn,请按 arn:aws:logs:source-region:source-account-id:* 格式指定生成日志的资源 ARN 列表。

已发送到 Firehose 的日志

用户权限

要启用向 Firehose 发送日志,您必须使用以下权限登录。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadWriteAccessForLogDeliveryActions", "Effect": "Allow", "Action": [ "logs:GetDelivery", "logs:GetDeliverySource", "logs:PutDeliveryDestination", "logs:GetDeliveryDestinationPolicy", "logs:DeleteDeliverySource", "logs:PutDeliveryDestinationPolicy", "logs:CreateDelivery", "logs:GetDeliveryDestination", "logs:PutDeliverySource", "logs:DeleteDeliveryDestination", "logs:DeleteDeliveryDestinationPolicy", "logs:DeleteDelivery" ], "Resource": [ "arn:aws:logs:region:account-id:delivery:*", "arn:aws:logs:region:account-id:delivery-source:*", "arn:aws:logs:region:account-id:delivery-destination:*" ] }, { "Sid": "ListAccessForLogDeliveryActions", "Effect": "Allow", "Action": [ "logs:DescribeDeliveryDestinations", "logs:DescribeDeliverySources", "logs:DescribeDeliveries", "logs:DescribeLogGroups" ], "Resource": "*" }, { "Sid": "AllowUpdatesToResourcePolicyFH", "Effect": "Allow", "Action": [ "firehose:TagDeliveryStream" ], "Resource": [ "arn:aws:firehose:region:account-id:deliverystream/*" ] }, { "Sid": "CreateServiceLinkedRole", "Effect": "Allow", "Action": [ "iam:CreateServiceLinkedRole" ], "Resource": "arn:aws:iam::account-id:role/aws-service-role/delivery.logs.amazonaws.com/AWSServiceRoleForLogDelivery" } { "Sid":"AllowLogDeliveryForWorkMail", "Effect":"Allow", "Action":[ "workmail:AllowVendedLogDeliveryForResource" ], "Resource":[ "arn:aws:workmail:region:account-id:organization/organization-id" ] } ] }

用于资源权限的 IAM 角色

由于 Firehose 不使用资源策略, AWS 因此在设置要发送到 Firehose 的日志时会使用 IAM 角色。 AWS 创建名AWSServiceRoleForLogDelivery为的服务相关角色。此服务相关角色包括以下权限。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "firehose:PutRecord", "firehose:PutRecordBatch", "firehose:ListTagsForDeliveryStream" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/LogDeliveryEnabled": "true" } }, "Effect": "Allow" } ] }

此服务相关角色授予标签设置为的所有 Firehose 传送流LogDeliveryEnabled的权限。true AWS 在设置日志记录时,将此标签提供给目标传送流。

此服务相关角色还具有允许 delivery.logs.amazonaws.com 服务委托人来代入所需服务相关角色的信任策略。该信任策略如下所示:

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

控制台专属权限

除了前几节中列出的权限外,如果您使用控制台而不是 API 设置日志传输,则还需要以下权限:

{ "Version":"2012-10-17", "Statement":[ { "Sid":"AllowLogDeliveryActions", "Effect":"Allow", "Action":[ "firehose:DescribeDeliveryStream", "s3:ListBucket", "s3:GetBucketLocation" ], "Resource":[ "arn:aws:logs:region:account-id:log-group:*", "arn:aws:firehose:region:account-id:deliverystream/*", "arn:aws:s3:::*" ] }, { "Sid":"ListAccessForDeliveryDestinations", "Effect":"Allow", "Action":[ "logs:DescribeLogGroups", "firehose:ListDeliveryStreams", "s3:ListAllMyBuckets" ], "Resource":"*" } ] }