0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWS】作って学ぶインフラ構築1

Last updated at Posted at 2024-07-15

はじめに

こんにちは、愛知でWEBエンジニアをしているkokuboと申します。

実務でサーバー業務を始めてから約1年。
今回は基礎的な部分を改めて学習したことをアウトプットも兼ねて紹介させていただきます。

実務で手を動かしながら学んだこの1年はかなり充実した1年でした。
是非とも一緒にインフラを構築しながら読んでいただけると幸いです。

概要

【目標】
 AWS内に公開サーバーと非公開のサーバーを作成し、外部から公開サーバーを介して非公開サーバーにアクセスする。

  • 実際の業務での使用例
    • DBサーバー(非公開)に踏み台サーバー(公開)からアクセスを行う

 
【学べること】

  • AWSの基本的な構造が学習できる
    • インターネットからサーバー到達までの一連の流れ
  • ネットワークの基礎知識
  • 安全に作業を行うための基礎知識

 
【ネットワーク構成】
スクリーンショット 2024-09-01 15.48.47.png
uploading...0

 
【今回参考にした資料】
 以下の書籍を参考にしました、この書籍は私がサーバーを担当する前にサーバーエンジニアの先輩たちがおすすめしてくれたもので、非常に丁寧で分かりやすくAWSを触り始めるのにはピッタリな書籍だと思います。

出てくる用語を簡単に

※AWSでは略された用語がよく出てくるので、英語に展開すると意味が理解しやすいと思います。

  • IAM(Identity and Access Management)
    • AWSリソースへのアクセスを管理するためのサービス
  • VPC(Virtual Private Cloud)
    • AWS上に作成できる自分専用のネットワーク
  • アベイラビリティーゾーン(AZ)
    • どの地域にネットワークを設置するか
    • 耐障害体制を高めるために分離して設置する
  • サブネット
    • VPCのIPアドレス範囲を分割する単位
      →公開用と非公開用でIPアドレスを分割
    • この中にサーバーを設置する
  • インターネットゲートウェイ(IGW)
    • VPCとインターネットを繋ぐ入り口
  • NATゲートウェイ
    • パブリックサブネットとプライベートサブネットを繋ぐ入り口
  • ルートテーブル
    • どの入り口(ゲートウェイ)を通るかを指定する
  • セキュリティーグループ
    • 入り口と向き先をIPアドレスで制限する
  • EC2(Elastic Compute Cloud)
    • 手軽に使用できる仮装サーバーサービス

手順1:安全に作業するために

※初心者の方は必ず設定をお願いします

  1. ルートユーザーのアクセスキーの削除・MFAの有効化
    →どちらもIAMの「セキュリティ認証情報」から設定を行えます
     MFAは「Google Authenticator」などで登録をしてください
  2. IAMユーザーの作成
     ・ユーザー、ユーザーグループを作成
     ・グループに「PowerUserAccess」ポリシーを追加
     ・ユーザーにグループを紐づける
  3. IAMユーザーでログインをして準備完了

 
注意点
 仮にメール、PASS、アクセスキーの流失により不正利用された場合、サーバーを山ほど作成されるなどで1000万円規模の請求が来た事例があります。よって、以下の項目は特に注意をお願いします。
ーーーーーーーーーーーーーーーーーーーーーーーー
・パスワードは複雑なものを使用する
 →パスワードポリシーを設定するのが良い
・使用していなくても定期的なパスワードの変更を行う
・IAMユーザーを使用する(ルートは何でもできてしまう)
・ルートとIAMに多要素認証 (MFA)の設定
・絶対にメール、PASS、アクセスキーを公開しない(Git気を付ける)
ーーーーーーーーーーーーーーーーーーーーーーーー

手順2:VPCの作成

VPCの画面から「VPCを作成」を押下し、以下の項目を入力する

項目 入力値      
作成するリソース VPCのみ
名前タグ vpc-study
IPv4 CIDR ブロック 「IPv4 CIDR の手動入力」にチェック
IPv4 CIDR 10.0.0.0/16
IPv6 CIDR ブロック なし
テナンシー デフォルト

【備考】

  • タグ
    • 検索がしやすくなる。分かりやすい名前や、プロジェクトごとでタグを使用すると後々便利
  • IPv4 CIDR
    • 設定できるIPアドレスの範囲、今回は詳しく書きません

手順3:サブネットの作成(公開・非公開)

VPC→サブネットの画面から「サブネットを作成」を押下し、以下の内容を入力する

サブネット種類 項目 入力値 
公開サブネット VPC ID 作成したVPC
(vpc-study)
サブネット名 public-subnet-study
アベイラビリティーゾーン ap-northeast-1a(東京)
IPv4 VPC CIDR ブロック VPCを選択すると入力される
IPv4 サブネット CIDR ブロック 10.0.0.0/20
非公開サブネット VPC ID 作成したVPC
(vpc-study)
サブネット名 private-subnet-study
アベイラビリティーゾーン ap-northeast-1a(東京)
IPv4 VPC CIDR ブロック VPCを選択すると入力される
IPv4 サブネット CIDR ブロック 10.0.64.0/20

【備考】

  • IPv4 サブネット CIDR ブロック
    • サブネットの数や、リソースの数が決まる
  • 一度CIDRを登録すると後で変更できないので注意が必要

手順4:インターネットゲートウェイの作成

  1. VPC→インターネットゲートウェイの画面から「インターネットゲートウェイを作成」を押下し、以下の内容を入力する。
  2. 作成されたものをVPCにアタッチする
項目 入力値      
名前タグ igw-study

手順5:NATゲートウェイの作成

VPC→NATゲートウェイの画面から「NAT ゲートウェイを作成」を押下し、以下の内容を入力する

