如何建立 IAM 政策以明確授予權限,以在具有標籤的指定 VPC 中建立和管理 EC2 執行個體?

2 分的閱讀內容
0

我想建立 AWS Identity and Access Management (IAM) 政策,該政策明確授予 IAM 身分管理虛擬私有雲端 (VPC) 中 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體的權限。

簡短描述

IAM 政策必須限制 IAM 身分的權限,以管理 VPC 中具有標籤的執行個體。

Amazon EC2 提供部分資源層級權限,但您可以使用多種服務層級動作、資源和條件。若要控制對 EC2 資源的存取,請使用資源標籤

解決方法

建立政策,以授予啟動 VPC 中執行個體的權限,但限制 IAM 身分管理執行個體的權限。若要限制執行個體的管理,請使用 ec2:ResourceTag 政策條件。

建立受管政策以附加至啟動執行個體的 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"
            }
          }
        }
      ]
    }

    注意:ACCOUNTNUMBERREGIONTAG-KEYTAG-VALUEVPC-IDROLENAME 參數取代為您的值。

  3. (選用) 若要將政策指派給 IAM 使用者或群組,請將 TAG-KEYTAG-VALUE 參數取代為 ${aws:username} IAM 政策變數。此政策變數允許 IAM 使用 IAM 使用者的友好名稱預先填入參數。IAM 使用者只能在指定的 VPC 中啟動執行個體,並控制自己的執行個體。

  4. 選擇檢閱政策,然後輸入名稱。例如,輸入 VPC_Lockdown_VPC-ID

  5. 選擇建立政策
    **注意:**您必須使用環境中的特定資源取代某些項目。如需詳細資訊,請參閱 Amazon Resource Name (ARN)

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

請完成下列步驟:

  1. 開啟 IAM 主控台
  2. 在導覽窗格中,選擇使用者群組角色,然後選擇 IAM 身分。
  3. 選擇新增權限,然後選擇附加政策
  4. 輸入政策名稱,然後選擇您的政策。
  5. 選擇附加政策

附加自訂政策後,IAM 身分可以登入 AWS 管理主控台、開啟 EC2 儀表板,並啟動 EC2 執行個體。IAM 身分必須指定子網路、VPC 和標籤,以啟動 EC2 執行個體。

ec2:ResourceTags 條件會限制下列動作:

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

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

  • 刪除安全群組。
  • 建立和刪除路由。
  • 刪除路由表。
  • 刪除網路存取控制清單 (network ACL)。
  • 刪除網路 ACL 項目。
  • 授權或撤銷安全群組輸入和輸出規則。
  • 建立網路介面權限。
  • 更新輸入和輸出規則的安全群組說明。

相關資訊

如何使用 PrincipalTag、ResourceTag、RequestTag 和 TagKeys 條件鍵為標籤型限制建立 IAM 政策?

AWS 官方
AWS 官方已更新 7 個月前