本文へジャンプ

AWSのELBに組み込んだ証明書を削除&拡張する方法

Posted by Masato Okajima

Web制作を生業としているプロダクションは、それほど規模の大きくない&アクセス数の少ないWebサイトを数多くホスティングしていることが多い。
1サイト毎に1台のWebサーバで運用できるといいのだが、「規模が小さい&アクセスが少ない」ということは、クライアント企業からいただける予算も大きくない。
つまり、それほどサーバの構築・運用に費用をかけることは出来なくなる。

そういった場合には、VirtualHostという手法を使って、1台のウェブサーバーに複数のウェブサイトを相乗りさせるのが常套手段となっている。
もちろん、VirtualHostのデメリットもある。

  • 複数のウェブサイトが1台のサーバに載っている以上、そのサイトのどこかにアクセスが集中した場合、他のサイトにも影響する。
  • サーバ上の様々なアップデートの影響が全サイトに影響したりする。(アップデートが一回で済むという場合はメリット。w)

などだ。

だったら、「AWSのEC2のMicroインスタンスを複数使えば安いじゃん!」という声もある。
それも正解。
ただ、WordPressとかMovable Typeとか使うとなると、管理画面の動作や処理の速度を考えると、Microのスペックでは非力なのだ。

だったら、「管理画面を使うときだけ、Instance Typeをアップグレードすれば良いじゃん!」という声も分かる。
それも正解。
でも、それはめんどくさいよね。。。管理画面ってけっこうな頻度で触るし。
それ以前に、Instance Typeを変更するときにはインスタンスを止めなきゃいけないし。。。

そこで、「ある程度のスペックのインスタンスに複数サイトを載せた方が、快適。」という結論になる。
ひとつのインスタンスに複数のWebサイトが設定されていて、WPやMTが複数稼働していても、それを利用するタイミングがかぶることは少ない。
さらにミドルスペック以上のインスタンスであれば、瞬間風速に処理やアクセスが増加してもある程度は耐えられるし。

で、複数のWebサイトを載せると、例えば「お問い合わせフォーム」のためだけにSSLが必要だったりする。
そして、SSLを使いたいWebサイトが複数存在する場合に問題が生じる。

それはなぜか。

SSL証明書は、"サーバ側のIPアドレスに対して、SSL証明書が一つ"という決まりになっているからだ。
(追記:Apache2.2.12以降は、SNIにサポートしたため、1つのIPで、複数SSLサイトをホスティングできるようになった。が、ブラウザは限定される。)

ふつうにEC2にElastic IPsを複数追加して、EC2自体にSSL証明書を複数組み込んでいるヒトも多いと思う。
実際、ELBを使うよりその方が安いし。
ただ、そうすると、オートスケール(アクセスに応じてEC2のInstance数を増やす)の設定時やメンテナンス時にサービスを停止する必要があるので、これを回避するためにEC2でインスタンスを複数立てて、ELBにぶら下げておくのが基本。(先日対応された「Cross-Zone Load Balancing」を使えば、冗長化にもなる。)

ELBとは、AWSのサービスのひとつで、「Elastic Load Balancer」の略。
その名の通り、ロードバランサー(負荷分散装置)。

通常は、複数のEC2をぶら下げたりして大量のアクセスを捌くことに使うのだが、ELBにSSL証明書を組み込み、https通信を処理してもらうためのSSL Terminationとしても、とても優秀。 AWSのELBの設定画面から、443→80として、通信ポートを設定し、証明書を組み込み、対象となるEC2をぶら下げる設定をするだけだ。

さぁーて、ここからが前置きより短い本題。

ELBは、AWSの1アカウント辺り、20個までという制限が付いている。(東京リージョンの場合)
だったら、SSL対応サイトが20個まで立てれるじゃん!と思わせつつ、SSL証明書の数は10個までという制限がついている。
これ、最初はそれほど気にならないんだが、SSLって更新があったりして、使わないSSLの数も含めると、けっこうすぐに上限になる。

で、解決策としては、

  • 10個の制限を拡張してもらう
  • 使わないSSLを削除する

