Terraform enterprise ADFS 연동

scvit·2024년 7월 3일

https://developer.hashicorp.com/terraform/enterprise/saml/idp-configuration/adfs#configure-terraform-enterprise

1. 준비사항

1-1 lets_encrypt 인증서 생성


  • 반드시 2048bit, rsa 암호화이어야 함 ( Ubuntu에서 default로 rsa, 2048로 생성함 )
sudo apt install -y letsencrypt
sudo certbot certonly --rsa-key-size 2048 --manual --preferred-challenges dns -d "*.ddimtech.click"

....

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/ddimtech.click/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/ddimtech.click/privkey.pem
This certificate expires on 2024-09-23.
  • Route 53에 acme_challenge 레코드에 값 작성
cd /etc/letsencrypt/live/ddimtech.click
ls /etc/letsencrypt/live/ddimtech.click

fullchain.pem 	# intermediate + cert.pem 합친 fullchain 인증서 
chain.pem 		  # intermediate 인증서 (root 인증서 역할)
cert.pem 				# 인증서
privkey.pem 		# 키
  • pem -> pfx 변환
openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out fullchain.pfx -certfile chain.pem
Enter Export Password:
Verifying - Enter Export Password:

pfx 변환시 패스워드 입력

1-2 Window Adminstrator Password 변경


  • Powershell 에서 실행
net user Administrator "<새로운 패스워드>"

1-3 Computer name, Ethernet 설정


  1. computer name 검색 - Rename this PC (advanced)

rena

스크린샷 2024-06-25 오전 11.16.36

  1. Ethernet 검색 - Change adapter options - Properties - TCP/IPv4 properties - Use the following IP Address 및 Use the following DNS server addresses

스크린샷 2024-06-25 오전 11.18.38

스크린샷 2024-06-25 오전 11.19.26

command 터미널에서 ipconfig 활용

  • Use the following IP address 입력
    • IP address : 내 IP 입력
    • subnet mask
    • Default gateway
  • Use the following DNS server addresses
    • Preferred DNS server : 내 IP 입력

2. ADDS, IIS, DNS서버 설치


  1. Server Manager - add roles and features - ADDS, DNS Server, IIS 설치

스크린샷 2024-06-25 오전 11.23.28

스크린샷 2024-06-25 오전 11.24.20

스크린샷 2024-06-25 오전 11.24.31

스크린샷 2024-06-25 오전 11.24.34

스크린샷 2024-06-25 오전 11.24.38

스크린샷 2024-06-25 오전 11.24.54

스크린샷 2024-06-25 오전 11.25.10

ADDS Configure Wizard


  1. Promote this server to a domain controller

스크린샷 2024-06-25 오전 11.27.57

  1. Add a new forest 선택 - 인증서의 Root domain name 입럭 ( abc.ddimtech.click 이면 ddimtech.click )

스크린샷 2024-06-25 오전 11.28.59

  1. 복구용 DSRM password 입력

스크린샷 2024-06-25 오전 11.32.31

스크린샷 2024-06-25 오전 11.32.38

스크린샷 2024-06-25 오전 11.33.28

스크린샷 2024-06-25 오전 11.33.41

스크린샷 2024-06-25 오전 11.33.46

스크린샷 2024-06-25 오전 11.34.39

3. ADFS 설치


  1. Server Manager - add roles and features - ADFS 설치

스크린샷 2024-06-25 오후 1.07.06

ADFS Configure wizard


스크린샷 2024-06-25 오후 1.08.37

  1. Create the first federation server in federation server farm 선택

스크린샷 2024-06-25 오후 1.08.47

  1. pfx 인증서 import

스크린샷 2024-06-25 오후 1.09.03

스크린샷 2024-06-25 오후 1.15.54

  1. Federation Service Name : ADFS 서버의 hostname 임의 작성

스크린샷 2024-06-25 오후 1.16.31

  1. Use an exisiting domain user account or group Managed Service Account - Select - Administrator 선택 및 Password 입력

스크린샷 2024-06-25 오후 1.16.41

스크린샷 2024-06-25 오후 1.16.50

스크린샷 2024-06-25 오후 1.18.59

스크린샷 2024-06-25 오후 1.19.11

스크린샷 2024-06-25 오후 1.19.17

  1. 설치 완료

스크린샷 2024-06-25 오후 1.20.04

4. 접속


  1. adfs 서버에서 https://localhost/adfs/ls/idpinitiatedsignon.aspx 로 접속
    • DNS 서버 주소가 adfs 서버인 클라이언트 서버에서는 https://<adfs hostname>/adfs/ls/idpinitiatedsignon.aspx 로 접속
  2. 처음에 sign in을 할 수 없다는 안내가 나올 것
  3. adfs 서버 powershell에서 아래 커맨드 실행
Set-AdfsProperties -EnableIdpInitiatedSignonPage $true

5. 연동


5-0 DNS 설정

  1. DNS 서버
    • TFE NLB - CNAME 추가
    • adfs 서버 - A 추가
    • PC timezone: UTC+09:00 Seoul 설정

스크린샷 2024-06-25 오후 5.51.21

  1. TFE 서버

    • docker-compose.yaml 에 다음 값 추가
     no_proxy: "adfs1.ddimtech.click"
     ...
     TZ: "Asia/Seoul" # ADFS 서버와 맞추기 
     ...
     extra_hosts:
          - "adfs1.ddimtech.click:10.11.1.98"

