8.2. セキュリティーグループとキーペアを使用したインスタンスアクセスのセキュリティー保護

セキュリティーグループとは、インスタンスへの/からのネットワークおよびプロトコルアクセスを制御する IP フィルタールールのセットで、たとえば、ICMP によりインスタンスへの ping 送信が可能で、SSH によりインスタンスへの接続が可能となります。セキュリティーグループルールは、プロジェクト内のすべてのインスタンスに適用されます。

すべてのプロジェクトには、default という名前のデフォルトセキュリティーグループがあり、これは、インスタンスにセキュリティーグループを指定しない場合に使用されます。デフォルトでは、デフォルトのセキュリティーグループは、すべての送信トラフィックを許可し、同じセキュリティーグループのインスタンス以外のソースからの着信トラフィックをすべて拒否します。デフォルトのセキュリティーグループにルールを追加するか、プロジェクト用に新規セキュリティーグループを作成できます。インスタンスの作成時に 1 つ以上のセキュリティーグループをインスタンスに適用できます。セキュリティーグループを実行中のインスタンスに適用するには、セキュリティーグループをインスタンスに接続されているポートに適用します。

注記

インスタンスの作成中に、ロールベースのアクセス制御 (RBAC) 共有セキュリティーグループをインスタンスに直接適用することはできません。RBAC 共有セキュリティーグループをインスタンスに適用するには、最初にポートを作成し、共有セキュリティーグループをそのポートに適用してから、そのポートをインスタンスに割り当てる必要があります。セキュリティーグループのポートへの追加 を参照してください。

キーペアは、インスタンスへのリモートアクセスを有効にするために起動時にインスタンスに挿入される SSH または x509 認証情報です。RHOSP で新規キーペアを作成するか、既存のキーペアをインポートできます。各ユーザーには、少なくとも 1 つのキーペアが必要です。キーペアは複数のインスタンスに使用できます。

注記

プロジェクト内のユーザーとキーペアを共有することはできません。各キーペアはプロジェクトではなくキーペアを作成またはインポートした個々のユーザーに属するためです。

8.2.1. セキュリティーグループの作成

新規セキュリティーグループを作成して、プロジェクト内のインスタンスおよびポートに適用できます。

手順

  1. (オプション) 必要なセキュリティーグループが存在しないことを確認するには、利用可能なセキュリティーグループとそのルールを確認します。

    $ openstack security group list
    $ openstack security group rule list <sec_group>
    • <sec_group> を、利用可能なセキュリティーグループのリストから取得したセキュリティーグループの名前または ID に置き換えてください。
  2. セキュリティーグループを作成します。

    $ openstack security group create mySecGroup
  3. セキュリティーグループにルールを追加します。

    $ 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 に設定します。
    • (オプション) 指定した IP アドレスからのアクセスのみを許可するには、--remote-ip を使用してリモート IP アドレスブロックを指定するか、--remote-group を使用して、ルールがリモートグループのメンバーであるインターフェイスからのパケットにのみ適用されることを指定します。--remote-ip を使用する場合は、<ip-address> をリモート IP アドレスブロックに置き換えます。CIDR 表記を使用できます。--remote-group を使用する場合は、<group> を既存のセキュリティーグループの名前または ID に置き換えてください。いずれのオプションも指定されない場合は、リモート IP アクセス範囲のデフォルトは IPv4 が 0.0.0.0/0、IPv6 が ::/0 なので、すべてのアドレスにアクセスが許可されます。
    • プロトコルルールが適用されるネットワークトラフィックの方向、つまり受信 (ingress) または送信 (egress) のいずれかを指定します。指定されない場合、デフォルトは ingress に設定されます。
  4. インスタンスへのアクセスを許可するすべてのプロトコルに対してルールが作成されるまで、ステップ 3 を繰り返します。以下の例では、セキュリティーグループ mySecGroup のインスタンスへの SSH 接続を許可するルールを作成します。

    $ openstack security group rule create --protocol tcp \
     --dst-port 22 mySecGroup

8.2.2. セキュリティーグループルールの更新

アクセス可能なセキュリティーグループのルールを更新できます。

