

버전 4(V4) AWS SDK for .NET 가 릴리스되었습니다.

변경 사항 해제 및 애플리케이션 마이그레이션에 대한 자세한 내용은 [마이그레이션 주제를](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html) 참조하세요.

 [https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html)

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 구성 AWS SDK for .NET
<a name="configuring-the-sdk"></a>

를 사용하려면 환경을 AWS SDK for .NET설정하고 애플리케이션이 AWS 서비스에 액세스하는 데 필요한 여러 필수 항목을 구성해야 합니다. [시작하기 AWS SDK for .NET](net-dg-config.md) 다음이 포함됩니다.
+  AWS 리전의 사양
+ AWSSDK 패키지 또는 어셈블리

이 섹션의 일부 주제에서는 이러한 필수 사항을 구성하는 방법에 대한 정보를 제공합니다.

이 섹션 및 다른 섹션의 다른 주제에서는 프로젝트를 구성할 수 있는 고급 방법에 대한 정보를 제공합니다.

**Topics**
+ [새 프로젝트 시작](net-dg-start-new-project.md)
+ [NuGet을 사용하여 AWSSDK 패키지를 설치](net-dg-install-assemblies.md)
+ [NuGet 없이 AWSSDK 어셈블리 설치](net-dg-install-without-nuget.md)
+ [AWS 리전](net-dg-region-selection.md)
+ [보안 인증 정보 및 프로파일 확인](creds-assign.md)
+ [재시도 및 제한 시간](retries-timeouts.md)
+ [관찰성](observability.md)
+ [사용자 및 역할](net-dg-users-roles.md)
+ [고급 구성](net-dg-advanced-config.md)
+ [레거시 보안 인증 사용](net-dg-legacy-creds.md)

# 새 프로젝트 시작
<a name="net-dg-start-new-project"></a>

 AWS 서비스에 액세스하기 위해 새 프로젝트를 시작하는 데 사용할 수 있는 몇 가지 기법이 있습니다. 이러한 일부 기술은 다음과 같습니다.
