AWS CloudTrail
用户指南 (版本 1.0)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

AWS CloudTrail 基于身份的策略示例

默认情况下,IAM 用户和角色没有创建或修改 CloudTrail 资源的权限。它们还无法使用 AWS 管理控制台、AWS CLI 或 AWS API 执行任务。IAM 管理员必须创建 IAM 策略,为用户和角色授予权限,以便对他们所需的指定资源执行特定的 API 操作。然后,管理员必须将这些策略附加到需要这些权限的 IAM 用户、组或角色。

要了解如何使用这些示例 JSON 策略文档创建 IAM 基于身份的策略,请参阅 IAM 用户指南 中的 JSON 选项卡上的创建策略

策略最佳实践

Identity-based policies are very powerful. They determine whether someone can create, access, or delete CloudTrail resources in your account. These actions can incur costs for your AWS account. When you create or edit identity-based policies, follow these guidelines and recommendations:

  • Get Started Using AWS Managed Policies – To start using CloudTrail quickly, use AWS managed policies to give your employees the permissions they need. These policies are already available in your account and are maintained and updated by AWS. For more information, see Get Started Using Permissions With AWS Managed Policies in the IAM 用户指南.

  • Grant Least Privilege – When you create custom policies, grant only the permissions required to perform a task. Start with a minimum set of permissions and grant additional permissions as necessary. Doing so is more secure than starting with permissions that are too lenient and then trying to tighten them later. For more information, see Grant Least Privilege in the IAM 用户指南.

  • Enable MFA for Sensitive Operations – For extra security, require IAM users to use multi-factor authentication (MFA) to access sensitive resources or API operations. For more information, see Using Multi-Factor Authentication (MFA) in AWS in the IAM 用户指南.

  • Use Policy Conditions for Extra Security – To the extent that it's practical, define the conditions under which your identity-based policies allow access to a resource. For example, you can write conditions to specify a range of allowable IP addresses that a request must come from. You can also write conditions to allow requests only within a specified date or time range, or to require the use of SSL or MFA. For more information, see IAM JSON Policy Elements: Condition in the IAM 用户指南.

示例:允许和拒绝针对指定跟踪的操作

以下示例演示了一个策略,该策略允许具有此策略的用户查看跟踪的状态和配置,并为名为 my-First-Trail 的跟踪启动和停止日志记录。此跟踪是在 ID 为 123456789012 的 AWS 账户的 美国东部(俄亥俄州) 区域(其主区域)中创建的。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudtrail:StartLogging", "cloudtrail:StopLogging", "cloudtrail:GetTrailStatus", "cloudtrail:GetEventSelectors" ], "Resource": [ "arn:aws:cloudtrail:us-east-2:123456789012:trail/My-First-Trail" ] } ] }

以下示例演示了一个策略,该策略对任何名称不为 My-First-Trail 的跟踪显式拒绝 CloudTrail 操作。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "cloudtrail:*" ], "NotResource": [ "arn:aws:cloudtrail:us-east-2:123456789012:trail/My-First-Trail" ] } ] }

示例:对针对特定跟踪的操作创建和应用策略

您可以使用权限和策略来控制用户对 CloudTrail 跟踪执行特定操作的能力。

例如,您不想贵公司的开发人员组中的用户开始或停止对特定跟踪的日志记录,但想对他们授予权限以对该跟踪执行 DescribeTrailsGetTrailStatus 操作。您希望开发人员组的用户能够对自己管理的跟踪执行 StartLoggingStopLogging 操作。

您可以创建两条策略语句,然后将它们附加到您在 IAM 中创建的开发人员组。有关 IAM 中的组的更多信息,请参阅 IAM 用户指南 中的 IAM 组

在第一条策略中,您拒绝对您指定的跟踪 ARN 执行 StartLoggingStopLogging 操作。在下面的示例中,跟踪 ARN 为 arn:aws:cloudtrail:us-east-2:123456789012:trail/Example-Trail

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1446057698000", "Effect": "Deny", "Action": [ "cloudtrail:StartLogging", "cloudtrail:StopLogging" ], "Resource": [ "arn:aws:cloudtrail:us-east-2:123456789012:trail/Example-Trail" ] } ] }

在第二条策略中,允许对所有 CloudTrail 资源执行 DescribeTrailsGetTrailStatus 操作:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1446072643000", "Effect": "Allow", "Action": [ "cloudtrail:DescribeTrails", "cloudtrail:GetTrailStatus" ], "Resource": [ "*" ] } ] }

