概要
AWS の管理画面から既存の ELB に対して, 新規の SSL 証明書を適用しようとすると画像のようなエラーになりました.
ELB は HTTP 通信のみ許可した状態です.
どこにハマったかというと, AWS の管理画面から新規の SSL 証明書を追加して, それを既存の ELB に適用できるようになっているのに, そこでエラーになってしまうというところです.
解決方法
今回参考にしたのはこちらです.
AWSのロードバランサー(ELB)にサーバー証明書(SSL)を適用する
結局 AWS の管理画面から新規の SSL 証明書を追加してそれを ELB に適用できるようになってはいるものの, コマンドラインからでないとできないというオチでした.
以下にざっくりやったことを書いておきます.
- AWS の管理画面から IAM を作成し, 自分専用のアカウントを作る(ルート権限のアカウントで操作できるならそのアカウントでも良いはず)
- awscli をインストールする
- 作成した IAM のアカウントの Access Key Id と Secret Access Key を使って $ aws configure を叩いて ~/.aws/config を作る(設定が間違ってなければこれでコマンドラインから AWS への操作ができるようになる)
- ここで IAM を作成した AWS の管理画面に戻り, 作成したアカウントに対して IAMFullAccess のポリシーを追加(アタッチ)する
- アップロードコマンドを実行する
$ aws iam upload-server-certificate --server-certificate-name my-server-cert --certificate-body file://~/Desktop/my-certificate.pem --private-key file://~/Desktop/my-private-key.pem --certificate-chain file://~/Desktop/my-certificate-chain.pem
# 成功すると以下のような json が返ってくる
{
"ServerCertificateMetadata": {
"ServerCertificateId": "xxxxxxxxxxxxxxxxxxx",
"ServerCertificateName": "xxxxxxxxxxxxxxxxxxx",
"Expiration": "2017-0x-xxT14:59:00Z",
"Path": "/",
"Arn": "arn:aws:iam::xxxxxxxxxxxxxxxxxxx:server-certificate/xxxxxxxxxxxxxxxxxxx",
"UploadDate": "2016-0x-xxT10:52:40.968Z"
}
}
アップロードコマンドでの注意点
- my-server-cert の部分は何を入れたら良いのか悩んだけど, アップロードする SSL 証明書の名前になるので適当に入れる
- file:// をプレフィックスに付けること(付けないと MalformedCertificate みたいなエラーになる)
環境変数に注意
ここまで来てまだ AccessDenied が出る場合は, zsh とか bash に設定してる AWS のキーが IAM とは違うものになっていたりするかもです(自分はそれでした)
関連
公式ドキュメントを見てると, SSL 証明書のアップロードはコマンドラインからしかできないような感じですね
署名証明書をアップロードする
同じようにハマっている人のブログ
AWS ELBに証明書をインストールする際にハマったこと
この辺見てると AWS の管理画面からでもできそうなんだけどなー
【初心者向け】ELBにSSL証明書をインストールする