🍣

[AWS]EC2構成要素とシステム・sshについて: 初学者でもわかる解説

2023/04/09に公開

EC2構成要素

EC2の主要な構成要素(大枠)は以下の6つです。
今日はこの構成要素を深掘りしながら作成画面とも見比べて解説していきます。

構成要素 概要
Amazon Machine Image(AMI) EC2インスタンスを作成するためのテンプレートであり、オペレーティングシステム、アプリケーション、ライブラリなどが事前にインストールされたイメージ。
インスタンスタイプ CPU、メモリ、ネットワーク性能などのリソースを定義するために使用される。
ストレージ EC2インスタンスで使用されるデータを保存するために使用される。Amazon Elastic Block Store(EBS)やAmazon Simple Storage Service(S3)などのストレージオプションがある。
ネットワーキング インスタンスのパブリックIPアドレスやサブネット、ルーティングテーブルなどを管理するために使用される。
キーペア EC2インスタンスにログインするためのセキュリティ認証情報。
セキュリティグループ インスタンスに許可されるトラフィックを制御するために使用される。

<今日の解説範囲の図>

EC2(Amazon Elastic Compute Cloud)とは: 概説

  • AWSのクラウド上でサーバーを実行するためのサービス。 
    AWSではサーバーをインスタンスと名付け、その仮想マシンのインスタンスをEC2という。
  • コンピューティングキャパシティを提供するサービス。(クラウドコンピューティングサービス)

クラウドコンピューティングサービスとは:
インターネットを介してコンピューター資源を提供するサービスのこと。
従来のオンプレミスのシステムと比較して、クラウドコンピューティングサービスは、
オンデマンドで必要な資源を提供し、柔軟性が高く、スケーラビリティがある。

※クラウドに関してはここのページにまとめています。ご参考に。
https://zenn.dev/airiswim/articles/42cdcb93c0d40d

各要素の説明の前に...!仕組み理解のために、
以下のタブに、EC2のインフラストラクチャについてまとめました。

EC2 インフラストラクチャ: EC2の仮想化技術について

EC2の仮想化技術

HVM(Hardware-assisted Virtual Machine)と,
PV(Paravirtualization)の2つの方式がある。(HVMが多い。)
=> 一般的に、HVM方式は、WindowsやLinuxの最新バージョンを実行する場合に使用され、
PV方式は、古いバージョンのLinuxを実行する場合に使用される。

比較表

比較項目 HVM方式 PV方式
仮想化方式 ハードウェア仮想化方式 準仮想化方式
ゲストOSのカスタマイズ 特別なカスタマイズ不要 カスタマイズが必要
パフォーマンス 高い PV方式より低い
I/O処理の速さ 早い PV方式より遅い
対応OS 広い 限られたOSに対応
起動時間 長い 短い
利用用途 一般的な用途に利用される I/Oが多いアプリケーションに利用される

HVM(Hardware-assisted Virtual Machine):ハードウェア仮想化方式

  • ハードウェアに搭載された仮想化支援機能(Intel VTまたはAMD-V)を利用し、ゲストOSを仮想化する方式。
  • HVM方式では、ゲストOSに特別なカスタマイズが必要なく、ほとんどのOSをそのまま動作させることができる。
  • ゲストOSが直接ハードウェアにアクセスするため、パフォーマンスが高く、I/Oの処理が早いという特徴がある。
  • 上記した通り、WindowsやLinuxの最新バージョンを実行する場合に使用する場合が多いが、古いバージョンのLinuxやWindowsでも動作はするため、幅広いOSに対応している。

補足:I/O性能とは
コンピュータの入出力(I/O)処理能力のことを指す。入力とは、ユーザーがキーボードやマウスを使用してコンピュータに情報を与えることであり、出力とは、コンピュータが処理したデータをディスプレイやプリンタなどに表示すること。
I/O性能は、データの転送速度や処理速度などによって決まり、高速なI/O性能を持つコンピュータは、高速なデータ処理や高速なストレージアクセスが可能となります。

PV(Paravirtualization):準仮想化方式

  • ハイパーバイザーに対して仮想化対応のカーネルを使用することで、仮想化を実現する方式
  • PV方式では、ハイパーバイザーとゲストOSの間での通信に特別なAPIを使用するため、ゲストOSに対してカスタマイズが必要になる。
  • PV方式は、HVM方式よりも高速であり、仮想マシンの起動時間が短いという利点がある。
    ただし、PV方式では、一部のOSにしか対応していないため、OSの選択肢が限られることがあります。