項目 入力値      
名前タグ nat-study
サブネット 公開用で作成したサブネット
(public-subnet-study)
接続タイプ パブリック
Elastic IP 割り当て ID 「Elastic IP を割り当て」を押下
※Elastic IPが自動で作成されます

【備考】

  • 接続タイプの用途
    • パブリック:プライベートサブネット内のリソースがインターネットにアクセスする必要がある場合に使用
    • プライベート:他のVPCやオンプレミスのネットワークと通信する必要があり、インターネットアクセスを遮断したい場合に使用

手順6:ルートテーブルの作成・編集(公開、非公開)

1. ルートテーブルの作成

VPC→ルートテーブルの画面から「ルートテーブルを作成」を押下し、以下の内容を入力する

種類 項目 入力値      
公開ルートテーブル 名前タグ public-rute-study
VPC 作成したVPC
(vpc-study)
非公開ルートテーブル 名前タグ private-rute-study
VPC 作成したVPC
(vpc-study)

2. ルートテーブルの編集

作成したルートから「ルート・サブネットの関連付け」から以下の内容で編集をする

「ルート」の編集

種類 項目 入力値      
公開ルートテーブル
(public-rute-study)
送信先1 送信先:10.0.0.0/16
ターゲット:ローカル
送信先2 送信先:10.0.0.0/0
ターゲット:インターネットゲートウェイ
igw-:作成したインターネットゲートウェイID
非公開ルートテーブル
(private-rute-study)
送信先1 送信先:10.0.0.0/16
ターゲット:ローカル
送信先2 送信先:10.0.0.0/0
ターゲット:NAT ゲートウェイ
nat-:作成したNAT ゲートウェイID

「サブネットの関連付け」の編集

「明示的なサブネットの関連付け」の編集をする

種類 項目 入力値      
公開ルートテーブル
(public-rute-study)
選択サブネット 作成した公開サブネット
(public-subnet-study)
非公開ルートテーブル
(private-rute-study)
選択サブネット 作成した非公開サブネット
(private-subnet-study)

手順7:セキュリティーグループの作成

EC2→セキュリティーグループの画面から「セキュリティグループを作成」を押下し、以下の内容を入力する

項目 入力値      
名前 bastion-sg
説明 bastion-sg
VPC 作成したVPC
ルール ・インバウンドルール
 タイプ:SSH
 ソース:0.0.0.0/0

・アウトバウンドルール
 デフォルト設定

【インバウンドルールについて】

  • Wi-Fiを使用している時など、IPアドレスが固定の場合は以下の設定の方がセキュアです
    • タイプ:マイIP
    • ソース:「マイIP」を選択すると自動でIPアドレスを入力してくれます。

手順8:SSHキーの作成

1. EC2→キーペアの画面から「キーペアを作成」を押下し、以下の内容を入力する

項目 入力値      
名前タグ bastion-ssh-key
キーペアのタイプ RSA
プライベートキーファイル形式 .pem

2. ダウンロードしたpemファイルは、PCの.ssh/以下に保存する
3. pemファイルの権限をchmod等で600に変更する

cd ~/.ssh
chmod 600 bastion-ssh-key.pem

 
【注意】
作成したキーの情報は外部に公開しないように注意する

手順9:踏み台サーバーの作成

EC2の画面から「インスタンスを起動する」を押下し、以下の内容を入力する

項目 入力値      
名前タグ bastion-ec2
OS Amazon Linux2 AMI
インスタンスタイプ t2.micro
キーペア 作成したキーぺア
VPC 作成されたVPC
※最初はデフォルトのVPCが選択されています
サブネット public-subnet-study
パブリックの自動割り当て 有効
ファイアウォール
(セキュリティグループ)
bastion-sg、デフォルト
ストレージ デフォルト設定

手順10:Webサーバーの作成

踏み台サーバーと同じようにWebサーバーを作成する

項目 入力値      
名前タグ web-ec2
OS Amazon Linux2 AMI
インスタンスタイプ t2.micro
キーペア 作成したキーぺア
VPC 作成されたVPC
※最初はデフォルトのVPCが選択されています
サブネット private-subnet-study
パブリックの自動割り当て 無効
ファイアウォール
(セキュリティグループ)
デフォルト
ストレージ デフォルト設定

手順11:接続確認

 これでサーバーの構築は全て完了しました。あとは実際に踏み台サーバーを経由してWebサーバーにアクセスできるかどうかを確認してみましょう!
 
【準備】
 .ssh/configを作成して以下の内容を入力する
 →ProxyCommandで経由するサーバーを選択できます

cd ~/.ssh
mkdir config

# 以下を入力
Host bastion
    HostName 踏み台サーバーのパブリックIPアドレス
    User ec2-user
    IdentityFile ~/.ssh/bastion-ssh-key.pem
    ForwardAgent yes

Host webserver
    HostName webサーバーのプライベートIPアドレス
    User ec2-user
    IdentityFile ~/.ssh/bastion-ssh-key.pem
    ProxyJump bastion

 
【アクセス】
以下のコマンドを実行してWebサーバーにアクセスできることを確認する

ssh webserver

最後に

ここまで読んでいただきありがとございました!

今回はAWSでよくある構成を簡単に紹介させていただきました。
次回はロードバランサーやRoute53、S3などより実戦に近い環境構築を紹介させていただこうと思います。

また、今回作成していただいた環境についてですが、EC2を停止していたとしても時間が経つにつれ料金がかかってしまう場合があります。

必要がなければ削除をしましょう、AWSでは 「削除」 ボタンを押しただけでは削除できず、ある程度サービス同士の繋がりの解除をしなければなりません。今回の復習や新たな発見にも繋がりますのでぜひやってみてください!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?