• 検索結果がありません。

第3章 リソースの作成

3.3 セキュリティグループ設定

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

セキュリティグループを用いると、仮想サーバに接続されたポートに対してパケットフィルタリング を行うため、ルール設定をグルーピングして定義および設定することができます。ここでは、セキュ リティグループを作成し、確認するまでの手順を解説します。

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

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

ポートには自動的に通信を遮断するデフォルトセキュリティグループが設定されています。そこで、

新たにセキュリティグループを作成し、必要に応じて通信を許可するルールを設定します。

1. 以下で、必要な設定を行います。

セキュリティグループはアベイラビリティゾーンに紐づかないため、指定は不要です。

$ SG_NAME=<新規セキュリティグループ名(任意)>

2. 次のAPIを実行します。

$ curl -Ss $NETWORK/v2.0/security-groups -X POST -H "X-Auth-Token: $OS_AUTH_TOKEN" \ -H "Content-Type: application/json" -d '{"security_group": {"name": "'$SG_NAME'"}}' | \ jq .

以下のレスポンスが返ります。

{

"security_group": {

"tenant_id": "<プロジェクトID>"

,

"description": "",

"name": "<新規セキュリティグループ名>", "security_group_rules": [

{

"remote_group_id": null, "direction": "egress", "remote_ip_prefix": null, "protocol": null,

"ethertype": "IPv6", "port_range_max": null,

"security_group_id": "<新規セキュリティグループID>", "port_range_min": null,

"tenant_id": "<プロジェクトID>",

"id": "<デフォルトのセキュリティグループルールID>"

}, {

"remote_group_id": null, "direction": "egress", "remote_ip_prefix": null, "protocol": null,

"ethertype": "IPv4", "port_range_max": null,

"security_group_id": "<新規セキュリティグループID>", "port_range_min": null,

"tenant_id": "<プロジェクトID>",

"id": "<デフォルトのセキュリティグループルールID>"

} ],

"id": "<新規セキュリティグループID>"

} }

3. 作成したセキュリティグループを確認するため、以下のAPIを実行します。

$ curl -Ss $NETWORK/v2.0/security-groups -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | \ jq '.security_groups[]| .name, .description, .id'

以下のように、設定したセキュリティグループ名を含んだリストが出力された場合、作成は完了で す。

"default"

"default"

"<プロジェクトのデフォルトセキュリティグループID>"

...

"<新規作成したセキュリティグループ名>"

""

"<新規作成したセキュリティグループID>"

...

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

セキュリティグループにセキュリティグループルールを設定し、確認する手順を解説します。

ヒント

お互いにセキュリティグループが使える仮想サーバ同士の通信の場合、基本的に通信相手を セキュリティグループIDで指定することを推奨します。

ヒント

同じセキュリティグループが設定されている仮想サーバ同士の通信(自らに返ってくる通信も 含む)にも明示的にその通信を許可するルールが必要です。自分自身のセキュリティグルー プIDを指定することで解決します。

ヒント

ingressの場合は送信元、egressの場合は宛先のIPアドレスを指定します。

1. 以下で、必要な設定を行います。

$ DIRECTION=<通信の方向、ingress、 egress で指定>

$ PROTCOL=<通信プロトコルtcp、udp、icmp、0~65535で指定>

$ MIN_PORT_NUM=<最小ポート番号0~65535で指定>

$ MAX_PORT_NUM=<最大ポート番号 0~65535で指定>

$ SG_ID=<ルールを追加したいセキュリティグループのセキュリティグループID>

$ REMOTE_IP=<許可するIPアドレス「XXX.XXX.XXX.0/24」等>

もしくは

$ REMOTE_GROUP_ID=<許可するセキュリティグループID>

2. 次のAPIを実行します。

$ curl -Ss $NETWORK/v2.0/security-group-rules -X POST \

-H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" \ -d '{"security_group_rule": {"direction": "'$DIRECTION'",

"port_range_min": '$MIN_PORT_NUM', "port_range_max": '$MAX_PORT_NUM', "protocol": "'$PROTCOL'", "remote_ip_prefix": "'$REMOTE_IP'",

"security_group_id": "'$SG_ID'"}}' | jq . もしくは

$ curl -Ss $NETWORK/v2.0/security-group-rules -X POST \

-H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" \ -d '{"security_group_rule":{"direction": "'$DIRECTION'",

"port_range_min": '$MIN_PORT_NUM',"port_range_max": '$MAX_PORT_NUM', "protocol": "'$PROTCOL'","remote_group_id": "'$REMOTE_GROUP_ID'", "security_group_id": "'$SG_ID'"}}' | jq .

以下のレスポンスが返ります。

{

"security_group_rule": {

"remote_group_id": "<許可するセキュリティグループID>", "direction": "<通信の方向>",

"remote_ip_prefix": "<許可するIPアドレス>", "protocol": "<プロトコル>",

"tenant_id": "<プロジェクトID>", "port_range_max": <最大ポート番号>,

"security_group_id": "<ルールを追加したセキュリティグループID>", "port_range_min": <最小ポート番号>,

"ethertype": "IPv4",

"id": "<セキュリティグループルールID>", "availability_zone": null

} }

3. 設定したセキュリティグループルールを確認するため、以下のAPIを実行します。

$ curl -Ss $NETWORK/v2.0/security-group-rules -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" \ | jq .

以下のように、設定したセキュリティグループルールを含んだリストが出力された場合、作成は完 了です。

{

"security_group_rules": [

...

{

"remote_group_id": "<許可するセキュリティグループID>", "direction": "<通信の方向>",

"remote_ip_prefix": "<許可するIPアドレス>",

"protocol": "<プロトコル>", "tenant_id": "<プロジェクトID>", "port_range_max": <最大ポート番号>,

"security_group_id": "<ルールを追加したセキュリティグループID>", "port_range_min": <最小ポート番号>,

"ethertype": "IPv4",

"id": "<セキュリティグループルールID>", }

...

] }

3.3.3 セキュリティグループルールの設定例

目的別のセキュリティグループルールの設定例を示します。

以下の設定を行います。

• ingress : PING(ICMP:0 ~255)

• ingress : SSH(TCP:22)

• ingress : HTTP(TCP:80)

• ingress : HTTPS(TCP:443)

• ingress : NTP(UDP:123)

• ingress : KMS(TCP:1688)

• ingress : RDP(TCP:3389)

egressはデフォルト値を使用します。

ingress : PING(ICMP:0 ~255)

$ DIRECTION=ingress

$ PROTCOL=icmp

$ MIN_PORT_NUM=0

$ MAX_PORT_NUM=255

$ REMOTE_IP=<XXX.XXX.XXX.0/24>

もしくは

$ REMOTE_GROUP_ID=<セキュリティグループID>

$ SG_ID=<設定するセキュリティグループID>

ingress : SSH(TCP:22)

$ DIRECTION=ingress

$ PROTCOL=tcp

$ MIN_PORT_NUM=22

$ MAX_PORT_NUM=22

$ REMOTE_IP=<XXX.XXX.XXX.0/24>

もしくは

$ REMOTE_GROUP_ID=<セキュリティグループID>

$ SG_ID=<設定するセキュリティグループID>

ingress : HTTP(TCP:80)

$ DIRECTION=ingress

$ PROTCOL=tcp

$ MIN_PORT_NUM=80

$ MAX_PORT_NUM=80

$ REMOTE_IP=<XXX.XXX.XXX.0/24>

もしくは

$ REMOTE_GROUP_ID=<セキュリティグループID>

$ SG_ID=<設定するセキュリティグループID>

ingress : HTTPS(TCP:443)

$ DIRECTION=ingress

$ PROTCOL=tcp

$ MIN_PORT_NUM=443

$ MAX_PORT_NUM=443

$ REMOTE_IP=<XXX.XXX.XXX.0/24>

もしくは

$ REMOTE_GROUP_ID=<セキュリティグループID>

$ SG_ID=<設定するセキュリティグループID>

ingress : NTP(UDP:123)

$ DIRECTION=ingress

$ PROTCOL=udp

$ MIN_PORT_NUM=123

$ MAX_PORT_NUM=123

$ REMOTE_IP=<XXX.XXX.XXX.0/24>

もしくは

$ REMOTE_GROUP_ID=<セキュリティグループID>

$ SG_ID=<設定するセキュリティグループID>

ingress : KMS(TCP:1688)

$ DIRECTION=ingress

$ PROTCOL=tcp

$ MIN_PORT_NUM=1688

$ MAX_PORT_NUM=1688

$ REMOTE_IP=<XXX.XXX.XXX.0/24>

もしくは

$ REMOTE_GROUP_ID=<セキュリティグループID>

$ SG_ID=<設定するセキュリティグループID>

ingress : RDP(TCP:3389)

$ DIRECTION=ingress

$ PROTCOL=tcp

$ MIN_PORT_NUM=3389

$ MAX_PORT_NUM=3389

$ REMOTE_IP=<XXX.XXX.XXX.0/24>

もしくは

$ REMOTE_GROUP_ID=<セキュリティグループID>

$ SG_ID=<設定するセキュリティグループID>

その他の詳しい設定項目は機能説明書をご参照ください。

第 8 章