如何建立 IAM 政策以明確授予 IAM 使用者、群組或角色的權限,從而使用標籤在指定 VPC 中建立和管理 EC2 執行個體?

2 分的閱讀內容
0

如何建立 AWS Identity and Access Management (IAM) 政策,以明確授予 IAM 使用者、群組或角色權限,從而在指定的 VPC 中建立和管理 Elastic Compute Cloud (Amazon EC2) 執行個體? 該政策必須限制權限,以便 IAM 實體可以使用特定標籤建立 EC2 執行個體,並使用這些標籤在 VPC 中管理這些 EC2 執行個體。

簡短描述

Amazon EC2 提供有限的受支援資源層級權限,但需要考量若干個動作、資源和條件。某些 Amazon EC2 API 動作 (例如啟動 EC2 執行個體) 可透過 VPC ARN 使用標籤控制執行個體來控制。

解決方法

套用自訂 IAM 政策以限制 IAM 使用者、群組或角色的權限,以使用標籤在指定的 VPC 中建立 EC2 執行個體。使用政策條件「ec2:ResourceTags」來限制對執行個體的控制。此政策能授予權限以使用唯一標籤在指定的 VPC 中啟動 EC2 執行個體。然後,您可以使用限制性標籤來管理這些 EC2 執行個體。

建立受管政策以套用至啟動執行個體的 IAM 實體中

1.    開啟 IAM 主控台,選擇政策,然後選擇建立政策

