Amazon Web Services
一般参考 (Version 1.0)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

AWS 安全审查指南

您应该定期审查安全配置,以确保它满足您当前的业务需求。审核可以为您提供删除不需要的 IAM 用户、角色、组和策略的机会,以确保用户和软件仅拥有必需的权限。

以下是有关系统地查看和监控 AWS 资源的准则,以便获得安全最佳实践。

您应该什么时候执行安全审查?

在以下情况下,您应该审核您的安全配置:

  • 定期。作为一项安全最佳实践,您应该定期执行本文档中介绍的步骤。

  • 如果组织中发生变动,比如有人离职。

  • 如果您停止使用一个或多个独立的 AWS 服务。这对于删除账户中用户不再需要的权限非常重要。

  • 如果您在账户中添加或删除了软件,比如 Amazon EC2 实例、AWS OpsWorks 堆栈、AWS CloudFormation 模板等内容上的应用程序。

  • 如果您怀疑某个未授权人员可能访问了您的账户。

审查的一般准则

查看您账户的安全配置时,请遵循这些准则:

  • 全面周祥。查看安全配置的各个方面,包括您可能不经常使用的那些方面。

  • 请勿假设。如果您对安全配置的某些方面(例如,特定策略背后的理由或角色存在情况)不太熟悉,请调查业务需求,直到您感到满意。

  • 让事情变得简单。为了使审核(和管理)变得更简单,请使用 IAM 组、一致的命名方案和简单的策略。

查看您的 AWS 账户凭证

当审核您的 AWS 账户凭证时,执行以下步骤:

  1. 如果您的账户没有使用根访问密钥,请删除它们。我们强烈建议您创建 IAM 用户,而不是使用根访问密钥来完成 AWS 日常工作。

  2. 如果您的确需要保留账户的访问密钥,请定期轮换它们

查看 IAM 用户

当您审核您的现有 IAM 用户时,请执行以下步骤:

  1. 删除未激活的用户

  2. 从组中删除不必属于该组的用户

  3. 查看附加到用户所在的组的策略。请参阅有关查看 IAM 策略的提示

  4. 删除用户不需要或者可能已经公开的安全凭证。例如,用于应用程序的 IAM 用户无需密码(只有登录 AWS 网站才需要密码)。同样,如果用户不使用访问密钥,则不必拥有访问密钥。有关更多信息,请参阅 IAM 用户指南 中的管理 IAM 用户的密码管理 IAM 用户的访问密钥

    您可以生成和下载列出您账户中所有 IAM 用户及其各个凭证状态(包括密码、访问密钥和 MFA 设备)的凭证报告。对于密码和访问密钥,凭证报告将显示多久前使用了密码或访问密钥。最近未使用的凭证可能适合做删除处理。有关更多信息,请参阅 IAM 用户指南 中的获取 AWS 账户的凭证报告

  5. 定期轮换(更改)用户安全凭证,如果您已与未授权人员共享它们,请立即执行此操作。有关更多信息,请参阅 IAM 用户指南 中的管理 IAM 用户的密码管理 IAM 用户的访问密钥

查看 IAM 组

当您审核您的 IAM 组时,请执行以下步骤:

  1. 删除未使用的组。

  2. 查看每个组中的用户并删除不属于这些组的用户。请参阅之前的查看 IAM 用户

  3. 查看附加到组的策略。请参阅有关查看 IAM 策略的提示

查看 IAM 角色

当您审核您的 IAM 角色时,请执行以下步骤:

  1. 删除未使用的角色

  2. 查看角色的信任策略。确保您知道委托人是谁,并且了解为什么账户或用户需要能够担任该角色。

  3. 查看角色的访问策略,以确保其向担任该角色的人授予了合适的权限,请参阅 有关查看 IAM 策略的提示

查看您的 SAML 和 OpenID Connect (OIDC) 的 IAM 提供商

如果您已经创建了 IAM 身份来与 SAML 或 OIDC 身份提供商建立信任关系,请执行以下步骤:

  1. 删除未使用的提供商。

  2. 下载并查看每个 SAML 提供商的 AWS 元数据文档,并确保这些文档反映了您当前的业务需求。或者,从您想与之建立信任关系的 SAML IdP 那里获取最新元数据文档,并在 IAM 中更新提供商

查看移动应用程序

如果您已经创建了向 AWS 提出请求的移动应用程序,请执行以下步骤:

  1. 确保移动应用程序不包含嵌入式访问密钥(即使它们位于加密存储中)。

  2. 通过使用为该目的设计的 API 来获取应用程序的临时凭证。我们建议您使用 Amazon Cognito 来管理应用程序中的用户身份。此服务可让您使用 Login with Amazon、Facebook、Google 或任何兼容 OpenID Connect (OIDC) 的身份提供商对用户进行身份验证。然后,您可以使用 Amazon Cognito 凭证提供程序来管理应用程序用于向 AWS 发出请求的凭证。

    如果您的移动应用程序不支持使用 Login with Amazon、Facebook、Google 或任何其他兼容 OIDC 的身份提供商进行身份验证,则可以创建代理服务器来将临时凭证分配给您的应用程序。

