본문 바로가기
Security/Keycloak

Keycloak + saml2aws로 AWS 임시 자격 증명 얻기

by wlsdn3004 2023. 5. 9.
728x90
반응형

 

saml2aws는 aws cli 도구로 aws의 iam role 자격 증명을 쉽게 관리하고 여러 AWS 계정 간에 전환을 가능하게 해 준다.

 

이번 글에서는 Keycloak 유저가 saml2aws cli를 사용하여 AWS의 임시 자격 증명을 얻는 과정의 실습을 다룬다. 이전 글에서 진행했던 [Keycloak + AWS saml SSO 로그인 연동] 실습 기반으로 이어서 진행한다.

 

아래 그림을 참고하면 동작 과정에 도움이 될 것이다.

참조 링크 : https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/id_roles_providers_saml.html

 

SAML 2.0 기반 페더레이션 정보 - AWS Identity and Access Management

AWS의 SAML 2.0 페더레이션 구현에서는 IAM 자격 증명 공급자와 AWS 간의 암호화된 SAML 어설션을 지원하지 않습니다. 하지만 고객의 시스템과 AWS 간의 트래픽은 암호화된(TLS) 채널을 통해 전송됩니다.

docs.aws.amazon.com

 

 

실습


saml2aws cli를 다운로드한다.

