

# 在 AWS CLI 中创建、配置和删除 Amazon EC2 安全组
<a name="cli-services-ec2-sg"></a>

您可以为您的 Amazon Elastic Compute Cloud（Amazon EC2）实例创建安全组，安全组本质上用作一个防火墙，具有可确定哪些网络流量可以进入和离开的规则。

使用 AWS Command Line Interface (AWS CLI) 创建一个安全组，向现有安全组添加规则，以及删除安全组。

**注意**  
有关其他命令示例，请参阅[《AWS CLI 参考指南》](https://docs.aws.amazon.com/cli/latest/reference/index.html)。

**Topics**
+ [先决条件](#cli-services-ec2-sg-prereqs)
+ [创建安全组](#creating-a-security-group)
+ [为您的安全组添加规则](#configuring-a-security-group)
+ [删除您的安全组](#deleting-a-security-group)
+ [引用](#cli-services-ec2-sg-references)

## 先决条件
<a name="cli-services-ec2-sg-prereqs"></a>

要运行 `ec2` 命令，您需要：
+ 安装和配置 AWS CLI。有关更多信息，请参阅 [安装或更新最新版本的 AWS CLI](getting-started-install.md) 和 [AWS CLI 身份验证和访问凭证](cli-chap-authentication.md)。
+ 设置您的 IAM 权限以允许访问 Amazon EC2。有关 Amazon EC2 的 IAM 权限的更多信息，请参阅《Amazon EC2 用户指南》**中的 [Amazon EC2 的 IAM 策略](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-policies-for-amazon-ec2.html)。

## 创建安全组
<a name="creating-a-security-group"></a>

您可以创建与虚拟私有云（VPC）关联的安全组。

以下 `[aws ec2 create-security-group](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-security-group.html)` 示例说明如何为指定的 VPC 创建安全组。

```
$ aws ec2 create-security-group --group-name my-sg --description "My security group" --vpc-id vpc-1a2b3c4d
{
    "GroupId": "sg-903004f8"
}
```

要查看安全组的初始信息，请运行 `[aws ec2 describe-security-groups](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-security-groups.html)` 命令。您不能仅通过其 `vpc-id` 而非其名称引用 EC2-VPC 安全组。

```
$ aws ec2 describe-security-groups --group-ids sg-903004f8
{
    "SecurityGroups": [
        {
            "IpPermissionsEgress": [
                {
                    "IpProtocol": "-1",
                    "IpRanges": [
                        {
                            "CidrIp": "0.0.0.0/0"
                        }
                    ],
                    "UserIdGroupPairs": []
                }
            ],
            "Description": "My security group"
            "IpPermissions": [],
            "GroupName": "my-sg",
            "VpcId": "vpc-1a2b3c4d",
            "OwnerId": "123456789012",
            "GroupId": "sg-903004f8"
        }
    ]
}
```

## 为您的安全组添加规则
<a name="configuring-a-security-group"></a>

运行 Amazon EC2 实例时，您必须启用安全组中的规则，以便为连接到镜像的方法允许入站网络流量。

例如，如果您要启动 Windows 实例，您通常会添加规则以允许 TCP 端口 3389 (RDP) 上的入站流量，从而支持远程桌面协议 (RDP)。如果您要启动 Linux 实例，则通常会添加规则以允许 TCP 端口 22 上的入站流量，从而支持 SSH 连接。

使用 `[aws ec2 authorize-security-group-ingress](https://docs.aws.amazon.com/cli/latest/reference/ec2/authorize-security-group-ingress.html)` 命令向安全组添加规则。此命令的必需参数是您电脑的公有 IP 地址，或您的电脑连接到的网络（以地址范围形式）（采用 [CIDR](https://wikipedia.org/wiki/Classless_Inter-Domain_Routing) 表示法）。

**注意**  
我们提供以下服务 [https://checkip.global.api.aws/](https://checkip.global.api.aws/)，使您可以确定您的公有 IP 地址。要查找可以帮助您识别 IP 地址的其他服务，请使用您的浏览器搜索“*what is my IP address*”。如果您使用动态 IP 地址通过 ISP 或从防火墙后面进行连接（通过私有网络的 NAT 网关），则您的地址可能会定期更改。在这种情况下，您必须找到客户端电脑使用的 IP 地址的范围。

以下示例说明如何使用 IP 地址将适用于 RDP 的规则（TCP 端口 3389）添加到 ID 为 `sg-903004f8` 的 EC2-VPC 安全组。

首先，确定您的 IP 地址。

```
$ curl https://checkip.amazonaws.com
x.x.x.x
```

然后，您可以运行 `[aws ec2 authorize-security-group-ingress](https://docs.aws.amazon.com/cli/latest/reference/ec2/authorize-security-group-ingress.html)` 命令以将 IP 地址添加到安全组。

```
$ aws ec2 authorize-security-group-ingress --group-id sg-903004f8 --protocol tcp --port 3389 --cidr x.x.x.x/x
```

以下命令添加另一个规则以对同一安全组中的实例启用 SSH。

```
$ aws ec2 authorize-security-group-ingress --group-id sg-903004f8 --protocol tcp --port 22 --cidr x.x.x.x/x
```

要查看对安全组所做的更改，请运行 `[aws ec2 describe-security-groups](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-security-groups.html)` 命令。

```
$ aws ec2 describe-security-groups --group-ids sg-903004f8
{
    "SecurityGroups": [
        {
            "IpPermissionsEgress": [
                {
                    "IpProtocol": "-1",
                    "IpRanges": [
                        {
                            "CidrIp": "0.0.0.0/0"
                        }
                    ],
                    "UserIdGroupPairs": []
                }
            ],
            "Description": "My security group"
            "IpPermissions": [
                {
                    "ToPort": 22,
                    "IpProtocol": "tcp",
                    "IpRanges": [
                        {
                            "CidrIp": "x.x.x.x/x"
                        }
                    ]
                    "UserIdGroupPairs": [],
                    "FromPort": 22
                }
            ],
            "GroupName": "my-sg",
            "OwnerId": "123456789012",
            "GroupId": "sg-903004f8"
        }
    ]
}
```

## 删除您的安全组
<a name="deleting-a-security-group"></a>

要删除安全组，请运行 `[aws ec2 delete-security-group](https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-security-group.html)` 命令。

**注意**  
如果安全组当前已附加到环境，则无法删除。

以下命令示例删除 EC2-VPC 安全组。

```
$ aws ec2 delete-security-group --group-id sg-903004f8
```

## 引用
<a name="cli-services-ec2-sg-references"></a>

**AWS CLI 参考：**
+ `[aws ec2](https://docs.aws.amazon.com/cli/latest/reference/ec2/index.html)`
+ `[aws ec2 authorize-security-group-ingress](https://docs.aws.amazon.com/cli/latest/reference/ec2/authorize-security-group-ingress.html)`
+ `[aws ec2 create-security-group](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-security-group.html)`
+ `[aws ec2 delete-security-group](https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-security-group.html)`
+ `[aws ec2 describe-security-groups](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-security-groups.html)`

**其他参考资料：**
+ [Amazon Elastic Compute Cloud 文档](https://docs.aws.amazon.com/ec2/)
+ 要查看和贡献 AWS 开发工具包和 AWS CLI 代码示例，请参阅 *GitHub* 上的 [AWS 代码示例存储库](https://github.com/awsdocs/aws-doc-sdk-examples/)。