

# AWS 安全凭证
<a name="security-creds"></a>

当您与 AWS 交互时，可指定 AWS *安全凭证* 以验证您的身份以及您是否有权访问所请求的资源。AWS 使用安全凭证来对您的请求进行身份验证和授权。

例如，如果要从 Amazon Simple Storage Service (Amazon S3) 存储桶下载受保护的文件，则您的凭证必须允许该访问。如果您的凭证未显示您有权下载该文件，AWS 会拒绝您的请求。但是，下载公开共享的 Amazon S3 存储桶中的文件不需要您的 AWS 安全凭证。

AWS 中有不同类型的用户，每种用户都有自己的安全凭证：
+ **账户所有者（根用户）**— 创建 AWS 账户 并拥有完全访问权限的用户。
+ **AWS IAM Identity Center 用户** — 在 AWS IAM Identity Center 中管理的用户。
+ **联合主体** – 来自外部身份提供者、通过联合身份验证获得 AWS 临时访问权限的用户。有关联合身份的更多信息，请参阅 [身份提供程序和 AWS 中的联合身份验证](id_roles_providers.md)。
+ **IAM 用户** — 在 AWS Identity and Access Management（IAM）服务中创建的个人用户。

用户拥有长期或临时安全凭证。根用户、IAM 用户和访问密钥具有不会过期的长期安全凭证。为保护长期凭证，您可以制定相应的流程，以 [管理访问密钥](id_credentials_access-keys.md)、[更改密码](id_credentials_passwords.md) 和 [启用 MFA](id_credentials_mfa.md)。

为了简化 AWS Organizations 中跨成员账户的根用户凭证的管理，您可以集中保护使用 AWS Organizations 管理的 AWS 账户的根用户凭证。[集中管理成员账户的根访问权限](id_root-user.md#id_root-user-access-management) 允许您集中移除和防止长期的根用户凭证恢复，从而防止大规模的意外根访问。

IAM 角色、AWS IAM Identity Center 中的用户 和 AWS STS联合用户主体具有临时安全凭证。临时安全凭证在规定的时间段后或用户结束会话时过期。临时凭证的工作方式与长期凭证的工作方式几乎相同，仅存在以下差异：
+ 顾名思义，临时安全凭证是*短期* 凭证。可将这些凭证的有效时间配置几分钟到几小时。一旦这些凭证到期，AWS 将不再识别这些凭证或不再允许来自使用这些凭证发出的 API 请求的任何类型的访问。
+ 临时安全凭证不随用户一起存储，而是动态生成并在用户提出请求时提供给用户。临时安全凭证到期时 (甚至之前)，用户可以请求新的凭证，只要请求凭证的用户仍有权这样做。

因此，与长期凭证相比，临时凭证具有以下优势：
+ 您不必随应用程序分配或嵌入长期 AWS 安全凭证。
+ 可允许用户访问您的 AWS 资源，而不必为这些用户定义 AWS 身份。临时凭证是[角色和联合身份验证](id_roles.md)的基础。
+ 临时安全凭证的生命周期较短，因此无需更新或在不再需要这些凭证时显式撤销这些凭证。临时安全凭证到期后无法重复使用。您可指定凭证的有效期，但有最长限期。

## 安全性注意事项
<a name="security-considerations-ref"></a>

在确定 AWS 账户 的安全规定时，我们建议您考虑以下信息：
+  当您创建 AWS 账户 时，我们会创建账户根用户。根用户（账户所有者）的凭证允许完全访问账户中的所有资源。您使用根用户执行的首项任务是向其他用户授予对您的 AWS 账户 的管理权限，以便最大限度地减少根用户的使用。
+ 多重身份验证 (MFA) 为可以访问 AWS 账户 的用户提供了额外的安全级别。为了提高安全性，我们建议您要求对 AWS 账户根用户 凭证和所有 IAM 用户使用 MFA。有关更多信息，请参阅 [IAM 中的 AWS 多重身份验证](id_credentials_mfa.md)。
+ AWS 需要不同类型的安全凭证，具体取决于您访问 AWS 的方式以及您所属的 AWS 用户类型。例如，您可以使用登录凭证登入 AWS 管理控制台，但对 AWS 进行编程调用时则需要使用访问密钥。有关确定用户类型和登录页面的帮助，请参阅《*AWS 登录 用户指南*》中的[什么是 AWS 登录](https://docs.aws.amazon.com/signin/latest/userguide/what-is-sign-in.html)。
+ 您无法使用 IAM policy 显式拒绝根用户访问资源。您只能使用 AWS Organizations [服务控制策略（SCP）](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_type-auth.html)来限制根用户的权限。
+ 如果您忘记或丢失了根用户密码，则必须有权访问与您的账户关联的电子邮件地址才能重置根用户密码。
+ 如果丢失了根用户访问密钥，则您必须能够以根用户身份登录您的账户才能创建新的访问密钥。
+ 请不要将根用户用于您的日常任务。请使用它来执行仅限根用户可以执行的任务。有关需要您以根用户身份登录的任务的完整列表，请参阅 [需要根用户凭证的任务](id_root-user.md#root-user-tasks)。
+ 安全凭证特定于账户。如果您有权访问多个 AWS 账户，则每个账户都必须有单独的凭证。
+ [策略](access_policies.md)确定用户、角色或用户组成员可以在什么样的条件下对哪些 AWS 资源执行哪些操作。使用策略，您可以安全地控制对 AWS 服务 和 AWS 账户 中资源的访问。如果必须修改或撤销权限以响应安全事件，您可以删除或修改策略，而不是直接更改身份。
+ 请务必将您的 *Emergency Access* IAM 用户的登录凭证以及您为编程访问创建的任何访问密钥保存在安全位置。如果您丢失了访问密钥，则必须登录您的账户才能创建新的访问密钥。
+ 我们强烈建议您使用 IAM 角色和联合主体提供的临时凭证，而不是 IAM 用户和访问密钥提供的长期凭证。

# 使用 AWS 安全凭证以编程方式进行访问
<a name="security-creds-programmatic-access"></a>

我们建议尽可能使用短期访问密钥来编程调用 AWS 或使用 AWS Command Line Interface 或 AWS Tools for PowerShell。但是，您也可以将长期 AWS 访问密钥用于这些目的。

创建长期访问密钥时，您将访问密钥 ID（例如 `AKIAIOSFODNN7EXAMPLE`）和秘密访问密钥（例如 `wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY`）创建为一组。秘密访问密钥仅在您创建它时可供下载。如果您没有下载秘密访问密钥或丢失了它，则必须创建新的秘密访问密钥。

在许多情况下，您并不需要永不过期的长期访问密钥（例如为 IAM 用户创建的访问密钥）。相反，您可以创建 IAM 角色并生成临时安全凭证。临时安全凭证包括访问密钥 ID 和秘密访问密钥，以及一个指示凭证何时到期的安全令牌。在过期后，这些凭证将不再有效。有关更多信息，请参阅 [长期访问密钥的替代方案](#security-creds-alternatives-to-long-term-access-keys)。

以 `AKIA` 开头的访问密钥 ID 是 IAM 用户或 AWS 账户 根用户的长期访问密钥。以 `ASIA` 开头的访问密钥 ID 是使用 AWS STS 操作创建的临时凭证访问密钥。

如果用户需要在 AWS 管理控制台之外与 AWS 交互，则需要编程式访问权限。授予编程式访问权限的方法取决于访问 AWS 的用户类型。

要向用户授予编程式访问权限，请选择以下选项之一。


****  

| 哪个用户需要编程式访问权限？ | 目的 | 方式 | 
| --- | --- | --- | 
| IAM | （推荐）使用控制台凭证作为临时凭证来签署向 AWS CLI、AWS SDK 或 AWS API 发出的编程请求。 |  按照您希望使用的界面的说明进行操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/security-creds-programmatic-access.html)  | 
|  人力身份 （在 IAM Identity Center 中管理的用户）  | 使用临时凭证签署向 AWS CLI、AWS SDK 或 AWS API 发出的编程请求。 |  按照您希望使用的界面的说明进行操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/security-creds-programmatic-access.html)  | 
| IAM | 使用临时凭证签署向 AWS CLI、AWS SDK 或 AWS API 发出的编程请求。 | 按照《IAM 用户指南》中[将临时凭证用于 AWS 资源](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html)中的说明进行操作。 | 
| IAM | （不推荐使用）使用长期凭证签署向 AWS CLI、AWS SDK 或 AWS API 发出的编程请求。 |  按照您希望使用的界面的说明进行操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/security-creds-programmatic-access.html)  | 

## 长期访问密钥的替代方案
<a name="security-creds-alternatives-to-long-term-access-keys"></a>

对于许多常见使用案例，应有长期访问密钥的替代方法。为了提高您的账户安全性，请考虑以下几点。
+ **不要在应用程序代码或代码存储库中嵌入长期访问密钥和秘密访问密钥 –**改用 AWS Secrets Manager 或其他秘密管理解决方案，因此您不必以纯文本硬编码密钥。然后，应用程序或客户端可以在需要时检索秘密。有关更多信息，请参阅《AWS Secrets Manager 用户指南》**中的[什么是 AWS Secrets Manager？](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)。
+ **尽可能使用 IAM 角色来生成临时安全凭证 –**尽可能使用机制颁发临时安全凭证，而不是使用长期访问密钥。临时安全凭证更加安全，因为它们不随用户一起存储，而是动态生成并在用户提出请求时提供给用户。临时安全凭证的生命周期较短，因此无需管理或更新。提供临时访问密钥的机制包括 IAM 角色或 IAM Identity Center 用户的身份验证。对于在 AWS 外部运行的计算机，您可以使用 [AWS Identity and Access Management Roles Anywhere](https://docs.aws.amazon.com/rolesanywhere/latest/userguide/introduction.html)。
+ **对 AWS Command Line Interface(AWS CLI) 或 `aws-shell` 使用长期访问密钥的替代方法 – **替代方法包括如下。
  + **使用控制台凭证登录以进行 AWS 本地开发**。您可以使用 AWS CLI 版本 2 和 `aws login` 命令生成短期凭证，以使用您的控制台凭证运行 AWS CLI 命令。要了解更多信息，请参阅《AWS Command Line Interface 用户指南》**中的[登录以进行 AWS 本地开发](https://docs.aws.amazon.com//cli/latest/userguide/cli-authentication-user.html)。
  + **AWS CloudShell** 是一个基于浏览器的预先验证 shell，您可以直接从 AWS 管理控制台 中启动。您可以通过自己喜爱的 Shell（Bash、Powershell 或 Z shell）来对 AWS 服务 运行 AWS CLI 命令。在执行此操作时，您无需下载或安装命令行工具。有关更多信息，请参阅《AWS CloudShell 用户指南》**中的[什么是 AWS CloudShell？](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html)。
+ **不要为需要访问应用程序或 AWS 服务 的人类用户创建长期访问密钥 – **IAM Identity Center 可以生成临时访问凭证，供您的外部 IdP 用户访问 AWS 服务。这样就无需在 IAM 中创建和管理长期凭证。在 IAM Identity Center 中，创建一个 IAM Identity Center 权限集，该权限集向外部 IdP 用户授予访问权限。然后，将来自 IAM Identity Center 的组分配给选定 AWS 账户 中的权限集。有关更多信息，请参阅[什么是 AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)、[连接到外部身份提供者](https://docs.aws.amazon.com/singlesignon/latest/userguide/manage-your-identity-source-idp.html)以及 *AWS IAM Identity Center 用户指南*中的[权限集](https://docs.aws.amazon.com/singlesignon/latest/userguide/permissionsetsconcept.html)。
+ **不要 AWS 计算服务中存储长期访问密钥 – **相反，应为计算资源分配 IAM 角色。这会自动提供临时凭证以授予访问权限。例如，在创建附加到 Amazon EC2 实例的实例配置文件，可以将 AWS 角色分配给该实例并使其对该实例的所有应用程序可用。实例配置文件包含角色，并使 Amazon EC2 实例上运行的程序能够获得临时凭证。要了解更多信息，请参阅[使用 IAM 角色为 Amazon EC2 实例上运行的应用程序授予权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html)。