AWS Identity and Access Management
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用上次访问的服务数据的示例方案

您可以使用上次访问的服务数据确定您为 IAM 实体或 AWS Organizations 实体授予的权限。有关更多信息,请参阅 使用上次访问的服务数据优化权限

注意

在 IAM 或 AWS Organizations 中查看实体或策略的访问数据之前,请确保您了解数据的报告周期、报告的实体和评估的策略类型。有关更多信息,请参阅需知信息

作为管理员,您可以平衡适合您的公司的可访问性和最小权限。

使用数据减少 IAM 组的权限

您可以使用上次访问的服务数据减少 IAM 组权限,以仅包含用户所需的服务。此方法是在服务级别授予最小权限的重要步骤。

例如,Paulo Santos 是负责为 Example Corp 定义 AWS 用户权限的管理员。该公司刚刚开始使用 AWS,而软件开发团队尚未定义他们将使用的 AWS 服务。Paulo 希望仅向团队授予访问他们所需的服务的权限,但由于尚未定义,因此他暂时向团队授予高级用户权限。然后,他使用上次访问的服务数据来减少组的权限。

Paulo 使用以下 JSON 文本创建名为 ExampleDevelopment 的托管策略。然后,他将该策略附加到名为 Development 的组,并将所有开发人员添加到该组。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "FullAccessToAllServicesExceptPeopleManagement", "Effect": "Allow", "NotAction": [ "iam:*", "organizations:*" ], "Resource": "*" }, { "Sid": "RequiredIamAndOrgsActions", "Effect": "Allow", "Action": [ "iam:CreateServiceLinkedRole", "iam:DeleteServiceLinkedRole", "iam:ListRoles", "organizations:DescribeOrganization" ], "Resource": "*" } ] }

Paulo 决定等待 90 天,之后再使用 AWS 管理控制台查看上次访问的服务数据(适用于 Development 组)。他查看组成员访问过的服务的列表。他了解到,用户上周访问了 5 项服务:AWS CloudTrail、Amazon CloudWatch Logs、Amazon EC2、AWS KMS 和 Amazon S3。他们在首次评估 AWS 时访问过其他几项服务,但之后便未访问。

Paulo 决定减少策略权限以仅包含上述 5 项服务以及所需的 IAM 和 组织 操作。他使用以下 JSON 文本编辑 ExampleDevelopment 策略。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "FullAccessToListedServices", "Effect": "Allow", "Action": [ "s3:*", "kms:*", "cloudtrail:*", "logs:*", "ec2:*" ], "Resource": "*" }, { "Sid": "RequiredIamAndOrgsActions", "Effect": "Allow", "Action": [ "iam:CreateServiceLinkedRole", "iam:DeleteServiceLinkedRole", "iam:ListRoles", "organizations:DescribeOrganization" ], "Resource": "*" } ] }

为了进一步减少权限,Paulo 可在 AWS CloudTrail Event history (事件历史记录) 中查看账户的事件。在那里,他可以查看可用于减少策略权限的详细事件信息,以仅包括开发人员所需的操作和资源。有关更多信息,请参阅 AWS CloudTrail 用户指南 中的在 CloudTrail 控制台中查看 CloudTrail 事件

使用数据减少 IAM 用户的权限

您可以使用上次访问的服务数据来减少单个 IAM 用户的权限。

例如,Martha Rivera 是 IT 管理员,她负责确保公司的人员没有多余的 AWS 权限。在定期安检中,她检查所有 IAM 用户的权限。这些用户中,有一个是名叫 Nikhil Jayashankar 的应用程序开发人员,以前担任过安全工程师。由于工作要求发生变化,Nikhil 成为了 app-dev 组和 security-team 组的成员。他的新工作的 app-dev 组授予了对多项服务(包括 Amazon EC2、Amazon EBS、Auto Scaling、Route 53 和 Elastic Transcoder)的权限。他的旧工作的 security-team 组授予了对 IAM 和 CloudTrail 的权限。

Martha 以管理员身份登录 IAM 控制台,并依次选择 Users (用户)、姓名 nikhiljAccess Advisor (访问顾问) 选项卡。

