AWS 安全审核指南 - AWS 一般参考
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

AWS 安全审核指南

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

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

何时应执行安全审核

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

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

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

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

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

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

审核准则

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

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

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

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

检查 AWS 账户证

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

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

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

检查 IAM 用户

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

  1. 列出您的用户,然后删除用户(处于非活动状态)。

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

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

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

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

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

检查 IAM 组

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

  1. 列出您的组,然后删除组(处于未使用状态)。

  2. 查看用户(位于每个组中)并删除用户(不属于这些组)。

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

检查 IAM 角色

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

  1. 列出您的角色,然后删除角色(处于未使用状态)。

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

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

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

如果您已经创建了 IAM 实体,用于使用SAML 或 OIDC 身份提供商,请执行以下步骤:

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

  2. 下载并查看每个 SAML 提供商的 AWS 元数据文档,并确保这些文档反映了您当前的业务需求。或者,从您想与之建立信任关系的 SAML IIdPs 那里获取最新元数据文档,并在 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. Delete未使用的或可能已经为组织之外的人员所知的 Amazon EC2 密钥对。

  2. 检查Amazon EC2 安全组

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

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

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

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

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

检查其他服务中的 AWS 策略

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

监控 AWS 账户中的活动

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

  • 启用 。AWS CloudTrail并在每个支持的区域中使用它。

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

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

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

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

有关审核 IAM 策略的提示

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

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

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

  • 使用IAM 策略模拟器测试附加到用户或组的策略。

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

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

    • iam:PutGroupPolicy

    • iam:PutRolePolicy

    • iam:PutUserPolicy

    • iam:CreatePolicy

    • iam:CreatePolicyVersion

    • iam:AttachGroupPolicy

    • iam:AttachRolePolicy

    • iam:AttachUserPolicy

  • 确保策略没有向您未使用的服务授予权限。例如,如果您使用AWS 托管策略,请确保您账户中正在使用的 AWS 托管策略是针对您实际使用的服务的。要找出您账户中正在使用哪些 AWS 托管策略,请使用 IAMGetAccountAuthorizationDetailsAPI(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: Inent 2013 视频演示文稿云中的入侵检测