Upload
etsuji-nakai
View
4.928
Download
2
Embed Size (px)
Citation preview
中井悦司Twitter @enakai00
オープンクラウド・キャンパス
Eucalyptusに学ぶIaaSクラウドを支えるインフラ技術
Open Cloud Campus2
IaaSクラウドを支えるインフラ技術
自己紹介
好評発売中
中井悦司(なかいえつじ)– Twitter @enakai00
日々の仕事
– Senior Solution Architect and
Cloud Evangelist at Red Hat K.K.
企業システムでオープンソースの活用を希望される
お客様を全力でご支援させていただきます。
昔とった杵柄– 素粒子論の研究(超弦理論とか)
– 予備校講師(物理担当)
– インフラエンジニア(Unix/Linux専門)
Open Cloud Campus3
IaaSクラウドを支えるインフラ技術
目次
クラウドの概要とEucalyptus
マシンイメージとVMインスタンス起動プロセス
クラウドネットワークとLinuxのネットワーク機能
Elasitic Block Storage(EBS)とLinuxのiSCSI機能
クラウドセキュリティと公開鍵認証
まとめ
(付録)GlusterFSについて
Open Cloud Campus4
IaaSクラウドを支えるインフラ技術
クラウドの概要とEucalyptus
Open Cloud Campus5
IaaSクラウドを支えるインフラ技術
企業向けのクラウドに求められる5つの鍵
5つの鍵 内容 Linux/OSSの優位性
柔軟なサービス お客様の必要に応じて自由にリソースの追加、変更ができる環境を提供
Linux/OSSは、ライセンスの制約に縛られずにリソースの追加が可能
適切なサービスレベル お客様が必要とするサービスレベルとそれに見合った価格のサービスを提供
Linux/OSSベースのソリューションでサービス管理機能の実装が可能
可搬性のある環境 お客様のビジネス要件に応じて、様々なクラウドサービスの選択・移行が可能な環境を実現
Linux/OSSにより、特定ベンダに依存しないオープンスタンダード技術が活用可能
セキュリティと コンプライアンス
社内データセンターと同等の安全で管理された環境を実現
企業システムに求められるセキュリティ品質を満たすOSとしての実績を持つLinux
パートナーエコシステム 複数の企業が連携してクラウドサービスを提供する環境を確立
Linux/OSSは、クラウドサービス提供企業の共通基盤技術としてのデファクト・スタンダード
(出典)Linux and Commercial Software: Combining to Support the Cloud Environment http://www.dbta.com/downloads/Hurwitz-IBM_Linux_Cloud.pdf
さまざまな技術やサービスが連携するクラウド環境では、標準技術としてのLinux/OSSの価値が発揮されます。
Open Cloud Campus6
IaaSクラウドを支えるインフラ技術
利用者とサービス内容でクラウドを分類
複数企業のユーザーが共同利用
アプリケーション環境を提供 = SaaS (エンドユーザーがすぐに使えるアプリケーション・サービス)
OS + Middleware 環境を提供 = PaaS (プログラマがアプリケーションを開発できる環境)
OS 環境を提供 = IaaS (管理者がシステムを構築・運用できる環境)
Privateクラウド Publicクラウド
企業内のユーザーのみが利用
Eucalyptus Amazon EC2/S3
Open Cloud Campus7
IaaSクラウドを支えるインフラ技術
パブリック ネットワーク
クライアント
クラスタコントローラ
ストレージコントローラ
ノードコントローラ
Warlus
仮想マシン イメージ
EBSイメージ
プライベート ネットワーク
iptables(NAT/パケットフィルタリング)
VLAN / 仮想ブリッジ
ネットワーク技術
X.509 証明書
SSH 鍵認証
認証技術
iSCSI
ディスクイメージ
ストレージ技術
ノードコントローラ
・・・・
サーバ仮想化(KVM/Xen)
カーネル起動プロセス
仮想化技術 OS 基礎技術
クラウドコントローラ
さまざまなインフラ技術の 集大成がクラウドなのです。
Eucalyptusを実現するインフラ技術
API プログラミング
自動化技術
Open Cloud Campus8
IaaSクラウドを支えるインフラ技術
マシンイメージとVMインスタンス起動プロセス
Open Cloud Campus9
IaaSクラウドを支えるインフラ技術
パブリック ネットワーク
クライアント
クラスタコントローラ
ストレージコントローラ
ノードコントローラ
Warlus
仮想マシン イメージ
EBSイメージ
プライベート ネットワーク
iptables(NAT/パケットフィルタリング)
VLAN / 仮想ブリッジ
ネットワーク技術
X.509 証明書
SSH 鍵認証
認証技術
iSCSI
ディスクイメージ
ストレージ技術
ノードコントローラ
・・・・
サーバ仮想化(KVM/Xen)
カーネル起動プロセス
仮想化技術 OS 基礎技術
クラウドコントローラ
さまざまなインフラ技術の 集大成がクラウドなのです。
Eucalyptusを実現するインフラ技術
API プログラミング
自動化技術
Open Cloud Campus10
IaaSクラウドを支えるインフラ技術
VMインスタンスの起動に必要な3種類のイメージ
ユーザ・プロセス
システムコール
ユーザ空間
カーネル空間(Linuxカーネル)カーネル
イメージ
マシンイメージ
リソース割り当て
デバイスドライバ
(仮想)ハードウェア
ラムディスクイメージ
Linux起動時に必要な デバイスドライバを提供
ディスクアクセス
(仮想)ディスク
EucalyptusがVMインスタンスを起動する際は、マシンイメージ(OS領域のディスクイメージ)とは別に、カーネルイメージとラムディスクイメージをWalrusからダウンロードします。
– マシンイメージは、VMインスタンスに接続される仮想ディスクの中身そのもの。– カーネルイメージは、メモリ(カーネル空間)に読み込まれるLinuxカーネルのバイナリコード。– ラムディスクイメージは、カーネルの起動に必要な初期ラムディスクを提供。
Open Cloud Campus11
IaaSクラウドを支えるインフラ技術
Linuxカーネルの起動プロセス 物理サーバ環境や通常のサーバ仮想化環境では、Linuxカーネル(vmlinuz-*)と初期ラムディ
スク(initrd-*、initramfs-*)は、/bootファイルシステムに保存されています。
ブートローダ(GRUB)はこれらをメモリに読み込んだ後に、Linuxカーネルを起動します。– ブートローダはBIOSの機能で/bootファイルシステムにアクセスします。BIOSの機能制限によ
り、/bootファイルシステムのディスク上の配置に制限が出たりします。(いわゆる「XXGBの壁」)
Linuxカーネルは、メモリを利用したラムディスク領域をマウントして、初期ラムディスクの内容を展開した後に、そこに含まれる「initスクリプト」を実行します。
– initスクリプトは、ディスクアクセスに必要なデバイスドライバをロードして、OS領域(ルートファイルシステム)をマウント後、最初のプロセス/sbin/initを実行します。
物理メモリ
ラムディスク領域
・デバイスドライバ・initスクリプト
ブートローダ (GRUB)
/bootファイルシステム
起動ディスク
Linuxカーネル
初期ラムディスク
ブートローダが読み込み
ラムディスク領域に展開
※参考資料プロのためのLinuxシステム構築・運用技術「6.4.1 Linuxのブートプロセス」
Linuxカーネル
初期ラムディスク
Open Cloud Campus12
IaaSクラウドを支えるインフラ技術
Eucalyptusにおけるイメージ管理
カーネルイメージと初期ラムディスクは、原理的にはOS領域(ルートファイルシステム)とは独立して提供されるものです。
– 例えばPXEブート環境では、tftpでカーネルと初期ラムディスクをメモリに読み込んで起動します。– その昔、BIOSからアクセスできないディスクにLinuxをインストールした環境では、フロッピーディ
スクにカーネルイメージと初期ラムディスクを入れて起動していた事も・・・。
Eucalyptusでは、マシンイメージ(ルートファイルシステム)とカーネルイメージ、ラムディスクイメージを明示的に分離することで、不適切なカーネルの使用に伴う問題の発生を防止しています。
カーネルイメージ、ラムディスクイメージは管理者のみが新規登録可能。– 管理者は使用する仮想化ハイパーバイザに適合したイメージを事前に用意する。
一般ユーザはマシンイメージのみを編集、新規登録可能。– 一般ユーザには、ルートファイルシステムに導入されたアプリケーションが重要。
Open Cloud Campus13
IaaSクラウドを支えるインフラ技術
仮想ディスクイメージの構成
ノードコントローラは、次の手順でVMインスタンスを起動します。– 必要なマシンイメージ、カーネルイメージ、ラムディスクイメージをWalrusからダウンロード– 指定サイズの仮想ディスクイメージ・ファイルを新規作成して、3つのパーティションを構成
• 第1パーティションは、マシンイメージの内容をコピーしてルートファイルシステムにする• 第2パーティションは空のファイルシステムを作成して、エフェメラル領域にする• 第3パーティションはSwap領域としてフォーマットする• 第1パーティションをループマウントして、/root/.ssh/authorized_keysにユーザの公開鍵を登録する
– 仮想ディスクイメージ・ファイルをVMインスタンスの仮想ディスクとして接続– カーネルイメージとラムディスクイメージを使用してVMインスタンスを起動
新規仮想ディスクイメージ
OS領域 エフェメラル領域 Swap領域
マシンイメージをコピー
空のファイルシステムを作成
Swap領域としてフォーマット
マシンイメージ
VMインスタンスに接続
Open Cloud Campus14
IaaSクラウドを支えるインフラ技術
(参考)ループマウントの利用方法
仮想ディスクイメージは、ループバックデバイス/dev/loopXに紐付けることで、通常のブロックデバイス(/dev/sdX)と同様にマウントすることが可能です。
– 例:isoイメージファイルをループマウント• loopオプションを指定すると自動的にループバックデバイスに紐付けられます。
– 例:パーティションを含むディスクイメージをマウント• losetupコマンドで紐付けた後に、kpartxコマンドで各パーティションを/dev/mapper/loopXpYにマッピングし
ます。
volume01.img
物理ディスク
仮想ディスクイメージ
/dev/sdX
/dev/loopX
ループバック・デバイス
# mount -o loop hoge.iso /mnt/hoge# df | grep loop/dev/loop0 3351190 3351190 0 100% /mnt/hoge
# losetup -fv volume01.imgLoop デバイス は /dev/loop0 です# kpartx -av /dev/loop0add map loop0p1 (253:0): 0 208782 linear /dev/loop0 63add map loop0p2 (253:1): 0 8193150 linear /dev/loop0 208845add map loop0p3 (253:2): 0 1044225 linear /dev/loop0 8401995# mount /dev/mapper/loop0p2 /mnt/image# ls -l /mnt/image/
合計 184drwxr-xr-x. 2 root root 4096 2 月 14 11:56 2011 bindrwxr-xr-x. 2 root root 4096 2 月 14 09:57 2011 bootdrwxr-xr-x. 2 root root 4096 2 月 14 09:57 2011 devdrwxr-xr-x. 74 root root 4096 3 月 4 08:56 2011 etc(以下略)# umount /mnt/image# kpartx -d /dev/loop0# losetup -d /dev/loop0
Open Cloud Campus15
IaaSクラウドを支えるインフラ技術
クラウドネットワークとLinuxのネットワーク機能
Open Cloud Campus16
IaaSクラウドを支えるインフラ技術
パブリック ネットワーク
クライアント
クラスタコントローラ
ストレージコントローラ
ノードコントローラ
Warlus
仮想マシン イメージ
EBSイメージ
プライベート ネットワーク
iptables(NAT/パケットフィルタリング)
VLAN / 仮想ブリッジ
ネットワーク技術
X.509 証明書
SSH 鍵認証
認証技術
iSCSI
ディスクイメージ
ストレージ技術
ノードコントローラ
・・・・
サーバ仮想化(KVM/Xen)
カーネル起動プロセス
仮想化技術 OS 基礎技術
クラウドコントローラ
さまざまなインフラ技術の 集大成がクラウドなのです。
Eucalyptusを実現するインフラ技術
API プログラミング
自動化技術
Open Cloud Campus17
IaaSクラウドを支えるインフラ技術
Eucalyptusのネットワーク構成
Managedモードネットワークでは、各VMインスタンスはプライベートIPとパブリックIPがアサインされます。
– プライベートIPはVMインスタンス間の通信に使用– パブリックIPは外部からの接続に使用
• パブリックIPをアサインしないことで、外部から接続できないVMインスタンスを作成することも可能
VMインスタンスは、どれか1つのセキュリティグループに属します。
– 同一のセキュリティグループのVMインスタンスのみプライベートネットワーク通信が可能→ LinuxのVLAN機能でネットワークを分離
– セキュリティグループごとに、パブリックネットワークからのアクセスを制限(指定のアドレスから、指定のポートに対してのみ接続を許可)→ Linuxのパケットフィルタリング機能(iptables)を利用
パブリック ネットワーク
クライアント
・・・・
クラスタコントローラ
ノードコントローラ ノードコントローラ
プライベートネットワーク用ネットワークスイッチ
Open Cloud Campus18
IaaSクラウドを支えるインフラ技術
基本的なVLANの仕組み
VLANとは、L2スイッチ内部に複数のネットワークセグメントを作成する機能です。– ポートごとに、内部でどのVLANに接続するかを指定するのが「ポートVLAN」です。– 「ポートVLAN」に設定されたポートに接続する機器は、VLAN用の特別な設定は不要です。
スイッチ間をカスケード接続する際は、接続するポートを「タグVLAN」に設定します。– このポートを出入りするパケットには、どのVLANに行くのかを示す「VLANタグ」が付けられます。
1
ポートVLAN100
VLAN100 VLAN200
2 3
ポートVLAN200
4 5
スイッチ#1
1
VLAN100 VLAN200
2 3 4 5
スイッチ#2
この部分には、VLANタグ(VLAN100、もしくはVLAN200)付きのパケットが流れる
ポートVLAN100 ポートVLAN200
タグVLAN タグVLAN※参考資料プロのためのLinuxシステム構築・運用技術「4.1.1 IPネットワークの基礎」
Open Cloud Campus19
IaaSクラウドを支えるインフラ技術
サーバ仮想化環境でのVLANの利用
サーバ仮想化環境では、VLANを利用することで、仮想マシンごとに異なるサブネットに接続することができます。
– ホストLinux上でVLANタグの処理を行うので、仮想マシン内部(ゲストOS)ではVLANの存在を意識する必要がありません。
※参考資料
プロのためのLinuxシステム・ネットワーク管理技術「5.3.3 VLANデバイスのブリッジ接続」
eth0.100 eth0.200
br100 br200
タグ付きパケット
タグ無しパケット
仮想マシン#1 仮想マシン#2
ホストLinux
物理サーバ
eth0
仮想ブリッジ
VLANデバイス
1
ポートVLAN100
VLAN100 VLAN200
2 3
ポートVLAN200
4 5
スイッチ#1
タグVLAN
Open Cloud Campus20
IaaSクラウドを支えるインフラ技術
VLANによるプライベートネットワークの構成
VLAN11
2 3 4
プライベート・ネットワーク用 ネットワーク・スイッチ
タグVLAN
ノードコントローラ#1
VLAN10
ノードコントローラ#2
VMインスタンス#1
VMインスタンス#2
eth0.11
eucabr11
VMインスタンス#3
VMインスタンス#4
eth0.10
eucabr10
eth0
VMインスタンス#5
VMインスタンス#6
eth0.11
eucabr11
VMインスタンス#7
VMインスタンス#8
eth0.10
eucabr10
eth0
Eucalyptusでは、セキュリティグループごとに異なるVLANを用意することで、プライベートネットワークを分離します。
– プライベートネットワーク用スイッチのポートは「タグVLAN」に設定する必要があります。
1 5
タグVLAN
Open Cloud Campus21
IaaSクラウドを支えるインフラ技術
NATによるパブリックネットワーク接続 VMインスタンスに付与されたパブリックIPは、実際にはクラスタコントローラの物理NICに
アサインされます。– クラスタコントローラがパブリックネットワークから受信したパケットをDNATでプライベートIPに
変換して、VMインスタンスに転送します。逆に、VMインスタンスからパブリックネットワークに送信したパケットは、SNATでパブリックIPに変換して送出します。
• VMインスタンスは、クラスタコントローラの仮想ブリッジのIPアドレス(この例では10.1.2.1)をデフォルトゲートウェイに指定します。
– セキュリティグループごとのパケットフィルタリングもこの部分で行います。
ノードコントローラ
VMインスタンス#1
VMインスタンス#2
eth1.10
eucabr1010.1.2.1
192.168.32.20192.168.32.21
SNAT
DNAT
プライベートネットワーク用ネットワークスイッチ
クラスタコントローラ
パブリック ネットワーク
10.1.2.2
10.1.2.3
eth0
eth0
eth0.10
eucabr10パケットフィルタリング
eth1
Open Cloud Campus22
IaaSクラウドを支えるインフラ技術
パケット転送におけるチェーンとテーブル
iptablesでNATやパケットフィルタリングの設定を行う際は、チェーンとテーブルを指定する必要があります。
– パケット転送時のNATとフィルタリングの設定は、次のチェーンとテーブルで行います。• FORWARDチェーンのfilterテーブル:パケットフィルタリング処理• PREROUTINGチェーンのnatテーブル:DNAT処理• POSTROUTINGチェーンのnatテーブル:SNAT処理
ネットワーク#1ネットワーク#2
natテーブル(DNAT処理)
filterテーブル(パケットフィルタリング処理)
natテーブル(SNAT処理)
パケット受信パケット送信
PREROUTINGチェーン
FORWARDチェーン
POSTROUTINGチェーン
※参考資料プロのためのLinuxシステム・ネットワーク管理技術「2.4.1 チェーンとテーブルの全体像」
Open Cloud Campus23
IaaSクラウドを支えるインフラ技術
Eucalyptusのiptables自動設定例
# iptables -t nat -nL PREROUTINGChain PREROUTING (policy ACCEPT)target prot opt source destinationDNAT tcp -- 10.1.0.0/16 169.254.169.254 tcp dpt:80 to:169.254.169.254:8773DNAT all -- 0.0.0.0/0 192.168.32.20 to:10.1.2.2DNAT all -- 0.0.0.0/0 192.168.32.21 to:10.1.2.3
# iptables -t nat -nL POSTROUTINGChain POSTROUTING (policy ACCEPT)target prot opt source destinationSNAT all -- 10.1.2.2 !10.1.0.0/16 to:192.168.32.20SNAT all -- 10.1.2.3 !10.1.0.0/16 to:192.168.32.21MASQUERADE all -- !127.0.0.0/8 !10.1.0.0/16
# iptables -nL FORWARDChain FORWARD (policy DROP)target prot opt source destinationACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate ESTABLISHEDACCEPT all -- 0.0.0.0/0 !10.1.0.0/16ACCEPT all -- 10.1.2.0/27 10.1.2.0/27admin-default all -- 0.0.0.0/0 0.0.0.0/0
# iptables -nL admin-defaultChain admin-default (1 references)target prot opt source destinationACCEPT tcp -- 0.0.0.0/0 10.1.2.0/27 tcp dpt:22
DNATの設定
SNATの設定
パケットフィルタリングの設定(adminユーザのdefaultセキュリティグループ)
これらは、クラスタコントローラ上のiptablesで設定されます。
Open Cloud Campus24
IaaSクラウドを支えるインフラ技術
Elasitic Block Storage(EBS)と LinuxのiSCSI機能
Open Cloud Campus25
IaaSクラウドを支えるインフラ技術
パブリック ネットワーク
クライアント
クラスタコントローラ
ストレージコントローラ
ノードコントローラ
Warlus
仮想マシン イメージ
EBSイメージ
プライベート ネットワーク
iptables(NAT/パケットフィルタリング)
VLAN / 仮想ブリッジ
ネットワーク技術
X.509 証明書
SSH 鍵認証
認証技術
iSCSI
ディスクイメージ
ストレージ技術
ノードコントローラ
・・・・
サーバ仮想化(KVM/Xen)
カーネル起動プロセス
仮想化技術 OS 基礎技術
クラウドコントローラ
さまざまなインフラ技術の 集大成がクラウドなのです。
Eucalyptusを実現するインフラ技術
API プログラミング
自動化技術
Open Cloud Campus26
IaaSクラウドを支えるインフラ技術
Elastic Block Storageの仕組み
Elastic Block Storage(EBS)は、ストレージコントローラ上の仮想ディスクイメージをネットワーク経由でVMインスタンスの仮想ディスクとして割り当てたものです。
– EBSの実体はストレージコントローラ上に存在するので、VMインスタンスを停止してもEBSは削除されません。新しいVMインスタンスに接続して再利用できます。
– ネットワーク経由で書き込みするので、エフェメラル領域よりIOパフォーマンスは劣ります。
一方、エフェメラル領域を含むデフォルトの仮想ディスクの実体は、ノードコントローラ上の仮想ディスクイメージで、VMインスタンスを停止すると破棄されます。
デフォルトの仮想ディスク
ノードコントローラ
Walrus
VM インスタンス
仮想ディスクイメージダウンロード
ストレージコントローラ
iSCSI接続仮想ディスクイメージ
EBS
マシンイメージ
Open Cloud Campus27
IaaSクラウドを支えるインフラ技術
EBS接続の詳細
EBSボリュームは次の手順で構成されます。– ストレージコントローラに新規仮想ディスクイメージを作成した後、これを擬似的な物理ボリュー
ム(PV)として、論理ボリューム(LV)を作成する。これをiSCSI LUNとして公開する。• 仮想ディスクイメージを直接iSCSI LUNとして公開することも可能ですが、LVMスナップショットを利用するた
めに、あえて、一度、論理ボリュームを作成してから公開しています。
– ノードコントローラの外部接続ディスクとして、iSCSI LUNを接続した後に、ノードコントローラ上のVMインスタンスに仮想ディスクとして割り当てる。
iSCSI接続には、Linuxが提供するターゲットとイニシエータの機能を利用します。– 一般に、iSCSI LUNを提供する機器を「ターゲット」、iSCSI LUNを利用する機器を「イニシエー
タ」と呼びます。
イニシエータ
ストレージコントローラ
ターゲット
仮想ディスクイメージ
論理ボリューム
ノードコントローラ
※参考資料プロのためのLinuxシステム構築・運用技術「3.3.2 iSCSI」
iSCSI接続LVMスナップショット
EBSスナップショット
Open Cloud Campus28
IaaSクラウドを支えるインフラ技術
(参考)EBSと同等のiSCSI接続を実現する手順
# yum install scsi-target-utils
# dd if=/dev/zero of=/opt/volume02.img bs=1M count=576# losetup -fv volume02.imgLoopデバイス は /dev/loop0 です# pvcreate /dev/loop0 Physical volume "/dev/loop0" successfully created# vgcreate vg01 /dev/loop0 Volume group "vg01" successfully created# lvcreate -L 512M -n lv01 vg01 Logical volume "lv01" created
# cat <<EOF >> /etc/tgt/targets.conf<target iqn.2011-06.com.example.server01:tgt01> backing-store /dev/vg01/lv01</target>EOF
# service tgtd start
ターゲット側の設定
下記は、EBSと同等のiSCSI接続を手動で行う手順の例です。– ターゲット側では、仮想ディスクイメージ・ファイルをループバック・デバイスに紐付けることに
より物理ボリュームとして扱っています。
# yum install iscsi-initiator-utils# service iscsi start# iscsiadm -m discovery --type sendtargets --portal <ターゲットのIPアドレス># service iscsi restart
イニシエータ側の設定
Open Cloud Campus29
IaaSクラウドを支えるインフラ技術
クラウドセキュリティと公開鍵認証
Open Cloud Campus30
IaaSクラウドを支えるインフラ技術
パブリック ネットワーク
クライアント
クラスタコントローラ
ストレージコントローラ
ノードコントローラ
Warlus
仮想マシン イメージ
EBSイメージ
プライベート ネットワーク
iptables(NAT/パケットフィルタリング)
VLAN / 仮想ブリッジ
ネットワーク技術
X.509 証明書
SSH 鍵認証
認証技術
iSCSI
ディスクイメージ
ストレージ技術
ノードコントローラ
・・・・
サーバ仮想化(KVM/Xen)
カーネル起動プロセス
仮想化技術 OS 基礎技術
クラウドコントローラ
さまざまなインフラ技術の 集大成がクラウドなのです。
Eucalyptusを実現するインフラ技術
API プログラミング
自動化技術
Open Cloud Campus31
IaaSクラウドを支えるインフラ技術
鍵ペアによる認証の基礎
ネットワーク上の認証には、ユーザ認証とサーバ認証があります。– ユーザ認証:接続を許可するサーバから見て、本物のユーザであることを確認する。– サーバ認証:接続するユーザから見て、本物のサーバであることを確認する。
これらの認証には、主に非対称鍵暗号を利用した方法が用いられます。– 非対称鍵暗号では、暗号化に使う鍵と復号化に使う鍵が異なります。– 非対称鍵暗号では、鍵の所有者だけが保管するべき秘密鍵と、万人に配布しても構わない公開鍵を
利用します。秘密鍵は誤って他人の手に渡らないように管理する必要があります。• 下図は、事前に配布した公開鍵で暗号化したメッセージを送ってもらう例です。このメッセージは、秘密鍵を持
つ自分だけが復号化して読むことができます。
秘密鍵
公開鍵
公開鍵
Aさんにもらった公開鍵で暗号化して送るよ
僕の秘密鍵がないと誰にも復号化できないから安心だ
Aさん
Open Cloud Campus32
IaaSクラウドを支えるインフラ技術
Eucalyptus環境で使用する鍵ペアの例
Eucalyptusの利用者は、次のような場面で自分だけの秘密鍵を入手します。これらの秘密鍵に対応する公開鍵はクラウドコントローラに保存されます。
– Eucalyptusユーザを作成した際に、Web管理画面からユーザ証明書をダウンロード(ユーザ証明書の中に秘密鍵が含まれる。)
– SSH接続用の鍵ペアを作成した際に、秘密鍵ファイルをクライアントに保存
ユーザがEucalptusのSOAP APIを使用する際、ユーザ証明書に含まれる秘密鍵を利用して、ユーザ認証が行われます。
– 詳細は次ページを参照
ユーザがVMインスタンスにSSH接続する際、事前に作成した秘密鍵を利用して、ユーザ認証が行われます。
– 対応する公開鍵は、ノードコントローラがクラウドコントローラから入手して起動するVMインスタンス内に保存します。
Open Cloud Campus33
IaaSクラウドを支えるインフラ技術
ユーザA公開鍵ユーザA秘密鍵
ユーザAの証明書
暗号化
ハッシュ値ハッシュ値
復号化
リクエストメッセージ
ハッシュ値
比較
ユーザ情報データベース
リクエストメッセージと暗号化ハッシュ値(署名)を管理サーバに送付
ハッシュ値計算
ハッシュ値計算
クライアントEucalyptus管理サーバ(クラウドコントローラ)
ユーザ証明書の鍵ペアによるSOAP APIユーザ認証の例
クライアントは、リクエストメッセージのハッシュ値を秘密鍵で暗号化して送ります。サーバは、対応する公開鍵で復号化して正しいハッシュ値であることを確認します。
– ユーザAの公開鍵で復号化できる暗号を生成できるのは、対応する秘密鍵を持ったユーザAだけなので、メッセージの送信元が本物のユーザAであることが分かります。
– メッセージの暗号化ハッシュ値を添付することを「メッセージに署名する」と言います。メッセージが改竄されるとハッシュ値が合わなくなるので、メッセージ改竄を防止する効果もあります。
リクエストメッセージ
※実際の処理内容を簡略化して説明しています。
Open Cloud Campus34
IaaSクラウドを支えるインフラ技術
ユーザASSH 公開鍵
ユーザASSH 秘密鍵
復号化
乱数乱数
暗号化
ハッシュ値
ハッシュ値計算
SSH クライアントVM インスタンス ハッシュ値
ハッシュ値計算
比較
鍵ペアによるSSHユーザ認証
公開鍵認証でSSH接続する際は、次の流れでユーザ認証が行われます。– SSH接続を受け付けたサーバ(SSHデーモン)は、乱数を発生してユーザの公開鍵で暗号化したもの
をクライアント(SSHクライアント)に送信します。– クライアントは対応する秘密鍵で復号化して、そのハッシュ値を返答します。– サーバは、元の乱数のハッシュ値を計算して、クライアントの返答と一致することを確認します。
※参考資料プロのためのLinuxシステム構築・運用技術「2.3.3 SSHの利用方法」
VMインスタンス起動時にノードコントローラが保存
Open Cloud Campus35
IaaSクラウドを支えるインフラ技術
サーバ証明書秘密鍵
サーバ証明書公開鍵
暗号化
乱数乱数
復号化
ハッシュ値
ハッシュ値計算
SSH クライアントVM インスタンス ハッシュ値
ハッシュ値計算
比較
鍵ペアによるSSHサーバ認証
SSH接続の際は、ユーザから見て接続先のサーバが本物であることを確認する、サーバ認証も行われます。
– クライアントはサーバからサーバ証明書の公開鍵を受け取って保存します。– クライアントは乱数をサーバの公開鍵で暗号化してサーバに送り、サーバは対応する秘密鍵で復号
化して、そのハッシュ値を返送します。– クライアントは元の乱数のハッシュ値を計算して、サーバの返答と一致することを確認します。
※参考資料プロのためのLinuxシステム構築・運用技術「2.3.3 SSHの利用方法」
初回接続時にダウンロード(known_hostsに保存)
Open Cloud Campus36
IaaSクラウドを支えるインフラ技術
SSHサーバ認証に伴う注意点
新しいサーバに初めて接続する際は、サーバ証明書の受け入れ確認メッセージが表示される場合があります。
以前に接続したことのあるサーバで、前回と異なる公開鍵を受け取った場合、偽者のサーバの可能性があるためにクライアントは接続を拒否します。
– 何らかの理由で、公開鍵が変更されたことがわかっている場合は、~/.ssh/known_hostsの該当のエントリを削除して、再度、SSH接続します。
# ssh root@server01The authenticity of host 'server01 (XXX.XXX.XXX.XXX)' can't be established.RSA key fingerprint is 7c:e6:a3:78:a6:54:a8:4b:f2:87:0b:d5:5d:66:9c:d9.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added 'server01' (RSA) to the list of known hosts.
# ssh root@server01@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!Someone could be eavesdropping on you right now (man-in-the-middle attack)!It is also possible that the RSA host key has just been changed.The fingerprint for the RSA key sent by the remote host ise3:d4:87:e2:5b:34:21:8b:7b:40:7a:41:93:91:06:d0.Please contact your system administrator.Add correct host key in /root/.ssh/known_hosts to get rid of this message.Offending key in /root/.ssh/known_hosts:1RSA host key for server01 has changed and you have requested strict checking.Host key verification failed.
新しいサーバ証明書の 受け入れ確認メッセージ
サーバ証明書が前回と異なる 場合の警告メッセージ
Open Cloud Campus37
IaaSクラウドを支えるインフラ技術
まとめ
Open Cloud Campus38
IaaSクラウドを支えるインフラ技術
Eucalyptusを実現するインフラ技術
パブリック ネットワーク
クライアント
クラスタコントローラ
ストレージコントローラ
ノードコントローラ
Warlus
仮想マシン イメージ
EBSイメージ
プライベート ネットワーク
iptables(NAT/パケットフィルタリング)
VLAN / 仮想ブリッジ
ネットワーク技術
X.509 証明書
SSH 鍵認証
認証技術
iSCSI
ディスクイメージ
ストレージ技術
ノードコントローラ
・・・・
サーバ仮想化(KVM/Xen)
カーネル起動プロセス
仮想化技術 OS 基礎技術
クラウドコントローラ
さまざまなインフラ技術の 集大成がクラウドなのです。
API プログラミング
自動化技術
Open Cloud Campus39
IaaSクラウドを支えるインフラ技術
IaaSクラウドインフラは、『単純なものを組み合わせて 複雑なものを創り上げていく』と言うUnix/Linuxの思想にとてもよく適合する仕組みです。
まずは個々の基礎技術を根本から理解して、その上で、『これらをどのように組み合わせれば最適なクラウドインフラが実現できるのか』というクラウドアーキテクチャの追求を行うことが大切です。
まとめ
Open Cloud Campus40
IaaSクラウドを支えるインフラ技術
(付録)GlusterFSについて
Open Cloud Campus41
IaaSクラウドを支えるインフラ技術
GlusterFSとは
コモディティ・ハードウェアを利用して、スケールアウト型の分散ファイルシステムを構築するソフトウェア
元々は、Lawrence Livermore National LabsのHPC(High Performance Computing)クラスタで使用するために開発された分散ファイルシステム
石油・ガスなどの資源開発企業からの要望で、大規模ストレージ・ソリューションとしてGluster社が製品化、オープンソースとして開発を継続
Red Hatは、クラウド向けのストレージ・ソリューションに戦略的に投資を行うという判断の下、2011年にGluster社を買収
今後は、Amazon S3互換API、Hadoop MapReduce API(HDFSの代替)、 OpenStack SWIFT互換APIなどのAPIを実装予定※ Red Hatによる買収前のGluster社による開発意向表明であり、Red Hatとしての計画は未定です。
Open Cloud Campus42
IaaSクラウドを支えるインフラ技術
GlusterFSのアーキテクチャ
分散ストレージを構成する各ノードの通常のファイルシステムをバックエンドデバイスとして使用します。
– GlusterFSに保存したファイルの実体は、どこかのノードのファイルシステムに保存されます。
ファイル名のハッシュ計算で保存するノードを決定します。– 各ファイルの保存ノードの情報を別途、どこかにメタデータとして保存しておく必要がありません。
file01 file02 file03
・・・ GlusterFSクラスタ
file01, file02, file03
GlusterFSクライアント
クライアントからは1つのファイルシステムに見える
実際には各ノードのファイルシステムに分散して保存されている
ボリューム
Open Cloud Campus43
IaaSクラウドを支えるインフラ技術
GlusterFSの利用手順
GlusterFSが提供する、クライアントからマウント可能な仮想ファイルシステムを「ボリューム」と呼びます。次の手順でボリュームを作成して利用します。
– GlusterFSクラスタの各ノードに「ブリック」と呼ばれるディレクトリを用意します。– 各ノードが使用するブリックを指定して、ボリュームを作成します。– GlusterFSクライアントは、任意の1つのノードとボリューム名を指定して、ボリュームをマウント
して使用します。• どのノードを指定してもその後の動作に変わりはありません。実際のデータのやり取りは、ハッシュ計算に基づ
いて、該当ファイルを保存するノードと行われます。• マウントに使用するプロトコルは、GlusterFS独自プロトコル、もしくはNFSプロトコルが利用可能です。• GlusterFSクラスタを構成するノード自身の上でマウントして使用することもできます。
各ノードに複数のブリックを用意して、複数のボリュームを作成することもできます。
各ノードの複数のブリックを使用するボリュームを構成することもできます。–各ノードが複数のローカルディスクを持つ場合、ディスクごとにブリックを分けること
で、ディスクI/Oの負荷分散が実現できます。
同じファイルを複数のブリックに保存する「レプリケーション構成」、1つのファイルを一定サイズで分割して複数のブリックに保存する「ストライピング構成」なども可能です。
Open Cloud Campus44
IaaSクラウドを支えるインフラ技術
/brick01
/brick02
/brick03
/brick04
/brick01
/brick02
/brick03
/brick04
/brick01
/brick02
/brick03
/brick04
ボリュームの構成例
/brick01
/brick02
/brick03
/brick04
GlusterFSクラスタ
ファイル単位で各ブリックに分散保存(1つのファイルはどれか1つのブリックに存在)
node01-node02、node03-node04でそれぞれレプリケーション
1つのファイルを各ブリックに分散保存
レプリケーションレプリケーション
ストライピング
レプリケーションレプリケーション
ストライピング
レプリケーションとストライピングの組み合わせ
node01 node02 node03 node04
中井悦司Twitter @enakai00
オープンクラウド・キャンパス
これからもクラウドを支えるインフラ技術を学びましょう