AWS Identity and Access Management (IAM) 常见问题

一般性问题

IAM 提供涵盖整个 AWS 的精细访问控制。借助 IAM,您可以控制在特定条件下对服务和资源的访问。使用 IAM policy 来管理您的员工和系统的权限,以确保最低权限。IAM 不另外收取费用。有关更多信息,请参阅什么是 IAM?

IAM 为 AWS 服务提供身份验证和授权。服务会评估允许还是拒绝 AWS 请求。默认情况下拒绝访问,只有在策略明确授予访问权限时才允许访问。您可以将策略附加到角色和资源以控制跨 AWS 的访问。有关更多信息,请参阅了解 IAM 的工作原理

使用 IAM 策略设置权限时,仅授予执行任务所需的权限。此实践称为授予最低权限。 您可以通过定义可在特定条件下对特定资源执行的操作,在 IAM 中应用最低权限。有关更多信息,请参阅适用于 AWS 资源的 Access Management

要开始使用 IAM 管理 AWS 服务和资源的权限,请创建 IAM 角色并为其授予权限。对于员工用户,创建可由您的身份提供商代入的角色。对于系统,创建可由您正在使用的服务代入的角色,如 Amazon EC2 或 AWS Lambda。创建角色后,您可以将策略附加到角色以授予满足您需求的权限。刚开始时,您可能不知道需要的特定权限,因此您可以从更广泛的权限开始。 AWS 托管式策略提供可帮助您入门的权限,并且适用于所有 AWS 账户。然后,通过定义特定于您的使用案例的客户管理型策略来进一步减少权限。您可以在 IAM 控制台中或通过 AWS API 或 AWS CLI 创建和管理策略与角色。有关更多信息,请参阅 IAM 入门

IAM 资源

AWS Identity and Access Management(IAM)角色提供了一种依赖临时安全凭证访问 AWS 的方法。每个角色都有一组发出 AWS 服务请求的权限,并且角色未与特定用户或组关联。相反,身份提供商或 AWS 服务等可信实体代入角色。有关更多信息,请参阅 IAM 角色

您应该使用 IAM 角色通过依赖短期凭证来授予对您的 AWS 账户的访问权限,这是一种安全最佳实践。授权身份(可以是 AWS 服务或来自您的身份提供商的用户)可以代入发出 AWS 请求的角色。要向角色授予权限,请将 IAM 策略附加到该角色。有关更多信息,请参阅针对角色的常见情形

IAM 用户是具有长期凭证的身份。您可以将 IAM 用户用于员工用户。在这种情况下,AWS 建议使用身份提供商并通过代入角色联合到 AWS。您还可以使用角色授予对 AWS Lambda 函数等服务和功能的跨账户访问权限。在某些情况下,您可能需要 IAM 用户提供具有长期凭证的访问密钥,以访问您的 AWS 账户。对于这些情况,AWS 建议使用 IAM 访问上次使用的信息来经常轮换凭证并删除未使用的凭证。有关更多信息,请参阅 AWS 身份管理概述:用户

IAM policy 为您附加它们的实体定义权限。例如,要授予对 IAM 角色的访问权限,请将策略附加到此角色。策略中定义的权限确定是允许还是拒绝请求。您还可以将策略附加到某些资源(例如 Amazon S3 存储桶)以授予直接的跨账户访问权限。您可以将策略附加到 AWS 企业或企业单位,以限制跨多个账户的访问权限。AWS 在 IAM 角色发出请求时评估这些策略。有关更多信息,请参阅基于身份的策略

授予访问权限

要使用 AWS Identity and Access Management(IAM)授予对服务和资源的访问权限,请将 IAM 策略附加到角色或资源。您可以从附加 AWS 托管式策略开始,这些策略由 AWS 拥有和更新,并且在所有 AWS 账户中都可用。如果您知道使用案例所需的特定权限,则可以创建客户管理型策略并将它们附加到角色。一些 AWS 资源提供了一种通过定义附加到资源(例如 Amazon S3 存储桶)的策略来授予访问权限的方法。这些基于资源的策略允许您授予对其所附加资源的直接的跨账户存取。有关更多信息,请参阅适用于 AWS 资源的 Access Management

要将权限分配给角色或资源,请创建一个策略,此策略是定义权限的 JavaScript 对象表示法(JSON)文档。此文档包括授予或拒绝访问特定服务操作、资源和条件的权限声明。创建策略后,您可以将其附加到一个或多个 AWS 角色以向您的 AWS 账户授予权限。要授予对资源(例如 Amazon S3 存储桶)的直接的跨账户访问权限,请使用基于资源的策略。在 IAM 控制台或通过 AWS API 或 AWS CLI 创建您的策略。有关更多信息,请参阅创建 IAM policy

