이 포스팅에서는 현재 가장 많이 사용되고 있는 계정관리 서비스 중 하나인 OKTA(https://www.okta.com)/를 이용하여 AWS IAM 의 SAML Federation 을 설정하는 방법에 대해 다뤄보려고 합니다.
AWS 환경에서 외부 IdP 와 SAML 을 이용하여 계정을 연동하는 경우는 크게 아래의 두 가지 경우를 생각할 수 있는데요.
첫번째, 외부 IdP 를 계정 관리 및 SSO 로 사용하는 환경에서 IdP 에서 사용자에 대한 인증 및 SSO 을 수행하고 AWS IAM 서비스와 연동하여 IdP 를 통해 인증된 사용자가 IAM 권한을 인가 받는 경우
두번째, 외부 IdP 는 계정 관리만을 수행하고 AWS SSO 서비스와 연동하여 IdP 를 통해 인증된 사용자가 IAM 권한을 인가 받거나 AWS SSO 서비스에 등록된 다른 어플리케이션을 사용하는 경우
이 포스팅의 위 두 가지 중 첫번째 경우를 다룬다고 보시면 될 것 같습니다.
1. OKTA Dev 계정 생성하기
OTKA 를 이용하여 AWS IAM 과 연동하기 위해서는 먼저 OKTA 의 계정이 필요하겠죠. OKTA 에서는 개발자들을 위해 간단하게 사용할 수 있는 무료 계정을 제공하고 있습니다.
아래의 링크에서 회원 가입을 하여 개발자 계정을 발급받도록 하겠습니다.
https://developer.okta.com/
2. 새로운 App Integration 생성
계정이 정상적으로 생성되었다면 관리자 페이지로 로그인 후 화면 좌측의 메뉴에서 “Applications” — “ Applications” 를 선택합니다. 이후 아래와 같은 페이지가 나타나면 “Create App Integration” 을 선택합니다.
“Create App Integration” 버튼을 클릭한 후 나타난 화면에서 SAML 연동을 위하여 “SAML 2.0” 을 선택한 후 Next 를 클릭합니다.
General Settings 에서 App 의 이름을 입력한 후 Next 를 클릭합니다.
다음 화면에서 “Single sign on URL” 과 “Audience URI(SP Entity ID)” 입력 부분에 아래의 값을 각각 입력합니다.
https://signin.aws.amazon.com/saml
urn:amazon:webservices
나머지 모든 값들은 그대로 둔 후 Next 를 클릭합니다.
아래와 같이 마지막 단계를 선택해 준 후 “Finish” 를 클릭합니다.
새로운 App 이 생성되었다면 AWS IAM 과의 연동을 위하여 SAML Metadata 를 다운로드 받아야 합니다.
아래와 같이 새롭게 생성된 App 의 Settings 화면 중간에 위치한 “Identity Provider metadata” 부분에 마우스를 오른쪽 클릭하여 링크의 내용을 저장합니다. 저장 시 확장자는 “.xml” 로 하도록 합니다.
여기까지 진행하였다면 OKTA 에서의 1차 준비는 완료되었습니다.
이제 AWS IAM 설정을 시작하겠습니다.
3. AWS IAM Identity Provider 생성
AWS Management Console 에 로그인 후 IAM 서비스로 이동합니다. 아래와 같이 IAM 메뉴 중 “Identity Providers” 메뉴를 선택한 후 “Identity Provider” 를 추가합니다.
Protocol Type = SAML
Provider Name = 임의의 값
Metadata Document = 조금 전 다운로드받은 .xml 파일
모든 설정이 적용되었다면 “Add Provider” 버튼을 클릭합니다.
Identity Provider 가 정상적으로 생성되었다면 Identity Provider 리스트에서 새로 생성된 Identity Provider 를 클릭하여 아래와 같이 “ARN” 정보를 복사한 후 저장해 두도록 하겠습니다.
4. AWS IAM Role 생성
이제 OKTA 를 통해 인증된 사용자가 사용할 IAM Role 을 생성할 차례입니다. IAM 의 Role 생성 메뉴로 이동하여 아래와 같이 Trusted Entity 를 “SAML 2.0 Federation” 을 선택하고 SAML Provider 리스트에서 조금 전 생성한 OKTA-Demo Provider 를 선택합니다.
API 와 Management Console 모두 허용하기 위해서 “Allow programmatic and AWS Management Console access” 라디오 버튼을 클릭합니다.
Next 버튼을 클릭한 후 권한을 선택합니다. 저는 테스트를 위해 AdministratorAccess 를 선택하였습니다.
Role 의 이름을 입력한 후 Role 생성을 완료합니다.
OKTA 를 위한 IAM Role 생성이 정상적으로 완료되었다면 해당 Role 을 클릭하여 “Role ARN” 정보를 복사하여 기록해두도록 하겠습니다.
이것으로 AWS IAM 에서의 설정도 완료되었습니다.
이제 다시 OKTA 로 돌아가서 마지막 단계의 설정을 진행하도록 하겠습니다.
5. SAML 속성 변경
OKTA 의 관리자 페이지에서 첫번째 단계에서 생성한 App 의 General 메뉴를 클릭합니다. SAML 설정을 수정하기 위해서 General 의 내용 중 “SAML Settings” 의 “Edit” 버튼을 클릭합니다.
SAML 의 여러 설정 중 AWS IAM 에 전달될 속성값을 추가해주어야 합니다. 아래 그림과 같이 “Attribute Statements(optional)” 메뉴에서 아래의 값을 추가하겠습니다.
Name = https://aws.amazon.com/SAML/Attributes/Role
Value = user.userType
Name = https://aws.amazon.com/SAML/Attributes/RoleSessionName
Value = user.nickName
위의 두 값은 각각 User Profile 의 값중 User Type 과 Nick Name 값을 Role 과 RoleSessionName 으로 IAM 에게 전달하겠다는 것을 의미합니다.
위 값이 정상적으로 Next 버튼을 클릭하여 설정을 마무리합니다.
6. OKTA 사용자 생성
이제 OKTA 서비스를 사용할 사용자를 추가할 차례입니다. 관리 화면 좌측의 메뉴에서 “Directory” -” People” 을 선택한 후 “Add person” 버튼을 클릭합니다.
아래와 같이 추가할 사용자의 정보를 입력한 후 “Save” 버튼을 클릭합니다.
입력한 Email 주소로 사용자 활성화를 위한 이메일이 수신되었다면 해당 메일을 클릭하여 사용자를 활성화합니다.
사용자가 정상적으로 생성되었다면 이번에는 사용자에게 위 과정에서 생성한 App 을 추가해주어야 합니다.
생성된 사용자를 클릭한 후 나타나는 메뉴에서 “Applications” 를 선택한 후 “Assign Applications” 버튼을 클릭합니다.
나타난 App 리스트에서 이전 과정에서 생성한 AWS-IAM-Federation 의 우측에 위치한 “Assign” 버튼을 클릭하여 App 을 추가하도록 합니다.
다음 화면에서 아래와 같이 User Name 정보를 확인한 후 저장합니다.
App 할당이 정상적으로 완료되었다면 사용자의 Applications 메뉴에 아래와 같이 App 이 추가되어 있는 것을 확인할 수 있습니다.
이제 마지막 단계입니다.
사용자의 Profile 메뉴로 이동하여 속성값 수정을 위하여 “Edit” 버튼을 클릭합니다.
아래와 같이 이전 과정에서 지정하였던 NickName 과 User Type 에 대한 값을 각각 RoleSession Name 으로 사용할 값과 기록해두었던 “Role ARN” “Identity Provider ARN”정보를 입력합니다.
User Type 에 입력하여야 하는 “Role ARN” 과 “Identity Provider ARN” 정보는 아래와 같이 “,” 로 구분하여 함께 넣도록 합니다.
7. 연동 테스트
이제 모든 설정이 마무리되었습니다.
지금까지의 설정들이 모두 정상적으로 이뤄졌는지 확인하기 위해서 OKTA 의 로그인 페이지에서 위 과정에서 추가한 사용자의 계정으로 로그인하도록 하겠습니다.
로그인이 정상적으로 이뤄졌다면 아래와 같이 “AWS-IAM-Federation” 이라는 App 이 My Apps 리스트에 있는 것을 확인할 수 있습니다.
SAML 연동을 통해 정상적으로 AWS IAM Federation 이 이뤄지는지 확인하기 위하여 “AWS-IAM-Federation” 버튼을 클릭합니다.
모든 설정이 정상적이라면 아래와 같이 위 과정에서 지정한 IAM Role 과 RoleSessionName 을 이용하여 Federation 이 이뤄지는 것을 확인할 수 있습니다.
외부 Identity Provider 를 사용하여 Federation 구성을 하는 것은 AWS IAM 사용의 Best Practice 중 하나입니다. OKTA 기반으로 IdP Federation 을 고려하시는 분들께 참고가 되기를 바랍니다.
감사합니다.