5-1 ADFS 설정

Endpoint
  1. Active Directory Federation Service management - Service - Endpoint
  2. Type : SAML 2.0 / WS-Fedaration 찾기
  3. URL PATH 메모 - 기본값: /adfs/ls/

스크린샷 2024-06-25 오후 5.00.11

Certificate
  1. Active Directory Federation Service management - Service - Certificates
  2. Token-Signing 인증서 base64 인코딩값으로 다운로드

스크린샷 2024-06-25 오후 5.00.26

스크린샷 2024-06-25 오후 5.00.36

스크린샷 2024-06-25 오후 5.00.43

스크린샷 2024-06-25 오후 5.00.47

Claim Rule
  1. Active Directory Federation Service management - Relying Party Trust
  2. Add Relying Party Trust
  3. Federation metadata address : https://<TFE HOSTNAME>/users/saml/metadata 입력
    • DNS 에 TFE_HOSTNAME 이 NLB address 로 CNAME 추가 필요
    • Establish Trust SSL/TLS .... 에러시 TFE서버의 CA 인증서를 certmgr.msc에 Trusted Root Certficiate 에 Impot 신뢰 등록 필요

스크린샷 2024-06-25 오후 5.04.45

스크린샷 2024-06-25 오후 5.09.57

  1. User rule 생성

스크린샷 2024-06-25 오후 5.14.08

스크린샷 2024-06-25 오후 5.14.18

  • Email Address를 LDAP으로 사용하는 Rule

스크린샷 2024-06-25 오후 5.18.01

스크린샷 2024-06-25 오후 5.18.32

  • Email Address를 ID로 사용하는 Rule
  1. Group Rule (Admin Group 설정)

스크린샷 2024-06-25 오후 5.19.41

스크린샷 2024-06-25 오후 5.19.50

  • User's Group: admin 권한을 줄 그룹 선택
  • Outgoing claim type : Memberof >> Terraform - Team Atrribute Name과 Sync할 예정
  • Outgoing claim value : site-admins >> Terraform - Site admin roler과 Sync할 예정

참고: AD user는 Claim rule에 따라 Email 설정, 그룹에 유저 추가 필요

스크린샷 2024-06-25 오후 5.25.17

스크린샷 2024-06-25 오후 5.25.03

스크린샷 2024-06-25 오후 5.27.51

5-2. Terraform 설정

  1. https://mwtfe.ddimtech.click/app/admin/saml 접속

  2. Enable SAML SSO

  3. Identity Provider Settings

    • Single Sing-On URL : https://<ADFS HOSTNAME>/<URL PATH>
    • Single Log-out URL : https://<ADFS HOSTNAME>/<URL Path>?wa=wsignout1.0
    • idp certficate : 다운로드한 Token-Signing 인증서 값 입력
  1. Team management 설정 - Group Claim Rule과 연동

    • Group Claim Role과 Sync하여 AD의 TFE_ADMIN 그룹에 있는 유저는 가입시 Org부터 생성하는 Admin 권한을 갖게된다

스크린샷 2024-06-25 오후 4.53.43

스크린샷 2024-06-25 오후 4.54.08

스크린샷 2024-06-25 오후 4.54.25

6. AD Group - TFE Teams 매핑

Terraform Teams의 SSO Team ID 와 ADFS의 Claim rule Outgoing claim value를 일치시키는게 핵심

스크린샷 2024-07-05 오전 10.43.38

스크린샷 2024-07-05 오전 10.44.32

스크린샷 2024-07-05 오전 10.44.38

스크린샷 2024-07-05 오전 10.45.22

로그인 확인

스크린샷 2024-07-05 오전 10.53.43

스크린샷 2024-07-05 오전 10.54.37

TrobuleShooting


  1. ADFS - TFE Metadata 연결에 Establish Trusted SSL/TLS Error

    • TFE Root 인증서 신뢰 등록
  2. ADFS - TFE Metadata 연결 시 The request aborteds : Could not create SSL/TLS Secure Channel 에러

    • TFE 서버의 CA 값에 ADFS 서버의 CA 값을 합쳐서 TFE 서버를 올려야함
    • NLB를 통한 ACM의 경우 공인인증서의 역할을 해서 필요 없으나, 사설인증서로 구축한 TFE에 직접연결하는 경우, 직접적인 인증서 신뢰가 필요
  3. Terraform SAML 로그인 시, SSO login fails with "Current time is earlier than NotBefore condition UTC -1s 에러

    • terraform 서버의 Timezone, ADFS서버의 Timezone 일치시키기
  1. ADFS Configure시 ID 8025 Parameter name:value Error

    • Import한 인증서의 Key 알고리즘이 RSA, Key 비트수가 2048 인지 확인
    openssl x509 -text -in <인증서> 
    
    ...
     Subject Public Key Info:
                Public Key Algorithm: rsaEncryption
                    RSA Public-Key: (2048 bit)
    ...
  1. ADFS서버 구축단계에서 인증서 import시 this file is invalid for use as following personal information exchange

    • 인증서를 nginx같은 웹서버에서 curl, wget 등으로 가져오면 문제가 생기는듯
    • 인증서 파일을 이메일로 보내 adfs 서버 PC에서 직접 다운로드 받아서 해결

0개의 댓글