こんにちは、技術1課の多田です。
皆さん、普段AWS CLI(以下、CLI)を利用されているでしょうか?
私は、AWSマネジメントコンソールとCLIを併用しているのですが、今回はサーバー証明書をCLIでアップロードする記事になります。
尚、今回動作確認を行ったのは、『Amazon Linux AMI 2016.03.0』になります。
以下、目次です。
- 証明書アップロードの手段について
- CLIのセットアップ
- 既存のサーバー証明書の確認
- 不要な証明書を削除する
- サーバー証明書のアップロード
- まとめ
証明書アップロードの手段について
SSL証明書をアップロードする方法には2種類あります。
1つは、AWSマネジメントコンソールからアップロードする方法です。
もう1つは、CLIを利用してアップロードする方法で、こちらのアップロード方法について今回フォーカスします。
尚、予めCLIを導入していることを前提としているため、こちらを参考に導入してください。
また、以下のコマンドを実行して導入したバージョンを確認できます。
$ aws --version
aws-cli/1.10.8 Python/2.7.10 Linux/4.4.5-15.26.amzn1.x86_64 botocore/1.3.30
今回、動作を確認したAmazon Linuxでは、デフォルトでCLIが導入されておりました。
CLIのセットアップ
CLIセットアップの時は、以下のコマンドを実行し、各種必要な情報を入力します。
$ aws configure AWS Access Key ID [None]: アクセスキーID AWS Secret Access Key [None]: シークレットアクセスキー Default region name [None]: 利用するリージョン Default output format [None]: json
CLIセットアップが完了しましたら、サーバー証明書をアップロードを実行します。
既存のサーバー証明書の確認
以下のコマンドを実行して、既存のサーバー証明書を確認します。
証明書が1件存在する場合の実行結果は、次の通りです。
$ aws iam list-server-certificates { "ServerCertificateMetadataList": [ { "ServerCertificateId": "*********************", "ServerCertificateName": "20160417-TestCertification", "Expiration": "2017-04-17T09:40:42Z", "Path": "/", "Arn": "arn:aws:iam::************:server-certificate/20160417-TestCertification", "UploadDate": "2016-04-17T09:49:40Z" } ] }
証明書が存在しない場合の実行結果は次の通りです。
$ aws iam list-server-certificates { "ServerCertificateMetadataList": [] }
不要な証明書を削除する
以下のコマンドを実行することで、アップロードした証明書を削除することが可能です。
尚、削除を実施する場合、既にサービスで証明書を紐付けしているのであれば、その紐付けを解除する必要があります。
例えば、Elastic Load Balancing(以下、ELB)の場合、Listenersタブ > Editボタン > 該当の証明書が登録されている行の「×」ボタンを押下 > Saveボタンを押下して設定の解除を実施して下さい。
その後、以下のコマンドを実行して既存の証明書を削除して下さい。
$ aws iam delete-server-certificate --server-certificate-name 削除したい証明書名(ex.20160417-TestCertification)
サーバー証明書のアップロード
以下の手順を実行して、サーバー証明書をアップロードします。
まずは、アップロードするファイルの確認をします。
$ ls example.key # 秘密鍵 example.cert # 証明書 example_inter.cert # 中間CA証明書
以下のコマンドを実行して、『20160417-example』という名前の証明書をアップロードします。
$ aws iam upload-server-certificate --server-certificate-name 20160417-example --private-key file://example.key --certificate-body file://example.cert --certificate-chain file://example_inter.cert { "ServerCertificateMetadata": { "ServerCertificateId": "*********************", "ServerCertificateName": "20160417-example", "Expiration": "2017-04-17T09:40:42Z", "Path": "/", "Arn": "arn:aws:iam::************:server-certificate/20160417-example", "UploadDate": "2016-04-17T10:38:18.900Z" } }
尚、ELBであれば、上記のコマンドを実行すれば、AWSマネジメントコンソールの証明書一覧から使用できますが、
Amazon CloudFront(以下、CloudFront)については、上記のコマンドに以下のような「--path」オプションを付与する必要がありますので、ご注意下さい。
また、「--path」オプションで指定するファイルパスの最後は、スラッシュ(/)で閉じなければいけないこともご注意ください。
詳しくは、こちらをご覧ください(英語のドキュメントになります)。
$ aws iam upload-server-certificate --server-certificate-name example --private-key file://example.key --certificate-body file://example.cert --certificate-chain file://example_inter.cert --path /cloudfront/適当な名前(ex.example-sslcert)/
以上の作業でAWSにサーバー証明書がアップロードされているので、ELBやCloudFrontでアップロードした証明書を使ったHTTPSアクセスが設定可能になります。
まとめ
今回は、サーバー証明書のアップロードをCLIで実現する方法をご紹介しました。
サーバーのローカルで証明書を作成して、CLI実行環境があればすぐに証明書をアップロードできるので、作業効率化になります。
また、AWSマネジメントコンソールからアップロードすることもできますが、証明書アップロードした時のログを残す意味でもCLIを利用するのも良いと言えます。
今回、紹介した手順は、弊社エンジニアも寄稿しております、『Amazon Web Services実践入門』にも詳しく記載されておりますので、ぜひご一読ください!