+ 에서 .NET 개발을 처음 AWS 사용하거나 최소한를 처음 AWS SDK for .NET사용하는 경우에서 전체 예제를 볼 수 있습니다[간단한 애플리케이션 생성](quick-start.md). SDK에 대한 소개를 제공합니다.
+ .NET CLI를 사용하여 기본 프로젝트를 시작할 수 있습니다. 예제를 보려면 명령 프롬프트나 터미널을 열고 폴더나 디렉터리를 만들어 탐색한 후 다음을 입력하십시오.

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

  빈 프로젝트가 생성되며, 이 프로젝트에 코드 및 NuGet 패키지를 추가할 수 있습니다. 자세한 내용은 [.NET Core 안내서](https://learn.microsoft.com/en-us/dotnet/fundamentals/)를 참조하십시오.

  프로젝트 템플릿 목록을 보려면 `dotnet new --list`를 사용하세요.
+ 에는 다양한 AWS 서비스에 대한 C\$1 프로젝트 템플릿이 AWS Toolkit for Visual Studio 포함되어 있습니다. 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"를 검색하고 **콘솔 앱(.NET Core)** 또는 **WPF 앱(.NET Core)** 템플릿의 C\$1 버전을 선택합니다. 빈 프로젝트가 생성되며, 이 프로젝트에 코드 및 NuGet 패키지를 추가할 수 있습니다.

에서 AWS 서비스 작업 방법의 몇 가지 예를 찾을 수 있습니다[가이드 코드 예제개요 수준 라이브러리 및 프레임워크](tutorials-examples.md).

**중요**  
인증 AWS IAM Identity Center 에를 사용하는 경우 애플리케이션이 다음 NuGet 패키지를 참조해야 SSO 확인이 작동합니다.  
`AWSSDK.SSO`
`AWSSDK.SSOOIDC`
이러한 패키지를 참조하지 않으면 *런타임* 예외가 발생합니다.

# NuGet을 사용하여 AWSSDK 패키지를 설치
<a name="net-dg-install-assemblies"></a>

[NuGet](https://www.nuget.org/)은 .NET 플랫폼용 패키지 관리 시스템입니다. 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. [NuGet의 AWSSDK 패키지](https://www.nuget.org/profiles/awsdotnet)로 이동하여 프로젝트에 필요한 패키지(예: **[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 솔루션 탐색기에서 NuGet 사용
<a name="package-install-gui"></a>

1. **Solution Explorer(솔루션 탐색기)**에서 프로젝트를 마우스 오른쪽 버튼으로 클릭하여 컨텍스트 메뉴를 열고 **Manage NuGet Packages(NuGet 패키지 관리)**를 선택합니다.

1. **NuGet Package Manager(NuGet 패키지 관리자)**의 왼쪽 창에서 **찾아보기**를 선택합니다. 그런 다음 검색 상자를 사용하여 설치할 패키지를 검색합니다. NuGet은 [AWSSDK.Core](https://www.nuget.org/packages/AWSSDK.Core)와 같은 종속성도 설치합니다.

   다음 그림은 **AWSSDK.S3** 패키지의 설치를 보여줍니다.  
![\[NuGet 패키지 관리자에 표시된 AWSSDK.S3 패키지\]](http://docs.aws.amazon.com/ko_kr/sdk-for-net/v4/developer-guide/images/nuget-install-vs-dlg.png)

## Package Manager Console에서 NuGet 사용
<a name="package-install-cmd"></a>

Visual Studio에서 **도구**, **NuGet 패키지 관리자**, **패키지 관리자 콘솔**을 선택합니다.

**`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
```

패키지 관리자 콘솔 명령에 대한 자세한 내용은 Microsoft의 [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 어셈블리 가져오기](net-dg-obtain-assemblies.md)에서 설명한 대로 로컬(또는 온프레미스)에서 구하여 저장한 AWSSDK 어셈블리를 사용하는 방법을 설명합니다. 이는 SDK 참조를 처리하는 데 권장되는 방법은 **아니지만** 일부 환경에서는 필요합니다.

**참고**  
SDK 참조를 처리하는 권장되는 방법은 각 프로젝트에 필요한 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/main/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. 프로젝트를 저장합니다.

------

# 에 대한 AWS 리전 설정 AWS SDK for .NET
<a name="net-dg-region-selection"></a>

AWS 리전을 사용하면 특정 지리적 리전에 물리적으로 상주하는 AWS 서비스에 액세스할 수 있습니다. 이는 중복성에 유용할 뿐 아니라 데이터와 애플리케이션이 이를 사용하기 위해 고객님 및 고객님의 사용자가 접근하는 위치 가까이에서 계속해서 실행되도록 하는 데 도움이 될 수 있습니다.

각 AWS 서비스에 대해 지원되는 모든 리전 및 엔드포인트의 현재 목록을 보려면의 [서비스 엔드포인트 및 할당량을 참조하세요](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)*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="w2aac11c19c11b5"></a>

이 예제는 기존 리전의 [Amazon EC2 클라이언트](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/EC2/TEC2Client.html)를 인스턴스화하는 방법을 보여줍니다. 정의된 [RegionEndpoint](https://docs.aws.amazon.com/sdkfornet/v4/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="w2aac11c19c11b7"></a>

이 예제에서는 [RegionEndpoint.GetBySystemName](https://docs.aws.amazon.com/sdkfornet/v4/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="w2aac11c19c11b9"></a>

이 예제에서는 서비스 클라이언트 구성 클래스의 `ServiceURL` 속성을 사용하여 리전을 지정하는 방법을 보여줍니다. 이 경우에는 [AmazonEC2Config](https://docs.aws.amazon.com/sdkfornet/v4/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 서비스 클라이언트에 대해 리전을 지정하는 방법에는 여러 가지가 있습니다. 이 지역은 특정 리전으로 생성되지 않은 서비스 클라이언트에 사용됩니다.

는 다음 순서로 리전 값을 AWS SDK for .NET 찾습니다.

### 프로파일
<a name="w2aac11c19c15b7"></a>

애플리케이션 또는 SDK가 로드한 프로필을 설정합니다. 자세한 내용은 [보안 인증 정보 및 프로파일 확인](creds-assign.md) 단원을 참조하십시오.

### 환경 변수
<a name="w2aac11c19c15b9"></a>

`AWS_REGION` 환경 변수를 설정합니다.

Linux 또는 macOS에서:

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

Windows의 경우:

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

**참고**  
`export` 또는 `setx`를 사용하여 전체 시스템에 대해 이 환경 변수를 설정하면 AWS SDK for .NET뿐만 아니라 모든 SDK 및 툴킷에 영향을 줍니다.

### AWSConfigs 클래스
<a name="w2aac11c19c15c11"></a>

[AWSConfigs.AWSRegion](https://docs.aws.amazon.com/sdkfornet/v4/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 리전는 AWS 서비스 클라이언트가 운영할 리전을 찾으려고 AWS SDK for .NET 시도합니다.

**리전 해결 순서**

1. `app.config` 및 `web.config`와 같은 애플리케이션 구성 파일.

1. 환경 변수(`AWS_REGION` 및 `AWS_DEFAULT_REGION`).

1. `AWSConfigs.AWSProfileName`의 값으로 지정된 이름을 가진 프로필.

1. `AWS_PROFILE` 환경 변수로 이름이 지정된 프로필.

1. `[default]` 프로필.

1. Amazon EC2 인스턴스 메타데이터(EC2 인스턴스에서 실행 중인 경우).

리전을 찾을 수 없는 경우 SDK는 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 서비스를 시작한 다음 다른 리전에서 지원할 수 있습니다. 이와 같은 경우 해당 서비스에 대한 새로운 리전에 액세스하기 위해 최신 SDK를 설치할 필요가 없습니다. 앞서 표시된 대로 새로 추가된 리전을 클라이언트 단위로 또는 전역적으로 지정할 수 있습니다.

# 보안 인증 정보 및 프로파일 확인
<a name="creds-assign"></a>

는 특정 순서로 자격 증명을 AWS SDK for .NET 검색하고 현재 애플리케이션에 사용 가능한 첫 번째 세트를 사용합니다.

**보안 인증 검색 순서**

1. 에 설명된 대로 AWS 서비스 클라이언트에 명시적으로 설정된 자격 증명입니다[애플리케이션에서 자격 증명 및 프로필에 액세스](creds-locate.md).
**참고**  
이 주제는 보안 인증을 지정하는 데 선호되는 방법이 아니므로 [특별 고려 사항](special-considerations.md) 섹션에 있습니다.

1. 세 변수 모두에 값이 있는 경우 `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`및 `AWS_SESSION_TOKEN` 환경 변수에서 생성되는 [SessionAWSCredentials](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/TSessionAWSCredentials.html)입니다.

1.  두 변수 모두에 값이 있는 경우 `AWS_ACCESS_KEY_ID` 및 `AWS_SECRET_ACCESS_KEY` 환경 변수에서 생성되는 [BasicAWSCredentials](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/TBasicAWSCredentials.html)입니다.

1. 두 변수 모두에 값이 있는 경우 `AWS_WEB_IDENTITY_TOKEN_FILE` 및 `AWS_ROLE_ARN` 환경 변수에서 생성된 [AssumeRoleWithWebIdentityCredentials](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/TAssumeRoleWithWebIdentityCredentials.html)입니다.

1. [AWSConfigs.AWSProfileName](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Amazon/TAWSConfigs.html#properties)의 값으로 이름이 지정된 보안 인증 프로필입니다.

1. `AWS_PROFILE` 환경 변수로 이름이 지정된 보안 인증 프로필입니다.

1. `[default]` 자격 증명 프로필

1. [컨테이너 자격 증명 공급자](https://docs.aws.amazon.com/sdkref/latest/guide/feature-container-credentials.html)입니다.

1. Amazon EC2 인스턴스 메타데이터입니다.

애플리케이션이 Amazon EC2 인스턴스(예: 프로덕션 환경)에서 실행되는 경우 [IAM 역할을 사용하여 액세스 권한 부여](net-dg-hosm.md)에 설명된 대로 IAM 역할을 사용하세요. 그렇지 않으면 시험판 테스트와 같이 웹 애플리케이션이 서버에서 액세스할 수 있는 자격 증명 파일 형식을 사용하는 파일에 AWS 자격 증명을 저장합니다.

환경 변수 및 자격 증명 프로파일에 대한 자세한 내용은 [AWS SDKs 및 도구 참조 가이드](https://docs.aws.amazon.com/sdkref/latest/guide/)의 [환경 변수](https://docs.aws.amazon.com/sdkref/latest/guide/environment-variables.html), [환경 변수 목록](https://docs.aws.amazon.com/sdkref/latest/guide/settings-reference.html#EVarSettings), [공유 구성 및 자격 증명 파일](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html) 주제를 참조하세요.

## 프로필 해결 방법
<a name="net-dg-config-creds-profile-resolution"></a>

자격 증명에 대한 두 가지 스토리지 메커니즘을 사용하면 자격 증명을 AWS SDK for .NET 사용하도록를 구성하는 방법을 이해하는 것이 중요합니다. [AWSConfigs.AWSProfilesLocation](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Amazon/TAWSConfigs.html) 속성은가 자격 증명 프로파일을 AWS SDK for .NET 찾는 방법을 제어합니다.


****  

| AWSProfilesLocation | 프로파일 해결 동작 | 
| --- | --- | 
|  null 값(설정되지 않음) 또는 비어 있음  |  플랫폼에서 지원하는 경우 SDK 스토어를 검색한 다음 [기본 위치](creds-file.md)에서 공유 AWS 보안 인증 파일을 검색하세요. 프로필이 해당 위치 중 하나에 없으면 `~/.aws/config`(Linux 또는 macOS) 또는 `%USERPROFILE%\.aws\config`(Windows)를 검색하세요.  | 
|  자격 AWS 증명 파일 형식의 파일 경로  |  특정 이름이 있는 프로필에 대해 지정된 파일*만* 검색합니다.  | 

## 페더레이션 사용자 계정 보안 인증 사용
<a name="net-dg-config-creds-saml"></a>

 AWS SDK for .NET ([AWSSDK.Core](https://www.nuget.org/packages/AWSSDK.Core/) 버전 3.1.6.0 이상)를 사용하는 애플리케이션은 Active Directory Federation Services(AD FS)를 통해 연동 사용자 계정을 사용하여 Security Assertion Markup Language(SAML)를 사용하여 AWS 서비스에 액세스할 수 있습니다.

연동 액세스 지원이란 사용자가 Active Directory를 사용하여 인증할 수 있음을 뜻합니다. 임시 자격 증명은 사용자에게 자동으로 부여됩니다. 1시간 동안 유효한 이러한 임시 자격 증명은 애플리케이션이 AWS 서비스를 호출할 때 사용됩니다. SDK는 임시 자격 증명 관리 작업을 처리합니다. 도메인 병합 사용자 계정의 경우 애플리케이션에서 호출을 하지만 자격 증명이 만료되었다면 사용자는 자동으로 재인증되어 새로운 자격 증명이 부여됩니다. (도메인에 가입되지 않은 계정의 경우 재인증 전에 자격 증명을 입력하라는 메시지가 표시됩니다.)

.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/v4/apidocs/items/Amazon/TAWSConfigs.html) 속성을 사용하는 것입니다.

*AWS Security Token Service* 어셈블리([AWSSDK.SecurityToken](https://www.nuget.org/packages/AWSSDK.SecurityToken/))는 자격 AWS 증명을 얻기 위한 SAML 지원을 제공합니다. 페더레이션 사용자 계정 보안 인증을 사용하려면 애플리케이션에서 이 어셈블리를 사용할 수 있어야 합니다.

## 역할 또는 임시 자격 증명 지정
<a name="net-dg-config-creds-assign-role"></a>

Amazon EC2 인스턴스에서 실행되는 애플리케이션의 경우 [IAM 역할을 사용하여 액세스 권한 부여](net-dg-hosm.md)의 설명과 같이 자격 증명을 관리하는 가장 안전한 방법은 IAM 역할을 사용하는 것입니다.

조직 외부의 사용자가 소프트웨어 실행 파일을 사용할 수 있는 애플리케이션 시나리오의 경우 *임시 보안 자격 증명*을 사용할 수 있도록 소프트웨어를 설계하는 것이 좋습니다. 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/v4/apidocs/items/CloudDirectory/NCloudDirectory.html) 네임스페이스의 [AmazonCloudDirectoryConfig](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/CloudDirectory/TCloudDirectoryConfig.html)와 [Amazon.GameLift](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/GameLift/NGameLift.html) 네임스페이스의 [AmazonGameLiftConfig](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/GameLift/TGameLiftConfig.html)를 예로 들 수 있습니다.

예를 들어 [Amazon S3](https://docs.aws.amazon.com/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);
```

**참고**  
이전 버전의 SDK에서는 `ProxyUsername`과 `ProxyPassword`를 사용하였으나 이 속성들은 사용이 중단되었습니다.

# 재시도 및 제한 시간
<a name="retries-timeouts"></a>

를 AWS SDK for .NET 사용하면 AWS 서비스에 대한 HTTP 요청의 재시도 횟수와 제한 시간 값을 구성할 수 있습니다. 재시도 횟수 및 제한 시간의 기본값이 해당 애플리케이션에 적절하지 않은 경우 특정 요구사항에 맞게 조정할 수 있지만, 그렇게 함으로써 해당 애플리케이션의 작동에 어떤 영향을 미칠지 먼저 이해하는 것이 중요합니다.

재시도 횟수 및 제한 시간에 어떤 값을 사용할지 결정하려면 다음 사항을 고려하십시오.
+ 네트워크 연결이 저하되거나 AWS 서비스에 연결할 수 없는 경우 AWS SDK for .NET 및 애플리케이션은 어떻게 응답해야 합니까? 호출이 신속하게 실패하길 원하는가, 아니면 호출이 사용자를 대신하여 계속 재시도하는 것이 적절한가?
+ 해당 애플리케이션은 응답이 필수적인 사용자 지향 애플리케이션이나 웹 사이트인가, 아니면 지연 시간 증가를 더 많이 허용하는 백그라운드 처리 작업인가?
+ 애플리케이션이 지연 시간이 짧은 안정적인 네트워크에 배포되는가, 아니면 연결성이 불안정한 원격 위치에 배포되는가?

## 재시도
<a name="retries"></a>

### 개요
<a name="w2aac11c23c11b5"></a>

는 서버 측 제한 또는 연결 끊김으로 인해 실패한 요청을 재시도할 AWS SDK for .NET 수 있습니다. 서비스 구성 클래스에는 서비스 클라이언트의 재시도 동작을 지정하는 데 사용할 수 있는 두 가지 속성이 있습니다. 서비스 구성 클래스는 [AWS SDK for .NET API 참조](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/)의 추상 [Amazon.Runtime.ClientConfig](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/TClientConfig.html) 클래스에서 다음과 같은 속성을 상속합니다.
+ `RetryMode`는 [Amazon.Runtime.RequestRetryMode](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/TRequestRetryMode.html) 열거에 정의된 세 가지 재시도 모드 중 하나를 지정합니다.

  애플리케이션의 기본값은 `AWS_RETRY_MODE` 환경 변수 또는 공유 AWS 구성 파일의 *retry\$1mode* 설정을 사용하여 제어할 수 있습니다.
+ `MaxErrorRetry`는 서비스 클라이언트 수준에서 허용되는 재시도 횟수를 지정합니다. SDK는 작업이 실패하고 예외가 발생하기 전에 지정된 횟수만큼 작업을 재시도합니다.

  애플리케이션의 기본값은 `AWS_MAX_ATTEMPTS` 환경 변수 또는 공유 AWS 구성 파일의 *max\$1attempts* 설정을 사용하여 제어할 수 있습니다.

이러한 속성에 대한 자세한 설명은 [AWS SDK for .NET API 참조](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/)의 추상 [Amazon.Runtime.ClientConfig](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/TClientConfig.html) 클래스에서 확인할 수 있습니다. `RetryMode`의 각 값은 기본적으로 다음 표에 표시된 것처럼 `MaxErrorRetry`의 특정 값에 해당합니다.

|  |  |  | 
| --- |--- |--- |
| Legacy | 10 | 4 | 
| Standard | 10 | 2 | 
| Adaptive (experimental) | 10 | 2 | 

### 동작
<a name="w2aac11c23c11b9"></a>

**애플리케이션이 시작되는 시점**

애플리케이션이 시작되면 SDK에서 `RetryMode` 및 `MaxErrorRetry`의 기본값을 구성합니다. 이러한 기본값은 다른 값을 지정하지 않는 한 서비스 클라이언트를 생성할 때 사용됩니다.
+ 환경에 속성이 설정되지 않은 경우 `RetryMode`의 기본값은 레거시로 구성되고 `MaxErrorRetry`의 기본값은 위 표의 해당 값으로 구성됩니다.**
+ 환경에서 재시도 모드가 설정된 경우 해당 값이 `RetryMode`의 기본값으로 사용됩니다. 환경에 최대 오류 값도 설정되어 있지 않은 경우(다음 설명 참조) `MaxErrorRetry`의 기본값은 위 표의 해당 값으로 구성됩니다.
+ 환경에서 최대 오류 값이 설정된 경우 해당 값이 `MaxErrorRetry`의 기본값으로 사용됩니다. Amazon DynamoDB는 이 규칙의 예외입니다. `MaxErrorRetry`에 대한 DynamoDB의 기본 값은 항상 위 표의 값입니다.

**애플리케이션이 실행될 때**

서비스 클라이언트를 생성할 때 앞에서 설명한 대로 `RetryMode` 및 `MaxErrorRetry`의 기본값을 사용하거나 다른 값을 지정할 수 있습니다. 다른 값을 지정하려면 서비스 클라이언트를 생성할 때 [AmazonDynamoDBConfig](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/DynamoDBv2/TDynamoDBConfig.html) 또는 [AmazonSQSConfig](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/TSQSConfig.html)와 같은 서비스 구성 객체를 생성하여 포함시킵니다.

서비스 클라이언트가 생성된 이후에는 그 값을 바꿀 수 없습니다.

**고려 사항**

재시도가 이루어지면 해당 요청의 지연 시간이 늘어납니다. 총 요청 지연 시간 및 오류율에 대한 애플리케이션의 제한에 따라 재시도를 구성해야 합니다.

## 시간 초과
<a name="timeouts"></a>

를 AWS SDK for .NET 사용하면 서비스 클라이언트 수준 및 메서드 호출당 요청 제한 시간을 구성할 수 있습니다. 제한 시간을 구성하는 두 가지 메커니즘이 있으며, 이는 후속 섹션에서 다룹니다.
+ [비동기 직접 호출](#timeouts-async)을 사용하는 경우 메서드의 `CancellationToken` 파라미터를 사용할 수 있습니다.
+ [.NET Framework에서 동기 직접 호출](#timeouts-sync-framework)을 사용하는 경우 추상 [Amazon.Runtime.ClientConfig](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/TClientConfig.html) 클래스의 `Timeout` 및 `ReadWriteTimeout` 속성을 사용할 수 있습니다.

### 제한 시간에 `CancellationToken` 파라미터 사용
<a name="timeouts-async"></a>

를 AWS SDK for .NET 사용하면 `CancellationToken` 파라미터를 사용하여 비동기 호출에 대한 요청 제한 시간을 구성할 수 있습니다. 다음 코드 조각은 예제를 보여 줍니다. 요청이 10초 이내에 완료되지 않으면 코드에서 `System.Threading.Tasks.TaskCanceledException`이 발생합니다.

```
string bucketName = "amzn-s3-demo-bucket";
string path = "pathToBucket";
using (var amazonS3Client = new AmazonS3Client(new AmazonS3Config()))
{
    // Cancel request after 10 seconds
    CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromMilliseconds(10000));
    CancellationToken cancellationToken = cancellationTokenSource.Token;
    ListObjectsV2Request listRequestV2 = new()
    {
        BucketName = bucketName,
        Prefix = path,
    };

    ListObjectsV2Response listResponseV2 = await amazonS3Client.ListObjectsV2Async(listRequestV2, cancellationToken);
}
```

### 제한 시간에 `Timeout` 및 `ReadWriteTimeout` 속성 사용
<a name="timeouts-sync-framework"></a>

**참고**  
`Timeout` 속성은 비동기 직접 호출에 영향을 주지 않습니다. 비동기 직접 호출을 사용하는 경우 [제한 시간에 `CancellationToken` 파라미터 사용](#timeouts-async)을 대신 참조하세요.

를 AWS SDK for .NET 사용하면 서비스 클라이언트 수준에서 요청 제한 시간 및 소켓 읽기/쓰기 제한 시간 값을 구성할 수 있습니다. 이러한 값은 추상 [Amazon.Runtime.ClientConfig](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/TClientConfig.html) 클래스의 `Timeout` 및 `ReadWriteTimeout` 속성에 지정됩니다. 이러한 값은 AWS 서비스 클라이언트 객체에 의해 생성된 [HttpWebRequest](https://learn.microsoft.com/en-us/dotnet/api/system.net.httpwebrequest) 객체의 `Timeout` 및 `ReadWriteTimeout` 속성으로 전달됩니다. `Timeout` 값은 100초, `ReadWriteTimeout` 값은 300초로 기본 설정되어 있습니다.

해당 네트워크의 지연 시간이 길거나 작업 재시도를 유발하는 조건이 존재하는 경우 제한 시간 및 재시도 횟수의 값을 높이면 일부 SDK 작업이 응답하지 않는 것처럼 보일 수 있습니다.

**참고**  
이동식 클래스 라이브러리(PCL)를 대상으로 AWS SDK for .NET 하는의 버전은 클래스 대신 [HttpClient](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpclient) `HttpWebRequest` 클래스를 사용하며 [제한 시간](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpclient.timeout) 속성만 지원합니다.

다음은 기본 설정된 제한 시간 값에 대한 예외입니다. 제한 시간 값을 명시적으로 설정하면 이 값들은 무시됩니다.
+ `Timeout` 및 `ReadWriteTimeout`은 호출되는 메서드가 [AmazonS3Client.PutObjectAsync()](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/S3/MS3PutObjectAsyncPutObjectRequestCancellationToken.html), [AmazonS3Client.UploadPartAsync()](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/S3/MS3UploadPartAsyncUploadPartRequestCancellationToken.html), [AmazonGlacierClient.UploadArchiveAsync()](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Glacier/MGlacierUploadArchiveAsyncUploadArchiveRequestCancellationToken.html)와 같은 스트림을 업로드하는 경우 최대값으로 설정됩니다.
+ .NET Framework를 대상으로 AWS SDK for .NET 하는의 버전은 `Timeout` 및 `ReadWriteTimeout`를 모든 [AmazonS3Client](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/S3/TS3Client.html) 및 [AmazonGlacierClient](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Glacier/TGlacierClient.html) 객체의 최대값으로 설정합니다.
+ 휴대용 클래스 라이브러리(PCL) 및 .NET Core를 대상으로 AWS SDK for .NET 하는의 버전은 모든 [AmazonS3Client](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/S3/TS3Client.html) 및 [AmazonGlacierClient](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Glacier/TGlacierClient.html) 객체의 최대값`Timeout`으로 설정됩니다.

다음 예제에서는 *표준* 재시도 모드, 최대 3회의 재시도, 제한 시간 10초, 쓰기/읽기 제한 시간 10초를 지정하는 방법을 보여줍니다(해당하는 경우). [AmazonS3Client](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/S3/TS3Client.html) 생성자에는 [AmazonS3Config](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/S3/TS3Config.html) 객체가 제공됩니다.

```
var s3Client = new AmazonS3Client(
  new AmazonS3Config
  {
    Timeout = TimeSpan.FromSeconds(10),
    // NOTE: The following property is obsolete for
    //       versions of the AWS SDK for .NET that target .NET Core.
    ReadWriteTimeout = TimeSpan.FromSeconds(10),
    RetryMode = RequestRetryMode.Standard,
    MaxErrorRetry = 3
  });
```

# 관찰성
<a name="observability"></a>

관찰성은 시스템의 현재 상태를 내보내는 데이터에서 추론할 수 있는 범위입니다. 방출되는 데이터를 일반적으로 원격 측정이라고 합니다.

는 두 가지 일반적인 원격 측정 신호, 지표 및 추적과 로깅을 제공할 AWS SDK for .NET 수 있습니다. [TelemetryProvider](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/TTelemetryProvider.html)를 연결하여 원격 측정 데이터를 관찰성 백엔드(예: [AWS X-Ray](https://docs.aws.amazon.com/xray/?icmpid=docs_homepage_devtools) 또는 [Amazon CloudWatch](https://docs.aws.amazon.com/cloudwatch/?icmpid=docs_homepage_mgmtgov))로 전송한 다음 조치를 취할 수 있습니다.

기본적으로 원격 측정 신호는 SDK에서 비활성화됩니다. 이 주제에서는 원격 측정 출력을 활성화하고 구성하는 방법을 설명합니다.

## 추가 리소스
<a name="observability-resources"></a>

관찰성 활성화 및 사용에 대한 자세한 내용은 다음 리소스를 참조하세요.
+ [OpenTelemetry](https://opentelemetry.io/)
+ 블로그 게시물 [Enhancing Observability in the AWS SDK for .NET with OpenTelemetry](https://aws.amazon.com/blogs/developer/enhancing-observability-in-the-aws-sdk-for-net-with-opentelemetry/).
+ 블로그 게시물 [Announcing the general availability of AWS .NET OpenTelemetry library](https://aws.amazon.com/blogs/dotnet/announcing-the-general-availability-of-aws-net-opentelemetry-libraries/).
+ [OpenTelemetry용 익스포터](https://opentelemetry.io/docs/languages/net/exporters/)
+ 의 관찰성 예제는 [Tools for PowerShell 사용 설명서](https://docs.aws.amazon.com/powershell/latest/userguide/)의 [관찰성을](https://docs.aws.amazon.com/powershell/latest/userguide/observability.html) AWS Tools for PowerShell참조하세요.

## `TelemetryProvider` 구성
<a name="observability-conf-telemetry-provider"></a>

다음 예제와 같이 모든 서비스 클라이언트 또는 개별 클라이언트에 대해 애플리케이션에서 `TelemetryProvider`를 전역적으로 구성할 수 있습니다. [원격 측정 공급자](observability-telemetry-providers.md) 섹션에는 SDK와 함께 제공되는 구현에 대한 정보를 포함하여 원격 측정 구현에 대한 정보가 포함되어 있습니다.

### 기본 글로벌 원격 측정 공급자 구성
<a name="observability-conf-telemetry-provider-global"></a>

기본적으로 모든 서비스 클라이언트는 전역적으로 사용 가능한 원격 측정 공급자를 사용하려고 시도합니다. 이렇게 하면 공급자를 한 번 설정할 수 있으며, 모든 클라이언트가 공급자를 사용합니다. 이 작업은 서비스 클라이언트를 생성하기 전에 한 번만 수행해야 합니다.

다음 코드 조각은 글로벌 원격 측정 공급자를 설정하는 방법을 보여 줍니다. 그런 다음 Amazon S3 서비스 클라이언트를 생성한 다음 실패하는 작업을 수행하려고 시도합니다. 코드는 애플리케이션에 추적 및 지표를 모두 추가합니다. 이 코드는 `OpenTelemetry.Exporter.Console` 및 `OpenTelemetry.Instrumentation.AWS`의 NuGet 패키지를 사용합니다.

**참고**  
인증 AWS IAM Identity Center 에를 사용하는 경우 `AWSSDK.SSO` 및 도 추가해야 합니다`AWSSDK.SSOOIDC`.

```
using Amazon.S3;
using OpenTelemetry;
using OpenTelemetry.Metrics;
using OpenTelemetry.Resources;
using OpenTelemetry.Trace;

Sdk.CreateTracerProviderBuilder()
    .ConfigureResource(e => e.AddService("DemoOtel"))
    .AddAWSInstrumentation()
    .AddConsoleExporter()
    .Build();

Sdk.CreateMeterProviderBuilder()
    .ConfigureResource(e => e.AddService("DemoOtel"))
    .AddAWSInstrumentation()
    .AddConsoleExporter()
    .Build();

var s3Client = new AmazonS3Client();

try
{
    var listBucketsResponse = await s3Client.ListBucketsAsync();
    // Attempt to delete a bucket that doesn't exist.
    var deleteBucketResponse = await s3Client.DeleteBucketAsync("amzn-s3-demo-bucket");
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}

Console.Read();
```

### 특정 서비스 클라이언트에 대한 원격 측정 공급자 구성
<a name="observability-conf-telemetry-provider-client"></a>

특정 원격 측정 공급자(글로벌 공급자 제외)를 사용하여 개별 서비스 클라이언트를 구성할 수 있습니다. 이렇게 하려면 서비스 클라이언트 생성자의 Config 객체 `TelemetryProvider` 클래스를 사용합니다. 예를 들어 [AmazonS3Config](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/S3/TS3Config.html)를 참조하고 `TelemetryProvider` 속성을 찾습니다. 사용자 지정 원격 측정 구현에 대한 자세한 내용은 [원격 측정 공급자](observability-telemetry-providers.md) 섹션을 참조하세요.

**Topics**
+ [추가 리소스](#observability-resources)
+ [`TelemetryProvider` 구성](#observability-conf-telemetry-provider)
+ [Metrics](observability-metrics.md)
+ [원격 측정 공급자](observability-telemetry-providers.md)

# Metrics
<a name="observability-metrics"></a>

다음 표에는 SDK가 내보내는 원격 측정 지표가 나열되어 있습니다. 지표를 관찰할 수 있도록 [원격 측정 공급자를 구성합니다](observability.md#observability-conf-telemetry-provider).


**방출되는 지표는 무엇입니까?**  

| 메트릭 이름 | 단위 | 유형 | 속성 | 설명 | 
| --- | --- | --- | --- | --- | 
| client.call.duration | s | 히스토그램(Histogram) | rpc.service, rpc.method | 전체 통화 기간(재시도 및 요청 및 응답 본문을 보내거나 받는 시간 포함) | 
| client.uptime | s | 히스토그램(Histogram) | rpc.service | 클라이언트가 생성된 이후 경과한 시간 | 
| client.call.attempts | \$1시도\$1 | MonotonicCounter | rpc.service, rpc.method | 개별 작업에 대한 시도 횟수 | 
| client.call.errors | \$1오류\$1 | MonotonicCounter | rpc.service, rpc.method, exception.type | 작업의 오류 수 | 
| client.call.attempt\$1duration | s | 히스토그램(Histogram) | rpc.service, rpc.method | 서비스에 연결하고, 요청을 보내고, HTTP 상태 코드 및 헤더를 다시 가져오는 데 걸리는 시간(전송 대기 시간 포함) | 
| client.call.resolve\$1endpoint\$1duration | s | 히스토그램(Histogram) | rpc.service, rpc.method | 요청에 대한 엔드포인트(DNS가 아닌 엔드포인트 해석기)를 해결하는 데 걸리는 시간 | 
| client.call.serialization\$1duration | s | 히스토그램(Histogram) | rpc.service, rpc.method | 메시지 본문을 직렬화하는 데 걸리는 시간 | 
| client.call.deserialization\$1duration | s | 히스토그램(Histogram) | rpc.service, rpc.method | 메시지 본문을 역직렬화하는 데 걸리는 시간 | 
| client.call.auth.signing\$1기간 | s | 히스토그램(Histogram) | rpc.service, rpc.method | 요청에 서명하는 데 걸리는 시간 | 
| client.call.auth.resolve\$1identity\$1duration | s | 히스토그램(Histogram) | rpc.service, rpc.method | 자격 증명 공급자로부터 자격 증명(예: AWS 자격 증명 또는 보유자 토큰)을 획득하는 데 걸리는 시간 | 
| client.http.bytes\$1sent | By | MonotonicCounter | server.address | HTTP 클라이언트가 보낸 총 바이트 수 | 
| client.http.bytes\$1received | By | MonotonicCounter | server.address | HTTP 클라이언트가 수신한 총 바이트 수 | 

다음은 열 설명입니다.
+ **지표 이름** - 내보낸 지표의 이름입니다.
+ **단위** - 지표의 측정 단위입니다. 단위는 [UCUM](https://unitsofmeasure.org/ucum) 대/소문자를 구분하는(“c/s”) 표기법으로 제공됩니다.
+ **유형** - 지표를 캡처하는 데 사용되는 계측의 유형입니다.
+ **속성** - 지표로 내보낸 속성(차원) 세트입니다.
+ **설명** - 지표가 측정하는 항목에 대한 설명입니다.

# 원격 측정 공급자
<a name="observability-telemetry-providers"></a>

SDK는 [다음 섹션에](observability-telemetry-providers-otel.md) 설명된 원격 측정 공급자로 [OpenTelemetry](https://opentelemetry.io/)를 구현합니다.

특정 원격 측정 요구 사항이 있거나, 이미 원격 측정 솔루션을 염두에 두고 있거나, 원격 측정 데이터를 캡처하고 처리하는 방법을 세밀하게 제어해야 하는 경우 자체 원격 측정 공급자를 구현할 수도 있습니다.

[TelemetryProvider](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/TTelemetryProvider.html) 클래스에 자체 구현을 등록합니다. 다음은 자체 `TracerProvider` 및를 등록하는 방법의 간단한 예입니다`MeterProvider`.

```
using Amazon;
using Amazon.Runtime.Telemetry;
using Amazon.Runtime.Telemetry.Metrics;
using Amazon.Runtime.Telemetry.Tracing;

public class CustomTracerProvider : TracerProvider
{
    // Implement custom tracing logic here
}
public class CustomMeterProvider : MeterProvider
{
    // Implement custom metrics logic here
}

// Register custom implementations
AWSConfigs.TelemetryProvider.RegisterTracerProvider(new CustomTracerProvider());
AWSConfigs.TelemetryProvider.RegisterMeterProvider(new CustomMeterProvider());
```

**Topics**
+ [OpenTelemetry](observability-telemetry-providers-otel.md)

# OpenTelemetry 기반 원격 측정 공급자 구성
<a name="observability-telemetry-providers-otel"></a>

에는 OpenTelemetry 기반 원격 측정 공급자의 구현이 AWS SDK for .NET 포함되어 있습니다. 이 공급자를 글로벌 원격 측정 공급자로 설정하는 방법에 대한 자세한 내용은 [`TelemetryProvider` 구성](observability.md#observability-conf-telemetry-provider) 섹션을 참조하세요. 이 원격 측정 공급자를 사용하려면 프로젝트에 다음 리소스가 필요합니다.
+ [OpenTelemetry.Instrumentation.AWS](https://www.nuget.org/packages/OpenTelemetry.Instrumentation.AWS) NuGet 패키지입니다.
+ OTLP 또는 콘솔과 같은 원격 측정 익스포터입니다. 자세한 내용은 OpenTelemetry 설명서의 [익스포터](https://opentelemetry.io/docs/languages/net/exporters/) 섹션을 참조하세요.

SDK에 포함된 OpenTelemetry 구현은 HTTPS 요청, 자격 증명 및 압축에 대한 추적 양을 줄이도록 구성할 수 있습니다. 이렇게 하려면 다음과 같이 `SuppressDownstreamInstrumentation` 옵션을 `true`로 설정합니다.

```
Sdk.CreateTracerProviderBuilder()
    .ConfigureResource(e => e.AddService("DemoOtel"))
    .AddAWSInstrumentation(options => options.SuppressDownstreamInstrumentation = true)
    .AddConsoleExporter()
    .Build();
```

이 공급자에 대한 자세한 내용은 [ OpenTelemetry를 AWS SDK for .NET 사용하여의 관찰성 향상](https://aws.amazon.com/blogs/developer/enhancing-observability-in-the-aws-sdk-for-net-with-opentelemetry/) 블로그 게시물을 참조하세요.

# 사용자 및 역할에 대한 추가 정보
<a name="net-dg-users-roles"></a>

에서 .NET 개발을 수행 AWS 하거나에서 .NET 애플리케이션을 실행 AWS하려면 이러한 작업에 적합한 사용자, 권한 세트 및 서비스 역할의 조합이 있어야 합니다.

만드는 특정 사용자, 권한 집합 및 서비스 역할과 이를 사용하는 방식은 애플리케이션의 요구 사항에 따라 달라집니다. 다음은 사용 이유 및 생성 방법에 대한 몇 가지 추가 정보입니다.

## 사용자 및 권한 집합
<a name="net-dg-users-roles-user"></a>

장기 보안 인증 정보가 있는 IAM 사용자 계정을 사용하여 AWS 서비스에 액세스할 수는 있지만 이는 더 이상 모범 사례가 아니므로 피해야 합니다. 개발 중에도에서 사용자 및 권한 세트를 생성하고 자격 증명 소스에서 제공하는 임시 자격 증명을 AWS IAM Identity Center 사용하는 것이 가장 좋습니다.

개발 시에는 직접 생성했거나 [를 사용하여 인증 AWS](creds-idc.md)에서 부여받은 사용자를 사용할 수 있습니다. 적절한 AWS Management Console 권한이 있는 경우 해당 사용자에 대해 최소 권한이 있는 다른 권한 세트를 생성하거나 개발 프로젝트에 대해 특별히 새 사용자를 생성하여 최소 권한이 있는 권한 세트를 제공할 수도 있습니다. 어떤 방법을 선택할지는 상황에 따라 달라집니다.

이러한 사용자 및 권한 세트와 생성 방법에 대한 자세한 내용은 **AWS SDK 및 도구 참조 가이드의 [인증 및 액세스](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 Management Console 하고 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)://https://https://https://https://://https://://https://://https://://https://://https://://https://://

1. **역할**을 선택한 다음 **역할 생성**을 선택합니다.

1. **AWS 서비스**를 선택하고, **EC2**(예: EC2)를 찾아 선택한 다음 **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/)의 [ID(사용자, 그룹 및 역할)](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)을 사용하십시오.

# AWS SDK for .NET 프로젝트의 고급 구성
<a name="net-dg-advanced-config"></a>

이 섹션의 주제에는 관심이 있을 만한 추가 구성 작업 및 방법에 대한 정보가 포함되어 있습니다.

**Topics**
+ [AWSSDK.Extensions.NETCore.Setup 및 IConfiguration](net-dg-config-netcore.md)
+ [기타 애플리케이션 파라미터 구성](net-dg-config-other.md)
+ [에 대한 구성 파일 참조 AWS SDK for .NET](net-dg-config-ref.md)

# AWSSDK.Extensions.NETCore.Setup 및 IConfiguration 인터페이스 사용
<a name="net-dg-config-netcore"></a>

(이 주제의 이전 제목은 ".NET Core AWS SDK for .NET 로 구성"입니다.)

.NET Core의 가장 큰 변경 사항 중 하나는 `ConfigurationManager`의 제거와 .NET Framework 및 ASP.NET 애플리케이션에서 사용되던 표준 `app.config` 및 `web.config` 파일의 제거입니다.

.NET Core 구성은 구성 공급자에 의해 설정된 키-값 페어를 기반으로 합니다. 구성 공급자는 명령줄 인수, 디렉터리 파일, 환경 변수, 설정 파일 등 다양한 구성 소스에서 구성 데이터를 키-값 페어로 읽어 들입니다.

**참고**  
자세한 내용은 [ASP.NET Core 구성](https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration)을 참조하십시오.

.NET Core AWS SDK for .NET 에서를 쉽게 사용할 수 있도록 [AWSSDK.Extensions.NETCore.Setup](https://www.nuget.org/packages/AWSSDK.Extensions.NETCore.Setup/) NuGet 패키지를 사용할 수 있습니다. 많은 .NET Core 라이브러리와 마찬가지로 `IConfiguration` 인터페이스에 확장 메서드를 추가하여 AWS 구성을 원활하게 만듭니다.

이 패키지의 소스 코드는 [https://github.com/aws/aws-sdk-net/tree/main/extensions/src/AWSSDK.Extensions.NETCore.Setup](https://github.com/aws/aws-sdk-net/tree/main/extensions/src/AWSSDK.Extensions.NETCore.Setup)의 GitHub에 있습니다.

## AWSSDK.Extensions.NETCore.Setup 사용법
<a name="net-core-configuration-builder"></a>

Visual Studio의 **ASP.NET Core 웹 애플리케이션** 템플릿을 사용하거나 .NET Core CLI에서 `dotnet new mvc ...`를 실행하여 수행할 수 있는 ASP.NET Core MVC(모델-뷰-컨트롤러) 애플리케이션을 생성한다고 가정하겠습니다. 이러한 애플리케이션을 생성하는 경우 `Startup.cs`의 생성자는 `appsettings.json`과 같은 구성 공급자의 다양한 입력 소스에서 읽어 구성을 처리합니다.

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

`Configuration` 객체를 사용하여 *AWS* 옵션을 얻으려면 먼저 `AWSSDK.Extensions.NETCore.Setup` NuGet 패키지를 추가합니다. 그런 다음, 다음에 설명한 대로 구성 파일에 해당 옵션을 추가합니다.

프로젝트에 추가된 파일 중 하나가 `appsettings.Development.json`입니다. 이는 `EnvironmentName`을 **개발**로 설정한 것에 해당합니다. 개발 중에는 로컬 테스트 중에만 읽을 수 있는 이 파일에 구성을 입력합니다. 가 **프로덕션**으로 `EnvironmentName` 설정된 Amazon EC2 인스턴스를 배포하면이 파일은 무시되고는 Amazon EC2 인스턴스에 대해 구성된 IAM 자격 증명 및 리전으로 AWS SDK for .NET 돌아갑니다.

다음 구성에서는 AWS 설정 값을 제공하기 위해 프로젝트의 `appsettings.Development.json` 파일에서 추가할 수 있는 값들의 예를 보여줍니다.

```
{
  "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>();
```

`service1`의 구성에는 `us-west-2` 리전이 포함되고 `service2`의 구성에 특수 엔드포인트 *URL*이 포함된 다음 예제와 같이 `appsettings.Development.json` 파일의 여러 항목을 사용하여 설정이 호환되지 않는 여러 서비스 클라이언트를 생성할 수도 있습니다.

```
{
  "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/v4/apidocs/items/Runtime/TClientConfig.html)` 클래스를 참조하세요.
+ 리전
+ 프로필
+ 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 패키지는 종속성 주입에 AWS 서비스를 추가하는 데 사용할 수 `IServiceCollection` 있는 새로운 확장 방법을에 추가합니다. 다음 코드는에서 읽는 AWS 옵션을 추가하여 서비스 목록에 Amazon S3 및 DynamoDB를 `IConfiguration` 추가하는 방법을 보여줍니다. ([AWSSDK.S3](https://www.nuget.org/packages/AWSSDK.S3) 및 [AWSSDK.DynamoDBv2](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를 기반으로 하는 프로젝트에만 해당됩니다. .NET Core 기반 프로젝트에는 기본적으로 `App.config` 및 `Web.config` 파일이 표시되지 않습니다.

## 열어서 .NET Framework 콘텐츠 확인
<a name="w2aac11c29b9b5b1"></a>

구성할 수 있는 애플리케이션 파라미터는 여러 가지입니다.
+  `AWSLogging` 
+  `AWSLogMetrics` 
+  `AWSRegion` 
+  `AWSResponseLogging` 
+  `AWS.DynamoDBContext.TableNamePrefix` 
+  `AWS.S3.UseSignatureVersion4` 
+  `AWSEndpointDefinition` 
+  [AWS 서비스 생성 엔드포인트](#config-setting-service-generated-awsendpointdefinition) 

이 파라미터들은 애플리케이션의 `App.config` 또는 `Web.config` 파일에서 구성할 수 있습니다. AWS SDK for .NET API를 사용하여 이를 구성할 수도 있지만 애플리케이션의 `.config` 파일을 사용하는 것이 좋습니다. 여기에 두 방식이 모두 설명되어 있습니다.

이 주제 후반부에 설명된 `<aws>` 요소 사용에 대한 자세한 내용은 [AWS SDK for .NET에 대한 구성 파일 참조](net-dg-config-ref.md)를 참조하세요.

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

SDK에서 이벤트를 로깅하는 방식을 구성합니다. 예를 들면 권장할 만한 방식은 다음과 같이 `<logging>` 요소의 하위 요소인 `<aws>` 요소를 사용하는 것입니다.

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

대안:

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

가능한 값은 다음과 같습니다.

** `None` **  
 이벤트 로깅을 해제합니다. 기본값입니다.

** `log4net` **  
log4net을 사용하여 로깅합니다.

** `SystemDiagnostics` **  
`System.Diagnostics` 클래스를 사용하여 로깅합니다.

`logTo` 속성에 대해 쉼표로 구분된 여러 값을 설정할 수 있습니다. 다음 예제에서는 `log4net` 파일에서 `System.Diagnostics` 및 `.config` 로깅을 설정합니다.

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

대안:

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

또는 AWS SDK for .NET API를 사용하여 [LoggingOptions](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Amazon/TLoggingOptions.html) 열거의 값을 결합하고 [AWSConfigs.Logging](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Amazon/TAWSConfigs.html) 속성을 설정합니다.

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

이 설정에 대한 변경 사항은 새 AWS 클라이언트 인스턴스에만 적용됩니다.

### AWSLogMetrics
<a name="config-setting-awslogmetrics"></a>

SDK가 성능 측정치를 로깅해야 하는지 여부를 지정합니다. `.config` 파일에서 측정치 로깅 구성을 설정하려면 `logMetrics` 요소의 하위 요소인 `<logging>` 요소에서 `<aws>` 속성 값을 설정합니다.

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

또는 다음과 같이 `AWSLogMetrics` 섹션에서 `<appSettings>` 키를 설정할 수 있습니다.

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

또는 AWS SDK for .NET API를 사용하여 지표 로깅을 설정하려면 [AWSConfigs.LogMetrics](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Amazon/TAWSConfigs.html) 속성을 설정합니다.

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

이 설정에서는 모든 클라이언트/구성에 대해 기본값인 `LogMetrics` 속성을 구성합니다. 이 설정에 대한 변경 사항은 새 AWS 클라이언트 인스턴스에만 적용됩니다.

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

 AWS 리전을 명시적으로 지정하지 않은 클라이언트의 기본 리전을 구성합니다. `.config` 파일에서 리전을 설정할 때 권장할 만한 방식은 다음과 같이 `region` 요소에서 `aws` 속성 값을 설정하는 것입니다.

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

또는 다음과 같이 `<appSettings>` 섹션에서 *AWSRegion* 키를 설정할 수 있습니다.

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

또는 AWS SDK for .NET API를 사용하여 리전을 설정하려면 [AWSConfigs.AWSRegion](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Amazon/TAWSConfigs.html) 속성을 설정합니다.

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

특정 리전에 대한 AWS 클라이언트 생성에 대한 자세한 내용은 [AWS 리전 선택을](net-dg-region-selection.md) 참조하세요. 이 설정에 대한 변경 사항은 새 AWS 클라이언트 인스턴스에만 적용됩니다.

### AWSResponseLogging
<a name="config-setting-awsresponselogging"></a>

SDK에서 서비스 응답을 로깅해야 할 경우에 구성. 가능한 값은 다음과 같습니다.

** `Never` **  
서비스 응답을 로깅하지 않음. 기본값입니다.

** `Always` **  
서비스 응답을 항상 로깅.

** `OnError` **  
오류가 발생할 때만 서비스 응답을 로깅.

`.config` 파일에서 서비스 로깅 구성을 설정하는 경우 권장할 만한 방식은 `logResponses` 요소의 하위 요소인 `<logging>` 요소에서 `<aws>` 속성 값을 설정하는 것입니다.

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

또는 다음과 같이 `<appSettings>` 섹션에서 *AWSResponseLogging* 키를 설정할 수 있습니다.

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

또는 AWS SDK for .NET API를 사용하여 서비스 로깅을 설정하려면 [AWSConfigs.ResponseLogging](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Amazon/TAWSConfigs.html) 속성을 [ResponseLoggingOption](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Amazon/TResponseLoggingOption.html) 열거의 값 중 하나로 설정합니다.

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

이 설정의 변경 사항은 즉시 적용됩니다.

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

수동으로 구성되지 않은 경우 `TableNamePrefix`에서 사용할 기본 `DynamoDBContext`를 구성합니다.

`.config` 파일에서 테이블 이름 접두사를 설정하는 경우 권장할 만한 방식은 그 자체로 `tableNamePrefix` 요소의 하위 요소이자 `<dynamoDBContext>` 요소의 하위 요소인 `<dynamoDB>` 요소에서 `<aws>` 속성 값을 설정하는 것입니다.

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

또는 다음과 같이 `AWS.DynamoDBContext.TableNamePrefix` 섹션에서 `<appSettings>` 키를 설정할 수 있습니다.

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

또는 API로 테이블 이름 접두사를 설정하려면 [AWSConfigs.DynamoDBContextTableNamePrefix](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Amazon/TAWSConfigs.html) 속성을 AWS SDK for .NET 설정합니다.

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

이 설정을 변경하면 `DynamoDBContextConfig` 및 `DynamoDBContext`의 새로 생성된 인스턴스에만 적용됩니다.

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

Amazon S3 클라이언트가 서명 버전 4 서명을 요청에 사용해야 하는지 여부를 구성합니다.

`.config` 파일에서 Amazon S3의 서명 버전 4 서명을 설정하려면 `<aws>` 요소의 하위 요소인 `<s3>` 요소의 `useSignatureVersion4` 속성을 설정하는 것이 좋습니다.

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

또는 다음과 같이 `<appSettings>` 섹션에서 `AWS.S3.UseSignatureVersion4` 키를 `true`로 설정할 수 있습니다.

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

또는 AWS SDK for .NET API를 사용하여 서명 버전 4 서명을 설정하려면 [AWSConfigs.S3UseSignatureVersion4](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Amazon/TAWSConfigs.html) 속성을 로 설정합니다. `true` 

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

이 설정은 `false`로 기본 설정되어 있으나 어떤 경우 또는 일부 리전에서는 서명 버전 4로 기본 설정할 수도 있습니다. 설정이 `true`인 경우 모든 요청에 서명 버전 4를 사용합니다. 이 설정에 대한 변경 사항은 새로운 Amazon S3 클라이언트 인스턴스에만 적용됩니다.

### AWSEndpointDefinition
<a name="config-setting-awsendpointdefinition"></a>

SDK에서 리전 및 엔드포인트를 정의하는 사용자 지정 구성 파일을 사용해야 하는지 여부를 구성합니다.

`.config` 파일에서 엔드포인트 정의 파일을 설정하려면 `endpointDefinition` 요소에서 `<aws>` 속성 값을 설정하는 것이 좋습니다.

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

또는 다음과 같이 `<appSettings>` 섹션에서 *AWSEndpointDefinition* 키를 설정할 수 있습니다.

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

또는 AWS SDK for .NET API를 사용하여 엔드포인트 정의 파일을 설정하려면 [AWSConfigs.EndpointDefinition](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Amazon/TAWSConfigs.html) 속성을 설정합니다.

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

파일 이름이 제공되지 않는 경우 사용자 지정 구성 파일은 사용되지 않습니다. 이 설정에 대한 변경 사항은 새 AWS 클라이언트 인스턴스에만 적용됩니다. `endpoints.json` 파일은에서 사용할 수 있습니다[https://github.com/aws/aws-sdk-net/blob/main/sdk/src/Core/endpoints.json](https://github.com/aws/aws-sdk-net/blob/main/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>

Amazon CloudSearch 클라이언트는 Amazon CloudSearch 구성 서비스에 액세스하는 데 사용됩니다. Amazon CloudSearch 구성 서비스를 사용하여 검색 도메인을 생성, 구성 및 관리합니다. 검색 도메인을 생성하려면 [CreateDomainRequest](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/CloudSearch/TCreateDomainRequest.html) 객체를 생성하고 `DomainName` 속성을 제공합니다. 요청 객체를 사용하여 [AmazonCloudSearchClient](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/CloudSearch/TCloudSearchClient.html) 객체를 생성합니다. [CreateDomain](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/CloudSearch/MCloudSearchCreateDomainCreateDomainRequest.html) 메서드를 호출합니다. 이 호출에서 반환되는 [CreateDomainResponse](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/CloudSearch/TCreateDomainResponse.html) 객체에는 `DocService` 및 `SearchService` 엔드포인트가 모두 있는 `DomainStatus` 속성이 포함되어 있습니다. [AmazonCloudSearchDomainConfig](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/CloudSearchDomain/TCloudSearchDomainConfig.html) 객체를 생성하고 이를 사용하여 [AmazonCloudSearchDomainClient](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/CloudSearchDomain/TCloudSearchDomainClient.html) 클래스의 `DocService` 및 `SearchService` 인스턴스를 초기화합니다.

```
// 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>

엔드포인트를 가져오려면 [AmazonIoTClient](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/IoT/TIoTClient.html) 객체를 AWS IoT생성하고 [DescribeEndPoint](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/IoT/MIoTDescribeEndpointDescribeEndpointRequest.html) 메서드를 호출합니다. 반환되는 [DescribeEndPointResponse](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/IoT/TDescribeEndpointResponse.html) 객체에는 `EndpointAddress`가 포함되어 있습니다. [AmazonIotDataConfig](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/IotData/TIotDataConfig.html) 객체를 생성하고 `ServiceURL` 속성을 설정한 다음 이 객체를 사용하여 [AmazonIotDataClient](https://docs.aws.amazon.com/sdkfornet/v4/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");
}
```

# 에 대한 구성 파일 참조 AWS SDK for .NET
<a name="net-dg-config-ref"></a>

**참고**  
이 항목의 정보는 .NET Framework를 기반으로 하는 프로젝트에만 해당됩니다. .NET Core 기반 프로젝트에는 기본적으로 `App.config` 및 `Web.config` 파일이 표시되지 않습니다.

## 열어서 .NET Framework 콘텐츠 확인
<a name="w2aac11c29c11b5b1"></a>

.NET 프로젝트의 `App.config` 또는 `Web.config` 파일을 사용하여 AWS 자격 증명, 로깅 옵션, AWS 서비스 엔드포인트 및 AWS 리전과 같은 AWS 설정과 Amazon DynamoDB, Amazon EC2 및 Amazon S3와 같은 AWS 서비스에 대한 일부 설정을 지정할 수 있습니다. 다음 내용은 `App.config` 또는 `Web.config` 파일의 적당한 형식을 설정하여 이러한 유형의 설정을 지정하는 방법을 기술한 것입니다.

**참고**  
`App.config` 또는 `Web.config` 파일의 `<appSettings>` 요소를 계속 사용하여 AWS 설정을 지정할 수 있지만이 주제의 뒷부분에 설명된 대로 `<configSections>` 및 `<aws>` 요소를 사용하는 것이 좋습니다. `<appSettings>` 요소에 대한 자세한 내용은 애플리케이션 구성의 `<appSettings>` 요소 예제를 참조하세요. [AWS SDK for .NET](net-dg-config.md) 

**참고**  
코드 파일에서 다음 [https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Amazon/TAWSConfigs.html](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Amazon/TAWSConfigs.html) 클래스 속성을 계속 사용하여 AWS 설정을 지정할 수 있지만 다음 속성은 더 이상 사용되지 않으며 향후 릴리스에서 지원되지 않을 수 있습니다.  
 `DynamoDBContextTableNamePrefix` 
 `EC2UseSignatureVersion4` 
 `LoggingOptions` 
 `LogMetrics` 
 `ResponseLoggingOption` 
 `S3UseSignatureVersion4` 
일반적으로 코드 파일의 `AWSConfigs` 클래스 속성을 사용하여 AWS 설정을 지정하는 대신 또는 `App.config` `Web.config` 파일의 `<configSections>` 및 `<aws>` 요소를 사용하여이 주제의 뒷부분에 설명된 대로 AWS 설정을 지정하는 것이 좋습니다. 이전 속성에 대한 자세한 내용은 애플리케이션 구성의 `AWSConfigs` 코드 예제를 참조하세요. [AWS SDK for .NET](net-dg-config.md) 

**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)
+ [로그](#net-dg-config-ref-elements-logging)
+ [map](#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>` 요소는 한 가지 형식에 맞게 구성된 테이블과는 다른 테이블을 지정하는 한 개 이상의 테이블 매핑(from-table에서 to-table로 매핑) 모음에 있는 단일 항목을 나타냅니다. 이 요소는 AWS SDK for .NET의 `Amazon.AWSConfigs.DynamoDBConfig.Context.TableAliases` 속성에서 `Amazon.Util.TableAlias` 클래스의 인스턴스로 매핑됩니다. 테이블 이름 접두사를 적용하기 전에 다시 매핑이 됩니다.

이 요소에는 다음과 같은 속성이 포함될 수 있습니다.

** `fromTable` **  
from-table에서 to-table로의 매핑에서 from-table 부분. 이 속성은 AWS SDK for .NET의 `Amazon.Util.TableAlias.FromTable` 속성으로 매핑됩니다.

** `toTable` **  
from-table에서 to-table로의 매핑에서 to-table 부분. 이 속성은 AWS SDK for .NET의 `Amazon.Util.TableAlias.ToTable` 속성으로 매핑됩니다.

`<alias>` 요소의 부모는 `<tableAliases>` 요소입니다.

`<alias>` 요소에는 하위 요소가 포함되어 있지 않습니다.

다음은 사용 중인 `<alias>` 요소의 예입니다.

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

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

`<aws>` 요소는 AWS 설정 섹션에서 최상위 요소를 나타냅니다. 이 요소에는 다음과 같은 속성이 포함될 수 있습니다.

** `endpointDefinition` **  
사용할 AWS 리전과 엔드포인트를 정의하는 사용자 지정 구성 파일의 절대 경로입니다. 이 속성은 AWS SDK for .NET의 `Amazon.AWSConfigs.EndpointDefinition` 속성으로 매핑됩니다.

** `profileName` **  
서비스 호출에 사용할 저장된 AWS 자격 증명의 프로필 이름입니다. 이 속성은 AWS SDK for .NET의 `Amazon.AWSConfigs.AWSProfileName` 속성으로 매핑됩니다.

** `profilesLocation` **  
다른 AWS SDKs. 기본적으로 자격 증명 파일은 현재 사용자의 홈 디렉터리에 있는 `.aws` 디렉터리에 저장됩니다. 이 속성은 AWS SDK for .NET의 `Amazon.AWSConfigs.AWSProfilesLocation` 속성으로 매핑됩니다.

** `region` **  
 AWS 리전을 명시적으로 지정하지 않은 클라이언트의 기본 리전 ID입니다. 이 속성은 AWS SDK for .NET의 `Amazon.AWSConfigs.AWSRegion` 속성으로 매핑됩니다.

`<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의 설정 모음을 나타냅니다. 이 요소에는 .NET 및 DynamoDB 객체 간 변환에 사용할 버전을 나타내는 *conversionSchema* 속성이 포함될 수 있습니다. 허용되는 값은 V1, V2 등입니다. 이 속성은 AWS SDK for .NET의 `Amazon.DynamoDBv2.DynamoDBEntryConversion` 클래스로 매핑됩니다. 자세한 내용은 [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의 상황에 맞는 설정 모음을 나타냅니다. 이 요소에는 수동으로 구성하지 않은 경우 DynamoDB 컨텍스트에서 사용할 기본 테이블 이름 접두사를 나타내는 *tableNamePrefix* 속성이 포함될 수 있습니다. 이 속성은 AWS SDK for .NET의 `Amazon.AWSConfigs.DynamoDBConfig.Context.TableNamePrefix` 속성에서 `Amazon.Util.DynamoDBContextConfig.TableNamePrefix` 속성으로 매핑됩니다. 자세한 내용은 [DynamoDB SDK의 개선점](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 설정 모음을 나타냅니다. 이 요소에는 모든 요청에 서명 버전 4 서명을 사용할 것인지(true) 또는 모든 요청에 서명 버전 4 서명을 사용하지 않을 것인지(false, 기본값)를 지정하는 *useSignatureVersion4* 속성이 포함될 수 있습니다. 이 속성은 AWS SDK for .NET의 `Amazon.AWSConfigs.EC2Config.UseSignatureVersion4` 속성에서 `Amazon.Util.EC2Config.UseSignatureVersion4` 속성으로 매핑됩니다.

`<ec2>` 요소의 부모가 그 요소입니다.

`<ec2>` 요소에는 하위 요소가 포함되어 있지 않습니다.

다음은 사용 중인 `<ec2>` 요소의 예입니다.

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

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

`<logging>` 요소는 응답 로깅 및 성능 측정치 로깅에 대한 설정 모음을 나타냅니다. 이 요소에는 다음과 같은 속성이 포함될 수 있습니다.

** `logMetrics` **  
성능 측정치를 모든 클라이언트 및 구성에 대해 로깅(true)할지 여부를 나타냅니다. 로깅하지 않는 경우 false. 이 속성은 AWS SDK for .NET의 `Amazon.AWSConfigs.LoggingConfig.LogMetrics` 속성에서 `Amazon.Util.LoggingConfig.LogMetrics` 속성으로 매핑됩니다.

** `logMetricsCustomFormatter` **  
로깅 측정치를 위한 사용자 지정 포맷터의 데이터 유형 및 어셈블리 이름입니다. 이 속성은 AWS SDK for .NET의 `Amazon.AWSConfigs.LoggingConfig.LogMetricsCustomFormatter` 속성에서 `Amazon.Util.LoggingConfig.LogMetricsCustomFormatter` 속성으로 매핑됩니다.

** `logMetricsFormat` **  
로깅 측정치가 표시되는 형식입니다( AWS SDK for .NET의 `Amazon.AWSConfigs.LoggingConfig.LogMetricsFormat` 속성에서 `Amazon.Util.LoggingConfig.LogMetricsFormat` 속성으로 매핑됨).  
허용되는 값은 다음과 같습니다.    
** `JSON` **  
JSON 형식을 사용합니다.  
** `Standard` **  
기본 형식을 사용합니다.

** `logResponses` **  
서비스 응답을 로깅할 시점입니다( AWS SDK for .NET의 `Amazon.AWSConfigs.LoggingConfig.LogResponses` 속성에서 `Amazon.Util.LoggingConfig.LogResponses` 속성으로 매핑됨).  
허용되는 값은 다음과 같습니다.    
** `Always` **  
서비스 응답을 항상 로깅.  
** `Never` **  
서비스 응답을 로깅하지 않음.  
** `OnError` **  
오류가 있을 때만 서비스 응답을 로깅.

** `logTo` **  
에 로그인할 위치(의 `LogTo` 속성에서 `Amazon.AWSConfigs.LoggingConfig.LogTo` 속성에 매핑 AWS SDK for .NET).  
허용되는 값에는 다음 중 한 개 이상이 포함됩니다.    
** `Log4Net` **  
log4net에 로깅.  
** `None` **  
로깅을 비활성화.  
** `SystemDiagnostics` **  
System.Diagnostics에 로깅.

`<logging>` 요소의 부모는 `<aws>` 요소입니다.

`<logging>` 요소에는 하위 요소가 포함되어 있지 않습니다.

다음은 사용 중인 `<logging>` 요소의 예입니다.

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

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

`<map>` 요소는 .NET 형식에서 DynamoDB 테이블로 형식-테이블 간 매핑 모음에 있는 단일 항목을 나타냅니다( AWS SDK for .NET의 `Amazon.AWSConfigs.DynamoDBConfig.Context.TypeMappings` 속성에서 `TypeMapping` 클래스의 인스턴스로 매핑됨). 자세한 내용은 [DynamoDB SDK의 개선점](http://blogs.aws.amazon.com/net/post/Tx2C4MHH2H0SA5W/Enhancements-to-the-DynamoDB-SDK)을 참조하십시오.

이 요소에는 다음과 같은 속성이 포함될 수 있습니다.

** `targetTable` **  
매핑이 적용되는 DynamoDB 테이블입니다. 이 속성은 AWS SDK for .NET의 `Amazon.Util.TypeMapping.TargetTable` 속성으로 매핑됩니다.

** `type` **  
매핑이 적용되는 형식 및 어셈블리 이름입니다. 이 속성은 AWS SDK for .NET의 `Amazon.Util.TypeMapping.Type` 속성으로 매핑됩니다.

`<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 속성을 나타냅니다. (이 요소는의 `AddProperty` 메서드에서 Amazon.Util.PropertyConfig 클래스의 인스턴스에 매핑됩니다 AWS SDK for .NET.) 자세한 내용은 [ DynamoDB SDK 및 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` **  
범위 키 이름과 같은 속성에 대한 속성 이름입니다. 이 속성은 AWS SDK for .NET의 `Amazon.Util.PropertyConfig.Attribute` 속성으로 매핑됩니다.

** `converter` **  
이 속성에 사용해야 할 변환기의 유형입니다. 이 속성은 AWS SDK for .NET의 `Amazon.Util.PropertyConfig.Converter` 속성으로 매핑됩니다.

** `ignore` **  
연결된 속성을 무시(true)할지 여부를 나타냅니다. 무시하지 않을 경우 false. 이 속성은 AWS SDK for .NET의 `Amazon.Util.PropertyConfig.Ignore` 속성으로 매핑됩니다.

** `name` **  
속성의 이름입니다. 이 속성은 AWS SDK for .NET의 `Amazon.Util.PropertyConfig.Name` 속성으로 매핑됩니다.

** `version` **  
이 속성이 항목 버전 번호를 저장(true)할지 여부를 나타냅니다. 저장하지 않을 경우 false. 이 속성은 AWS SDK for .NET의 `Amazon.Util.PropertyConfig.Version` 속성으로 매핑됩니다.

`<property>` 요소의 부모는 `<map>` 요소입니다.

`<property>` 요소에는 하위 요소가 포함되어 있지 않습니다.

다음은 사용 중인 `<property>` 요소의 예입니다.

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

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

`<proxy>` 요소는 AWS SDK for .NET 에서 사용할 프록시를 구성하기 위한 설정을 나타냅니다. 이 요소에는 다음과 같은 속성이 포함될 수 있습니다.

**host**  
프록시 서버의 호스트 이름 또는 IP 주소입니다. 이 속성은 AWS SDK for .NET의 `Amazon.AWSConfigs.ProxyConfig.Host` 속성에서 `Amazon.Util.ProxyConfig.Host` 속성으로 매핑됩니다.

**비밀번호**  
프록시 서버로 인증하는 데 필요한 암호입니다. 이 속성은 AWS SDK for .NET의 `Amazon.AWSConfigs.ProxyConfig.Password` 속성에서 `Amazon.Util.ProxyConfig.Password` 속성으로 매핑됩니다.

**포트**  
프록시의 포트 번호입니다. 이 속성은 AWS SDK for .NET의 `Amazon.AWSConfigs.ProxyConfig.Port` 속성에서 `Amazon.Util.ProxyConfig.Port` 속성으로 매핑됩니다.

**사용자 이름**  
프록시 서버로 인증하는 데 필요한 사용자 이름입니다. 이 속성은 AWS SDK for .NET의 `Amazon.AWSConfigs.ProxyConfig.Username` 속성에서 `Amazon.Util.ProxyConfig.Username` 속성으로 매핑됩니다.

`<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 설정 모음을 나타냅니다. 이 요소에는 모든 요청에 서명 버전 4 서명을 사용할 것인지(true) 또는 모든 요청에 서명 버전 4 서명을 사용하지 않을 것인지(false, 기본값)를 지정하는 *useSignatureVersion4* 속성이 포함될 수 있습니다. 이 속성은 AWS SDK for .NET의 `Amazon.AWSConfigs.S3Config.UseSignatureVersion4` 속성으로 매핑됩니다.

`<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 및 도구 참조 가이드의 [다른 인증 방법](https://docs.aws.amazon.com/sdkref/latest/guide/access-users.html)을 참조하세요.  
보안 모범 사례를 보려면에 설명된 AWS IAM Identity Center대로를 사용합니다[를 사용하여 인증 AWS](creds-idc.md).

## 보안 인증에 대한 중요 경고 및 지침
<a name="net-dg-config-creds-warnings-and-guidelines"></a>

**보안 인증에 대한 경고**
+ 계정의 루트 자격 증명을 사용하여 AWS 리소스에 액세스***하지 마십시오***. 이 보안 인증은 계정 액세스에 제한이 없고 취소하기 어렵습니다.
+ ***금지 사항.*** 애플리케이션 파일에 리터럴 액세스 키나 보안 인증 정보를 넣으면 안 됩니다. 이를 어기는 경우, 예를 들어 프로젝트를 퍼블릭 리포지토리에 업로드하면 뜻하지 않게 보안 인증이 노출될 위험이 있습니다.
+ ***금지 사항.*** 프로젝트 영역에 보안 인증이 포함된 파일을 포함하지 마세요.
+ 공유 AWS `credentials` 파일에 저장된 모든 자격 증명은 일반 텍스트로 저장됩니다.

**보안 인증 정보를 안전하게 관리하기 위한 추가 지침**

자격 AWS 증명을 안전하게 관리하는 방법에 대한 일반적인 설명은의 [AWS 보안 자격 증명](https://docs.aws.amazon.com/general/latest/gr/Welcome.html#aws-security-credentials)[AWS 일반 참조](https://docs.aws.amazon.com/general/latest/gr/)과 [IAM 사용 설명서](https://docs.aws.amazon.com/IAM/latest/UserGuide/)의 [보안 모범 사례 및 사용 사례를](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAMBestPracticesAndUseCases.html) 참조하세요. 해당 설명과 더불어 다음 사항을 고려하세요.
+  AWS 루트 사용자 보안 인증 정보를 사용하는 대신 IAM Identity Center에 사용자 등 추가 사용자를 만들고 해당 보안 인증 정보를 사용합니다. 다른 사용자의 보안 인증 정보는 필요한 경우 또는 일시적인 경우 해지할 수 있습니다. 또한 각 사용자에게 특정 리소스 및 작업에만 액세스할 수 있도록 정책을 적용하여 최소 권한 권한을 유지할 수 있습니다.
+ Amazon EC2 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 스토어 사용(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. 또한 Visual [Studio](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/)[AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/), [JetBrains](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/) [AWS Tools for Windows PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/)및 [VS Code](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/)용 , 및 AWS 툴킷에서도 사용할 수 있습니다.

**주의**  
보안 위험을 방지하려면 목적별 소프트웨어를 개발하거나 실제 데이터로 작업할 때 IAM 사용자를 인증에 사용하지 마세요. 대신 [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)과 같은 보안 인증 공급자를 통한 페더레이션을 사용하십시오.

**참고**  
이 주제의 정보는 단기 또는 장기 보안 인증 정보를 수동으로 획득하고 관리해야 하는 상황을 위한 것입니다. 단기 및 장기 보안 인증 정보에 대한 자세한 내용은 **AWS 및 도구 참조 가이드의 [다른 인증 방법](https://docs.aws.amazon.com/sdkref/latest/guide/access-users.html)을 참조하세요.  
보안 모범 사례를 보려면에 설명된 AWS IAM Identity Center대로를 사용합니다[를 사용하여 인증 AWS](creds-idc.md).

## 일반 정보
<a name="creds-file-general-info"></a>

기본적으로 공유 AWS 자격 증명 파일은 홈 `.aws` 디렉터리 내의 디렉터리에 위치하며 이름이 , `credentials`즉 `~/.aws/credentials` (Linux 또는 macOS) 또는 `%USERPROFILE%\.aws\credentials` (Windows)입니다. 대체 위치에 대한 자세한 내용은 *[AWS SDK 및 도구 참조 가이드](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 증명 파일 형식에 대한 자세한 내용은 SDK 및 도구 참조 안내서[의 자격 증명 파일 형식을](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html#file-format-creds) 참조하세요. *AWS SDKs *

여러 가지 방법으로 공유 AWS 자격 증명 파일의 프로파일을 관리할 수 있습니다.
+ 텍스트 편집기를 사용하여 공유 AWS 자격 증명 파일을 생성하고 업데이트합니다.
+ 이 주제의 뒷부분에서 볼 수 있듯이 AWS SDK for .NET API의 [Amazon.Runtime.CredentialManagement](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/NRuntimeCredentialManagement.html) 네임스페이스를 사용합니다.
+ [AWS Tools for PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/specifying-your-aws-credentials.html) 및 [Visual Studio](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/credentials.html), [JetBrains](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/setup-credentials.html) 및 VS Code용 AWS 툴킷에 명령과 절차를 사용합니다. [https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/setup-credentials.html](https://docs.aws.amazon.com/toolkit-for-vscode/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 자격 증명 파일에는 거의 항상 *이름이 default*인 프로필이 있습니다. 여기서는 다른 프로필이 정의되지 않은 경우 자격 증명을 AWS SDK for .NET 찾습니다.

`[default]` 프로필은 일반적으로 다음과 같습니다.

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

### 프로그래밍 방식으로 프로필 생성
<a name="creds-file-create-programmatically"></a>

이 예제에서는 프로파일을 생성하고 프로그래밍 방식으로 공유 AWS 자격 증명 파일에 저장하는 방법을 보여줍니다. [CredentialProfileOptions](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/TCredentialProfileOptions.html), [CredentialProfile](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/TCredentialProfile.html) 및 [SharedCredentialsFile](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/TSharedCredentialsFile.html)과 같은 [Amazon.Runtime.CredentialManagement](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/NRuntimeCredentialManagement.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>

이 예제에서는 이전에 만든 프로필을 프로그래밍 방식으로 업데이트하는 방법을 보여줍니다. [CredentialProfile](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/TCredentialProfile.html) 및 [NetSDKCredentialsFile](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/TSharedCredentialsFile.html)과 같은 [Amazon.Runtime.CredentialManagement](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/NRuntimeCredentialManagement.html) 네임스페이스의 클래스를 사용합니다. 또한 [Amazon](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Amazon/N.html) 네임스페이스의 [RegionEndpoint](https://docs.aws.amazon.com/sdkfornet/v4/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 리전 설정 AWS SDK for .NETAWS 리전](net-dg-region-selection.md) 단원을 참조하십시오.

# SDK 스토어 사용(Windows만 해당)
<a name="sdk-store"></a>

([중요 경고 및 지침](net-dg-legacy-creds.md#net-dg-config-creds-warnings-and-guidelines)을 반드시 검토하세요.)

Windows에서 *SDK 스토어*는 프로필을 생성하고 AWS SDK for .NET 애플리케이션의 암호화된 자격 증명을 저장하는 또 다른 곳입니다. `%USERPROFILE%\AppData\Local\AWSToolkit\RegisteredAccounts.json`에 있습니다. 개발 중에 [공유 AWS 보안 인증 파일](creds-file.md) 대신 SDK 스토어를 사용할 수 있습니다.

**주의**  
보안 위험을 방지하려면 목적별 소프트웨어를 개발하거나 실제 데이터로 작업할 때 IAM 사용자를 인증에 사용하지 마세요. 대신 [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)과 같은 보안 인증 공급자를 통한 페더레이션을 사용하십시오.

**참고**  
이 주제의 정보는 단기 또는 장기 보안 인증 정보를 수동으로 획득하고 관리해야 하는 상황을 위한 것입니다. 단기 및 장기 보안 인증 정보에 대한 자세한 내용은 **AWS 및 도구 참조 가이드의 [다른 인증 방법](https://docs.aws.amazon.com/sdkref/latest/guide/access-users.html)을 참조하세요.  
보안 모범 사례를 보려면에 설명된 AWS IAM Identity Center대로를 사용합니다[를 사용하여 인증 AWS](creds-idc.md).

## 일반 정보
<a name="sdk-store-general-info"></a>

SDK 스토어에는 다음과 같은 이점이 있습니다.
+ SDK 스토어의 보안 인증은 암호화되며 SDK 스토어는 사용자의 홈 디렉터리에 상주합니다. 이렇게 하면 예기치 않게 자격 증명이 노출될 위험을 줄일 수 있습니다.
+ SDK 스토어도 [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 스토어 프로필은 특정 호스트에 있는 특정 사용자에게 고유하며, 다른 호스트나 다른 사용자에게 복사할 수 없습니다. 즉, 다른 호스트 또는 개발자 머신의 개발 머신에 있는 SDK 스토어 프로필을 재사용할 수 없습니다. 또한 프로덕션 애플리케이션에서는 SDK 스토어 프로필을 사용할 수 없습니다.

다음과 같은 방식으로 SDK 스토어에서 프로필을 관리할 수 있습니다.
+ [AWS Toolkit for Visual Studio](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/credentials.html)에서 그래픽 사용자 인터페이스(GUI)를 사용합니다.
+ 이 주제의 뒷부분에서 볼 수 있듯이 AWS SDK for .NET API의 [Amazon.Runtime.CredentialManagement](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/NRuntimeCredentialManagement.html) 네임스페이스를 사용합니다.
+ [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 스토어에서 프로그래밍 방식으로 프로필을 생성하고 업데이트하는 방법을 보여줍니다.

### 프로그래밍 방식으로 프로필 생성
<a name="sdk-store-create-programmatically"></a>

이 예제에서는 프로그래밍 방식으로 프로필을 만들고 SDK 스토어에 저장하는 방법을 보여줍니다. [CredentialProfileOptions](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/TCredentialProfileOptions.html), [CredentialProfile](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/TCredentialProfile.html) 및 [NetSDKCredentialsFile](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/TNetSDKCredentialsFile.html)과 같은 [Amazon.Runtime.CredentialManagement](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/NRuntimeCredentialManagement.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>

이 예제에서는 이전에 만든 프로필을 프로그래밍 방식으로 업데이트하는 방법을 보여줍니다. [CredentialProfile](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/TCredentialProfile.html) 및 [NetSDKCredentialsFile](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/TNetSDKCredentialsFile.html)과 같은 [Amazon.Runtime.CredentialManagement](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/NRuntimeCredentialManagement.html) 네임스페이스의 클래스를 사용합니다. 또한 [Amazon](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Amazon/N.html) 네임스페이스의 [RegionEndpoint](https://docs.aws.amazon.com/sdkfornet/v4/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 리전 설정 AWS SDK for .NETAWS 리전](net-dg-region-selection.md) 단원을 참조하십시오.