Amazon Web Services
一般参考 (Version 1.0)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

有关管理 AWS 访问密钥的最佳实践

在以编程方式访问 AWS 时,使用访问密钥验证您的身份和应用程序的身份。访问密钥包含访问密钥 ID(例如 AKIAIOSFODNN7EXAMPLE)和秘密访问密钥(例如 wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY)。

拥有您的访问密钥的任何人将与您拥有相同的 AWS 资源访问权限级别。因此,AWS 全力保护您的访问密钥并确保符合我们的分担责任模型,您也应当如此。

下述步骤可以帮助您保护访问密钥。有关一般说明,请参阅 AWS 安全凭证

注意

贵组织的安全要求和策略可能与本主题中介绍的有所不同。此处提供的建议旨在用作一般准则。

删除 (或不生成) 账户访问密钥

在使用 AWS 命令行工具AWS 软件开发工具包或直接的 API 调用来签署您发出的请求时,都需要使用访问密钥。拥有您的 AWS account root user访问密钥的任何人都可以无限制地访问您账户中的所有资源,包括账单信息。您无法限制您的 AWS account root user的权限。

保护账户的最佳方法之一是不为您的 AWS account root user设置访问密钥。除非必须 具有root user访问密钥 (这种情况很少见),否则最好不要生成根用户访问密钥。建议的最佳实践是创建一个或多个 AWS Identity and Access Management (IAM) 用户,向他们授予必要的权限,并通过 IAM 用户与 AWS 进行日常交互。

如果您的账户已有访问密钥,建议您:找到当前在应用程序中使用该密钥 (如果有) 的位置,使用 IAM 用户访问密钥替换root user访问密钥,然后禁用并删除root user访问密钥。有关如何使用一个访问密钥替代另一个访问密钥的详细信息,请参阅 AWS 安全博客上的博文如何轮换 IAM 用户的访问密钥

默认情况下,AWS 不会为新账户生成访问密钥。

有关如何创建具有管理权限的 IAM 用户的信息,请参阅 IAM 用户指南 中的创建您的第一个 IAM 管理员用户和组

使用临时安全凭证(IAM 角色)代替长期访问密钥

在许多情况下,您并不需要永不过期的长期访问密钥(如 IAM 用户访问密钥)。相反,您可以创建 IAM 角色并生成临时安全凭证。临时安全凭证包括访问密钥 ID 和秘密访问密钥,以及一个指示凭证何时到期的安全令牌。

长期访问密钥 (如与 IAM 用户和 AWS account root user关联的访问密钥) 将保持有效,直至手动撤销。但是,通过 IAM 角色获取的临时安全凭证和 AWS Security Token Service 的其他功能将在短时间内过期。凭证意外泄漏时,使用临时安全凭证可帮助降低您的风险。

在以下这些情况下使用 IAM 角色和临时安全凭证:

  • 您在 Amazon EC2 实例上运行一个应用程序或 AWS CLI 脚本。请勿向应用程序传递访问密钥、将密钥嵌入应用程序或让应用程序从 Amazon S3 存储桶等源读取密钥(即使存储桶已加密)。相反,请定义对应用程序具有适当权限的 IAM 角色,并启动具有用于 EC2 的角色的 Amazon EC2 实例。这会将 IAM 角色与 Amazon EC2 实例相关联,应用程序也将获得进而可用于进行 AWS 调用的临时安全凭证。AWS 软件开发工具包和 AWS CLI 可以自动获得角色的临时凭证。

  • 您需要授予跨账户访问权限。使用 IAM 角色建立账户之间的信任,然后向用户授予有限的账户权限来访问可信账户。有关更多信息,请参阅 IAM 用户指南 中的教程:使用 IAM 角色委派跨 AWS 账户的访问权限

  • 您拥有一个移动应用程序。请勿将访问密钥嵌入应用程序,即使是嵌入加密存储也不允许。而应使用 Amazon Cognito 管理应用程序中的用户身份。此服务可让您使用 Login with Amazon、Facebook、Google 或任何兼容 OpenID Connect (OIDC) 的身份提供商对用户进行身份验证。然后,您可以使用 Amazon Cognito 凭证提供程序来管理应用程序用于向 AWS 发出请求的凭证。有关更多信息,请参阅 AWS 移动博客上的使用 Amazon Cognito 凭证提供程序

  • 您希望向 AWS 进行联合身份验证且贵组织支持 SAML 2.0。如果您为拥有支持 SAML 2.0 的身份提供商的组织工作,配置提供商以使用 SAML 与 AWS 交换身份验证信息并取回一组临时安全凭证。有关更多信息,请参阅 IAM 用户指南 中的关于基于 SAML 2.0 的联合身份验证

  • 您希望向 AWS 进行联合身份验证且贵组织拥有本地身份存储。如果用户可以在组织内部进行身份验证,您可以编写一个可向他们颁发用于访问 AWS 资源的临时安全凭证的应用程序。有关更多信息,请参阅 IAM 用户指南 中的创建一个使联合身份用户能够访问 AWS 管理控制台 (自定义联合代理) 的 URL

