株式会社ライブキャストロゴ 株式会社ライブキャスト

前回に引き続き、SSL関連のエントリです。

AWSのCDNサービスCloudFront、ご利用されている方も多いかと思いますが、CloudFrontにも独自SSLをアップロードして、コンテンツを暗号化することが可能です。

例えば、当サイトのようにWordPressのメディアのアップロード先をS3にして、CloudFrontを利用している場合など、本体(WordPress)の方をSSLで暗号化するのとあわせてCloudFront側の暗号化しないと、ブラウザに表示した際にMixed Contents(SSL暗号化されているコンテンツとされていないコンテンツが混在する状態)となってしまい、ブラウザに正しく表示されないことがあります。

そうなっては困るので、本エントリでは、CloudFrontにSSLをアップロードする方法をまとめておきたいと思います。

まずは、既にSSLのアップロードがどれくらい行われているのか確認してみます。iam-servercertuploadというコマンドを実行しますが、このコマンドがどこにあるのかチェックしておきましょう。

[root@ip-172-30-0-224 nginx]# whereis iam-servercertupload
iam-servercertupload: /opt/aws/bin/iam-servercertupload

/opt/aws/bin/の下にありました。

それでは実行してみたいと思います。

[root@ip-172-30-0-224 nginx]# iam-servercertlistbypath
Could not load AWS Credential file. Make sure that the environment variable AWS_CREDENTIAL_FILE or command line argument –aws-credential-file is set to a file containing AWS Credentials in the following format. Enter the AWS keys without the < or >
AWSAccessKeyId=<Write your AWS access key ID>
AWSSecretKey=<Write your AWS secret key>

なにやらエラーが出ています。
AWSのCredentialファイルがないよ、と言っているようです。アクセスキーとシークレットキーをファイルに保存して読み込ませないといけないみたいです。

まず、以下の形式でCredentialファイルを作成します。

AWSAccessKeyId=<アクセスキー>
AWSSecretKey=<シークレットキー>
ちなみにcredential-file-path.templateというCredentialファイルのためのテンプレートがありますので、今回はこちらを流用してCredentialファイルを作成しました。

[root@ip-172-30-0-224 aws]# cp credential-file-path.template credential-file
[root@ip-172-30-0-224 aws]# ls -lv
合計 52
drwxr-xr-x 3 root root 4096 2月 27 14:31 amitools
drwxr-xr-x 10 root root 4096 2月 27 14:31 apitools
drwxr-xr-x 2 root root 32768 2月 27 14:30 bin
-rw-r–r– 1 root root 83 3月 20 13:22 credential-file
-rw-r–r– 1 root root 83 9月 10 2013 credential-file-path.template

作成したCredentialファイルを環境変数として.bash_profileに設定します。

●.bash_profileの一例

export AWS_DEFAULT_REGION=ap-northeast-1
export AWS_CREDENTIAL_FILE=/opt/aws/credential-file

環境変数を読み込みなおします。

[root@ip-172-30-0-224 ~]# source .bash_profile

Credentialファイルも正しく設定されました。

[root@ip-172-30-0-224 ~]# set | more
AWS_AUTO_SCALING_HOME=/opt/aws/apitools/as
AWS_CLOUDWATCH_HOME=/opt/aws/apitools/mon
AWS_CREDENTIAL_FILE=/opt/aws/credential-file
AWS_DEFAULT_REGION=ap-northeast-1
AWS_ELB_HOME=/opt/aws/apitools/elb
AWS_IAM_HOME=/opt/aws/apitools/iam
AWS_PATH=/opt/aws
AWS_RDS_HOME=/opt/aws/apitools/rds

ちなみに、今回これを試しているaws-cliはこちらのバージョンです。

[root@ip-172-30-0-224 nginx]# aws –version
aws-cli/1.7.13 Python/2.6.9 Linux/3.14.35-28.38.amzn1.x86_64

気を取り直して、iam-servercertlistbypathの再実行です。

[root@ip-172-30-0-224 aws]# iam-servercertlistbypath
arn:aws:iam::312058653241:server-certificate/static.live-cast.asia_2014
arn:aws:iam::312058653241:server-certificate/static.live-cast.asia_2015
arn:aws:iam::312058653241:server-certificate/ssl.live-cast.asia


それではオプションを指定してSSLをCloudFrontにアップロードしてみましょう。

[root@ip-172-30-0-224 nginx]# iam-servercertupload -s static.live-cast.asia_20150519 -k live-cast.asia_2015_nophrase.key -c dvcacert_v2.cer -b live-cast.asia_2015.crt -p /cloudfront/static.live-cast.asia
  • -s:証明書の名前
  • -k:秘密鍵のファイル(パスフレーズを抜いたやつ)
  • -c:中間CA証明書
  • -b:SSLの証明書ファイル
  • -p:SSLをアップロードする対象のCloudFront

※ /cloudfront/部分は固定
※ /cloudfront/以降は対象のAlternate Domain Names (CNAMEs)にあたる部分

さあ、アップロードされたか確認してみましょう。

[root@ip-172-30-0-224 nginx]# iam-servercertlistbypath
arn:aws:iam::312058653241:server-certificate/static.live-cast.asia_2014
arn:aws:iam::312058653241:server-certificate/static.live-cast.asia_2015
arn:aws:iam::312058653241:server-certificate/static.live-cast.asia_20150519
arn:aws:iam::312058653241:server-certificate/ssl.live-cast.asia

正しくアップロードされていることが確認できました。

アップロードしたSSLはAWS Management Consoleでも確認することができます。-s オプションで指定した名称( static.live-cast.asia_20150519)が表示されているはずです。

AWS Management Consoleにログインしサービス一覧からCloudFrontのサービスを選択します。

cloudfront

配信しているDistributionの一覧が表示されますので、その一覧から対象のDistributionを選択するとそのDistributionの詳細が表示されます。

cloudfrontssl

GeneralタブにあるEditボタンをクリックすると該当のDistributionの編集が行えるようになるので、編集画面で確認します。SSL Certificateの「Custom SSL Certificate (stored in AWS IAM):」ラジオボタンのところに、アップロードしたSSLが表示されているのがわかります(static.live-cast.asia_20150519)。

cloudfrontssl_edit

すでに他のSSLが適用されているような場合には、iam-servercertuploadはアップロードしかしませんので、この画面上でSSLを変更して完了です。

これでCloudFrontでもSSLが使用できるようになり、参照する際はhttp、httpsプロトコルはのどちらでもアクセスできるようになりました!

以上、備忘録でした!

今回参考にさせていただいたサイトはこちら。

AWS Cloudfrontを独自証明書でSSL通信したいので、コマンドラインツール「iam-servercertupload 」を使って証明書をアップロードしてみた。

アップロードしたSSLを削除するのは以下のコマンドになります。

iam-servercertdel -s static.live-cast.asia_20150519

-sの部分はアップロード時に指定した証明書の名称となります。
ご参考までに。

弊社では、GlobalSign クイック認証SSLの取得代行、および、Amazon Web Serviceへの導入作業を代行しています。何かございましたらお気軽にお問い合わせいただければと思います。
お問い合せ | 株式会社ライブキャスト