

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

# 인증 구성
<a name="configure-auth"></a>

 AWS SDK for Go는 인증 동작 서비스를 구성하는 기능을 제공합니다. 대부분의 경우 기본 구성으로도 충분하지만 사용자 지정 인증을 구성하면 시험판 서비스 기능 작업과 같은 추가 동작을 수행할 수 있습니다.

## 정의
<a name="definitions"></a>

 이 섹션에서는 AWS SDK for Go의 인증 구성 요소에 대한 개략적인 설명을 제공합니다.

### AuthScheme
<a name="authscheme"></a>

 [AuthScheme](https://pkg.go.dev/github.com/aws/smithy-go/transport/http#AuthScheme)은 SDK가 호출자 자격 증명을 검색하여 작업 요청에 연결하는 워크플로를 정의하는 인터페이스입니다.

 인증 체계는 아래에 자세히 설명된 다음 구성 요소를 사용합니다.
+  체계를 식별하는 고유 ID 
+  서명 프로세스에 사용되는 호출자 자격 증명(예: AWS 자격 증명)을 반환하는 자격 증명 해석기 
+  작업의 전송 요청에 호출자 자격 증명을 실제로 삽입하는 서명자(예: `Authorization` HTTP 헤더) 

 각 서비스 클라이언트 옵션에는 `AuthSchemes` 필드가 포함되며, 기본적으로 이 필드는 해당 서비스에서 지원하는 인증 체계 목록으로 채워집니다.

### AuthSchemeResolver
<a name="authschemeresolver"></a>

 각 서비스 클라이언트 옵션에는 `AuthSchemeResolver` 필드가 포함됩니다. 서비스별로 정의된 이 인터페이스는 각 작업에 대해 가능한 인증 옵션을 결정하기 위해 SDK에서 호출하는 API입니다.

**중요**  
 인증 체계 해석기는 사용되는 인증 체계를 지정하지 않습니다. 사용할 *수 있는* 체계 목록('옵션')을 반환하고 [여기](#auth-scheme-resolution-workflow)에 설명된 고정 알고리즘을 통해 최종 체계를 선택합니다.

### 옵션
<a name="option"></a>

 `ResolverAuthSchemes`에 대한 직접 호출에서 반환되는 [옵션](https://pkg.go.dev/github.com/aws/smithy-go/auth#Option)은 가능한 인증 옵션을 나타냅니다.

 옵션은 세 가지 정보 세트로 구성됩니다.
+  가능한 체계를 나타내는 ID 
+  체계의 자격 증명 해석기에 제공할 불투명한 속성 세트 
+  체계의 서명자에 제공할 불투명한 속성 세트 

#### 속성에 대한 참고 사항
<a name="a-note-on-properties"></a>

 사용 사례의 99%에서 호출자는 자격 증명 확인 및 서명을 위한 불투명한 속성에 대해 걱정할 필요가 없습니다. SDK는 각 체계에 필요한 속성을 가져와 SDK에 노출된 강력한 유형의 인터페이스에 전달합니다. 예를 들어 서비스의 기본 인증 해석기는 서명 이름 및 리전에 대한 서명자 속성을 갖도록 SigV4 옵션을 인코딩합니다. 서명 이름 및 리전의 값은 SigV4를 선택할 때 클라이언트의 구성된 [v4.HTTPSigner](https://pkg.go.dev/github.com/aws/smithy-go/auth#Option) 구현으로 전달됩니다.

### 자격 증명
<a name="identity"></a>

 [자격 증명](https://pkg.go.dev/github.com/aws/smithy-go/auth#Identity)은 SDK 호출자를 추상적으로 표현한 것입니다.

 SDK에 사용되는 가장 일반적인 유형의 자격 증명은 `aws.Credentials` 집합입니다. 대부분의 사용 사례에서 호출자는 `Identity`를 추상화로 간주할 필요가 없으며 구체적인 유형으로 직접 작업할 수 있습니다.

**참고**  
 이전 버전과의 호환성을 유지하고 API 혼동을 방지하기 위해 AWS SDK별 자격 증명 유형 `aws.Credentials`는 `Identity` 인터페이스를 직접 충족하지 않습니다. 이 매핑은 내부적으로 처리됩니다.

### IdentityResolver
<a name="identityresolver"></a>

 [IdentityResolver](https://pkg.go.dev/github.com/aws/smithy-go/auth#IdentityResolver)는 `Identity`가 검색되는 인터페이스입니다.

 `IdentityResolver`의 구체적인 버전은 강력한 형식(예: [aws.CredentialsProvider](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/aws#CredentialsProvider))으로 SDK에 존재하며, SDK는 이 매핑을 내부적으로 처리합니다.

 호출자는 외부 인증 체계를 정의할 때 `IdentityResolver` 인터페이스를 직접 구현하기만 하면 됩니다.

### Signer
<a name="signer"></a>

 [서명자](https://pkg.go.dev/github.com/aws/smithy-go/transport/http#Signer)는 검색된 호출자 `Identity`로 요청이 보완되는 인터페이스입니다.

 `Signer`의 구체적인 버전은 강력한 형식(예: [v4.HTTPSigner](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/aws/signer/v4#HTTPSigner))으로 SDK에 존재하며, SDK는 이 매핑을 내부적으로 처리합니다.

 호출자는 외부 인증 체계를 정의할 때 `Signer` 인터페이스를 직접 구현하기만 하면 됩니다.

### AuthResolverParameters
<a name="authresolverparameters"></a>

 각 서비스는 각 서비스 패키지에 `AuthResolverParameters`로 정의된 확인 함수로 전달되는 특정 입력 세트를 가져옵니다.

 기본 해석기 파라미터는 다음과 같습니다.


|  name  |  유형  |  설명  | 
| --- | --- | --- | 
|  Operation  |  string  |  간접적으로 호출 중인 작업의 이름입니다. | 
|  Region  |  string  |  클라이언트의 AWS 리전입니다. SigV4[A]를 사용하는 서비스에만 표시됩니다. | 

 자체 해석기를 구현하는 경우 파라미터의 자체 인스턴스를 구성할 필요가 없습니다. SDK는 요청당 이러한 값을 소싱하여 구현에 전달합니다.

## 인증 체계 해결 워크플로
<a name="auth-scheme-resolution-workflow"></a>

 SDK를 통해 AWS 서비스 작업을 직접 호출하면 요청이 직렬화된 후 다음과 같은 일련의 작업이 수행됩니다.

1.  SDK는 필요에 따라 입력 파라미터를 소싱하여 클라이언트의 `AuthSchemeResolver.ResolveAuthSchemes()` API를 직접 호출하여 작업에 사용할 수 있는 [옵션](https://pkg.go.dev/github.com/aws/smithy-go/auth#Option) 목록을 가져옵니다.

1.  SDK는 해당 목록을 반복하고 다음 조건을 충족하는 첫 번째 체계를 선택합니다.
   +  ID가 일치하는 체계가 클라이언트 자체 `AuthSchemes` 목록에 있습니다.
   +  체계의 자격 증명 해석기가 클라이언트의 옵션에 있음(비`nil`)(체계의 `GetIdentityResolver` 메서드를 통해 확인됨, 위에서 설명한 구체적인 자격 증명 해석기 유형에 대한 매핑은 내부적으로 처리됨)(1) 

1.  실행 가능한 체계가 선택되었다고 가정하면 SDK는 `GetIdentityResolver()` API를 간접적으로 호출하여 호출자의 자격 증명을 검색합니다. 예를 들어 내장 SigV4 인증 체계는 내부적으로 클라이언트의 `Credentials` 공급자에 매핑됩니다.

1.  SDK는 자격 증명 해석기의 `GetIdentity()`를 호출합니다(예: SigV4용 `aws.CredentialProvider.Retrieve()`).

1.  SDK는 엔드포인트 해석기의 `ResolveEndpoint()`를 직접 호출하여 요청에 대한 엔드포인트를 찾습니다. 엔드포인트에는 서명 프로세스에 영향을 미치는 추가 메타데이터(예: S3 Object Lambda의 고유한 서명 이름)가 포함될 수 있습니다.

1.  SDK는 인증 체계의 `Signer()` API를 호출하여 서명자를 검색하고 `SignRequest()` API를 사용하여 이전에 검색한 호출자 자격 증명으로 요청에 서명합니다.

 (1) SDK가 목록에서 익명 옵션(ID `smithy.api#noAuth`)을 발견하면 해당하는 자격 증명 해석기가 없으므로 자동으로 선택됩니다.

## 기본 지원 `AuthScheme`
<a name="natively-supported-authschemes"></a>

 다음 인증 체계는 기본적으로 AWS SDK for Go에서 지원됩니다.


|  명칭  |  체계 ID  |  자격 증명 해석기  |  Signer  |  Notes  | 
| --- | --- | --- | --- | --- | 
|  [SigV4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html)  |  aws.auth\$1sigv4  |  [aws.CredentialsProvider](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/aws#Credentials)  |  [v4.HTTPSigner](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/aws/signer/v4#Signer)  |  대부분의 AWS 서비스 작업에 대한 현재 기본값입니다. | 
|  SigV4A  |  aws.auth\$1sigv4a  |  aws.CredentialsProvider  |  해당 사항 없음  |  SigV4A 사용은 현재 제한되어 있으며 서명자 구현은 내부적입니다. HTTP 요청에 서명하기 위한 범용 API를 제공하는 새로운 옵트인 모듈 aws-http-auth에 대한 이 [공지](https://github.com/aws/aws-sdk-go-v2/discussions/2812)를 참조하세요. | 
|  SigV4Express  |  com.amazonaws.s3\$1sigv4express  |  [s3.ExpressCredentialsProvider](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/s3#ExpressCredentialsProvider)  |  v4.HTTPSigner  |  [Express One Zone](https://aws.amazon.com/s3/storage-classes/express-one-zone/)에 사용됩니다. | 
|  HTTP 보유자  |  smithy.api\$1httpBearerAuth  |  [smithybearer.TokenProvider](https://pkg.go.dev/github.com/aws/smithy-go/auth/bearer#TokenProvider)  |  [smithybearer.Signer](https://pkg.go.dev/github.com/aws/smithy-go/auth/bearer#Signer)  |  [codecatalyst](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/codecatalyst)에서 사용합니다. | 
|  익명  |  smithy.api\$1noAuth  |  해당 사항 없음  |  해당 사항 없음  |  인증 없음 - 자격 증명이 필요하지 않으며 요청에 서명되거나 인증되지 않습니다. | 

### 자격 증명 구성
<a name="identity-configuration"></a>

 AWS SDK for Go에서 인증 체계의 자격 증명 구성 요소는 SDK 클라이언트 `Options`에서 구성됩니다. SDK는 작업이 호출될 때 선택한 체계에 대해 이러한 구성 요소의 값을 자동으로 선택하고 사용합니다.

**참고**  
 이전 버전과의 호환성을 위해 SDK는 자격 증명 해석기가 구성되지 않은 경우 익명 인증 체계의 사용을 암시적으로 허용합니다. 이는 클라이언트의 `Options`의 모든 자격 증명 해석기를 `nil`로 설정하여 수동으로 수행할 수 있습니다(sigv4 자격 증명 해석기는 `aws.AnonymousCredentials{}`로 설정할 수도 있음).

### 서명자 구성
<a name="signer-configuration"></a>

 AWS SDK for Go에서 인증 체계의 서명자 구성 요소는 SDK 클라이언트 `Options`에서 구성됩니다. SDK는 작업이 호출될 때 선택한 체계에 대해 이러한 구성 요소의 값을 자동으로 선택하고 사용합니다. 추가 구성은 필요하지 않습니다.

#### 사용자 지정 인증 체계
<a name="custom-auth-scheme"></a>

 사용자 지정 인증 체계를 정의하고 사용하도록 구성하려면 호출자가 다음을 수행해야 합니다.

1.  [AuthScheme](https://pkg.go.dev/github.com/aws/smithy-go/transport/http#AuthScheme) 구현 정의 

1.  SDK 클라이언트 `AuthSchemes` 목록에 체계 등록 

1.  해당하는 경우 SDK 클라이언트의 `AuthSchemeResolver`를 계측하여 체계의 ID로 인증 `Option`을 반환합니다.

**주의**  
 다음 서비스에는 고유하거나 사용자 지정된 인증 동작이 있습니다. 사용자 지정 인증 동작이 필요한 경우 기본 구현에 위임하고 그에 따라 래핑하는 것이 좋습니다.  


|  Service  |  Notes  | 
| --- | --- | 
|  S3  |  작업 입력에 따라 SigV4A 및 SigV4Express의 조건부 사용. | 
|  EventBridge  |  작업 입력에 따라 SigV4A의 조건부 사용. | 
|  Cognito  |  특정 작업은 익명 전용입니다. | 
|  SSO  |  특정 작업은 익명 전용입니다. | 
|  STS  |  특정 작업은 익명 전용입니다. | 