IAM 中的安全最佳实践 - Amazon Identity and Access Management
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

IAM 中的安全最佳实践

要帮助保护 Amazon 资源,请遵循针对 Amazon Identity and Access Management (IAM) 服务的这些建议。

锁定您的 Amazon Web Services 账户 根用户访问密钥

使用访问密钥 (访问密钥 ID 和秘密访问密钥) 以编程方式向 Amazon 提出请求。但是,请勿使用您的 Amazon Web Services 账户 根用户访问密钥。您的 Amazon Web Services 账户 根用户的访问密钥提供对所有 Amazon 服务的所有资源(包括您的账单信息)的完全访问权限。您无法减少与您的 Amazon Web Services 账户 根用户访问密钥关联的权限。

因此,在保护根用户访问密钥时应像对待您的信用卡号或任何其他敏感机密信息一样。以下是执行该操作的一些方式:

  • 强烈建议您不使用根用户执行日常任务,即使是管理任务。相反,只在创建 IAM 管理员用户时使用根用户凭证。然后请妥善保存根用户凭证,仅用它们执行少数账户和服务管理任务。对于日常任务,请勿使用 IAM 管理员用户。反过来,使用角色来委托权限

  • 如果您的 Amazon Web Services 账户 根用户具有访问密钥,请删除它。如果您一定要保留它,请定期轮换(更改)访问密钥。要删除或轮换根用户访问密钥,请转至 Amazon Web Services Management Console 中的“我的安全凭证”页并使用您账户的电子邮件地址和密码登录。您可以在 Access keys 部分中管理您的访问密钥。有关轮换访问密钥的更多信息,请参阅轮换访问密钥

  • 切勿与任何人共享您的 Amazon Web Services 账户 根用户密码或访问密钥。本文档的其余部分讨论了避免与其他用户共享您的 Amazon Web Services 账户 根用户凭证的几种方法。它们还说明了如何避免将这些凭证嵌入应用程序中。

  • 使用强密码有助于保护对 Amazon Web Services Management Console 进行账户级别的访问。有关管理 Amazon Web Services 账户 根用户密码的信息,请参阅 更改 Amazon 账户根用户密码

  • 对您的 Amazon Web Services 账户 根用户账户启用 Amazon 多重身份验证 (MFA)。有关更多信息,请参阅 在 Amazon 中使用多重身份验证 (MFA)

使用角色委托权限

您使用 Amazon Security Token Service 操作担任 IAM 角色或在 Amazon Web Services Management Console 中切换至某个角色来接收临时凭证角色会话。这比使用长期密码或访问密钥凭证更安全。会话的持续时间有限,这可以降低您的凭据被泄露的风险。

作为一种最佳实践,使用 IAM 角色临时凭证只访问执行工作所需的资源(授予最低权限)。配置 Amazon Web Services Single Sign On以允许来自外部身份源的用户访问账户中的 Amazon 资源。在单个账户中,您可以配置 IAM 角色,以允许来自 SAMLweb 身份源的身份承担该角色。

对于 IAM 用户,创建单独的角色用于特定的工作任务和代入这些角色对于那些任务。不要在日常工作中使用 IAM 管理员用户。

要详细了解角色术语,请参阅 角色术语和概念

授予最低权限

创建 IAM 策略时,请遵循授予最小权限这一标准安全建议,或仅授予执行任务所需的权限。确定用户(和角色)需要执行的操作,然后制订允许他们 执行这些任务的策略。

最开始只授予最低权限,然后根据需要授予其它权限。这样做比起一开始就授予过于宽松的权限而后再尝试收紧权限来说更为安全。

作为最低权限的替代方案,您可以使用 Amazon 托管策略 或带通配符 * 权限的策略开始使用策略。考虑授予您的主体超出其完成工作所需的更多权限所带来的安全风险。监控这些主体以了解他们正在使用哪些权限。然后写入最低权限策略。