如果开发人员组中的用户尝试针对您在第一条策略中指定的跟踪启动或停止日志记录,该用户会收到拒绝访问异常。该开发人员组中的用户可针对自己创建和管理的跟踪启动和停止日志记录。

以下 CLI 示例显示已在名为 devgroup 的 AWS CLI 配置文件中配置开发人员组。首先,devgroup 的用户运行 describe-trails 命令。

$ aws --profile devgroup cloudtrail describe-trails

该命令成功完成:

{ "trailList": [ { "IncludeGlobalServiceEvents": true, "Name": "Default", "TrailARN": "arn:aws:cloudtrail:us-east-2:123456789012:trail/Example-Trail", "IsMultiRegionTrail": false, "S3BucketName": "myS3bucket ", "HomeRegion": "us-east-2" } ] }

然后,该用户针对您在第一条策略中指定的跟踪运行 get-trail-status 命令。

$ aws --profile devgroup cloudtrail get-trail-status --name Example-Trail

该命令成功完成:

{ "LatestDeliveryTime": 1449517556.256, "LatestDeliveryAttemptTime": "2015-12-07T19:45:56Z", "LatestNotificationAttemptSucceeded": "", "LatestDeliveryAttemptSucceeded": "2015-12-07T19:45:56Z", "IsLogging": true, "TimeLoggingStarted": "2015-12-07T19:36:27Z", "StartLoggingTime": 1449516987.685, "StopLoggingTime": 1449516977.332, "LatestNotificationAttemptTime": "", "TimeLoggingStopped": "2015-12-07T19:36:17Z" }

接下来,一位 devgroup 用户针对同一个跟踪运行 stop-logging 命令。

$ aws --profile devgroup cloudtrail stop-logging --name Example-Trail

该命令返回拒绝访问异常:

A client error (AccessDeniedException) occurred when calling the StopLogging operation: Unknown

该用户针对同一个跟踪运行 start-logging 命令。

$ aws --profile devgroup cloudtrail start-logging --name Example-Trail

该命令返回拒绝访问异常:

A client error (AccessDeniedException) occurred when calling the StartLogging operation: Unknown

授予使用 CloudTrail 控制台的权限

授予 CloudTrail 管理权限

要允许用户管理 CloudTrail 跟踪,您必须向 IAM 用户授予显式权限以使其能够执行与 CloudTrail 关联的操作。在大多数情况下,您可以使用包含预定义权限的 AWS 托管策略来执行此操作。

注意

您向用户授予的执行 CloudTrail 管理任务的权限不同于 CloudTrail 本身将日志文件传输到 Amazon S3 存储桶或将通知发送到 Amazon SNS 主题所需的权限。有关这些权限的更多信息,请参阅CloudTrail 的 Amazon S3 存储桶策略

如果您配置与 Amazon CloudWatch Logs 的集成,则 CloudTrail 还需要一个角色,可通过代入此角色来将事件传送到 Amazon CloudWatch Logs 日志组。这将需要额外的权限以创建角色以及角色本身。有关更多信息,请参阅 授予在 Amazon CloudWatch Logs 控制台中查看和配置 CloudTrail 信息的权限将事件发送到 CloudWatch Logs

一种典型方法是创建具有适当权限的 IAM 组,然后将单个 IAM 用户添加到该组。例如,您可以为应具有 CloudTrail 操作的完全访问权的用户创建 IAM 组,并为应能够查看跟踪信息而不是创建或更改跟踪的用户创建单独的组。

