Amazon VPCをAWS CLIで構築する手順②
はじめに
前回、Amazon VPC(以下VPC)とサブネットをAWS CLIで構築する手順を書きました。
今回は、セキュリティグループの作成とルールの追加をAWS CLIでやる手順を書こうと思います。今回も「AWS Hands-on for Beginners」とJAWS-UG CLI専門支部のハンズオンで学んだことを基に書いています。
※注意
ハンズオンで学んだことを基にしてコマンド実行しながら書きますが、認識違いや補足などがありましたらご指摘いただけますと幸いです。
また、記載内容を参考にする場合は自己責任でお願いいたします。
前回の記事
本記事の作業環境と、前回作成したVPCとサブネットの手順については、以下の前回の記事を参照してください。
構成図
前回の構成図から大きく変わりはありませんが、パブリックサブネットに設定するためのセキュリティグループを作成します。
セキュリティグループのルール
今回は、作業環境のグローバルIPアドレスからのHTTPアクセスのみ許可するセキュリティグループを作成します。
IPバージョン | タイプ | プロトコル | ポート範囲 | ソース |
---|---|---|---|---|
IPv4 | HTTP | TCP | 80 | 作業環境のグローバルIPアドレス |
手順
1.セキュリティグループ作成
①リージョンを環境変数に指定
VPCを作成するリージョンを環境変数に指定します。この手順では東京リージョンを指定します。
export AWS_DEFAULT_REGION='ap-northeast-1'
②各種変数の指定
VPCタグ名、セキュリティグループ名、セキュリティグループの説明、VPC IDを変数に入れます。
VPCタグ名
EC2_VPC_TAG_NAME='handson-cli-vpc'
セキュリティグループ名
EC2_SECURITY_GROUP_NAME='handson-cli-sg'
セキュリティグループの説明
EC2_SECURITY_GROUP_DESCRIPTION='handson-cli SecurityGroup.'
VPC ID
EC2_VPC_ID=$( \
aws ec2 describe-vpcs \
--filters Name=tag:Name,Values=${EC2_VPC_TAG_NAME} \
--query 'Vpcs[].VpcId' \
--output text \
) \
&& echo ${EC2_VPC_ID}
vpc-XXXXXXXXXXXXXXXXX
③セキュリティグループ作成
以下のコマンドを実行して、セキュリティグループを作成します。
aws ec2 create-security-group \
--group-name ${EC2_SECURITY_GROUP_NAME} \
--description "${EC2_SECURITY_GROUP_DESCRIPTION}" \
--vpc-id ${EC2_VPC_ID}
成功したら以下のように表示されます。
{
"GroupId": "sg-XXXXXXXXXXXXXXXXX"
}
④作成確認
以下のコマンドを実行して、セキュリティグループが正しく作成されたことを確認します。
指定のセキュリティグループ名とVPC IDで抽出したJSONから、セキュリティグループのグループ名をテキスト形式で表示させます。
aws ec2 describe-security-groups \
--filters Name=vpc-id,Values=${EC2_VPC_ID} \
Name=group-name,Values=${EC2_SECURITY_GROUP_NAME} \
--query 'SecurityGroups[].GroupName' \
--output text
2.セキュリティグループへのルール追加
①リージョンを環境変数に指定
VPCを作成するリージョンを環境変数に指定します。この手順では東京リージョンを指定します。
export AWS_DEFAULT_REGION='ap-northeast-1'
②各種変数の指定
VPCタグ名、セキュリティグループ名、ルールのタグ名、プロトコル、ポート番号、VPC ID、セキュリティグループIDを変数に入れます。
VPCタグ名
EC2_VPC_TAG_NAME='handson-cli-vpc'
セキュリティグループ名
EC2_SECURITY_GROUP_NAME='handson-cli-sg'
ルールのタグ名
EC2_SECURITY_GROUP_RULE_TAG_NAME='http-local'
セキュリティグループタグ文字列
STRING_EC2_EC2_SECURITY_GROUP_RULE_TAG="ResourceType=security-group-rule,Tags=[{Key=Name,Value=${EC2_SECURITY_GROUP_RULE_TAG_NAME}}]" \
&& echo ${STRING_EC2_EC2_SECURITY_GROUP_RULE_TAG}
プロトコル
EC2_SECURITY_GROUP_RULE_PROTOCOL='tcp'
ポート番号
EC2_SECURITY_GROUP_RULE_PORT='80'
VPC ID
EC2_VPC_ID=$( \
aws ec2 describe-vpcs \
--filters Name=tag:Name,Values=${EC2_VPC_TAG_NAME} \
--query 'Vpcs[].VpcId' \
--output text \
) \
&& echo ${EC2_VPC_ID}
vpc-XXXXXXXXXXXXXXXXX
セキュリティグループID
EC2_SECURITY_GROUP_ID=$( \
aws ec2 describe-security-groups \
--filters Name=vpc-id,Values=${EC2_VPC_ID} \
Name=group-name,Values=${EC2_SECURITY_GROUP_NAME} \
--query "SecurityGroups[].GroupId" \
--output text \
) \
&& echo ${EC2_SECURITY_GROUP_ID}
sg-0xxxxxxxxxXXXXXXX
IPアドレス
EC2_SECURITY_GROUP_RULE_CIDR=$( curl -s http://checkip.amazonaws.com/ )/32 \
&& echo ${EC2_SECURITY_GROUP_RULE_CIDR}
http://checkip.amazonaws.com/
で接続元環境のグローバルIPアドレスを取得することができます。また、CIDR形式にする必要があります。
③ルール追加
以下のコマンドを実行します。
aws ec2 authorize-security-group-ingress \
--group-id ${EC2_SECURITY_GROUP_ID} \
--protocol ${EC2_SECURITY_GROUP_RULE_PROTOCOL} \
--port ${EC2_SECURITY_GROUP_RULE_PORT} \
--cidr ${EC2_SECURITY_GROUP_RULE_CIDR} \
--tag-specifications ${STRING_EC2_EC2_SECURITY_GROUP_RULE_TAG}
成功すると以下のように表示されます。
{
"Return": true,
"SecurityGroupRules": [
{
"SecurityGroupRuleId": "sg-0xxxxxxxxxXXXXXXX",
"GroupId": "sg-XXXXXXxXXXXXXXXXX",
"GroupOwnerId": "XXXXXXXXXXXX",
"IsEgress": false,
"IpProtocol": "tcp",
"FromPort": 80,
"ToPort": 80,
"CidrIpv4": "xxx.xxx.xxx.xxx/32",
"Tags": [
{
"Key": "Name",
"Value": "http-local"
}
]
}
]
}
ここまでのまとめ
今回の記事では、自分のネットワークからHTTPアクセスを許可するためのセキュリティグループを作成しました。
次回は、インターネットゲートウェイの作成とVPCへのアタッチについて書きます。
※次回の記事
Discussion