#=============================================================================== # #【スタックでセキュリティグループを更新するサンプル】 # # ○スタック更新パターン #  SG_test_A:テンプレート上に SG_test_Bに対する ingress/egress ルールを追加 #  SG_test_B:テンプレート上に SG_test_Aに対する ingress/egress ルールを追加 #  SG_test_C:テンプレート上に ルール設定無し #  SG_test_D:テンプレート上に ルール設定無し # # ○留意事項 #  SG_test_A の中に SG_test_B のルールを設定し、かつ、 #  SG_test_B の中に SG_test_A のルールを設定したい場合は、 #  スタックの更新で設定する # #  ※少なくともいずれか1つのセキュリティグループのIDが必要となるため、 #   スタックの新規作成時では上記のような設定は出来ない # #=============================================================================== heat_template_version: 2013-05-23 description: Security Group Update parameters: SG_test_A_id: type: string # default: ********-****-****-****-************ default: ################################################## # defaultの値には、スタック作成により作成された # # セキュリティグループのIDを設定する # ################################################## SG_test_B_id: type: string # default: ********-****-****-****-************ default: ################################################## # defaultの値には、スタック作成により作成された # # セキュリティグループのIDを設定する # ################################################## resources: SG_test_A: type: OS::Neutron::SecurityGroup properties: name: SG_test_A rules: # セキュリティグループ SG_test_B との間で 双方向に sshを許可 # 以下のように、ルールを複数行で記載することもできる - direction: ingress ethertype: IPv4 port_range_max: 22 port_range_min: 22 protocol: tcp remote_mode: remote_group_id remote_group_id: { get_param: SG_test_B_id } # get_param 関数で、parametersセクションで設定した # セキュリティグループIDの値を取得している - direction: egress ethertype: IPv4 port_range_max: 22 port_range_min: 22 protocol: tcp remote_mode: remote_group_id remote_group_id: { get_resource: SG_test_B } # get_resource 関数で、resourcesセクションで定義した # セキュリティグループのIDを取得できる # # ★注意 #  SG_test_A で "remote_group_id: { get_resource: SG_test_B }" と設定した場合、 #  SG_test_B で "remote_group_id: { get_resource: SG_test_A }" と設定できない #  別々のセキュリティグループが相互に get_resource 関数で #  お互いの ID を参照することはできない # ■スタック更新後の SG_test_A の更新状況 # # スタックの Update で、egressのルールがあれば、 # セキュリティグループのルールはすべて置換される # # 上記のルール設定により、SG_test_A は、 # スタック更新完了時には以下のように更新される # # ○スタック更新前 # ┌─────┬───────┬──────┬─────┬──────┐ # │方向   │Ethernetタイプ│IPプロトコル│ポート範囲│接続先   │ # ├─────┼───────┼──────┼─────┼──────┤ # │egress  │IPv6     │(空)    │-     │(空)    │ # │egress  │IPv4     │(空)    │-     │(空)    │ # └─────┴───────┴──────┴─────┴──────┘ # # ○スタック更新後 # ┌─────┬───────┬──────┬─────┬──────┐ # │方向   │Ethernetタイプ│IPプロトコル│ポート範囲│接続先   │ # ├─────┼───────┼──────┼─────┼──────┤ # │ingress  │IPv6     │tcp     │22    │SG_test_B  │ # │egress  │IPv4     │tcp     │22    │SG_test_B  │ # └─────┴───────┴──────┴─────┴──────┘ SG_test_B: type: OS::Neutron::SecurityGroup properties: name: SG_test_B rules: # セキュリティグループ SG_test_A との間で 双方向に sshを許可 # 以下のように、ルールを複数行で記載することもできる - direction: ingress ethertype: IPv4 port_range_max: 22 port_range_min: 22 protocol: tcp remote_mode: remote_group_id remote_group_id: { get_param: SG_test_A_id } - direction: egress ethertype: IPv4 port_range_max: 22 port_range_min: 22 protocol: tcp remote_mode: remote_group_id remote_group_id: { get_param: SG_test_A_id } # SG_test_A で "remote_group_id: { get_resource: SG_test_B }" を設定しているため、 # SG_test_B で "remote_group_id: { get_resource: SG_test_A }" を設定できない # SG_test_A と SG_test_B とで相互で設定するためには、 # SG_test_B の方でセキュリティグループのIDを get_param 関数で指定する # ■スタック更新後の SG_test_B の更新状況 # # スタックの Update で、egressのルールがあれば、 # セキュリティグループのルールはすべて置換される # # 上記のルール設定により、SG_test_B は、 # スタック更新完了時には以下のように更新される # # ○スタック更新前 # ┌─────┬───────┬──────┬─────┬──────┐ # │方向   │Ethernetタイプ│IPプロトコル│ポート範囲│接続先   │ # ├─────┼───────┼──────┼─────┼──────┤ # │egress  │IPv4     │tcp     │22    │0.0.0.0/0  │ # └─────┴───────┴──────┴─────┴──────┘ # # ○スタック更新後 # ┌─────┬───────┬──────┬─────┬──────┐ # │方向   │Ethernetタイプ│IPプロトコル│ポート範囲│接続先   │ # ├─────┼───────┼──────┼─────┼──────┤ # │ingress  │IPv6     │tcp     │22    │SG_test_A  │ # │egress  │IPv4     │tcp     │22    │SG_test_A  │ # └─────┴───────┴──────┴─────┴──────┘ SG_test_C: type: OS::Neutron::SecurityGroup properties: name: SG_test_C rules: # ルール無し設定 # ■スタック更新後の SG_test_C の更新状況 # # スタックの Update で、セキュリティグループのデフォルトの egressルールを空にすることはできない # スタックではなく手動でルールを削除すれば、セキュリティグループのルールを空にすることはできる # # 上記のルール無し設定により、SG_test_C は、 # スタック更新完了時には以下のように更新される # # ○スタック更新前 # ┌─────┬───────┬──────┬─────┬──────┐ # │方向   │Ethernetタイプ│IPプロトコル│ポート範囲│接続先   │ # ├─────┼───────┼──────┼─────┼──────┤ # │egress  │IPv6     │(空)    │-     │(空)    │ # │egress  │IPv4     │(空)    │-     │(空)    │ # │ingress  │IPv4     │tcp     │22    │0.0.0.0/0  │ # └─────┴───────┴──────┴─────┴──────┘ # # ○スタック更新後 # ┌─────┬───────┬──────┬─────┬──────┐ # │方向   │Ethernetタイプ│IPプロトコル│ポート範囲│接続先   │ # ├─────┼───────┼──────┼─────┼──────┤ # │egress  │IPv6     │(空)    │-     │(空)    │ # │egress  │IPv4     │(空)    │-     │(空)    │ # └─────┴───────┴──────┴─────┴──────┘ SG_test_D: type: OS::Neutron::SecurityGroup properties: name: SG_test_D rules: # ルール無し設定 # ■スタック更新後の SG_test_D の更新状況 # # デフォルトの egressルール (スタックの新規作成時にSG_test_AとSG_test_Cに作成されたルール) が # 存在しないセキュリティグループでも、セキュリティグループのルールを空にできない # スタックではなく手動でルールを削除すれば、セキュリティグループのルールを空にすることはできる # # 上記のルール無し設定により、SG_test_D は、 # スタック更新完了時には以下のように更新される # # ○スタック更新前 # ┌─────┬───────┬──────┬─────┬──────┐ # │方向   │Ethernetタイプ│IPプロトコル│ポート範囲│接続先   │ # ├─────┼───────┼──────┼─────┼──────┤ # │egress  │IPv4     │tcp     │22    │0.0.0.0/0  │ # └─────┴───────┴──────┴─────┴──────┘ # # ○スタック更新後 # ┌─────┬───────┬──────┬─────┬──────┐ # │方向   │Ethernetタイプ│IPプロトコル│ポート範囲│接続先   │ # ├─────┼───────┼──────┼─────┼──────┤ # │egress  │IPv6     │(空)    │-     │(空)    │ # │egress  │IPv4     │(空)    │-     │(空)    │ # └─────┴───────┴──────┴─────┴──────┘