$ CURRENT_VERSION=$(curl -Ls https://api.github.com/repos/Versent/saml2aws/releases/latest | grep 'tag_name' | cut -d'v' -f2 | cut -d'"' -f1)
$ wget -c https://github.com/Versent/saml2aws/releases/download/v${CURRENT_VERSION}/saml2aws_${CURRENT_VERSION}_linux_amd64.tar.gz -O - | tar -xzv -C /usr/local/bin
$ chmod u+x /usr/local/bin/saml2aws
$ saml2aws --version
2.36.4

 

saml2aws configure를 통해 아래와 같이 설정한다.

$ saml2aws configure
? Please choose a provider: KeyCloak
? AWS Profile saml
? URL https://{Keycloak_URL}/realms/master/protocol/saml/clients/test-url
? Username test

account {
  URL: https://{Keycloak_URL}/realms/master/protocol/saml/clients/test-url
  Username: test
  Provider: KeyCloak
  MFA: Auto
  SkipVerify: false
  AmazonWebservicesURN: urn:amazon:webservices
  SessionDuration: 3600
  Profile: saml
  RoleARN:
  Region:
}

 

.saml2aws라는 설정파일이 생성된 걸 확인할 수 있다.

$ cat .saml2aws
[default]
name                    = default
app_id                  =
url                     = https://{Keycloak_URL}/realms/master/protocol/saml/clients/test-url
username                = test
provider                = KeyCloak
mfa                     = Auto
mfa_ip_address          =
skip_verify             = false
timeout                 = 0
aws_urn                 = urn:amazon:webservices
aws_session_duration    = 3600
aws_profile             = saml
resource_id             =
subdomain               =
role_arn                =
region                  =
http_attempts_count     =
http_retry_delay        =
credentials_file        =
saml_cache              = false
saml_cache_file         =
target_url              =
disable_remember_device = false
disable_sessions        = false
prompter                =

 

saml2aws login을 하면 위에서 생성 된 .saml2aws 파일 정보 기반으로 로그인을 하여 자격 증명 정보를 가져온다.

Username/Password를 입력하면 현재 test유저에 할당된 role을 선택할 수 있다.

 

wlsdn-role2 role을 선택하면 아래오 같이 메세지가 나온다.

Selected role: arn:aws:iam::{account id}:role/wlsdn-role2
Requesting AWS credentials using SAML assertion.
Logged in as: arn:aws:sts::{account id}:assumed-role/wlsdn-role2/test

 

.aws/credentials 파일을 확인해 보면 1시간 동안 유효한 자격 증명을 확인할 수 있다.

$ cat ~/.aws/credentials
[saml]
aws_access_key_id        = ASIAQARZLMEXRPG6
aws_secret_access_key    = /ZifXzkS0EzgGAgVMHl3iYY/ixc
aws_session_token        = FwoGZXIaDFIdpO0z1exuHjbU4CLkARZDPq/vqJ0g8Sj0HVCk0lGyBkM3QUsbLi18OLE8xSDR/U/3Vu/OFTkSxU6PURkWme47MT44Qud3MSwO+gwtXm7yF1Fv/7twOeABxO7xGEydJDkGs3uhbDgscpwge8Ls/cINrR6PsysMrwIkDQZlBzOxMGAWt9waXjemPiZV6+ZmhYq2LZT2VgsD5jHQnxtZSJSqKBGv33p0yS8T+BBCjDr2iZlKRRWGpFDSi0Nc9jmSNVPbzu6aFevkKgENBC1Qf79/vwkL8qDX3NRqnrW5tqyFJ9JYU4soAuzdsnTrR8CG8/Jl9yij+eaiBjIzP+HC+ulah5jBbN+V+PYWr/0iIRLhAzr1xg/pdUWGA13xYQNU8PjAyVYd4eIEHx62rAKf
aws_security_token       = FwoGZXIaDFIdpO0z1exuHjbU4CLkARZDPq/vqJ0g8Sj0HVCk0lGyBkM3QUsbLi18OLE8xSDR/U/3Vu/OFTkSxU6PURkWme47MT44Qud3MSwO+gwtXm7yF1Fv/7twOeABxO7xGEydJDkGs3uhbDgscpwge8Ls/cINrR6PsysMrwIkDQZlBzOxMGAWt9waXjemPiZV6+ZmhYq2LZT2VgsD5jHQnxtZSJSqKBGv33p0yS8T+BBCjDr2iZlKRRWGpFDSi0Nc9jmSNVPbzu6aFevkKgENBC1Qf79/vwkL8qDX3NRqnrW5tqyFJ9JYU4soAuzdsnTrR8CG8/Jl9yij+eaiBjIzP+HC+ulah5jBbN+V+PYWr/0iIRLhAzr1xg/pdUWGA13xYQNU8PjAyVYd4eIEHx62rAKf
x_principal_arn          = arn:aws:sts::{account_id}:assumed-role/wlsdn-role2/test
x_security_token_expires = 2023-05-09T04:23:15Z

[참고]

자격 증명 유효 시간 기본값은 1시간이다.
유효 시간을 변경하고 싶을 경우 .saml2aws 파일의 aws_session_duration 값을 수정하고, AWS iam role의 최대 세션 지속 시간을 수정해야 한다.

 

saml profile을 지정하여 ec2 인스턴스의 정보를 가져오면 정상으로 가져오는 걸 확인할 수 있다.

$ aws --profile saml ec2 describe-instances --region ap-northeast-2

 

다른 role로 변경하고 싶다면 --force 옵션을 주어 다시 로그인하면 된다.

$ saml2aws login --force
Using IdP Account default to access KeyCloak http://ceca445d4.elb.ap-northeast-2.amazonaws.com/realms/master/protocol/saml/clients/test-url
To use saved password just hit enter.
? Username test
? Password ****

Authenticating as test ...
? Please choose the role  [Use arrows to move, type to filter]
> Account: test (account_id) / wlsdn-role
  Account: test (account_id) / wlsdn-role2
  
Selected role: arn:aws:iam::{account_id}:role/wlsdn-role
Requesting AWS credentials using SAML assertion.
Logged in as: arn:aws:sts::{account_id}:assumed-role/wlsdn-role/test

 

credentials파일에서 x_principal_arn을 통해 변경된 role 정보를 확인할 수 있다.

$ cat ~/.aws/credentials

[saml]
aws_access_key_id        = ASIAQFDEW5XGP7FL
aws_secret_access_key    = 6ee9vJZXeCqKPRHCGHHsJluOBXF1DvCoyC+
aws_session_token        = FwoGZXIvYXdzENSLkAaKQugMGDRLvUdqEp/iNX6eiTMmHBRGKjB24auVLqIi1Z56B37zHDijq3p6Phn8Wr1fxkRbq/J7havDybbTcOm4RN0BlqzCMMJKWIUNXBxVZCY+atwyz/UzNzoaZHHt9FTle+rzH/tVTI+OGkeglA85gCZqHbzOZw2YS7yeXmdcMfiZwE4pHlaHt8olIbpDZ0qB/sf3fWjxMQDkW/rwuwdcFdGd+6OL/1V8I9NuncXUOyQ5ugX5CcHcVzJvbtDRcZ8Ya4bHgMAGm1vAZD3XGQz3c18w8nAHzmVkam07P4777AlpS9Si5/+aiBjIzC9wciqm8U//yF/k2mCwYnZF8Fyl/jWfhtFW1bnj9/2Y5PcaopqrZt+g5w9UueBqxOtZ+
aws_security_token       = FwoGZXIvYXdzENSLkAaKQugMGDRLvUdqEp/iNX6eiTMmHBRGKjB24auVLqIi1Z56B37zHDijq3p6Phn8Wr1fxkRbq/J7havDybbTcOm4RN0BlqzCMMJKWIUNXBxVZCY+atwyz/UzNzoaZHHt9FTle+rzH/tVTI+OGkeglA85gCZqHbzOZw2YS7yeXmdcMfiZwE4pHlaHt8olIbpDZ0qB/sf3fWjxMQDkW/rwuwdcFdGd+6OL/1V8I9NuncXUOyQ5ugX5CcHcVzJvbtDRcZ8Ya4bHgMAGm1vAZD3XGQz3c18w8nAHzmVkam07P4777AlpS9Si5/+aiBjIzC9wciqm8U//yF/k2mCwYnZF8Fyl/jWfhtFW1bnj9/2Y5PcaopqrZt+g5w9UueBqxOtZ+
x_principal_arn          = arn:aws:sts::{account_id}:assumed-role/wlsdn-role/test
x_security_token_expires = 2023-05-09T04:36:25Z
반응형

댓글