セキュリティグループ機能

対象リージョン:東日本第3/西日本第3

仮想サーバ/ベアメタルサーバに接続されたポートに対してパケットフィルタリングを行うため、ルール設定をグルーピングして定義および設定することのできるセキュリティグループ機能を提供します。

セキュリティグループには複数のルールを設定できます。1つのポートに設定されたセキュリティグループのうち、どれか1つでもルールにマッチしたパケットは通信が許可され、それ以外の通信は遮断されます(ホワイトリスト方式、OR条件)。

セキュリティグループには、Statefulが「True」(ステートフル・セキュリティグループ=デフォルト)と、Statefulが「False」(ステートレス・セキュリティグループ=オプション)があります。

ステートフルは通過した通信に対して戻りのルールが動的に生成される機能で、多くのクラウドやネットワークアプライアンスで利用されています。一方、ステートレスでは動的に戻りのルールは生成されません。そのため、代わりに戻りのルールをあらかじめ記載しておく必要はありますが、複数の通信が同時に利用される場合に性能上のメリットがあります。

仮想サーバとベアメタルサーバではセキュリティグループに設定する項目が異なるため、セキュリティグループを分けてください。

なお、セキュリティグループは、仮想ルータおよびDHCPサーバが持つポートには設定できません。

表 1. 仮想サーバとベアメタルサーバのセキュリティグループ機能の差分
項目 仮想サーバ ベアメタルサーバ
Stateful True False False
許可ルール (方向) Egress、またはIngressだけを許可 EgressとIngressの両方を許可 EgressとIngressの両方を許可
許可ルール (通信相手) CIDR形式のIPアドレス、またはセキュリティグループ CIDR形式のIPアドレス CIDR形式のIPアドレス
設定例

セキュリティグループのStatefulは「True」です。このため、IngressまたはEgressのどちらか一方のルールがあれば、自動的に対向のルールが生成されます。

ヒント:

例)仮想サーバから別サーバにHTTPアクセス(ポート番号は80)する場合、以下の設定が必要です。

  • Egress: 仮想サーバからの出力パケット(80番ポート)を許可するルール

    戻りのパケットは自動的に許可されます。

重要:
以下の観点で最大通信量が想定できない場合は、右記の Statefulを「False」の適用を検討してください。
  • 単位時間あたりのトランザクション性能
  • コネクション生成数

Statefulに「True」を適用した場合に、通信性能の低下により、仮想サーバの通信に問題がでる場合があります。

次のようなケースにおいては、セキュリティグループのStatefulを「False」にすることで性能向上が見込めます。EgressとIngressの両方のルールが必要です。

  • 単位時間あたりのトランザクションの性能向上が必要なケース
    ヒント:

    例)概ね400TPS(トランザクション/秒)以上の性能が必要な場合:jmeterとIPCOMを、CentOS7.3の仮想サーバタイプ C3-4で検証済みです。

  • 大量のコネクションが生成されるケース
    ヒント:

    例)仮想サーバあたり、送信IPアドレス×受信IPアドレス×送信ポート数×受信ポート数×プロトコル数の組み合わせが概ね10000を超える場合:仮想サーバのポートが2本あるときは2倍した値です。

  • IPCOM、BIG-IP、Palo Alto Networksなどの仮想アプライアンスを冗長化したケース、または仮想IPを使用してVMのクラスタを組んでいるケース
    ヒント: 冗長切替時にコネクションを維持するためにも、Statefulは「False」を設定してください

セキュリティグループのStatefulは「False」です。このため、IngressとEgressの両方のルールが必要です。

ヒント:

例)ベアメタルサーバ(ランダムポート)から別サーバにHTTPアクセス(ポート番号は80)する場合、以下の設定が必要です。

  • Egress: ベアメタルサーバからの出力パケット(80番ポート)を許可するルール
  • Ingress: Egressで許可した出力パケットの戻りのパケット(ベアメタルサーバのランダムポート)を許可するルール
