こんにちは、与儀です。
ELB(Elastic Load Balancing)にSSL証明書を配置して、HTTPS ロードバランサーとして利用することで、ELB → EC2間はHTTP通信のみとして利用することができます。
EC2コンソールまたは、AWS CLIを用いてSSL証明書をアップロードしてHTTPS リスナーの追加をすることができますが、アップロードされたSSL証明書を削除する方法は、現状AWS CLIからしかできないため、今回は、このSSL証明書アップロードと削除の作業をAWS CLIより実行してみたいと思います。
今回、下記のIAMポリシーを持ったIAMユーザを使用します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iam:DeleteServerCertificate",
"iam:ListServerCertificates",
"iam:UploadServerCertificate"
],
"Resource": [
"*"
]
}
]
}
また、下記のようにHTTPリスナーが有効になっているELBに対して、HTTPSリスナーを追加します。
AWS CLI よりアップロードする。
IAM へのサーバー証明書のアップロード
↑の公式ドキュメントを参考にして、サーバ証明書ファイル、秘密鍵ファイル、中間証明書ファイルをそれぞれ、my-crt.pem、my-key.pem、my-chain.pemとして下記のように配置して、upload-server-certificateコマンドで証明書名を「test-ssl-upload-01」としてアップロードします。
[root@test testdir]# ls my-chain.pem my-crt.pem my-key.pem [root@test testdir]# aws iam upload-server-certificate --server-certificate-name test-ssl-upload-01 --certificate-body file://my -crt.pem --private-key file://my-key.pem --certificate-chain file://my-chain.pem { "ServerCertificateMetadata": { "ServerCertificateId": "ASCAIMIHK332C6DK4OZCU", "ServerCertificateName": "test-ssl-upload-01", "Expiration": "2016-12-15T23:59:59Z", "Path": "/", "Arn": "arn:aws:iam::アカウントID:server-certificate/test-ssl-upload-01", "UploadDate": "2016-03-20T10:36:46.994Z" } } [root@test testdir]# |
実際にEC2コンソールで確認してみます。
変更を選択。
既存の証明書を選択すると、証明書名に「test-ssl-upload-01」がアップロードされていることがわかります。そのまま「保存」を選択します。
「保存」を選択。
「閉じる」を選択。
以上で、HTTPSリスナーの追加が完了しました。
ところで、SSL証明書をいくつアップロードできるか試してみましょう。確か以前は10個までだったはず、と思って調べてみたところ、
IAM エンティティにおける制限およびオブジェクト
より、「AWS アカウントに格納されるサーバー証明書: 20」ということで上限は20個らしいので、試しに、upload-server-certificateコマンドで証明書名を「test-ssl-upload-02」~「test-ssl-upload-20」までやってみました。
すると下記のように確かに、20個までアップロードできていることが確認できました。
そして、21個目を試すと下記のようにエラーとなりました。
[root@test testdir]# aws iam upload-server-certificate --server-certificate-name test-ssl-upload-21 --certificate-body file://my-crt.pem --private-key file://my-key.pem --certificate-chain file://my-chain.pem A client error (LimitExceeded) occurred when calling the UploadServerCertificate operation: Cannot exceed quota for ServerCertificatesPerAccount: 20 [root@test testdir]# |
では次に、この20個いっぱいになったサーバ証明書を削除してみます。
AWS CLI より削除する。
IAM からのサーバー証明書の削除
を参考に、delete-server-certificateコマンドで、証明書名「test-ssl-upload-20」を指定して削除してみます。
[root@test testdir]# aws iam delete-server-certificate --server-certificate-name test-ssl-upload-20 [root@test testdir]# |
実際にEC2コンソールで確認すると、削除されていることがわかります。
試しに、「test-ssl-upload-01」の削除を試みてみると、
[root@test testdir]# aws iam delete-server-certificate --server-certificate-name test-ssl-upload-01 A client error (DeleteConflict) occurred when calling the DeleteServerCertificate operation: Certificate: ASCAIMIHK332C6DK4OZCU is currently in use by arn:aws:elasticloadbalancing:ap-northeast-1:アカウントID:loadbalancer/ssl-test. Please remove it first before deleting it from IAM. [root@test testdir]# |
ということで、ELBにて利用中の証明書については削除できないようにエラーとなるようです。本番環境のELBで利用中のSSL証明書を誤って削除することも防げて安心ですね。
ELBに対してACMの利用が東京リージョンで利用可能となればこのようなアップロード作業も不要となるので、待ち遠しいですね。
以上です。