TerraformとAzureを用いたTLS:管理証明書の使用


このポストは、AzureのためのTorraformとTLS証明書の生成に関する私のシリーズの最後のものです、ポストの後と1つについて.
これのために、Azureは管理された証明書を使用することによってすべてを管理しようとしています.

以前は「TRARAFORMとAzure」シリーズのTLSで。


あなたはシリーズの前の記事を読んでいない場合は、最初の1つをチェックアウトすることができますシリーズ全体の共通のコンテキストを取得します.
また、この一連の投稿からすべてのコードを含むGITUBリポジトリもあります.

ザビエルミント / 地形証明書


テラフォームを使用して証明書を生成する方法を示すリポジトリ


AzureアプリケーションサービスのためのTerraformによる証明書生成


このリポジトリには、テラフォームを使用してTLS証明書を生成するサンプルコードが含まれます.
それは安全にWebサイトの例としてAzureアプリサービスを使用します.
証明書は3つの方法で生成されます.
  • 自己署名証明書を作成することによって
  • からの証明書を要求することによって
  • Azureアプリサービス管理証明書を作成することによって
  • 明らかに3番目の例はAzureでしか使えません.他の2つは、同様にAzureで動作するように書かれているが、適応することができますまたは他のプラットフォーム上で動作するようにインスピレーションとして使用されます.

    始める


    ルートモジュールの変数を設定する


    Azureインフラストラクチャに対してこれを実行する場合は、ルートモジュールの変数に値を指定する必要があります.
  • The dns_zone_name Azureで管理されているDNSゾーンの名前を含める必要があります
  • The dns_zone_rg_name を含むリソースグループの名前を指定します.
  • View on GitHub
    非常に迅速にいくつかのコンテキストを与えるために、私たちはapp_service Github Repoのモジュールは、カスタムドメインにバインドされたアプリケーションサービスを作成するために、このカスタムドメインを証明書を使用して確保する必要があります.
    我々は既に自己署名証明書を使用してこれをしました、そして、letの暗号化証明書で、現在、我々は管理されたものを使ってそれをしています.

    レベル3:Azureは証明書を扱う


    マネージ証明書の背後にあるアイデアは非常に簡単です:あなたがドメインを所有していることを証明できるならば、Azureはあなたのために証明書を発行します.
    そして、あなたはそれについて心配する必要はありません、Azureはあなたのために証明書を更新します.
    ダイアグラム側では、他の「レベル」よりも簡単に見えます. 図は自己署名証明書とほぼ同じです
    コード側では、我々は以前にカスタムサービスにアプリケーションサービスをバインドしているazurerm_app_service_custom_hostname_binding リソースapp_service モジュール
    # Bind app service to custom domain
    resource "azurerm_app_service_custom_hostname_binding" "app" {
      hostname            = "tf-certs-demo.${var.dns.zone_name}"
      app_service_name    = azurerm_app_service.app.name
      resource_group_name = azurerm_resource_group.rg.name
    
      depends_on = [azurerm_dns_txt_record.app]
    }
    
    managed モジュールを作成し、azurerm_app_service_managed_certificate 引数としてバインドIDのみを指定します.
    resource "azurerm_app_service_managed_certificate" "managed" {
      custom_hostname_binding_id = var.custom_domain_binding_id
    }
    
    そして最後にmain モジュールazurerm_app_service_certificate_binding リソースは、マネージ証明書をカスタムドメインにバインドすることで、すべてをまとめます.
    resource "azurerm_app_service_certificate_binding" "cert_binding" {
      certificate_id      = module.managed.certificate_id
      hostname_binding_id = module.app_service.custom_domain_binding_id
      ssl_state           = "SniEnabled"
    }
    
    シリーズの他のポストと比較して、私は証明書の生成の前後にコードで起こっていることをもう少し詳しく説明しました.さもなければ、私が示すコードの3行しかありません😬
    上記のコードスニペットは、全シリーズのrepoから3モジュールに広げられます.
    私は以前に、あなたが好むならば、一つのモジュールを使用している管理された証明書に専用の別のレポを作りました:

    ザビエルミント / アプリケーションサービスマネージ証明書



    Azureアプリサービスマネージ証明書


    このリポジトリには、アプリケーションサービスの簡単なデモが含まれています.
    View on GitHub
    アプリケーションサービスを閲覧するとき、Geotrust(別名Digicert)によって発行され、もちろんブラウザによって信頼されていることがわかります. 証明書は6ヶ月間信頼され有効です✅

    管理証明書:あまりにも良いことになるか?


    あなたが見ることができるように、それは非常に簡単に管理証明書を生成するために、それはアプリのサービスプランの価格に含まれて無料です.それはあなたのWebアプリケーションを確保するための完全なソリューションのように見えますが、あなたが意識しなければならない欠点があります:マネージ証明書を使用する場合は、あなたのアプリケーションサービスを公開する必要があります.
    あなたがアプリケーションのゲートウェイのようなアプライアンスの背後にあるWebアプリを入れて、このアプライアンスを通過するトラフィックを実施する場合は、それらを使用することはできません.
    それが技術的にそうすることが可能であるとしても😅), これは、アプリケーションのサービスによって証明書が更新されないようにターゲットソリューションです.
    ワイルドカード証明書のサポートの欠如と証明書をエクスポートする不可能性のような他のマイナーな制限がありますが、それは私に公正なようで、それは私の個人的な使用では全く私を悩まなかった.
    これらの制限はhere ドキュメンテーションでは、少し静かに、私はそれを言及する価値があると思います.
    肯定的な注意を終えるために、これらの制限は、管理された証明書が我々のアプリサービスの前でおそらくセキュリティ器具を置く企業シナリオに合うかもしれないことを意味します.
    しかし、個人的なプロジェクト、または小さなもの、概念の証明、サンドボックス環境の場合、それは本当に素晴らしい機能です.

    他のAzureサービスのための管理証明書


    このポストを閉じる前に肯定的なトラックに滞在すると、私は管理された証明書はAzureのアプリケーションサービスに限定されていないことに言及する必要があります.
    私はすでにazureのためにそれらを使用しているCDN ( GAでは、Azurerm Terraform Providerでサポートされている)とAzureAPI Management (現在公開プレビュー中では、まだterraformでサポートされていません).
    他のサービスにも存在する可能性がありますので、カスタムドメインに関連付けられているAzureサービスを使用する場合は、マネージ証明書のサポートを探してください😉

    ラッピング


    この投稿は、AzureのためのTerraformと共に証明書生成のシリーズを閉じます.
    発生方法
    使いやすさ
    セキュリティレベル
    概要
    自己署名証明書
    ✅✅
    🔓
    ここで始めることができますが、できるだけ早く他の方法に移動することを検討してください.
    暗号化しましょう

    🔐🔐🔐
    無料で信頼できるCERTSは、一度セットアップを少しメンテナンスする必要があります.最初は少し理解するのが難しいが、どこでも使用することができます.
    管理証明書
    ✅✅✅
    🔐🔐🔐
    あなたのウェブアプリが直接、そして、公にアクセスできない限り、これを使ってください.または、あなたがウェブアプリを使用していない場合.
    これは、このポストのために、私はこのシリーズは有益であることを願って、これは私が最も快適なトピックではないとして、私は最初の開発者であることを忘れないでください、そして私たちのほとんどは証明書によって怖がっている😱).
    とにかく、Azureで一般的に証明書生成を自動化する方法がいくつかあります.そして、業界は、これまでに、証明書のような公開されたイニシアティブを通して、管理された証明書のようなパブリック・クラウド特有の機能を通して、それを容易にします.
    あなたのニーズに最も合うものを選んでください🤓