重要:
  • 同一ポートに設定している複数のセキュリティグループ間で、「True」と「False」とを混在しないでください。
  • セキュリティグループに、制限値を超えたルールを設定しないでください。
  • 制限値が上限に達してセキュリティグループにルールを設定できないときは、以下の対応をしてください。

    • 外部ネットワークと接続する場合:仮想ルータにファイアーウォールサービス(nfv)を設定
    • 外部ネットワークと接続しない場合:OSのiptablesを使用してルールを設定

注:

仮想サーバーのケースについて

  • 同一プロジェクトの範囲では、Statefulを「True」か「False」のどちらかに統一することを推奨します

    同一ポートに複数セキュリティグループを適用する場合には、どちらかに統一してください。

  • 「True」と「False」のどちらのStatefulが適切かわからない場合は、ヘルプデスクに問い合せてください。

仮想サーバーとベアメタルの両ケースについて

  • たとえStatefulが「False」であっても、同一のセキュリティグループを仮想サーバとベアメタルサーバに適用できません。必ず別のセキュリティグループを作成して、それぞれに適用してください。

仮想ルータのファイアーウォールサービスとステートレス・セキュリティグループの組み合わせについて

  • 仮想ルータのファイアーウォールサービスとステートレス・セキュリティグループを組み合わせた場合、トラフィックの条件によっては、TCPコネクションが切断されることがあります。

    詳細については、「ファイアーウォールサービス」を参照してください。

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

ポートには受信側の通信を遮断し、送信側の通信は許可するデフォルトセキュリティグループが設定されます。そこで、セキュリティグループを作成し、必要に応じて通信を許可するルールを設定します。

表 2. セキュリティグループ設定項目一覧
項目 説明 必須
セキュリティグループ名 セキュリティグループを識別するための名称  
説明 作成するセキュリティグループに関する説明文  
Stateful
  • 仮想サーバの場合

    • 「True」を指定します。(通常のケース)
      IngressまたはEgressのどちらか一方のルールがあれば、自動的に対向のルールが生成されます。自動的に生成されたルールのタイマーは以下のとおりです。
      • non-TCP:180秒
      • TCP:86400秒
        ヒント: ICMPで type(type 8, 13, 15, 17)を指定しない場合は、ICMPルールが Statelessとなり、自動的に生成されるルールのタイムアウト制限はありません。
      重要:

      タイムアウトした場合、コネクションが残っていても通信が遮断されます。

      タイムアウトによる通信遮断を回避する場合は、以下のどちらかを実施してください。

      • Keep-aliveを86400秒未満に設定する

        基盤メンテナンス(ホストのバージョンアップなど)のタイミングで、確立済みの TCPコネクションで無通信状態が長く続くと、通信が遮断されるおそれがあります。無通信状態を発生させない方法として、Keep-aliveの通信間隔を60秒未満に設定することを推奨します。

      • Statefulに「False」を指定する

        この場合、Egressで許可した出力パケットに対する戻りのパケットを許可するルールが必要です。

      注: 仮想サーバで Port Unreachableなどの ICMPエラー発生後に継続して ping通信ができない場合は、仮想サーバが使用するセキュリティグループの「ingress any/any rule」と「egress any/any rule」を削除し、通信に必要なルールを追加してください。
    • 「False」を指定します。(トランザクション性能向上または大量コネクション生成のケース)

      具体例については「仮想サーバとベアメタルサーバのセキュリティグループ機能の差分」の表を参照してください。

    注: 仮想サーバの停止・起動操作時に、仮想ルータに対して、仮想サーバ停止以前から 5秒未満の周期で継続的に ICMP通信しており、かつ仮想サーバ起動後も通信し続けている場合、OS起動後に一定時間(数分程度)当該通信ができないおそれがあります。この場合、セキュリティグループルールに以下の許可ルールを追加してください。
    • egress ICMP type=8、code=0(type=8 は Echo Request(エコー要求))
    • ingress ICMP type=0、code=0(type=0 は Echo Reply(エコー応答))
  • ベアメタルサーバの場合

    「False」を指定します。

