AWS CLIメモ: SG作成


コンソール操作(通称:ぽちぽち)ではなく、AWS CLIでSG(Security Group)を作成するメモ

参考)
http://docs.aws.amazon.com/cli/latest/reference/ec2/create-security-group.html
http://docs.aws.amazon.com/cli/latest/reference/ec2/authorize-security-group-ingress.html
http://docs.aws.amazon.com/cli/latest/reference/ec2/authorize-security-group-egress.html

やるべきことは以下
1. SGを作成する ※所属するVPNを指定する必要あり
2. Inboundの許可設定追加
3. Outboundの許可設定追加

CLIコマンド例は以下

SG作成

aws ec2 create-security-group --group-name [SG名] --description [説明] --vpc-id [VPC ID]

VPC名で管理したい場合に、VPC名からVPC IDへの変換をシェル芸で対応するならdescribe-vpcsコマンドと、jqを使って整形して取得できる。

VPC_NAME='my_vpc'
eval VPC_ID=$(eval "aws ec2 describe-vpcs |jq -r '.Vpcs[] | select(.Tags[].Value==\"${VPC_NAME}\") | .VpcId '")

※変数VPC_NAMEで指定したVPC名で、VPC IDを取得する例

SGにNameタグを付与したければ以下を追加

aws ec2 create-tags --resources [SG ID] --tags Key=Name,Value=[名前]

Inbound設定

外部からSGへのアクセス許可設定

以下はFROMをSG IDで指定する例
※すべてのプロトコル対象の場合は--protocol all

aws ec2 authorize-security-group-ingress --group-id [対象のSG ID] --protocol all --source-group [アクセス許可する送信元SG ID]

IPアドレス指定するならオプション --source-group の代わりに --cidr を利用

--cidr 192.168.0.0/24

また、参考まで、SG名からSG IDに変換するには以下

aws ec2 describe-security-groups --filters Name=group-name,Values=[SG名] | jq -r '.SecurityGroups[].GroupId'

Outbound設定

基本的には、Inboundの authorize-security-group-ingress を authorize-security-group-egress に変えるだけ。

注意点:VPCエンドポイント経由でS3へアクセスする場合

アウトバウンドに PrefixListId=pl-61a54008 を指定する必要あり

Prefix List IDを指定したい場合は --source-group の代わりに --ip-permissions

--ip-permissions IpProtocol=tcp,FromPort=443,ToPort=443,PrefixListIds=[{PrefixListId=pl-61a54008}]

※Prefix IDとは、宛先のAWSクラウド上のサービスを特定するためのIDで、AWSサービスのIPアドレス帯域をIDで指定できるもので、東京リージョンはpl-61a54008が該当。
VPCエンドポイント経由でS3バケットにアクセスする場合に、この帯域に対するアウトバウンドを設定しておく必要がある。

以下で詳細を確認できる。

aws ec2 describe-prefix-lists