のいずれかになる。
(そもそも10個以上のSSL対応サイトを立ち上げたいヒトは、前者しか選択肢が無い。)

まず、前者の10個制限を拡張する件だが、これは実は簡単。
AWS サポートセンター ※AWSアカウントが必要です
ここからAmazonさまに依頼をするだけ。どういう判断基準なのかは分からないが、上記のURLから依頼したら数時間で対応してもらえた。(平日の夕方依頼したら、夜にはお返事が!)

この問い合わせ時に注意したいのは、ELB自体の数を増やしてもらうのか、ELBの組み込むSSL証明書の数を増やしてもらうのか、しっかり明記すること。

もしAmazonさまに却下されても、知りません!
僕は却下されたことが無いので。笑

ただ、サーバ管理者は性格が細かいヒトが多いので(偏見。w)、どちらにしても使わないSSLが管理画面に残ってしまうのが気持ち悪いと思います。
なので、後者の「使わないSSLを削除する」という方法が欲しくなりますが、しかーし、なぜかAWSの管理画面には、SSLを追加する方法あるのに、編集も削除も方法が無い。

まぁ、そのうち出来るようになるんだろうが、いますぐ消したい!という方は、EC2にSSHでログインして、以下のコマンドを叩いてください。

「IAM Command Line Toolkit」インストール

#cd /home/ec2-user
#mkdir /home/ec2-user/src
#mkdir /home/ec2-user/bin
#cd /home/ec2-user/src
#wget http://awsiammedia.s3.amazonaws.com/public/tools/cli/latest/IAMCli.zip
#unzip IAMCli.zip
#mv IAMCli-1.5.0 ../bin/IAMCli

環境変数を設定

#echo 'export AWS_IAM_HOME=/home/ec2-user/bin/IAMCli' >> ~/.bashrc
#echo 'export PATH=$PATH:$JAVA_HOME/bin:$EC2_HOME/bin:$AWS_RDS_HOME/bin:$AWS_ELB_HOME/bin:$AWS_IAM_HOME/bin' >> ~/.bashrc

認証キーの作成&編集

#cd /home/ec2-user/bin/IAMCli/
#cp aws-credential.template aws-credential
#vi aws-credential
----
AWSAccessKeyId=(アルファベット大文字の羅列)
AWSSecretKey=(アルファベット大文字、小文字、数字、記号の羅列)
※AWSの管理画面から探してください。
----

AWSセキュリティ証明をデフォルトでファイル指定

#cd /home/ec2-user/
#echo 'export AWS_CREDENTIAL_FILE=$AWS_IAM_HOME/aws-credential' >> ~/.bashrc
#source /home/ec2-user/.bashrc

ELBに組み込まれた証明書の一覧

#iam-servercertlistbypath
arn:aws:iam::xxxxxxxxxxxx:server-certificate/hoge1
arn:aws:iam::xxxxxxxxxxxx:server-certificate/hoge2
arn:aws:iam::xxxxxxxxxxxx:server-certificate/hoge3
arn:aws:iam::xxxxxxxxxxxx:server-certificate/hoge4
arn:aws:iam::xxxxxxxxxxxx:server-certificate/hoge5

証明書「hoge1」を削除したいとき

#iam-servercertdel -s hoge1

ちなみにMONSTER DIVEでは、

  • 物理的に専用サーバ環境
  • AWSを使った専用環境
  • 当社の複数のEC2&ELB&RDSを使ったオートスケール環境

など、クライアントのご要望やサイトの特性に応じた環境をご用意しております。

「なんかよく分からないサーバ費用を払っている」「サーバ会社に払っている費用が無駄に高い気がする」「どうなってるのか分からん」などなど、サーバやインフラがブラックボックス化していて委託先にまかせっきり!という方は、是非、当社にご相談ください。
分かりやすーーく、ご説明した上で、透明性の高い費用を算出しますので。w

では、メリークリスマス&良いお年を。

参考URL: http://okochang.hatenablog.jp/entry/2013/04/06/135805
http://ameblo.jp/kawa-s/entry-11430342971.html

Recent Entries
MD EVENT REPORT
What's Hot?