

# AWS 安全审核指南
<a name="security-audit-guide"></a>

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

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

**提示**  
您可以监控 IAM 的使用情况，因为它与使用 [AWS Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html) 的安全最佳实践有关。Security Hub CSPM 使用安全控件来评估资源配置和安全标准，以帮助您遵守各种合规框架。有关使用 Security Hub CSPM 评估 IAM 资源的更多信息，请参阅《AWS Security Hub CSPM User Guide》中的 [AWS Identity and Access Management controls](https://docs.aws.amazon.com/securityhub/latest/userguide/iam-controls.html)。

**Topics**
+ [何时执行安全审查](#security-audit-guide-when-to-audit)
+ [审核准则](#security-audit-general-guidelines)
+ [审核 AWS 账户凭证](#security-audit-review-account)
+ [审核 IAM 用户](#security-audit-review-users)
+ [审核 IAM 组](#security-audit-groups)
+ [审核 IAM 角色](#security-audit-review-roles)
+ [查看您的 SAML 和 OpenID Connect（OIDC）的 IAM 提供商](#security-audit-review-saml-providers)
+ [审核移动应用程序](#security-audit-review-mobile-apps)
+ [有关审核 IAM policy 的提示](#security-audit-review-policy-tips)

## 何时执行安全审查
<a name="security-audit-guide-when-to-audit"></a>

遇到以下情况时，您应该审查您的安全配置：
+ 定期。将本文档中介绍的步骤作为安全最佳实践并定期执行。
+ 如果组织中发生变动，比如有人离职。
+ 您已停止使用一项或多项单独 AWS 服务，以验证您已删除账户中的用户不再需要的权限。
+ 如果您在账户中添加或删除了软件，比如 Amazon EC2 实例、OpsWorks 堆栈、CloudFormation 模板等内容上的应用程序。
+ 您怀疑某个未授权人员可能访问了您的账户。

## 审核准则
<a name="security-audit-general-guidelines"></a>

查看您账户的安全配置时，请遵循这些准则：
+ **全面周祥**。查看安全配置的各个方面，包括您很少使用的那些方面。
+ **请勿假设**。如果您对安全配置的某些方面（例如，特定策略背后的理由或角色存在情况）不太熟悉，请调查业务需求，直到您了解潜在风险。
+ **让事情变得简单**。为了使审查（和管理）变得更简单，请使用 IAM 组、IAM 角色、一致的命名方案和简单的策略。

## 审核 AWS 账户凭证
<a name="security-audit-review-account"></a>

当审核您的 AWS 账户证书时，执行以下步骤：

1. 如果您有根用户的访问密钥，但您没有使用，则可以将其删除。我们[强烈建议](https://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html#root-password)您使用拥有临时凭证的用户,例如 AWS IAM Identity Center 中的用户，而不是使用根访问密钥来完成 AWS 日常工作。

1. 如果您的账户需要访问密钥，请务必 [在需要时进行更新](https://docs.aws.amazon.com/IAM/latest/UserGuide/ManagingCredentials.html#id-credentials-access-keys-update)。

## 审核 IAM 用户
<a name="security-audit-review-users"></a>

当您审计您的现有 IAM 用户时，请执行以下步骤：

1. [列出您的用户](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_manage.html#id_users_manage_list)，然后[删除不需要的用户](https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_DeletingUserFromAccount.html)。

1.  [将用户从其无需访问的群组中删除](https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_AddOrRemoveUsersFromGroup.html)。

1. 查看附加到用户所在的组的策略。请参阅[有关审核 IAM policy 的提示](#security-audit-review-policy-tips)。

1. 删除用户不需要或者可能已经公开的安全证书。例如，应用程序的 IAM 用户无需密码（只有登录 AWS 网站才需要密码）。同样，如果用户不使用访问密钥，则不必拥有访问密钥。有关更多信息，请参阅[管理 IAM 用户的密码](https://docs.aws.amazon.com/IAM/latest/UserGuide/credentials-add-pwd-for-user.html)和[管理 IAM 用户的访问密钥](https://docs.aws.amazon.com/IAM/latest/UserGuide/ManagingCredentials.html)。

   您可以生成和下载列出您账户中所有 IAM 用户及其各个凭证状态（包括密码、访问密钥和 MFA 设备）的凭证报告。对于密码和访问密钥，凭证报告将显示密码或访问密钥最近一次的使用日期和时间。请考虑从您的账户中删除最近未使用的凭证。（切勿删除您的紧急访问用户。） 有关更多信息，请参阅[获取您 AWS 账户的凭证报告](https://docs.aws.amazon.com/IAM/latest/UserGuide/credential-reports.html)。

1. 对于需要长期凭证的用例，应在需要时更新密码和访问密钥。有关更多信息，请参阅[管理 IAM 用户的密码](https://docs.aws.amazon.com/IAM/latest/UserGuide/credentials-add-pwd-for-user.html)和[管理 IAM 用户的访问密钥](https://docs.aws.amazon.com/IAM/latest/UserGuide/ManagingCredentials.html)。

1. 作为最佳实践，请要求人类用户必须使用带有身份提供者的联合身份验证才能使用临时凭证访问 AWS。如果可以，请从 IAM 用户过渡到联合主体，例如 IAM Identity Center 的用户。保留应用程序所需的最低 IAM 用户数。

## 审核 IAM 组
<a name="security-audit-groups"></a>

当您审计您的 IAM 组时，请执行以下步骤：

1. [列出您的组](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups_manage_list.html)，然后[删除未使用的组](https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_DeleteGroup.html)。

1. [查看用户](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_manage.html#id_users_manage_list)（位于每个组中）并[删除用户](https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_AddOrRemoveUsersFromGroup.html)（不属于这些组）。

1. 查看附加到组的策略。请参阅[有关审核 IAM policy 的提示](#security-audit-review-policy-tips)。

## 审核 IAM 角色
<a name="security-audit-review-roles"></a>

当您审计您的 IAM 角色时，请执行以下步骤：

1. [列出您的角色](https://docs.aws.amazon.com/cli/latest/reference/iam/list-roles.html)，然后[删除未使用的角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-deleting.html)。

1. [查看](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing.html)角色的信任策略。确保您知道委托人是谁，并且了解为什么账户或用户需要能够担任该角色。

1. [查看](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing.html)角色的访问策略，以确保其向担任该角色的人授予了合适的权限，请参阅[有关审核 IAM policy 的提示](#security-audit-review-policy-tips)。

## 查看您的 SAML 和 OpenID Connect（OIDC）的 IAM 提供商
<a name="security-audit-review-saml-providers"></a>

如果您已创建 IAM 实体来与 [SAML 或 OIDC 身份提供者（IdP）](https://docs.aws.amazon.com/IAM/latest/UserGuide/identity-providers.html)建立信任关系，请执行以下步骤：

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

1. 下载并查看每个 SAML IdP 的 AWS 元数据文档，并确保这些文档反映了您当前的业务需求。

1. 从 SAML IdP 获取最新元数据文档，并[在 IAM 中更新提供者](https://docs.aws.amazon.com/IAM/latest/UserGuide/identity-providers-saml.html)。

## 审核移动应用程序
<a name="security-audit-review-mobile-apps"></a>

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

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

1. 通过使用出于此目的而设计的 API 来获取应用程序的临时凭证。

**注意**  
我们建议您使用 [Amazon Cognito](https://aws.amazon.com/cognito/) 来管理应用程序中的用户身份。此服务让您可以使用 Login with Amazon、Facebook、Google 或任何与 OpenID Connect（OIDC）兼容的身份提供商进行用户身份验证。有关更多信息，请参阅《Amazon Cognito 开发人员指南**》中的 [Amazon Cognito 用户池](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html)。

## 有关审核 IAM policy 的提示
<a name="security-audit-review-policy-tips"></a>

策略功能强大且非常细微，因此，学习并了解每个策略授予的权限很重要。查看策略时请使用以下准则：
+ 将策略附加到组或角色而不是单个用户。如果单个用户拥有策略，请确保您了解为什么该用户需要策略。
+ 确保 IAM 用户、组及角色拥有所需的权限，并且没有任何额外的权限。
+ 使用 [IAM Policy Simulator](https://docs.aws.amazon.com/IAM/latest/UsingPolicySimulatorGuide/) 对附加到用户或组的策略进行测试。
+ 请记住，用户的权限是所有适用策略的结果，适用策略包括基于身份的策略（如用户策略、组策略或角色策略）和基于资源的策略（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 托管策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html#aws-managed-policies)，请确保您账户中正在使用的 AWS 托管策略是针对您实际使用的服务的。要找出您账户中正在使用哪些 AWS 托管式策略，请使用 IAM [https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccountAuthorizationDetails.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccountAuthorizationDetails.html) API（AWS CLI 命令：[https://docs.aws.amazon.com/cli/latest/reference/iam/get-account-authorization-details.html](https://docs.aws.amazon.com/cli/latest/reference/iam/get-account-authorization-details.html)）。
+ 如果策略授予用户启动 Amazon EC2 实例的权限，这也可能允许 `iam:PassRole` 操作，但如果是这样，其应该[明确列出用户可以传递给 Amazon EC2 实例的角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-usingrole-ec2instance.html#roles-usingrole-ec2instance-passrole)。
+ 请检查包括 `*` 的 `Action` 或 `Resource` 元素的任何值。如果可以，授予用户所需的个人操作和资源的 `Allow` 访问权限。但是，以下是可能适合在策略中使用 `*` 的原因：
  + 该策略旨在授予管理级权限。
  + 为方便起见，通配符用于一组相似的操作（例如，`Describe*`），您会因为以这种方式引用的操作的完整列表而感到轻松。
  + 通配符用于表示一类资源或一个资源路径（例如，`arn:aws:iam::account-id:users/division_abc/*`），您可以很方便地授予针对该类别或路径中所有资源的访问权限。
  + 服务操作不支持资源级权限，资源的唯一选择是 `*`。
+ 检查策略名称以确保其反映了策略的功能。例如，尽管策略名称可能包括“只读”，但策略可能实际还授予了写入或更改权限。

有关规划安全审计的更多信息，请参阅《*AWS 架构中心*》中的[安全、身份和合规性方面的最佳实践](https://aws.amazon.com/architecture/security-identity-compliance/)。