创建 IAM 组和用户以进行 CloudTrail 访问

  1. 通过以下网址打开 IAM 控制台:https://console.amazonaws.cn/iam

  2. 在控制面板的导航窗格中,选择 Groups,然后选择 Create New Group

  3. 键入名称,然后选择 Next Step

  4. 附加策略页面上,找到并选择适用于 CloudTrail 的下列策略这一:

    • AWSCloudTrailFullAccess。此策略使该组中的用户可以完全访问 CloudTrail 操作。这些用户有权管理 Amazon S3 存储桶、CloudWatch Logs 的日志组和某个跟踪的 Amazon SNS 主题。

      注意

      未打算跨您的 AWS 账户广泛共享 AWSCloudTrailFullAccess 策略。拥有此角色的用户能够禁用或重新配置他们的 AWS 账户中最敏感且最重要的审计函数。因此,此策略应仅应用于账户管理员,并且此策略的使用应受到密切控制和监控。

    • AWSCloudTrailReadOnlyAccess。此策略可让组中的用户查看 CloudTrail 控制台,包括近期事件和事件历史记录。这些用户还可以查看现有跟踪及其存储桶。用户可以下载事件历史记录文件,但无法创建或更新跟踪。

    注意

    您还可创建用于授予单个操作的权限的自定义策略。有关更多信息,请参阅向 CloudTrail 用户授予自定义权限

  5. 选择 Next Step

  6. 查看您即将创建的组的信息。

    注意

    您可以编辑组名,但需要再次选择策略。

  7. 选择 Create Group。已创建的组将显示在组列表中。

  8. 选择您创建的组名,选择 Group Actions,然后选择 Add Users to Group

  9. Add Users to Group 页面上,选择现有的 IAM 用户,然后选择 Add Users。如果还没有 IAM 用户,请选择 Create New Users,输入用户名,然后选择 Create

  10. 如果创建了新用户,请在导航窗格中选择 Users,然后针对每个用户完成以下操作:

    1. 选择用户。

    2. 如果用户将使用控制台管理 CloudTrail,则在 Security Credentials 选项卡中选择 Manage Password,然后为用户创建密码。

    3. 如果用户将使用 CLI 或 API 管理 CloudTrail,并且如果您尚未创建访问密钥,则在 Security Credentials 选项卡中选择 Manage Access Keys,然后创建访问密钥。将密钥存储在安全位置。

    4. 为每个用户提供证书(访问密钥或密码)。

其他资源

要了解有关创建 IAM 用户、组、策略和权限的更多信息,请参阅 IAM 用户指南 中的使用控制台创建管理员组权限与策略

对于仅调用 AWS CLI 或 AWS API 的用户,您不需要允许最低控制台权限。相反,只允许访问与您尝试执行的 API 操作相匹配的操作。

允许用户查看他们自己的权限

This example shows how you might create a policy that allows IAM users to view the inline and managed policies that are attached to their user identity. This policy includes permissions to complete this action on the console or programmatically using the AWS CLI or AWS API.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ViewOwnUserInfo", "Effect": "Allow", "Action": [ "iam:GetUserPolicy", "iam:ListGroupsForUser", "iam:ListAttachedUserPolicies", "iam:ListUserPolicies", "iam:GetUser" ], "Resource": [ "arn:aws-cn:iam::*:user/${aws:username}" ] }, { "Sid": "NavigateInConsole", "Effect": "Allow", "Action": [ "iam:GetGroupPolicy", "iam:GetPolicyVersion", "iam:GetPolicy", "iam:ListAttachedGroupPolicies", "iam:ListGroupPolicies", "iam:ListPolicyVersions", "iam:ListPolicies", "iam:ListUsers" ], "Resource": "*" } ] }

向 CloudTrail 用户授予自定义权限

CloudTrail 策略向使用 CloudTrail 的用户授予权限。如果您需要向用户授予不同权限,可将 CloudTrail 策略挂载到 IAM 组或用户。您可以编辑策略,使之包括或排除特定权限。您还可以创建自己的自定义策略。策略是一些 JSON 文档,它们定义了允许用户执行的操作以及允许用户对哪些资源执行这些操作。有关特定示例,请参阅 示例:允许和拒绝针对指定跟踪的操作示例:对针对特定跟踪的操作创建和应用策略

只读访问权限

以下示例展示了一个策略,该策略授予对 CloudTrail 跟踪的只读访问权。该示例等同于托管策略 AWSCloudTrailReadOnlyAccess。它对用户授予查看跟踪信息的权限,而不是创建或更新跟踪的权限。此策略还授予了读取 Amazon S3 存储桶中的对象的权限,而不是创建或删除这些对象的权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetBucketLocation" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "cloudtrail:DescribeTrails", "cloudtrail:GetTrailStatus", "cloudtrail:LookupEvents", "cloudtrail:ListPublicKeys", "cloudtrail:ListTags", "s3:ListAllMyBuckets", "kms:ListAliases", "lambda:ListFunctions" ], "Resource": "*" } ] }

在这些策略语句中,Effect 元素指定是允许还是拒绝操作。Action 元素列出了允许用户执行的特定操作。Resource 元素列出允许用户对其执行这些操作的 AWS 资源。对于控制对 CloudTrail 操作的访问的策略,Resource 元素通常设置为 *(一个表示“所有资源”的通配符)。

