前幾天把 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可以開機器,但只限於低階機器.

註解

  1. AWS 賬戶 ID: 要在 AWS 管理控制台 中查找 AWS 賬戶 ID 號,請在右上角的導航欄中單擊 Support (支持),然後單擊 Support Center (支持中心)。當前已登錄的賬戶 ID 顯示在右上角的 Support 菜單下方。

來源