Martha 查看 Last Accessed (上次访问时间) 列,发现 Nikhil 最近未访问过 IAM、CloudTrail、Route 53、Amazon Elastic Transcoder 以及很多其他 AWS 服务。在其公司内部,Martha 确认 Nikhil 不再有访问 IAM 和 CloudTrail 的业务需要,因为他不再是内部安全团队的成员。

Martha 现在准备操作上次访问的服务数据。但是,与上一个示例中的组不同,像 nikhilj 这样的 IAM 用户可能受多个策略的约束并且是多个组的成员。Martha 必须谨慎行事,以避免无意中破坏 nikhilj 或其他组成员的访问权限。除了了解 Nikhil 应拥有的访问权限之外,她还必须确定他如何接收这些权限。

Martha 选择 Permissions (权限) 选项卡,可在其中查看直接附加到 nikhilj 的策略以及从组附加的策略。她扩展每个策略并查看策略摘要,以了解哪个策略允许访问 Nikhil 未使用的服务:

  • IAM – IAMFullAccess AWS 托管策略直接附加到 nikhilj 并附加到 security-team 组。

  • CloudTrail – AWSCloudTrailReadOnlyAccess AWS 托管策略附加到 security-team 组。

  • Route 53 – App-Dev-Route53 客户托管策略附加到 app-dev 组。

  • Elastic Transcoder – App-Dev-ElasticTranscoder 客户托管策略附加到 app-dev 组。

Martha 决定删除直接附加到 nikhiljIAMFullAccess AWS 托管策略。她还删除 Nikhil 的 security-team 组成员资格。这两项操作删除了对 IAM 和 CloudTrail 的不必要的访问权限。

Nikhil 对 Route 53 和 Elastic Transcoder 的访问权限由 app-dev 组授予。虽然 Nikhil 未使用这些服务,但组的其他成员可能使用了这些服务。Martha 查看 app-dev 组的上次访问的服务数据,了解到有几个成员最近访问过 Route 53,但任何组成员在去年均未访问过 Elastic Transcoder。她从组中删除 App-Dev-ElasticTranscoder 客户托管策略。

然后,Martha 查看 App-Dev-ElasticTranscoder 客户托管策略的上次访问的服务数据。她了解到该策略未附加到任何其他 IAM 身份。她在公司内部进行调查,以确保将来不再需要该策略,然后将其删除。

在删除 IAM 资源之前使用数据

在删除 IAM 资源之前,您可以使用上次访问的服务数据,以确保自上次使用该资源以来已经过了一定的时间。这适用于用户、组、角色和策略。要了解这些操作的更多信息,请参阅以下主题:

在编辑 IAM 策略之前使用数据

您可以先查看 IAM 身份(用户、组或角色)或 IAM 策略的上次访问的服务数据,然后再编辑影响该资源的策略。这很重要,因为您不想删除正在使用它的人员的访问权限。

例如,Arnav Desai 是 Example Corp 的开发人员和 AWS 管理员。当他的团队开始使用 AWS 时,他们为所有开发人员提供了高级用户访问权限,允许他们完全访问除 IAM 和 组织 之外的所有服务。作为授予最小权限操作的第一步,Arnav 希望使用 AWS CLI 来查看其账户中的托管策略。

为此,Arnav 首先使用以下命令在其账户中列出附加到身份的客户托管权限策略:

aws iam list-policies --scope Local --only-attached --policy-usage-filter PermissionsPolicy

从响应中,他捕获了每个策略的 ARN。然后,Arnav 使用以下命令为每个策略生成上次访问的服务数据报告。

aws iam generate-service-last-accessed-details --arn arn:aws:iam::123456789012:policy/ExamplePolicy1

在该响应中,他从 JobId 字段中捕获了生成的报告的 ID。然后,Arnav 轮询以下命令,直到 JobStatus 字段返回 COMPLETEDFAILED 值。如果作业失败,他将捕获错误。

aws iam get-service-last-accessed-details --job-id 98a765b4-3cde-2101-2345-example678f9

当作业的状态为 COMPLETED 时,Arnav 将解析 JSON 格式的 ServicesLastAccessed 数组的内容。

