IAM でのサーバー証明書の管理 - AWS Identity and Access Management

IAM でのサーバー証明書の管理

ウェブサイトまたは AWS のアプリケーションへの HTTPS 接続を有効にするには、SSL/TLS サーバー証明書が必要です。AWS Certificate Manager (IAM) によってサポートされているリージョンの証明書では、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 をアップロードした証明書の名前に置き換えます。証明書にタグを付ける場合は、ExampleKeyExampleValue タグのキーバリューのペアを独自の値に置き換えます。1 つの連続した行にコマンドを入力します。次の例では、読みやすくするために改行とスペースを追加しています。

aws iam upload-server-certificate --server-certificate-name ExampleCertificate --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)

IAM API を使用して証明書を取得するには、GetServerCertificate リクエストを送信します。次の例では、AWS CLI を使用してこのオペレーションを行う方法を示します。ExampleCertificate を、取得する証明書の名前と置き換えます。

aws iam get-server-certificate --server-certificate-name ExampleCertificate

前のコマンドが成功した場合、証明書、証明書チェーン (アップロードされた場合)、および証明書に関するメタデータを返します。

注記

アップロード後に IAM からプライベートキーをダウンロードまたは取得することはできません。

AWS Tools for Windows PowerShell を使用して証明書を取得するには、Get-IAMServerCertificate を使用します。

サーバー証明書の一覧表示 (AWS API)

IAM API を使用して、アップロードされたサーバー証明書を一覧表示するには、ListServerCertificates リクエストを送信します。次の例では、AWS CLI を使用してこのオペレーションを行う方法を示します。

aws iam list-server-certificates

前のコマンドが成功した場合、各証明書に関するメタデータが含まれた一覧を返します。

AWS Tools for Windows PowerShell を使用して、アップロードしたサーバー証明書を一覧表示するには、Get-IAMServerCertificates を使用します。

サーバー証明書のタグ付けとタグの解除 (AWS API)

IAM リソースにタグをアタッチすると、そのリソースへのアクセスを整理および制御できます。IAM API を使用して既存のサーバー証明書にタグ付けするには、TagServerCertificate リクエストを送信します。次の例では、AWS CLI を使用してこのオペレーションを行う方法を示します。

aws iam tag-server-certificate --server-certificate-name ExampleCertificate --tags '{"Key": "ExampleKey", "Value": "ExampleValue"}'

上記のコマンドが正常に実行されると、出力は返されません。

IAM API を使用してサーバー証明書のタグを解除するには、UntagServerCertificate リクエストを送信します。次の例では、AWS CLI を使用してこのオペレーションを行う方法を示します。

aws iam untag-server-certificate --server-certificate-name ExampleCertificate --tag-keys ExampleKeyName

上記のコマンドが正常に実行されると、出力は返されません。

サーバー証明書の名前変更またはパスの更新 (AWS API)

IAM API を使用してサーバー証明書の名前を変更するか、パスを更新するには、UpdateServerCertificate リクエストを送信します。次の例では、AWS CLI を使用してこのオペレーションを行う方法を示します。

以下のサンプルコマンドを使用するには、古い証明書の名前、新しい証明書の名前、および証明書のパスを置き換え、1 つの連続した行にコマンドを入力します。次の例では、読みやすくするために改行とスペースを追加しています。

aws iam update-server-certificate --server-certificate-name ExampleCertificate --new-server-certificate-name CloudFrontCertificate --new-path /cloudfront/

前のコマンドが成功した場合、出力を返しません。

AWS Tools for Windows PowerShell を使用してサーバー証明書の名前を変更するか、パスを更新するには、Update-IAMServerCertificate を使用します。

サーバー証明書の削除 (AWS API)

IAM API を使用してサーバー証明書を削除するには、DeleteServerCertificate リクエストを送信します。次の例では、AWS CLI を使用してこのオペレーションを行う方法を示します。

以下のサンプルコマンドを使用するには、ExampleCertificate を、削除する証明書の名前に置き換えます。

aws iam delete-server-certificate --server-certificate-name ExampleCertificate

前のコマンドが成功した場合、出力を返しません。

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 コマンドを使用します。次のサンプルコマンドで、Certificate.der を、DER エンコードされた証明書を含むファイルの名前に置き換えます。Certificate.pem を、希望する出力ファイル名に置き換え、PEM エンコードされた証明書を含めます。

openssl x509 -inform DER -in Certificate.der -outform PEM -out Certificate.pem

 

DER から PEM にプライベートキーを変換するには

以下の例のように、OpenSSL rsa コマンドを使用します。次のサンプルコマンドで、PrivateKey.der を、DER エンコードされたプライベートキーを含むファイルの名前に置き換えます。PrivateKey.pem を、希望する出力ファイル名に置き換え、PEM エンコードされたプライベートキーを含めます。

openssl rsa -inform DER -in PrivateKey.der -outform PEM -out PrivateKey.pem

 

暗号化されたプライベートキーを復号するには (パスワードやパスフレーズを削除)

以下の例のように、OpenSSL rsa コマンドを使用します。次のサンプルコマンドを使用するには、EncryptedPrivateKey.pem を、暗号化されたプライベートキーを含むファイルの名前に置き換えます。PrivateKey.pem を、希望する出力ファイル名に置き換え、PEM エンコードおよび非暗号化されたプライベートキーを含めます。

openssl rsa -in EncryptedPrivateKey.pem -out PrivateKey.pem

 

証明書バンドルを PKCS#12 (PFX) から PEM に変換するには

以下の例のように、OpenSSL pkcs12 コマンドを使用します。次のサンプルコマンドで、CertificateBundle.p12 を、PKCS#12 エンコードされた証明書バンドルを含むファイルの名前に置き換えます。CertificateBundle.pem を、希望する出力ファイル名に置き換え、PEM エンコードされた証明書バンドルを含めます。

openssl pkcs12 -in CertificateBundle.p12 -out CertificateBundle.pem -nodes

 

証明書バンドルを PKCS#7 から PEM に変換するには

以下の例のように、OpenSSL pkcs7 コマンドを使用します。次のサンプルコマンドで、CertificateBundle.p7b を、PKCS#7 エンコードされた証明書バンドルを含むファイルの名前に置き換えます。CertificateBundle.pem を、希望する出力ファイル名に置き換え、PEM エンコードされた証明書バンドルを含めます。

openssl pkcs7 -in CertificateBundle.p7b -print_certs -out CertificateBundle.pem