次の方法で共有


Azure リソースに安全に接続するか、プライベート リポジトリを複製する

カスタマイズ プロセス中にリポジトリや Azure リソースなどのリソースにアクセスする場合は、安全に認証する必要があります。 カスタマイズ ファイル内の Azure Key Vault シークレットを参照して機密情報が公開されないようにしたり、セキュリティで保護されたリソース アクセスのためにサービス プリンシパルを使用して Azure に対する認証を行うことができます。 この記事では、開発ボックスのカスタマイズ中にリソースを安全に管理およびアクセスする方法について説明します。

カスタマイズ ファイルで Key Vault シークレットを使用する

YAML カスタマイズで Azure Key Vault のシークレットを使用して、プライベート リポジトリを複製するか、アクセス トークンを必要とするタスクを実行します。 たとえば、カスタマイズ ファイルでは、Azure Key Vault に格納されている個人用アクセス トークン (PAT) を使用してプライベート リポジトリにアクセスします。

チームとユーザーのカスタマイズの両方で、キー ボールトからシークレットを取得することがサポートされています。 イメージ定義ファイルを使用するチームのカスタマイズでは、 image パラメーターを使用して開発ボックスの基本イメージを定義し、開発ボックスの作成時に実行されるタスクを一覧表示します。 ユーザーのカスタマイズには、開発ボックスの作成時に実行されるタスクが一覧表示されます。

PAT などのシークレットをカスタマイズ ファイルで使用するには、それをキー コンテナー シークレットとして格納します。 次の例は、両方の種類のカスタマイズでキー ボールト シークレットを参照する方法を示しています。

カスタマイズ用に Key Vault アクセスを構成する

チームまたはユーザーのカスタマイズで使用するキー コンテナー シークレットを構成するには、デベロッパー センター プロジェクトのマネージド ID にキー コンテナーの Key Vault シークレット ユーザー ロールがあることを確認します。

キー コンテナーがプライベートの場合は、デベロッパー センターでサービス タグがまだサポートされていないため、信頼された Microsoft サービスがファイアウォールをバイパスできるようにします。

次のスクリーンショットは、信頼された Microsoft サービスが Azure Key Vault の設定でファイアウォールをバイパスできるようにするオプションを示しています。

信頼された Microsoft サービスが Azure Key Vault の設定でファイアウォールをバイパスできるようにするオプションのスクリーンショット。

信頼された Microsoft サービスにファイアウォールをバイパスさせる方法の詳細については、「 Azure Key Vault のネットワーク設定を構成する」を参照してください。

ユーザーカスタマイズの追加構成

ユーザーのカスタマイズ用にキーボールトのシークレットを構成するには、次のステップを実行します。

  1. デベロッパー センター プロジェクトのマネージド ID に、キー コンテナーで Key Vault 閲覧者ロール と Key Vault シークレット ユーザー ロール の両方が割り当てられていることを確認します。
  2. デベロッパー センターのマネージド ID、管理者アカウント、その他の必要なユーザーまたはグループなど、開発ボックスのカスタマイズ時にシークレットを必要とする各ユーザーまたはグループに、シークレットの Key Vault シークレット ユーザー ロールを付与します。

チームのカスタマイズの例

この構文では、イメージ定義ファイルでキー コンテナー シークレット (PAT) を使用します。 KEY_VAULT_SECRET_URIは、キー コンテナー内のシークレットの URI です。

$schema: "<SCHEMA_VERSION>"
name: "<IMAGE_DEFINITION_NAME>"
image: "<BASE_IMAGE>"
description: "<DESCRIPTION>"

tasks:
  - name: <TASK_NAME>
    description: <TASK_DESCRIPTION>
    parameters:
      repositoryUrl: <REPOSITORY_URL>
      directory: <DIRECTORY_PATH>
      pat: "{{<KEY_VAULT_SECRET_URI>}}"

この例では、 git-clone タスクを使用します。

$schema: "1.0"
name: "example-image-definition"
image: microsoftvisualstudio_visualstudioplustools_vs-2022-ent-general-win11-m365-gen2
description: "Clones a public example Git repository"

tasks:
  - name: git-clone
    description: Clone this repository into C:\workspaces
    parameters:
      repositoryUrl: https://github.com/example-org/example-repo.git
      directory: C:\workspaces
      pat: "{{https://contoso-vault.vault.azure.net/secrets/github-pat}}"

または、次の例に示すように、組み込みタスクでシークレットをインラインで参照することもできます。

$schema: "1.0" 
name: "example-image-definition"
image: microsoftvisualstudio_visualstudioplustools_vs-2022-ent-general-win11-m365-gen2
description: "Clones a public example Git repository"

tasks:  
- name: git-clone
    description: Clone this repository into C:\Workspaces 
    parameters: 
    command: MyCommand –MyParam "{{KEY_VAULT_SECRET_URI}}"

ユーザーのカスタマイズの例

ユーザーのカスタマイズにより、キー コンテナーから PAT を明示的に指定することなく、プライベート リポジトリを複製する Azure DevOps トークンを取得できます。 サービスは、実行時に Azure トークンと Azure DevOps トークンを自動的に交換します。