まとめると...

  • HVM方式は、特別なカスタマイズが必要なく、ほとんどのOSをそのまま動作させることができます。また、HVM方式はパフォーマンスが高く、I/Oの処理が早いため、一般的な用途に利用されます。

  • PV方式はカスタマイズが必要で、限られたOSに対応しています。また、I/Oが多いアプリケーションに利用されることが多く、起動時間が短いという利点があります。

  • EC2:Linux AMI 仮想化タイプについて参考ページ

EC2:各構成要素の解説

AMI(Amazon Machine Instances )について

  • EC2インスタンスの構成を取得し、テンプレートを作成するサービス.
    コピーしたサーバーの状態を保持しています。
    EC2を作成する際には、必ず1つのAMIが作成される。
    (追加のAMIが必要な場合は、手動でAMIを作成するか、AWS MarketplaceなどからAMIを入手することができます。)
    <EC2作成時の画面>
    ここでしようするAMIをものに合わせて選んでいく。

インスタンスの種類について

<EC2作成時の画面>

 ここでインスタンスのタイプを選択します。

インスタンスタイプとは?

  • インスタンスタイプは、AWSのクラウドコンピューティングサービスであるEC2において、仮想マシンのスペックを表すために用いられる用語

  • 以下のようにインスタンス名を確認できるよ!

  • インスタンス名は以下のような要素が合わさって構成されている!!!!
    構成要素の詳細は下で解説します。

  • それぞれこれら要素により、一意の識別子を持っており、EC2インスタンスを起動する際に、
    インスタンスタイプを選択することで、必要なスペックに合わせて仮想マシンを構築することができる。

インスタンス構成要素について

上記で構成される要素が組み合わさってインスタンス名が

  • インスタンスファミリー(ex. 汎用、コンピュート最適化、メモリ最適化など)
  • インスタンス世代(最新の第6世代から第1世代まで)
  • インスタンスサイズ(ex. micro、small、medium、largeなど)

各インスタンスタイプには、以下のようなスペックが割り当てられています。

インスタンスタイプによるスペック比較一覧
インスタンスタイプ vCPU数(CPUクロック) メモリサイズ ストレージ容量 ネットワーク性能 インスタンスの価格
t2.micro 1 vCPU (2.5 GHz) 1 GiB EBSのみ $0.0116/hour
t2.small 1 vCPU (2.5 GHz) 2 GiB EBSのみ $0.0232/hour
t2.medium 2 vCPU (2.5 GHz) 4 GiB EBSのみ $0.0464/hour
m5.large 2 vCPU (2.5 GHz) 8 GiB EBSのみ $0.096/hour
m5.xlarge 4 vCPU (2.5 GHz) 16 GiB EBSのみ $0.192/hour
m5.2xlarge 8 vCPU (2.5 GHz) 32 GiB EBSのみ $0.384/hour
m5.4xlarge 16 vCPU (2.5 GHz) 64 GiB EBSのみ $0.768/hour
m5.12xlarge 48 vCPU (2.5 GHz) 192 GiB EBSのみ 10 Gbps $2.304/hour
c5.large 2 vCPU (3.0 GHz) 4 GiB EBSのみ $0.096/hour
c5.xlarge 4 vCPU (3.0 GHz) 8 GiB EBSのみ $0.192/hour
c5.2xlarge 8 vCPU (3.0 GHz) 16 GiB EBSのみ $0.384/hour
c5.4xlarge 16 vCPU (3.0 GHz) 32 GiB EBSのみ $0.768/hour
c5.9xlarge 36 vCPU (3.0 GHz) 72 GiB EBSのみ 10 Gbps $1.728/hour
c5.18xlarge 72 vCPU (3.0 GHz) 144 GiB EBSのみ 25 Gbps $3.456/hour
ここで使用される用語解説
  • vCPU数(CPUクロック)
    EC2インスタンスが割り当てられたCPUの仮想的なコア数。
    各インスタンスタイプによって異なり、パフォーマンスや価格に影響を与えます。
    CPUクロックは、vCPUあたりのクロック数(GHz)で、インスタンスのパフォーマンスを決定するためにも重要な指標です。

  • メモリサイズ
    EC2インスタンスが使用できるメモリの量。
    インスタンスが実行するアプリケーションやワークロードの要件に基づいて選択される。
    通常、大規模なデータ処理や高負荷のアプリケーションには、より大きなメモリサイズが必要。

  • ストレージ容量
    EC2インスタンスで使用できるディスクストレージの量。ストレージ容量は、データやアプリケーションのサイズ、使用目的などによって異なります。EC2では、EBS(Elastic Block Store)ボリュームを使用して、永続性のあるブロックストレージを提供します。

  • ネットワーク性能
    EC2インスタンスが使用できるネットワーク帯域幅やI/O性能を表す。
    ネットワーク性能は、アプリケーションの通信量や、データの転送量に応じて選択されます。
    インスタンスタイプによって、ネットワーク性能が異なります。

  • インスタンスの価格
    EC2インスタンスを使用する際に必要な料金。インスタンスタイプやリージョン、利用時間などによって価格が異なります。また、オンデマンドインスタンス、リザーブドインスタンス、スポットインスタンスなど、使用方法によって異なる料金体系が存在します。