AWS 托管式策略由 AWS 创建和管理,涵盖常见使用案例。 开始时,您可以使用 AWS 托管式策略授予更广泛的权限,这些策略在您的 AWS 账户中可用并且在所有 AWS 账户中通用。然后,当您优化您的要求时,可以通过定义特定于您的使用案例的客户托管式策略来减少权限,从而实现最低权限。有关更多信息,请参阅 AWS 托管式策略

要仅授予执行任务所需的权限,您可以创建特定于您的使用案例和资源的客户托管式策略。使用客户托管式策略来继续优化您的特定要求的权限。有关更多信息,请参阅客户管理型策略

内联策略嵌入在特定 IAM 角色中并且是其固有的。如果您希望在策略与其应用的身份之间保持严格的一对一关系,请使用内联策略。例如,您可以授予管理权限以确保它们不附加到其他角色。有关更多信息,请参阅内联策略

基于资源的策略是附加到资源的权限策略。例如,您可以将基于资源的策略附加到 Amazon S3 存储桶、Amazon SQS 队列、VPC 终端节点和 AWS Key Management Service 加密密钥。有关支持基于资源的策略的服务列表,请参阅使用 IAM 的 AWS 服务。使用基于资源的策略授予直接的跨账户访问权限。使用基于资源的策略,您可以定义谁有权访问资源以及他们可以使用该资源执行哪些操作。有关更多信息,请参阅基于身份的策略和基于资源的策略

RBAC 为您提供了一种根据人员工作职能(在 AWS 之外称为角色)分配权限的方法。IAM 通过定义具有与工作职能一致的权限的 IAM 角色来提供 RBAC。然后,您可以授予个人访问权限,以代入这些角色来执行特定的工作职能。借助 RBAC,您可以通过查看每个 IAM 角色及其附加权限来审计访问权限。有关更多信息,请参阅 ABAC 与传统 RBAC 模型的对比

作为最佳实践,仅授予对执行每项任务所需的特定服务操作和资源的访问权限。这称为授予最低权限。员工添加新资源时,您必须更新策略以允许访问这些资源。

ABAC 是一种授权策略,它根据属性定义权限。在 AWS 中,这些属性称为标签,您可以在 AWS 资源、IAM 角色和角色会话中进行定义。使用 ABAC,您可以根据标签的值定义一组权限。您可以通过要求角色或会话上的标签与资源上的标签匹配来授予对特定资源的精细权限。例如,您可以制定策略,授予开发人员对标记为“开发人员”职位的资源的访问权限。 ABAC 通过在使用特定标签创建资源时授予资源权限,在快速增长的环境中很有帮助。有关更多信息,请参阅适用于 AWS 的基于属性的访问控制

要使用 ABAC 授予访问权限,请先定义要用于访问控制的标签键和值。然后,确保您的 IAM 角色具有适当的标签键和值。如果多个身份使用此角色,您还可以定义会话标签键和值。接下来,确保您的资源具有适当的标签键和值。您还可以要求用户使用适当的标签创建资源,并限制访问以进行修改。标签就位后,定义一个策略,授予对特定操作和资源类型的访问权限,但前提是角色或会话标签与资源标签匹配。有关演示如何在 AWS 中使用 ABAC 的详细教程,请参阅 IAM 教程:根据标签定义访问 AWS 资源的权限

限制访问权限

使用 AWS Identity and Access Management (IAM),默认情况下所有访问都会遭到拒绝,并且需要一个授予访问权限的策略。大规模管理权限时,您可能希望实施权限防护机制并限制跨帐户访问。要限制访问,请在任何策略中指定 Deny(拒绝)语句。如果 Deny(拒绝)语句适用于访问请求,它总是优先于 Allow(允许)语句。例如,如果您允许访问 AWS 中的所有操作但拒绝访问 IAM,则对 IAM 的任何请求都会遭到拒绝。您可以在任何类型的策略中包含 Deny(拒绝)语句,包括 AWS Organizations 的基于身份的策略、基于资源的策略和服务控制策略。有关更多信息,请参阅使用 AWS Identity and Access Management 控制访问

SCP 类似于 IAM policy 并使用几乎相同的语法。但是,SCP 不授予权限。相反,SCP 允许或拒绝拥有 Organizations 成员账户的各个 AWS 账户或企业单位内的账户组对 AWS 服务进行访问。来自 SCP 的指定操作会影响所有 IAM 用户和角色,包括成员账户的根用户。有关更多信息,请参阅策略评估逻辑。 

分析访问权限

开始授予权限时,您可以在探索和试验时从更广泛的权限开始。随着您的使用案例的成熟,AWS 建议您优化权限以仅授予以实现最低权限为目标所需的权限。AWS 提供了多种工具来帮助您优化权限。您可以从 AWS 托管式策略开始,这些策略由 AWS 创建和管理,并包含常见使用案例的权限。在您优化您的权限时,请在客户管理型策略中定义特定权限。为帮助您确定所需的特定权限,请使用 AWS Identity and Access Management(IAM)Access Analyzer、查看 AWS CloudTrail 日志并检查上次访问信息。您还可以使用 IAM policy simulator 对策略进行测试和故障排除。

