AWS Certificate Manager による証明書管理
AWS Certificate Manager (ACM)
認証局のサポート
CloudFront 相互 TLS (オリジン) では、TLS クライアント認証に拡張キー使用法 (EKU) を備えたクライアント証明書が必要です。この要件により、認証局から証明書を発行して AWS Certificate Manager にインポートする必要があります。ACM の自動証明書プロビジョニングおよび更新機能は、相互 TLS (オリジン) クライアント証明書では使用できません。CloudFront 相互 TLS (オリジン) は、次の 2 つのソースからのクライアント証明書をサポートしています。
-
AWS Private Certificate Authority: 拡張キー使用法フィールドの TLS クライアント認証を含む証明書テンプレート (EndEntityClientAuthCertificate テンプレートなど) を使用して、AWS プライベート CA から証明書を発行できます。AWS プライベート CA から証明書を発行したら、米国東部 (バージニア北部) リージョン (us-east-1) の ACM にインポートする必要があります。このアプローチにより、AWS プライベート CA のセキュリティ上の利点が得られると同時に、証明書のライフサイクル管理を制御できるようになります。
-
サードパーティーのプライベート認証局: 既存のプライベート認証局インフラストラクチャから証明書を発行し、ACM にインポートすることもできます。これにより、CloudFront の相互 TLS (オリジン) 機能を活用しながら、現在の証明書管理プロセスを維持できます。証明書には、拡張キー使用法フィールドに TLS クライアント認証を含める必要があり、証明書、プライベートキー、証明書チェーンを含む PEM 形式である必要があります。
重要
AWS プライベート CA とサードパーティー CA の両方について、証明書の有効期限をモニタリングし、有効期限が切れる前に更新された証明書を ACM にインポートするのはお客様の責任でkす。ACM の自動更新機能は、相互 TLS (オリジン) に使用されるインポートされた証明書には適用されません。
証明書の要件と仕様
クライアント証明書の要件
-
形式: PEM (Privacy Enhanced Mail) 形式
-
コンポーネント: 証明書、秘密キー、および証明書チェーン
-
証明書チェーンの最大深度: 3 (リーフ証明書 + 中間証明書 + ルート証明書)
-
証明書チェーンの最大サイズ: 64 KB
-
証明書サイズ: 96 KB を超えることはできません
-
最大プライベートキーサイズ: 5 KB (ACM 制限)
-
CloudFront ディストリビューションの作成または更新 API コールごとに、追加または変更できる一意のオリジン mTLS 証明書 ARN の最大数: 5
-
リージョン: 証明書は、米国東部 (バージニア北部) リージョン (us-east-1) の ACM に保存する必要があります
サポートされている証明書の仕様
-
証明書タイプ: X.509v3
-
パブリックキーアルゴリズム:
RSA: 2048 ビット
ECDSA: P-256
-
署名アルゴリズム:
SHA256, SHA384, SHA512 with RSA
SHA256, SHA384, SHA512 with ECDSA
SHA256, SHA384, SHA512 with RSASSA-PSS with MGF1
-
拡張キー使用法 (必須): 証明書には、TLS クライアント認証に設定された拡張キー使用法 (EKU) 拡張機能が必要であり、mTLS の目的で承認されていることを確認する必要があります。
サーバー証明書の要件
オリジンサーバーは、相互 TLS ハンドシェイク中に、パブリックに信頼された認証局からの証明書を提示する必要があります。オリジンサーバー証明書の要件の詳細については、「CloudFront で SSL/TLS 証明書を使用するための要件」を参照してください。
証明書のリクエストまたはインポート
相互 TLS (オリジン) を有効にする前に、ACM で利用可能なクライアント証明書が必要です。
AWS プライベート CA からの証明書のリクエストとインポート
前提条件:
AWS アカウントで設定されたプライベート認証局
AWS Private CA から証明書を発行するアクセス許可
証明書を ACM にインポートするアクセス許可
ユースケースに適した
Extended key usage:TLS web client authenticationを備えた証明書テンプレート ARNOpenSSL、AWS CLI、jq (JSON の解析用) をインストールします。
PCA から証明書をリクエストして ACM にインポートするには (AWS CLI)
-
再利用しやすいように、変数にプライベート CA ARN を設定します。
PCA_ARN="arn:aws:acm-pca:region:account:certificate-authority/12345678..." -
OpenSSL を使用して ECDSA P-256 プライベートキー (prime256v1 曲線) と証明書署名リクエスト (CSR) を生成し、ACM インポートに必要なプライベートキーを暗号化しないままにするために -nodes フラグが使用されていることを確認します。
openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -nodes \ -keyout private.key \ -out request.csr \ -subj "/CN=client.example.com" -
CSR を AWS プライベート CA に送信して証明書を発行すると、新しく発行された証明書の ARN が返されます。
CERT_ARN=$(aws acm-pca issue-certificate \ --certificate-authority-arn "$PCA_ARN" \ --csr fileb://request.csr \ --signing-algorithm "SHA256WITHECDSA" \ --validity Value=365,Type="DAYS" \ --template-arn arn:aws:acm-pca:::template/EndEntityCertificate/V1 \ --query 'CertificateArn' --output text) -
リーフ証明書とチェーンの両方を返す get-certificate コマンドを使用して AWS PCA から証明書バンドルを取得し、jq を使用してそれらを個別のファイルに分離します。
# Retrieve the full certificate bundle in JSON format aws acm-pca get-certificate \ --certificate-authority-arn "$PCA_ARN" \ --certificate-arn "$CERT_ARN" \ --output json > full_cert.json # Split into Leaf and Chain jq -r '.Certificate' full_cert.json > leaf_cert.pem jq -r '.CertificateChain' full_cert.json > cert_chain.pem -
CLI でバイナリファイルデータを正しく処理するには、fileb:// プロトコルを使用して、暗号化されていないプライベートキー、リーフ証明書、証明書チェーンを AWS ACM にインポートします。
aws acm import-certificate \ --certificate fileb://leaf_cert.pem \ --private-key fileb://private.key \ --certificate-chain fileb://cert_chain.pem \ --region us-east-1 \ --query 'CertificateArn' \ --output text
サードパーティーの CA から証明書をインポートする
前提条件:
認証局からの証明書、暗号化されていないプライベートキー、証明書チェーン (PEM 形式)
証明書には、TLS クライアント認証の拡張キー使用法が含まれている必要があります
証明書を ACM にインポートするアクセス許可
ACM に証明書をインポートするには (AWS CLI)
aws acm import-certificate \ --certificate fileb://certificate.pem \ --private-key fileb://private-key.pem \ --certificate-chain fileb://certificate-chain.pem \ --region us-east-1 \ --query 'CertificateArn' \ --output text
次のステップ
ACM でクライアント証明書を取得またはインポートした後、相互 TLS 認証を要求するようにオリジンサーバーを設定し、CloudFront ディストリビューションで相互 TLS (オリジン) を有効にすることができます。CloudFront で相互 TLS (オリジン) を有効にする手順については、次のセクション「CloudFront ディストリビューションの相互 TLS (オリジン) を有効にする」を参照してください。