プライベート PKI での証明書の更新
AWS プライベート CA からプライベート CA によって署名された ACM 証明書は、管理された更新の対象となります。パブリックに信頼できる ACM 証明書とは異なり、プライベート PKI の証明書には検証は必要ありません。信頼は、管理者が適切なルート CA 証明書をクライアント信頼ストアにインストールしたときに確立されます。
ACM コンソールまたは ACM API の RequestCertificate
アクションは、マネージド更新の対象となります。AWS Private CA API の IssueCertificate
アクションを使用して AWS Private CA から直接発行された証明書は、ACM によって管理されません。
マネージド証明書の有効期限切れから 60 日を経過すると、ACM によって、自動的に更新が試みられます。これには、手動でエクスポートおよびインストールされた証明書 (例えば、オンプレミスのデータセンターで) が含まれます。また、ユーザーは ACM API の RenewCertificate
アクションを使用して、いつでも更新を強制できます。強制された更新の Java 実装のサンプルについては、「証明書の更新]を参照してください。
更新後、証明書のサービスへのデプロイは、次のいずれかの方法で実行されます。
-
証明書が、ACM 統合サービスに関連付けられている場合、追加のユーザーのアクションなしに、新しい証明書が古い証明書を置き換えます。
-
証明書が、ACM 統合サービスに関連付けられていない場合、更新された証明書をエクスポートしてインストールするには、ユーザーのアクションが必要です。これらのアクションは、手動で実行するか、以下のように 、AWS Health、Amazon EventBridge、および AWS Lambda からの支援を得て実行することができます。詳細については、「更新された証明書のエクスポートの自動化」を参照してください。
更新された証明書のエクスポートの自動化
次の手順は、ACM が更新されたときにプライベート PKI 証明書のエクスポートを自動化するためのソリューションの例を示します。この例では、ACM から証明書とそのプライベートキーのみをエクスポートします。エクスポート後は、証明書をターゲットデバイスにインストールする必要があります。
コンソールを使用して証明書のエクスポートを自動化するには
-
の手順に従うAWS Lambda デベロッパーガイドの手順に従って、ACM エクスポート API を呼び出す Lambda 関数を作成および設定します。
-
関数の Lambda 実行ロールを作成し、次の信頼ポリシーを追加します。このポリシーは、ACM APIの ExportCertificate アクションを呼び出すことにより、更新された証明書とプライベート鍵を取得するための関数内のコードに許可を付与します。
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":"acm:ExportCertificate", "Resource":"*" } ] }
-
Python の次のサンプルなど、関数にアプリケーションコードを追加します。このコードは、ExportCertificate アクションを呼び出す関数をトリガーするイベントを調べます。詳細については、「Python を使用した Lambda 関数のビルド」を参照してください。
import json import boto3 acm = boto3.client('acm') passphrase = b'
\x01\x02\x03\x04\x05\x06\x07\x08\x09\x00
' def lambda_handler(event, context): context.log("Incoming Event : " + json.dumps(event) + "\n"); certificateArn = event['resources'][0]; context.log("Renewed Certificate ARN : " + certificateArn + "\n"); description = event['detail']['eventDescription'][0]['latestDescription']; if "completed the renewal" in description: response = acm.export_certificate(CertificateArn=certificateArn,Passphrase=passphrase) certificate = response['Certificate'] certificateChain = response['CertificateChain'] encrPrivateKey = response['PrivateKey'] context.log("Certificate : " + certificate + "\n"); context.log("Certificate Chain : " + certificateChain + "\n"); context.log("Encrypted Private Key : " + encrPrivateKey + "\n"); #TODO Install the private key, cert and chain to where it will be consumed return { 'statusCode': 200, }
-
Amazon EventBridge でルールを作成し、ACM ヘルスイベントをリッスンし、検出した場合は Lambda 関数を呼び出します。ACM は、証明書の更新を試みるたびに AWS Health イベントに書き込みます。これらの通知の詳細については、「Personal Health Dashboard (PHD) を使用してステータスを確認する」を参照してください。
次のイベントパターンを追加して、ルールを設定します。
{ "source":[ "aws.health" ], "detail-type":[ "AWS Health Event" ], "detail":{ "service":[ "ACM" ], "eventTypeCategory":[ "scheduledChange" ], "eventTypeCode":[ "AWS_ACM_RENEWAL_STATE_CHANGE" ] }, "resources":[ "arn:aws:acm:region:account:certificate/certificate_ID" ] }
-
ターゲットシステムに証明書を手動でインストールして、更新プロセスを完了します。
プライベート PKI 証明書のマネージド更新のテスト
ACM API または AWS CLI を使用して、ACM マネージド更新ワークフローの設定を手動でテストします。そうすることで、有効期限切れの前に ACM によって証明書が自動的に更新されることを確認できます。
AWS Private CA によって発行された証明書の更新のみをテストできます。
以下で説明する API アクションまたは CLI コマンドを使用すると、ACM は証明書の更新を試みます。更新が成功すると、ACM はマネジメントコンソールまたは API 出力に表示される証明書のメタデータを更新します。証明書が ACM 統合サービスに関連付けられている場合、新しい証明書がデプロイされ、Amazon CloudWatch Events で更新イベントが生成されます。更新に失敗すると、ACM はエラーを返し、修復アクションを提案します。(この情報は、記述証明書コマンドを使用して閲覧できます。) 証明書が統合サービスを通じてデプロイされていない場合、証明書をエクスポートし、リソースに手動でインストールする必要があります。
ACM を使用して AWS Private CA の証明書を更新するには、更新を行うための ACM サービスプリンシパルアクセス許可を最初に付与する必要があります。詳細については、「ACM への証明書更新アクセス権限の割り当て」を参照してください。
証明書の更新を手動でテストするには (AWS CLI)
-
renew-certificate コマンドを使用して、プライベートにエクスポートされた証明書を更新します。
aws acm renew-certificate \ --certificate-arn arn:aws:acm:
region
:account
:certificate/certificate_ID
-
次に、describe-certificate コマンドを使用して、証明書の更新詳細が更新されたことを確認します。
aws acm describe-certificate \ --certificate-arn arn:aws:acm:
region
:account
:certificate/certificate_ID
証明書の更新を手動でテストするには (ACM API)
-
RenewCertificate リクエストを送信し、更新するプライベート証明書の ARN を指定します。次に、DescribeCertificate オペレーションを使用して、証明書の更新詳細が更新されたことを確認します。