设定实例的权限和安全设置

设定实例的权限和安全设置

当你启动一个虚拟机,你可以注入*key pair*,它为你的实例提供了SSH访问路径。为了能运行,镜像必须包含’cloud-init’包

你可以为每个项目至少创建一个密钥对。你可以在项目所属的多个实例上使用该密钥对。如果你使用外部工具生成密钥对,那么你可以将它导入到OpenStack。

注解

一个密钥对属于独立用户而不属于项目。要想在多个用户中共享密钥,那么每个用户需要导入该密钥对。

如果镜像使用一个静态根密码或者静态密钥集(都不推荐),那么当你启动实例的时候就没必要提供一个密钥。

一个*安全组*是一个被命名为网络访问规则的集合,安全组被用来限制访问实例流量的类型。当你启动一个实例时,你可以为它指定一个或多个安全组。如果你没有创建安全组,那么新实例会自动分配一个默认安全组,除非你明确指定一个不同的安全组。

每个安全组中的关联*规则*控制着组中访问实例的流量。任何进入的流量与规则不匹配将会默认被拒绝。你可以在安全组中添加或删除规则,并且可以修改默认的或任何其他安全组中的规则。

你可以修改安全组中的规则来允许通过不同的端口和协议访问实例。比如,你可以为实例上运行的DNS修改规则来允许通过SSH访问实例,ping通实例或者允许UDP流量。你可以为规则指定以下参数。

  • 流量来源 允许来自云环境其他组成员的IP地址或所有IP地址的流量访问实例。
  • 协议,SSH用TCP、Pings用ICMP或者UDP。
  • 虚拟机的目标端口。定义一个端口范围。只需要打开单个端口,输入同样的值两次。ICMP不支持端口,你输入一个值定义代码和被允许的ICMP流量类型。

规则在新建或者修改之后实时生效

注解

Instances that use the default security group cannot, by default, be accessed from any IP address outside of the cloud. If you want those IP addresses to access the instances, you must modify the rules for the default security group. Additionally, security groups will automatically drop DHCP responses coming from instances.

也可以为运行中的实例分配一个浮动IP以从公网访问该实例。请参考:doc:cli-manage-ip-addresses

添加密钥对

你可以生成一个秘钥对或上传一个现有的公钥

  1. 要生成一个密钥对,运行以下命令。

    $ openstack keypair create KEY_NAME > MY_KEY.pem
    

    这个命令生成一个你指定名为KEY_NAME的秘钥对,将私钥写入指定的”.pem”文件里,且为Nova数据库注册公钥。

  2. 运行以下命令,设置”.pem”的权限为只有你本人可读写。

    $ chmod 600 MY_KEY.pem
    

导入秘钥对

  1. 如果你已经生成一个密钥对且公钥位于”~/.ssh/id_rsa.pub”里面,那么运行以下命令上传公钥。

    $ openstack keypair create --public-key ~/.ssh/id_rsa.pub KEY_NAME
    

    该命令将公钥记录在Nova数据库里且密钥对的名字命名为你指定的“KEY_NAME”。

  2. 为确保密钥对成功导入,将密钥对像以下这样列出:

    $ openstack keypair list
    

新建和管理安全组

  1. 列出当前项目的安全组,包括说明,输入以下命令:

    $ openstack security group list
    
  2. 要创建有指定名称和描述的安全组,则输入以下命令:

    $ openstack security group create SECURITY_GROUP_NAME --description GROUP_DESCRIPTION
    
  3. 要删除指定的组,请输入以下命令:

    $ openstack security group delete SECURITY_GROUP_NAME
    

注解

您不能删除一个项目的默认安全组。而且您也不能删除已经指定给正在运行的实例的安全组。

新建和管理安全组规则

使用命令:command:openstack security group rule`修改安全组规则。开始之前,使用source命令执行OpenStack RC文件。更多细节,参考:doc:../common/cli-set-environment-variables-using-openstack-rc`。

  1. 要列出安全组规则,则运行以下命令:

    $ openstack security group rule list SECURITY_GROUP_NAME
    
  2. 要允许SSH访问实例,则要选择以下项中的其中一项:

    • 允许所有IP访问,指定IP子网 CIDR为``0.0.0.0/0``:

      $ openstack security group rule create SECURITY_GROUP_NAME \
            --protocol tcp --dst-port 22:22 --remote-ip 0.0.0.0/0
      
    • 仅允许访问来自其他安全组(源组)的IP地址访问指定的端口:

      $ openstack security group rule create SECURITY_GROUP_NAME \
            --protocol tcp --dst-port 22:22 --remote-group SOURCE_GROUP_NAME
      
  3. 要允许ping通实例,选择以下项中的其中一项:

    • 允许所有IP访问,指定IP子网 CIDR为``0.0.0.0/0``。

      $ openstack security group rule create --protocol icmp \
        SECURITY_GROUP_NAME
      

      这允许访问所有代码和所有ICMP的流量。

    • 只允许其他安全组(源组)的成员ping 通云主机。

      $ openstack security group rule create --protocol icmp \
        --remote-group SOURCE_GROUP_NAME SECURITY_GROUP
      
  4. 为了允许访问UDP端口,比如允许访问一台虚拟机上面的DNS服务,选择以下选项:

    • 允许IP地址UDP访问,以CIDR的方式指定IP网段为``0.0.0.0/0``。

      $ openstack security group rule create --protocol udp \
        --dst-port 53:53 SECURITY_GROUP
      
    • 只允许来自其他安全组(源组)的IP地址访问指定的端口。

      $ openstack security group rule create --protocol udp \
        --dst-port 53:53 --remote-group SOURCE_GROUP_NAME SECURITY_GROUP
      

删除安全组规则

要删除一个安全组规则,请指定规则ID。

$ openstack security group rule delete RULE_ID
Creative Commons Attribution 3.0 License

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.