Member-only story
Assume Role in AWS
在 AWS 身份管理的概念上,Assume role 一直很常被提到。在我的觀念裡面 Assume Role 一直是一個很奇怪的存在。我一直聽到 Assume Role 好像比較安全,因為他用暫時性的 credentials,但實際上到底哪裡比較安全?
Role
你需要權限的時候,就可以透過 Assume Role API,取得暫時性短效期的 credential ,使用這個 credential 變身成該 Role 的身份。比起一般的 IAM User 配發 credentail 有不一樣的地方,一般的 IAM User 用法是配發一個沒去動就不會過期的 Access key id / secret access key 。
Identity 與 Resource 都要開通權限
我發現 Assume Role 有個地方跟想像中不太一樣,兩邊都要給全縣才會通。除了需要在一開始未變身的 Identity (IAM User or Role) 要有 Assume Role 的權限,而且,在要被 Assume 的目標端 Role trust policy 上面要標示出來源端 Principal 。就算在同帳戶下也要雙向給權限,跟我認知到 S3 bucket policy 與 KMS key policy 這種 resource-based policy 同帳戶下單向給權限就會通的玩法不太一樣。
role trust policy 裡面的 principal ARN 有時候會用 <account-id>:root
來給權限,這其實給了這個帳戶裡面不止 root ,也包括這個帳戶下所有 IAM Identity 相對應的權限。只要該 IAM identity 再加上適當的 IAM policy ,有跟 trust policy 呼應的話,就有權限 Assume role 。
For example, a principal similar to arn:aws:iam::123456789012:root allows all IAM identities of the account to assume that role.
權限配置完後,使用 aws sts assume-role
就能拿到暫時性的 credentials 。