

 AWS SDK for .NET V3가 유지 관리 모드로 전환되었습니다.

[AWS SDK for .NET 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/)를 참조하세요.

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

# AWS SDK for .NET 시작
<a name="net-dg-config"></a>

AWS SDK for .NET를 사용하려면 도구 체인을 설치하고 애플리케이션이 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>

AWS SDK for .NET를 사용하려면 특정 개발 도구가 설치되어 있어야 합니다.

## 교차 플랫폼 개발
<a name="net-dg-dev-env-cross"></a>

Windows, Linux 또는 macOS에서 교차 플랫폼 .NET 개발에 대한 필수 항목은 다음과 같습니다.
+ Microsoft [.NET Core SDK](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 Code)](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)입니다.

## Visual Studio 및 .NET Core를 통한 Windows
<a name="net-dg-dev-env-winvs"></a>

Visual Studio 및 .NET Core를 통한 Windows 개발에 필요한 항목은 다음과 같습니다.
+ [Microsoft Visual Studio](https://visualstudio.microsoft.com/vs/)
+ Microsoft .NET Core 2.1, 3.1 이상

  일반적으로 Visual Studio의 최신 버전을 설치할 때 기본적으로 포함됩니다.
+ (선택 사항) Visual Studio에서 AWS 리소스 및 로컬 프로파일을 관리하기 위한 사용자 인터페이스를 제공하는 플러그인인 AWS Toolkit for Visual Studio입니다. 툴킷을 설치하려면 [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 SDK 및 도구 참조 가이드*에서 [인증 및 액세스](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를 사용하도록 SDK를 구성합니다.](#idc-config-sdk)

1. [AWS 액세스 포털 세션 시작](#idc-start-portal)

## 콘솔 자격 증명을 사용하여 로그인
<a name="login-con-creds"></a>

기존 AWS Management Console 로그인 자격 증명을 사용하여 AWS 서비스에 프로그래밍 방식으로 액세스할 수 있습니다. 브라우저 기반 인증 흐름 후는 AWS CLI AWS Tools for PowerShell 및 .NET v3용 AWS SDK와 같은 로컬 개발 도구에서 작동하는 임시 자격 증명을 AWS 생성합니다.

이 프로세스를 사용하면 초기 계정 설정 중에 생성된 루트 자격 증명, IAM 사용자 또는 자격 증명 공급자의 페더레이션 자격 증명을 사용하여 인증할 수 있으며 AWS CLI 또는 AWS Tools for PowerShell 가 자동으로 임시 자격 증명을 관리합니다. 이 접근 방식은 장기 자격 증명을 로컬에 저장할 필요가 없으므로 보안을 강화합니다.

 AWS CLI에서 `aws login` 명령을 실행하면 활성 콘솔 세션에서 선택하거나 브라우저 기반 인증 흐름을 통해 로그인할 수 있으며, 그러면 임시 자격 증명이 자동으로 생성됩니다. 임시 자격 증명 토큰은 15분 후에 만료되지만 .NET v3용 AWS SDK는 요청 중에 필요한 경우 토큰을 자동으로 새로 고칩니다.

**주의**  
이 기능은 .NET Framework 대상에는 지원되지 않습니다.

**중요**  
인증에 콘솔 자격 증명을 사용하는 경우 애플리케이션이 다음 NuGet 패키지를 참조해야 AWS 로그인 확인이 작동합니다.  
**AWSSDK.Signin**
이러한 패키지를 참조하지 않으면 런타임 예외가 발생합니다.
+ [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 SDK 및 도구 참조 가이드*의 [IAM Identity Center 인증](https://docs.aws.amazon.com/sdkref/latest/guide/access-sso.html) 항목에 있는 **1단계**를 참조하세요. 특히 **IAM Identity Center를 통한 액세스가 설정되어 있지 않습니다** 아래에 있는 필요한 지침을 따르세요.

## IAM Identity Center를 사용하도록 SDK를 구성합니다.
<a name="idc-config-sdk"></a>

IAM Identity Center를 사용하도록 SDK를 구성하는 방법에 대한 정보는 *AWS SDK 및 도구 참조 가이드*의 [IAM Identity Center 인증](https://docs.aws.amazon.com/sdkref/latest/guide/access-sso.html)에 대한 항목의 **2단계**에 나와 있습니다. 이 구성을 완료하면 시스템에 다음 요소가 포함되어야 합니다.
+ 애플리케이션을 실행하기 전에 AWS 액세스 포털 세션을 시작하는 데 AWS CLI사용하는 입니다.
+ SDK에서 참조할 수 있는 구성 값 세트가 있는 [`[default]` 프로파일](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html#file-format-profile)이 포함된 공유 AWS `config` 파일입니다. 이 파일의 위치를 찾으려면 **AWS SDK 및 도구 참조 가이드에서 [공유 파일의 위치](https://docs.aws.amazon.com/sdkref/latest/guide/file-location.html)를 참조하세요. 는 요청을 보내기 전에 프로필의 SSO 토큰 공급자를 AWS SDK for .NET 사용하여 자격 증명을 획득합니다 AWS. `sso_role_name` 값은 IAM 신원 센터 권한 집합에 연결된 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 에를 사용하는 경우 SSO 확인이 작동하려면 애플리케이션이 다음 NuGet 패키지를 참조해야 합니다.  
`AWSSDK.SSO`
`AWSSDK.SSOOIDC`
이러한 패키지를 참조하지 않으면 *런타임* 예외가 발생합니다.

## AWS 액세스 포털 세션 시작
<a name="idc-start-portal"></a>

에 액세스하는 애플리케이션을 실행하기 전에 SDK가 IAM Identity Center 인증을 사용하여 자격 증명을 확인하려면 활성 AWS 액세스 포털 세션이 AWS 서비스필요합니다. 구성된 세션 길이에 따라 결국 액세스가 만료되고 SDK에 인증 오류가 발생합니다. 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 는 SDK for Python을 기반으로 구축되므로 권한 메시지에 `botocore` 이름의 변형이 포함될 수 있습니다.

## 추가 정보
<a name="idc-additional-info"></a>
+ 개발 환경에서 IAM Identity Center 및 SSO를 사용하는 방법에 대한 추가 정보는 [고급 인증](advanced-auth.md)섹션의 [Single Sign-On](sso.md)를 참조하세요. 이 정보에는 대체 방법 및 고급 방법과 이러한 방법을 사용하는 방법을 보여주는 자습서가 포함되어 있습니다.
+ 프로필 및 환경 변수 사용과 같은 SDK 인증에 대한 자세한 옵션은 *AWS SDK 및 도구 참조 가이드*의 [구성](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 SDK 및 도구 참조 가이드에서 [표준화된 보안 인증 공급자](https://docs.aws.amazon.com/sdkref/latest/guide/standardized-credentials.html)를 참조하세요.

# AWS SDK for .NET를 간단히 둘러보세요.
<a name="quick-start"></a>

이 섹션은 AWS SDK for .NET에 익숙하지 않은 개발자를 위한 기본 자습서를 제공합니다.

**참고**  
이 자습서를 사용하기 전에 먼저 [도구 체인을 설치](net-dg-dev-env.md)하고 [SDK 인증을 구성](creds-idc.md)해야 합니다.

코드 예제와 함께 특정 AWS 서비스용 소프트웨어 개발에 대한 자세한 내용은 [ AWS 서비스 작업](working-with-aws-services.md) 단원을 참조하세요. 추가 코드 예제는 [SDK for .NET 코드 예제](csharp_code_examples.md) 단원을 참조하세요.

**Topics**
+ [간단한 교차 플랫폼 앱](quick-start-s3-1-cross.md)
+ [간단한 Windows 기반 앱](quick-start-s3-1-winvs.md)
+ [다음 단계](quick-start-next-steps.md)

# AWS SDK for .NET를 사용하는 간단한 교차 플랫폼 애플리케이션
<a name="quick-start-s3-1-cross"></a>

이 자습서에서는 교차 플랫폼 개발을 위해 .NET Core와 AWS SDK for .NET를 사용합니다. 이 자습서는 SDK를 사용하여 소유한 [Amazon S3 버킷](https://docs.aws.amazon.com/AmazonS3/latest/userguide/)을 나열하고 선택적으로 버킷을 생성하는 방법을 보여줍니다.

.NET 명령줄 인터페이스(CLI)와 같은 교차 플랫폼 도구를 사용하여 이 자습서를 수행합니다. 개발 환경을 구성하는 다른 방법은 [도구 체인 설치 및 구성](net-dg-dev-env.md)을 참조하십시오.

**Windows, Linux 또는 macOS에서 교차 플랫폼 .NET 개발에 대한 필수 항목:**
+ Microsoft [.NET Core SDK](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 Code)](https://code.visualstudio.com/), [JetBrains Rider](https://www.jetbrains.com/rider/), [Microsoft Visual Studio](https://visualstudio.microsoft.com/vs/) 등이 있습니다.

**참고**  
이 자습서를 사용하기 전에 먼저 [도구 체인을 설치](net-dg-dev-env.md)하고 [SDK 인증을 구성](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 패키지 관리자](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)으로 바로 이동합니다.

# AWS SDK for .NET를 사용하는 간단한 Windows 기반 애플리케이션
<a name="quick-start-s3-1-winvs"></a>

이 자습서는 Visual Studio 및 .NET Core와 함께 Windows의 AWS SDK for .NET를 사용합니다. 이 자습서는 SDK를 사용하여 소유한 [Amazon S3 버킷](https://docs.aws.amazon.com/AmazonS3/latest/userguide/)을 나열하고 선택적으로 버킷을 생성하는 방법을 보여줍니다.

Visual Studio 및 .NET Core를 사용하여 Windows에서 이 자습서를 수행하게 됩니다. 개발 환경을 구성하는 다른 방법은 [도구 체인 설치 및 구성](net-dg-dev-env.md)을 참조하십시오.

**Visual Studio 및 .NET Core를 통한 Windows 개발에 필요한 항목:**
+ [Microsoft Visual Studio](https://visualstudio.microsoft.com/vs/)
+ Microsoft .NET Core 2.1, 3.1 이상

  일반적으로 Visual Studio의 최신 버전을 설치할 때 기본적으로 포함됩니다.

**참고**  
이 자습서를 사용하기 전에 먼저 [도구 체인을 설치](net-dg-dev-env.md)하고 [SDK 인증을 구성](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 패키지 관리자)**, **Manage NuGet Packages for Solution(솔루션을 위한 NuGet 패키지 관리)**을 선택합니다.

1. `AWSSDK.S3`, `AWSSDK.SecurityToken`, `AWSSDK.SSO` 및 `AWSSDK.SSOOIDC`의 NuGet 패키지를 찾아 프로젝트에 설치합니다.

   이 프로세스는 [NuGet 패키지 관리자](https://www.nuget.org/profiles/awsdotnet)에서 NuGet 패키지를 설치합니다. 이 자습서에 필요한 NuGet 패키지를 정확하게 알고 있으므로 이제 이 단계를 수행할 수 있습니다. 또한 필요한 패키지가 개발 중에 알려지게 되는 것이 일반적입니다. 이 경우 유사한 프로세스를 따라 설치하십시오.

1. 명령 프롬프트에서 애플리케이션을 실행하려는 경우 이제 명령 프롬프트를 열고 빌드 출력이 포함될 폴더로 이동합니다. 일반적으로 `S3CreateAndList\S3CreateAndList\bin\Debug\net6.0`과 비슷하지만, 환경에 따라 달라집니다.

## 코드 생성
<a name="s3-1-winvs-code"></a>

1. `S3CreateAndList` 프로젝트에서 `Program.cs`를 찾아 IDE에서 엽니다.

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를 사용하는 경우 다음과 유사한 빌드 오류가 발생할 수 있습니다.  
“C\$1 7.0에서는 '비동기 메인' 기능을 사용할 수 없습니다. 언어 버전 7.1 이상을 사용하십시오.”  
이 오류가 발생하면 해당 언어의 최신 버전을 사용하도록 프로젝트를 설정하세요. 이 작업은 일반적으로 프로젝트 속성, **빌드**, **고급**에서 수행됩니다.

## 애플리케이션을 실행합니다
<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 Properties(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 리소스일 수 있습니다.

이제 AWS SDK for .NET를 둘러봤으니 [프로젝트를 시작](net-dg-start-new-project.md)할 수 있습니다.

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

여러 가지 방법을 사용하여 AWS 서비스에 액세스하는 새 프로젝트를 시작할 수 있습니다. 이러한 일부 기술은 다음과 같습니다.
+ AWS에서 .NET 개발을 처음 사용하거나 최소한 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 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"를 검색하고 **콘솔 앱(.NET Core)** 또는 **WPF 앱(.NET Core)** 템플릿의 C\$1 버전을 선택합니다. 빈 프로젝트가 생성되며, 이 프로젝트에 코드 및 NuGet 패키지를 추가할 수 있습니다.

[지침이 포함된 코드 예제개요 수준 라이브러리 및 프레임워크](tutorials-examples.md)에서 AWS 서비스를 사용하는 방법에 대한 몇 가지 예를 찾을 수 있습니다.

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

# AWS 리전 구성
<a name="net-dg-region-selection"></a>

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

각각의 AWS 서비스에 대해 지원되는 모든 리전 및 엔드포인트의 현재 목록을 보려면 *AWS 일반 참조*의 [서비스 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)을 참조하세요. 기존 리전 엔드포인트 목록을 보려면 [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 서비스 클라이언트에 대해 리전을 지정하는 방법에는 여러 가지가 있습니다. 이 지역은 특정 리전으로 생성되지 않은 서비스 클라이언트에 사용됩니다.

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

### 프로필
<a name="w2aab9c21c15b7"></a>

애플리케이션 또는 SDK가 로드한 프로필을 설정합니다. 자세한 내용은 [보안 인증 정보 및 프로파일 확인](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`를 사용하여 전체 시스템에 대해 이 환경 변수를 설정하면 AWS SDK for .NET뿐만 아니라 모든 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 리전을 지정하지 않는 경우 AWS SDK for .NET는 AWS 서비스 클라이언트가 운영할 리전을 찾으려고 시도합니다.

**리전 해결 순서**

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를 설치할 필요가 없습니다. 앞서 표시된 대로 새로 추가된 리전을 클라이언트 단위로 또는 전역적으로 지정할 수 있습니다.

# 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/v3/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/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>

AWS SDK for .NET는 특정 순서로 보안 인증을 검색하고 현재 애플리케이션에서 가장 먼저 사용 가능한 세트를 사용합니다.

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

1. [애플리케이션에서 자격 증명 및 프로필에 액세스](creds-locate.md)에 설명된 대로 AWS 서비스 클라이언트에 명시적으로 설정된 보안 인증입니다.
**참고**  
이 주제는 보안 인증을 지정하는 데 선호되는 방법이 아니므로 [특별 고려 사항](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 역할을 사용하여 액세스 권한 부여](net-dg-hosm.md)에 설명된 대로 IAM 역할을 사용하세요. 그렇지 않은 경우(예: 프리 릴리스 테스트) 웹 애플리케이션이 서버에서 액세스하는 AWS 보안 인증 파일 형식을 사용하는 파일에 보안 인증을 저장합니다.

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

서로 다른 두 개의 보안 인증 스토리지 메커니즘이 있는 경우 두 파일 형식을 사용할 수 있도록 AWS SDK for .NET를 구성하는 방법을 이해하는 것이 중요합니다. [AWSConfigs.AWSProfilesLocation](https://docs.aws.amazon.com/sdkfornet/v3/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 이상)를 사용하는 애플리케이션에서는 SAML(Security Assertion Markup Language)을 사용해 AWS 서비스에 액세스하기 위해 AD FS(Active Directory Federation Services)를 통해 페더레이션 사용자 계정을 사용할 수 있습니다.

연동 액세스 지원이란 사용자가 Active Directory를 사용하여 인증할 수 있음을 뜻합니다. 임시 자격 증명은 사용자에게 자동으로 부여됩니다. 이 임시 자격 증명은 한 시간 동안 유효하며 애플리케이션에서 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/v3/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/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);
```

**참고**  
이전 버전의 SDK에서는 `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에서 사용자 및 권한 집합을 만들고 ID 소스에서 제공하는 임시 보안 인증 정보를 사용하는 것이 가장 좋은 방법입니다.

개발 시에는 직접 생성했거나 [SDK 인증 구성](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/) 에서 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/)의 [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/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)의 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/v3/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="w2aab9c31b9b5b1"></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/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 클라이언트 인스턴스에만 적용됩니다.

### 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/v3/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/v3/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/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` 파일에서 테이블 이름 접두사를 설정하는 경우 권장할 만한 방식은 그 자체로 `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/v3/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/v3/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/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>

Amazon CloudSearch 클라이언트는 Amazon 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) 클래스의 `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/v3/apidocs/items/IoT/TIoTClient.html) 객체를 AWS IoT생성하고 [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");
}
```

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

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

## 열어서 .NET Framework 콘텐츠 확인
<a name="w2aab9c31c11b5b1"></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>` 요소에 대한 자세한 내용은 [AWS SDK for .NET 애플리케이션 구성](net-dg-config.md)의 `<appSettings>` 요소 예제를 참조하세요.

**참고**  
다음과 같이 계속해서 코드 파일의 [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 설정을 지정하는 대신에 이 주제 후반부에 설명된 것처럼 `App.config` 또는 `Web.config` 파일의 `<configSections>` 및 `<aws>` 요소를 사용하여 AWS 설정을 지정하는 것이 좋습니다. 앞의 속성에 대한 자세한 내용은 [AWS SDK for .NET 애플리케이션 구성](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)
+ [로그](#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로 매핑) 모음에 있는 단일 항목을 나타냅니다. 이 요소는 `Amazon.Util.TableAlias`의 `Amazon.AWSConfigs.DynamoDBConfig.Context.TableAliases` 속성에서 AWS SDK for .NET 클래스의 인스턴스로 매핑됩니다. 테이블 이름 접두사를 적용하기 전에 다시 매핑이 됩니다.

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

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

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

`<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`의 AWS SDK for .NET 속성으로 매핑됩니다.

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

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

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

`<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 등입니다. 이 속성은 `Amazon.DynamoDBv2.DynamoDBEntryConversion`의 AWS SDK for .NET 클래스로 매핑됩니다. 자세한 내용은 [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* 속성이 포함될 수 있습니다. 이 속성은 `Amazon.Util.DynamoDBContextConfig.TableNamePrefix`의 `Amazon.AWSConfigs.DynamoDBConfig.Context.TableNamePrefix` 속성에서 AWS SDK for .NET 속성으로 매핑됩니다. 자세한 내용은 [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* 속성이 포함될 수 있습니다. 이 속성은 `Amazon.Util.EC2Config.UseSignatureVersion4`의 `Amazon.AWSConfigs.EC2Config.UseSignatureVersion4` 속성에서 AWS SDK for .NET 속성으로 매핑됩니다.

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

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

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

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

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

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

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

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

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

** `logResponses` **  
서비스 응답을 로깅할 시점입니다(`Amazon.Util.LoggingConfig.LogResponses`의 `Amazon.AWSConfigs.LoggingConfig.LogResponses` 속성에서 AWS SDK for .NET 속성으로 매핑됨).  
허용되는 값은 다음과 같습니다.    
** `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 테이블로 형식-테이블 간 매핑 모음에 있는 단일 항목을 나타냅니다(`TypeMapping`의 `Amazon.AWSConfigs.DynamoDBConfig.Context.TypeMappings` 속성에서 AWS SDK for .NET 클래스의 인스턴스로 매핑됨). 자세한 내용은 [DynamoDB SDK의 개선점](http://blogs.aws.amazon.com/net/post/Tx2C4MHH2H0SA5W/Enhancements-to-the-DynamoDB-SDK)을 참조하십시오.

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

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

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

`<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 속성을 나타냅니다. (이 요소는 AWS SDK for .NET의 `AddProperty` 메서드에서 Amazon.Util.PropertyConfig 클래스의 인스턴스로 매핑됨) 자세한 내용은 [DynamoDB SDK의 개선점](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`의 AWS SDK for .NET 속성으로 매핑됩니다.

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

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

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

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

`<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 주소입니다. 이 속성은 `Amazon.Util.ProxyConfig.Host`의 `Amazon.AWSConfigs.ProxyConfig.Host` 속성에서 AWS SDK for .NET 속성으로 매핑됩니다.

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

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

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

`<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* 속성이 포함될 수 있습니다. 이 속성은 `Amazon.AWSConfigs.S3Config.UseSignatureVersion4`의 AWS SDK for .NET 속성으로 매핑됩니다.

`<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대로를 사용합니다[SDK 인증 구성](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대로를 사용합니다[SDK 인증 구성](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/v3/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/v3/apidocs/items/Runtime/TCredentialProfileOptions.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.Runtime.CredentialManagement](https://docs.aws.amazon.com/sdkfornet/v3/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/v3/apidocs/items/Runtime/TCredentialProfile.html) 및 [NetSDKCredentialsFile](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TSharedCredentialsFile.html)과 같은 [Amazon.Runtime.CredentialManagement](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/NRuntimeCredentialManagement.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 스토어 사용(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대로를 사용합니다[SDK 인증 구성](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/v3/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/v3/apidocs/items/Runtime/TCredentialProfileOptions.html), [CredentialProfile](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TCredentialProfile.html) 및 [NetSDKCredentialsFile](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TNetSDKCredentialsFile.html)과 같은 [Amazon.Runtime.CredentialManagement](https://docs.aws.amazon.com/sdkfornet/v3/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/v3/apidocs/items/Runtime/TCredentialProfile.html) 및 [NetSDKCredentialsFile](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TNetSDKCredentialsFile.html)과 같은 [Amazon.Runtime.CredentialManagement](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/NRuntimeCredentialManagement.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) 단원을 참조하십시오.