

的版本 4 (V4) 适用于 .NET 的 Amazon SDK 已经发布！

有关重大更改和迁移应用程序的信息，请参阅[迁移主题](https://docs.amazonaws.cn/sdk-for-net/v4/developer-guide/net-dg-v4.html)。

 [https://docs.amazonaws.cn/sdk-for-net/v4/developer-guide/net-dg-v4.html](https://docs.amazonaws.cn/sdk-for-net/v4/developer-guide/net-dg-v4.html)

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

# 凭证和配置文件解析


按特定顺序 适用于 .NET 的 Amazon SDK 搜索凭证，并使用当前应用程序的第一组可用凭证。

**凭证搜索顺序**

1. 在 Amazon 服务客户端上显式设置的凭证，如中所述[访问应用程序中的凭证和配置文件](creds-locate.md)。
**注意**  
该主题之所以出现在[特殊注意事项](special-considerations.md)部分中，是因为它不是指定凭证的首选方法。

1. 从`AWS_ACCESS_KEY_ID``AWS_SECRET_ACCESS_KEY`、和`AWS_SESSION_TOKEN`环境变量创建的@@ [会话 AWSCredentials](https://docs.amazonaws.cn/sdkfornet/v4/apidocs/items/Runtime/TSessionAWSCredentials.html)（如果所有三个变量都有一个值）。

1.  从`AWS_ACCESS_KEY_ID`和`AWS_SECRET_ACCESS_KEY`环境变量创建@@ [的基本AWSCredentials](https://docs.amazonaws.cn/sdkfornet/v4/apidocs/items/Runtime/TBasicAWSCredentials.html)变量（如果两个变量都有值）。

1. [AssumeRoleWithWebIdentityCredentials](https://docs.amazonaws.cn/sdkfornet/v4/apidocs/items/Runtime/TAssumeRoleWithWebIdentityCredentials.html)如果两个变量都有值，则由`AWS_WEB_IDENTITY_TOKEN_FILE`和`AWS_ROLE_ARN`环境变量创建。

1. 凭据配置文件，其名称由中的值指定[AWSConfigs。 AWSProfile姓名](https://docs.amazonaws.cn/sdkfornet/v4/apidocs/items/Amazon/TAWSConfigs.html#properties)。

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

1. `[default]` 凭证配置文件。

1. [容器凭证提供商](https://docs.amazonaws.cn/sdkref/latest/guide/feature-container-credentials.html)。

1. Amazon EC2 实例元数据。

如果您的应用程序在 Amazon EC2 实例上运行，例如在生产环境中，请使用 IAM 角色，如中所述[使用 IAM 角色授予访问权限](net-dg-hosm.md)。否则，例如在预发行测试中，请将您的凭据存储在文件中，该文件使用您的 Web 应用程序在服务器上可以访问的 Amazon 凭据文件格式。

有关环境变量和凭据配置文件的更多信息，请参阅《[Amazon SDKs 和工具参考指南](https://docs.amazonaws.cn/sdkref/latest/guide/)》中的以下主题：[环境变量](https://docs.amazonaws.cn/sdkref/latest/guide/environment-variables.html)、[环境变量列表](https://docs.amazonaws.cn/sdkref/latest/guide/settings-reference.html#EVarSettings)以及[共享配置和凭据文件](https://docs.amazonaws.cn/sdkref/latest/guide/file-format.html)。

## 配置文件解析


由于有两种不同的凭证存储机制，因此了解如何配置 适用于 .NET 的 Amazon SDK 以使用它们非常重要。的[AWSConfigs。 AWSProfiles](https://docs.amazonaws.cn/sdkfornet/v4/apidocs/items/Amazon/TAWSConfigs.html)位置属性控制如何 适用于 .NET 的 Amazon SDK 查找凭据配置文件。


****  

| AWSProfilesLocation | 配置文件解析行为 | 
| --- | --- | 
|  null (未设置) 或空  |  如果平台支持，请搜索 SDK Store，然后在[默认位置](creds-file.md)搜索共享 Amazon 凭证文件。如果配置文件不在上述任何一个位置，请搜索 `~/.aws/config`（Linux 或 macOS）或 `%USERPROFILE%\.aws\config`（Windows）。  | 
|   Amazon 凭证文件格式的文件的路径  |  *仅* 在指定文件中搜索具有指定名称的配置文件。  | 

## 使用联合用户账户凭证


使用 适用于 .NET 的 Amazon SDK （[AWSSDK.Core](https://www.nuget.org/packages/AWSSDK.Core/) 版本 3.1.6.0 及更高版本）的应用程序可以通过 Active Directory 联合身份验证服务 (AD FS) 使用联合用户帐户，通过安全断言标记语言 (SAML) 访问 Amazon 服务。

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

要在.NET 应用程序中使用此支持，必须先使用 PowerShell cmdlet 设置角色配置文件。要了解具体信息，请参阅[Amazon Tools for Windows PowerShell 文档](https://docs.amazonaws.cn/powershell/latest/userguide/saml-pst.html)。

设置角色配置文件后，请在应用程序中引用该配置文件。有多种方法可以做到这一点，其中一种是使用[AWSConfigs。 AWSProfile使用与其他凭据配置文件相同的方式命名](https://docs.amazonaws.cn/sdkfornet/v4/apidocs/items/Amazon/TAWSConfigs.html)属性。

大*Amazon Security Token Service*会 ([AWSSDK. SecurityToken](https://www.nuget.org/packages/AWSSDK.SecurityToken/)) 提供 SAML 支持以获取 Amazon 证书。要使用联合用户账户凭证，请确保您的应用程序可以使用此程序集。

## 指定角色或临时凭证


对于在 Amazon EC2 实例上运行的应用程序，管理证书的最安全方法是使用 IAM 角色，如中所述[使用 IAM 角色授予访问权限](net-dg-hosm.md)。

对于软件可执行文件对组织外部用户可用的应用程序情景，建议您将软件设计为使用*临时安全凭证*。除了提供有限的 Amazon 资源访问权限外，这些证书还具有在指定时间段后过期的好处。有关临时安全凭证的更多信息，请参阅：
+  [临时安全凭证](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_credentials_temp.html) 
+  [Amazon Cognito 身份池](https://docs.amazonaws.cn/cognito/latest/developerguide/cognito-identity.html)

## 使用代理凭证


如果您的软件 Amazon 通过代理与通信，则可以使用服务`Config`类的`ProxyCredentials`属性为代理指定凭据。服务的 `Config` 类通常是该服务主命名空间的一部分。示例包括以下内容：[AmazonCloudDirectoryConfig](https://docs.amazonaws.cn/sdkfornet/v4/apidocs/items/CloudDirectory/TCloudDirectoryConfig.html)在 [Amazon 中。 CloudDirectory](https://docs.amazonaws.cn/sdkfornet/v4/apidocs/items/CloudDirectory/NCloudDirectory.html)命名空间和[AmazonGameLiftConfig](https://docs.amazonaws.cn/sdkfornet/v4/apidocs/items/GameLift/TGameLiftConfig.html)在 [Amazon 中。 GameLift](https://docs.amazonaws.cn/sdkfornet/v4/apidocs/items/GameLift/NGameLift.html)命名空间。

例如，对于 [Amazon S3](https://docs.amazonaws.cn/sdkfornet/v4/apidocs/items/S3/TS3Config.html)，您可以使用类似于以下内容的代码，其中`SecurelyStoredUserName`和`SecurelyStoredPassword`是在[NetworkCredential](https://learn.microsoft.com/en-us/dotnet/api/system.net.networkcredential)对象中指定的代理用户名和密码。

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

**注意**  
早期版本的开发工具包使用的是 `ProxyUsername` 和 `ProxyPassword`，但这两个属性已被弃用。