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
'Security > Keycloak' 카테고리의 다른 글
Keycloak + Terraform Cloud SAML SSO 로그인 연동 (0) | 2024.02.19 |
---|---|
Keycloak을 활용한 Kubernetes 사용자 인증 및 권한 관리 (5) | 2023.12.19 |
Keycloak + AWS saml SSO 로그인 연동 (2) | 2023.05.09 |
Keycloak + Vault 연동 SSO(Single Sign-On) 구현하기 (2) | 2023.04.12 |
Keycloak 이란? 개념과 설치 실습 (0) | 2023.04.08 |
댓글