实现最低权限是一个连续的循环,会随着您需求的发展授予正确的精细权限。IAM Access Analyzer 可帮助您在此周期的每个步骤简化权限管理。 使用 IAM Access Analyzer 的策略生成会根据在您的日志中捕获的访问活动,生成精细策略。这意味着在构建和运行应用程序后,您可以生成仅授予操作应用程序所需权限的策略。 使用 IAM Access Analyzer 进行策略验证使用 100 多项策略检查来指导您制定和验证安全和功能性策略。您可以在创建新策略或验证现有策略时,使用这些检查。自定义策略检查是一项付费功能,用于在部署之前验证开发人员编写的策略是否符合您指定的安全标准。自定义策略检查利用自动推理(由数学证明支持的可证明的安全性保障)的力量,使安全团队能够主动检测策略的不合规更新。

公共和跨账户检查结果结合 IAM Access Analyzer 可帮助您验证和优化您的资源策略允许的从 AWS 组织或账户之外进行访问的权限。有关更多信息,请参阅使用 IAM Access Analyzer。未使用访问权限和 IAM Access Analyzer 会持续分析您的账户以识别未使用的访问权限,并创建包含调查发现的集中式控制面板。调查发现突出显示了未使用的角色、IAM 用户未使用的访问密钥以及 IAM 用户未使用的密码。对于活跃的 IAM 角色和用户,调查发现可以让人们了解未使用的服务和操作。

您的 AWS 账户可能具有不再需要的 IAM 用户、角色和权限。我们建议您删除它们以实现最低权限访问。对于 IAM 用户,您可以查看密码和访问密钥上次使用的信息。对于角色,您可以查看角色上次使用的信息。此信息可通过 IAM 控制台、API 和 SDK 获得。上次使用的信息可帮助您识别不再使用且可以安全删除的用户和角色。您还可以通过查看服务和上次访问的信息来确定未使用的权限来优化权限。有关更多信息,请参阅使用上次访问的信息优化 AWS 中的权限

如果启用未使用的访问分析器作为付费功能,IAM Access Analyzer 会持续分析您的账户以识别未使用的访问权限,并创建包含调查发现的集中式控制面板。控制面板可帮助安全团队集中审查调查发现,并根据调查发现的数量确定账户的优先级。安全团队可以使用该控制面板集中审核检查结果,并根据检查结果的数量对要审核的账户进行优先级排序。调查发现突出显示了未使用的角色、IAM 用户未使用的访问密钥以及 IAM 用户未使用的密码。对于活跃的 IAM 角色和用户,调查发现可以让人们了解未使用的服务和操作。这可以简化对未使用访问权限的检查,以指导您获得最低权限。使用此功能,您按每月分析的 IAM 角色或 IAM 用户付费即可。

IAM policy simulator 会评估您选择的策略并确定您指定的每个操作的有效权限。使用 policy simulator 对基于身份和基于资源的策略IAM 权限边界SCP 进行测试和故障排除。有关更多信息,请参阅使用 IAM policy simulator 测试 IAM policy

IAM 访问分析器自定义策略检查可在部署之前验证 IAM policy 是否符合您的安全标准。自定义策略检查利用自动推理(由数学证明支持的可证明的安全性保障)的力量,使安全团队能够主动检测策略的不合规更新。例如,IAM 策略更改比之前的版本更为宽松。安全团队可以使用这些检查来简化审查,自动批准符合其安全标准的策略,并在不符合安全标准时进行更深入的检查。这种新的验证方式可在云中提供更高的安全保障。安全和开发团队可以通过将这些自定义策略检查集成到开发人员编写策略的工具和环境(例如 CI/CD 管道)中来大规模自动化策略审查。

IAM Access Analyzer 可简化对未使用访问权限的检查,以指导您获得最低权限。安全团队可以使用 IAM Access Analyzer 来查看其 AWS 组织中未使用的访问权限,并自动调整权限规模。启用未使用的访问分析器时,IAM Access Analyzer 会持续分析您的账户以识别未使用的访问权限,并创建包含调查发现的集中式控制面板。控制面板可帮助安全团队集中审查调查发现,并根据调查发现的数量确定账户的优先级。安全团队可以使用该控制面板集中审核检查结果,并根据检查结果的数量对要审核的账户进行优先级排序。调查发现突出显示了未使用的角色、IAM 用户未使用的访问密钥以及 IAM 用户未使用的密码。对于活跃的 IAM 角色和用户,调查发现可以让人们了解未使用的服务和操作。