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
실습
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 사용자 인증 및 권한 관리 (4) | 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 |
댓글