追加機能に関して

主に3つのオプションがあります。
インスタンスファミリーは、追加されるオプションによってさらに細分化されます。
以下は、追加オプションの種類と説明表になります。

オプション 説明 特徴
d インスタンスストアを追加したインスタンスファミリー。 ・ 一時的なストレージ領域であり、データのキャッシュや一時ファイル用に使用される。
・ ストレージ最適化インスタンスファミリーに対する選択肢の1つになる。
n ネットワーク帯域幅を追加したインスタンスファミリー。 ・ 高速なネットワーク接続が必要なアプリケーションや大量のデータを処理する場合に最適。
・ 大容量のデータを高速に送受信することができる。
a AMDプロセッサを利用したインスタンスファミリー。 ・ Intelプロセッサを利用したインスタンスファミリーと比較して、低コストで高いパフォーマンスを実現できる。
・ CPUのコア数やクロック速度によって、様々な用途に最適化されたインスタンスが用意されている。

EC2のネットワーク構成に関わるもの

EC2はサーバーだと最初で説明しましたが、
このサーバーのネットワークは、「パブリック」と「プライベート」に大別できる。
EC2インスタンスが「パブリック」または「プライベート」のどちらの設定であるかは、
起動するサブネットによって決まる。
( = 設定でどちらのサブネットと繋げて作るかで決まります。)

そして、EC2にはENI(Elastic Network Interface)がアタッチされています。

ENI(Elastic Network Interface)とは

  • EC2インスタンスに付与される仮想ネットワークインターフェース
    =>インスタンスへの通信は、すべてENIを経由して行われている。
  • EC2インスタンスを作成すると、自動的に1つのENIが作成される
    しかし、EC2インスタンスには複数のENIをアタッチすることができるため、
    必要に応じて追加のENIを作成することも可能。

セキュリティグループ

<EC2作成時の画面>

  • AWSの仮想ネットワーク内で動作するEC2インスタンスやRDSインスタンスなどのリソースの
    トラフィックを管理するためのファイアウォール機能のこと。
  • セキュリティグループは、リソースにアタッチされ、インバウンドとアウトバウンドのトラフィックを制限することができる。

ファイアウォールとは
ネットワーク上のトラフィックを制御するためのセキュリティ機能
ファイアウォールは、ネットワーク上のパケットを監視し、設定されたルールに従ってトラフィックを許可または拒否する。
=インターネットからの攻撃やマルウェア、機密データの漏洩などからネットワークを保護するために使用される。

【役割】

  • 主な役割は、ネットワークトラフィックの制御
    => セキュリティグループを使用することで、
    指定されたIPアドレスからのトラフィックのみを許可することができる。
    また、インスタンスにアタッチされ、IPアドレス、ポート番号、プロトコルなどの詳細な制限を設定することができる。 
    = これにより、機密データの漏洩やサーバーへの攻撃を防止することができる。

【ルール】

  • セキュリティグループには、インバウンドとアウトバウンドのトラフィックに対してルールを設定することができる。

    インバウンドルール: EC2インスタンスに流入するトラフィックを制御。
      ex. WebサーバーにHTTPリクエストを送信する場合、
      WebサーバーのセキュリティグループにHTTPポートを許可するインバウンドルールを追加
    アウトバウンドルール: EC2インスタンスから流出するトラフィックを制御。
    ex. データベースサーバーから特定のIPアドレスに対してのみ
    アウトバウンド通信を許可するアウトバウンドルールを設定。

