Share via


Azure IoT Operations Preview デプロイ用のシークレットを管理する

重要

Azure Arc によって有効にされる Azure IoT Operations Preview は、 現在プレビュー段階です。 運用環境ではこのプレビュー ソフトウェアを使わないでください。

ベータ版、プレビュー版、または一般提供としてまだリリースされていない Azure の機能に適用される法律条項については、「Microsoft Azure プレビューの追加使用条件」を参照してください。

Azure IoT Operations Preview におけるシークレットの管理には、クラウド上で管理されたコンテナー ソリューションである Azure Key Vault を使用し、シークレット ストア CSI ドライバーを使ってシークレットをクラウドから引き出し、エッジ上に保管します。

前提条件

  • Arc 対応 Kubernetes クラスター。 詳細については、「クラスターの準備」を参照してください。

クラスターでシークレット ストアを構成する

Azure IoT Operations では、シークレットと証明書を保存するためのキー コンテナーがサポートされています。 Azure CLI コマンドの az iot ops init は、キー コンテナーへのアクセス権を付与するためのサービス プリンシパルを設定し、Azure IoT Operations の実行に必要なシークレットを構成する手順を自動化します。

詳細については、「Azure IoT Operations プレビューの拡張機能を Kubernetes クラスターにデプロイする」を参照してください。

サービス プリンシパルとキー コンテナーを手動で構成する

az iot ops init コマンドを実行する Azure アカウントに、Microsoft Graph に対してクエリを実行し、サービス プリンシパルを作成するためのアクセス許可がない場合は、Azure IoT Operations 拡張機能のデプロイに関するページの説明に従って、これらを事前に準備し、CLI コマンドを実行するときに追加の引数を使用することができます。

Microsoft Entra ID を介してキー コンテナーを操作するためのサービス プリンシパルを構成する

Azure IoT Operations アプリケーションがキー コンテナーへの認証に使用するための新しいアプリケーションの登録を作成するには、以下の手順に従います。

まず、Microsoft Entra ID でアプリケーションを登録します。

  1. Azure portal の検索バーで、Microsoft Entra ID を検索して選択します。

  2. Microsoft Entra ID メニューの [管理] セクションから [アプリの登録] を選択します。

  3. [新規登録] を選択します。

  4. [アプリケーションの登録] ページで、次の情報を入力します。

    フィールド
    名前 アプリケーションの名前を指定します。
    サポートされているアカウントの種類 この組織ディレクトリ内のアカウントのみ (<YOUR_TENANT_NAME> のみ - シングル テナント) が選択されていることを確認します。
    リダイレクト URI プラットフォームとして [Web] を選択します。 Web アドレスは空のままにしておくことができます。
  5. 登録 を選択します。

    アプリケーションが作成されると、そのリソース ページにリダイレクトされます。

  6. アプリ登録の概要ページからアプリケーション (クライアント) ID をコピーします。 この値は、az iot ops init コマンドを使用して Azure IoT Operations デプロイを実行するときに引数として使用します。

次に、以下のようにアプリケーションにキー コンテナーに対するアクセス許可を付与します。

  1. アプリのリソース ページで、アプリ メニュー の [管理] セクションから [API のアクセス許可] を選択します。

  2. アクセス許可の追加 を選択します。

  3. [API のアクセス許可の要求] ページで、下にスクロールし、[Azure Key Vault] を選択します。

  4. デリゲートされたアクセス許可を選択します。

  5. チェック ボックスをオンにして、user_impersonation アクセス許可を選択します。

  6. アクセス許可の追加 を選択します。

以下のように Kubernetes クラスターに追加されるキー コンテナーに対する認証用のクライアント シークレットを作成します。

  1. アプリのリソース ページで、アプリ メニュー の [管理] セクションから [証明書とシークレット] を選択します。

  2. [新しいクライアント シークレット] を選択します。

  3. シークレットの説明 (省略可能) を入力し、[追加] を選択します。

  4. 新しいシークレットから [値] をコピーします。 この値は、後で az iot ops init を実行するときに使用します。

サービス プリンシパル オブジェクト ID を取得します。

  1. アプリの [概要] ページの [要点] セクションで、[ローカル ディレクトリのマネージド アプリケーション][アプリケーション名] リンクを選択します。 エンタープライズ アプリケーションのプロパティが開きます。 az iot ops init の実行時に使用するオブジェクト ID をコピーします。

Key Vault を作成します

新しい Azure キー コンテナー インスタンスを作成し、それがコンテナー アクセス ポリシーに対するアクセス許可モデル セットを持っていることを確認します。

az keyvault create --enable-rbac-authorization false --name "<your unique key vault name>" --resource-group "<the name of the resource group>"

既存のキー コンテナーがある場合は、次を実行してアクセス許可モデルを変更できます。

az keyvault update --name "<your unique key vault name>" --resource-group "<the name of the resource group>" --enable-rbac-authorization false 

