管理 Amazon 访问密钥的最佳实践
当您以编程方式使用Amazon时,您需要提供您的Amazon访问密钥,以便Amazon可以在编程调用中验证您的身份。您的访问密钥包含访问密钥 ID(例如 AKIAIOSFODNN7EXAMPLE
)和秘密访问密钥(例如 wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
)。
拥有您的访问密钥的任何人将与您拥有相同的Amazon资源访问权限级别。因此,Amazon 全力保护您的访问密钥并确保符合我们的分担责任模型
下述步骤可以帮助您保护您的访问密钥。有关背景信息,请参阅Amazon 安全凭证。
贵组织的安全要求和策略可能与本主题中介绍的有所不同。此处提供的建议旨在用作一般准则。
保护或不创建您的根用户访问密钥
您必须使用访问密钥(访问密钥 ID 和秘密访问密钥)以编程方式向Amazon提出请求。例如,在使用 Amazon Command Line Interface
有关更多信息,请参阅《IAM 用户指南》中的隐藏您的AmazonAmazon Web Services 账户根用户访问密钥。
管理 IAM 用户的访问密钥。
不是共享Amazon Web Services 账户根用户的凭证,而是创建单个 IAM 用户,仅授予每个用户所需的权限。有关更多信息,请参阅《IAM 用户指南》中的管理 IAM 用户的访问密钥。
使用访问密钥时,请遵守这些预防措施:
-
请勿直接将访问密钥嵌入到代码。 利用 Amazon SDK
和Amazon命令行工具 ,您可以将访问密钥放在已知位置,这样就不必将其保留在代码中。 在以下任一位置中放置访问密钥:
-
Amazon凭证文件。 Amazon 开发工具包和 Amazon CLI 自动使用您存储在 Amazon 凭证文件中的凭证。
有关使用 Amazon 证书文件的信息,请参阅软件开发工具包文档。示例包括:《Amazon SDK for Java 开发人员指南》中的设置Amazon凭证和开发区域以及《Amazon Command Line Interface 用户指南》中的配置和凭证文件。
要存储适用于 .NET 的 Amazon 开发工具包和 Amazon Tools for Windows PowerShell 的凭证,建议您使用 SDK Store。有关更多信息,请参阅《Amazon SDK for .NET 开发人员指南》中的使用 SDK 存储。
-
环境变量. 在多租户系统上,选择用户环境变量,而不是系统环境变量。
有关使用环境变量存储凭证的更多信息,请参阅《Amazon Command Line Interface 用户指南》中的环境变量。
-
-
定期轮换访问密钥。 定期更改访问密钥。有关详细信息,请参阅《IAM 用户指南》中的轮换访问密钥(Amazon CLI、Tools for Windows PowerShell 和 Amazon API)以及Amazon安全博客上的 How to Rotate Access Keys for IAM Users
。 -
删除未使用的访问密钥。 如果某个用户离开了贵组织,请删除相应的 IAM 用户,以使该用户无法再访问您的资源。要找出上次使用访问密钥的时间,请使用
GetAccessKeyLastUsed
API(Amazon CLI 命令:aws iam get-access-key-last-used
)。 -
为最敏感的操作配置多重验证。 有关更多信息,请参阅《IAM 用户指南》中的在Amazon中使用多重身份验证(MFA)。
使用 IAM 角色而不是长期访问密钥
在许多情况下,您并不需要永不过期的长期访问密钥(如 IAM 用户访问密钥)。相反,您可以创建 IAM 角色并生成临时安全凭证。临时安全证书包括访问密钥 ID 和秘密访问密钥,以及一个指示证书何时到期的安全令牌。
在手动撤消之前,长期访问密钥将保持有效,例如与 IAM 用户和Amazon Web Services 账户根用户相关联的访问密钥。但是,通过 IAM 角色获取的临时安全凭证和 Amazon Security Token Service 的其他功能将在短时间内过期。凭证意外泄漏时,使用临时安全凭证可帮助降低您的风险。
在以下这些情况下使用 IAM 角色和临时安全凭证:
-
您在 Amazon EC2 实例上运行一个应用程序或 Amazon CLI 脚本。 请勿直接在应用程序中使用访问密钥。请勿采取以下做法:将访问密钥传递给应用程序、将访问密钥嵌入到应用程序中、让应用程序从任何源读取密钥。相反,请定义一个对您的应用程序具有适当权限的 IAM 角色,并使用 EC2 角色启动 Amazon EC2 实例。执行此操作会将 IAM 角色与 Amazon EC2 实例相关联。这种做法还会允许应用程序获取临时安全凭证,然后再使用这些凭证对Amazon进行编程调用。Amazon 软件开发工具包和 Amazon CLI 可以自动获得角色的临时证书。
-
您需要授予跨账户访问权限。 使用 IAM 角色建立账户之间的信任,然后向用户授予有限的账户权限来访问可信账户。有关更多信息,请参阅《IAM 用户指南》中的教程:使用 IAM 角色委派跨Amazon账户的访问权限。
-
您拥有一个移动应用程序。 请勿将访问密钥嵌入应用程序,即使是嵌入加密存储也不允许。而应使用 Amazon Cognito
管理应用程序中的用户身份。此服务让您可以使用 Login with Amazon、Facebook、Google 或任何与 OpenID Connect(OIDC)兼容的身份提供商进行用户身份验证。然后,您可以使用 Amazon Cognito 凭证提供程序来管理应用程序用于向Amazon发出请求的凭证。有关更多信息,请参阅Amazon移动博客上的 Using the Amazon Cognito Credentials Provider 。 -
您希望向 Amazon 进行联合身份验证且贵组织支持 SAML 2.0。 如果您所在的组织具有支持 SAML 2.0 的身份提供程序,请将提供程序配置为使用 SAML。您可以使用 SAML 与 Amazon 交换身份验证信息,并获得一组临时安全证书。有关更多信息,请参阅《IAM 用户指南》中的关于基于 SAML 2.0 的联合身份验证.
-
您希望向 Amazon 进行联合身份验证且贵组织拥有本地身份存储。 如果用户可以在组织内部进行身份验证,您可以编写一个可向他们颁发用于访问 Amazon 资源的临时安全凭证的应用程序。有关更多信息,请参阅《IAM 用户指南》中的创建允许联合身份用户访问Amazon Web Services Management Console(自定义联合身份代理)的 URL。
使用 Amazon 访问密钥访问移动应用程序
您可以使用 Amazon 移动应用程序访问一组有限的 Amazon 服务和功能。该移动应用程序可帮助您在外出时支持事件响应。如需了解更多信息和下载应用程序,请参阅 Amazon 控制台移动应用程序
您可以使用控制台密码或访问密钥登录移动应用程序。作为最佳实践,不建议使用根用户访问密钥。相反,我们强烈建议您在移动设备上除了使用密码或生物识别锁定之外,还应创建一个 IAM 用户来管理Amazon资源。如果您的移动设备丢失了,您可以删除 IAM 用户的访问权限。有关为 IAM 用户生成访问密钥的更多信息,请参阅《IAM 用户指南》中的管理 IAM 用户的访问密钥。
使用访问密钥登录(移动应用程序)
-
在移动设备上打开该应用程序。
-
如果这是您第一次向设备添加身份,请选择 Add an identity (添加身份),然后选择 Access keys (访问密钥)。
如果您已使用其他身份登录,请选择菜单图标并选择 Switch identity (切换身份)。然后选择 Sign in as a different identity (以其他身份登录),然后选择 Access keys (访问密钥)。
-
在 Access keys (访问密钥) 页面上输入您的信息。
-
Access key ID (访问密钥 ID) – 输入您的访问密钥 ID。
-
Secret access key (秘密访问密钥) – 输入您的秘密访问密钥。
-
Identity name (身份名称) – 输入将在移动应用程序中显示的身份名称。此名称不需要与您的 IAM 用户名一致。
-
Identity PIN (身份 PIN) – 创建将来在登录时使用的个人身份识别码(PIN)。
注意 如果您为 Amazon 移动应用程序启用了生物识别技术,系统将提示您使用指纹或面部识别(而非 PIN)进行验证。如果生物识别失败,系统可能会提示您输入 PIN。
-
-
选择 Verify and add keys (验证并添加密钥)。
现在,您就可以使用移动应用程序访问一组选定的资源。
了解更多信息
有关确保 Amazon 账户安全的最佳实践的更多信息,请参阅以下资源:
-
IAM 最佳实践. 包含有关使用 Amazon Identity and Access Management(IAM)服务来帮助保护您的Amazon资源的建议。
-
以下页面为设置 Amazon 软件开发工具包和 Amazon CLI 以使用访问密钥提供了相关指导。
-
有关说明,请参阅《Amazon SDK for Java 开发人员指南》中的设置用于开发的Amazon凭证和区域。
-
《Amazon SDK for .NET 开发人员指南》中的使用 SDK 存储。
-
《Amazon SDK for PHP 开发人员指南》中的为 SDK 提供凭证。
-
Boto 3(Amazon SDK for Python)文档中的配置
。 -
《Amazon Tools for Windows PowerShell 指南》中的使用Amazon凭证。
-
《Amazon Command Line Interface 用户指南》中的配置和凭证文件。
-
-
使用 IAM 角色授予访问权限。讨论使用 .NET SDK 编写的程序在 Amazon EC2 实例上运行时如何自动获得临时安全凭证。类似信息也可用于 Amazon SDK for Java。