9.2. 使用安全组和密钥对保护实例访问
安全组是一组 IP 过滤规则,它们控制网络和协议对实例的访问,如 ICMP,允许您 ping 实例,以及 SSH 允许您连接实例。安全组规则应用到项目中的所有实例。
所有项目都有一个名为 default 的默认安全组,当您没有为实例指定安全组时使用。默认情况下,默认安全组允许所有传出流量,并拒绝来自同一安全组中实例以外的任何来源的所有传入流量。您可以将规则添加到 default 安全组,也可以为项目创建新的安全组。您可以在实例创建过程中将一个或多个安全组应用到实例。要将安全组应用到正在运行的实例,请将该安全组应用到与实例连接的端口。
您无法在实例创建过程中将基于角色的访问控制 (RBAC) 共享安全组直接应用到实例。要将 RBAC 共享安全组应用到实例,您必须首先创建端口,将共享安全组应用到该端口,然后将该端口分配给实例。请参阅 添加安全组到端口。
密钥对是 SSH 或 x509 凭据,在实例启动时注入到实例中,以启用对实例的远程访问。您可以在 RHOSP 中创建新密钥对,或导入现有的密钥对。每个用户应至少有一个密钥对。密钥对可用于多个实例。
您无法在项目中的用户间共享密钥对,因为每个密钥对属于创建或导入密钥对的单独用户,而不是项目。
9.2.1. 创建安全组 复制链接链接已复制到粘贴板!
您可以创建新的安全组,以应用到项目中的实例和端口。
流程
可选: 要确保您所需的安全组尚不存在,请查看可用的安全组及其规则:
$ openstack security group list $ openstack security group rule list <sec_group>-
将 <
sec_group> 替换为您从可用安全组列表中检索的安全组的名称或 ID。
-
将 <
创建安全组:
$ openstack security group create mySecGroup在您的安全组中添加规则:
$ openstack security group rule create --protocol <protocol> \ [--dst-port <port-range>] \ [--remote-ip <ip-address> | --remote-group <group>] \ [--ingress | --egress] mySecGroup-
将
<protocol> 替换为您要允许与您的实例通信的协议名称。 -
可选:将
<port-range> 替换为为协议打开的目标端口或端口范围。IP 协议 TCP、UDP 和 SCTP 是必需的。设置为-1以允许指定协议的所有端口。 -
可选: 您可以使用
--remote-ip指定远程 IP 地址块( or--remote-group) 来只允许从指定的 IP 地址访问,以指定该规则只适用于来自远程组的成员的接口的数据包。如果使用--remote-ip,请将 <ip-address> 替换为远程 IP 地址块。您可以使用 CIDR 表示法。如果使用--remote-group,请将 替换为现有安全组的名称或 ID。如果未指定选项,则允许访问所有地址,因为远程 IP 访问范围默认为 (IPv4 默认:0.0.0.0/0;IPv6 默认:::/0)。 -
指定协议规则应用到的网络流量的方向,可以是传入(
入口)或传出(egress)。如果没有指定,则默认为ingress。
-
将
重复步骤 3,直到您已经为要允许访问实例的所有协议创建了规则。以下示例创建了允许 SSH 连接到安全组
mySecGroup中的实例的规则:$ openstack security group rule create --protocol tcp \ --dst-port 22 mySecGroup
9.2.2. 更新安全组规则 复制链接链接已复制到粘贴板!
您可以更新您有权访问的任何安全组的规则。
流程
检索您要为其更新规则的安全组的名称或 ID:
$ openstack security group list- 确定您需要应用到安全组的规则。
在您的安全组中添加规则:
$ openstack security group rule create --protocol <protocol> \ [--dst-port <port-range>] \ [--remote-ip <ip-address> | --remote-group <group>] \ [--ingress | --egress] <group_name>-
将
<protocol> 替换为您要允许与您的实例通信的协议名称。 -
可选:将
<port-range> 替换为为协议打开的目标端口或端口范围。IP 协议 TCP、UDP 和 SCTP 是必需的。设置为-1以允许指定协议的所有端口。 -
可选: 您可以使用
--remote-ip指定远程 IP 地址块( or--remote-group) 来只允许从指定的 IP 地址访问,以指定该规则只适用于来自远程组的成员的接口的数据包。如果使用--remote-ip,请将 <ip-address> 替换为远程 IP 地址块。您可以使用 CIDR 表示法。如果使用--remote-group,请将 替换为现有安全组的名称或 ID。如果未指定选项,则允许访问所有地址,因为远程 IP 访问范围默认为 (IPv4 默认:0.0.0.0/0;IPv6 默认:::/0)。 -
指定协议规则应用到的网络流量的方向,可以是传入(
入口)或传出(egress)。如果没有指定,则默认为ingress。 -
使用您要将规则应用到的安全组的名称或 ID 替换
。
-
将
重复步骤 3,直到您已经为要允许访问实例的所有协议创建了规则。以下示例创建了允许 SSH 连接到安全组
mySecGroup中的实例的规则:$ openstack security group rule create --protocol tcp \ --dst-port 22 mySecGroup
9.2.3. 删除安全组规则 复制链接链接已复制到粘贴板!
您可以从安全组中删除规则。
流程
识别规则应用到的安全组:
$ openstack security group list检索与安全组关联的规则 ID:
$ openstack security group show <sec-group>删除规则或规则:
$ openstack security group rule delete <rule> [<rule> ...]将
<rule> 替换为要删除的规则的 ID。您可以通过指定一个以空格分隔的规则 ID 列表来删除多个规则。
9.2.4. 将安全组添加到端口 复制链接链接已复制到粘贴板!
default 安全组应用于没有指定替代安全组的实例。您可以将替代安全组应用到正在运行的实例上的端口。
流程
确定您要将安全组应用到的实例上的端口:
$ openstack port list --server myInstancewithSSH将安全组应用到端口:
$ openstack port set --security-group <sec_group> <port>将 <
;sec_group> 替换为您要应用到正在运行的实例端口的安全组的名称或 ID。您可以根据需要多次使用--security-group选项应用多个安全组。
9.2.5. 从端口中删除安全组 复制链接链接已复制到粘贴板!
要从端口中删除安全组,首先需要删除所有安全组,然后重新添加您要分配给端口的安全组。
流程
列出与端口关联的所有安全组,并记录您要与端口关联的安全组 ID:
$ openstack port show <port>删除与端口关联的所有安全组:
$ openstack port set --no-security-group <port>将安全组重新应用到端口:
$ openstack port set --security-group <sec_group> <port>将 <
sec_group> 替换为您要重新应用到运行的实例的安全组的 ID。您可以根据需要多次使用--security-group选项应用多个安全组。
9.2.6. 删除安全组 复制链接链接已复制到粘贴板!
您可以删除没有与任何端口关联的安全组。
流程
检索您要删除的安全组的名称或 ID:
$ openstack security group list检索可用端口的列表:
$ openstack port list检查每个端口是否有关联的安全组:
$ openstack port show <port-uuid> -c security_group_ids如果您要删除的安全组与任何端口关联,您必须首先从端口中删除该安全组。如需更多信息 ,请参阅从端口中删除安全组。
删除安全组:
$ openstack security group delete <group> [<group> ...]使用您要删除的组的 ID 替换
。您可以通过指定一个以空格分隔的组的 ID 列表来删除多个组。
9.2.7. 生成一个新的 SSH 密钥对 复制链接链接已复制到粘贴板!
您可以创建一个新的 SSH 密钥对,以便在项目内使用。
使用 x509 证书为 Windows 实例创建密钥对。
流程
创建密钥对,并将私钥保存在您的本地
.ssh目录中:$ openstack keypair create <keypair> > ~/.ssh/<keypair>.pem将
<keypair> 替换为新密钥对的名称。保护私钥:
$ chmod 600 ~/.ssh/<keypair>.pem
9.2.8. 导入现有的 SSH 密钥对 复制链接链接已复制到粘贴板!
您可以在 Red Hat OpenStack Platform (RHOSP)外部创建的项目中导入 SSH 密钥,方法是在创建新密钥对时提供公钥文件。
流程
从现有密钥文件创建密钥对,并将私钥保存在本地
.ssh目录中:要从现有公钥文件导入密钥对,请输入以下命令:
$ openstack keypair create --public-key ~/.ssh/<public_key>.pub \ <keypair> > ~/.ssh/<keypair>.pem-
将 <
public_key> 替换为您要用来创建密钥对的公钥文件的名称。 -
将
<keypair> 替换为新密钥对的名称。
-
将 <
要从现有私钥文件导入密钥对,请输入以下命令:
$ openstack keypair create --private-key ~/.ssh/<private_key> \ <keypair> > ~/.ssh/<keypair>.pem-
将 <
private_key> 替换为您要用来创建密钥对的公钥文件的名称。 -
将
<keypair> 替换为新密钥对的名称。
-
将 <
保护私钥:
$ chmod 600 ~/.ssh/<keypair>.pem