前回に引き続き、SSL関連のエントリです。
AWSのCDNサービスCloudFront、ご利用されている方も多いかと思いますが、CloudFrontにも独自SSLをアップロードして、コンテンツを暗号化することが可能です。
例えば、当サイトのようにWordPressのメディアのアップロード先をS3にして、CloudFrontを利用している場合など、本体(WordPress)の方をSSLで暗号化するのとあわせてCloudFront側の暗号化しないと、ブラウザに表示した際にMixed Contents(SSL暗号化されているコンテンツとされていないコンテンツが混在する状態)となってしまい、ブラウザに正しく表示されないことがあります。
そうなっては困るので、本エントリでは、CloudFrontにSSLをアップロードする方法をまとめておきたいと思います。
まずは、既にSSLのアップロードがどれくらい行われているのか確認してみます。iam-servercertuploadというコマンドを実行しますが、このコマンドがどこにあるのかチェックしておきましょう。
iam-servercertupload: /opt/aws/bin/iam-servercertupload
/opt/aws/bin/の下にありました。
それでは実行してみたいと思います。
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ファイルを作成します。
AWSSecretKey=<シークレットキー>
[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_CREDENTIAL_FILE=/opt/aws/credential-file
環境変数を読み込みなおします。
Credentialファイルも正しく設定されました。
↓
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はこちらのバージョンです。
aws-cli/1.7.13 Python/2.6.9 Linux/3.14.35-28.38.amzn1.x86_64
気を取り直して、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にアップロードしてみましょう。
- -s:証明書の名前
- -k:秘密鍵のファイル(パスフレーズを抜いたやつ)
- -c:中間CA証明書
- -b:SSLの証明書ファイル
- -p:SSLをアップロードする対象のCloudFront
※ /cloudfront/部分は固定
※ /cloudfront/以降は対象のAlternate Domain Names (CNAMEs)にあたる部分
さあ、アップロードされたか確認してみましょう。
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のサービスを選択します。
配信しているDistributionの一覧が表示されますので、その一覧から対象のDistributionを選択するとそのDistributionの詳細が表示されます。
GeneralタブにあるEditボタンをクリックすると該当のDistributionの編集が行えるようになるので、編集画面で確認します。SSL Certificateの「Custom SSL Certificate (stored in AWS IAM):」ラジオボタンのところに、アップロードしたSSLが表示されているのがわかります(static.live-cast.asia_20150519)。
すでに他のSSLが適用されているような場合には、iam-servercertuploadはアップロードしかしませんので、この画面上でSSLを変更して完了です。
これでCloudFrontでもSSLが使用できるようになり、参照する際はhttp、httpsプロトコルはのどちらでもアクセスできるようになりました!
以上、備忘録でした!
今回参考にさせていただいたサイトはこちら。
↓
AWS Cloudfrontを独自証明書でSSL通信したいので、コマンドラインツール「iam-servercertupload 」を使って証明書をアップロードしてみた。
-sの部分はアップロード時に指定した証明書の名称となります。
ご参考までに。
弊社では、GlobalSign クイック認証SSLの取得代行、および、Amazon Web Serviceへの導入作業を代行しています。何かございましたらお気軽にお問い合わせいただければと思います。
お問い合せ | 株式会社ライブキャスト