IAM 提供了多个选项来帮助您优化授予的权限。

  • 了解访问级别分组 - 您可以使用访问级别分组来了解策略授予的访问级别。策略操作被归类为 ListReadWritePermissions managementTagging。例如,您可以从 ListRead 访问级别中选择操作,以向您的用户授予只读访问权限。要了解如何使用策略摘要来了解访问级别权限,请参阅 使用访问权限级别查看 IAM 权限

  • 验证您的策略 — 您可以在创建和编辑 JSON 策略时使用 IAM Access Analyzer 执行策略验证。我们建议您查看和验证所有现有策略。IAM Access Analyzer 提供 100 多项策略检查来验证您的策略。当您策略中的语句允许我们认为过于宽容的访问时,它会生成安全警告。在授予最小权限时,您可以使用通过安全警告提供的可操作建议。要了解有关 IAM Access Analyzer 提供的策略检查的更多信息,请参阅 IAM Access Analyzer 策略验证

  • 基于访问活动生成策略 — 为了帮助您优化授予的权限,您可以根据 IAM 实体(用户或角色)的访问活动生成 IAM 策略。IAM 访问分析器会查看您的 Amazon CloudTrail 日志并生成一个策略模板,其中包含实体在指定时间框架内使用的权限。您可以使用模板创建具有精细权限的托管策略,然后将其附加到 IAM 实体。这样,您仅需授予用户或角色与特定使用案例中的 Amazon 资源进行交互所需的权限。要了解更多信息,请参阅“基于访问活动生成策略”。

  • 使用上次访问的信息 — 另一项可帮助提供最低权限的功能是上次访问的信息。可以在 IAM 控制台详细信息页面上的访问顾问选项卡中查看此信息,以了解 IAM 用户、组、角色或策略。上次访问的信息还包括有关上次访问某些服务(如 Amazon EC2、IAM、Lambda 和 Amazon S3)的操作的信息。如果您使用 Amazon Organizations 管理账户凭证登录,则可以在 IAM 控制台的 Amazon Organizations 部分查看上次访问的服务信息。也可以使用 Amazon CLI 或 Amazon API 为 IAM 或 Organizations 中的实体或策略检索上次访问的信息报告。您可以使用该信息确定不需要的权限,以便优化 IAM 或 Organizations 策略以更好地遵循最小权限原则。有关更多信息,请参阅 使用上次访问的信息优化 Amazon 中的权限

  • 查看 Amazon CloudTrail 中的账户事件 — 要进一步减少权限,您可以在 Amazon CloudTrail Event history(事件历史记录)中查看您的账户事件。CloudTrail 事件日志包含详细的事件信息,您可以用来减少策略的权限。这些日志仅包含 IAM 实体所需的操作和资源。有关更多信息,请参阅 Amazon CloudTrail 用户指南中的在 CloudTrail 控制台中查看 CloudTrail 事件

有关更多信息,请参阅下列内容:

通过 Amazon 托管策略开始使用权限

我们建议使用授予最低权限的策略,或仅授予执行任务所需的许可。授予最小权限的最安全方式是编写一个仅具有团队所需权限的自定义策略。您必须创建一个流程,以允许您的团队在必要时请求更多权限。创建仅为团队提供所需权限的 IAM 客户托管式策略需要时间和专业知识。

要开始向您的 IAM 身份(用户、用户组和角色)添加权限,您可以使用 Amazon 托管式策略。Amazon 托管策略涵盖常见使用案例,可在您的 Amazon 账户中使用。Amazon 托管策略不会授予最低权限。您必须考虑授予您的主体超出其完成工作所需的更多权限所带来的安全风险。

您可以将 Amazon 托管策略(包括任务函数)附加到任何 IAM 身份。要切换到最小权限权限,您可以运行 Amazon Identity and Access Management Access Analyzer 以使用 Amazon 托管策略监控主体。了解他们使用的权限后,您可以编写自定义策略或生成仅包含团队所需权限的策略。这中方法不太安全,但您能够以更灵活的方式了解您的团队如何使用 Amazon。

Amazon 托管策略可用于为很多常用案例提供权限。有关专为特定任务函数制定的 Amazon 托管策略的更多信息,请参阅 Amazon工作职能的 托管策略

验证您的策略

验证您创建的策略是一项最佳实践。您可以在创建和编辑 JSON 策略时执行策略验证。IAM 可识别任何 JSON 语法错误,而 IAM Access Analyzer 提供 100 多项策略检查和可操作的建议,以帮助您制定安全且功能性强的策略。我们建议您查看和验证所有现有策略。要了解策略验证的更多信息,请参阅 验证 IAM 策略。要了解有关 IAM Access Analyzer 提供的策略检查的更多信息,请参阅 IAM Access Analyzer 策略验证

