如何限制僅從已標記的 AMI 啟動 Amazon EC2 執行個體的存取權限?

2 分的閱讀內容
0

我想限制使用者的存取權限,讓他們只能從已標記的 Amazon Machine Images (AMI) 啟動 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體。如何限制使用 AMI 標籤啟動 EC2 執行個體的存取權限?

解決方法

若要限制使用者使用已標記的 AMI 啟動 EC2 執行個體的存取權限,請從現有執行個體建立 AMI 或使用現有的 AMI,然後將標籤新增至 AMI。然後,使用標籤條件建立自訂 AWS Identity and Access Management (IAM) 政策,其中會限制使用者只能啟動使用已標記 AMI 之執行個體的權限。

在此範例 IAM 政策中,共有三個聲明 ID (SID):

  • SID ReadOnlyAccess 可讓使用者使用 Describe* 檢視任何在帳戶中的 EC2 資源,其中包括所有以 Describe 開頭的 EC2 動作。SID ReadOnlyAccess 同樣可讓使用者取得 EC2 執行個體的主控台輸出和螢幕擷取畫面。如需詳細資訊,請參閱 GetConsoleOutputGetConsoleScreenshot。Amazon CloudWatch 的 DescribeAlarmsGetMetricStatistics 權限允許 EC2 執行個體的基本運作狀態資訊出現在 Amazon EC2 主控台中。啟動 EC2 執行個體時,IAM 的 ListInstanceProfiles 權限可讓現有執行個體設定檔顯示在設定執行個體詳細資料頁面上的 IAM 角色清單中。但是,ListInstanceProfiles API 不允許使用者將 IAM 角色連接至 EC2 執行個體。
  • SID ActionsRequiredtoRunInstancesInVPC 透過指定每個資源的 ARN 以使用資源層級權限,授予使用者使用任何執行個體、金鑰對、安全群組、磁碟區、網路介面,或是 us-east-1 區域中的子網路,以執行 RunInstances API 的權限。
  • SID LaunchingEC2withAMIsAndTags 可讓使用者在 AMI 的環境標籤具有設定為 Prod 的值,而且 AMI 位於 us-east-1 區域的情況下,使用 AMI 啟動 EC2 執行個體。對於任何位於 us-east-1 區域的 AMI,而且條件符合 EC2:ResourceTag/Environment 標籤金鑰和金鑰值 Prod 的值,則資源層級權限設定為 ARN。

下列 IAM 政策為 RunInstances API 動作的必要資源使用資源層級權限。如需 RunInstances 必要資源的詳細資訊,請參閱受支援的資源層級權限

注意:

  • 此政策可讓使用者在啟動 EC2 執行個體時列出角色,但使用者無法使用附加的角色啟動執行個體,除非他們擁有 iam:PassRole 權限。
  • 此政策不允許使用者建立新的安全群組。使用者必須選取現有安全群組以啟動 EC2 執行個體,除非使用者擁有 EC2 CreateSecurityGroup 權限。EC2:CreateSecurityGroup API 動作授予僅建立安全群組的存取權限;此動作不會新增或修改任何規則。若要新增傳入規則,使用者必須擁有傳入 EC2 AuthorizeSecurityGroupIngress API 動作和傳出 EC2 AuthorizeSecurityGroupEgress API 動作的權限。
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ReadOnlyAccess",
      "Effect": "Allow",
      "Action": [
        "ec2:Describe*",
        "ec2:GetConsole*",
        "cloudwatch:DescribeAlarms",
        "cloudwatch:GetMetricStatistics",
        "iam:ListInstanceProfiles"
      ],
      "Resource": "*"
    },
    {
      "Sid": "ActionsRequiredtoRunInstancesInVPC",
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": [
        "arn:aws:ec2:us-east-1:AccountId:instance/*",
        "arn:aws:ec2:us-east-1:AccountId:key-pair/*",
        "arn:aws:ec2:us-east-1:AccountId:security-group/*",
        "arn:aws:ec2:us-east-1:AccountId:volume/*",
        "arn:aws:ec2:us-east-1:AccountId:network-interface/*",
        "arn:aws:ec2:us-east-1:AccountId:subnet/*"
      ]
    },
    {
      "Sid": "LaunchingEC2withAMIsAndTags",
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": "arn:aws:ec2:us-east-1::image/ami-*",
      "Condition": {
        "StringEquals": {
          "ec2:ResourceTag/Environment": "Prod"
        }
      }
    }
  ]
}