この例では、ADO の短縮形 ({{ado://...}}) を示します。 サービスは実行時に Azure トークンと Azure DevOps トークンを交換するため、KEY Vault に PAT を格納する必要はありません。

$schema: "1.0"
tasks:
  - name: git-clone
    description: Clone this repository into C:\workspaces
    parameters:
      repositoryUrl: https://dev.azure.com/example-org/MyProject/_git/example-repo
      directory: C:\workspaces
      pat: '{{ado://example-org}}'

Dev Box Visual Studio Code 拡張機能と Dev Box CLI は、カスタマイズ用の内ループテストワークフローでシークレットを注入することをサポートしていません。

サービス プリンシパルを使用して Azure リソースに対する認証を行う

サービス プリンシパルを使用すると、ユーザーの資格情報を公開することなく、Azure リソースに対して安全に認証できます。 サービス プリンシパルを作成し、必要なロールを割り当てて、それを使用してカスタマイズ タスクで認証します。 既存のシークレット機能を使用して、カスタマイズ時に Key Vault からパスワードをハイドレートします。

  1. Azure Active Directory (Azure AD) でサービス プリンシパルを作成し、使用するリソースに必要なロールを割り当てます。

    出力は、サービス プリンシパルの appIddisplayNameパスワードテナントを含む JSON オブジェクトであり、Azure Automation シナリオでの認証と承認に使用されます。

    例: サービス プリンシパルを作成するときの CLI 出力。 返されたパスワードを Key Vault に格納し、Key Vault シークレット ユーザー ロールをデベロッパー センター プロジェクト ID に付与して、カスタマイズが実行時にシークレットをハイドレートできるようにします。

    $ az ad sp create-for-rbac -n DevBoxCustomizationsTest
    
    {
      "appId": "...",
      "displayName": "DevBoxCustomizationsTest",
      "password": "...",
      "tenant": "..."
    }
    
  2. 上記で返されたパスワードを、次のように Key Vault シークレットに格納します。 https://mykeyvault.vault.azure.net/secrets/password

  3. Key Vault で、 Key Vault シークレットのユーザー ロールをプロジェクト ID に付与します。

カスタマイズ タスクで認証を行い、カスタマイズ時に Key Vault からサービス プリンシパルのパスワードをハイドレートできるようになりました。

例: Azure Storage からファイルをダウンロードする

次の例は、ストレージ アカウントからファイルをダウンロードする方法を示しています。 YAML スニペットは、次の 2 つの主要なタスクを実行する Dev Box のカスタマイズを定義します。

  1. winget パッケージ マネージャーを使用して Azure CLI をインストールします。

  2. 次の PowerShell スクリプトを実行します。

    • Azure Key Vault から安全に取得されたパスワードを使用して、サービス プリンシパルを使用して Azure にログインします。
    • 認証されたセッションを使用して、Azure Storage アカウントから BLOB (ファイル) をダウンロードします。

    例: Key Vault からサービス プリンシパルのパスワードをハイドレートし、それを使用して認証を行い、Azure Storage から BLOB をダウンロードするカスタマイズ。 サービス プリンシパルのパスワードを Key Vault に格納し、プロジェクト ID に Key Vault シークレット ユーザー ロールがあることを確認します。

    $schema: "1.0"
    name: "devbox-customization"
    tasks:
      - name: ~/winget
        parameters:
          package: Microsoft.AzureCLI
      - name: ~/powershell
        parameters:
          command: |
            az login --service-principal `
              --username <appId> `
              --password {{https://mykeyvault.vault.azure.net/secrets/password}} `
              --tenant <tenantId>
            az storage blob download `
              --account-name <storage_account_name> `
              --container-name <container_name> `
              --name <blob_name> `
              --file <local_file_path> `
              --auth-mode login
    

このセットアップにより、スクリプトで資格情報を公開することなく、Dev Box のプロビジョニング中に Azure リソースの安全な使用を自動化できます。

例: Azure DevOps から成果物をダウンロードする

認証にサービス プリンシパルを使用して、Azure DevOps (ADO) からビルド成果物をダウンロードします。 サービス プリンシパルのアプリケーション ID (appId) を Azure DevOps 組織のユーザーとして追加し、そのプリンシパルを 閲覧者 グループに割り当てます。 この手順では、ビルド成果物を使用するために必要なアクセス許可を付与します。

これらの手順を構成したら、カスタマイズ タスクでサービス プリンシパルの資格情報を使用して、Azure DevOps から成果物を安全に認証およびダウンロードします。

Azure DevOps 組織にサービス プリンシパルを追加する

Azure DevOps 組織にサービス プリンシパルを追加するには:

  1. Azure DevOps 組織にサインインし、 組織の設定を開きます。

  2. メニューの [ユーザー] を選択 します

  3. [ ユーザー ] ページで、[ ユーザーの追加] を選択します。

  4. [ 新しいユーザーの追加 ] ダイアログで、次の情報を入力します。

    Azure DevOps の [新しいユーザーの追加] ダイアログのスクリーンショット。ユーザーの電子メール、アクセス レベル、プロジェクト、グループの割り当てのフィールドが表示されています。

    • ユーザー: ユーザーの電子メールとして、サービス プリンシパルのアプリケーション ID (appId) を入力します。
    • アクセス レベル: [基本] を選択します。
    • プロジェクトに追加: サービス プリンシパルを追加するプロジェクトを選択します。
    • Azure DevOps グループ: サービス プリンシパルを 閲覧者 グループに割り当てます。
  5. 必要なアクセス許可を付与するプロセスを完了します。

DevOps 組織にユーザーを追加する方法の詳細については、「 組織ユーザーの追加とアクセスの管理」を参照してください。