AD FS를 이용하여 AWS SAML 2.0 연동에 대해 설명한다. AD FS 구성이 되어 있다는 전제로 진행한다.
개요
- AD FS를 이용해 AD의 계정을 AWS Web Console 또는 CLI에서도 사용 가능하도록 설정한다.
- AD FS에서 AD의 인증을 통해 AD의 c.value인 Group 값과 AWS IAM Role의 Name 값을 비교하여 1:1 매핑(Mapping) 시켜 동작한다.
- 동작은 AD User Group의 접두사(AWS-) 뒤의 Name과 AWS IAM Role의 접두사(ADFS-) 뒤의 Name을 비교하여 동작한다.
- AD FS는 AD 인증 후 User의 E-mail Address를 AWS Web Console에 전달한다.
- AWS Web Console은 ADFS에서 넘어 온 Role Name과 AWS IAM Role Name을 비교하여 동일한 Role 권한으로 E-mail Address를 이용해 로그인 한다.
AD에 Group 생성 및 User 연결
AD DS 서버에 접속하여 Server Manager를 띄운 후 Tools에서 Active Directory Users and Computers를 실행한다.
Active Directory Users and Computers Console이 뜨면 Group을 아래와 같이 생성한다.
- AWS-Dev
- AWS-Production
(Group을 생성할 시 접두사인 "AWS-"는 사용자 정의가 가능하며, 계정 별로 꼭 통일시켜줘야 한다.
Bob이라는 User를 생성한다. (E-mail Address를 꼭 입력한다.)
Bob 계정에 미리 생성한 AWS-Dev와 AWS-Production Group에 연결한다. (두 그룹에 대한 설정을 보기 위함)
AWS에 SAML 2.0 생성
- AD FS가 설치된 서버에서 아래 URL로 접속하여 .xml 파일을 다운로드 받는다.
https://"yourServerName"/FederationMetadata/2007-06/FederationMetadata.xml
- SAML 2.0을 생서할 때 AWS Console에 로그인하여 IAM Web Console에 접속한다.
- IAM Web Console의 왼쪽 Navigator에서 Identity Providers를 클릭한다.
- 오른쪽에 Identity Providers Console 상단의 Create Provider를 클릭한다.
- Create Provider 마법사가 뜨면 Step 1: Create Provider 창이 뜨며 Provider Type을 SAML로 선택한다.
- 바뀐 UI에서 Provider Name에는 알아볼 수 있는 Name을 지정한다. (Test를 위해 ADFS라고 입력)
- Metadata Document에는 Choose File을 선택하여 앞서 AD FS 서버에서 다운로드 한 .xml 파일을 선택한다.
- 파일이 첨부되면 Next Step을 클릭한다.
- Step 2: Verify Provider Information 창에서 Create를 클릭한다.
AWS IAM Role 생성
- AWS Console에 Login 하여 IAM Web Console에 접속한다.
- IAM Web Console 왼쪽 Navigator에서 Roles를 클릭한다.
- 오른쪽에 Roles Console에서 Create New Role을 클릭한다.
- Step1: Set Role Name에서 Role Name을 다음 Name으로 각각 만든다.
(ADFS-Dev, ADFS-Products)
- Step2: Select Role Type에서 Role For Identity Provider Access를 선택하고, Grant Web Single Sign-in(Web SSO) access to SAML provider 항목을 Select 한다.
- Step3: Establis Trust에서 SAML provider를 ADFS로 선택하고 Next Step을 클릭한다.
- Verify Role Trust 화면에서는 JSON 내용만 확인하고 Next Step을 클릭한다.
- Step4: Attach Policy에서 다음과 같이 Role에 알맞은 Policy를 설정한 후 Next Step을 클릭한다.
(ADFS-Dev: ReadOnlyAccess, ADFS-Products: AdministratorAccess)
- Step5: Review에서 내용을 확인한 후 Create Role을 클릭하여 Role을 생성한다.
Configuring AWS as a Trusted Relying Party
- AD FS 서버에 접속해서 Server Manager를 띄운 후 Tools에서 AD FS Managedment를 실행한다.
- AD FS Console이 뜨면 왼쪽 Navigator에서 AD FS를 선태갛ㄴ 후 마우스 우 클릭한다.
- 팝업 창에서 Add Relying Party Trust를 클릭한다.
- Add Relying Party trust Wizard가 뜨면 Welcome 화면에서 Start 버튼을 클릭한다.
- Select Data Source 부분에 아래 URL을 캡쳐화면과 같이 입력한 후 Next 버튼을 클릭한다.
(https://signin.aws.amazon.com/static/saml-metadata.xml)
- Specify Display Name에 AWS Console에 Login 할 때 구분할 수 있는 Name을 이별갛낟.
(설정하는 값은 나중에 0번 슬라이드의 Login 화면에서 보이는 구분자 값)
- Configure Multi-fator Authentication Now 화면은 Default 값으로 Next를 클릭한다.
- Choose Issuance Authorization Roles는 Permit all user to access this relying party를 선택한 후 Next 버튼을 클릭한다.
- Ready to Add Trust 화면에서는 Next를 클릭한다.
- Finish 화면에서 Open the Edit Claim Rules dialog for this relying party trust when the wizard closes에 체크를 풀고 Close를 클릭한다.
- AD FS 서버에서 Server Manager를 띄운 후 Tools에서 AD FS Management를 실행한다.
- AD FS Console이 뜨면 왼쪽 Navigator에서 ADFS -> Trust Relationships -> Relating Party Trusts를 선택한다.
- 오른쪽 창에 생성한 Relating Party Trusts를 선택한 후 마우스를 우 클릭한다.
- 마우스 우 클릭으로 뜬 팝업 창의 Edit Claim Rules... 를 선택한다.
- Edit Claim Rules for "Relying Party Trusts Name" 창이 뜨면 Issuance Transform Rules 탭에서 Add Rule.. 을 클릭한다.
- Add Transform Claim Rule Wizard 창이 뜨면 Choose Rule Type에서 Transform an Incoming Claim을 선택하고 Next를 클릭한다.
- Configure Claim Rule에서 다음과 같이 입력한 후 Finish를 클릭한다.
Claim rule name: NameId
Incoming claim type: Windows Account Name
Outgoing claim type: Name ID
Outgoing name ID format: Persistent Identifier
Pass through all claim values: checked
- Issuance Transform Rules 탭에서 Add Rule을 클릭한다.
- Add Transform Claim Rule Wizard 창이 뜨면 Choose Rule Type에서 Send LDAP Attributes as Claims을 선택하고 Next를 클릭한다.
- Configure Claim Rule에서 다음과 같이 입력한 후 Finish를 클릭한다.
Claim rule name: RoleSessionName
Attribute store: Active Directory
LADP Attribute: E-mail-Addresses
Outgoing Claim Type:
https://aws.amazon.com/SAML/Attributes/RoleSessionName
- Issuance Transform Rules 탭에서 Add Rule을 클릭한다.
- Add Transform Claim Rule Wizard 창이 뜨면 Choose Rule Type에서 Send Claims Using a Custom Rule을 선택하고 Next를 클릭한다.
- Configure Claim Rule에서 다음과 같이 입력한 후 Finish를 클릭한다.
Claim Rule Name: Get AD Groups
Custom Rule
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"] => add(store = "Active Directory", types = ("http://temp/variable"), query = ";tokenGroups;{0}", param = c.Value);
- Issuance Transform Rules 탭에서 Add rule을 클릭한다.
- Add Transform Claim Rule Wizard 창이 뜨면 Choose Rule Type에서 Send Claims Using a Custom Rule을 선택하고 Next를 클릭한다.
- Configure Claim Rule에서 다음과 같이 입력한 후 Finish를 클릭한다.
Claim Rule Name: Roles
Custom rule(<> 괄호로 묶인 부분들을 수정한 후 기입)
c:[Type == "http://temp/variable", Value =~ "(?i)^AWS-"] => issue(Type = "https://aws.amazon.com/SAML/Attributes/Role", Value = RegExReplace(c.Value, "AWS-", "<AWS IAM Identity Providers ARN>,arn:aws:iam::<AWS Account NO>:role/<AWS Role에서 생성한 접두사 (ex: ADFS-)>"));
- Edit Claim Rules for <Relying Party Trusts Name> 창의 Issuance Transform Rules 탭에서 다음과 같이 NameId, Role SessionName, Get AD Groups, Roles가 있는 지 확인 후 OK 버튼을 클릭한다.
- 브라우저에서 다음과 같은 URL에 접속하면 아래와 같은 화면을 볼 수 있다.
https://"ADFS Server FQDN"/adfs/ls/IdplnitiatedSignOn.aspx
- 로그인을 하면 계정의 Group과 AWS IAM Roles와 연결된 Role이 다음 화면과 같이 뜬다.
- 적절한 Role을 선택하고 Sign In을 클릭한다.
설정한 E-mail Address로 로그인 된 것을 확인할 수 있다.
참고 자료
AWS Blog
AWS Document
AWS Troubleshooting
'잡부생활' 카테고리의 다른 글
CORS (simple, preflight request) (0) | 2020.03.27 |
---|---|
알리바바 클라우드(Alibaba cloud) CDN 분석 (0) | 2019.12.24 |
XGBoost 파라미터 정리 (0) | 2019.11.06 |
Windows 10에서 Linux 사용하기 (0) | 2019.11.01 |
OpenVPN, OpenLDAP (0) | 2019.04.23 |