查看 Amazon EC2 安全配置

针对每个 AWS 区域执行以下步骤:

  1. 删除未使用的或可能已经为组织之外的人员所知的 Amazon EC2 密钥对。

  2. 查看 Amazon EC2 安全组

    • 删除不再满足需求的安全组。

    • 删除不再满足需求的安全组规则。确保您知道为什么支持它们允许的端口、协议和 IP 地址范围。

  3. 终止不满足业务需求,或者可能已经由组织外的人员出于未批准的目的而启动的实例。请记住,如果已通过某一角色启动实例,则在该实例上运行的应用程序可以使用该角色授予的权限来访问 AWS 资源。

  4. 取消不满足业务需求或者可能由组织外的人员提出的竞价型实例请求

  5. 查看 Auto Scaling 组和配置。关闭任何不再满足您的需求或者可能由组织外的某个人配置的设置。

查看其他服务中的 AWS 策略

查看使用基于资源的策略或支持其他安全机制的服务的权限。在每种情况下,确保只有具有当前业务需求的用户和角色可以访问服务资源,并且针对资源授予的权限是满足业务需求的最低要求。

监控 AWS 账户中的活动

请遵循以下监控 AWS 活动的指导原则:

  • 打开每个账户中的 AWS CloudTrail,并在每个支持的区域中使用它。

  • 定期检查 CloudTrail 日志文件。(CloudTrail 有许多合作伙伴,他们会提供用于读取和分析日志文件的工具。)

  • 启用 Amazon S3 存储桶日志记录,以监控向每个存储桶提出的请求。

  • 如果您认为账户遭到未授权使用,请特别注意已颁发的临时凭证。如果颁发了您无法识别的临时凭证,请禁用其权限。

  • 启用每个账户中的账单警报,并设置成本阈值,以便您了解费用是否超出正常使用额度。

有关查看 IAM 策略的提示

策略功能强大且非常细微,因此,学习并了解每个策略授予的权限很重要。查看策略时请使用以下准则:

  • 作为最佳实践,请将策略附加到组,而不是单个用户。如果单个用户拥有策略,请确保您了解为什么该用户需要策略。

  • 确保 IAM 用户、组及角色仅拥有所需的权限。

  • 使用 IAM Policy Simulator 测试附加到用户或组的策略。

  • 请记住,用户的权限是所有适用策略的结果,这些策略包括用户策略、组策略、基于资源的策略(针对 Amazon S3 存储桶、Amazon SQS 队列、Amazon SNS 主题和 AWS KMS 密钥)。检查应用于用户的所有策略以及了解授予单个用户的一整套权限很重要。

  • 请注意,通过允许用户创建 IAM 用户、组、角色或策略,并将策略附加到委托人实体,可以有效地向用户授予针对账户中所有资源的权限。也就是说,可创建策略并将其附加到用户、组或角色的用户可以为自己授予任何权限。通常,不会向您不信任的用户或角色授予可以完全访问账户中资源的 IAM 权限。以下列表中包含您应仔细检查的 IAM 权限:

    • iam:PutGroupPolicy

    • iam:PutRolePolicy

    • iam:PutUserPolicy

    • iam:CreatePolicy

    • iam:CreatePolicyVersion

    • iam:AttachGroupPolicy

    • iam:AttachRolePolicy

    • iam:AttachUserPolicy

  • 确保策略没有向您未使用的服务授予权限。例如,如果使用 AWS 托管策略,请确保您账户中正在使用的 AWS 托管策略是针对您实际使用的服务的。要找出您账户中正在使用哪些 AWS 托管策略,请使用 IAM GetAccountAuthorizationDetails API(AWS CLI 命令:aws iam get-account-authorization-details)。

  • 如果策略授予用户启动 Amazon EC2 实例的权限,则可能还允许 iam:PassRole 操作,但如果是这样,它应该明确列出用户可以传递给 Amazon EC2 实例的角色

  • 请谨慎地检查包括 *ActionResource 元素的任何值。这是仅授予用户需要的个人操作和资源的 Allow 访问权限的最佳实践。但是,以下是可能适合在策略中使用 * 的原因:

    • 策略旨在授予管理级权限。

    • 为方便起见,通配符用于一组相似的操作(例如,Describe*),您会因为以这种方式引用的操作的完整列表而感到轻松。

    • 通配符用于表示一类资源或一个资源路径(例如,arn:aws:iam::account-id:users/division_abc/*),您可以很方便地授予针对该类别或路径中所有资源的访问权限。

    • 服务操作不支持资源级权限,资源的唯一选择是 *

  • 检查策略名称以确保其反映了策略的功能。例如,尽管策略名称可能包括“只读”,但策略可能实际还授予了写入或更改权限。

更多信息

有关管理 IAM 资源的信息,请参阅以下内容:

有关 Amazon EC2 安全性的更多信息,请参阅以下内容:

有关监控 AWS 账户的更多信息,请参阅 re:Invent 2013 演示文稿“云中的入侵检测”(视频幻灯片演示 PDF)。您也可以下载介绍如何自动执行安全审查功能的示例 Python 程序