0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS Private CA を基礎から学び、CloudFormationで組んでみる

0
Posted at

■PrivateCA(プライベート認証局)とは🤔?

企業や組織が社内システムや特定の用途のために、自社で独自に構築・運用する認証局(CA)のこと

パブリックCA(SSL/TLS証明書など)が不特定多数のWebサイトの証明書を発行するのに対し、
プライベートCAは社内ネットワーク、mTLS、VPNなど限られた範囲で、信頼できるデジタル証明書を発行・管理し、安全な通信や認証を実現するために使われる
コストを抑えつつ、自社のポリシーに合わせて自由にカスタマイズできるのが特徴


■特記事項⚠️

  • 汎用モード:1CA = 4万円/月 と高額💰 短期証明書モード**:**1CA = 5千円/最大7日間
  • CAを削除することで料金が発生しなくなる → 非アクティブ状態でも料金が発生するため注意
  • ルートCAは自己署名証明書で、信頼の起点となる 
    通常オフラインで厳重に管理が必要 → AWS側が管理しているため問題なし

■認証局・証明書の種類

用語 用途/意味
ルートCA 認証局 (CA) 階層の最上位に位置する信頼の起点となる証明書発行機関であり、下位CA証明書を発行する
下位CA(中間CA) クライアント証明書を発行する
1つのルートCAで複数の下位CA証明書を発行可能
クライアント証明書
(エンドエンティティ証明書) ・アクセス元のクライアントが所持(に配置)する証明書
→これを持っていないとアクセスできないように制限できる
・1つの下位CAで複数のクライアント証明書を発行可能
サーバ証明書 身元をクライアントに証明するための証明書(SSL証明書など)
→NLBでロードバランシングやオンプレなどは、直接コンテナやサーバにACMからエクスポートしたSSL証明書を発行して配置する必要がある
→ACMで発行する
証明書署名要求(CSR) 証明書発行時に必要な署名要求
→例えば、ルートCAが下位CAに証明書を発行する際、 下位CAは自身の秘密鍵で署名されたCSRをルートCAに提出し、ルートCAはこのCSRを受け取り、内容を検証、自身の秘密鍵で署名して下位CA証明書を発行する
ルートCA証明書 自己署名で信頼した証明書
下位CA証明書 ルートCAで署名して信頼した証明書
ルートCA秘密鍵/公開鍵 CA作成時に生成される
下位CA秘密鍵/公開鍵 CA作成時に生成される

■ 認証局作成、証明書発行の流れ

① 認証局(CA)を作成する
  ・ルートCA
  ・下位CA

② 証明書を発行する
  ・ルートCA証明書  :自分自身のCAを指定して自己署名し発行する

  ・下位CA証明書   :ルートCAを指定して署名し発行する

  ・クライアント証明書 :下位CAで署名し発行する(マネコンだと自動で署名)

image.png


■クライアント証明書認証の流れ

image.png


■CFnで構築

① 認証局を作成する

Resources:
  # ----------------------------------------------------------
  # CertificateAuthority ルートCA
  # ----------------------------------------------------------
  RootCA:
    Type: AWS::ACMPCA::CertificateAuthority
    Properties:
      KeyAlgorithm: RSA_2048            # キーアルゴリズム
      SigningAlgorithm: SHA256WITHRSA   # 署名アルゴリズム
      Subject:
        CommonName: root-ca
        Country: !Ref Country                       # 組織の所在国、2文字のISOコード
        Locality: !Ref Locality                     # 組織の所在地の市町村名
        Organization: !Ref Organization             # CAを運営する組織の正式名称
        OrganizationalUnit: !Ref OrganizationalUnit # 組織内の部署や部門名
        State: !Ref State
      Type: ROOT    # ルートCA
      UsageMode: GENERAL_PURPOSE  # GENERAL_PURPOSE:汎用証明書、SHORT_LIVED_CERTIFICATE:短期証明書
      Tags:
        - Key: Name
          Value: root-ca

  # ----------------------------------------------------------
  # CertificateAuthority 下位CA
  # ----------------------------------------------------------
  SubordinateCA:
    Type: AWS::ACMPCA::CertificateAuthority
    Properties:
      KeyAlgorithm: RSA_2048
      SigningAlgorithm: SHA256WITHRSA
      Subject:
        CommonName: subordinate-ca
        Country: !Ref Country
        Locality: !Ref Locality
        Organization: !Ref Organization
        OrganizationalUnit: !Ref OrganizationalUnit
        State: !Ref State
      Type: SUBORDINATE    # 下位CA
      UsageMode: GENERAL_PURPOSE
      Tags:
        - Key: Name
          Value: subordinate-ca

② 証明書を発行する

 ※クライアント証明書はマネージドコンソールで手動発行(手順は別途記載予定)

# ----------------------------------------------------------
  # Certificate ルートCA
  # ----------------------------------------------------------
  RootCertificate:
    Type: AWS::ACMPCA::Certificate
    Properties:
      CertificateAuthorityArn: !GetAtt RootCA.Arn    # 自己署名
      CertificateSigningRequest: !GetAtt RootCA.CertificateSigningRequest  # 自分のCSRを指定して、自分に提出する
      SigningAlgorithm: SHA256WITHRSA
      TemplateArn: arn:aws:acm-pca:::template/RootCACertificate/V1  # 公式のテンプレートを指定。デフォルトでもいいのか?
      Validity:      # 証明書の有効期間 短いほどセキュリティ高い
        Type: YEARS
        Value: 10

  # ----------------------------------------------------------
  # Certificate OEM-A 下位CA
  # ----------------------------------------------------------
  OemASubordinateCertificate:
    Type: AWS::ACMPCA::Certificate
    DependsOn: RootCAActivation
    Properties:
      CertificateAuthorityArn: !GetAtt RootCA.Arn    # ルートCAを指定して署名してもらう
      CertificateSigningRequest: !GetAtt SubordinateCA.CertificateSigningRequest  # 自分のCSRを指定して、ルートCAに提出する
      SigningAlgorithm: SHA256WITHRSA
      TemplateArn: arn:aws:acm-pca:::template/SubordinateCACertificate_PathLen0/V1
      Validity:
        Type: YEARS
        Value: 5

③ 認証局を有効化する

  # ----------------------------------------------------------
  # CertificateAuthorityActivation ルートCA
  # ----------------------------------------------------------
  RootCAActivation:
    Type: AWS::ACMPCA::CertificateAuthorityActivation
    Properties:
      Certificate: !GetAtt RootCertificate.Certificate
      CertificateAuthorityArn: !GetAtt RootCA.Arn
      Status: ACTIVE

  # ----------------------------------------------------------
  # CertificateAuthorityActivation  下位CA
  # ----------------------------------------------------------
  SubordinateCAActivation:
    Type: AWS::ACMPCA::CertificateAuthorityActivation
    Properties:
      Certificate: !GetAtt SubordinateCertificate.Certificate
      CertificateAuthorityArn: !GetAtt SubordinateCA.Arn
      CertificateChain: !GetAtt RootCertificate.Certificate
      Status: ACTIVE
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?