凭证和配置文件解析 - AWS SDK for .NET

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

凭证和配置文件解析

AWS SDK for .NET按特定顺序搜索凭证,并对当前应用程序使用第一个可用集。

凭证搜索顺序
  1. 在 AWS 服务客户端上显式设置的凭证,如访问应用程序中的凭证和配置文件中所述。

    注意

    该主题之所以出现在特殊注意事项部分中,是因为它不是指定凭证的首选方法。

  2. 一个凭证配置文件,其名称由 AWSConfigs.AWSProfileName 中的值指定。

  3. 名称由 AWS_PROFILE 环境变量指定的凭证配置文件。

  4. [default] 凭证配置文件。

  5. 根据 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_SESSION_TOKEN 环境变量 (如果这些变量都不为空) 创建的 SessionAWSCredentials

  6. 根据 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 环境变量 (如果这两个变量不为空) 创建的 BasicAWSCredentials

  7. Amazon ECS 任务的任务的 IAM 角色

  8. Amazon EC2 实例元数据。

如果您的应用程序在 Amazon EC2 实例上运行(例如在生产环境中),请使用 IAM 角色,如 使用 IAM 角色授予访问权限 中所述。否则,例如在预发布测试中,将凭证存储在服务器上使用 AWS 凭证文件格式的文件中(Web 应用程序有权访问此文件)。

配置文件解析

凭证有两种不同的存储机制,请务必了解如何配置AWS SDK for .NET以使用它们。AWSConfigs.AWSProfilesLocation 属性控制AWS SDK for .NET如何查找凭证配置文件。

AWSProfilesLocation 配置文件解析行为

null (未设置) 或空

如果平台支持,请搜索 SDK Store,然后在默认位置搜索共享 AWS 凭证文件。如果配置文件不在上述任何一个位置,请搜索 ~/.aws/config(Linux 或 macOS)或 %USERPROFILE%\.aws\config(Windows)。

AWS 凭证文件格式的文件的路径

在指定文件中搜索具有指定名称的配置文件。

使用联合用户账户凭证

对于采用AWS SDK for .NET(AWSSDK.Core 版本 3.1.6.0 和更高版本)的应用程序,可以通过 Active Directory Federation Services(AD FS)使用联合用户账户来利用安全断言标记语言(SAML)访问 AWS 服务。

联合访问支持意味着用户可使用您的 Active Directory 进行身份验证。系统将自动为用户授予临时凭证。当您的应用程序调用 AWS 服务时,将使用这些临时凭证 (有效期为 1 小时)。开发工具包将管理临时凭证。对于已加入域的用户账户,如果您的应用程序发出调用但凭证已过期,则将自动重新验证用户的身份并授予全新凭证。(对于未加入域的账户,在重新进行身份验证之前,系统将提示用户输入凭证。)

要在 .NET 应用程序中使用此支持,您必须先使用 PowerShell cmdlet 设置角色配置文件。要了解具体信息,请参阅AWS Tools for Windows PowerShell文档

设置角色配置文件后,请在应用程序中引用该配置文件。有多种方法可以做到这一点,其中一种是像处理其他凭证配置文件一样使用 AWSConfigs.AWSProfileName 属性。

AWS Security Token Service 程序集(awssdk.securityToken)提供 SAML 支持以获取 AWS 凭证。要使用联合用户账户凭证,请确保您的应用程序可以使用此程序集。

指定角色或临时凭证

对于 Amazon EC2 实例上运行的应用程序,管理凭证最安全的方式是使用 IAM 角色,如使用 IAM 角色授予访问权限中所述。

对于软件可执行文件对组织外部用户可用的应用程序情景,建议您将软件设计为使用临时安全凭证。除了提供对 AWS 资源的有限访问之外,让这些凭证在指定时段后过期也会有好处。有关临时安全凭证的更多信息,请参阅:

使用代理凭证

如果您的软件通过代理与 AWS 进行通信,则可使用服务的 Config 类的 ProxyCredentials 属性来为代理指定凭证。服务的 Config 类通常是该服务主命名空间的一部分。示例包括以下内容:Amazon.CloudDirectory 命名空间中的 AmazonCloudDirectoryConfigAmazon.GameLift 命名空间中的 AmazonGameLiftConfig

例如,对于 Amazon S3,您可以使用如下所示的代码,其中 SecurelyStoredUserNameSecurelyStoredPasswordNetworkCredential 对象中指定的代理用户名和密码。

AmazonS3Config config = new AmazonS3Config(); config.ProxyCredentials = new NetworkCredential(SecurelyStoredUserName, SecurelyStoredPassword);
注意

早期版本的开发工具包使用的是 ProxyUsernameProxyPassword,但这两个属性已被弃用。