正确管理 IAM 用户访问密钥

如果您需要创建用于以编程方式访问 AWS 的访问密钥,请创建 IAM 用户并仅授予该用户所需的权限。然后为该用户生成一个访问密钥。有关详细信息,请参阅 IAM 用户指南 中的管理 IAM 用户的访问密钥

注意

请记住,如果您正在 Amazon EC2 实例上运行一个应用程序,并且该应用程序需要访问 AWS 资源,则您应该使用适用于 EC2 的 IAM 角色,正如前一部分所述。

使用访问密钥时,请遵守这些预防措施:

  • 请勿直接将访问密钥嵌入代码中。使用 AWS 软件开发工具包AWS 命令行工具,可以将访问密钥放置在已知位置,这样就不必将其保留在代码中。

    在以下任一位置中放置访问密钥:

    • AWS 凭证文件。AWS 软件开发工具包和 AWS CLI 自动使用您存储在 AWS 凭证文件中的凭证。

      有关使用 AWS 凭证文件的信息,请参阅软件开发工具包文档。在 AWS SDK for Java Developer Guide 中的设置用于开发的 AWS 凭证和区域AWS Command Line Interface 用户指南 中的配置和凭证文件中可找到示例。

      注意

      要存储适用于 .NET 的 AWS 软件开发工具包和 适用于 Windows PowerShell 的 AWS 工具 的凭证,建议您使用软件开发工具包存储。有关更多信息,请参阅适用于 .NET 的 AWS 开发工具包 开发人员指南中的使用软件开发工具包存储

    • 环境变量。在多租户系统上,选择用户环境变量,而不是系统环境变量。

      有关使用环境变量存储凭证的更多信息,请参阅 AWS Command Line Interface 用户指南中的环境变量

  • 对不同应用程序使用不同的访问密钥。这样您就可以在访问密钥泄露时隔离权限并撤消单个应用程序的访问密钥。通过让不同应用程序拥有独立的访问密钥,还可以在 AWS CloudTrail 日志文件中生成不同的条目,使您能够更轻松地确定执行特定操作的应用程序。

  • 定期轮换访问密钥。定期更改访问密钥。有关详细信息,请参阅 IAM 用户指南 中的轮换访问密钥 (AWS CLI、Windows PowerShell 工具 和 AWS API) 以及 AWS 安全博客上的如何轮换 IAM 用户的访问密钥

  • 删除未使用的访问密钥。如果某个用户离开了贵组织,请删除相应的 IAM 用户,以便删除该用户对您的资源的访问。要找出上次使用访问密钥的时间,请使用 GetAccessKeyLastUsed API(AWS CLI 命令:aws iam get-access-key-last-used)。

  • 为最敏感的操作配置多重验证。 有关详细信息,请参阅 IAM 用户指南 中的在 AWS 中使用 Multi-Factor Authentication (MFA)

更多资源

有关确保 AWS 账户安全的最佳实践的更多信息,请参阅以下资源: