AWS 크레덴셜 안전하게 사용하기 – AWS SSO

AWS SSO(Single Sign-On)는 하나의 AWS 마스터 계정에 통합된 여러 AWS 계정에 대한 인증을 간소화하기 위한 서비스로, 한 번의 인증만으로 여러 계정에 대한 권한을 손쉽게 취득할 수 있습니다. 개인 사용자는 필요성을 크게 못느낄 수 있겠지만, 조직 단위로 수많은 계정을 운용하는 경우에는 계정별로 IAM 권한을 관리하기가 매우 어렵기 때문에 SSO의 사용은 필수입니다.

SSO 계정의 동작 원리는 IAM으로 생성된 사용자 계정과는 사뭇 다릅니다. 사용자 계정은 그 자체로써 권한을 보유하고 이에 대한 액세스 키를 별도로 발급할 수 있습니다. SSO 계정은 마스터 계정에서 하위 계정으로 Assume Role을 통해 권한을 획득하기 때문에 이미 그 자체로 액세스 키와 세션 토큰을 이용하는 임시 보안 자격 증명을 사용하고 있습니다. 그래서 별도의 절차 없이도 액세스 키를 발급할 필요 없이, 임시 보안 자격 증명을 바로 사용할 수도 있습니다.

계정별로 보유한 권한에 따라 콘솔 접근과 임시 보안 자격 증명을 사용 가능합니다.

임시 보안 자격 증명을 복사하거나 저장하는 방식으로 CLI 세션에서 사용할 수가 있는데, 임시 보안 자격 증명의 유효 시간은 기본 1시간에서 최대 8시간으로 제한되기 때문에 시간이 지날 때마다 갱신을 해줘야 한다는 불편함이 있습니다.

임시 보안 자격 증명을 복사하여 사용할 수 있습니다.

이러한 불편함을 해결하기 위해서 AWS CLI에서는 sso 인증 절차를 추가할 수 있습니다. 앞선 글에서 CLI에 액세스 키를 등록하는 방법에 대해서 알아보았는데, 그와 유사하게 sso를 등록해보도록 하겠습니다.

> aws configure sso --profile demo
SSO session name (Recommended): demo
SSO start URL [None]: https://demo.awsapps.com/start
SSO region [None]: ap-northeast-2
SSO registration scopes [sso:account:access]:
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.ap-northeast-2.amazonaws.com/

Then enter the code:

BXJF-XXXX
There are 15 AWS accounts available to you.
Using the account ID 000000000000
The only role available to you is: AdministratorAccess
Using the role name "AdministratorAccess"
CLI default client Region [ap-northeast-2]: ap-northeast-2
CLI default output format [json]: json

To use this profile, specify the profile name using --profile, as shown:

aws s3 ls --profile demoCode language: Bash (bash)

최신 버전의 AWS CLI에서는 여러 계정 프로파일에 대해서 SSO 세션을 공유할 수 있도록 SSO Session Name을 물어보고 있습니다. 이 부분은 등록을 안하셔도 무방합니다. 그 후에 SSO 로그인 URL과 리전을 입력하면 자동으로 브라우저에서 로그인 절차가 진행됩니다. 로그인을 성공적으로 완료하셨다면 코드 인증 과정을 거치게 됩니다. 인증이 정상적으로 진행되었다면 다음과 같은 테스트를 진행해볼 수 있습니다.

> aws s3 ls --profile demo
2021-09-12 22:08:17 cf-templates-***
2021-09-12 21:33:59 lamanus-***
2021-03-21 14:28:32 wordpress-***Code language: Bash (bash)

지금까지 입력한 정보라고는 SSO에 대한 것들 뿐입니다. 이를 AWS CLI에 저장함으로써 갱신이 필요할 때마다 자동으로 브라우저 로그인을 진행하게 됩니다. 브라우저 로그인은 생체 인증이나 보안 코드와 같이 MFA 디바이스를 등록해서 사용하면 매우 안전하게 사용할 수 있겠지요. 실제로 로컬에 저장된 CLI 설정 정보를 살펴보면 다음과 같습니다.

> cat ~/.aws/config
[profile demo]
region = ap-northeast-2
output = json
sso_session = demo
sso_account_id = 000000000000
sso_role_name = AdministratorAccess

[sso-session demo]
sso_start_url = https://demo.awsapps.com/start
sso_region = ap-northeast-2
sso_registration_scopes = sso:account:accessCode language: Bash (bash)

액세스 키와 같은 민감한 정보가 파일에 남아있지 않고, 인증은 브라우저를 통해서 직접 진행되기 때문에 매우 안전합니다. 물론… SSO를 사용하지 못하는 경우도 있을 겁니다. 그리고 SSO를 사용한다고 하더라도 AWS CLI를 통해 취득한 세션 크레덴셜을 다른 프로그램에서 사용하기가 매우 난감합니다. 이러한 경우를 극복하면서 크레덴셜을 안전하게 사용할 수 있는 방법에 대해서는 다음 글을 통해서 살펴보도록 하겠습니다.

Leave a Reply

Your email address will not be published. Required fields are marked *