# 限制高危操作

AWS 将 API 操作分为不同风险级别，高风险操作通常会对账户安全、资源访问控制或服务可用性产生重大影响。以下列举一些高危 AWS API 操作，以及它们为何被认为高风险：

**IAM (身份与访问管理)**

* **CreateAccessKey:** 为 IAM 用户创建访问密钥。访问密钥包含访问密钥 ID 和私有访问密钥，等同于长期有效的用户名和密码，拥有对 AWS 资源的完全访问权限，一旦泄露会造成严重安全风险。
* **DeleteAccessKey:** 删除 IAM 用户的访问密钥。删除访问密钥会导致依赖该密钥的应用程序或服务无法访问 AWS 资源，可能导致业务中断。
* **AttachUserPolicy**, **PutUserPolicy:** 将策略附加到 IAM 用户或组。不当的策略配置可能导致用户获得过高的权限，从而对 AWS 资源进行未经授权的操作。
* **DetachUserPolicy**, **DeleteUserPolicy:** 从 IAM 用户或组中分离或删除策略。与上述操作类似，不当操作可能导致用户权限配置错误，影响应用程序正常运行。
* **CreateLoginProfile**, **UpdateLoginProfile:** 为 IAM 用户创建或更新登录配置文件（用户名和密码）。如果密码设置过于简单或泄露，攻击者可能利用该用户身份登录并控制您的 AWS 资源。

**EC2 (弹性计算云)**

* **RunInstances:** 启动新的 EC2 实例。启动未经授权的实例或配置错误的实例可能导致安全漏洞，并产生高额费用。
* **TerminateInstances:** 终止 EC2 实例。终止运行中的实例可能导致数据丢失和业务中断，尤其是在没有做好数据备份和灾难恢复的情况下。
* **ModifyInstanceAttribute:** 修改 EC2 实例的属性，例如安全组、IAM 角色等。不当修改实例属性可能导致安全漏洞或服务中断。

**S3 (简单存储服务)**

* **PutBucketAcl**, **PutObjectAcl:** 设置 S3 存储桶或对象的访问控制列表（ACL）。错误的 ACL 配置可能导致数据泄露或未经授权的数据访问。
* **DeleteBucket:** 删除 S3 存储桶。删除存储桶会导致该存储桶中所有数据永久丢失，属于不可逆操作。

**其他高危操作：**

* **DeleteDBInstance (RDS):** 删除数据库实例。
* **DeleteCluster (Redshift):** 删除数据仓库集群。
* **DeleteFunction (Lambda):** 删除 Lambda 函数。
* **DeleteTopic (SNS):** 删除 SNS 主题。

**请注意，以上只是一些常见的高危 AWS API 操作示例，并非完整列表。**

为了提高 AWS 账户安全性，建议您采取以下措施：

* **启用多因素身份验证 (MFA)：** 为所有 IAM 用户启用 MFA，特别是根用户。
* **遵循最小权限原则：** 仅授予用户完成其工作所需的最小权限。
* **使用 IAM 角色：** 使用 IAM 角色授予应用程序和服务访问 AWS 资源的权限，而不是使用访问密钥。
* **定期轮换密钥：** 定期轮换访问密钥和其他凭证。
* **监控 API 活动：** 使用 AWS CloudTrail 监控账户的 API 调用活动，及时发现可疑操作。

限制一些关键服务的使用，例如 关闭服务器，IAM管理，创建RDS，创建S3等等，因为这些资源需要给予极其小心和慎重的管理。可以仅允许安全团队使用的角色访问关键服务，并且访问时要使用MFA：

\<my-corporate-cidr>换成公司常用的VPN办公网段，这样只有从可信人的预期网络操作才被允许，可以避免攻击者拿到AKSK以后进行高危操作。

## 阻止用户管理IAM和删除KMS，给KMS打标签

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "iam:CreateAccessKey",
        "iam:DeleteAccessKey",
        "iam:AttachUserPolicy",
        "iam:PutUserPolicy",
        "iam:UpdateAssumeRolePolicy",
        "iam:UpdateRole",
        "iam:DetachUserPolicy",
        "iam:DeleteUserPolicy",
        "iam:CreateLoginProfile",
        "iam:UpdateLoginProfile",
        "kms:DisableKey",
        "kms:DisableKeyRotation",
        "kms:TagResource",
        "kms:UntagResource",
        "kms:ScheduleKeyDeletion"
      ],
      "Resource": "*",
      "Condition": {
        "ArnNotLike": {
          "aws:PrincipalARN": [
            "arn:aws:iam::*:role/*SecurityAdmin*",
            "arn:aws:iam::*:role/*SecurityAdministration*"
          ]
        },
        "BoolIfExists": {
          "aws:PrincipalIsAWSService": "false",
          "aws:ViaAWSService": "false"
        }
      }
    }
  ]
}
```

### 阻止用户管理SSO <a href="#example_cloudwatch_1" id="example_cloudwatch_1"></a>

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AWSSSOMemberAccountAdministrator",
            "Effect": "Deny",
            "Action": [
                "ds:DescribeDirectories",
                "ds:AuthorizeApplication",
                "ds:UnauthorizeApplication",
                "ds:DescribeTrusts",
                "iam:ListPolicies",
                "organizations:EnableAWSServiceAccess",
                "organizations:DescribeOrganization",
                "organizations:DescribeAccount",
                "organizations:ListRoots",
                "organizations:ListAccounts",
                "organizations:ListAccountsForParent",
                "organizations:ListParents",
                "organizations:ListChildren",
                "organizations:ListOrganizationalUnitsForParent",
                "organizations:ListDelegatedAdministrators",
                "sso:*",
                "sso-directory:*",
                "identitystore:*",
                "identitystore-auth:*",
                "ds:CreateAlias",
                "access-analyzer:ValidatePolicy"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AWSSSOManageDelegatedAdministrator",
            "Effect": "Deny",
            "Action": [
                "organizations:RegisterDelegatedAdministrator",
                "organizations:DeregisterDelegatedAdministrator"
            ],
            "Resource": "*",
            "Condition": {
                "StringNotEquals": {
                    "organizations:ServicePrincipal": "sso.amazonaws.com"
                }
            }
        }
    ]
}
```

### 阻止用户禁用 CloudWatch 或更改其配置 <a href="#example_cloudwatch_1" id="example_cloudwatch_1"></a>

高危操作的条件可以参考第一个json策略中的定义，此处省略了：

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "cloudwatch:DeleteAlarms",
        "cloudwatch:DeleteDashboards",
        "cloudwatch:DisableAlarmActions",
        "cloudwatch:PutDashboard",
        "cloudwatch:PutMetricAlarm",
        "cloudwatch:SetAlarmState"
      ],
      "Resource": "*"
    }
  ]
}
```

### 阻止用户禁用 AWS Config 或更改其规则 <a href="#example_config_1" id="example_config_1"></a>

此 SCP 阻止任何受影响账户中的用户或角色运行可禁用 AWS Config 或更改其规则或触发器的 AWS Config 操作。

高危操作的条件可以参考第一个json策略中的定义，此处省略了：

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "config:DeleteConfigRule",
        "config:DeleteConfigurationRecorder",
        "config:DeleteDeliveryChannel",
        "config:StopConfigurationRecorder"
      ],
      "Resource": "*"
    }
  ]
}
```

### 防止禁用默认 Amazon EBS 加密

以下策略限制所有用户禁用默认 Amazon EBS 加密。

高危操作的条件可以参考第一个json策略中的定义，此处省略了：

```
{
  "Effect": "Deny",
  "Action": [
    "ec2:DisableEbsEncryptionByDefault"
  ],
  "Resource": "*"
}
```

### 阻止用户禁用 GuardDuty 或修改其配置 <a href="#example_guardduty_1" id="example_guardduty_1"></a>

此 SCP 阻止任何受影响账户中的用户或角色直接以命令形式或通过控制台禁用 GuardDuty 或更改其配置。它有效地允许对 GuardDuty 信息和资源进行只读访问。