Action 元素中的值对应于服务支持的 API。操作前附加了 cloudtrail: 以表示其指的是 CloudTrail 操作。您可以在 Action 元素中使用 * 通配符,如以下示例所示:

  • "Action": ["cloudtrail:*Logging"]

    这允许以“Logging”结尾的所有 CloudTrail 操作(StartLoggingStopLogging)。

  • "Action": ["cloudtrail:*"]

    这允许所有 CloudTrail 操作,但不允许其他 AWS 服务的操作。

  • "Action": ["*"]

    这将允许所有 AWS 操作。此权限适合授予充当您账户的 AWS 管理员的用户。

只读策略不对用户授予执行 CreateTrailUpdateTrailStartLoggingStopLogging 操作的权限。具有此策略的用户不能够创建跟踪、更新跟踪或启用和关闭日志记录。有关 CloudTrail 操作的列表,请参阅 AWS CloudTrail API Reference

完全访问权限

以下示例展示了一个授予对 CloudTrail 的完全访问权限的策略。该示例等同于托管策略 AWSCloudTrailFullAccess。它对用户授予执行所有 CloudTrail 操作的权限。它还允许用户记录 Amazon S3 和 AWS Lambda 中的数据事件、管理 Amazon S3 存储桶中的文件、管理 CloudWatch Logs 对 CloudTrail 日志事件的监控方式,以及管理与用户关联的账户中的 Amazon SNS 主题。

重要

未打算跨您的 AWS 账户广泛共享 AWSCloudTrailFullAccess 策略或等同的权限。拥有此角色或等同访问权限的用户能够禁用或重新配置他们的 AWS 账户中最敏感且最重要的审计函数。因此,此策略应仅应用于账户管理员,并且此策略的使用应受到密切控制和监控。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sns:AddPermission", "sns:CreateTopic", "sns:DeleteTopic", "sns:ListTopics", "sns:SetTopicAttributes", "sns:GetTopicAttributes" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:DeleteBucket", "s3:ListAllMyBuckets", "s3:PutBucketPolicy", "s3:ListBucket", "s3:GetObject", "s3:GetBucketLocation", "s3:GetBucketPolicy" ], "Resource": "*" }, { "Effect": "Allow", "Action": "cloudtrail:*", "Resource": "*" }, { "Effect": "Allow", "Action": [ "logs:CreateLogGroup" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:PassRole", "iam:ListRoles", "iam:GetRolePolicy", "iam:GetUser" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "kms:ListKeys", "kms:ListAliases" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "lambda:ListFunctions" ], "Resource": "*" } ] }

授予在 CloudTrail 控制台中查看 AWS Config 信息的权限

您可以在 CloudTrail 控制台中查看事件信息,包括与该事件相关的资源。对于这些资源,您可以选择 AWS Config 图标在 AWS Config 控制台中查看资源的时间表。可将此策略挂载到您的用户,以对其授予只读 AWS Config 访问权。该策略不对他们授予在 AWS Config 中更改设置的权限。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "config:Get*", "config:Describe*", "config:List*" ], "Resource": "*" }] }

有关更多信息,请参阅 在 AWS Config 中查看引用的资源

授予在 Amazon CloudWatch Logs 控制台中查看和配置 CloudTrail 信息的权限

如果您具有足够的权限,则可以在 CloudTrail 控制台查看和配置将事件传送到 CloudWatch Logs。这些权限可能超出了为 CloudTrail 管理员授予的权限。可将此策略附加到将配置和管理 CloudTrail 与 CloudWatch Logs 集成的管理员。该策略未在 CloudTrail 或 CloudWatch Logs 中直接授予他们权限,而是授予创建和配置 CloudTrail 将代入的角色所需的权限,此角色将事件成功地传送到您的 CloudWatch Logs 组。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "iam:CreateRole" "iam:PutRolePolicy" "iam:ListRoles" "iam:GetRolePolicy" "iam:GetUser" ], "Resource": "*" }] }

有关更多信息,请参阅 使用 Amazon CloudWatch Logs 监控 CloudTrail 日志文件

附加信息

要了解有关创建 IAM 用户、组、策略和权限的更多信息,请参阅 IAM 用户指南 中的 创建您的第一个 IAM 用户和管理员访问管理