

 适用于 .NET 的 AWS SDK V3 已进入维护模式。

我们建议您迁移到 [适用于 .NET 的 AWS SDK V4](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/welcome.html)。有关如何迁移的更多详细信息和信息，请参阅我们的[维护模式公告](https://aws.amazon.com/blogs/developer/aws-sdk-for-net-v3-maintenance-mode-announcement/)。

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

# 开始使用 适用于 .NET 的 AWS SDK
<a name="net-dg-config"></a>

要使用适用于 .NET 的 AWS SDK，您需要安装工具链并配置应用程序访问 AWS 服务所需的许多基本内容。这些指令包括：
+ 适当的用户账户或角色
+ 该用户账户或代入该角色的用户账户的身份验证信息
+ AWS 区域规格
+ AWSSDK 程序包或程序集

本部分中的一些主题提供了有关如何配置这些基本内容的信息。

本部分中的其它主题提供了可以配置项目的更高级方式的信息。

**Topics**
+ [

# 安装和配置工具链
](net-dg-dev-env.md)
+ [配置 SDK 身份验证](creds-idc.md)
+ [快速了解](quick-start.md)
+ [

# 启动新项目
](net-dg-start-new-project.md)
+ [

# 配置 AWS 区域
](net-dg-region-selection.md)
+ [

# 通过 NuGet 安装 AWSSDK 程序包
](net-dg-install-assemblies.md)
+ [

# 在没有 NuGet 的情况下安装 AWSSDK 程序集
](net-dg-install-without-nuget.md)
+ [

# 凭证和配置文件解析
](creds-assign.md)
+ [用户和角色](net-dg-users-roles.md)
+ [高级配置](net-dg-advanced-config.md)
+ [

# 使用旧版凭证
](net-dg-legacy-creds.md)

# 安装和配置工具链
<a name="net-dg-dev-env"></a>

要使用适用于 .NET 的 AWS SDK，您必须安装特定的开发工具。

## 跨平台开发
<a name="net-dg-dev-env-cross"></a>

对于 Windows、Linux 或 macOS 上的跨平台 .NET 开发，需要具备：
+ Microsoft [.NET Core 开发工具包](https://learn.microsoft.com/en-us/dotnet/fundamentals/)，版本 2.1、3.1 或更高版本，其中包括 .NET 命令行界面 (CLI) (**`dotnet`**) 和 .NET Core 运行时。
+ 适合您的操作系统和要求的代码编辑器或集成式开发环境（IDE）。这通常为 .NET Core 提供一些支持。

  示例包括 [Microsoft Visual Studio Code（VS 代码）](https://code.visualstudio.com/) 、[JetBrains Rider](https://www.jetbrains.com/rider/) 和 [Microsoft Visual Studio](https://visualstudio.microsoft.com/vs/)。
+ （可选）一个适用于您选择的编辑器和操作系统的AWS工具包（如果有）。

  示例包括 [AWS Toolkit for Visual Studio Code](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/welcome.html)、[AWS Toolkit for JetBrains](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/welcome.html) 和 [AWS Toolkit for Visual Studio](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/welcome.html)。

## 在 Windows 上使用 Visual Studio 和 .NET Core 开发
<a name="net-dg-dev-env-winvs"></a>

对于在 Windows 使用 Visual Studio 和 .NET Core 进行开发，需要以下项：
+ [Microsoft Visual Studio](https://visualstudio.microsoft.com/vs/)
+ Microsoft .NET Core 2.1、3.1 或更高版本

  默认情况下，安装最新版本的 Visual Studio 时通常会包含此功能。
+ （可选）AWS Toolkit for Visual Studio，这款插件提供了用户界面，可用于从 Visual Studio 管理 AWS 资源和本地配置文件。要安装该工具包，请参阅[AWS Toolkit for Visual Studio设置](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/getting-set-up.html)。

  有关更多信息，请参阅[《AWS Toolkit for Visual Studio 用户指南》](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/)。

## 后续步骤
<a name="net-dg-dev-env-next"></a>

[使用配置 SDK 身份验证 AWS](creds-idc.md)

# 使用配置 SDK 身份验证 AWS
<a name="creds-idc"></a>

使用开发 AWS 时，您必须确定您的代码是如何进行身份验证的。 AWS 服务您可以通过不同的方式配置对 AWS 资源的编程访问权限，具体取决于环境和可用的 AWS 访问权限。

要查看 SDK 的各种身份验证方法，请参阅《工具参考指南》[和《*工具参考指南》中的身份验证AWS SDKs 和*访问权限](https://docs.aws.amazon.com/sdkref/latest/guide/access.html)。

本主题假设新用户正在本地开发，雇主未向其提供身份验证方法，并将使用该用户 AWS IAM Identity Center 来获取临时证书。如果您的环境与这些假设不符，则本主题中的某些信息可能不适用于您，或者某些信息可能已经提供给您。

 配置此环境需要几个步骤，总结如下：

1. [使用控制台凭据登录](#login-con-creds)

1. [启用和配置 IAM Identity Center](#idc-config-sso)

1. [将开发工具包配置为使用 IAM Identity Center。](#idc-config-sdk)

1. [启动 AWS 访问门户会话](#idc-start-portal)

## 使用控制台凭据登录
<a name="login-con-creds"></a>

您可以使用现有的 AWS 管理控制台登录凭据以编程方式访问 AWS 服务。在基于浏览器的身份验证流程之后， AWS 生成可跨本地开发工具（例如 CL AWS I AWS Tools for PowerShell 和适用于.NET v3 的 AWS SDK）使用的临时证书。

通过此流程，您可以使用在初始账户设置期间创建的根证书、IAM 用户或身份提供商提供的联合身份以及 AWS CLI 进行身份验证，或者 AWS Tools for PowerShell 自动为您管理临时证书。这种方法无需在本地存储长期证书，从而增强了安全性。

当您从 AWS CLI 运行`aws login`命令时，您可以从活动控制台会话中进行选择，也可以通过基于浏览器的身份验证流程登录，这将自动生成临时证书。临时凭证令牌将在 15 分钟后过期，但是适用于.NET 的 AWS SDK for v3 会在您请求期间根据需要自动刷新令牌。

**警告**  
.NET 框架目标不支持此功能。

**重要**  
如果您使用控制台凭据进行身份验证，则您的应用程序必须引用以下 NuGet 软件包，这样 AWS 登录解析才能起作用：  
**AWSSDK. 登录**
未能引用这些程序包将导致运行时系统异常。
+ [使用 AWS CLI 使用控制台凭据登录。](https://docs.aws.amazon.com/sdkref/latest/guide/access-login.html)

按照 AWS CLI 上面给出的步骤登录后，该`config`文件将如下所示。

```
[default]
login_session = arn:aws:iam::0123456789012:user/username
region = us-east-1

[my-dev-profile]
login_session = arn:aws:iam::0123456789012:user/username
region = us-east-1
```

## 启用和配置 IAM Identity Center
<a name="idc-config-sso"></a>

要使用 IAM Identity Center，必须先启用并进行配置。要详细了解如何为 SDK 执行此操作，请查看*AWS SDKs 和工具参考指南*中 [IAM Identity Center 身份验证](https://docs.aws.amazon.com/sdkref/latest/guide/access-sso.html)主题中的**步骤 1**。具体而言，请按照**我没有通过 IAM Identity Center 确立访问权限**下的所有必要说明进行操作。

## 将开发工具包配置为使用 IAM Identity Center。
<a name="idc-config-sdk"></a>

有关如何配置软件开发工具包以使用 IAM Identity Center 的信息，请参阅《*工具参考指南》*中 [IAM 身份中心身份验证](https://docs.aws.amazon.com/sdkref/latest/guide/access-sso.html)主题的**步骤 2**。AWS SDKs 完成此配置后，您的系统应包含以下元素：
+  AWS CLI，用于在运行应用程序之前启动 AWS 访问门户会话。
+ 共享 AWS `config`文件，其中包含一个[`[default]`配置](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html#file-format-profile)文件，其中包含一组可从 SDK 中引用的配置值。要查找此文件的位置，请参阅*AWS SDKs 和工具参考指南*中的[共享文件的位置](https://docs.aws.amazon.com/sdkref/latest/guide/file-location.html)。在向发送请求之前， 适用于 .NET 的 AWS SDK 使用配置文件的 SSO 令牌提供者获取凭证。 AWS`sso_role_name` 值是与 IAM Identity Center 权限集关联的 IAM 角色，应允许访问您的应用程序中使用的 AWS 服务 。

  以下示例 `config` 文件显示了使用 SSO 令牌提供程序设置的默认配置文件。配置文件的 `sso_session` 设置是指所指定的 `sso-session` 节。该`sso-session`部分包含启动 AWS 访问门户会话的设置。

  ```
  [default]
  sso_session = my-sso
  sso_account_id = 111122223333
  sso_role_name = SampleRole
  region = us-east-1
  output = json
  
  [sso-session my-sso]
  sso_region = us-east-1
  sso_start_url = https://provided-domain.awsapps.com/start
  sso_registration_scopes = sso:account:access
  ```

**重要**  
如果您使用 AWS IAM Identity Center 进行身份验证，则您的应用程序必须引用以下 NuGet软件包，这样 SSO 解析才能起作用：  
`AWSSDK.SSO`
`AWSSDK.SSOOIDC`
未能引用这些程序包将导致*运行时系统*异常。

## 启动 AWS 访问门户会话
<a name="idc-start-portal"></a>

在运行可访问的应用程序之前 AWS 服务，您需要为开发工具包进行有效的 AWS 访问门户会话，才能使用 IAM Identity Center 身份验证来解析证书。根据配置的会话时长，访问权限最终将过期，并且开发工具包将遇到身份验证错误。要登录 AWS 访问门户，请在中运行以下命令 AWS CLI。

```
aws sso login
```

由于您有默认的配置文件设置，因此无需使用 `--profile` 选项调用该命令。如果您的 SSO 令牌提供程序配置在使用指定的配置文件，则命令为 `aws sso login --profile named-profile`。

要测试是否已有活动会话，请运行以下 AWS CLI 命令。

```
aws sts get-caller-identity
```

对此命令的响应应该报告共享 `config` 文件中配置的 IAM Identity Center 账户和权限集。

**注意**  
如果您已经有一个有效的 AWS 访问门户会话并且`aws sso login`正在运行，则无需提供凭据。  
登录过程可能会提示您允许 AWS CLI 访问您的数据。由于 AWS CLI 是在适用于 Python 的 SDK 之上构建的，因此权限消息可能包含`botocore`名称的变体。

## 附加信息
<a name="idc-additional-info"></a>
+ 有关在开发环境中使用 IAM Identity Center 和 SSO 的更多信息，请参阅[高级身份验证](advanced-auth.md)部分中的[单点登录](sso.md)。此信息包括替代方法和更高级的方法，以及向您展示如何使用这些方法的教程。
+ 有关 SDK 身份验证的更多选项，例如配置文件和环境变量的使用，请参阅*AWS SDKs 和工具参考指南*中的[配置](https://docs.aws.amazon.com/sdkref/latest/guide/creds-config-files.html)章节。
+ 有关最佳实践的更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的安全最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。
+ 要创建短期 AWS 证书，请参阅 *IAM 用户指南*中的[临时安全证书](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)。
+ 要了解其他凭证提供商，请参阅《*工具参考*指南》AWS SDKs 中的[标准化凭证提供商](https://docs.aws.amazon.com/sdkref/latest/guide/standardized-credentials.html)。

# 快速了解适用于 .NET 的 AWS SDK
<a name="quick-start"></a>

本部分为不熟悉适用于 .NET 的 AWS SDK的开发人员提供了基本教程。

**注意**  
在使用这些教程之前，必须先[安装工具链](net-dg-dev-env.md)并[配置开发工具包身份验证](creds-idc.md)。

有关为特定 AWS 服务开发软件及相关代码示例的信息，请参阅[使用 AWS 服务](working-with-aws-services.md)。有关其他代码示例，请参阅 [适用于 .NET 的 SDK 代码示例](csharp_code_examples.md)。

**Topics**
+ [简单跨平台应用程序](quick-start-s3-1-cross.md)
+ [基于 Windows 的简单应用程序](quick-start-s3-1-winvs.md)
+ [

# 后续步骤
](quick-start-next-steps.md)

# 使用适用于 .NET 的 AWS SDK的简单跨平台应用程序
<a name="quick-start-s3-1-cross"></a>

本教程将适用于 .NET 的 AWS SDK与 .NET Core 一起用于跨平台开发。本教程向您展示如何使用开发工具包列出您拥有的 [Amazon S3 桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/)，并且可以选择创建新桶。

您将使用跨平台工具（例如 .NET 命令行界面 (CLI)）完成本教程。有关配置开发环境的其它方法，请参阅[安装和配置工具链](net-dg-dev-env.md)。

**对于 Windows、Linux 或 macOS 上的跨平台 .NET 开发，需要：**
+ Microsoft [.NET Core 开发工具包](https://learn.microsoft.com/en-us/dotnet/fundamentals/)，版本 2.1、3.1 或更高版本，其中包括 .NET 命令行界面 (CLI) (**`dotnet`**) 和 .NET Core 运行时。
+ 适合您的操作系统和要求的代码编辑器或集成式开发环境（IDE）。这通常为 .NET Core 提供一些支持。

  示例包括 [Microsoft Visual Studio Code（VS 代码）](https://code.visualstudio.com/) 、[JetBrains Rider](https://www.jetbrains.com/rider/) 和 [Microsoft Visual Studio](https://visualstudio.microsoft.com/vs/)。

**注意**  
在使用这些教程之前，必须先[安装工具链](net-dg-dev-env.md)并[配置开发工具包身份验证](creds-idc.md)。

## 步骤
<a name="s3-1-cross-steps"></a>
+ [创建项目](#s3-1-cross-create-project)
+ [创建代码](#s3-1-cross-code)
+ [运行应用程序](#s3-1-cross-run)
+ [清理](#s3-1-cross-clean-up)

## 创建项目
<a name="s3-1-cross-create-project"></a>

1. 打开命令提示符或终端。查找或创建可以在其中创建 .NET 项目的操作系统文件夹。

1. 在该文件夹中，运行以下命令以创建 .NET 项目。

   ```
   dotnet new console --name S3CreateAndList
   ```

1. 转到新创建的 `S3CreateAndList` 文件夹并运行以下命令。

   ```
   dotnet add package AWSSDK.S3
   dotnet add package AWSSDK.SecurityToken
   dotnet add package AWSSDK.SSO
   dotnet add package AWSSDK.SSOOIDC
   ```

   前面的命令从 [NuGet Package Manager](https://www.nuget.org/profiles/awsdotnet) 中安装 NuGet 程序包。由于我们确切地知道在本教程中所需的 NuGet 程序包，因此现在可以执行这一步。在开发过程中，知道所需的程序包也很常见。出现这种情况时，可以运行类似的命令。

## 创建代码
<a name="s3-1-cross-code"></a>

1. 在 `S3CreateAndList` 文件夹中，查找并在代码编辑器中打开 `Program.cs`。

1. 用以下代码替换内容并保存文件。

   ```
   using System;
   using System.Threading.Tasks;
   
   // NuGet packages: AWSSDK.S3, AWSSDK.SecurityToken, AWSSDK.SSO, AWSSDK.SSOOIDC
   using Amazon.Runtime;
   using Amazon.Runtime.CredentialManagement;
   using Amazon.S3;
   using Amazon.S3.Model;
   using Amazon.SecurityToken;
   using Amazon.SecurityToken.Model;
   
   namespace S3CreateAndList
   {
       class Program
       {
           // This code is part of the quick tour in the developer guide.
           // See https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/quick-start.html
           // for complete steps.
           // Requirements:
           // - An SSO profile in the SSO user's shared config file with sufficient privileges for
   		//   STS and S3 buckets.
           // - An active SSO Token.
           //    If an active SSO token isn't available, the SSO user should do the following:
           //    In a terminal, the SSO user must call "aws sso login".
   
           // Class members.
           static async Task Main(string[] args)
           {
               // Get SSO credentials from the information in the shared config file.
               // For this tutorial, the information is in the [default] profile.
               var ssoCreds = LoadSsoCredentials("default");
   
               // Display the caller's identity.
               var ssoProfileClient = new AmazonSecurityTokenServiceClient(ssoCreds);
               Console.WriteLine($"\nSSO Profile:\n {await ssoProfileClient.GetCallerIdentityArn()}");
   
               // Create the S3 client is by using the SSO credentials obtained earlier.
               var s3Client = new AmazonS3Client(ssoCreds);
   
               // Parse the command line arguments for the bucket name.
               if (GetBucketName(args, out String bucketName))
               {
                   // If a bucket name was supplied, create the bucket.
                   // Call the API method directly
                   try
                   {
                       Console.WriteLine($"\nCreating bucket {bucketName}...");
                       var createResponse = await s3Client.PutBucketAsync(bucketName);
                       Console.WriteLine($"Result: {createResponse.HttpStatusCode.ToString()}");
                   }
                   catch (Exception e)
                   {
                       Console.WriteLine("Caught exception when creating a bucket:");
                       Console.WriteLine(e.Message);
                   }
               }
   
               // Display a list of the account's S3 buckets.
               Console.WriteLine("\nGetting a list of your buckets...");
               var listResponse = await s3Client.ListBucketsAsync();
               Console.WriteLine($"Number of buckets: {listResponse.Buckets.Count}");
               foreach (S3Bucket b in listResponse.Buckets)
               {
                   Console.WriteLine(b.BucketName);
               }
               Console.WriteLine();
           }
   
           // 
           // Method to parse the command line.
           private static Boolean GetBucketName(string[] args, out String bucketName)
           {
               Boolean retval = false;
               bucketName = String.Empty;
               if (args.Length == 0)
               {
                   Console.WriteLine("\nNo arguments specified. Will simply list your Amazon S3 buckets." +
                     "\nIf you wish to create a bucket, supply a valid, globally unique bucket name.");
                   bucketName = String.Empty;
                   retval = false;
               }
               else if (args.Length == 1)
               {
                   bucketName = args[0];
                   retval = true;
               }
               else
               {
                   Console.WriteLine("\nToo many arguments specified." +
                     "\n\ndotnet_tutorials - A utility to list your Amazon S3 buckets and optionally create a new one." +
                     "\n\nUsage: S3CreateAndList [bucket_name]" +
                     "\n - bucket_name: A valid, globally unique bucket name." +
                     "\n - If bucket_name isn't supplied, this utility simply lists your buckets.");
                   Environment.Exit(1);
               }
               return retval;
           }
   
           //
           // Method to get SSO credentials from the information in the shared config file.
           static AWSCredentials LoadSsoCredentials(string profile)
           {
               var chain = new CredentialProfileStoreChain();
               if (!chain.TryGetAWSCredentials(profile, out var credentials))
                   throw new Exception($"Failed to find the {profile} profile");
               return credentials;
           }
       }
   
       // Class to read the caller's identity.
       public static class Extensions
       {
           public static async Task<string> GetCallerIdentityArn(this IAmazonSecurityTokenService stsClient)
           {
               var response = await stsClient.GetCallerIdentityAsync(new GetCallerIdentityRequest());
               return response.Arn;
           }
       }
   }
   ```

## 运行应用程序
<a name="s3-1-cross-run"></a>

1. 运行以下命令。

   ```
   dotnet run
   ```

1. 检查输出以查看您拥有的 Amazon S3 桶数（如果有）及其名称。

1. 为新 Amazon S3 桶选择名称。以“dotnet-quicktour-s3-1-cross-”为基础，并添加独特的内容，如 GUID 或您的名字等。请务必遵守存储桶命名规则，如 [Amazon S3 用户指南](https://docs.aws.amazon.com/AmazonS3/latest/userguide/)中的[存储桶命名规则](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html#bucketnamingrules)中所述。

1. 运行以下命令，将 *amzn-s3-demo-bucket* 替换为您选择的存储桶的名称。

   ```
   dotnet run amzn-s3-demo-bucket
   ```

1. 检查输出以查看创建的新存储桶。

## 清理
<a name="s3-1-cross-clean-up"></a>

执行本教程时，您创建了一些可选择在此时清理的资源。
+ 如果您不想保留应用程序在之前步骤中创建的桶，可以使用位于 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 的 Amazon S3 桶将其删除。
+ 如果您不想保留您的 .NET 项目，请从开发环境中删除 `S3CreateAndList` 文件夹。

## 后续工作
<a name="s3-1-cross-next"></a>

返回[快速指南菜单](quick-start.md)或直接转到[此快速指南的末尾](quick-start-next-steps.md)。

# 使用适用于 .NET 的 AWS SDK的基于 Windows 的简单应用程序
<a name="quick-start-s3-1-winvs"></a>

本教程在 Windows 上使用适用于 .NET 的 AWS SDK以及 Visual Studio 和 .NET Core。本教程向您展示如何使用开发工具包列出您拥有的 [Amazon S3 桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/)，并且可以选择创建新桶。

您将在 Windows 上使用 Visual Studio 和 .NET Core 完成本教程。有关配置开发环境的其它方法，请参阅[安装和配置工具链](net-dg-dev-env.md)。

**对于在 Windows 使用 Visual Studio 和 .NET Core 进行开发，需要：**
+ [Microsoft Visual Studio](https://visualstudio.microsoft.com/vs/)
+ Microsoft .NET Core 2.1、3.1 或更高版本

  默认情况下，安装最新版本的 Visual Studio 时通常会包含此功能。

**注意**  
在使用这些教程之前，必须先[安装工具链](net-dg-dev-env.md)并[配置开发工具包身份验证](creds-idc.md)。

## 步骤
<a name="s3-1-winvs-steps"></a>
+ [创建项目](#s3-1-winvs-create-project)
+ [创建代码](#s3-1-winvs-code)
+ [运行应用程序](#s3-1-winvs-run)
+ [清理](#s3-1-winvs-clean-up)

## 创建项目
<a name="s3-1-winvs-create-project"></a>

1. 打开 Visual Studio 并创建一个使用 C\$1 版本的**控制台应用程序**模板的新项目；也就是说，描述为：“...用于创建可以在 .NET 上运行的命令行应用程序...”。将项目命名为 `S3CreateAndList`。
**注意**  
请勿选择 .NET Framework 版本的控制台应用程序模板，或者，如果已选择，请务必使用 .NET Framework 4.7.2 或更高版本。

1. 加载了新创建的项目之后，选择**工具**、**NuGet Package Manager**、**管理解决方案的 NuGet 程序包**。

1. 浏览以下 NuGet 程序包并将其安装到项目中：`AWSSDK.S3`、`AWSSDK.SecurityToken`、`AWSSDK.SSO` 和 `AWSSDK.SSOOIDC`

   此过程从 [NuGet Package Manager](https://www.nuget.org/profiles/awsdotnet) 中安装 NuGet 程序包。由于我们确切地知道在本教程中所需的 NuGet 程序包，因此现在可以执行这一步。在开发过程中，知道所需的程序包也很常见。出现这种情况时，请按照类似的过程安装它们。

1. 如果您打算从命令符提示处运行应用程序，请立即打开命令提示符并导航到将包含构建输出的文件夹。这通常是类似于 `S3CreateAndList\S3CreateAndList\bin\Debug\net6.0` 的内容，但具体取决于您的环境。

## 创建代码
<a name="s3-1-winvs-code"></a>

1. 在 `S3CreateAndList` 项目中，查找并在 IDE 中打开 `Program.cs`。

1. 用以下代码替换内容并保存文件。

   ```
   using System;
   using System.Threading.Tasks;
   
   // NuGet packages: AWSSDK.S3, AWSSDK.SecurityToken, AWSSDK.SSO, AWSSDK.SSOOIDC
   using Amazon.Runtime;
   using Amazon.Runtime.CredentialManagement;
   using Amazon.S3;
   using Amazon.S3.Model;
   using Amazon.SecurityToken;
   using Amazon.SecurityToken.Model;
   
   namespace S3CreateAndList
   {
       class Program
       {
           // This code is part of the quick tour in the developer guide.
           // See https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/quick-start.html
           // for complete steps.
           // Requirements:
           // - An SSO profile in the SSO user's shared config file with sufficient privileges for
   		//   STS and S3 buckets.
           // - An active SSO Token.
           //    If an active SSO token isn't available, the SSO user should do the following:
           //    In a terminal, the SSO user must call "aws sso login".
   
           // Class members.
           static async Task Main(string[] args)
           {
               // Get SSO credentials from the information in the shared config file.
               // For this tutorial, the information is in the [default] profile.
               var ssoCreds = LoadSsoCredentials("default");
   
               // Display the caller's identity.
               var ssoProfileClient = new AmazonSecurityTokenServiceClient(ssoCreds);
               Console.WriteLine($"\nSSO Profile:\n {await ssoProfileClient.GetCallerIdentityArn()}");
   
               // Create the S3 client is by using the SSO credentials obtained earlier.
               var s3Client = new AmazonS3Client(ssoCreds);
   
               // Parse the command line arguments for the bucket name.
               if (GetBucketName(args, out String bucketName))
               {
                   // If a bucket name was supplied, create the bucket.
                   // Call the API method directly
                   try
                   {
                       Console.WriteLine($"\nCreating bucket {bucketName}...");
                       var createResponse = await s3Client.PutBucketAsync(bucketName);
                       Console.WriteLine($"Result: {createResponse.HttpStatusCode.ToString()}");
                   }
                   catch (Exception e)
                   {
                       Console.WriteLine("Caught exception when creating a bucket:");
                       Console.WriteLine(e.Message);
                   }
               }
   
               // Display a list of the account's S3 buckets.
               Console.WriteLine("\nGetting a list of your buckets...");
               var listResponse = await s3Client.ListBucketsAsync();
               Console.WriteLine($"Number of buckets: {listResponse.Buckets.Count}");
               foreach (S3Bucket b in listResponse.Buckets)
               {
                   Console.WriteLine(b.BucketName);
               }
               Console.WriteLine();
           }
   
           // 
           // Method to parse the command line.
           private static Boolean GetBucketName(string[] args, out String bucketName)
           {
               Boolean retval = false;
               bucketName = String.Empty;
               if (args.Length == 0)
               {
                   Console.WriteLine("\nNo arguments specified. Will simply list your Amazon S3 buckets." +
                     "\nIf you wish to create a bucket, supply a valid, globally unique bucket name.");
                   bucketName = String.Empty;
                   retval = false;
               }
               else if (args.Length == 1)
               {
                   bucketName = args[0];
                   retval = true;
               }
               else
               {
                   Console.WriteLine("\nToo many arguments specified." +
                     "\n\ndotnet_tutorials - A utility to list your Amazon S3 buckets and optionally create a new one." +
                     "\n\nUsage: S3CreateAndList [bucket_name]" +
                     "\n - bucket_name: A valid, globally unique bucket name." +
                     "\n - If bucket_name isn't supplied, this utility simply lists your buckets.");
                   Environment.Exit(1);
               }
               return retval;
           }
   
           //
           // Method to get SSO credentials from the information in the shared config file.
           static AWSCredentials LoadSsoCredentials(string profile)
           {
               var chain = new CredentialProfileStoreChain();
               if (!chain.TryGetAWSCredentials(profile, out var credentials))
                   throw new Exception($"Failed to find the {profile} profile");
               return credentials;
           }
       }
   
       // Class to read the caller's identity.
       public static class Extensions
       {
           public static async Task<string> GetCallerIdentityArn(this IAmazonSecurityTokenService stsClient)
           {
               var response = await stsClient.GetCallerIdentityAsync(new GetCallerIdentityRequest());
               return response.Arn;
           }
       }
   }
   ```

1. 构建应用程序。
**注意**  
如果您使用的是旧版 Visual Studio，则可能会遇到类似以下内容的构建错误：  
“Feature 'async main' is not available in C\$1 7.0. Please use language version 7.1 or greater.”  
如果您遇到此错误，请将项目设置为使用该语言的更高版本。这通常在项目属性**构建**、**高级**中完成。

## 运行应用程序
<a name="s3-1-winvs-run"></a>

1. 不带命令行参数运行应用程序。在命令提示符中（如果之前已打开）或从 IDE 执行此操作。

1. 检查输出以查看您拥有的 Amazon S3 桶数（如果有）及其名称。

1. 为新 Amazon S3 桶选择名称。以“dotnet-quicktour-s3-1-winvs-”为基础，并添加独特的内容，如 GUID 或您的名字等。请务必遵守存储桶命名规则，如 [Amazon S3 用户指南](https://docs.aws.amazon.com/AmazonS3/latest/userguide/)中的[存储桶命名规则](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html#bucketnamingrules)中所述。

1. 再次运行应用程序，这次提供存储桶名称。

   在命令行中，将以下命令中的 *amzn-s3-demo-bucket* 替换为您选择的存储桶的名称。

   ```
   S3CreateAndList amzn-s3-demo-bucket
   ```

   或者，如果您在 IDE 中运行应用程序，请转到**项目**、**S3CreateAndList 属性**、 **调试**，然后在此处输入桶名称。

1. 检查输出以查看创建的新存储桶。

## 清理
<a name="s3-1-winvs-clean-up"></a>

执行本教程时，您创建了一些可选择在此时清理的资源。
+ 如果您不想保留应用程序在之前步骤中创建的桶，可以使用位于 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 的 Amazon S3 桶将其删除。
+ 如果您不想保留您的 .NET 项目，请从开发环境中删除 `S3CreateAndList` 文件夹。

## 后续工作
<a name="s3-1-winvs-next"></a>

返回[快速指南菜单](quick-start.md)或直接转到[此快速指南的末尾](quick-start-next-steps.md)。

# 后续步骤
<a name="quick-start-next-steps"></a>

请务必清理您在完成这些教程时创建的所有遗留资源。这包括 AWS 资源或开发环境中的资源，例如文件和文件夹。

既然已经全面了解了适用于 .NET 的 AWS SDK，您可能想[启动项目](net-dg-start-new-project.md)。

# 启动新项目
<a name="net-dg-start-new-project"></a>

您可以使用多种技术来启动访问 AWS 服务的新项目。以下是一些此类技术：
+ 如果您不熟悉基于 AWS 的 .NET 开发，或者至少不熟悉适用于 .NET 的 AWS SDK，则可以在[快速了解](quick-start.md)中查看完整的示例。其中提供了对开发工具包的简单介绍。
+ 您可以使用 .NET CLI 启动基本项目。要查看此示例，请打开命令提示符或终端，创建文件夹或目录并导航到该文件夹或目录，然后输入以下内容。

  ```
  dotnet new console --name [SOME-NAME]
  ```

  已创建一个空项目，您可以向其中添加代码和 NuGet 程序包。有关更多信息，请参阅 [.NET Core 指南](https://learn.microsoft.com/en-us/dotnet/fundamentals/)。

  要查看项目模板列表，请使用以下命令：`dotnet new --list`
+ AWS Toolkit for Visual Studio 包括适用于各种 AWS 服务的 C\$1 项目模板。当您在 Visual Studio 中[安装工具包](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/setup.html)后，您可以在创建新项目时访问这些模板。

  要查看此内容，请转到[AWS Toolkit for Visual Studio用户指南](https://docs.aws.amazon.com/AWSToolkitVS/latest/UserGuide/)中的[使用 AWS 服务](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/working-with-services.html)。该部分中的几个示例创建新项目。
+ 如果您在 Windows 上使用 Visual Studio 进行开发，但没有使用AWS Toolkit for Visual Studio，请使用典型的方法来创建新项目。

  要查看示例，请打开 Visual Studio，然后选择**文件**、**新建**、**项目**。搜索“.net core”，然后选择 C\$1 版本的**控制台应用程序（.NET Core）**或 **WPF 应用程序（.NET Core）**模板。已创建一个空项目，您可以向其中添加代码和 NuGet 程序包。

您可以在[带有指导的代码示例高级库和框架](tutorials-examples.md)中找到一些有关如何使用 AWS 服务的示例。

**重要**  
如果您使用 AWS IAM Identity Center 进行身份验证，您的应用程序必须引用以下 NuGet 程序包，这样 SSO 解析才能生效：  
`AWSSDK.SSO`
`AWSSDK.SSOOIDC`
未能引用这些程序包将导致*运行时系统*异常。

# 配置 AWS 区域
<a name="net-dg-region-selection"></a>

使用 AWS 区域可以访问实际位于特定地理区域的 AWS 服务。它可用于保证冗余，并保证您的数据和应用程序接近您和用户访问它们的位置。

要查看当前各 AWS 服务所有支持的区域和端点列表，请参阅 *AWS 一般参考* 中的区域和端点。要查看现有区域端点的列表，请参阅 [AWS服务终端节点](https://docs.aws.amazon.com/general/latest/gr/rande.html)。要查看有关区域的详细信息，请参阅[指定您的账户可以使用哪些 AWS 区域](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-regions.html)。

您可以创建转到[特定区域](#per-client)的 AWS 服务客户端。您还可以为应用程序配置一个将用于[所有 AWS 服务客户端](#globally)的区域。接下来将解释这两种情况。

## 创建具有特定区域的服务客户端
<a name="per-client"></a>

您可以为应用程序中的任何 AWS 服务客户端指定区域。以此方式设置区域优先于该特定服务客户端的任何全局设置。

### 现有区域
<a name="w2aab9c21c11b5"></a>

此示例向您展示了如何在现有区域中实例化 [Amazon EC2 客户端](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/EC2/TEC2Client.html)。它使用已定义的 [RegionEndpoint](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TRegionEndpoint.html) 字段。

```
using (AmazonEC2Client ec2Client = new AmazonEC2Client(RegionEndpoint.USWest2))
{
  // Make a request to EC2 in the us-west-2 Region using ec2Client
}
```

### 使用 RegionEndpoint 类的新区域
<a name="w2aab9c21c11b7"></a>

此示例向您展示了如何使用 [RegionEndpoint.GetBySystemName](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/MRegionEndpointGetBySystemNameString.html) 构造新的区域端点。

```
var newRegion = RegionEndpoint.GetBySystemName("us-west-new");
using (var ec2Client = new AmazonEC2Client(newRegion))
{
  // Make a request to EC2 in the new Region using ec2Client
}
```

### 使用服务客户端配置类的新区域
<a name="w2aab9c21c11b9"></a>

此示例向您展示如何使用服务客户端配置类的 `ServiceURL` 属性来指定区域；在本例中是使用 [AmazonEC2Config](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/EC2/TEC2Config.html) 类。

即使区域端点未遵循正规区域端点模式，此技术仍适用。

```
var ec2ClientConfig = new AmazonEC2Config
{
    // Specify the endpoint explicitly
    ServiceURL = "https://ec2.us-west-new.amazonaws.com"
};

using (var ec2Client = new AmazonEC2Client(ec2ClientConfig))
{
  // Make a request to EC2 in the new Region using ec2Client
}
```

## 为所有服务客户端指定区域
<a name="globally"></a>

您可以通过多种方式为应用程序创建的所有 AWS 服务客户端指定区域。此区域用于不是通过特定区域创建的服务客户端。

适用于 .NET 的 AWS SDK按以下顺序查找区域值。

### 配置文件
<a name="w2aab9c21c15b7"></a>

在您的应用程序或软件开发工具包已加载的配置文件中进行设置。有关更多信息，请参阅 [凭证和配置文件解析](creds-assign.md)。

### 环境变量
<a name="w2aab9c21c15b9"></a>

在 `AWS_REGION` 环境变量中设置。

在 Linux 或 macOS 上：

```
export AWS_REGION='us-west-2'
```

在 Windows 上：

```
set AWS_REGION=us-west-2
```

**注意**  
如果您为整个系统设置此环境变量（使用 `export` 或 `setx`），则它会影响所有 SDK 和工具包，而不仅仅是适用于 .NET 的 AWS SDK。

### AWSConfigs 类
<a name="w2aab9c21c15c11"></a>

设置为 [AWSConfigs.AWSRegion](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html) 属性。

```
AWSConfigs.AWSRegion = "us-west-2";
using (var ec2Client = new AmazonEC2Client())
{
  // Make request to Amazon EC2 in us-west-2 Region using ec2Client
}
```

## 区域解析
<a name="net-dg-region-resolution"></a>

如果没有使用上述方法来指定 AWS 区域，则适用于 .NET 的 AWS SDK会尝试查找 AWS 服务客户端要运行的区域。

**区域解析顺序**

1. 应用程序配置文件，例如 `app.config` 和 `web.config`。

1. 环境变量（`AWS_REGION` 和 `AWS_DEFAULT_REGION`）。

1. 名称由 `AWSConfigs.AWSProfileName` 中的值指定的配置文件。

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

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

1. Amazon EC2 实例元数据（如果在 EC2 实例上运行）。

如果未找到区域，软件开发工具包会引发异常，指出 AWS 服务客户端没有配置区域。

## 有关中国（北京）区域的特殊信息
<a name="net-dg-region-cn-north-1"></a>

要使用中国 (北京) 区域中的服务，您必须拥有特定于中国 (北京) 区域的账户和凭证。其他 AWS 区域的账户和凭证不适用于中国（北京）区域。同样，中国（北京）区域的账户和凭证也不适用于其他 AWS 区域。有关可在中国（北京）区域使用的端点和协议的信息，请参阅[中国（北京）区域端点](https://docs.amazonaws.cn/en_us/aws/latest/userguide/endpoints-Beijing.html)。

## 有关新 AWS 服务的特殊信息
<a name="net-dg-region-new-services"></a>

新的 AWS 服务会首先在少数几个区域中推出，然后在其它区域中支持。在这些情况下，您无需安装最新的软件开发工具包来访问该服务的新区域。您可以按各个客户端或者按全球来指定新添加的区域，如之前所示。

# 通过 NuGet 安装 AWSSDK 程序包
<a name="net-dg-install-assemblies"></a>

[NuGet 是 .NET 平台的包管理系统。](https://www.nuget.org/)有了 NuGet，您可以将 [AWSSDK 程序包](https://www.nuget.org/profiles/awsdotnet)以及其它几个扩展安装到您的项目中。有关其它信息，请参阅 GitHub 网站上的 [aws/dotnet](https://github.com/aws/dotnet) 存储库。

NuGet 始终具备最新版本的 AWSSDK 程序包，以及之前的版本。NuGet 能够识别程序包之间的依赖关系并自动安装所有必需的程序包。

**警告**  
NuGet 程序包列表可能包括一个名为“AWSSDK”的程序包（没有附加标识符）。请勿安装此 NuGet 程序包；它是旧版，不应用于新项目。

通过 NuGet 安装的程序包与您的项目一起存储，而不是存储在中心位置。这使您可以安装特定于指定应用程序的程序集版本，而不会造成其他应用程序的兼容性问题。有关 NuGet 的更多信息，请参阅 [NuGet 文档](https://learn.microsoft.com/en-us/nuget/)。

**注意**  
如果您不能或不允许按项目下载和安装 NuGet 程序包，则可以获取 AWSSDK 程序集并将其存储在本地。  
如果这适用于您，并且您尚未获取 AWSSDK 程序集，请参阅[获取 AWSSDK 程序集](net-dg-obtain-assemblies.md)。要了解如何使用本地存储的程序集，请参阅[在没有 NuGet 的情况下安装 AWSSDK 程序集](net-dg-install-without-nuget.md)。

## 从命令行提示符处或终端使用 NuGet
<a name="package-install-nuget"></a>

1. 转到 [AWSSDK NuGet 程序包](https://www.nuget.org/profiles/awsdotnet)，并确定您在项目中需要哪些 NuGet 程序包；例如 **[AWSSDK.S3](https://www.nuget.org/packages/AWSSDK.S3/)**。

1. 从该程序包的网页复制 .NET CLI 命令，如以下示例所示。

   **`dotnet add package AWSSDK.S3 --version 3.3.110.19`**

1. 在项目的目录中运行该 .NET CLI 命令。NuGet 还会安装所有依赖项，例如 [AWSSDK.Core](https://www.nuget.org/packages/AWSSDK.Core)。

**注意**  
如果您只需要最新版本的 NuGet 程序包，则可以从命令中排除版本信息，如以下示例所示。  
**`dotnet add package AWSSDK.S3`**

## 从 Visual Studio Solution Explorer 中使用 NuGet
<a name="package-install-gui"></a>

1. 在 **Solution Explorer** 中，右键单击您的项目，然后从上下文菜单中选择 **Manage NuGet Packages**。

1. 在 **NuGet Package Manager (NuGet 软件包管理器)** 的左窗格中，选择 **Browse (浏览)**。然后，您可以使用搜索框搜索所要安装的软件包。NuGet 还会安装所有依赖项，例如 [AWSSDK.Core](https://www.nuget.org/packages/AWSSDK.Core)。

   下图显示了 **AWSSDK.S3** 程序包的安装。  
![\[在 NuGet 软件包管理器中显示的 AWSSDK.S3 软件包。\]](http://docs.aws.amazon.com/zh_cn/sdk-for-net/v3/developer-guide/images/nuget-install-vs-dlg.png)

## 从 Package Manager Console 使用 NuGet
<a name="package-install-cmd"></a>

从 Visual Studio **工具**菜单，依次选择 **NuGet Package Manager** 和 **Package Manager Console**。

您可以从 Package Manager Console，使用 **`Install-Package`** 命令安装所需的 AWSSDK 程序包。例如，要安装 [AWSSDK.S3](https://www.nuget.org/packages/AWSSDK.S3)，请使用以下命令。

```
PM> Install-Package AWSSDK.S3
```

NuGet 还会安装所有依赖项，例如 [AWSSDK.Core](https://www.nuget.org/packages/AWSSDK.Core)。

如果您需要安装程序包的早期版本，请使用 `-Version` 选项并指定所需的程序包版本，如以下示例所示。

```
PM> Install-Package AWSSDK.S3 -Version 3.3.106.6
```

有关 Package Manager Console 命令的更多信息，请参阅微软 [NuGet 文档](https://learn.microsoft.com/en-us/nuget/)中的 [PowerShell 参考](https://learn.microsoft.com/en-us/nuget/reference/powershell-reference)。

# 在没有 NuGet 的情况下安装 AWSSDK 程序集
<a name="net-dg-install-without-nuget"></a>

本主题介绍如何使用您在本地获取并存储的 AWSSDK 程序集，如[获取 AWSSDK 程序集](net-dg-obtain-assemblies.md)中所述。这**不是**处理软件开发工具包参考的推荐方法，但在某些环境中却是必需的。

**注意**  
处理软件开发工具包参考的推荐方法是仅下载并安装每个项目所需的 NuGet 程序包。[通过 NuGet 安装 AWSSDK 程序包](net-dg-install-assemblies.md)中介绍了这种方法。

**安装 AWSSDK 程序集**

1. 在项目区域中为所需的 AWSSDK 程序集创建一个文件夹。举个例子，您可以调用这个文件夹 `AwsAssemblies`。

1. 如果您尚未这样做，请[获取 AWSSDK 程序集](net-dg-obtain-assemblies.md)，它将程序集放在某个本地下载或安装文件夹中。将所需程序集的 DLL 文件从该下载文件夹复制到您的项目中（在我们的示例中为 `AwsAssemblies` 文件夹）。

   还请务必复制所有依赖关系。您可以在 [GitHub](https://github.com/aws/aws-sdk-net/blob/aws-sdk-net-v3.7/generator/ServiceModels/_sdk-versions.json) 网站上找到有关依赖关系的信息。

1. 请按如下方式引用所需的程序集。

------
#### [ Cross-platform development ]

   1. 打开项目的 `.csproj` 文件并添加一个 `<ItemGroup>` 元素。

   1. 在 `<ItemGroup>` 元素中，为每个必需的程序集添加一个具有 `Include` 属性的 `<Reference>` 元素。

      例如，对于 Amazon S3，您可以在项目 `.csproj` 文件中添加以下几行。

      **在 Linux 和 macOS 上：**

      ```
      <ItemGroup>
        <Reference Include="./AwsAssemblies/AWSSDK.Core.dll" />
        <Reference Include="./AwsAssemblies/AWSSDK.S3.dll" />
      </ItemGroup>
      ```

      **在 Windows 上：**

      ```
      <ItemGroup>
        <Reference Include="AwsAssemblies\AWSSDK.Core.dll" />
        <Reference Include="AwsAssemblies\AWSSDK.S3.dll" />
      </ItemGroup>
      ```

   1. 保存项目的 `.csproj` 文件。

------
#### [ Windows with Visual Studio and .NET Core ]

   1. 在 Visual Studio 中，加载您的项目并打开**项目**、**添加引用**。

   1. 选择对话框底部的**浏览**按钮。导航到项目的文件夹和将所需的 DLL 文件复制到的子文件夹（例如 `AwsAssemblies`）。

   1. 选择所有 DLL 文件，选择**添加**，然后选择**确定**。

   1. 保存您的项目。

------

# 凭证和配置文件解析
<a name="creds-assign"></a>

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

**凭证搜索顺序**

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

1. 一个凭证配置文件，其名称由 [AWSConfigs.AWSProfileName](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html#properties) 中的值指定。

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

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

1. 根据 `AWS_ACCESS_KEY_ID`、`AWS_SECRET_ACCESS_KEY` 和 `AWS_SESSION_TOKEN` 环境变量 (如果这些变量都不为空) 创建的 [SessionAWSCredentials](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TSessionAWSCredentials.html)。

1.  根据 `AWS_ACCESS_KEY_ID` 和 `AWS_SECRET_ACCESS_KEY` 环境变量 (如果这两个变量不为空) 创建的 [BasicAWSCredentials](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TBasicAWSCredentials.html)。

1. [容器凭证提供程序](https://docs.aws.amazon.com/sdkref/latest/guide/feature-container-credentials.html)。

1. Amazon EC2 实例元数据。

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

## 配置文件解析
<a name="net-dg-config-creds-profile-resolution"></a>

凭证有两种不同的存储机制，请务必了解如何配置适用于 .NET 的 AWS SDK以使用它们。[AWSConfigs.AWSProfilesLocation](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html) 属性控制适用于 .NET 的 AWS SDK如何查找凭证配置文件。


****  

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

## 使用联合用户账户凭证
<a name="net-dg-config-creds-saml"></a>

对于采用适用于 .NET 的 AWS SDK（[AWSSDK.Core](https://www.nuget.org/packages/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文档](https://docs.aws.amazon.com/powershell/latest/userguide/saml-pst.html)。

设置角色配置文件后，请在应用程序中引用该配置文件。有多种方法可以做到这一点，其中一种是像处理其他凭证配置文件一样使用 [AWSConfigs.AWSProfileName](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html) 属性。

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

## 指定角色或临时凭证
<a name="net-dg-config-creds-assign-role"></a>

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

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

## 使用代理凭证
<a name="net-dg-config-creds-proxy"></a>

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

例如，对于 [Amazon S3](https://docs.aws.amazon.com/sdkfornet/v3/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`，但这两个属性已被弃用。

# 有关用户和角色的其它信息
<a name="net-dg-users-roles"></a>

要在 AWS 上进行 .NET 开发或在 AWS 上运行 .NET 应用程序，您需要具备适合这些任务的用户、权限集和服务角色的组合。

您创建的特定用户、权限集和服务角色以及使用它们的方式，将取决于您应用程序的要求。下面的一些附加信息介绍了可能使用它们的原因以及如何创建它们。

## 用户和权限集
<a name="net-dg-users-roles-user"></a>

尽管可以使用具有长期凭证的 IAM 用户账户来访问 AWS 服务，但这已不再是最佳实践，应予以避免。即使在开发过程中，最佳做法也是在 AWS IAM Identity Center 中创建用户和权限集，并使用身份源提供的临时凭证。

对于开发，您可以使用自己创建的或在[配置 SDK 身份验证](creds-idc.md)中提供的用户。如果您拥有适当的 AWS 管理控制台 权限，还可以为该用户创建具有最低权限的不同权限集，或者创建专用于开发项目的新用户，同时提供具有最低权限的权限集。您选择的行动方案（如果有）取决于您的情况。

有关这些用户和权限集以及如何创建它们的更多信息，请参阅《AWS 开发工具包和工具参考指南》**中的[身份验证和访问](https://docs.aws.amazon.com/sdkref/latest/guide/access.html)以及《AWS IAM Identity Center 用户指南》**中的[入门](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html)。

## 服务角色
<a name="net-dg-users-roles-service-role"></a>

您可以设置 AWS 服务角色来代表用户访问 AWS 服务。如果有多人远程运行您的应用程序，则这种访问方式是合适的；例如，在您为此目的创建的 Amazon EC2 实例上。

创建服务角色的过程因情况而异，但基本上如下所示。

1. 登录 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 选择 **角色**，然后选择 **创建角色**。

1. 选择 **AWS 服务**，找到并选择 **EC2**（例如），然后选择 **EC2** 使用案例（例如）。

1. 选择**下一步: 权限**，然后为您的应用程序将使用的 AWS 服务选择[适当的策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)。
**警告**  
***请勿***选择 **AdministratorAccess** 策略，因为该策略允许对您账户中的几乎所有内容具有读写权限。

1. 选择**下一步: 标签**，然后输入所需的任何标签。

   您可以在 [IAM 用户指南](https://docs.aws.amazon.com/IAM/latest/UserGuide/)中的[使用 AWS 资源标签控制访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html)中找到标签相关的信息。

1. 选择**下一步: 查看**，并提供**角色名称**和**角色描述**。然后选择**创建角色**。

在 [IAM 用户指南](https://docs.aws.amazon.com/IAM/latest/UserGuide/)中的[身份（用户、用户组和角色）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html)中，您可以找到有关 IAM 角色的高级信息。在 [IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)主题中查找有关角色的详细信息。

**有关角色的其它信息**
+ 对于 Amazon Elastic Container Service (Amazon ECS)，使用[适用于任务的 IAM 角色](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)。
+ 对于在 Amazon EC2 实例上运行的应用程序，使用 [IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)。

# 适用于 .NET 的 AWS SDK项目的高级配置
<a name="net-dg-advanced-config"></a>

本部分中的主题包含有关您可能感兴趣的其它配置任务和方法的信息。

**Topics**
+ [AWSSDK. 扩展。 NETCore.Setup 和 IConfiguration](net-dg-config-netcore.md)
+ [

# 配置其他应用程序参数
](net-dg-config-other.md)
+ [

# 适用于 .NET 的 AWS SDK的配置文件参考
](net-dg-config-ref.md)

# 使用 AWSSDK .Extions。 NETCore.Setup 和界面 IConfiguration
<a name="net-dg-config-netcore"></a>

（本主题之前的标题是 “ 适用于 .NET 的 AWS SDK 使用.NET 核心配置”）

.NET Core 中最大的改变之一是删除了以前在 .NET Framework 和 ASP.NET 应用程序中使用的 `ConfigurationManager` 以及标准 `app.config` 和 `web.config` 文件。

.NET Core 中的配置基于配置提供商建立的键/值对。配置提供商将配置数据从各种配置源读取为键/值对，包括命令行参数、目录文件、环境变量和设置文件。

**注意**  
有关更多信息，请参阅 [ASP.NET Core 中的配置](https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration)。

为了便于在.NET Core 中 适用于 .NET 的 AWS SDK 使用，你可以使用.E [AWSSDKxtensions。 NETCore.安装](https://www.nuget.org/packages/AWSSDK.Extensions.NETCore.Setup/) NuGet 包。与许多.NET Core 库一样，它向`IConfiguration`接口添加了扩展方法，以实现无缝 AWS 配置。

该软件包的源代码 GitHub 位于[https://github.com/aws/aws-sdk-net/tree/aws-sdk-net-v3.7/extensions/src/AWSSDK.Extensions.NETCore.Setup](https://github.com/aws/aws-sdk-net/tree/aws-sdk-net-v3.7/extensions/src/AWSSDK.Extensions.NETCore.Setup)。

## 使用 AWSSDK .Extions。 NETCore.Setup
<a name="net-core-configuration-builder"></a>

假设你创建了一个 ASP.NET Core Model-View-Controller (MVC) 应用程序，可以使用 Visual Studio 中的 **ASP.NET Core Web 应用程序**模板或在.NET Core CLI `dotnet new mvc ...` 中运行来完成。创建此类应用程序时，`Startup.cs` 的构造函数通过从配置提供商读取各种输入源来处理配置，例如读取 `appsettings.json`。

```
public Startup(IConfiguration configuration)
{
    Configuration = configuration;
}
```

要使用`Configuration`对象获取*AWS*选项，请先添加`AWSSDK.Extensions.NETCore.Setup` NuGet 软件包。然后，将选项添加到下面所述的配置文件中。

请注意，添加到您项目中的其中一个文件是 `appsettings.Development.json`。这就代表 `EnvironmentName` 设置为 **Development**。在开发过程中，将配置放入此文件中，该文件只能在本地测试期间读取。当您部署已`EnvironmentName`设置为**生产**的 Amazon EC2 实例时，该文件将被忽略，并回退到为 Amazon EC2 实例配置的 IAM 证书和区域。 适用于 .NET 的 AWS SDK 

以下配置设置显示您可以添加到您项目的 `appsettings.Development.json` 文件中用于提供 AWS 设置的值的示例。

```
{
  "AWS": {
    "Profile": "local-test-profile",
    "Region": "us-west-2"
  },
  "SupportEmail": "TechSupport@example.com"
}
```

要访问 *CSHTML* 文件中的设置，请使用 `Configuration` 指令：

```
@using Microsoft.Extensions.Configuration
@inject IConfiguration Configuration

<h1>Contact</h1>

<p>
    <strong>Support:</strong> <a href='mailto:@Configuration["SupportEmail"]'>@Configuration["SupportEmail"]</a><br />
</p>
```

要从代码访问文件中设置的 AWS 选项，请调用添加到的`GetAWSOptions`扩展方法`IConfiguration`。

要从这些选项构造服务客户端，请调用 `CreateServiceClient`。以下示例代码说明了如何创建 Amazon S3 服务客户端。（请务必将 [AWSSDK.S3](https://www.nuget.org/packages/AWSSDK.S3) NuGet 包添加到您的项目中。）

```
var options = Configuration.GetAWSOptions();
IAmazonS3 client = options.CreateServiceClient<IAmazonS3>();
```

您还可以使用 `appsettings.Development.json` 文件中的多个条目创建具有不兼容设置的多个服务客户端，如以下示例所示，其中 `service1` 的配置包括 `us-west-2` 区域，`service2` 的配置包括特殊端点 *URL*。

```
{
  "service1": {
    "Profile": "default",
    "Region": "us-west-2"
  },
  "service2": {
    "Profile": "default",
    "ServiceURL": "URL"
  }
}
```

然后，您可以使用 JSON 文件中的条目获取特定服务的选项。例如，要获取 `service1` 的设置，请使用以下项目。

```
var options = Configuration.GetAWSOptions("service1");
```

### appsettings 文件中允许的值
<a name="net-core-appsettings-values"></a>

以下应用程序配置值可以在 `appsettings.Development.json` 文件中设置。字段名必须使用所示的大小写。有关这些设置的详细信息，请参阅 `[AWS.Runtime.ClientConfig](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TClientConfig.html)` 类。
+ Region
+ 配置文件
+ ProfilesLocation
+ SignatureVersion
+ RegionEndpoint
+ UseHttp
+ ServiceURL
+ AuthenticationRegion
+ AuthenticationServiceName
+ MaxErrorRetry
+ LogResponse
+ BufferSize
+ ProgressUpdateInterval
+ ResignRetries
+ AllowAutoRedirect
+ LogMetrics
+ DisableLogging
+ UseDualstackEndpoint

## ASP.NET Core 依赖关系注入
<a name="net-core-dependency-injection"></a>

*AWSSDK.Extensions NETCore.Setup* NuGet 包还与 ASP.NET Core 中的新依赖注入系统集成。应用程序的 `Startup` 类中的 `ConfigureServices` 方法是添加 MVC 服务的位置。如果应用程序正在使用实体框架，则这也是进行初始化的位置。

```
public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    services.AddMvc();
}
```

**注意**  
有关 .NET Core 中依赖关系注入的背景信息在 [.NET Core 文档网站](https://learn.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection)上提供。

该`AWSSDK.Extensions.NETCore.Setup` NuGet 软件包添加了新的扩展方法`IServiceCollection`，您可以使用这些方法向依赖注入中添加 AWS 服务。以下代码向您展示了如何添加从中读取的 AWS 选项，`IConfiguration`以便将 Amazon S3 和 DynamoDB 添加到服务列表中。（请务必将 [AWSSDK.S3 和AWSSDK.](https://www.nuget.org/packages/AWSSDK.S3) [Dynamo DBv2](https://www.nuget.org/packages/AWSSDK.DynamoDBv2) NuGet 包添加到您的项目中。）

```
public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    services.AddMvc();

    services.AddDefaultAWSOptions(Configuration.GetAWSOptions());
    services.AddAWSService<IAmazonS3>();
    services.AddAWSService<IAmazonDynamoDB>();
}
```

现在，如果您的 MVC 控制器使用 `IAmazonS3` 或 `IAmazonDynamoDB` 作为其构造函数中的参数，则依赖关系注入系统会传入这些服务。

```
public class HomeController : Controller
{
    IAmazonS3 S3Client { get; set; }

    public HomeController(IAmazonS3 s3Client)
    {
        this.S3Client = s3Client;
    }

    ...

}
```

# 配置其他应用程序参数
<a name="net-dg-config-other"></a>

**注意**  
本主题中的信息特定于基于 .NET Framework 的项目。默认情况下，`App.config` 和 `Web.config` 文件不存在于基于 .NET Core 的项目中。

## 打开查看 .NET Framework 内容
<a name="w2aab9c31b9b5b1"></a>

可配置多种应用程序参数：
+  `AWSLogging` 
+  `AWSLogMetrics` 
+  `AWSRegion` 
+  `AWSResponseLogging` 
+  `AWS.DynamoDBContext.TableNamePrefix` 
+  `AWS.S3.UseSignatureVersion4` 
+  `AWSEndpointDefinition` 
+  [AWS 服务生成的终端节点](#config-setting-service-generated-awsendpointdefinition) 

这些参数可以在应用程序的 `App.config` 或 `Web.config` 文件中配置。尽管您也可以使用 适用于 .NET 的 AWS SDK API 对其进行配置，但我们建议您使用应用程序的`.config`文件。此处介绍了这两种方法。

有关本主题后文中所述的使用 `<aws>` 元素的更多信息，请参阅[适用于 .NET 的 AWS SDK配置文件参考](net-dg-config-ref.md)。

### AWSLogging
<a name="config-setting-awslogging"></a>

配置开发工具包应如何记录事件 (如果记录)。例如，建议的方法是使用 `<logging>` 元素，该元素是 `<aws>` 元素的子元素：

```
<aws>
  <logging logTo="Log4Net"/>
</aws>
```

或者：

```
<add key="AWSLogging" value="log4net"/>
```

可能的值包括：

** `None` **  
禁用 事件日志记录。这是默认值。

** `log4net` **  
使用 log4net 记录。

** `SystemDiagnostics` **  
使用 `System.Diagnostics` 类记录。

您可以为 `logTo` 属性设置多个值，以逗号分隔。以下示例在 `.config` 文件中设置 `log4net` 和 `System.Diagnostics` 日志记录：

```
<logging logTo="Log4Net, SystemDiagnostics"/>
```

或者：

```
<add key="AWSLogging" value="log4net, SystemDiagnostics"/>
```

或者，使用 适用于 .NET 的 AWS SDK API 合并[LoggingOptions](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TLoggingOptions.html)枚举值并设置 [AWSConfigs.Logging](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html) 属性：

```
AWSConfigs.Logging = LoggingOptions.Log4Net | LoggingOptions.SystemDiagnostics;
```

对此设置的更改仅对新的 AWS 客户端实例生效。

### AWSLog指标
<a name="config-setting-awslogmetrics"></a>

指定开发工具包是否应记录性能指标。要在 `.config` 文件中设置指标日志记录配置，请在 `<logging>` 元素中设置 `logMetrics` 属性值，该元素是 `<aws>` 元素的子元素：

```
<aws>
  <logging logMetrics="true"/>
</aws>
```

此外，在 `<appSettings>` 部分中设置 `AWSLogMetrics` 关键字：

```
<add key="AWSLogMetrics" value="true">
```

或者，要使用 适用于 .NET 的 AWS SDK API 设置指标日志记录，请设置[AWSConfigs。 LogMetrics](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html)财产:

```
AWSConfigs.LogMetrics = true;
```

对于所有客户端/配置，此设置用于配置默认 `LogMetrics` 属性。对此设置的更改仅对新的 AWS 客户端实例生效。

### AWSRegion
<a name="config-setting-awsregion"></a>

为未明确指定 AWS 区域的客户端配置默认区域。要在 `.config` 文件中设置区域，建议的方法是在 `aws` 元素中设置 `region` 属性值：

```
<aws region="us-west-2"/>
```

此外，在 `<appSettings>` 部分中设置 *AWSRegion* 关键字：

```
<add key="AWSRegion" value="us-west-2"/>
```

或者，要使用 适用于 .NET 的 AWS SDK API 设置区域，请设置[AWSConfigs。 AWSRegion](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html)财产:

```
AWSConfigs.AWSRegion = "us-west-2";
```

有关为特定区域创建 AWS 客户端的更多信息，请参阅[AWS 区域选择](net-dg-region-selection.md)。对此设置的更改仅对新的 AWS 客户端实例生效。

### AWSResponse记录日志
<a name="config-setting-awsresponselogging"></a>

配置开发工具包在什么情况下记录服务响应。可能的值包括：

** `Never` **  
从不记录服务响应。这是默认值。

** `Always` **  
始终记录服务响应。

** `OnError` **  
仅在出错时记录服务响应。

要在 `.config` 文件中设置服务日志记录配置，推荐的方法是在 `<logging>` 元素中设置 `logResponses` 属性值，该元素是 `<aws>` 元素的子元素：

```
<aws>
  <logging logResponses="OnError"/>
</aws>
```

或者，在以下`<appSettings>`部分中*AWSResponse设置 Logging* 密钥：

```
<add key="AWSResponseLogging" value="OnError"/>
```

或者，要使用 适用于 .NET 的 AWS SDK API 设置服务日志记录，请设置[AWSConfigs。 ResponseLogging](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html)将属性设置为[ResponseLoggingOption](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TResponseLoggingOption.html)枚举的其中一个值：

```
AWSConfigs.ResponseLogging = ResponseLoggingOption.OnError;
```

对此设置的更改会立即生效。

### `AWS.DynamoDBContext.TableNamePrefix`
<a name="config-setting-aws-dynamodbcontext-tablenameprefix"></a>

配置 `TableNamePrefix` 将使用的默认 `DynamoDBContext` (在未手动配置的情况下)。

要在 `.config` 文件中设置表名前缀，建议的方法是在 `<dynamoDBContext>` 元素中设置 `tableNamePrefix` 属性值，该元素是 `<dynamoDB>` 元素 (这又是 `<aws>` 的子元素) 的子元素：

```
<dynamoDBContext tableNamePrefix="Test-"/>
```

此外，在 `<appSettings>` 部分中设置 `AWS.DynamoDBContext.TableNamePrefix` 关键字：

```
<add key="AWS.DynamoDBContext.TableNamePrefix" value="Test-"/>
```

或者，要使用 适用于 .NET 的 AWS SDK API 设置表名前缀，请设置 [AWSConfigs.Dynamo 属性 DBContext TableNamePrefix](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html)：

```
AWSConfigs.DynamoDBContextTableNamePrefix = "Test-";
```

对此设置的更改仅在新构建的 `DynamoDBContextConfig` 和 `DynamoDBContext` 实例中生效。

### `AWS.S3.UseSignatureVersion4`
<a name="config-setting-aws-s3-usesignatureversion4"></a>

配置 Amazon S3 客户端是否应使用签名版本 4 对请求签名。

要在 `.config` 文件中为 Amazon S3 设置签名版本 4 的签名，推荐的方法是在 `<s3>` 元素中设置 `useSignatureVersion4` 属性，该元素是 `<aws>` 元素的子元素：

```
<aws>
  <s3 useSignatureVersion4="true"/>
</aws>
```

此外，在 `<appSettings>` 部分中将 `AWS.S3.UseSignatureVersion4` 密钥设置为 `true`：

```
<add key="AWS.S3.UseSignatureVersion4" value="true"/>
```

或者，要使用 适用于 .NET 的 AWS SDK API 设置签名版本 4 签名，请将 [AWSConfigs.S3 UseSignatureVersion 4](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html) 属性设置为：`true`

```
AWSConfigs.S3UseSignatureVersion4 = true;
```

默认情况下，此设置是 `false`，但在某些情况下或者在某些区域中，默认会使用签名版本 4。当设置为 `true` 时，签名版本 4 将用于所有请求。对此设置的更改仅对新 Amazon S3 客户端实例生效。

### AWSEndpoint定义
<a name="config-setting-awsendpointdefinition"></a>

配置开发工具包是否应使用自定义配置文件，该文件定义区域和终端节点。

要在 `.config` 文件中设置终端节点定义文件，建议在 `<aws>` 元素中设置 `endpointDefinition` 属性值。

```
<aws endpointDefinition="c:\config\endpoints.json"/>
```

或者，你可以在以下`<appSettings>`部分中设置*AWSEndpoint定义*密钥：

```
<add key="AWSEndpointDefinition" value="c:\config\endpoints.json"/>
```

或者，要使用 适用于 .NET 的 AWS SDK API 设置端点定义文件，请设置[AWSConfigs。 EndpointDefinition](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html)财产:

```
AWSConfigs.EndpointDefinition = @"c:\config\endpoints.json";
```

如果没有提供文件名，则不使用自定义配置文件。对此设置的更改仅对新的 AWS 客户端实例生效。endpoint.json 文件可从[https://github.com/aws/aws-sdk-net/blob/aws-sdk-net-v3.7/sdk/src/Core/endpoints.json](https://github.com/aws/aws-sdk-net/blob/aws-sdk-net-v3.7/sdk/src/Core/endpoints.json)中获得。

### AWS 服务生成的终端节点
<a name="config-setting-service-generated-awsendpointdefinition"></a>

有些 AWS 服务会生成自己的终端节点，而不是使用区域终端节点。这些服务的客户端使用特定于该服务的服务 URL 以及您的资源。这些服务的两个例子是 Amazon CloudSearch 和 AWS IoT。以下示例演示如何获取这些服务的终端节点。

#### Amazon CloudSearch 终端节点示例
<a name="cs-endpoints-example"></a>

亚马逊 CloudSearch 客户端用于访问亚马逊 CloudSearch 配置服务。您可以使用 Amazon CloudSearch 配置服务创建、配置和管理搜索域。要创建搜索域，请创建一个[CreateDomainRequest](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/CloudSearch/TCreateDomainRequest.html)对象并提供该`DomainName`属性。使用请求[AmazonCloudSearchClient](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/CloudSearch/TCloudSearchClient.html)对象创建对象。调用 [CreateDomain](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/CloudSearch/MCloudSearchCreateDomainCreateDomainRequest.html) 方法。调用返回的[CreateDomainResponse](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/CloudSearch/TCreateDomainResponse.html)对象包含一个同时具有`DocService`和`SearchService`端点的`DomainStatus`属性。创建一个[AmazonCloudSearchDomainConfig](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/CloudSearchDomain/TCloudSearchDomainConfig.html)对象并使用它来初始化该[AmazonCloudSearchDomainClient](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/CloudSearchDomain/TCloudSearchDomainClient.html)类的`SearchService`实例`DocService`和实例。

```
// Create domain and retrieve DocService and SearchService endpoints
DomainStatus domainStatus;
using (var searchClient = new AmazonCloudSearchClient())
{
    var request = new CreateDomainRequest
    {
        DomainName = "testdomain"
    };
    domainStatus = searchClient.CreateDomain(request).DomainStatus;
    Console.WriteLine(domainStatus.DomainName + " created");
}

// Test the DocService endpoint
var docServiceConfig = new AmazonCloudSearchDomainConfig
{
    ServiceURL = "https://" + domainStatus.DocService.Endpoint
};
using (var domainDocService = new AmazonCloudSearchDomainClient(docServiceConfig))
{
    Console.WriteLine("Amazon CloudSearchDomain DocService client instantiated using the DocService endpoint");
    Console.WriteLine("DocService endpoint = " + domainStatus.DocService.Endpoint);

    using (var docStream = new FileStream(@"C:\doc_source\XMLFile4.xml", FileMode.Open))
    {
        var upload = new UploadDocumentsRequest
        {
            ContentType = ContentType.ApplicationXml,
            Documents = docStream
        };
        domainDocService.UploadDocuments(upload);
    }
}

// Test the SearchService endpoint
var searchServiceConfig = new AmazonCloudSearchDomainConfig
{
    ServiceURL = "https://" + domainStatus.SearchService.Endpoint
};
using (var domainSearchService = new AmazonCloudSearchDomainClient(searchServiceConfig))
{
    Console.WriteLine("Amazon CloudSearchDomain SearchService client instantiated using the SearchService endpoint");
    Console.WriteLine("SearchService endpoint = " + domainStatus.SearchService.Endpoint);

    var searchReq = new SearchRequest
    {
        Query = "Gambardella",
        Sort = "_score desc",
        QueryParser = QueryParser.Simple
    };
    var searchResp = domainSearchService.Search(searchReq);
}
```

#### AWS IoT 端点示例
<a name="iotlong-endpoints-example"></a>

要获取的终端节点 AWS IoT，请创建一个[AmazonIoTClient](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/IoT/TIoTClient.html)对象并调用[DescribeEndPoint](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/IoT/MIoTDescribeEndpointDescribeEndpointRequest.html)方法。返回的[DescribeEndPointResponse](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/IoT/TDescribeEndpointResponse.html)对象包含`EndpointAddress`。创建[AmazonIotDataConfig](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/IotData/TIotDataConfig.html)对象，设置`ServiceURL`属性，然后使用该对象实例化该类。[AmazonIotDataClient](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/IotData/TIotDataClient.html)

```
string iotEndpointAddress;
using (var iotClient = new AmazonIoTClient())
{
    var endPointResponse = iotClient.DescribeEndpoint();
    iotEndpointAddress = endPointResponse.EndpointAddress;
}

var ioTdocServiceConfig = new AmazonIotDataConfig
{
    ServiceURL = "https://" + iotEndpointAddress
};
using (var dataClient = new AmazonIotDataClient(ioTdocServiceConfig))
{
    Console.WriteLine("AWS IoTData client instantiated using the endpoint from the IotClient");
}
```

# 适用于 .NET 的 AWS SDK的配置文件参考
<a name="net-dg-config-ref"></a>

**注意**  
本主题中的信息特定于基于 .NET Framework 的项目。默认情况下，`App.config` 和 `Web.config` 文件不存在于基于 .NET Core 的项目中。

## 打开查看 .NET Framework 内容
<a name="w2aab9c31c11b5b1"></a>

您可以使用 .NET 项目的 `App.config` 或 `Web.config` 文件指定 AWS 设置（如 AWS 凭证、日志记录选项、AWS 服务端点和 AWS 区域）以及某些 AWS 服务设置（例如 Amazon DynamoDB、Amazon EC2 和 Amazon S3）。以下信息介绍了如何正确设置 `App.config` 或 `Web.config` 文件的格式，以指定这些设置类型。

**注意**  
虽然您可以继续在 `App.config` 或 `Web.config` 文件中使用 `<appSettings>` 元素来指定 AWS 设置，但我们建议您使用 `<configSections>` 和 `<aws>` 元素，如本主题后面所述。有关 `<appSettings>` 元素的更多信息，请参阅[配置`<appSettings>`应用程序](net-dg-config.md)中的 适用于 .NET 的 AWS SDK 元素示例。

**注意**  
虽然您可以继续使用代码文件中的以下 [https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html) 类属性来指定 AWS 设置，但以下属性已被弃用，并且在将来版本中不受支持：  
 `DynamoDBContextTableNamePrefix` 
 `EC2UseSignatureVersion4` 
 `LoggingOptions` 
 `LogMetrics` 
 `ResponseLoggingOption` 
 `S3UseSignatureVersion4` 
通常，我们建议不要使用代码文件中的 `AWSConfigs` 类属性来指定 AWS 设置，而应使用 `<aws>` 或 `Web.config` 文件中的 `<configSections>` 和 `App.config` 元素来指定 AWS 设置，如本主题后面所述。有关上述属性的更多信息，请参阅[配置适用于 .NET 的 AWS SDK应用程序](net-dg-config.md)中的 `AWSConfigs` 代码示例。

**Topics**
+ [

### 声明 AWS 设置部分
](#net-dg-config-ref-declaring)
+ [

### 允许的元素
](#net-dg-config-ref-elements)
+ [

### 元素参考
](#net-dg-config-ref-elements-ref)

### 声明 AWS 设置部分
<a name="net-dg-config-ref-declaring"></a>

您可以通过 `<aws>` 元素指定 `App.config` 或 `Web.config` 文件中的 AWS 设置。在开始使用 `<aws>` 元素之前，您必须先创建一个 `<section>` 元素 (`<configSections>` 元素的子元素) 并将其 `name` 属性和 `aws` 属性分别设置为 `type` 和 `Amazon.AWSSection, AWSSDK.Core` (如以下示例所示)：

```
<?xml version="1.0"?>
<configuration>
  ...
  <configSections>
    <section name="aws" type="Amazon.AWSSection, AWSSDK.Core"/>
  </configSections>
  <aws>
    <!-- Add your desired AWS settings declarations here. -->
  </aws>
  ...
</configuration>
```

Visual Studio 编辑器提供针对 `<aws>` 元素或其子元素的自动代码完成 (IntelliSense)。

调用 `<aws>` 方法可帮助您创建 `Amazon.AWSConfigs.GenerateConfigTemplate` 元素格式正确的版本。这将以美观打印字符串形式输出 `<aws>` 元素的规范版本，可调整该字符串以满足您的需求。以下部分介绍 `<aws>` 元素的属性和子元素。

### 允许的元素
<a name="net-dg-config-ref-elements"></a>

以下是 AWS 设置部分中允许的元素之间的逻辑关系列表。要生成此列表的最新版本，您可以调用 `Amazon.AWSConfigs.GenerateConfigTemplate` 方法，这将以字符串形式输出 `<aws>` 元素的规范版本，可调整该字符串以满足您的需求。

```
<aws
  endpointDefinition="string value"
  region="string value"
  profileName="string value"
  profilesLocation="string value">
  <logging
    logTo="None, Log4Net, SystemDiagnostics"
    logResponses="Never | OnError | Always"
    logMetrics="true | false"
    logMetricsFormat="Standard | JSON"
    logMetricsCustomFormatter="NameSpace.Class, Assembly" />
  <dynamoDB
    conversionSchema="V1 | V2">
    <dynamoDBContext
      tableNamePrefix="string value">
      <tableAliases>
        <alias
          fromTable="string value"
          toTable="string value" />
      </tableAliases>
      <map
        type="NameSpace.Class, Assembly"
        targetTable="string value">
        <property
          name="string value"
          attribute="string value"
          ignore="true | false"
          version="true | false"
          converter="NameSpace.Class, Assembly" />
      </map>
    </dynamoDBContext>
  </dynamoDB>
  <s3
    useSignatureVersion4="true | false" />
  <ec2
    useSignatureVersion4="true | false" />
  <proxy
    host="string value"
    port="1234"
    username="string value"
    password="string value" />
</aws>
```

### 元素参考
<a name="net-dg-config-ref-elements-ref"></a>

下面是 AWS 设置部分允许的元素列表。对于每个元素，将列出其允许的属性和父-子元素。

**Topics**
+ [

#### 别名
](#net-dg-config-ref-elements-alias)
+ [

#### `aws`
](#net-dg-config-ref-elements-aws)
+ [

#### dynamoDB
](#net-dg-config-ref-elements-dynamodb)
+ [

#### dynamoDBContext
](#net-dg-config-ref-elements-ddbcontext)
+ [

#### ec2
](#net-dg-config-ref-elements-ec2)
+ [

#### logging
](#net-dg-config-ref-elements-logging)
+ [

#### 映射
](#net-dg-config-ref-elements-map)
+ [

#### property
](#net-dg-config-ref-elements-property)
+ [

#### proxy
](#net-dg-config-ref-elements-proxy)
+ [

#### S3
](#net-dg-config-ref-elements-s3)

#### 别名
<a name="net-dg-config-ref-elements-alias"></a>

`<alias>` 元素表示集合中的一个项，该集合包含一个或多个源表到目标表的映射，用于指定与为某一类型配置的表不同的表。此元素将从`Amazon.Util.TableAlias`中的 `Amazon.AWSConfigs.DynamoDBConfig.Context.TableAliases` 属性映射到 适用于 .NET 的 AWS SDK 类的实例。在应用表名称前缀之前，将执行重新映射。

此元素可以包含以下属性：

** `fromTable` **  
源表到目标表的映射的源表部分。此属性映射到`Amazon.Util.TableAlias.FromTable`中的 适用于 .NET 的 AWS SDK 属性。

** `toTable` **  
源表到目标表的映射的目标表部分。此属性映射到`Amazon.Util.TableAlias.ToTable`中的 适用于 .NET 的 AWS SDK 属性。

`<alias>` 元素的父级为 `<tableAliases>` 元素。

`<alias>` 元素不包含子元素。

以下是使用中的 `<alias>` 元素的示例：

```
<alias
  fromTable="Studio"
  toTable="Studios" />
```

#### `aws`
<a name="net-dg-config-ref-elements-aws"></a>

`<aws>` 元素表示 AWS 设置部分中的最顶层元素。此元素可以包含以下属性：

** `endpointDefinition` **  
自定义配置文件的绝对路径，该文件定义要使用的 AWS 区域和端点。此属性映射到`Amazon.AWSConfigs.EndpointDefinition`中的 适用于 .NET 的 AWS SDK 属性。

** `profileName` **  
存储的 AWS 凭证的配置文件名称，该凭证将用于进行服务调用。此属性映射到`Amazon.AWSConfigs.AWSProfileName`中的 适用于 .NET 的 AWS SDK 属性。

** `profilesLocation` **  
与其它 AWS 开发工具包共享的凭证文件位置的绝对路径。默认情况下，凭证文件存储在当前用户主目录的 `.aws` 目录中。此属性映射到`Amazon.AWSConfigs.AWSProfilesLocation`中的 适用于 .NET 的 AWS SDK 属性。

** `region` **  
没有明确指定区域的客户端的默认 AWS 区域 ID。此属性映射到`Amazon.AWSConfigs.AWSRegion`中的 适用于 .NET 的 AWS SDK 属性。

`<aws>` 元素没有父元素。

`<aws>` 元素可包含以下子元素：
+  `<dynamoDB>` 
+  `<ec2>` 
+  `<logging>` 
+  `<proxy>` 
+  `<s3>` 

以下是使用中的 `<aws>` 元素的示例：

```
<aws
  endpointDefinition="C:\Configs\endpoints.xml"
  region="us-west-2"
  profileName="development"
  profilesLocation="C:\Configs">
  <!-- ... -->
</aws>
```

#### dynamoDB
<a name="net-dg-config-ref-elements-dynamodb"></a>

`<dynamoDB>` 元素表示一组 Amazon DynamoDB 设置。此元素可以包含 *conversionSchema* 属性，该属性表示在 .NET 和 DynamoDB 对象之间进行转换所用的版本。允许的值包括 V1 和 V2。此属性映射到`Amazon.DynamoDBv2.DynamoDBEntryConversion`中的 适用于 .NET 的 AWS SDK 类。有关更多信息，请参阅 [DynamoDB 系列 - 转换架构](http://blogs.aws.amazon.com/net/post/Tx2TCOGWG7ARUH5/DynamoDB-Series-Conversion-Schemas)。

`<dynamoDB>` 元素的父级为 `<aws>` 元素。

`<dynamoDB>` 元素可以包含 `<dynamoDBContext>` 子元素。

以下是使用中的 `<dynamoDB>` 元素的示例：

```
<dynamoDB
  conversionSchema="V2">
  <!-- ... -->
</dynamoDB>
```

#### dynamoDBContext
<a name="net-dg-config-ref-elements-ddbcontext"></a>

`<dynamoDBContext>` 元素表示一组 Amazon DynamoDB 上下文特定的设置。此元素可以包含 *tableNamePrefix* 属性，它表示 DynamoDB 上下文将使用的默认表名前缀 (如果未手动配置此前缀)。此属性从`Amazon.Util.DynamoDBContextConfig.TableNamePrefix`中的 `Amazon.AWSConfigs.DynamoDBConfig.Context.TableNamePrefix` 属性映射到 适用于 .NET 的 AWS SDK 属性。有关更多信息，请参阅 [DynamoDB 开发工具包的增强功能](http://blogs.aws.amazon.com/net/post/Tx2C4MHH2H0SA5W/Enhancements-to-the-DynamoDB-SDK)。

`<dynamoDBContext>` 元素的父级为 `<dynamoDB>` 元素。

`<dynamoDBContext>` 元素可包含以下子元素：
+  `<alias>` (一个或多个实例)
+  `<map>` (一个或多个实例)

以下是使用中的 `<dynamoDBContext>` 元素的示例：

```
<dynamoDBContext
  tableNamePrefix="Test-">
  <!-- ... -->
</dynamoDBContext>
```

#### ec2
<a name="net-dg-config-ref-elements-ec2"></a>

`<ec2>` 元素表示 Amazon EC2 设置的集合。此元素可以包含 *useSignatureVersion4* 属性，该属性指定签名版本 4 签名用于所有请求 (true) 还是不用于所有请求 (false，默认值)。此属性从`Amazon.Util.EC2Config.UseSignatureVersion4`中的 `Amazon.AWSConfigs.EC2Config.UseSignatureVersion4` 属性映射到 适用于 .NET 的 AWS SDK 属性。

`<ec2>` 元素的父级为该元素。

`<ec2>` 元素不包含子元素。

以下是使用中的 `<ec2>` 元素的示例：

```
<ec2
  useSignatureVersion4="true" />
```

#### logging
<a name="net-dg-config-ref-elements-logging"></a>

`<logging>` 元素表示一组用于响应日志记录和性能指标日志记录的设置。此元素可以包含以下属性：

** `logMetrics` **  
是否将为所有客户端和配置记录性能指标，如果是，则为 true；否则为 false。此属性从`Amazon.Util.LoggingConfig.LogMetrics`中的 `Amazon.AWSConfigs.LoggingConfig.LogMetrics` 属性映射到 适用于 .NET 的 AWS SDK 属性。

** `logMetricsCustomFormatter` **  
用于日志记录指标的自定义格式化程序的数据类型和程序集名称。此属性从`Amazon.Util.LoggingConfig.LogMetricsCustomFormatter`中的 `Amazon.AWSConfigs.LoggingConfig.LogMetricsCustomFormatter` 属性映射到 适用于 .NET 的 AWS SDK 属性。

** `logMetricsFormat` **  
用于表示日志记录指标的格式（从`Amazon.Util.LoggingConfig.LogMetricsFormat`中的 `Amazon.AWSConfigs.LoggingConfig.LogMetricsFormat` 属性映射到 适用于 .NET 的 AWS SDK 属性）。  
允许的值包括：    
** `JSON` **  
使用 JSON 格式。  
** `Standard` **  
使用默认格式。

** `logResponses` **  
记录服务响应的时间（从`Amazon.Util.LoggingConfig.LogResponses`中的 `Amazon.AWSConfigs.LoggingConfig.LogResponses` 属性映射到 适用于 .NET 的 AWS SDK 属性）。  
允许的值包括：    
** `Always` **  
始终记录服务响应。  
** `Never` **  
从不记录服务响应。  
** `OnError` **  
仅在出错时记录服务响应。

** `logTo` **  
记录位置（从`LogTo`中的 `Amazon.AWSConfigs.LoggingConfig.LogTo` 属性映射到 适用于 .NET 的 AWS SDK 属性）。  
允许的值包括下列一个或多个值：    
** `Log4Net` **  
记录到 log4net。  
** `None` **  
禁用日志记录。  
** `SystemDiagnostics` **  
记录到 System.Diagnostics。

`<logging>` 元素的父级为 `<aws>` 元素。

`<logging>` 元素不包含子元素。

以下是使用中的 `<logging>` 元素的示例：

```
<logging
  logTo="SystemDiagnostics"
  logResponses="OnError"
  logMetrics="true"
  logMetricsFormat="JSON"
  logMetricsCustomFormatter="MyLib.Util.MyMetricsFormatter, MyLib" />
```

#### 映射
<a name="net-dg-config-ref-elements-map"></a>

`<map>` 元素表示从 .NET 类型到 DynamoDB 表的类型-表映射集合中的单个项（从`TypeMapping`中的 `Amazon.AWSConfigs.DynamoDBConfig.Context.TypeMappings` 属性映射到 适用于 .NET 的 AWS SDK 类的实例）。有关更多信息，请参阅 [DynamoDB 开发工具包的增强功能](http://blogs.aws.amazon.com/net/post/Tx2C4MHH2H0SA5W/Enhancements-to-the-DynamoDB-SDK)。

此元素可以包含以下属性：

** `targetTable` **  
映射对应的 DynamoDB 表。此属性映射到`Amazon.Util.TypeMapping.TargetTable`中的 适用于 .NET 的 AWS SDK 属性。

** `type` **  
映射对应的类型和程序集名称。此属性映射到`Amazon.Util.TypeMapping.Type`中的 适用于 .NET 的 AWS SDK 属性。

`<map>` 元素的父级为 `<dynamoDBContext>` 元素。

`<map>` 元素可包含 `<property>` 子元素的一个或多个实例。

以下是使用中的 `<map>` 元素的示例：

```
<map
  type="SampleApp.Models.Movie, SampleDLL"
  targetTable="Movies">
  <!-- ... -->
</map>
```

#### property
<a name="net-dg-config-ref-elements-property"></a>

`<property>` 元素表示 DynamoDB 属性。（此元素从适用于 .NET 的 AWS SDK中的 `AddProperty` 方法映射到 Amazon.Util.PropertyConfig 类的实例）有关更多信息，请参阅 [DynamoDB 开发工具包的增强功能](http://blogs.aws.amazon.com/net/post/Tx2C4MHH2H0SA5W/Enhancements-to-the-DynamoDB-SDK)和 [DynamoDB 属性](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DeclarativeTagsList.html)。

此元素可以包含以下属性：

** `attribute` **  
属性的属性名，例如范围键的名称。此属性映射到`Amazon.Util.PropertyConfig.Attribute`中的 适用于 .NET 的 AWS SDK 属性。

** `converter` **  
应该用于此属性的转换器的类型。此属性映射到`Amazon.Util.PropertyConfig.Converter`中的 适用于 .NET 的 AWS SDK 属性。

** `ignore` **  
是否应忽略关联的属性，如果忽略，则为 true；否则为 false。此属性映射到`Amazon.Util.PropertyConfig.Ignore`中的 适用于 .NET 的 AWS SDK 属性。

** `name` **  
属性的名称。此属性映射到`Amazon.Util.PropertyConfig.Name`中的 适用于 .NET 的 AWS SDK 属性。

** `version` **  
此属性是否应存储项目版本号，如果是，则为 true；否则为 false。此属性映射到`Amazon.Util.PropertyConfig.Version`中的 适用于 .NET 的 AWS SDK 属性。

`<property>` 元素的父级为 `<map>` 元素。

`<property>` 元素不包含子元素。

以下是使用中的 `<property>` 元素的示例：

```
<property
  name="Rating"
  converter="SampleApp.Models.RatingConverter, SampleDLL" />
```

#### proxy
<a name="net-dg-config-ref-elements-proxy"></a>

`<proxy>` 元素表示用于配置代理以供适用于 .NET 的 AWS SDK使用的设置。此元素可以包含以下属性：

**host**  
代理服务器的主机名或 IP 地址。此属性从`Amazon.Util.ProxyConfig.Host`中的 `Amazon.AWSConfigs.ProxyConfig.Host` 属性映射到 适用于 .NET 的 AWS SDK 属性。

**password**  
用于对代理服务器进行身份验证的密码。此属性从`Amazon.Util.ProxyConfig.Password`中的 `Amazon.AWSConfigs.ProxyConfig.Password` 属性映射到 适用于 .NET 的 AWS SDK 属性。

**端口**  
代理的端口号。此属性从`Amazon.Util.ProxyConfig.Port`中的 `Amazon.AWSConfigs.ProxyConfig.Port` 属性映射到 适用于 .NET 的 AWS SDK 属性。

**username**  
用于对代理服务器进行身份验证的用户名。此属性从`Amazon.Util.ProxyConfig.Username`中的 `Amazon.AWSConfigs.ProxyConfig.Username` 属性映射到 适用于 .NET 的 AWS SDK 属性。

`<proxy>` 元素的父级为 `<aws>` 元素。

`<proxy>` 元素不包含子元素。

以下是使用中的 `<proxy>` 元素的示例：

```
<proxy
  host="192.0.2.0"
  port="1234"
  username="My-Username-Here"
  password="My-Password-Here" />
```

#### S3
<a name="net-dg-config-ref-elements-s3"></a>

`<s3>` 元素表示 Amazon S3 设置的集合。此元素可以包含 *useSignatureVersion4* 属性，该属性指定签名版本 4 签名用于所有请求 (true) 还是不用于所有请求 (false，默认值)。此属性映射到`Amazon.AWSConfigs.S3Config.UseSignatureVersion4`中的 适用于 .NET 的 AWS SDK 属性。

`<s3>` 元素的父级为 `<aws>` 元素。

`<s3>` 元素不包含子元素。

以下是使用中的 `<s3>` 元素的示例：

```
<s3 useSignatureVersion4="true" />
```

# 使用旧版凭证
<a name="net-dg-legacy-creds"></a>

本部分中的主题提供有关在不使用 AWS IAM Identity Center的情况下使用长期或短期凭证的信息。

**警告**  
为了避免安全风险，在开发专用软件或处理真实数据时，请勿使用 IAM 用户进行身份验证，而是使用与身份提供者的联合身份验证，例如 [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)。

**注意**  
本主题中的信息适用于需要手动获取和管理短期或长期凭证的情况。有关短期和长期凭证的更多信息，请参阅*AWS SDKs 和工具参考指南*中的[其他身份验证方式](https://docs.aws.amazon.com/sdkref/latest/guide/access-users.html)。  
要了解最佳安全实践，请使用 AWS IAM Identity Center，如中所述[配置 SDK 身份验证](creds-idc.md)。

## 有关凭证的重要警告和指南
<a name="net-dg-config-creds-warnings-and-guidelines"></a>

**有关凭证的警告**
+ ***请勿***使用您账户的根凭证访问 AWS 资源。这些凭证可提供不受限的账户访问且难以撤销。
+ ***不得***在应用程序文件中按字面输入访问密钥或凭证信息。如果您这样做，则在将项目上传到公共存储库或在其他情况下，会有意外暴露凭证的风险。
+ ***请勿***在项目区域中包括含有凭证的文件。
+ 请注意，存储在共享 AWS `credentials`文件中的任何凭据都以纯文本形式存储。

**有关安全管理凭证的更多指南**

有关如何安全管理 AWS 证书的一般性讨论，请参阅 IAM 用户指南中的[AWS 安全证书[AWS 一般参考](https://docs.aws.amazon.com/general/latest/gr/)](https://docs.aws.amazon.com/general/latest/gr/Welcome.html#aws-security-credentials)和《[IAM 用户指南](https://docs.aws.amazon.com/IAM/latest/UserGuide/)》中的[安全最佳实践和用例](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAMBestPracticesAndUseCases.html)。除了上述讨论内容外，请考虑以下事项：
+ 创建其他用户，例如 IAM Identity Center 中的用户，并使用这些用户的凭证，而不是使用您的 AWS 根用户凭证。如有必要，可以撤销其他用户的凭证，或者这些凭证本来就是临时的。此外，您可以对每个用户应用仅允许访问某些资源和操作的策略，从而采取最低权限的立场。
+ 对于 Amazon Elastic Container Service (Amazon ECS)，使用[适用于任务的 IAM 角色](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)。
+ 对于在 Amazon EC2 实例上运行的应用程序，使用 [IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)。
+ 对可用于组织外部用户的应用程序使用[临时凭证](creds-assign.md#net-dg-config-creds-assign-role)或环境变量。

**Topics**
+ [

## 有关凭证的重要警告和指南
](#net-dg-config-creds-warnings-and-guidelines)
+ [

# 使用共享 AWS 凭据文件
](creds-file.md)
+ [

# 使用 SDK Store（仅适用于 Windows）
](sdk-store.md)

# 使用共享 AWS 凭据文件
<a name="creds-file"></a>

（请务必查看[有关凭证的重要警告和指南](net-dg-legacy-creds.md#net-dg-config-creds-warnings-and-guidelines)。）

为应用程序提供凭证的一种方法是在*共享 AWS 凭证文件*中创建配置文件，然后将凭证存储在这些配置文件中。这个文件可以被另一个人使用 AWS SDKs。V [isual Studio [AWS Tools for Windows PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/)](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/)、[JetBrains](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/)、和 [VS Code](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/) 的 AWS 工具包也可以使用它。[AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/)

**警告**  
为了避免安全风险，在开发专用软件或处理真实数据时，请勿使用 IAM 用户进行身份验证，而是使用与身份提供者的联合身份验证，例如 [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)。

**注意**  
本主题中的信息适用于需要手动获取和管理短期或长期凭证的情况。有关短期和长期凭证的更多信息，请参阅*AWS SDKs 和工具参考指南*中的[其他身份验证方式](https://docs.aws.amazon.com/sdkref/latest/guide/access-users.html)。  
要了解最佳安全实践，请使用 AWS IAM Identity Center，如中所述[配置 SDK 身份验证](creds-idc.md)。

## 一般信息
<a name="creds-file-general-info"></a>

默认情况下，共享 AWS 凭据文件位于您的主`.aws`目录中的目录中，其名称为`credentials`：`~/.aws/credentials`（Linux 或 macOS）或`%USERPROFILE%\.aws\credentials`（Windows）。有关其他位置的信息，请参阅《工具参考指南[》*[AWS SDKs 和《工具参考指南](https://docs.aws.amazon.com/sdkref/latest/guide/overview.html)*》中的共享文件位置](https://docs.aws.amazon.com/sdkref/latest/guide/file-location.html)。另请参阅 [访问应用程序中的凭证和配置文件](creds-locate.md)

共享 AWS 凭证文件是一个纯文本文件，遵循某种格式。有关 AWS 凭证文件格式的信息，请参阅[《*AWS SDKs 和工具参考指南》*中的凭证文件格式](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html#file-format-creds)。

您可以通过多种方式管理共享 AWS 凭据文件中的配置文件。
+ 使用任何文本编辑器创建和更新共享 AWS 凭据文件。
+ 使用 [Amazon.Runtime。 CredentialManagement](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/NRuntimeCredentialManagement.html) 适用于 .NET 的 AWS SDK API 的命名空间，如本主题后面所示。
+ 使用适用于 V [isual Studio [AWS Tools for PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/specifying-your-aws-credentials.html)](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/credentials.html)和 [VS Code](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/setup-credentials.html) 的 AWS 工具包的命令和过程。[JetBrains](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/setup-credentials.html)
+ 使用 [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) 命令；例如 `aws configure set aws_access_key_id` 和 `aws configure set aws_secret_access_key` 。

## 配置文件管理示例
<a name="creds-file-examples"></a>

以下各节显示共享 AWS 凭据文件中的配置文件示例。一些示例展示了结果，可以通过前面描述的任何凭证管理方法获得。其它示例显展示了如何使用特定方法。

### 默认配置文件
<a name="creds-file-default"></a>

共享 AWS 凭据文件几乎总是会有一个名为 defa *ult* 的配置文件。如果未定义其他配置文件，则在此处 适用于 .NET 的 AWS SDK 查找凭据。

`[default]` 配置文件通常如下所示。

```
[default]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
```

### 以编程方式创建配置文件
<a name="creds-file-create-programmatically"></a>

此示例向您展示如何创建配置文件并以编程方式将其保存到共享 AWS 凭据文件中。它使用 [Amazon.Runtime 的以下类。 CredentialManagement](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/NRuntimeCredentialManagement.html)命名空间：[CredentialProfileOptions[CredentialProfile](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TCredentialProfile.html)](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TCredentialProfileOptions.html)、和[SharedCredentialsFile](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TSharedCredentialsFile.html)。

```
using Amazon.Runtime.CredentialManagement;
...

// Do not include credentials in your code.
WriteProfile("my_new_profile", SecurelyStoredKeyID, SecurelyStoredSecretAccessKey);
...

void WriteProfile(string profileName, string keyId, string secret)
{
    Console.WriteLine($"Create the [{profileName}] profile...");
    var options = new CredentialProfileOptions
    {
        AccessKey = keyId,
        SecretKey = secret
    };
    var profile = new CredentialProfile(profileName, options);
    var sharedFile = new SharedCredentialsFile();
    sharedFile.RegisterProfile(profile);
}
```

**警告**  
这样的代码通常不会出现在您的应用程序中。如果在应用程序中包含明文密钥，请采取适当的预防措施，确保在代码、网络甚至计算机内存中都看不到明文密钥。

下面是通过本示例创建的配置文件。

```
[my_new_profile]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
```

### 以编程方式更新现有配置文件
<a name="creds-file-update-programmatically"></a>

本示例向您展示了如何以编程方式更新之前创建的配置文件。它使用 [Amazon.Runtime 的以下类。 CredentialManagement](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/NRuntimeCredentialManagement.html)命名空间：[CredentialProfile](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TCredentialProfile.html)和[SharedCredentialsFile](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TSharedCredentialsFile.html)。它还使用 [Amazon](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/N.html) 命名空间的[RegionEndpoint](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TRegionEndpoint.html)类。

```
using Amazon.Runtime.CredentialManagement;
...

AddRegion("my_new_profile", RegionEndpoint.USWest2);
...

void AddRegion(string profileName, RegionEndpoint region)
{
    var sharedFile = new SharedCredentialsFile();
    CredentialProfile profile;
    if (sharedFile.TryGetProfile(profileName, out profile))
    {
        profile.Region = region;
        sharedFile.RegisterProfile(profile);
    }
}
```

以下是更新的配置文件。

```
[my_new_profile]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
region=us-west-2
```

**注意**  
您也可以使用其他方法在其他位置设置 AWS 区域。有关更多信息，请参阅 [配置 AWS 区域](net-dg-region-selection.md)。

# 使用 SDK Store（仅适用于 Windows）
<a name="sdk-store"></a>

（请务必查看[重要的警告和指南](net-dg-legacy-creds.md#net-dg-config-creds-warnings-and-guidelines)。）

在 Windows 上，*SDK 商店*是另一个为 适用于 .NET 的 AWS SDK 应用程序创建配置文件和存储加密凭据的地方。它位于 `%USERPROFILE%\AppData\Local\AWSToolkit\RegisteredAccounts.json`。在开发过程中，您可以使用 SDK Store 作为[共享 AWS 凭证文件](creds-file.md)的替代方案。

**警告**  
为了避免安全风险，在开发专用软件或处理真实数据时，请勿使用 IAM 用户进行身份验证，而是使用与身份提供者的联合身份验证，例如 [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)。

**注意**  
本主题中的信息适用于需要手动获取和管理短期或长期凭证的情况。有关短期和长期凭证的更多信息，请参阅*AWS SDKs 和工具参考指南*中的[其他身份验证方式](https://docs.aws.amazon.com/sdkref/latest/guide/access-users.html)。  
要了解最佳安全实践，请使用 AWS IAM Identity Center，如中所述[配置 SDK 身份验证](creds-idc.md)。

## 一般信息
<a name="sdk-store-general-info"></a>

SDK Store 具有以下优势：
+ SDK Store 中的凭证将进行加密，并且 SDK Store 驻留在用户的主目录中。这将限制意外泄露凭证的风险。
+ SDK Store 还向[AWS Tools for Windows PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/)和[AWS Toolkit for Visual Studio](https://docs.aws.amazon.com/AWSToolkitVS/latest/UserGuide/)提供凭证。

SDK Store 配置文件针对特定主机上的特定用户。无法将这些配置文件复制到其他主机或其他用户。这表示，您无法在其它主机或开发人员计算机上重用您的开发计算机上的 SDK Store 配置文件。这同时也表示，您不能在生产应用程序中使用 SDK Store 配置文件。

您可通过多种方式管理 SDK Store 中的配置文件。
+ 在 [AWS Toolkit for Visual Studio](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/credentials.html) 中使用图形用户界面（GUI）。
+ 使用 [Amazon.Runtime。 CredentialManagement](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/NRuntimeCredentialManagement.html) 适用于 .NET 的 AWS SDK API 的命名空间，如本主题后面所示。
+ 使用来自 [AWS Tools for Windows PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/specifying-your-aws-credentials.html) 的命令；例如，`Set-AWSCredential` 和 `Remove-AWSCredentialProfile`。

## 配置文件管理示例
<a name="sdk-store-examples"></a>

以下示例说明如何在 SDK Store 中以编程方式创建和更新配置文件。

### 以编程方式创建配置文件
<a name="sdk-store-create-programmatically"></a>

本示例向您展示了如何以编程方式创建配置文件并将其保存到 SDK Store。它使用 [Amazon.Runtime 的以下类。 CredentialManagement](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/NRuntimeCredentialManagement.html)命名空间:[CredentialProfileOptions[CredentialProfile](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TCredentialProfile.html)](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TCredentialProfileOptions.html)、和 [Net SDKCredentials File](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TNetSDKCredentialsFile.html)。

```
using Amazon.Runtime.CredentialManagement;
...

// Do not include credentials in your code.
WriteProfile("my_new_profile", SecurelyStoredKeyID, SecurelyStoredSecretAccessKey);
...

void WriteProfile(string profileName, string keyId, string secret)
{
    Console.WriteLine($"Create the [{profileName}] profile...");
    var options = new CredentialProfileOptions
    {
        AccessKey = keyId,
        SecretKey = secret
    };
    var profile = new CredentialProfile(profileName, options);
    var netSdkStore = new NetSDKCredentialsFile();
    netSdkStore.RegisterProfile(profile);
}
```

**警告**  
这样的代码通常不会出现在您的应用程序中。如果应用程序中包含明文密钥，请采取适当的预防措施，确保在代码、网络甚至计算机内存中都看不到明文密钥。

下面是通过本示例创建的配置文件。

```
"[generated GUID]" : {
    "AWSAccessKey" : "01000000D08...[etc., encrypted access key ID]",
    "AWSSecretKey" : "01000000D08...[etc., encrypted secret access key]",
    "ProfileType"  : "AWS",
    "DisplayName"  : "my_new_profile",
}
```

### 以编程方式更新现有配置文件
<a name="sdk-store-update-programmatically"></a>

本示例向您展示了如何以编程方式更新之前创建的配置文件。它使用 [Amazon.Runtime 的以下类。 CredentialManagement](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/NRuntimeCredentialManagement.html)命名空间：[CredentialProfile](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TCredentialProfile.html)和[网络SDKCredentials文件](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TNetSDKCredentialsFile.html)。它还使用 [Amazon](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/N.html) 命名空间的[RegionEndpoint](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TRegionEndpoint.html)类。

```
using Amazon.Runtime.CredentialManagement;
...

AddRegion("my_new_profile", RegionEndpoint.USWest2);
...

void AddRegion(string profileName, RegionEndpoint region)
{
    var netSdkStore = new NetSDKCredentialsFile();
    CredentialProfile profile;
    if (netSdkStore.TryGetProfile(profileName, out profile))
    {
        profile.Region = region;
        netSdkStore.RegisterProfile(profile);
    }
}
```

以下是更新的配置文件。

```
"[generated GUID]" : {
    "AWSAccessKey" : "01000000D08...[etc., encrypted access key ID]",
    "AWSSecretKey" : "01000000D08...[etc., encrypted secret access key]",
    "ProfileType"  : "AWS",
    "DisplayName"  : "my_new_profile",
    "Region"       : "us-west-2"
}
```

**注意**  
您也可以使用其他方法在其他位置设置 AWS 区域。有关更多信息，请参阅 [配置 AWS 区域](net-dg-region-selection.md)。