高危操作的条件可以参考第一个json策略中的定义，此处省略了：

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [ 
                "guardduty:AcceptInvitation",
                "guardduty:ArchiveFindings",
                "guardduty:CreateDetector",
                "guardduty:CreateFilter",
                "guardduty:CreateIPSet",
                "guardduty:CreateMembers",
                "guardduty:CreatePublishingDestination",
                "guardduty:CreateSampleFindings",
                "guardduty:CreateThreatIntelSet",
                "guardduty:DeclineInvitations",
                "guardduty:DeleteDetector",
                "guardduty:DeleteFilter",
                "guardduty:DeleteInvitations",
                "guardduty:DeleteIPSet",
                "guardduty:DeleteMembers",
                "guardduty:DeletePublishingDestination",
                "guardduty:DeleteThreatIntelSet",
                "guardduty:DisassociateFromMasterAccount",
                "guardduty:DisassociateMembers",
                "guardduty:InviteMembers",
                "guardduty:StartMonitoringMembers",
                "guardduty:StopMonitoringMembers",
                "guardduty:TagResource",
                "guardduty:UnarchiveFindings",
                "guardduty:UntagResource",
                "guardduty:UpdateDetector",
                "guardduty:UpdateFilter",
                "guardduty:UpdateFindingsFeedback",
                "guardduty:UpdateIPSet",
                "guardduty:UpdatePublishingDestination",
                "guardduty:UpdateThreatIntelSet"
            ],      
            "Resource": "*"
        }
    ]
}
```

### 防止用户更新 Route 53 ARC 路由控制状态 <a href="#example_app_rec_con" id="example_app_rec_con"></a>

低级别 Route 53 ARC 操作员需要监控控制面板并查看 Route 53 ARC 信息。但是，操作员不得更新路由控制以将应用程序从一个 AWS 区域 故障转移到另一个，而高级操作员可能允许进行此操作。此 SCP 阻止任何受影响账户中的用户或角色运行可更新 Route 53 ARC 路由控制的 Route 53 ARC 操作。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DenyAll",
            "Effect": "Deny",
            "Action": [
                "route53-recovery-cluster:UpdateRoutingControlState",
                "route53-recovery-cluster:UpdateRoutingControlStates"
            ],
            "Resource": "*",
            "Condition": {
                "ArnNotLike": {
                    "aws:PrincipalARN": [
                        "arn:aws:iam::*:role/Role1AllowedToBypassThisSCP",
                        "arn:aws:iam::*:role/Role2AllowedToBypassThisSCP"
                    ]
                }
            }
        }
    ]
}
```

### 阻止用户删除 Amazon VPC 流日志 <a href="#example_vpc_1" id="example_vpc_1"></a>

此 SCP 阻止任何受影响账户中的用户或角色删除 Amazon Elastic Compute Cloud（Amazon EC2）流日志或者 CloudWatch 日志组或日志流。

```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "ec2:DeleteFlowLogs",
        "logs:DeleteLogGroup",
        "logs:DeleteLogStream"
      ],
      "Resource": "*"
    }
  ]
 }
```

### 阻止还没有 Internet 访问权的任何 VPC 获取它 <a href="#example_vpc_2" id="example_vpc_2"></a>

此 SCP 阻止任何受影响账户中的用户或角色更改 Amazon EC2 Virtual Private Cloud（VPC）的配置以允许他们直接访问 Internet。它不会阻止现有直接访问或通过您的本地网络环境路由的任何访问。

```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "ec2:AttachInternetGateway",
        "ec2:CreateInternetGateway",
        "ec2:CreateEgressOnlyInternetGateway",
        "ec2:CreateVpcPeeringConnection",
        "ec2:AcceptVpcPeeringConnection",
        "globalaccelerator:Create*",
        "globalaccelerator:Update*"
      ],
      "Resource": "*"
    }
  ]
}
```

参考资料

[要求 MFA 执行 API 操作](https://docs.aws.amazon.com/zh_cn/organizations/latest/userguide/orgs_manage_policies_scps_examples_general.html#example-scp-mfa)

[阻止用户禁用 CloudWatch 或更改其配置](https://docs.aws.amazon.com/zh_cn/organizations/latest/userguide/orgs_manage_policies_scps_examples_cloudwatch.html)

[阻止用户禁用 AWS Config 或更改其规则](https://docs.aws.amazon.com/zh_cn/organizations/latest/userguide/orgs_manage_policies_scps_examples_config.html)

[防止用户更新 Route 53 ARC 路由控制状态](https://docs.aws.amazon.com/zh_cn/organizations/latest/userguide/orgs_manage_policies_scps_examples_app_rec_con.html)

[阻止用户删除 Amazon VPC 流日志](https://docs.aws.amazon.com/zh_cn/organizations/latest/userguide/orgs_manage_policies_scps_examples_vpc.html)
