

# AWS Certificate Manager による証明書管理
<a name="origin-certificate-management-certificate-manager"></a>

[AWS Certificate Manager (ACM)](https://aws.amazon.com/certificate-manager/) は、オリジンの相互 TLS 認証中に CloudFront がオリジンサーバーに提示するクライアント証明書を保存します。

## 認証局のサポート
<a name="origin-ca-support"></a>

CloudFront のオリジンの mTLS では、TLS クライアント認証に拡張キー使用法 (EKU) を備えたクライアント証明書が必要です。この要件により、認証局から証明書を発行して AWS Certificate Manager にインポートする必要があります。ACM の自動証明書プロビジョニングおよび更新機能は、オリジンの mTLS クライアント証明書では使用できません。CloudFront のオリジンの mTLS は、次の 2 つのソースからのクライアント証明書をサポートしています。
+ **AWS Private Certificate Authority:** 拡張キー使用法フィールドの TLS クライアント認証を含む証明書テンプレート (EndEntityClientAuthCertificate テンプレートなど) を使用して、AWS プライベート CA から証明書を発行できます。AWS プライベート CA から証明書を発行したら、米国東部 (バージニア北部) リージョン (us-east-1) の ACM にインポートする必要があります。このアプローチにより、AWS プライベート CA のセキュリティ上の利点が得られると同時に、証明書のライフサイクル管理を制御できるようになります。
+ **サードパーティーのプライベート認証局:** 既存のプライベート認証局インフラストラクチャから証明書を発行し、ACM にインポートすることもできます。これにより、CloudFront のオリジンの mTLS 機能を活用しながら、現在の証明書管理プロセスを維持できます。証明書には、拡張キー使用法フィールドに TLS クライアント認証を含める必要があり、証明書、プライベートキー、証明書チェーンを含む PEM 形式である必要があります。

**重要**  
AWS プライベート CA とサードパーティー CA の両方について、証明書の有効期限をモニタリングし、有効期限が切れる前に更新された証明書を ACM にインポートするのはお客様の責任でｋす。ACM の自動更新機能は、オリジンの mTLS に使用されるインポートされた証明書には適用されません。

## 証明書の要件と仕様
<a name="origin-certificate-requirements"></a>

### クライアント証明書の要件
<a name="origin-ca-cert-format-requirements"></a>
+ **形式:** PEM (Privacy Enhanced Mail) 形式
+ **コンポーネント:** 証明書、秘密キー、および証明書チェーン
+ **証明書チェーンの最大深度:** 3 (リーフ証明書 \+ 中間証明書 \+ ルート証明書)
+ **証明書チェーンの最大サイズ:** 64 KB
+ **証明書サイズ:** 96 KB を超えることはできません
+ **最大プライベートキーサイズ:** 5 KB (ACM 制限)
+ **CloudFront ディストリビューションの作成または更新 API コールごとに、追加または変更できる一意のオリジン mTLS 証明書 ARN の最大数:** 5
+ **リージョン:** 証明書は、米国東部 (バージニア北部) リージョン (us-east-1) の ACM に保存する必要があります

### サポートされている証明書の仕様
<a name="origin-supported-cert-specs"></a>
+ **証明書タイプ:** 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 の目的で承認されていることを確認する必要があります。

### サーバー証明書の要件
<a name="origin-server-certificate-requirements"></a>

オリジンサーバーは、相互 TLS ハンドシェイク中に、パブリックに信頼された認証局からの証明書を提示する必要があります。オリジンサーバー証明書の要件の詳細については、「[CloudFront で SSL/TLS 証明書を使用するための要件](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-https-cloudfront-to-custom-origin.html#using-https-cloudfront-to-origin-certificate)」を参照してください。

### 証明書のリクエストまたはインポート
<a name="origin-request-import-certificate"></a>

オリジンの mTLS を有効にする前に、ACM で利用可能なクライアント証明書が必要です。

#### AWS プライベート CA からの証明書のリクエストとインポート
<a name="request-certificate-aws-private-ca"></a>

前提条件:
+ AWS アカウントで設定されたプライベート認証局
+ AWS Private CA から証明書を発行するアクセス許可
+ 証明書を ACM にインポートするアクセス許可
+ ユースケースに適した `Extended key usage:TLS web client authentication` を備えた[証明書テンプレート](https://docs.aws.amazon.com/privateca/latest/userguide/UsingTemplates.html) ARN
+ OpenSSL、AWS CLI、jq (JSON の解析用) をインストールします。

##### PCA から証明書をリクエストして ACM にインポートするには (AWS CLI)
<a name="request-certificate-cli"></a>

1. 再利用しやすいように、変数にプライベート CA ARN を設定します。

   ```
   PCA_ARN="arn:aws:acm-pca:region:account:certificate-authority/12345678..."
   ```

1. 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"
   ```

1. 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)
   ```

1. リーフ証明書とチェーンの両方を返す 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
   ```

1. 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 から証明書をインポートする
<a name="import-certificate-third-party-ca"></a>

前提条件:
+ 認証局からの証明書、暗号化されていないプライベートキー、証明書チェーン (PEM 形式)
+ 証明書には、TLS クライアント認証の拡張キー使用法が含まれている必要があります
+ 証明書を ACM にインポートするアクセス許可

##### ACM に証明書をインポートするには (AWS CLI)
<a name="import-certificate-cli"></a>

```
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
```

#### 次のステップ
<a name="certificate-next-steps"></a>

ACM でクライアント証明書を取得またはインポートした後、相互 TLS 認証を要求するようにオリジンサーバーを設定し、CloudFront ディストリビューションでオリジンの mTLS を有効にすることができます。CloudFront でオリジンの mTLS を有効にする手順については、次のセクション「CloudFront ディストリビューションのオリジンの相互 TLS を有効にする」を参照してください。