Azure Key Vault を使用してパッケージに署名する

Visual Studio 2022 バージョン 17.8 プレビュー 2 以降では、Azure Key Vault に保存されている証明書を使用して UWP およびデスクトップ アプリ パッケージに署名することができます。 このツールは、選択した証明書による暗号化署名のために、アプリ パッケージ ダイジェスト (ハッシュ) を Azure Key Vault に送信します。 その後、署名されたダイジェストが返され、ローカルでパッケージにアタッチされます。

重要

このプロセスは安全です。 証明書の秘密キーは Azure Key Vault で管理されます。

前提条件

  • Azure アカウント。 まだ Azure アカウントをお持ちでない場合は、こちらから開始します。
  • Azure Key Vault。 詳しくは、キー コンテナーの作成に関するページをご覧ください。
  • Azure Key Vault にインポートされた、有効なパッケージの署名証明書。 Azure Key Vault で生成される既定の証明書は、コード署名には使用できません。 パッケージの署名証明書を作成する方法の詳細については、「パッケージ署名用の証明書を作成する」を参照してください。

Key Vault に証明書をインポートする

Key Vault に証明書を追加するのは、とても簡単です。 この例では、UwpSigningCert.pfx という名前の有効な UWP コード署名証明書を追加します。

  1. Key Vault のプロパティ ページで、 [証明書] を選択します。
  2. [Generate/Import](生成/インポート) をクリックします。
  3. [証明書の作成] 画面で、次の値を選択します。
    • 証明書の作成方法: Import
    • 証明書名: UwpSigningCert
    • 証明書ファイルのアップロード: UwpSigningCert.pfx
    • 証明書の暗号化の解除: 証明書がパスワードで保護されている場合は、そのパスワードを [パスワード] フィールドに指定します。
  4. Create をクリックしてください。

Note

自己署名証明書は、管理者によってインポートおよび信頼されている場合を除き、Windows では信頼されません。 自己署名証明書を含めて、すべての証明書のセキュリティを確保してください。

Key Vault のアクセス ポリシーを構成する

[アクセス ポリシー] を使用することにより、Key Vault のコンテンツにアクセスできるユーザーを制御することができます。 Key Vault のアクセス ポリシーは、キー、シークレット、証明書に対して、アクセス許可を個別に付与することができます。 シークレットに対してではなく、キー対してにのみユーザー アクセスを付与することができます。 キー、シークレット、証明書に対するアクセス許可は、コンテナー レベルで管理できます。 詳細については、「Azure Key Vault セキュリティ」を参照してください。

Note

Azure サブスクリプションで Key Vault を作成すると、それはサブスクリプションの Azure Active Directory テナントに自動的に関連付けられます。 Key Vault のコンテンツを管理または取得しようとするユーザーは、Azure AD で認証を行う必要があります。

  1. Key Vault のプロパティ ページで、[アクセス ポリシー] を選択します。
  2. [+ アクセス ポリシーの追加] を選択します。
  3. [証明書のアクセス許可] ドロップダウンをクリックして、[証明書の管理操作] にある [取得] および [一覧] にチェックを入れます。
  4. [シークレットのアクセス許可] ドロップダウンをクリックして、[シークレットの管理操作] にある [取得] および [一覧] にチェックを入れます。
  5. [プリンシパルの選択] をクリックして、アクセスを付与するユーザーを検索し、[選択] をクリックします。
  6. [追加] をクリックします。
  7. [保存] をクリックして変更を保存します。

Note

ユーザーにキー コンテナーへの直接アクセスを許可することは推奨されません。 理想としては、ユーザーを Azure AD グループに追加し、そのグループにキー コンテナーへのアクセスを許可します。

Visual Studio で Key Vault から証明書を選択する

Visual Studio の [アプリ パッケージの作成] ウィザードでは、アプリ パッケージへの署名に使用される証明書を選択することができます。 Azure Key Vault を使用して、パッケージの署名証明書を選択できます。 証明書を含む Key Vault の URI を指定する必要があり、Visual Studio で認証される Microsoft アカウントには、それにアクセスするための適切なアクセス許可が必要です。

  1. Visual Studio で、UWP アプリケーション プロジェクトまたはデスクトップの Windows アプリケーション パッケージ プロジェクトを開きます。
  2. [発行]>[パッケージ]>[アプリ パッケージの作成...] を選択して、[アプリ パッケージの作成] ウィザードを開きます。
  3. [Select distribution method]\(配布方法の選択\) ページで、[サイドローディング] を選択します。
  4. [Select signing method]\(署名方法の選択\) ページで、[Select from Azure Key Vault...]\(Azure Key Vault から選択...\) をクリックします。
  5. [Select a certificate from Azure Key Vault]\(Azure Key Vault から証明書を選択する\) ダイアログが表示されたら、アカウント ピッカーを使用して、アクセス ポリシーの構成対象であるアカウントを選択します。
  6. Key Vault の URI を入力します。 URI は Key Vault の [概要] ページにあり、[DNS 名] で識別できます。
  7. [メタデータの表示] ボタンをクリックします。
  8. 証明書の読み込みが完了したら、一覧から目的のものを選択します (UwpSigningCert など)。
  9. OK をクリックします。

Azure Key Vault からのパスワードを使用して、証明書の暗号化を解除する

ローカル パスワードで保護された証明書 (.pfx) を使用してアプリ パッケージに署名する場合、暗号化の解除に使用するパスワードを管理することは難しくなります。 [アプリ パッケージの作成] ウィザードで証明書をインポートする際に、パスワードを手動でインストールするように求められます。 代わりに、Azure Key Vault からパスワードを選択することもできます。

  1. Visual Studio で、UWP アプリケーション プロジェクトまたはデスクトップの Windows アプリケーション パッケージ プロジェクトを開きます。
  2. [発行]>[パッケージ]>[アプリ パッケージの作成...] を選択して、[アプリ パッケージの作成] ウィザードを開きます。
  3. [Select distribution method]\(配布方法の選択\) ページで、[サイドローディング] を選択します。
  4. [Select signing method]\(署名方法の選択\) ページで、[ファイルから選択...] をクリックします。
  5. [Certificate is password protected]\(証明書はパスワードで保護されています\) ダイアログが表示されたら、[Select Password From Key Vault]\(Key Vault からパスワードを選択する\) をクリックします。
  6. [Select a password from Azure Key Vault]\(Azure Key Vault からパスワードを選択する\) ダイアログが表示されたら、アカウント ピッカーを使用して、アクセス ポリシーの構成対象であるアカウントを選択します。
  7. Key Vault の URI を入力します。 URI は Key Vault の [概要] ページにあり、[DNS 名] で識別できます。
  8. [メタデータの表示] ボタンをクリックします。
  9. パスワードの読み込みが完了したら、一覧から目的のものを選択します (UwpSigningCertPassword など)。
  10. OK をクリックします。

CI/CD シナリオでのサインインを有効にする

CI/CD シナリオでのサインインを有効にするには、DefaultAzureCredential を使用して Azure Key Vault で認証するようにパイプラインを構成する必要があります。 DefaultAzureCredential は、適切なアクセス許可がある場合、パイプライン エージェントの ID を使用してキー コンテナーにアクセスしようとします。 別の方法として、認証に使用するサービス プリンシパルまたはマネージド ID を指定することもできます。