使用客户托管策略而不是内联策略

对于自定义策略,建议您使用托管策略而不是内联策略。使用这些策略的一个重要优势是,您可以在控制台中的一个位置查看所有托管策略。您还可以使用单个 Amazon CLI 或 Amazon API 操作查看此信息。内联策略是仅 IAM 身份(用户、用户组或角色)具有的策略。托管策略是可附加到多个身份的独立的 IAM 资源。有关更多信息,请参阅 托管策略与内联策略

在某些情况下,我们建议您选择内联策略而不是托管策略。有关详细信息,请参阅在托管策略与内联策略之间进行选择

您可以将内联策略转换为托管策略。有关更多信息,请参阅 将内联策略转换为托管策略

使用访问权限级别查看 IAM 权限

要增强您的 Amazon 账户的安全性,您应该定期查看和监控每个 IAM 策略。请确保您的策略仅授予执行必需的操作所需要的最低权限

在检查策略时,您可以查看策略摘要,其中包括该策略中的每个服务的访问级别摘要。Amazon 根据每个服务操作的用途将其划分为五个访问级别 之一:ListReadWritePermissions managementTagging。您可以使用这些访问权限级别确定将哪些操作包含在您的策略中。

例如,在 Amazon S3 服务中,您可能想允许一大组用户访问 ListRead 操作。此类操作允许这些用户列出存储桶和获取存储在 Amazon S3 中的对象。但是,您应当只允许一小组用户访问 Amazon S3 Write 操作以删除存储桶或将对象放入 S3 存储桶。此外,您还应减少权限以仅允许管理员访问 Amazon S3 Permissions management 操作。这可确保只有有限数量的人员可以在 Amazon S3 中管理存储桶策略。这对于 IAM 和 Amazon Organizations 服务中的 Permissions management 操作特别重要。如果允许 Tagging 操作,则会为用户授予权限以执行仅修改资源标签的操作。不过,在创建资源或修改该资源的其他属性时,某些 Write 操作(如 CreateRole)允许标记资源。因此,拒绝访问 Tagging 操作不会禁止用户标记资源。有关访问级别分类的详细信息和示例,请参阅了解策略摘要内的访问级别摘要

要查看分配给服务中每个操作的访问级别分类,请参阅 Amazon 服务的操作、资源和条件键

要查看一个策略的访问权限级别,必须先找到该策略的摘要。在托管策略的 Policies 页面中以及附加到用户的策略的 Users 页面中,都包含此策略摘要。有关更多信息,请参阅 策略摘要(服务列表)

在策略摘要中,Access level(访问级别)列显示出策略提供对服务的四个 Amazon 访问权限级别中的一个或多个级别的 Full(完全)或 Limited(受限)访问权限。此外,它还可能显示该策略提供对服务中的所有操作的 Full access 访问权限。您可以使用此 Access level 列中的信息来了解策略提供的访问权限级别。然后可以采取措施加强您的 Amazon 账户安全。有关访问级别分类的详细信息和示例,请参阅了解策略摘要内的访问级别摘要

为您的用户配置强密码策略

如果允许用户更改其密码,需创建自定义密码策略,该过程要求他们创建强密码并定期轮换其密码。在 IAM 控制台的 Account Settings(账户设置)页面中,您可以为账户创建自定义密码策略。您可以从 Amazon 默认密码策略升级以定义密码要求,如最短长度、是否需要非字母字符、必须采用的轮换频率。有关更多信息,请参阅 为 IAM 用户设置账户密码策略

启用 MFA

为了提高安全性,我们建议您要求账户中的所有用户进行 Multi-Factor Authentication (MFA)。启用 MFA 后,用户便拥有了一部可生成身份验证质询响应的设备。用户的凭证和设备生成的响应是完成登录过程所必需的。如果泄露了用户的密码或访问密钥,由于额外的身份验证要求,您的账户资源仍然是安全的。

通过以下方式之一生成响应:

  • 虚拟和硬件 MFA 设备生成代码,您可以在应用程序或设备上进行查看,然后在登录屏幕上输入代码。

  • 点击设备时 U2F 安全密钥生成响应。用户不能手动在登录屏幕上输入代码。

对于允许访问敏感资源或 API 操作的授权 IAM 用户,我们建议使用 U2F 或硬件 MFA 设备。

有关 MFA 的更多信息,请参阅 在 Amazon 中使用多重身份验证 (MFA)

要了解如何为访问密钥配置受 MFA 保护的 API 访问,请参阅配置受 MFA 保护的 API 访问

针对在 Amazon EC2 实例上运行的应用程序使用角色

在 Amazon EC2 实例上运行的应用程序需要凭证才能访问其他 Amazon 服务。若要以安全的方式提供应用程序所需的凭证,可使用 IAM 角色。角色是指自身拥有一组权限的实体,但不是指用户或用户组。角色没有自己的一组永久凭证,这也与 IAM 用户不一样。对于 Amazon EC2,IAM 将向 EC2 实例动态提供临时凭证,这些凭证将为您自动轮换。

当您启动 EC2 实例时,您可指定实例的角色,以作为启动参数。在 EC2 实例上运行的应用程序在访问 Amazon 资源时可使用角色的凭证。角色的权限将确定允许访问资源的应用程序。

有关更多信息,请参阅 使用 IAM 角色向在 Amazon EC2 实例上运行的应用程序授予权限

不共享访问密钥

访问密钥提供对 Amazon 的编程访问。不要在未加密代码中嵌入访问密钥,也不要在您的 Amazon 账户中的用户之间共享这些安全凭证。对于需要访问 Amazon 的应用程序,将程序配置为使用 IAM 角色检索临时安全凭证。要允许您的用户单独以编程方式访问,请创建具有个人访问密钥的 IAM 用户。

有关更多信息,请参阅 切换到 IAM 角色 (Amazon API)管理 IAM 用户的访问密钥

定期轮换凭证

定期更改您自己的密码和访问密钥,并确保账户中的所有 IAM 用户也这么做。这样,若在您不知情的情况下密码或访问密钥外泄,则您可限制凭证在多长时间之内可用于访问资源。您可以将自定义密码策略应用于您的账户,以要求所有 IAM 用户轮换其 Amazon Web Services Management Console 密码。也可以选择他们必须轮换密码的时间间隔。

有关在您的账户中设置自定义密码策略的更多信息,请参阅 为 IAM 用户设置账户密码策略

有关轮换 IAM 用户的访问密钥的更多信息,请参阅 轮换访问密钥

删除不需要的证书

删除不需要的 IAM 用户凭证(密码和访问密钥)。例如,如果您为应用程序创建了一个不使用控制台的 IAM 用户,则该 IAM 用户无需密码。同样,如果用户仅使用控制台,请删除其访问密钥。最近未使用的密码和访问密钥可能适合做删除处理。您可以使用控制台、CLI 或 API 或者通过下载凭证报告来查找未使用的密码或访问密钥。

有关查找最近未用过的 IAM 用户凭证的更多信息,请参阅 查找未使用的凭证

有关删除 IAM 用户密码的更多信息,请参阅 管理 IAM 用户的密码

有关停用或删除 IAM 用户访问密钥的更多信息,请参阅 管理 IAM 用户的访问密钥

有关 IAM 凭证报告的更多信息,请参阅 获取您 Amazon 账户的凭证报告

使用策略条件来增强安全性

在切实可行的范围内,定义在哪些情况下您的 IAM 策略将允许访问资源。例如,您可编写条件来指定请求必须来自允许的 IP 地址范围。您还可以指定只允许在指定日期或时间范围内的请求。您还可设置一些条件,如要求使用 SSL 或 MFA (Multi-Factor Authentication)。例如,您可要求用户使用 MFA 设备进行身份验证,这样才允许其终止某一 Amazon EC2 实例。

有关更多信息,请参阅 IAM 策略元素参考中的 IAM JSON 策略元素:Condition

监控 Amazon 账户中的活动

您可以使用 Amazon 中的日志记录功能来确定用户在您的账户中进行了哪些操作,以及使用了哪些资源。日志文件会显示操作的时间和日期、操作的源 IP、哪些操作因权限不足而失败等。

日志记录功能在以下 Amazon 服务中可用: