コンソール操作(通称:ぽちぽち)ではなく、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
やるべきことは以下
- SGを作成する ※所属するVPNを指定する必要あり
- Inboundの許可設定追加
- 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