インバウンドルール アウトバウンドルール
デフォルト 拒否 許可
役割 AWSリソースに対するトラフィックを制御する AWSリソースからのトラフィックを制御する
方向 リソースに流入するトラフィック リソースから流出するトラフィック
ポート ポート番号を指定してトラフィックを許可/拒否 ポート番号を指定してトラフィックを許可/拒否
プロトコル TCP、UDP、ICMPなど TCP、UDP、ICMPなど
ソース/宛先 IPアドレス、CIDRブロック、セキュリティグループなど IPアドレス、CIDRブロック、セキュリティグループなど
security groupの変更

EC2インスタンスとセキュリティグループの関連付けは、インスタンスの状態に関係なく、
いつでも変更が可能。

対象インスタンスを右クリックし[セキュリティ] > [セキュリティグループの変更]を選択で編集可能。


キーペアについて

  • **EC2にログインするため
  • の公開鍵と秘密鍵のためのサービス**。
    AWSにおいて、パブリックキーとプライベートキーは、合わせてキーペアと呼ばれます。
    - 作成時にダウンロードできるもので再発行は不能
    => 紛失時はサーバーを作り直すことになる。

SSH接続をするには2つのペアの「鍵」を作る必要があります。 PC側とサーバ側があったとして、2つの鍵を作るのはPC側です。

秘密鍵は絶対に自分のPC以外には移してはいけません。※これは覚えておいてください。 移して良いのは公開鍵のみです。

さっきから「鍵」と読んでいるものは、ただのファイルです。 ファイル中身をみてみると、公開鍵も秘密鍵も意味不明な文字列が並んでいるだけです。これが鍵の正体です。

EC2におけるログイン認証方法の流れ

  1. ユーザーはEC2インスタンス作成時に1つ以上のキーペアを割り当てます。
    キーペアは事前に作成しておくことも、管理コンソール上で作成することもできます。
  2. AWSは、作成されたインスタンスのログイン情報を、割り当てられたキーペアのパブリックキーで暗号化して保存します。
    ユーザーがインスタンスにログインする際、プライベートキーを使ってAWSに問い合わせます。
  3. AWSは、プライベートキーでログイン情報を復号化し、正しく復号化された場合にはログインを許可します。
    復号化に失敗した場合にはログインを拒否します。
    つまり、AWSにキーペアを事前に登録しておけば、AWSはプライベートキーでログイン情報を復号化し、そのキーペアの持ち主であるかどうかを判断して認証を行います。

実際には...

  • Linuxの場合 => SSHによるログインがすぐに可能になりますが、
  • Windowsの場合 => Administratorパスワードを取得することになります。
    そのため、パスワードの管理や変更にも注意が必要です。
SSHでの確認コマンド

Linuxの場合、SSHによるログインを行うためには、以下のようなコマンドを使用します。

ssh -i <キーペアのパス> <ユーザー名>@<インスタンスのパブリックIPアドレス>

このコマンドでは、<キーペアのパス>にはログインに使用するキーペアのパスを指定します。例えば、デスクトップに保存したmy-key-pair.pemというキーペアを使用する場合は、以下のように指定します。

ssh -i ~/Desktop/my-key-pair.pem ec2-user@<インスタンスのパブリックIPアドレス>

<ユーザー名>には、インスタンスにログインするためのユーザー名を指定します。Amazon Linux 2 AMIではec2-user、Ubuntu AMIではubuntuとなっています。

<インスタンスのパブリックIPアドレス>には、ログインする対象となるインスタンスのパブリックIPアドレスを指定します。これはEC2コンソール上のインスタンスの詳細画面で確認できます。

キーペアの作り方

  1. EC2 > ネットワーク&セキュリティ > キーペア
  2. キーペアの作成ボタン
  3. キーペア名を適当に入れる
  4. キーペアがつくられる
    この時、pem ファイル(プライベートキー)のダウンロードが始まるので、ダウンロードしておく
    pem ファイルの入手チャンスはここしかないので、ここを逃したら、もうこのキーペアのプライベートキーは入手できなくなる。

