启用审计日志记录
您可以使用审计日志来捕获有关 Amazon WorkMail 组织使用情况的详细信息。审计日志可用于监控用户对邮箱的访问、审计是否存在可疑活动,以及调试访问控制和可用性提供商配置。
AmazonWorkMailFullAccess 托管式策略并不包括管理日志传输所需的所有权限。如果您使用此策略来管理 WorkMail,请确保用于配置日志传输的主体(例如,代入的角色)也具有所有必需的权限。
Amazon WorkMail 对于审计日志支持三个传输目标:CloudWatch Logs、Amazon S3 和 Amazon Data Firehose。有关更多信息,请参阅 Amazon CloudWatch Logs 用户指南中的需要额外权限 [V2] 的日志记录。
除了需要额外权限 [V2] 的日志记录下列出的权限外,Amazon WorkMail 还需要一项额外的权限来配置日志传输:workmail:AllowVendedLogDeliveryForResource。
工作日志传输由三个元素组成:
要在 Amazon WorkMail 和目标之间配置日志传输,您可以执行以下操作:
以下各节详细介绍在您登录以便将日志传输设置为每种类型的目标时必须具备的权限。这些权限可以授予您登录时使用的 IAM 角色。
要在删除日志生成资源后移除日志传输资源,请执行以下步骤。
使用 Amazon WorkMail 控制台配置审计日志记录
您可以在 Amazon WorkMail 控制台中配置审计日志记录:
发送到 CloudWatch Logs 的日志
用户权限
要启用将日志发送到 CloudWatch Logs,您必须使用以下权限登录。
- JSON
-
-
{
"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:us-east-1:111122223333:delivery:*",
"arn:aws:logs:us-east-1:111122223333:delivery-source:*",
"arn:aws:logs:us-east-1:111122223333: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:us-east-1:111122223333:*"
]
},
{
"Sid": "AllowLogDeliveryForWorkMail",
"Effect": "Allow",
"Action": [
"workmail:AllowVendedLogDeliveryForResource"
],
"Resource": [
"arn:aws:workmail:us-east-1:111122223333:organization/organization-id"
]
}
]
}
日志组和资源策略
接收日志的日志组必须具有包含特定权限的资源策略。如果日志组当前没有资源策略,而且设置日志记录的用户对日志组具有 logs:PutResourcePolicy、logs:DescribeResourcePolicies 和 logs:DescribeLogGroups 权限,那么当您开始将日志发送到 CloudWatch Logs 日志时,AWS会自动为其创建以下策略。
- JSON
-
-
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "AWSLogDeliveryWrite20150319",
"Effect": "Allow",
"Principal": {
"Service": [
"delivery.logs.amazonaws.com"
]
},
"Action": [
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": [
"arn:aws:logs:us-east-1:111122223333:log-group:my-log-group:log-stream:*"
],
"Condition": {
"StringEquals": {
"aws:SourceAccount": [
"111122223333"
]
},
"ArnLike": {
"aws:SourceArn": [
"arn:aws:logs:us-east-1:111122223333:*"
]
}
}
}
]
}
日志组资源策略大小限制注意事项
这些服务必须在资源策略中列出它们向其发送日志的每个日志组。CloudWatch Logs 资源策略限制为 5120 个字符。将日志发送到大量日志组的服务可能会遇到此限制。
为了缓解这种情况,CloudWatch Logs 会监控发送日志的服务所使用的资源策略的大小。当 CloudWatch Logs 检测到策略接近 5120 个字符的大小限制时,它将在该服务的资源策略中自动启用 /aws/vendedlogs/*。之后,您可以开始将名称以 /aws/vendedlogs/ 开头的日志组作为这些服务所发送的日志的目标。
发送到 Amazon S3 的日志
用户权限
要启用向 Amazon S3 发送日志,您必须使用以下权限登录。
- JSON
-
-
{
"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:us-east-1:111122223333:delivery:*",
"arn:aws:logs:us-east-1:111122223333:delivery-source:*",
"arn:aws:logs:us-east-1:111122223333: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:us-east-1:111122223333:organization/organization-id"
]
}
]
}
接收日志的 S3 存储桶必须具有包含特定权限的资源策略。如果存储桶当前没有资源策略,而设置日志记录的用户对存储桶具有 S3:GetBucketPolicy 和 S3:PutBucketPolicy 权限,那么当您开始将日志发送到 Amazon S3 时,AWS 会自动为其创建以下策略。
- JSON
-
-
{
"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:us-east-1:111122223333:delivery-source:*"
]
}
}
},
{
"Sid": "AWSLogDeliveryWrite",
"Effect": "Allow",
"Principal": {
"Service": "delivery.logs.amazonaws.com"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::my-bucket/AWSLogs/111122223333/*",
"Condition": {
"StringEquals": {
"s3:x-amz-acl": "bucket-owner-full-control",
"aws:SourceAccount": [
"account-id"
]
},
"ArnLike": {
"aws:SourceArn": [
"arn:aws:logs:us-east-1:111122223333:delivery-source:*"
]
}
}
}
]
}
在之前的策略中,对于 aws:SourceAccount,请指定将日志传送到此存储桶的账户 ID 列表。对于 aws:SourceArn,请按 arn:aws:logs:source-region:source-account-id:* 格式指定生成日志的资源 ARN 列表。
如果存储桶具有资源策略,但该策略不包含上一个策略中所示的语句,并且设置日志记录的用户对存储桶具有 S3:GetBucketPolicy 和 S3:PutBucketPolicy 权限,则该语句将附加到存储桶的资源策略中。
在某些情况下,如果未向 delivery.logs.amazonaws.com 授予 s3:ListBucket 权限,您可能会在 AWS CloudTrail 中看到 AccessDenied 错误。为了避免在 CloudTrail 日志中出现这些错误,您必须向 delivery.logs.amazonaws.com 授予 s3:ListBucket 权限。还必须包含与在前面的存储桶策略中设置的 s3:GetBucketAcl 权限一起显示的 Condition 参数。为简化这一过程,可以直接将 AWSLogDeliveryAclCheck 更新为 “Action”:
[“s3:GetBucketAcl”, “s3:ListBucket”],而不是创建一个新的 Statement。
Amazon S3 存储桶服务器端加密
您可以通过启用具有 Amazon S3 托管式密钥的服务器端加密(SSE-S3)或具有 AWS KMS 密钥(存储在 AWS Key Management Service 中)的服务器端加密(SSE-KMS)来保护 Amazon S3 存储桶中的数据。有关更多信息,请参阅使用服务器端加密保护数据。
如果选择 SSE-S3,则不需要额外的配置。Amazon S3 处理加密密钥。
如果选择 SSE-KMS,则必须使用客户自主管理型密钥,因为此场景不支持使用 AWS 托管式密钥。如果您使用 AWS 托管密钥设置加密,则会以不可读取的格式提供日志。
当您使用客户托管式 AWS KMS 密钥时,您可以在启用存储桶加密时指定客户托管式密钥的Amazon Resource Name (ARN)。将以下内容添加到客户自主管理型密钥的密钥策略(不是 S3 存储桶的存储桶策略)中,以便日志传输账户可以写入 S3 存储桶。
如果选择 SSE-KMS,则必须使用客户自主管理型密钥,因为此场景不支持使用 AWS 托管式密钥。当您使用客户托管式 AWS KMS 密钥时,您可以在启用存储桶加密时指定客户托管式密钥的Amazon Resource Name (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 发送日志,您必须使用以下权限登录。
- JSON
-
-
{
"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:us-east-1:111122223333:delivery:*",
"arn:aws:logs:us-east-1:111122223333:delivery-source:*",
"arn:aws:logs:us-east-1:111122223333: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:us-east-1:111122223333:deliverystream/*"
]
},
{
"Sid": "CreateServiceLinkedRole",
"Effect": "Allow",
"Action": [
"iam:CreateServiceLinkedRole"
],
"Resource": "arn:aws:iam::111122223333:role/aws-service-role/delivery.logs.amazonaws.com/AWSServiceRoleForLogDelivery"
},
{
"Sid": "AllowLogDeliveryForWorkMail",
"Effect": "Allow",
"Action": [
"workmail:AllowVendedLogDeliveryForResource"
],
"Resource": [
"arn:aws:workmail:us-east-1:111122223333:organization/organization-id"
]
}
]
}
用于资源权限的 IAM 角色
由于 Firehose 不使用资源策略,AWS 在将这些日志设置为发送到 Firehose 时会使用 IAM 角色。AWS 创建名为 AWSServiceRoleForLogDelivery 的服务相关角色。此服务相关角色包括以下权限。
此服务相关角色会为将 LogDeliveryEnabled 标签设置为 true 的所有 Firehose 传输流授予权限。当您设置日志记录时,AWS 会将此标签提供给目标传输流。
此服务相关角色还具有允许 delivery.logs.amazonaws.com 服务委托人来代入所需服务相关角色的信任策略。该信任策略如下所示:
- JSON
-
-
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "delivery.logs.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
控制台特定的权限
除了前面各节列出的权限外,如果您使用控制台而不是 API 来设置日志传输,则还需要以下权限:
- JSON
-
-
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "AllowLogDeliveryActions",
"Effect": "Allow",
"Action": [
"firehose:DescribeDeliveryStream",
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:logs:us-east-1:111122223333:log-group:*",
"arn:aws:firehose:us-east-1:111122223333:deliverystream/*",
"arn:aws:s3:::*"
]
},
{
"Sid": "ListAccessForDeliveryDestinations",
"Effect": "Allow",
"Action": [
"logs:DescribeLogGroups",
"firehose:ListDeliveryStreams",
"s3:ListAllMyBuckets"
],
"Resource": "*"
}
]
}