How to integrate Duo Single Sign-On across multiple accounts with AWS Managed Microsoft AD

2021-08-07 AWS

AWS multiple accounts 一直是 AWS Users 用來隔離不同環境所使用的方法,然後就會出現一個團隊/一個人擁有多個 AWS accounts 的情況,所以 AWS Single Sign-On 一直是我推薦大家使用的一個 Managed SSO 好用又簡單。

前陣子有客戶提到希望實現 Duo MFA 在 AWS Single Sign-On,但目前 AWS Single Sign-On 只有支援 Radius MFA 如果要自架可以採用 Duo MFA on AWS 使用 AWS Fargate 將 Duo MFA 整合到 AWS Directory Service,但這個案例希望是以 Managed Service 作為架構,所以後來作者找到了 Duo Single Sign-On for AWS

Architecture

  • Duo SSO 支援多種 Identity Provider,這邊使用 AWS Managed Microsoft AD 作為 source
  • 基於遵守 Zero trust,Duo Authentication Proxy 作為 Active Directory 和 Duo SSO 的中介者,從 Private subnet 只需要開放 Outbound 443/https port
  • 由 Duo SSO 提供 Login URL 以及 push notification/Passcode
  • 當 Users 輸入帳號密碼登入時 Duo SSO 會推送一個 notification 到 Duo App 讓 Users 點選 Accept
  • Duo SSO 提供 SAML 2.0 授權 AWS IAM Identity Provider 後 assume Role 到 AWS Management Console

Preparation

  • 至少 1 種 Authentication source 像是 AWS Managed Microsoft AD
  • 1 組 EC2 Auto Scaling Group for Duo Authentication Proxy
  • 至少 1 個 AWS account
  • Your own domain name

Tips for AWS Managed Microsoft AD

基於安全 AWS Managed Microsoft AD 建立在 Private subnets,Duo Authentication Proxy 進行 AD 驗證時需要建立一個 AD service account 登入,所以 Security Group 也要開放給 Duo Proxy。

Tips for Duo Authentication Proxy

Duo 官方文件「Install the Duo Authentication Proxy」關於 Windows/Linux 的安裝方法算是詳細,對於資安有更進階需求的人可以參考 Best Practices。主要設定檔 /opt/duoauthproxy/conf/authproxy.cfg 會像這樣:

[ad_client]
host=<ad-dc-ip>
service_account_username=<ad-username>
service_account_password=<ad-password>
search_dn=<ad-search-dn>

[sso]
; Remote Identity Key, unique to this authentication source
rikey=<from-your-duo-sso-rikey>

; Enter your Active Directory service account username and password in the spaces provided.
service_account_username=<ad-username>
service_account_password=<ad-password>

<ad_client> 用於 Duo Authentication Proxy 連接 Active Directory 時使用,而 search_dn 則是當驗證時搜尋的範圍

<sso> 用於 Duo Single-Sign-On 登入驗證時使用,rikey 在 Duo SSO Management Console 設定 Duo Authentication Proxy 頁面時拿到

Tips for Duo Management Console setting

大部分管理 Users, Application 和 Authentication Sources 的操作都在 Duo Management Console 完成,大概紀錄幾個步驟。

設定 Authentication Sources 為 Active Directory

「Duo Dashboard – Single Sign-On – Add Source – Add an Active Directory」

Step.1 Install the Authentication Proxy 會提供 <sso> 設定檔加入到 Duo Authentication Proxy 這裡面都會包含 rikey,記得測試一下 connection,如果遇到問題建議 ssh 登入到 Duo Proxy 查看 /opt/duoauthproxy/log/ 應該能找到連線紀錄。

Step 2 ~ end 基本上是設定 Active Directory 的資訊,「3. Permitted Email Domains」需要提供至少一個 own domain name,而且 Users 只能從這個 domain name 登入,所以 Duo Single Sign-On

設定 Duo Application for AWS accounts

「Duo Dashboard – Applications – Protect an Application – Amazon Web Services (2FA with SSO hosted by Duo)」

特別注意在這個頁面會拿到 SAML Metadata document 是要匯入給 IAM Identity provider 使用,

Tips for AWS accounts

在 Duo Management Console 拿到 Metadata document 後,每一個 AWS accounts 都需要建立 identity provider 授權給 Duo SSO

Metadata document 內包含 Duo SSO 的連線資訊像是 Issuer URL, SSO service location 等等資訊,可以從 Duo Management Console 再次驗證這些資訊是否正確。

最後就是建立 IAM Role 授權這個 Identity provider 訪問:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::<account-id>:saml-provider/DuoSSO"
      },
      "Action": "sts:AssumeRoleWithSAML",
      "Condition": {
        "StringEquals": {
          "SAML:aud": "https://signin.aws.amazon.com/saml"
        }
      }
    }
  ]
}

Testing

Duo Single Sign-On 登入連結可以在「Duo – Applications」找到 Login URL 或者是 Custom domain

Summary

Duo MFA 和 Radius MFA 最大的優點就是 Duo 支援 push notification 的方法,不用再像 Radius MFA 輸入 6 位數的驗證碼且要擔心時間同步的問題,在驗證時更包含了 source IP, time and location 可以參考。缺點是 Duo Single Sign-On 基本上就是透過 SAML 2.0 與 AWS IAM identity provider 串接,而大部分的管理需要由 Duo Dashboard 上處理,對於 AWS Native support 比較沒有那麼好,能做到的事情很有限。

Anyway, right tool for right job!!

給 Mr. 沙先生一點建議

彙整

分類

展開全部 | 收合全部

License

訂閱 Mr. 沙先生 的文章

輸入你的 email 用於訂閱