💡

Amazon VPCをAWS CLIで構築する手順②

2022/04/23に公開

はじめに

前回、Amazon VPC(以下VPC)とサブネットをAWS CLIで構築する手順を書きました。
今回は、セキュリティグループの作成とルールの追加をAWS CLIでやる手順を書こうと思います。今回も「AWS Hands-on for Beginners」とJAWS-UG CLI専門支部のハンズオンで学んだことを基に書いています。

※注意
ハンズオンで学んだことを基にしてコマンド実行しながら書きますが、認識違いや補足などがありましたらご指摘いただけますと幸いです。
また、記載内容を参考にする場合は自己責任でお願いいたします。

前回の記事

本記事の作業環境と、前回作成したVPCとサブネットの手順については、以下の前回の記事を参照してください。

https://zenn.dev/amarelo_n24/articles/35cb14a057ecf1

構成図

前回の構成図から大きく変わりはありませんが、パブリックサブネットに設定するためのセキュリティグループを作成します。

セキュリティグループのルール

今回は、作業環境のグローバル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へのアタッチについて書きます。

※次回の記事
https://zenn.dev/amarelo_n24/articles/dee73d9ce90072

Discussion