手順

  1. ルールを更新するセキュリティーグループの名前または ID を取得します。

    $ openstack security group list
  2. セキュリティーグループに適用する必要があるルールを決定します。
  3. セキュリティーグループにルールを追加します。

    $ 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 に設定します。
    • (オプション) 指定した IP アドレスからのアクセスのみを許可するには、--remote-ip を使用してリモート IP アドレスブロックを指定するか、--remote-group を使用して、ルールがリモートグループのメンバーであるインターフェイスからのパケットにのみ適用されることを指定します。--remote-ip を使用する場合は、<ip-address> をリモート IP アドレスブロックに置き換えます。CIDR 表記を使用できます。--remote-group を使用する場合は、<group> を既存のセキュリティーグループの名前または ID に置き換えてください。いずれのオプションも指定されない場合は、リモート IP アクセス範囲のデフォルトは IPv4 が 0.0.0.0/0、IPv6 が ::/0 なので、すべてのアドレスにアクセスが許可されます。
    • プロトコルルールが適用されるネットワークトラフィックの方向、つまり受信 (ingress) または送信 (egress) のいずれかを指定します。指定されない場合、デフォルトは ingress に設定されます。
    • <group_name> を、ルールを適用するセキュリティーグループの名前または ID に置き換えてください。
  4. インスタンスへのアクセスを許可するすべてのプロトコルに対してルールが作成されるまで、ステップ 3 を繰り返します。以下の例では、セキュリティーグループ mySecGroup のインスタンスへの SSH 接続を許可するルールを作成します。

    $ openstack security group rule create --protocol tcp \
     --dst-port 22 mySecGroup

8.2.3. セキュリティーグループルールの削除

セキュリティーグループからルールを削除できます。

手順

  1. ルールが適用されるセキュリティーグループを特定します。

    $ openstack security group list
  2. セキュリティーグループに関連付けられたルールの ID を取得します。

    $ openstack security group show <sec-group>
  3. ルールを削除します。

    $ openstack security group rule delete <rule> [<rule> ...]

    <rule> を、削除するルールの ID に置き換えます。削除するルールの ID のスペース区切りのリストを指定して、一度に複数のルールを削除できます。

8.2.4. セキュリティーグループのポートへの追加

default セキュリティーグループは、代替のセキュリティーグループを指定しないインスタンスに適用されます。別のセキュリティーグループを実行中のインスタンスのポートに適用することができます。

手順

  1. セキュリティーグループを適用するインスタンスのポートを決定します。

    $ openstack port list --server myInstancewithSSH
  2. セキュリティーグループをポートに適用します。

    $ openstack port set --security-group <sec_group> <port>

    <sec_group> を、実行中のインスタンスのポートに適用するセキュリティーグループの名前または ID に置き換えてください。必要に応じて、--security-group オプションを複数回使用して、複数のセキュリティーグループを適用できます。

8.2.5. ポートからのセキュリティーグループの削除

ポートからセキュリティーグループを削除するには、まずすべてのセキュリティーグループを削除してから、ポートに割り当てられたままにするセキュリティーグループを再度追加します。

手順

  1. ポートに関連付けられたセキュリティーグループのリストを表示し、ポートに関連付けたままにするセキュリティーグループの ID を記録します。

    $ openstack port show <port>
  2. ポートに関連付けられたセキュリティーグループをすべて削除します。

    $ openstack port set --no-security-group <port>
  3. セキュリティーグループをポートに再適用します。

    $ openstack port set --security-group <sec_group> <port>

    <sec_group> を、実行中のインスタンスのポートに再度適用するセキュリティーグループの ID に置き換えてください。必要に応じて、--security-group オプションを複数回使用して、複数のセキュリティーグループを適用できます。

8.2.6. セキュリティーグループの削除

ポートに関連付けられていないセキュリティーグループを削除できます。

手順

  1. 削除するセキュリティーグループの名前または ID を取得します。

    $ openstack security group list
  2. 利用可能なポートのリストを取得します。

    $ openstack port list
  3. 各ポートで関連付けられたセキュリティーグループを確認します。

    $ openstack port show <port-uuid> -c security_group_ids

    削除するセキュリティーグループがポートのいずれかに関連付けられている場合は、まずポートからそのセキュリティーグループを削除する必要があります。詳細は、ポートからのセキュリティーグループの削除 を参照してください。

  4. セキュリティーグループを削除します。

    $ openstack security group delete <group> [<group> ...]

    <group> を削除するグループの ID に置き換えます。削除するグループの ID のスペース区切りのリストを指定して、一度に複数のグループを削除できます。

8.2.7. 新しい SSH キーペアの生成

プロジェクト内で使用する新しい SSH キーペアを作成できます。

注記

x509 証明書を使用して、Windows インスタンス用のキーペアを作成します。

手順

  1. キーペアを作成し、秘密鍵をローカルの .ssh ディレクトリーに保存します。

    $ openstack keypair create <keypair> > ~/.ssh/<keypair>.pem

    <keypair> を新しいキーペアの名前に置き換えます。

  2. 秘密鍵を保護します。

    $ chmod 600 ~/.ssh/<keypair>.pem

8.2.8. 既存の SSH キーペアのインポート

新しいキーペアの作成時に公開鍵ファイルを指定して、Red Hat OpenStack Platform (RHOSP) の外部で作成したプロジェクトに SSH 鍵をインポートできます。

手順

  1. 既存のキーファイルからキーペアを作成し、秘密鍵をローカルの .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> を新しいキーペアの名前に置き換えます。
  2. 秘密鍵を保護します。

    $ chmod 600 ~/.ssh/<keypair>.pem

8.2.9. 関連情報