ヒント: デフォルトは「True」です。
 

デフォルトルール

セキュリティグループを作成した時点でのデフォルトルールを、以下に示します。

表 3. セキュリティグループ作成時のデフォルトルール
方向 通信相手 プロトコル種別 IPバージョン
アウトバウンド (Egress) すべて すべて IPv4
アウトバウンド (Egress) すべて すべて IPv6

ルールの作成

パケットフィルタリングを行うルールは以下の項目で構成されます。複数のルールを1つのセキュリティグループに登録できます。

ヒント: お互いにセキュリティグループが使用できる仮想サーバ同士の通信の場合、基本的に通信相手をセキュリティグループIDで指定することを推奨します。
表 4. セキュリティグループ ルール設定項目一覧
項目 説明 必須
セキュリティグループID ルールを登録するセキュリティグループのID
通信方向 インバウンド (Ingress) またはアウトバウンド (Egress)
IPバージョン IPv4  
通信相手

インバウンドの場合は送信元、アウトバウンドの場合は送信先

  • 仮想サーバの場合

    以下のどちらかの形式で指定します。

    • CIDR形式のIPアドレス
    • セキュリティグループ

    送信元と送信先が異なるサブネット、かつ異なる仮想ルータに所属する場合、CIDR形式のIPアドレスで指定することを推奨します。

    セキュリティグループを指定した場合、指定したセキュリティグループが設定されている、すべてのポートのIPアドレスが対象となります。なお、それらのポートに「通信許可するアドレスペア」が存在する場合は、アドレスペアのIPアドレスも対象となります。

    注: 指定したセキュリティグループが設定されている、仮想サーバやすべてのポートを削除すると、設定したセキュリティグループルールが無効になる場合があります。通信相手のポートに対してセキュリティグループルールを再設定して下さい。
  • ベアメタルサーバの場合

    CIDR形式のIPアドレスで指定します。

注: CIDR形式のIPアドレスで指定する場合、CIDRのプレフィックス長に基づくホスト部のbitは、すべて0を指定してください。
図: CIDR形式のIPアドレスで指定する場合の設定例
 
プロトコル情報

IPプロトコル

省略した場合は、すべてのプロトコルの通信が許可されます。

有効な指定値についてはCreate security group ruleを参照してください。

 
開始ポート番号

プロトコル情報に対応する開始ポート番号

単一のポートとしたい場合は、開始ポート番号と終了ポート番号に同一の値を指定します。

注:
  • 開始ポート番号に0を指定すると、すべてのポートが通信許可となるため、0は指定しないでください。
  • ベアメタルの場合、Statefulに「False」が指定されたセキュリティグループでは、ポート範囲(開始ポート番号~終了ポート番号)を指定できません。
 
終了ポート番号 プロトコル情報に対応する終了ポート番号  
図: セキュリティグループのルール設定例

デフォルトセキュリティグループ

ポートを作成する際にセキュリティグループ設定を省略した場合は、プロジェクトに作成されるデフォルトのセキュリティグループが自動設定されます。

デフォルトセキュリティグループの初期ルール設定は、以下のとおりです。

表 5. デフォルトセキュリティグループのルール
方向 通信相手 プロトコル種別 IPバージョン
Egress すべて すべて IPv4
Ingress 自セキュリティグループ すべて IPv4
重要: 特定の ruleを追加しても、Port Unreahableなどの ICMPエラーが発生している状態では 1、2回目の ping通信が失敗する可能性があります。
ヒント:
  • デフォルトセキュリティグループのセキュリティグループ名は「default」です。
  • デフォルトセキュリティグループに対して、ルールを追加で設定できます。

    仮想サーバが使用するセキュリティグループの「ingress any/any rule」と「egress any/any rule」を削除し、通信に必要なルールを追加してください。

    表 6. 設定例
    削除するルール 設定するルールの例
    ingress any/any
    • ingress tcp/any
    • ingress udp/any
    • ingress icmp/any
    egress any/any
    • egress tcp/any
    • egress udp/any
    • egress icmp/any