クラウドサービス上のシステム構成
クラウドサービスにはSaaSやPaaS、IaaSなどがありますが、この記事ではIaaSを中心としたシステムを構成する要素について説明していきます。(LinuCレベル2 主題:2.13.3)
クラウドはインターネットに接続して利用することを前提とした各種サービスのことを指します。特徴としては、負荷の増減に応じて柔軟にリソースを追加したり、構成を変更しなおしたりできます。
ただし、クラウドサービスには、SaaS、PaaS、IaaSなど、さまざまな利用形態があります。
SaaS(Software as a Service[1])
Saasは、従来パッケージ製品として提供されていたソフトウェアをインターネット経由でサービスとして提供し、利用する形態のことです。SalesforceやG Suiteなどが広く使用されています。
PaaS(Platform as a Service[2])
PaaSは、ソフトウェアが動作するためのハードウェアやOSなどの一式をインターネット上で提供する形態のことです。各サービスの仕様に沿ってソフトウェアを開発することで、OSやミドルウェアなどのインストールや設定をしなくても、アプリケーションの開発、提供ができるのが特徴です。Google App EngineやHerokuなどが広く使用されています。
IaaS(Infrastructure as a Service[3])
IaaSは、仮想サーバーやストレージ、ネットワークデバイスなどのインフラを、インターネット上のサービスとして提供する利用形態のことです。ユーザは必要に応じて、自由にシステムを構成するためのサーバーやデバイスのスペックや容量を選択できるのが特徴です。Google Compute EngineやAmazon Elastic Cloud(EC2)など、パブリッククラウドと呼ばれるサービスがIaaSに分類されます。
このセクションでは、IaaSを中心としたシステムを構成する要素について説明していきます。
クラウドストレージの種別
クラウドサーバーで使用できるストレージには、以下のようなものがあります。
エフェメラルストレージ
インスタンスの起動時だけ使用可能なストレージです。AWSなどではインスタンスストレージと呼ばれます。
仮想マシンのインスタンスを停止するとデータが消えて(蒸発する、揮発する、とも言います)しまうという特徴があります。
しかし、高速・広帯域(ディスクI/Oが高速)で、追加料金がかからない(AWS EC2の場合)ので、
- バッチ処理やバックアップ作業などの一時的な作業領域
- キャッシュ
- テンポラリな(一時的な)ログの保持
- データダンプを一時的に保持する
などの用途に使います。
永続化ストレージ
高速・広帯域な揮発性のインスタンスストレージに対して、インスタンスを停止、起動してもデータが消えない(蒸発しない、揮発しない)タイプのストレージは、永続化(パーシステントな)ストレージと呼ばれます。
物理的なハードディスクなどブロックデバイスのように、初期化してファイルシステムを構築し、仮想マシンにマウントすることができます。
同じネットワーク上の複数の仮想マシンにマウントしたり、逆に一つの仮想マシンに複数ボリュームをマウントしたりすることができます。
クラウドのネットワークの種別
クラウド上で仮想マシンや(仮想)ネットワークデバイスにIPアドレスを割り当てる場合には、固定IPアドレスを割り当てる方法と、複数の仮想マシンのインスタンスでIPアドレスを共有する方法があります。
固定IPアドレス
固定でIPアドレスを割り当てます。パブリックIPアドレスを設定すれば外部からアクセスできます。また、ファイアウォールの内側でプライベートなIPアドレスを割り当てることも可能です。
フローティングIPアドレス
高可用化クラスタで冗長化したシステムを構成する場合などに使います。まず、アクティブなノードにあるIPアドレスを割り当てます。もしもアクティブなノードで障害が発生したら、クラスタ制御ソフトなどを使い、そのIPアドレスをスタンバイしているノードに割り当て直してからアクティブにします。その際、元のアクティブノードのIPアドレスは解放します。
このようにクラスタを構成するノードでIPアドレスをシェアし、動的に割り当てを変更するタイプのIPアドレスを「フローティングIPアドレス」と呼びます。フローティングIPアドレスはクラウド環境だけでなく、ベアメタル環境でも使用することがあります。
クラウドのネットワークセキュリティ
テナントネットワーク
多くのクラウドサービスではユーザーは他のネットワークから独立した仮想ネットワークを構築します。この独立したネットワークは「テナントネットワーク」と呼ばれます。また、仮想のエッジデバイス(外部と通信するノード)でルーティングを設定することで異なるテナントネットワーク間で通信をすることも可能です。
ファイアウォール(セキュリティグループ)
セキュリティグループとは、クラウドサービスで設定できるファイアウォール機能のことです。セキュリティグループを構成すると、仮想マシンへのアクセスや外部からサーバープロセスへの通信などを制御することができます。
例えば、
- 特定のIPアドレスからのSSH接続のリクエストを許可して、管理者権限ユーザーがsshdにアクセスし、ログイン処理を行えるようにする
- 任意のクライアントからWebサーバー(httpd)への80番、443番、指定したポート番号を用いたアクセスを許可する
などの設定が可能です。
パブリッククラウドサービスは、オンプレミスのサーバーや社内システムとは違い、常に第三者からのポートスキャンなどの脅威にさらされます。
不用意にインバウンド(外から内)のアクセスを許可していると、不用意にログインされてしまったり、連携している社内システムに侵入されたりするリスクが発生します。そこで、必要以上にアクセスを許可しないなど、セキュリティグループの設定には細心の注意が必要です。
認証の強化
先に説明したようにパブリッククラウド環境では第三者がポートスキャンをして、接続を試みるリスクがあります。そこで、オンプレミスではID・パスワード認証をしていても、クラウドサーバーについては公開鍵認証方式を用いる方がセキュリティ強度を高めることができます。ユーザーがキーを作成し、登録する手間はかかりますが、サイバー攻撃からシステムを防御するためには非常に有効な手段となりますので、できる限り公開鍵認証方式が使えるように設定をしましょう。
マシンイメージのセキュリティ
クラウドサービスでは、既存のサーバーイメージを元に仮想マシンのインスタンスを生成して、手動や構成管理ツールを用いて、短時間に新しいサーバーの増設ができる利便性があります。
しかし、マスターとなるサーバーイメージにセキュリティホールが存在した場合には、そのイメージから新規に追加したインスタンスにも脆弱性が引き継がれてしまいます。 そこで、既存イメージをそのまま使いまわすのではなく、セキュリティパッチなどを適用して安全なイメージを用いて仮想マシンインスタンスの追加ができるように継続的にメンテナンスする必要があります。
クラウドを支える主要な技術やサービス
以下では、クラウドを支える主要な技術やサービスについて説明します。
オブジェクトストレージ
データの保存に特化したサービスはオブジェクトストレージと呼ばれています。
例えば、Amazon S3では「バケット」という単位でデータオブジェクトを格納する領域を設定し、各種データの保存や取り出しを行えます。例えば、OSのイメージ、バックアップデータから、個別のテキストファイル、画像データなど、さまざまなサイズ、フォーマットのデータを格納することができます。
各データにはURLでアクセスすることが可能で、
- バケット名がaws-s3-bucket1
- データのキーが/photos/image1.jpg
である場合には、
https://aws-s3-bucket1.s3.amazonaws.com/photos/image1.jpg
のようにURLを用いて参照し、アプリケーションから呼び出して使用することが可能となります。
メッセージングシステム(キュー)
メッセージングシステムは、異なるシステムやアプリケーション間で非同期に処理を連携する際に使われる仕組みです。
各アプリケーションはメッセージングプロバイダと呼ばれるサービスにメッセージを送信します。メッセージングプロバイダは、コンシューマーと呼ばれるメッセージを受信するシステムやアプリケーションに対して、受け取ったメッセージを送信します。
メッセージにはアプリケーション固有のデータは含めません。例えば、在庫商品の情報、人事情報などアプリケーションに依存しないデータがやりとりされます。
メッセージングシステムを使用することで、異なるアプリケーション間での処理を非同期に連携することが可能になります。
オートスケーラー
パブリッククラウドサービスでは、システムの負荷の増減状況に基づいて、自動的に仮想マシンインスタンスの増設や削除を行う「自動(オート)スケーリング」機能が提供されています。
オートスケールを行うインスタンス群は、事前に設定したスケーリングポリシー(方針)に基づいて、自動的にインスタンスの追加・削除を実行します。
負荷が大きくなった場合にインスタンスを追加してスケールアウト(台数を増やす)処理は「アップスケーリング」、負荷が少なくなった場合にインスタンスを削除する処理は「ダウンスケーリング」と呼ばれています。
オートスケーリングのポリシーには、以下のようなものがあります。
- 平均CPU使用率
例えば、インスタンスあたりのCPU平均使用率が70%以下になるようにインスタンス数を増減させて自動調整します。 - 1秒あたりのHTTP/HTTPSリクエスト数
例えば、1秒あたり1000アクセスを処理できるようにインスタンス数の調整を行います。 - グループ全体での指標
各インスタンスではなく、インスタンスグループ全体でのリソース消費やCPU負荷、処理能力などの指標を設定します。
執筆者紹介
・太田 俊哉
・井上 博樹
このドキュメントは、LinuCレベル2の学習用の教材から抜粋して作成されたものです。教材全体は以下のPDFファイルをご覧ください。
LinuCレベル2学習教材
[1] サース
[2] パース
[3] アイアース・イァース