IAM でサーバー証明書を管理する
ウェブサイトまたは AWS のアプリケーションへの HTTPS 接続を有効にするには、SSL/TLS サーバー証明書が必要です。AWS Certificate Manager (ACM) によってサポートされているリージョンの証明書では、ACM を使用して、サーバー証明書をプロビジョン、管理、およびデプロイすることをお勧めします。サポートされていないリージョンでは、IAM を Certificate Manager として使用する必要があります。ACM がサポートするリージョンについては、「AWS 全般のリファレンス」の「AWS Certificate Manager エンドポイントとクォータ」を参照してください。
重要
ACM は、サーバー証明書をプロビジョン、管理、デプロイするための推奨ツールです。ACM を使用すると、証明書をリクエストしたり、既存の ACM または外部証明書を AWS リソースにデプロイしたりできます。ACM で提供された証明書は無料で自動的に更新されます。サポートされているリージョンでは、ACM を使用して、コンソールまたはプログラムでサーバー証明書を管理できます。ACM の使用の詳細については、AWS Certificate Manager ユーザーガイドを参照してください。ACM 証明書のリクエストの詳細については、AWS Certificate Manager ユーザーガイドの「パブリック証明書のリクエスト」または「プライベート証明書のリクエスト」を参照してください。ACM へのサードパーティー証明書のインポートの詳細については、AWS Certificate Manager ユーザーガイドの「証明書のインポート」を参照してください。
ACM でサポートされていないリージョンで HTTPS 接続をサポートする必要があるときにのみ、Certificate Manager として IAM を使用してください。IAM はプライベートキーを安全に暗号化し、暗号化されたバージョンを IAM SSL 証明書ストレージに保存します。IAM はすべてのリージョンでのサーバー証明書のデプロイをサポートしますが、AWS で使用するには、外部プロバイダーから証明書を取得する必要があります。ACM 証明書を IAM にアップロードすることはできません。また、IAM コンソールから証明書を管理することはできません。
IAM へのサードパーティー証明書のアップロードの詳細については、以下のトピックを参照してください。
サーバー証明書をアップロードする (AWS API)
IAM にサーバー証明書をアップロードするには、証明書と対応するプライベートキーを提供する必要があります。証明書が自己署名されていない場合、証明書チェーンも提供する必要があります (自己署名証明書をアップロードするときに証明書チェーンは必要ありません)。証明書をアップロードする前に、これらの項目がすべてあり、以下の条件を満たしていることを確認します。
-
証明書はアップロード時に有効である必要があります。有効期間の開始 (証明書の
NotBefore日付) 前、または有効期間の終了 (証明書のNotAfter日) 後に証明書をアップロードすることはできません。 -
プライベートキーは非暗号化される必要があります。パスワードやパスフレーズで保護されたプライベートキーをアップロードすることはできません。暗号化されたプライベートキーの復号のヘルプについては、「サーバー証明書のトラブルシューティング」を参照してください。
-
証明書、プライベートキー、および証明書チェーンはすべて PEM エンコードされる必要があります。これらの項目の PEM 形式への変換のヘルプについては、「サーバー証明書のトラブルシューティング」を参照してください。
IAM API を使用して証明書をアップロードするには、UploadServerCertificate リクエストを送信します。次の例では、AWS Command Line Interface (AWS CLI)
-
PEM エンコードされた証明書は、
Certificate.pemというファイルに保存されます。 -
PEM エンコードされた証明書チェーンは、
CertificateChain.pemというファイルに保存されます。 -
PEM エンコードされ、非暗号化されたプライベートキーは、
PrivateKey.pemというファイルに保存されます。 -
(オプション) キーバリューペアを使ってサーバー証明書にタグを付けるとします。例えば、証明書の特定と整理を行うために、タグキー
Departmentと タグ値Engineeringを追加することが可能です。
次のコマンドの例を使用するには、これらのファイル名を独自のファイル名に置き換えます。ExampleCertificate をアップロードした証明書の名前に置き換えます。証明書にタグを付ける場合は、ExampleKey と ExampleValue タグのキーバリューのペアを独自の値に置き換えます。1 つの連続した行にコマンドを入力します。次の例では、読みやすくするために改行とスペースを追加しています。
aws iam upload-server-certificate --server-certificate-nameExampleCertificate--certificate-body file://Certificate.pem--certificate-chain file://CertificateChain.pem--private-key file://PrivateKey.pem--tags '{"Key": "ExampleKey", "Value": "ExampleValue"}'
前のコマンドが成功すると、Amazon リソースネーム (ARN)、わかりやすい名前、識別子 (ID)、有効期限日、タグなど、アップロードされた証明書に関するメタデータを返します。
注記
Amazon CloudFront で使用することを目的としてサーバー証明書をアップロードする場合、--path オプションを使用してパスを指定する必要があります。パスの先頭に /cloudfront を含め、末尾にスラッシュを含める必要があります(例: /cloudfront/test/)。
AWS Tools for Windows PowerShell を使用して証明書をアップロードするには、Publish-IAMServerCertificate を使用します。
サーバー証明書の AWS API オペレーション
次のコマンドを使用して、サーバー証明書を表示、タグ付け、名前変更、削除します。
-
GetServerCertificate を使用して証明書を取得します。このリクエストは、証明書、証明書チェーン (アップロードされた場合)、および証明書に関するメタデータを返します。
注記
アップロード後に IAM からプライベートキーをダウンロードまたは取得することはできません。
-
Get-IAMServerCertificate を使用して証明書を取得します。
-
アップロードされたサーバー証明書を一覧表示するには、ListServerCertificates を使用します。リクエストは、各証明書に関するメタデータを含むリストを返します。
-
アップロードしたサーバー証明書を一覧表示するには、Get-IAMServerCertificates を使用します。
-
既存のサーバー証明書にタグを付けするには、TagServerCertificate を使用します。
-
Iサーバー証明書のタグを除するには、UntagServerCertificate を使用します。
-
サーバー証明書の名前を変更するか、そのパスを更新するには、UpdateServerCertificate を使用します。
次の例では、AWS CLI を使用してこのオペレーションを行う方法を示します。
以下のサンプルコマンドを使用するには、古い証明書の名前、新しい証明書の名前、および証明書のパスを置き換え、1 つの連続した行にコマンドを入力します。次の例では、読みやすくするために改行とスペースを追加しています。
aws iam update-server-certificate --server-certificate-nameExampleCertificate--new-server-certificate-nameCloudFrontCertificate--new-path/cloudfront/AWS Tools for Windows PowerShell を使用してサーバー証明書の名前を変更するか、パスを更新するには、Update-IAMServerCertificate を使用します。
-
サーバー証明書を削除するには、delete_server_certificate を使用します。
AWS Tools for Windows PowerShell を使用してサーバー証明書を削除するには、Remove-IAMServerCertificate を使用します。
サーバー証明書のトラブルシューティング
証明書を IAM にアップロードする前に、証明書、プライベートキー、および証明書チェーンがすべて PEM エンコードされていることを確認する必要があります。また、プライベートキーは非暗号化されていることも確認する必要があります。次の 例を参照してください。
例 PEM エンコードされた証明書の例
-----BEGIN CERTIFICATE-----Base64-encoded certificate-----END CERTIFICATE-----
例 PEM エンコードされ、暗号化されていないプライベートキーの例
-----BEGIN RSA PRIVATE KEY-----Base64-encoded private key-----END RSA PRIVATE KEY-----
例 PEM エンコードされた証明書チェーンの例
証明書チェーンには 1 つまたは複数の証明書が含まれます。テキストエディタ、Windows のコピーコマンド、または Linux の cat コマンドを使用して、ファイルをチェーンに連結します。複数の証明書を含めるときは、各証明書が、前述の証明書を認証する必要があります。そのため、証明書を連結して最後にルート CA 証明書を含めます。
次の例には 3 つの証明書が含まれていますが、証明書チェーンに含まれている証明書はそれ以上またはそれ以下である可能性があります。
-----BEGIN CERTIFICATE-----Base64-encoded certificate-----END CERTIFICATE----- -----BEGIN CERTIFICATE-----Base64-encoded certificate-----END CERTIFICATE----- -----BEGIN CERTIFICATE-----Base64-encoded certificate-----END CERTIFICATE-----
これらの項目が IAM へのアップロードに適切な形式でない場合は、OpenSSL
- DER から PEM に証明書または証明書チェーンを変換するには
-
以下の例のように、OpenSSL x509 コマンド
を使用します。次のサンプルコマンドで、 を、DER エンコードされた証明書を含むファイルの名前に置き換えます。Certificate.derを、希望する出力ファイル名に置き換え、PEM エンコードされた証明書を含めます。Certificate.pemopenssl x509 -inform DER -inCertificate.der-outform PEM -outCertificate.pem - DER から PEM にプライベートキーを変換するには
-
以下の例のように、OpenSSL rsa コマンド
を使用します。次のサンプルコマンドで、 を、DER エンコードされたプライベートキーを含むファイルの名前に置き換えます。PrivateKey.derを、希望する出力ファイル名に置き換え、PEM エンコードされたプライベートキーを含めます。PrivateKey.pemopenssl rsa -inform DER -inPrivateKey.der-outform PEM -outPrivateKey.pem - 暗号化されたプライベートキーを復号するには (パスワードやパスフレーズを削除)
-
以下の例のように、OpenSSL rsa コマンド
を使用します。次のサンプルコマンドを使用するには、 を、暗号化されたプライベートキーを含むファイルの名前に置き換えます。EncryptedPrivateKey.pemを、希望する出力ファイル名に置き換え、PEM エンコードおよび非暗号化されたプライベートキーを含めます。PrivateKey.pemopenssl rsa -inEncryptedPrivateKey.pem-outPrivateKey.pem - 証明書バンドルを PKCS#12 (PFX) から PEM に変換するには
-
以下の例のように、OpenSSL pkcs12 コマンド
を使用します。次のサンプルコマンドで、 を、PKCS#12 エンコードされた証明書バンドルを含むファイルの名前に置き換えます。CertificateBundle.p12を、希望する出力ファイル名に置き換え、PEM エンコードされた証明書バンドルを含めます。CertificateBundle.pemopenssl pkcs12 -inCertificateBundle.p12-outCertificateBundle.pem-nodes - 証明書バンドルを PKCS#7 から PEM に変換するには
-
以下の例のように、OpenSSL pkcs7 コマンド
を使用します。次のサンプルコマンドで、 を、PKCS#7 エンコードされた証明書バンドルを含むファイルの名前に置き換えます。CertificateBundle.p7bを、希望する出力ファイル名に置き換え、PEM エンコードされた証明書バンドルを含めます。CertificateBundle.pemopenssl pkcs7 -inCertificateBundle.p7b-print_certs -outCertificateBundle.pem