2.    選擇 JSON 索引標籤,然後輸入此自訂政策:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "GrantIAMPassRoleOnlyForEC2",
      "Action": [
        "iam:PassRole"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:iam::ACCOUNTNUMBER:role/ROLENAME",
        "arn:aws:iam::ACCOUNTNUMBER:role/ROLENAME"
      ],
      "Condition": {
        "StringEquals": {
          "iam:PassedToService": "ec2.amazonaws.com"
        }
      }
    },
    {
      "Sid": "ReadOnlyEC2WithNonResource",
      "Action": [
        "ec2:Describe*",
        "iam:ListInstanceProfiles"
      ],
      "Effect": "Allow",
      "Resource": "*"
    },
    {
      "Sid": "ModifyingEC2WithNonResource",
      "Action": [
        "ec2:CreateKeyPair",
        "ec2:CreateSecurityGroup"
      ],
      "Effect": "Allow",
      "Resource": "*"
    },
    {
      "Sid": "RunInstancesWithTagRestrictions",
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": [
        "arn:aws:ec2:REGION:ACCOUNTNUMBER:instance/*",
        "arn:aws:ec2:REGION:ACCOUNTNUMBER:volume/*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:RequestTag/TAG-KEY": "TAG-VALUE"
        }
      }
    },
    {
      "Sid": "RemainingRunInstancePermissionsNonResource",
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": [
        "arn:aws:ec2:REGION::image/*",
        "arn:aws:ec2:REGION::snapshot/*",
        "arn:aws:ec2:REGION:ACCOUNTNUMBER*:network-interface/*",
        "arn:aws:ec2:REGION:ACCOUNTNUMBER*:key-pair/*",
        "arn:aws:ec2:REGION:ACCOUNTNUMBER*:security-group/*"
      ]
    },
    {
      "Sid": "EC2RunInstancesVpcSubnet",
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": "arn:aws:ec2:REGION:ACCOUNTNUMBER:subnet/*",
      "Condition": {
        "StringEquals": {
          "ec2:Vpc": "arn:aws:ec2:REGION:ACCOUNTNUMBER:vpc/VPC-ID"
        }
      }
    },
    {
      "Sid": "EC2VpcNonResourceSpecificActions",
      "Effect": "Allow",
      "Action": [
        "ec2:DeleteNetworkAcl",
        "ec2:DeleteNetworkAclEntry",
        "ec2:DeleteRoute",
        "ec2:DeleteRouteTable",
        "ec2:AuthorizeSecurityGroupEgress",
        "ec2:AuthorizeSecurityGroupIngress",
        "ec2:RevokeSecurityGroupEgress",
        "ec2:RevokeSecurityGroupIngress",
        "ec2:DeleteSecurityGroup",
        "ec2:CreateNetworkInterfacePermission",
        "ec2:CreateRoute",
        "ec2:UpdateSecurityGroupRuleDescriptionsEgress",
        "ec2:UpdateSecurityGroupRuleDescriptionsIngress"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "ec2:Vpc": "arn:aws:ec2:REGION:ACCOUNTNUMBER:vpc/VPC-ID"
        }
      }
    },
    {
      "Sid": "AllowInstanceActionsTagBased",
      "Effect": "Allow",
      "Action": [
        "ec2:RebootInstances",
        "ec2:StopInstances",
        "ec2:TerminateInstances",
        "ec2:StartInstances",
        "ec2:AttachVolume",
        "ec2:DetachVolume",
        "ec2:AssociateIamInstanceProfile",
        "ec2:DisassociateIamInstanceProfile",
        "ec2:GetConsoleScreenshot",
        "ec2:ReplaceIamInstanceProfileAssociation"
      ],
      "Resource": [
        "arn:aws:ec2:REGION:ACCOUNTNUMBER:instance/*",
        "arn:aws:ec2:REGION:ACCOUNTNUMBER:volume/*"
      ],
      "Condition": {
        "StringEquals": {
          "ec2:ResourceTag/TAG-KEY": "TAG-VALUE"
        }
      }
    },
    {
      "Sid": "AllowCreateTagsOnlyLaunching",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateTags"
      ],
      "Resource": [
        "arn:aws:ec2:REGION:ACCOUNTNUMBER:instance/*",
        "arn:aws:ec2:REGION:ACCOUNTNUMBER:volume/*"
      ],
      "Condition": {
        "StringEquals": {
          "ec2:CreateAction": "RunInstances"
        }
      }
    }
  ]
}

3.    將 ACCOUNTNUMBERREGIONTAG-KEYTAG-VALUEVPC-IDROLENAME 參數取代為環境中的值。

4.    (選擇性) 若您只將此政策指派給 IAM 使用者或群組,則可以使用 IAM 政策變數 ${aws:username} 取代標籤金鑰或標籤值參數。使用呼叫 IAM 使用者的易記名稱,此政策變數允許 IAM 服務預先填入這些參數。此步驟可讓 IAM 使用者僅在指定的 VPC 中啟動執行個體,並允許 IAM 使用者控制自己的執行個體。

5.    選擇檢閱政策,然後在名稱 中輸入名稱。例如,輸入「VPC_Lockdown_VPC-ID」,其中「VPC-ID」是您要套用此政策之虛擬私人雲端的識別碼。

6.    選擇建立政策

注意: 某些項目必須以您環境中的特定資源取代。如需詳細資訊,請參閱 Amazon Resource Name (ARN)

將政策附加至使用者、群組或角色中

1.    在 IAM 主控台導覽窗格中,選擇使用者群組角色

2.    選擇要附加政策的使用者、群組或角色。

3.    選擇附加政策

4.    輸入您在搜尋方塊中建立的政策名稱,然後選擇政策。例如,輸入「VPC_Lockdown_VPC-ID」。

5.    選擇附加政策

附加了此自訂政策的 IAM 實體可以登入 AWS 管理主控台、開啟 Amazon EC2 儀表板,然後在指定子網路、VPC 和標記後啟動 EC2 執行個體。

此政策會使用政策條件「ec2:ResourceTags」來限制下列動作:

  • 啟動執行個體
  • 停止執行個體
  • 重新啟動執行個體
  • 終止執行個體
  • 將磁碟區附加至執行個體
  • 從執行個體中分離磁碟區
  • 取消 IAM 執行個體設定檔與執行個體的關聯
  • 取代執行個體的 IAM 執行個體設定檔關聯
  • 獲取執行個體的主控台螢幕截圖

此政策會針對指定的 VPC 限制下列動作:

  • 刪除安全群組
  • 建立和刪除路由
  • 刪除路由表
  • 刪除網路 ACL
  • 刪除 ACL 項目
  • 授權或撤銷安全群組輸入和輸出規則
  • 建立網路介面權限
  • 更新輸入和輸出規則的安全群組說明

AWS 官方
AWS 官方已更新 2 年前