SDK 구성
AWS SDK for Go V2에서는 로거, 로그 수준 및 재시도 구성과 같은 서비스 클라이언트에 대한 공통 설정을 구성할 수 있습니다. 대부분의 설정은 선택 사항입니다. 그러나 각 서비스 클라이언트에 대해 AWS 리전과 자격 증명을 지정해야 합니다. SDK는 이러한 값을 사용하여 올바른 리전으로 요청을 보내고 올바른 자격 증명으로 요청에 서명합니다. 이러한 값은 코드 또는 실행 환경을 통해 프로그래밍 방식으로 지정할 수 있습니다.
AWS 공유 구성 파일 로드
서비스 API 클라이언트를 초기화하는 방법에는 여러 가지가 있지만 사용자에게 권장되는 가장 일반적인 패턴은 다음과 같습니다.
AWS 공유 구성 파일을 사용하도록 SDK를 구성하려면 다음 코드를 사용합니다.
import ( "context" "log" "github.com/aws/aws-sdk-go-v2/config" ) // ... cfg, err := config.LoadDefaultConfig(context.TODO()) if err != nil { log.Fatalf("failed to load configuration, %v", err) }
config.LoadDefaultConfig(context.TODO())는 AWS 공유 구성 소스를 사용하여 aws.Configaws.Config를 사용하여 서비스 클라이언트를 구성할 수 있으므로 클라이언트를 구성하기 위한 일관된 패턴을 제공합니다.
AWS 공유 구성 파일에 대한 자세한 정보는 AWS SDK 및 도구 참조 가이드의 공유를 참조하세요.
AWS 리전 지정
리전을 지정할 때 us-west-2 또는 us-east-2와 같은 요청을 보낼 위치를 지정합니다. 각 서비스의 리전 목록을 보려면, Amazon Web Services 일반 참조의 서비스 엔드포인트 및 할당량을 참조하세요.
SDK에는 기본 리전이 없습니다. 리전을 지정하려면 다음을 수행합니다.
-
기본 리전에
AWS_REGION환경 변수를 설정합니다. -
구성을 로드할 때
config.LoadDefaultConfig에 config.WithRegion을 인수로 사용하여 리전을 명시적으로 설정합니다.
검토: 이러한 모든 기술을 사용하여 리전을 설정하는 경우 SDK는 명시적으로 지정한 리전을 사용합니다.
환경 변수를 사용하여 리전 구성
Linux, macOS 또는 Unix
export AWS_REGION=us-west-2
Windows
set AWS_REGION=us-west-2
프로그래밍 방식으로 리전 지정
cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithRegion("us-west-2"))
자격 증명 지정
AWS에 대한 요청에 서명하려면 AWS SDK for Go에 자격 증명(액세스 키 및 시크릿 액세스 키)이 필요합니다. 특정 사용 사례에 따라 여러 위치에서 자격 증명을 지정할 수 있습니다. 자격 증명을 받는 방법에 대한 자세한 내용은 AWS SDK for Go 시작하기 섹션을 참조하세요.
config.LoadDefaultConfig를 사용하여 aws.Config 인스턴스를 초기화하면 SDK는 기본 자격 증명 체인을 사용하여 AWS 자격 증명을 찾습니다. 이 기본 자격 증명 체인은 다음 순서대로 자격 증명을 찾습니다.
-
환경 변수.
-
정적 자격 증명(
AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY,AWS_SESSION_TOKEN) -
웹 자격 증명 토큰(
AWS_WEB_IDENTITY_TOKEN_FILE)
-
-
공유 구성 파일.
-
SDK는 기본적으로 컴퓨터의 홈 폴더에 있는
.aws폴더 아래의credentials파일로 설정됩니다. -
SDK는 기본적으로 컴퓨터의 홈 폴더에 있는
.aws폴더 아래의config파일로 설정됩니다.
-
-
애플리케이션이 Amazon ECS 태스크 정의 또는 RunTask API 작업을 사용하는 경우 태스크에 대한 IAM 역할입니다.
-
애플리케이션이 Amazon EC2 인스턴스에서 실행 중인 경우 Amazon EC2에 대한 IAM 역할입니다.
SDK는 수동 구성 없이 기본 제공 공급자를 자동으로 감지하고 사용합니다. 예를 들어 Amazon EC2 인스턴스에 IAM 역할을 사용하는 경우 애플리케이션은 인스턴스의 자격 증명을 자동으로 사용합니다. 애플리케이션에서 자격 증명을 수동으로 구성할 필요가 없습니다.
모범 사례로 AWS에서는 자격 증명을 다음 순서로 지정할 것을 권장합니다.
-
애플리케이션이 Amazon ECS 태스크 정의 또는 RunTask API 작업을 사용하는 경우 태스크에 IAM 역할을 사용합니다.
-
애플리케이션이 Amazon EC2 인스턴스에서 실행 중인 경우 Amazon EC2에 IAM 역할을 사용합니다.
IAM 역할은 인스턴스의 애플리케이션에 AWS 직접 호출용 임시 보안 자격 증명을 제공합니다. IAM 역할은 여러 Amazon EC2 인스턴스에서 보안 인증을 배포 및 관리할 수 있는 쉬운 방법을 제공합니다.
-
공유 자격 증명 또는 구성 파일을 사용합니다.
자격 증명 및 구성 파일은 다른 AWS SDK 및 AWS CLI에서 공유됩니다. 보안 모범 사례로 액세스 키 ID 및 보안 키와 같은 민감한 값을 설정하려면 자격 증명 파일을 사용하는 것이 좋습니다. 다음은 이러한 각 파일의 형식 지정 요구 사항입니다.
-
환경 변수를 사용합니다.
환경 변수 설정은 Amazon EC2 인스턴스 이외의 시스템에서 개발 작업을 수행 중인 경우에 유용합니다.
태스크에 대한 IAM 역할
애플리케이션이 Amazon ECS 작업 정의 또는 RunTask 작업을 사용하는 경우 작업에 대한 IAM 역할을 사용하여 작업의 컨테이너에서 사용할 수 있는 IAM 역할을 지정합니다.
Amazon EC2 인스턴스의 IAM 역할
Amazon EC2 인스턴스에서 애플리케이션을 실행하는 경우 인스턴스의 IAM 역할을 사용하여 AWS를 직접 호출하기 위한 임시 보안 자격 증명을 가져옵니다.
IAM 역할을 사용하도록 인스턴스를 구성한 경우 SDK는 애플리케이션에 이러한 자격 증명을 자동으로 사용합니다. 이러한 자격 증명을 수동으로 지정할 필요가 없습니다.
공유 자격 증명 및 구성
공유 자격 증명 및 구성 파일을 사용하여 AWS SDK 및 기타 도구 간에 공통 구성을 공유할 수 있습니다. 다양한 도구나 애플리케이션에 대해 서로 다른 자격 증명을 사용하는 경우 프로파일을 사용하여 동일한 구성 파일에서 여러 액세스 키를 구성할 수 있습니다.
config.LoadOptions를 사용하여 여러 자격 증명 또는 구성 파일 위치를 제공할 수 있습니다. 기본적으로 SDK는 자격 증명 지정에 언급된 기본 위치에 저장된 파일을 로드합니다.
import ( "context" "github.com/aws/aws-sdk-go-v2/config" ) // ... cfg , err := config.LoadDefaultConfig(context.TODO(), config.WithSharedCredentialsFiles( []string{"test/credentials", "data/credentials"}, ), config.WithSharedConfigFiles( []string{"test/config", "data/config"}, ) )
공유 자격 증명 및 구성 파일을 사용할 때 중복 프로필이 지정되면 프로필을 확인하기 위해 병합됩니다. 병합 충돌이 발생하는 경우
-
중복 프로필이 동일한 자격 증명/구성 파일 내에서 지정된 경우 후자 프로필에 지정된 프로필 속성이 우선합니다.
-
중복 프로필이 여러 자격 증명 파일 또는 여러 구성 파일에 지정된 경우 프로필 속성은
config.LoadOptions에 대한 파일 입력 순서에 따라 확인됩니다. 후자의 파일에서 프로필 속성이 우선합니다. -
프로필이 자격 증명 파일과 구성 파일 모두에 있는 경우 자격 증명 파일 속성이 우선합니다.
필요한 경우 config.LoadOptions에서 LogConfigurationWarnings를 활성화하고 프로필 확인 단계를 기록할 수 있습니다.
자격 증명 파일 생성
공유 자격 증명 파일(.aws/credentials)이 없는 경우 텍스트 편집기를 사용하여 홈 디렉터리에 파일을 생성할 수 있습니다. 자격 증명 파일에 다음 콘텐츠를 추가하여 <YOUR_ACCESS_KEY_ID> 및 <YOUR_SECRET_ACCESS_KEY>를 자격 증명으로 바꿉니다.
[default] aws_access_key_id =<YOUR_ACCESS_KEY_ID>aws_secret_access_key =<YOUR_SECRET_ACCESS_KEY>
[default] 제목은 다른 프로필을 사용하도록 구성하지 않는 한 SDK가 사용할 기본 프로필의 자격 증명을 정의합니다.
다음 예제와 같이 프로필에 세션 토큰을 추가하여 임시 보안 자격 증명을 사용할 수도 있습니다.
[temp] aws_access_key_id =<YOUR_TEMP_ACCESS_KEY_ID>aws_secret_access_key =<YOUR_TEMP_SECRET_ACCESS_KEY>aws_session_token =<YOUR_SESSION_TOKEN>
자격 증명 파일 내의 기본이 아닌 프로필의 섹션 이름은 단어 profile로 시작해서는 안 됩니다. AWS SDK 및 도구 참조 안내서에서 자세한 내용을 읽을 수 있습니다.
구성 파일 생성
공유 자격 증명 파일(.aws/config)이 없는 경우 텍스트 편집기를 사용하여 홈 디렉터리에 파일을 생성할 수 있습니다. 구성 파일에 다음 콘텐츠를 추가하여 <REGION>을 원하는 리전으로 바꿉니다.
[default] region =<REGION>
[default] 제목은 다른 프로필을 사용하도록 구성하지 않는 한 SDK가 사용할 기본 프로필의 구성을 정의합니다.
다음 예시와 같이 이름이 지정된 프로필을 사용할 수 있습니다.
[profile named-profile] region =<REGION>
구성 파일 내의 기본이 아닌 프로필의 섹션 이름은 항상 단어 profile로 시작하고 의도한 프로필 이름을 따라야 합니다. AWS SDK 및 도구 참조 안내서에서 자세한 내용을 읽을 수 있습니다.
프로필 지정
각 액세스 키 세트를 프로필과 연결하여 동일한 구성 파일에 여러 액세스 키를 포함할 수 있습니다. 예를 들어 자격 증명 파일에서 다음과 같이 여러 프로필을 선언할 수 있습니다.
[default] aws_access_key_id = <YOUR_DEFAULT_ACCESS_KEY_ID> aws_secret_access_key = <YOUR_DEFAULT_SECRET_ACCESS_KEY> [test-account] aws_access_key_id = <YOUR_TEST_ACCESS_KEY_ID> aws_secret_access_key = <YOUR_TEST_SECRET_ACCESS_KEY> [prod-account] ; work profile aws_access_key_id = <YOUR_PROD_ACCESS_KEY_ID> aws_secret_access_key = <YOUR_PROD_SECRET_ACCESS_KEY>
기본적으로 SDK는 AWS_PROFILE 환경 변수를 확인하여 사용할 프로필을 결정합니다. AWS_PROFILE 변수가 설정되지 않은 경우 SDK는 default 프로필을 사용합니다.
경우에 따라 애플리케이션에 다른 프로필을 사용할 수 있습니다. 예를 들어 myapp 애플리케이션에 test-account 자격 증명을 사용하려고 합니다. 다음 명령을 사용하여 이 프로필을 사용할 수 있습니다.
$ AWS_PROFILE=test-account myapp
config.LoadDefaultConfig를 직접 호출하기 전에 os.Setenv("AWS_PROFILE", "test-account")를 직접 호출하거나 다음 예제와 같이 명시적 프로필을 인수로 전달하여 SDK에 프로필을 선택하도록 지시할 수도 있습니다.
cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithSharedConfigProfile("test-account"))
참고
환경 변수에서 자격 증명을 지정하는 경우 SDK는 지정한 프로필에 관계없이 항상 해당 자격 증명을 사용합니다.
환경 변수
기본적으로 SDK는 사용자 환경에서 설정된 AWS 자격 증명을 감지하고 이를 사용하여 AWS에 대한 요청에 서명합니다. 이렇게 하면 애플리케이션에서 자격 증명을 관리할 필요가 없습니다.
SDK는 다음 환경 변수에서 자격 증명을 찾습니다.
-
AWS_ACCESS_KEY_ID -
AWS_SECRET_ACCESS_KEY -
AWS_SESSION_TOKEN(선택 사항)
다음 예제는 환경 변수를 구성하는 방법을 보여줍니다.
Linux, OS X 또는 Unix
$ export AWS_ACCESS_KEY_ID=YOUR_AKID $ export AWS_SECRET_ACCESS_KEY=YOUR_SECRET_KEY $ export AWS_SESSION_TOKEN=TOKEN
Windows
> set AWS_ACCESS_KEY_ID=YOUR_AKID > set AWS_SECRET_ACCESS_KEY=YOUR_SECRET_KEY > set AWS_SESSION_TOKEN=TOKEN
프로그래밍 방식으로 자격 증명 지정
config.LoadDefaultConfig를 사용하면 공유 구성 소스를 로드할 때 명시적 aws.CredentialProvidercustomProvider가 aws.CredentialProvider 구현 인스턴스를 참조하는 경우 다음과 같이 구성 로드 중에 전달할 수 있습니다.
cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithCredentialsProvider(customProvider))
이 예제와 같이 자격 증명을 명시적으로 제공하는 경우 SDK는 해당 자격 증명만 사용합니다.
참고
LoadDefaultConfig가 전달받거나 반환하는 모든 자격 증명 공급자는 CredentialsCacheaws.Config에서 직접 공급자를 명시적으로 구성하는 경우 NewCredentialsCache
정적 자격 증명
credentials.NewStaticCredentialsProvider
cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithCredentialsProvider(credentials.NewStaticCredentialsProvider("AKID", "SECRET_KEY", "TOKEN")), )
주의
애플리케이션 내에 자격 증명을 포함하지 마세요. 이 메서드는 테스트 목적으로만 사용하세요.
Single Sign-On 자격 증명
SDK는 AWS IAM Identity Center를 사용하여 임시 AWS 자격 증명을 검색하기 위한 자격 증명 공급자를 제공합니다. AWS CLI를 사용하여 AWS 액세스 포털로 인증하고 임시 AWS 자격 증명에 대한 액세스를 승인합니다. 그런 다음 Single Sign-On(SSO) 프로파일을 로드하도록 애플리케이션을 구성하고 SDK는 SSO 자격 증명을 사용하여 만료될 경우 자동으로 갱신되는 임시 AWS 자격 증명을 검색합니다. 그러나 SSO 자격 증명이 만료되면 AWS CLI를 사용하여 IAM Identity Center 계정에 다시 로그인하여 명시적으로 갱신해야 합니다.
예를 들어 프로필, dev-profile을 생성하고 AWS CLI를 사용하여 해당 프로필을 인증 및 승인하고, 아래와 같이 애플리케이션을 구성할 수 있습니다.
-
먼저
profile및sso-session을 생성합니다.
[profile dev-profile] sso_session = dev-session sso_account_id = 012345678901 sso_role_name = Developer region = us-east-1 [sso-session dev-session] sso_region = us-west-2 sso_start_url = https://company-sso-portal.awsapps.com/start sso_registration_scopes = sso:account:access
-
AWS CLI를 사용해 로그인하여 SSO 프로필을 인증하고 승인합니다.
$ aws --profile dev-profile sso login Attempting to automatically open the SSO authorization page in your default browser. If the browser does not open or you wish to use a different device to authorize this request, open the following URL: https://device.sso.us-west-2.amazonaws.com/ Then enter the code: ABCD-EFGH Successully logged into Start URL: https://company-sso-portal.awsapps.com/start
-
그런 다음 SSO 프로필을 사용하도록 애플리케이션을 구성합니다.
import "github.com/aws/aws-sdk-go-v2/config" // ... cfg, err := config.LoadDefaultConfig( context.Background(), config.WithSharedConfigProfile("dev-profile"), ) if err != nil { return err }
SSO 프로필 구성 및 AWS CLI를 사용한 인증에 대한 자세한 내용은 AWS CLI 사용 설명서의 AWS IAM Identity Center을 사용하도록 AWS CLI 구성을 참조하세요. SSO 자격 증명 공급자를 프로그래밍 방식으로 구성하는 방법에 대한 자세한 내용은 ssocreds
다른 자격 증명 공급자
SDK는 자격 증명
사용 가능한 자격 증명 공급자:
-
ec2rolecreds
- Amazon EC2 IMDS를 통해 Amazon EC2 인스턴스 역할에서 자격 증명을 검색합니다. -
endpointcreds
- 임의의 HTTP 엔드포인트에서 자격 증명을 검색합니다. -
processcreds
- 호스트 환경의 쉘에서 간접적으로 호출할 외부 프로세스에서 자격 증명을 검색합니다. -
stscreds
- AWS STS에서 자격 증명 검색