這篇的來源是當你的 AWS 環境有「多帳號」所延伸出來的安全議題,assumeRole 的用法可以參考之前寫過的一篇「在 AWS 用 switch Role 的方式管理多個 Account」通常會透過一個跳板帳號,這篇稱為 Jump Account,這個方法會透過 Jump Account IAM User 跳到 Client Account 的 IAM Role。
用了一陣子後發現 Jump Account 的 IAM User 如果不小心沒加上 MFA 驗證也可以跳到 Client Account,沒有 MFA 漏洞就大了許多,尤其關係到這麼多的 AWS Account。
後來查了一下 IAM Role 的 Trust Policy 可以限制來源擁有 MFA !! 官方內容可以參考「How Do I Protect Cross-Account Access Using MFA?」
作法其實在 Client Account 的 IAM Role 加上 MFA Condition 就好
Create Role
一種是從 create role 勾選 Require MFA 就可以限制來源必須要有 MFA 認證
Trust Policy
另一種是直接改 Trust Policy 在 Condition 加上 aws:MultiFactorAuthPresent 就好
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {"AWS": "Parent-Account-ID"},
"Action": "sts:AssumeRole",
"Condition": {"Bool": {"aws:MultiFactorAuthPresent": true}}
}
]
}
這樣子沒有開啟 MFA 認證的 IAM User 就不能跳到這個 Role 了。