不使用“source_profile”在 EC2 主機上切換 IAM 角色
我有一個 EC2 Ubuntu 主機,我有一個使用者帳戶負責在不同時間執行不同的任務。每個任務都需要由相應的 IAM 角色表示的特定權限(我稱它們為“配置文件角色”)。這個想法是授予該使用者在需要時擔任這些角色的權限。
目前,
~/.aws/credentials
配置如下所示:[default] aws_access_key_id = XXX aws_secret_access_key = YYY [profile1] role_arn = arn:aws:iam::XXXXXXXXXX:role/role-for-profile1 source_profile = default [profile2] role_arn = arn:aws:iam::XXXXXXXXXX:role/role-for-profile2 source_profile = default ... [profileN] role_arn = arn:aws:iam::XXXXXXXXXX:role/role-for-profileN source_profile = default
profile 中的使用者
default
只有一個權限:擔任以 . 開頭的任何角色role-for-profile
。策略 JSON 如下所示:{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1494333413000", "Effect": "Allow", "Action": [ "sts:AssumeRole" ], "Resource": [ "arn:aws:iam::XXXXXXXXXX:role/role-for-profile*" ] } ] }
因此,任何需要訪問特定 AWS 服務以執行特定任務的應用程序(無論它是否使用 AWS CLI、Boto、Ansible 模組或其他)都可以指定配置文件名稱並透明地承擔所需的配置文件角色.
現在我擔心的是:因為這是在 EC2 主機上執行的,所以我根本不需要顯式地將任何憑據放入該主機。理論上,我可以直接將“主”IAM 角色附加到 EC2 主機,而不是創建使用者,授予其切換角色權限,並將其憑證顯式放入
default
配置文件中。但是,我似乎不能這樣做,因為
source_profile
參數是強制性的。有誰知道,我如何授權 EC2 主機承擔角色而不給它任何憑據?換句話說,我希望主機通過原則“我是什麼”(具有給定 IAM 角色的 EC2 實例)而不是“我知道的”(明確提供 IAM 使用者的訪問密鑰和密鑰)進行身份驗證。更新。找到了幾個功能請求 - 看起來尚不支持 :(
更新2。看來我需要澄清此設置的目的。我有在同一主機上執行的不同腳本(甚至可能是並行的)。每個腳本都需要一組特定的權限。我想要實現的是,每個腳本都只有這組權限,而不是更多。在我看來,實現這一目標的最佳方法如下:
- 在主機級別根本不提供任何權限,除了承擔許多特定角色的權限。
- 當腳本開始工作時,它需要承擔相應的角色才能獲得所需的權限。
- 同時,我不想將角色 ARN 烘焙到腳本中。相反,我想在 中定義多個配置文件
~/.aws/credentials
,每個配置文件都定義為承擔特定角色。我對前兩項沒有問題。然而,實現第三個需要我創建一個“預設”配置文件,其他配置文件將用作參考,並且這個“預設”配置文件出於某種原因必須具有使用者的憑據。我想要指的是附加到執行所有這些東西的 EC2 實例的角色。
我一直在嘗試解決同樣的問題。我能找到的最接近的是這個要點:https ://gist.github.com/gene1wood/34b02fa3091e184e1997
它使用該
aws sts assume-role
命令獲取一組臨時憑據(預設在 60 分鐘後過期)。我想您可以使用此腳本獲取分配給 EC2 實例的角色的臨時憑證,並更新“預設”配置文件的 AWS 訪問密鑰和 AWS 密鑰。由於臨時憑證每小時到期一次,因此您需要一個 cron 作業來定期更新它們。有點醜陋,但在得到支持之前,我認為它很有可能起作用。