AWS プライベート CA を使用して Application Load Balancer に mTLS を設定する方法を教えてください。
プライベート認証機関 (プライベートCA) をクライアントに発行し、それを使用して Application Load Balancer の相互 TLS (mTLS) を認証したいです。
解決策
以下の手順に従って、AWS マネジメントコンソールで mTLS 認証用のプライベート CA を作成します。
HTTPS リスナーを持つ Application Load Balancer を作成する
Application Load Balancer 用の HTTPS リスナーを作成します。
AWS プライベート CA を使用してルート CA 証明書バンドルを作成する
- AWS マネジメントコンソールにログインします。
- AWS プライベート認証機関に移動します。
- [プライベート CA の作成] を選択します。[ルート CA] を選択し、詳細を入力します。残りはデフォルトのままにします。[プライベート CA] を選択します。
- [アクション] を選択します。次に、[CA 証明書のインストール] を選択します。
- [有効期限] を選択し、選択を確定します。次に、[インストール] を選択します。
AWS プライベート CA を使用して 2 つの下位 CA を作成する
ルート CA をインストールしたら、さらに 2 つの下位 CA を作成します。次に、これらの CA を使用してエンドエンティティ証明書を発行します。
注: Application Load Balancer には、最大 4 つの下位証明書を作成できます。CA 階層の詳細については、「CA 階層を設計する」を参照してください。
下位 CA1 を作成する
AWS マネジメントコンソールで、次のステップを実行します。
- AWS プライベート認証機関に移動し、[プライベート CA の作成] を選択します。
- [下位 CA] を選択し、詳細を入力します。[CA を作成] を選択します。
注: 詳細のフィールドには、別々のサブジェクト識別CA名 (たとえば、SubCA1 を共通名 (CN) にする) を入力してください。 - [アクション] を選択します。次に、[CA 証明書のインストール] を選択します。
- 親CA にルートCA を選択します。
- [有効期限] を選択し、選択を確定します。次に、[インストール] を選択します。
注: 有効期限は、ルート CA に割り当てられている有効期限よりも短い必要があります。 - 下位証明書をさらに追加するには、パスの長さで 1 または 2 を選択します。または、ユースケース次第では、0 のままにします。
下位 CA2 を作成する
次の手順を実行します。
- 上記で使用した手順 1 ~ 3 に従って、下位 CA1 を作成します。
- 親 CA に下位 CA1 を選択します。
注: 手順2では、詳細のフィールドに別のサブジェクト識別CA名 (たとえば、SubCA2 を共通名 (CN) にする) を入力します。 - [有効期限] を指定して確認します。次に、[インストール] を選択します。
注: 有効期限は、下位 CA1 に割り当てられている有効期限よりも短い必要があります。
これで、下位 CA1 (レベル 2) に署名するルート CA (レベル 1) ができました。一方、下位 CA1 は、下位 CA2 (レベル 3) に署名します。 **注:**Application Load Balancer では、証明書チェーンの最大深度は 4 です。
証明書バンドルを Amazon Simple Storage Service にアップロードする
AWS マネジメントコンソールで、次のステップを実行します。
- CABundle.pem という名前のファイルを作成し、下位 CA2 から証明書チェーンと証明書本文をコピーします。 から証明書チェーンと証明書本文をコピーします (証明書チェーン、証明書本文の順番)。
- 必要なポリシーを使用して Amazon S3 バケットを作成します。例:
注: <AccountID:certificate-authority/abcde-efgh-45dd-b564-1234abcd> は、実際のアカウント番号と下位 CA2 の Amazon リソースネーム (ARN) に置き換えてください。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "acm-pca.amazonaws.com" }, "Action": [ "s3:PutObject", "s3:PutObjectAcl", "s3:GetBucketAcl", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::<bucket-name>/*", "arn:aws:s3:::<bucket-name>" ], "Condition": { "StringEquals": { "aws:SourceAccount": "Your Acc Id", "aws:SourceArn": arn:aws:acm-pca:us-east-1:<AccountID>:certificate-authority/abcde-efgh-45dd-b564-1234abcd" } } } ] }
- CABundle.pem を Amazon 3 バケットにアップロードします。
トラストストアを作成し、mTLS を有効化したリスナーに関連付ける
- トラストストアを作成します。
- トラストストアを Application Load Balancer の mTLS リスナーに関連付けます。
プライベート CA を使用してクライアント証明書を発行する
-
次の AWS コマンドラインインターフェイス (AWS CLI) コマンドを使用して、証明書署名リクエスト (CSR) を作成します。
openssl req -out client_csr1.pem -new -newkey rsa:2048 -nodes -keyout client_private-key1.pem
このコマンドは CSR とプライベートキーを返します。
**注:**AWS CLI のコマンドの実行時にエラーが発生する場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。 -
作成した AWS プライベート CA を使用して証明書を発行します。
aws acm-pca issue-certificate \ --certificate-authority-arn arn:aws:acm-pca:us-east-1:679542158453:certificate-authority/c929c98e-f0e8-45dd-b564-e2bb5b121b88 \ --csr fileb://client_csr1.pem \ --signing-algorithm "SHA256WITHRSA" \ --validity Value=30,Type="DAYS"
このコマンドは証明書の ARN を返します。
-
証明書を発行します。
aws acm-pca get-certificate \ --certificate-authority-arn arn:aws:acm-pca:us-east-1:679542158453:certificate-authority/c929c98e-f0e8-45dd-b564-e2bb5b121b88 \ --certificate-arn arn:aws:acm-pca:us-east-1:679542158453:certificate-authority/c929c98e-f0e8-45dd-b564-e2bb5b121b88/certificate/add80c25606b48fcd3c4472ae0962125 | \ jq -r .'Certificate' > client_cert1.cert
mTLS をテストする
リクエストで作成したクライアント証明書を渡します。プロセスが成功すると、双方向認証が完了したことになります。ロードバランサーは、クライアントがロードバランサーの証明書を認証すると同時にクライアント証明書を認証しました。
curl -ivk --cert client_cert1.cert --key client_private-key1.pem https://<elb-name>
テスト証明書の取り消し
発行された証明書が危険にさらされたり、不要になったりした場合は、証明書失効リスト (CRL) を使用して証明書を取り消します。AWS プライベート CA を使用する場合、CRL ディストリビューションを有効にするときに、.CRL ファイルが自動的に作成されます。
AWS マネジメントコンソールで CRL 配布を有効にする方法を次に示します。
- 下位 CA2 に移動します。
- [失効設定] を選択し、[CRL ディストリビューションをアクティブ化] を選択します。
- 先ほどと同じ S3 バケットを使用し、[作成] を選択します。これにより、S3 バケットポリシーが正しく設定されていれば、acm-pca-permission-test-key-private という名前のテストファイルが作成されます。
証明書を取り消す
証明書を取り消すには、まず発行された証明書のシリアル番号を取得する必要があります。
-
シリアル番号を取得するには、次の AWS CLI コマンドを使用します。
openssl x509 -in client_cert1.cert -text -noout
-
revoke certificate コマンドを発行する
aws acm-pca revoke-certificate --certificate-authority-arn arn:aws:acm-pca:us-east-1:679542158453:certificate-authority/c929c98e-f0e8-45dd-b564-e2bb5b121b88 --certificate-serial ad:d8:0c:25:60:6b:48:fc:d3:c4:47:2a:e0:96:21:25 --revocation-reason "KEY_COMPROMISE"
このアクションにより、S3 バケットに .CRL ファイルが作成されます。**.CRL ** ファイルの作成には最大 30 分かかる場合があります。
CRL ファイルを使用してトラストストアを更新する
ファイル形式を変換する
AWS CLI コマンドを使用してファイル形式を変更します。
S3 バケットの .CRL を .pem 形式に変換します。
注: Application Load Balancer は、.pem 形式の CRL のみをサポートします。
openssl crl -in revoked.crl -inform DER -out revoked_crl_in_pem.crl
トラストストアを更新する
AWS マネジメントコンソールでトラストストアを更新するには、次の手順を実行します。
- AWS マネジメントコンソールにログインします。
- トラストストアに移動します。
- [証明書] の [失効リスト] に移動します。[失効リストを追加] を選択します。
- [S3 を参照] を選択し、前に使用した S3 バケットから .pem 形式の .CRL ファイルを選択します。
- **[アップロード]**を選択します。
注: 「mTLS をテストする」のステップを再実行します。発行された証明書が失効したため、mTLS 認証が失敗することに注意してください。
また、「プライベート CA を使用してクライアント証明書を発行する」のステップを繰り返し、複数の証明書を発行して mTLS を検証することもできます。
関連するコンテンツ
- 質問済み 2年前lg...
- 質問済み 2ヶ月前lg...
- AWS公式更新しました 7ヶ月前