🚴‍♂️

Container Apps Enviromentで使える証明書自動ローテだってよ

2024/07/31に公開

前置き

  • どうも生き別れの兄です。生きニキって呼ばれてます。
  • 間違っていたら優しくマサカリを手渡しでください。

はじめに

更新情報を眺めているとコンテナーアプリとKeyVaultが連携できるとやら更新情報に流れてきたのでこれを機に検証してみるか~という感じ。

やってみる

基本的には公式の手順に従います。落とし穴もいくつかあるので注意点を挙げながら進めていきます。
Azure Key Vault から Azure Container Apps に証明書をインポートする (プレビュー)

  1. Azure cliはCloud Shellで実行するため必要なコマンドを事前に打っておきましょう。

    az extension add --name containerapp --upgrade --allow-preview
    
  2. Azure KeyVaultの登録をしていきます。

  3. Azure KeyVaultのIAMで自身のユーザープリンシパルに対して証明書を作る権限を与えておきましょう。
    ここでは キー コンテナー証明書責任者キー コンテナー シークレット責任者 を割り当てます。

  4. 自己署名証明書を作成します。DistinguishedNameでは自身の保持しているCommonNameを指定しておきましょう(yukarism.netは著者の持っているドメインです)。ここでは期限切れを表現するため有効期限を短くしてます。

  5. 作成した証明書からシークレット識別子をメモ帳などに控えておきましょう。

  6. コンテナーアプリを作成します。

  1. ユーザー割り当てマネージドIDを作成しましょう。この時に作成したユーザー割り当てマネージドIDのリソース名をメモ帳などに控えておきましょう。

  2. ユーザー割り当てマネージドIDにAzure KeyVaultへのアクセス権をつけていきましょう。
    ここでは キー コンテナー シークレット ユーザー を付与します。その後にコンテナーアプリ環境にユーザー割り当てマネージドIDを割り当てしましょう。


  1. 以下のコマンドを実行して証明書を登録します。
az containerapp env certificate upload \
  --resource-group <RESOURCE_GROUP> --name <CONTAINER_APP_NAME> \
  --akv-url <KEY_VAULT_URL> \
  --certificate-identity <CERTIFICATE_IDENTITY>
パラメーター 説明
--resource-group コンテナーアプリ環境があるリソースグループ名
--name コンテナーアプリ環境のリソース名
--akv-url 控えておいたAzure KeyVaultのシークレット識別子
--certificate-identity 控えておいたユーザー割り当てマネージドIDのリソース名
  1. 証明書がインポートされているか確認します。

  2. カスタムドメインの設定をしていきましょう。先ほどDistinguishedNameで登録したCommonNameと同じものにしてください。

  3. 著者はパブリックDNSにはRoute53を使っているのでこちらにレコード登録していきます。ここは各々が利用している権威DNSサーバーに置き換えて読み取ってください(即時反映させたいのでTTLは1秒にしてます)。

  4. レコード登録できたら検証していきましょう。検証に成功したら次のような画面になります。

  5. 無事に追加できたら成功です。

  1. カスタムドメインでコンテナーアプリへアクセスしましょう(ルート証明書がインポートされてないので検証に失敗してエラーが出ますが気にせず表示しましょう)。
    画面が表示されれば成功です。

  2. 最後にリソースをクリーンアップして終わりです。

おわりに

証明書の更新みたいなトイルは積極的に削減していきたいですな。

Discussion