"ServicesLastAccessed": [ { "TotalAuthenticatedEntities": 1, "LastAuthenticated": 2018-11-01T21:24:33.222Z, "ServiceNamespace": "dynamodb", "LastAuthenticatedEntity": "arn:aws:iam::123456789012:user/IAMExampleUser", "ServiceName": "Amazon DynamoDB" }, { "TotalAuthenticatedEntities": 0, "ServiceNamespace": "ec2", "ServiceName": "Amazon EC2" }, { "TotalAuthenticatedEntities": 3, "LastAuthenticated": 2018-08-25T15:29:51.156Z, "ServiceNamespace": "s3", "LastAuthenticatedEntity": "arn:aws:iam::123456789012:role/IAMExampleRole", "ServiceName": "Amazon S3" } ]

通过此信息,Arnav 了解到 ExamplePolicy1 策略允许访问三项服务,即 Amazon DynamoDB、Amazon S3 和 Amazon EC2。名为 IAMExampleUser 的 IAM 用户上次于 11 月 1 日尝试访问过 DynamoDB,并且有人已于 8 月 25 日使用 IAMExampleRole 角色尝试访问 Amazon S3。此外,还有另外两个实体在去年尝试访问过 Amazon S3。但是,去年没有人尝试访问 Amazon EC2。

这意味着,Arnav 可从策略中安全地删除 Amazon EC2 操作。Arnav 想查看策略的当前 JSON 文档。首先,他必须使用以下命令确定策略的版本号。

aws iam list-policy-versions --policy-arn arn:aws:iam::123456789012:policy/ExamplePolicy1

从响应中,Arnav 收集 Versions 数组中的当前默认版本号。然后,他使用该版本号 (v2) 通过以下命令请求 JSON 策略文档。

aws iam get-policy-version --policy-arn arn:aws:iam::123456789012:policy/ExamplePolicy1 --version-id v2

Arnav 存储 PolicyVersion 数组的 Document 字段中返回的 JSON 策略文档。在该策略文档中,Arnav 在 ec2 命名空间中搜索操作。如果在该策略中没有其他命名空间中的操作,则他将该策略与受影响的身份(用户、组和角色)分离。然后,他删除该策略。在这种情况下,该策略确实包含 Amazon DynamoDB 和 Amazon S3 服务。因此,Arnav 从文档中删除 Amazon EC2 操作并保存更改。然后,他使用以下命令通过文档的新版本更新策略并将该版本设置为默认策略版本。

aws iam create-policy-version --policy-arn arn:aws:iam::123456789012:policy/ExamplePolicy1 --policy-document file://UpdatedPolicy.json --set-as-default

ExamplePolicy1 策略现已更新以删除对不必要的 Amazon EC2 服务的访问权限。

其他 IAM 方案

有关 IAM 资源(用户、组、角色或策略)上次尝试访问服务的时间的信息可在您完成以下任何任务时为您提供帮助:

使用数据来细化组织部门的权限

您可以在 AWS Organizations 中使用上次访问的服务数据优化组织单位 (OU) 的权限。

例如,John Stiles 是一个 AWS Organizations 管理员。他负责确保具有公司 AWS 账户的人员没有多余的权限。作为定期安全审核的一部分,他检查组织的权限。他的 Development OU 包含经常用于测试新 AWS 服务的账户。John 决定定期查看超过 180 天未访问的服务的报告。然后,他删除 OU 成员访问这些服务的权限。

John 使用主账户凭证登录到 IAM 控制台。在 IAM 控制台中,他找到 Development OU 的 组织 数据。他查看 Service access report (服务访问报告) 表,并发现两个超过 180 天(首选的时段)未访问的 AWS 服务。他记得为开发团队添加了权限以访问 Amazon Lex 和 AWS Database Migration Service。John 联系开发团队,并确认他们不再有测试这些服务的业务需求。

John 现在已准备好处理上次访问的服务数据。他选择 Edit in AWS Organizations (在 AWS Organizations 中编辑),系统提醒他 SCP 将附加到多个实体。他选择 Continue (继续)。在 AWS Organizations 中,他检查目标以了解 SCP 附加到哪些 组织 实体。所有实体均位于 Development OU 中。

John 决定在 NewServiceTest SCP 中拒绝访问 Amazon Lex 和 AWS Database Migration Service 操作。该操作将删除这些对这些服务的不必要访问。