【AWS-SCS勉強用】なぜACMのパブリック証明書はAmazon EC2に直接インストールできないのか？

### はじめに
前回「[【AWS-SCS勉強用】S3のアクセスコントロールについてまとめてみる](https://qiita.com/Shiho_T/items/855a45fb45c921efa23b)」について投稿してからしばらく経ちましたが、先日SCSの認定資格を無事に取得することができました。

SCSの勉強中、EC2にインストールする証明書が「ACMパブリック証明書なのかサードパーティーの証明書なのか」を問われる問題に何度か遭遇しました。「とりあえずEC2にはACMのパブリック証明書はインストールできない」と覚えておいたら良いだろうと試験に臨んだのですが、疑問に思ったことは解消しておきたいと思い調べてみました。

ざっくり調べた結果、以下のような理由なのではないかと推察できました。

- **EC2がフルマネージドサービスではないこと**

ただ、フルマネージドでないことがどのように影響しているのか、はっきりと書かれているものを見つけることができませんでした。

そのため、以降は「EC2がフルマネージドサービスではないこと」がどうして問題になるのか自分なりに考察してみたいと思います。

### AWS Certificate Manager(ACM)についておさらい
まず、AWS Certificate Manager（以降ACMと表記）のサービス概要についておさらいします。

ACMとはSSL/TLS証明書を一元的に管理し、SSL/TLS証明書で使用される秘密鍵を保護し、管理するよう設計されたサービスです。

現在ACMは以下のサービスと統合されています。

- Elastic Load Balancing (ELB)
- Amazon CloudFront
- Amazon Cognito
- AWS Elastic Beanstalk
- AWS App Runner
- Amazon API Gateway
- AWS CloudFormation
- AWS Amplify
- Amazon OpenSearch Service
- AWS Network Firewall
- AWS Nitro Enclaves

ACMと統合されている各サービスについて改めて確認してみると、確かに全てフルマネージドサービスでした。

### 類似質問に対するAWSの回答
「[EC2インスタンスでホストされているウェブサイトにACM証明書を設定することができないのはなぜですか？](https://repost.aws/ja/knowledge-center/configure-acm-certificates-ec2)」という公式情報センターの記事では、EC2にACMパブリック証明書がインストールできない理由として
「**証明書に署名して作成する秘密鍵はACMが管理するため、証明書をエクスポートすることができない**」ことが言及されていました。
これについての詳細は「証明書の秘密鍵のセキュリティ」で参照するよう案内されていました。

参照先では証明書の秘密鍵の保護プロセスについて、要約すると以下のように説明されていました。  
```
1. パブリック証明書をリクエスト時、ACMは公開鍵と秘密鍵のペアを生成する。  
  
2. 初回リクエスト/インポート時に、ACMは各リージョンごとにaws/acmというエイリアスの管理された 
  AWS KMSキーを作成する。ACMはこのKMSキーを使用して証明書の秘密鍵を暗号化する。  

3. 証明書と暗号化された秘密鍵を、統合されているAWSサービスに送信する。  
  KMSの「グラント」で統合されたサービスがKMSキーを使って秘密鍵を復号化できるようにする。  

4. 統合されたサービスは、KMSキーを使って秘密鍵を復号化し、
  その秘密鍵と証明書を使ってSSL/TLSセッションを確立する。  
```
フルマネージドサービスなのかそうでないのかが、パブリック証明書のインストール可否に関わるのであれば、**項目3と項目4**が影響していそうだということが分かります。  

### 本件に関わるフルマネージドサービスとマネージドサービスの違い
では、そもそもACMと統合されているフルマネージドサービスとEC2はどのような点が異なっているのでしょうか。

注目すべきは管理責任範囲の違いです。

フルマネージドサービスはAWSが運用とセキュリティを完全に管理しています。

一方、EC2はAWSがインフラ管理、スケーラビリティや可用性と信頼性を担保するマネージドな部分を持つものの、OSの管理、アプリケーションのデプロイ、セキュリティの管理、ソフトウェアの設定をユーザが手動で管理しなければなりません。ユーザがセキュリティの管理を行う必要があるため、セキュリティと信頼性はユーザの管理次第になります。

以上のことから考えられるのは、
```
・証明書の管理がユーザにゆだねられているため、
　そもそもEC2に対して自動で証明書と秘密鍵を配信し管理する仕組みが備わっていない。  

・ユーザの管理下に置かれたEC2ではAWSが証明書と秘密鍵の安全性を担保できない。  
```
ということです。
  
  
つまり、EC2がユーザの管理配下に置かれていることにより、  
**AWSは証明書や秘密鍵の管理の安全性を確認できない上に、EC2のそもそものサービスコンセプトとして、AWS側で証明書の管理を行えるように設計されていない**  と言えるのではないでしょうか。

### まとめ
結論として、EC2にACMパブリック証明書を直接インストールできない理由は最初の推察通り、
**EC2がフルマネージドサービスでないこと**でした。
そして、フルマネージドサービスではないことでどのような影響があるのか調べた結果、  
根本的な原因が以下にあるのではないかという考察に至りました。

- **EC2のセキュリティ管理がAWSの管理対象ではないため、フルマネージドサービスと違い、証明書の秘密鍵の安全性を確保することができない。**  
- **そもそもEC2がサービスとして、証明書をAWS側で自動的に管理できるようにサービス設計されていない。**  

まだまだ知らないことがたくさんあるので、これからも気になったことは随時調べていこうと思います。  
### 参考文献

- [https://docs.aws.amazon.com/ja_jp/acm/latest/userguide/acm-services.html](https://docs.aws.amazon.com/ja_jp/acm/latest/userguide/acm-services.html)
- [https://repost.aws/ja/knowledge-center/configure-acm-certificates-ec2](https://repost.aws/ja/knowledge-center/configure-acm-certificates-ec2)
- [https://docs.aws.amazon.com/ja_jp/acm/latest/userguide/data-protection.html#kms](https://docs.aws.amazon.com/ja_jp/acm/latest/userguide/data-protection.html#kms)