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




投稿日:

目的はタイトルの通りです。Cloudfrontでの配信をSSLでも実施します。方式は最近追加されたらしい「SNI 独自 SSL」方式を利用します。なお今回は検証にお手軽だった、AWS Amazonlinux を利用しました。

※AWS CLIツールでの手順を以下に書いています。こちらの方がシンプルです。 
AWSにSSL証明書を、AWS CLIツールを利用してアップロード・削除の作業や管理をする方法 | 田舎に住みたいエンジニアの日記

【コマンドの有無チェック】

[html]# whereis iam-servercertupload
iam-servercertupload: /opt/aws/bin/iam-servercertupload[/html]

Amazonlinux だと最初からコマンドは入っています。ちなみに、AWSアカウントの設定をしていないとツールは利用出来ないので、まずは証明書の一覧を取得してみます。



【AWSの連携確認】

[html]# 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>
[/html]

AWSアカウントと紐づいていませんでした。まずは、アカウントと紐づけてIAMのコマンドツールを利用可能にします。



・確認
[html]# aws –version
aws-cli/0.9.3 Python/2.6.8 Linux/3.4.57-48.42.amzn1.i686[/html]



・環境変数設定

[html]# export AWS_DEFAULT_REGION=ap-northeast-1
# export AWS_CREDENTIAL_FILE=/opt/aws/credential-file[/html]

(※ 静的に追加したい場合は、環境変数としてbashとかで設定しておきます。)

[html]# cp -rp /opt/aws/credential-file-path.template /opt/aws/credential-file[/html]

[html]# vi /opt/aws/credential-file

以下のキーを記述します。(このキーは、AWSコンソール上で取得しておきます。)

AWSAccessKeyId=xxxxxxxxxxxxxxxx
AWSSecretKey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

[/html]



・結果確認

例 何か、ツールコマンドで確認します。
[html]# aws ec2 describe-instances[/html]

ec2を立ち上げていればインスタンス情報が返ってきます。
返ってこればうまくAWSアカウントと連携しています。



【SSL証明書のアップロード】

・登録している鍵の確認
[html]# iam-servercertlistbypath[/html]
何も登録していないので、ないですね。

・SSL証明書を登録
事前に証明書の鍵をアップロードしておきます。必要なのは、秘密鍵、公開鍵、証明書チェーンの3点です。アップロード後、以下のオプション設定をして、コマンド実行。

[html]iam-servercertupload

-s <証明書の名前>
-k <秘密鍵のファイル(pem形式でOK)>
-c <証明書チェーンのファイル(pem形式でOK)>
-b <公開鍵のファイル(pem形式でOK)>
-p/cloudfront/www.xxx.net -v ※ www.xxx.net がCloudfrontで設定した「Alternate Domain Names(CNAMEs)」であること。
[/html]

・実行

[html]# iam-servercertupload -s xxx.net -k /usr/local/key/test_key.pem -c /usr/local/key/test_ica.pem -b /usr/local/key/test_crt.pem -p /cloudfront/www.xxx.net -v

arn:aws:iam::1908322323605:server-certificate/cloudfront/xxx.net/www.xxx.net
ASCAIGFQSxxxxxxxxxxxx[/html]

上記のように、鍵が登録されれば成功。駄目な場合はエラーメッセージが出力されるのでそれに従って解決。

・確認

[html]# iam-servercertlistbypath[/html]
登録した鍵が表示されれば、OK。

ちなみに、オプションは以下になります。
[html]# iam-servercertupload –help
"–help" is not a valid option
Uploads a new server certificate under your account.
iam-servercertupload [options…] arguments…
–aws-credential-file CREDENTIALFILE : path to the file containing your AWS cr
edentials
–client-config-file CLIENTCONFIGFILE : path to the file containing client conf
igurations
–url SERVICEENDPOINT : endpoint URL to be used when making the
service call
-b CERTBODYFILE : the pem encoded public key certificate
file
-c CERTCHAINFILE : the pem encoded certificate chain file
-d (–debug) : enable debug logging
-h : print out this message
-k PRIVATEKEYFILE : the pem encoded private key file
-p PATH : the path of the server certificate, def
aults to /
-s SERVERCERTNAME : the name of the server certificate
-v VERBOSE : print out the newly created server cert
ificate’s arn and guid
[/html]



[amazonjs asin=”B00UWCYRZK” locale=”JP” title=”Amazon Web Services パターン別構築・運用ガイド  一番大切な知識と技術が身につく”]

【参考】

Using an HTTPS Connection to Access Your Objects – Amazon CloudFront

Amazon Web Services ブログ: 【AWS発表】 Amazon CloudFrontが独自SSL証明書とルートドメインホスティングをサポート

AWS CLIを使ってTagの値のみを取得する – funasaki memo

CentOS6にIAMのコマンドラインツールキットをセットアップする « サーバーワークス エンジニアブログ

CloudFrontの独自ドメインSSL証明書対応を試してみた | Developers.IO








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

  1. Guest

    運営者様

    AWSのCloudfrontによるSSLインストールに挑戦している門屋と申します。
    貴サイトを参考に何度も挑戦しているのですがうまくいきません。

    1:credential-fileを書き換えているにも関わらず、
    AWSAccessKeyId=
    AWSSecretKey=”

    のエラーメッセージが出る。

    2:TeraTermからSSH SCPでファイルをアップロードしているがFile not foundになる。
    (そもそもファイルがきちんとアップロード出来ているのかどうか自分でもよく分からない)

    3:IAMのIDとパスワードをcredential-fileに入力してみたが結果は変わらない。

    長くなりましたが以上です。
    今回初めてAWSに挑戦しているのですが、最後の最後でハマってしまいました。

    何卒ご教示頂きたくお願い申し上げます。
    失礼致します。

    返信
  2. ybbonet

    コメントありがとうございます。気づくのが遅くなりました。

    頂いたコメントで気になるのは、2のscpでファイルをアップロードできているかどうかです。この確認は確実にするしかありません。credential-fileを書き換えていたのなら読み込まれるはずですし。

    加えて設定を進めていく上でも、可能であればssh でサーバにログインして作業することをお勧めします。

    作業がうまく進む事を期待しております。

    返信
  3. ピンバック: Developer's blog | cloudfrontssl

  4. ピンバック: Developer's blog | to-apply-ssl-to-cloudfront

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください