サーバー証明書をCLIでアップロードする

記事タイトルとURLをコピーする

こんにちは、技術1課の多田です。

皆さん、普段AWS CLI(以下、CLI)を利用されているでしょうか?
私は、AWSマネジメントコンソールとCLIを併用しているのですが、今回はサーバー証明書をCLIでアップロードする記事になります。
尚、今回動作確認を行ったのは、『
Amazon Linux AMI 2016.03.0』になります。
 

以下、目次です。

  1. 証明書アップロードの手段について
  2. CLIのセットアップ
  3. 既存のサーバー証明書の確認
  4. 不要な証明書を削除する
  5. サーバー証明書のアップロード
  6. まとめ

証明書アップロードの手段について

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ボタンを押下して設定の解除を実施して下さい。

sslcertificate_1

その後、以下のコマンドを実行して既存の証明書を削除して下さい。

$ 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実践入門』にも詳しく記載されておりますので、ぜひご一読ください!