前幾天把 AWS 這最近幾年re:Invent的影片列表整理出來以後, 最近有空就找一些有興趣的題目來看. 今天發現一個題目講得不錯, 開場之後就丟出一個有趣的問題:
有AWS客戶開了support ticket問, 客戶想讓自家的工程師可以開 EC2 ,但是成本考量,希望不要開太大的機器,限制在t1,t2,m3 這三個中小型系列的機器就好. 該如何處理?
這個題目實戰性質還蠻高的, 可能許多人都會用到, 所以要記錄一下, 答案就是用自定的IAM policy來處理. 以下是操作步驟:
創建自訂的 IAM Policy
- AWS Console - IAM - 左邊 Policy - Create Policy
- 選 Create Your Own Policy
- Policy Name 取個名字,例如 Deny_InstanceType_NotLike_t1_t2_m3
- 把以下Policy貼到 Policy Document
- 把Policy 裡面的 <你的12位數字account id> 改成你的帳戶id [註解1]
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:*",
"Resource": "*"
},
{
"Effect": "Deny",
"Action": "ec2:RunInstances",
"Resource": "arn:aws:ec2:*:<你的12位數字account id>:instance/*",
"Condition": {
"StringNotLikeIfExists": {
"ec2:InstanceType": [
"t1.*",
"t2.*",
"m3.*"
]
}
}
}
]
}
- 按一下驗證 Validate Policy, 驗證成功後送出
將自訂的 Policy 掛到 Users 身上
- AWS Console - IAM - 左邊 Users - 選擇 User - Permissions Tab- Add permissions 按鈕
- 點選 Attach existing policies directly (套用現成policy) - 找到剛才新建的 Deny_InstanceType_NotLike_t1_t2_m3 -勾選起來
- 以下一路 Next
假如你要將Policy 掛在 Group上也可以, 操作步驟差不多.
驗證
- 用該User登入, 到 EC2 區, 可以開 m4.large c3.large這些中低階機器試試, 正常的話會被擋下來(如圖)
如此就不用擔心新進員工失手了,像是開了一台 x1.32xlarge 機器擺著過夜, 一晚就能燒了一兩百美金的狀況.
Policy 說明
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:*",
"Resource": "*"
},
這上半部的策略是指 User 可以使用EC2的任何功能.
{
"Effect": "Deny",
"Action": "ec2:RunInstances",
"Resource": "arn:aws:ec2:*:<你的12位數字account id>:instance/*",
"Condition": {
"StringNotLikeIfExists": {
"ec2:InstanceType": [
"t1.*",
"t2.*",
"m3.*"
]
}
}
}
]
}
這下半部的大意是:拒絕掉 t1/t2/m3 以外的所有機器類型. 整個policy組合起來就是我們要的: User可以開機器,但只限於低階機器.
註解
- AWS 賬戶 ID: 要在 AWS 管理控制台 中查找 AWS 賬戶 ID 號,請在右上角的導航欄中單擊 Support (支持),然後單擊 Support Center (支持中心)。當前已登錄的賬戶 ID 顯示在右上角的 Support 菜單下方。