az iot ops init の実行時に Key Vault リソース ID が必要になります。 リソース ID を取得するには、次のコマンドを実行します。

az keyvault show --name "<your unique key vault name>" --resource-group "<the name of the resource group>" --query id  -o tsv

キー コンテナーでサービス プリンシパル アクセス ポリシーを設定する

Azure IoT Operations がシークレット ストアを操作するには、新しく作成されたサービス プリンシパルにシークレットlist および get アクセス ポリシーが必要です。

キー コンテナー アクセス ポリシーを管理するには、CLI にログインしているプリンシパルに十分な Azure のアクセス許可が必要です。 ロールベースのアクセス制御 (RBAC) モデルでは、このアクセス許可はキー コンテナーの共同作成者以上のロールに含まれています。

ヒント

ユーザーがログインした CLI プリンシパルを使用してキー コンテナーを作成した場合、おそらくユーザーは既に適切なアクセス許可を持っています。 しかし、別のキー コンテナーまたは既存のキー コンテナーをポイントする場合は、アクセス ポリシーを設定するための十分なアクセス許可があることを確認する必要があります。

次を実行して、シークレットlistget アクセス許可をサービス プリンシパルに割り当てます。

az keyvault set-policy --name "<your unique key vault name>" --resource-group "<the name of the resource group>" --object-id <Object ID copied from Enterprise Application SP in Microsoft Entra ID> --secret-permissions get list

サービス プリンシパルと Key Vault 引数を Azure IoT Operations デプロイに渡す

Azure IoT Operations 拡張機能のデプロイ ガイドに従う場合、事前構成済みのサービス プリンシパルとキー コンテナーを使用するために、az iot ops init コマンドに追加のフラグを渡します。

次の例では、 --no-deploy フラグを使用して、クラスターを完全にデプロイせずに、Azure IoT Operations 用にクラスターを準備する方法を示します。 既定の Azure IoT Operations デプロイでは、この引数を指定せずにコマンドを実行することもできます。

az iot ops init --name "<your unique key vault name>" --resource-group "<the name of the resource group>" \
    --kv-id <Key Vault Resource ID> \
    --sp-app-id <Application registration App ID (client ID) from Microsoft Entra ID> \
    --sp-object-id <Object ID copied from Enterprise Application in Microsoft Entra ID> \
    --sp-secret "<Client Secret from App registration in Microsoft Entra ID>" \
    --no-deploy

init コマンドが実行する手順の 1 つは、Azure IoT Operations で必要なすべてのシークレット プロバイダー クラス (SPC) が、キー コンテナーで構成された既定のシークレットを持っていることを確認することです。 既定のシークレットの値が存在しない場合、init がそれを作成します。 この手順では、CLI にログインしているプリンシパルがシークレットの set アクセス許可を持っていることが必要です。 既存のシークレットを既定の SPC シークレットとして使用したい場合は、--kv-sat-secret-name パラメーターでそのシークレットを指定できます。この場合、ログイン プリンシパルに必要なシークレットのアクセス許可は get だけです。

シークレットを Azure IoT Operations コンポーネントに追加します。

クラスター上のシークレット ストアの設定が完了したら、キー コンテナー シークレットの作成と追加を行えます。

  1. 必要な名前と値を使用して Key Vault にシークレットを作成します。 シークレットは、Azure portal または az keyvault secret set コマンドを使用して作成できます。

  2. お使いのクラスターで、シークレットを追加したいコンポーネントのシークレット プロバイダー クラス (SPC) を特定します。 たとえば、aio-default-spc のようにします。 次のコマンドを使用して、クラスター上のすべての SPC を一覧表示します。

    kubectl get secretproviderclasses -A
    
  3. 任意のテキスト エディターで ファイルを開きます。 k9s をお使いの場合は、e を入力して編集します。

  4. spec.parameters.objects.array の下にあるリストにそのシークレット オブジェクトを追加します。 次に例を示します。

    spec:
      parameters:
        keyvaultName: my-key-vault
        objects: |
          array:
            - |
              objectName: PlaceholderSecret
              objectType: secret
              objectVersion: ""
    
  5. 変更を保存して、お使いのクラスターに適用します。 k9s をお使いの場合は、行った変更は自動的に適用されます。

CSI ドライバーは、ポーリング間隔を使用してシークレットを更新するため、次のポーリング間隔まで新しいシークレットをポッドで使用することはできません。 コンポーネントをすぐに更新するには、コンポーネントのポッドを再起動します。 たとえば、データ プロセッサ コンポーネントを再起動するには、次のコマンドを実行します。

kubectl delete pod aio-dp-reader-worker-0 -n azure-iot-operations
kubectl delete pod aio-dp-runner-worker-0 -n azure-iot-operations

Azure IoT MQ Preview のシークレット

Azure Key Vault for Azure IoT MQ Preview を使用してシークレットを管理する手順は異なります。 詳細については、「キー コンテナーを使用した MQ シークレットの管理」を参照してください。