作成時の画面だが、
AWSのキーペアをCREATEする際に、以下の2つのオプションが表示されます。
(AWSでは、2つのキーペア形式がサポートされています。)
key pair typeとprivate key file formatの選択を行う。

【key pair type】

  • RSA: RSAは、非対称暗号化方式の1つで、AWSで最も一般的に使用される形式です。RSAキーペアは、2048ビットまたは4096ビットの鍵長を持つことができます。

  • EC2: EC2キーペアは、楕円曲線暗号化方式を使用しています。この形式のキーペアは、RSAキーペアよりも小さな鍵長でありながら、同等以上のセキュリティレベルを提供します。

【private key file format】

  • このオプションは、プライベートキーの形式を指定するために使用されます。

  • PEM: PEM形式は、テキスト形式のプライベートキーであり、通常、UNIXベースのシステムで使用されます。PEM形式のプライベートキーは、秘密鍵とパスフレーズを含みます。

  • PPK: PPK形式は、バイナリ形式のプライベートキーであり、Windows用のPuTTY SSHクライアントで使用されます。PPK形式のプライベートキーは、秘密鍵のみを含みます。

sshの仕組み

SSH(Secure Shell)は、ネットワーク上で安全なリモートアクセスを可能にするプロトコル。
SSHを使用すると、リモートサーバーにログインしてコマンドを実行したり、ファイルを転送したりすることができる。

そこはわかってても、どんなことが裏で起こって動いているのか、きになる。笑

SSH接続をするためには、以下の手順が必要。

1. 自分のPCで「秘密鍵」、「公開鍵」を作成
SSH接続をする前に、自分のPCで秘密鍵と公開鍵のペアを作成する。
秘密鍵は自分のPCに保存しておき、公開鍵はリモートサーバーに登録。

2. 接続したいサーバに作成した「公開鍵」を置く
自分のPCで作成した公開鍵を、接続したいサーバに置く。
これにより、サーバは自分の秘密鍵で暗号化されたメッセージを送信してきたクライアントを識別する。

3. PC側からサーバにSSH接続したいと伝える
SSH接続を開始するには、自分のPCからサーバに接続する必要がある。
これは通常、SSHクライアントソフトウェアを使用して行われます。
SSHクライアントは、サーバに接続する前に、接続に必要な情報を要求します。

4. サーバ側で「乱数」を生成
サーバは、接続を確立する前に乱数を生成。この乱数は、接続に使用される暗号キーの生成に必要。

乱数(Random Number):
SSH接続の際に使用される、ランダムに生成された数字のこと。
この乱数は、セキュリティ上の目的で使用され、鍵交換プロトコルや暗号化などで使用。
乱数は、毎回異なる値が生成されるため、予測することは不能。

5. サーバ側で「乱数」と、2の「公開鍵」を使って暗号を作って、暗号をPC側に送る
サーバは、自分の秘密鍵を使用して、乱数とクライアントの公開鍵から暗号キーを生成し、
その暗号キーで暗号化したメッセージをクライアントに送信。

6. 暗号を受け取ったPC側は「秘密鍵」を使って、暗号を複合して「乱数」を取り出す
PCは、自分の秘密鍵を使用して、サーバから受信した暗号メッセージを復号化。
これにより、クライアントが接続に使用するための乱数が取得される。

7. さらにPC側は取り出した「乱数」からハッシュ値を生成しサーバへ送る
PCは、取得した乱数を使用してハッシュ値を生成し、それをサーバに送信。
このハッシュ値は、後で確認するために使用される。

ハッシュ値(Hash Value):
データの特定の形式に変換された値であり、ハッシュ関数を使用して生成。
ハッシュ値は、元のデータから計算することができず、同じデータからは必ず同じ値が生成されるため、
データの整合性の確認に用いられる。

8. サーバ側で「乱数」からハッシュ値を生成
サーバは、自分の乱数を使用して、同じハッシュ値を生成。
これにより、クライアントが送信したハッシュ値とサーバが生成したハッシュ値が一致することが確認される。

9. サーバ側は、PC側から受け取った「ハッシュ値」と、サーバ側で生成した「ハッシュ値」を比較
サーバは、クライアントから受信したハッシュ値と、自分で生成したハッシュ値を比較。
一致していれば、接続が認証され、クライアントはサーバに接続できる。

Discussion