Azure IoT Operations でセキュリティで保護された設定を有効にする
Azure IoT Operations のセキュリティで保護された設定には、OPC UA サーバーやデータフロー エンドポイントなどのクラウド接続用のシークレット管理およびユーザー割り当てマネージド ID のセットアップが含まれます。
この記事では、初期デプロイ中に有効にしなかった場合にセキュリティで保護された設定を有効にする手順について説明します。
前提条件
テスト設定でデプロイされた Azure IoT Operations インスタンス。 たとえば、「Azure IoT Operations を Arc 対応 Kubernetes クラスターにデプロイする」の手順に従う場合は、[テスト設定] を選択します。
開発マシンにインストールされた Azure CLI。 このシナリオには、Azure CLI バージョン 2.64.0 以降が必要です。
az --version
を使用してバージョンを確認し、必要に応じてaz upgrade
を使用して更新します。 詳細については、Azure CLIのインストール方法に関するページを参照してください。Azure CLI 用の connectedk8s 拡張機能の最新バージョン。 次のコマンドを使用して、拡張機能を追加するか、それを最新バージョンに更新します。
az extension add --upgrade --name connectedk8s
Azure CLI 用の Azure IoT Operations 拡張機能。 次のコマンドを使用して、拡張機能を追加するか、それを最新バージョンに更新します。
az extension add --upgrade --name azure-iot-ops
セキュリティで保護された設定をクラスターで有効にする
Azure IoT Operations インスタンスのシークレット同期を有効にするには、クラスターを OIDC 発行者として、およびワークロード ID フェデレーション用に有効にする必要があります。 この構成は、シークレット ストア拡張機能で Azure キー コンテナーからシークレットを同期し、Kubernetes シークレットとしてエッジに保存するために必要です。
Azure Kubernetes Service (AKS) クラスターの場合、OIDC 発行者とワークロード ID の機能は、クラスターの作成時にのみ有効にすることができます。 AKS Edge Essentials 上のクラスターの場合、これらの機能は自動スクリプトによって既定で有効になります。 Azure Local 上の AKS クラスターの場合、必要な機能を備えたクラスターがないときは、「Azure Arc クラスターで有効になっている AKS にワークロード ID をデプロイして構成する」の手順に従って新しく作成します。
Kubernetes 上の k3s クラスターの場合は、既存のクラスターを更新できます。 これらの機能を有効にして構成するには、次の手順に従います。
OIDC 発行者とワークロード ID を有効にするようにクラスターを更新します。
az connectedk8s update -n <CLUSTER_NAME> -g <RESOURCE_GROUP> --enable-oidc-issuer --enable-workload-identity
クラスターの作成時に OIDC 発行者とワークロード ID の機能を有効にした場合、前のコマンドをもう一度実行する必要はありません。 次のコマンドを使用して、クラスターの OIDC 発行者とワークロード ID の機能の状態を確認します。
az connectedk8s show -g <RESOURCE_GROUP> -n <CLUSTER_NAME> --query "{ClusterName:name, OIDCIssuerEnabled:oidcIssuerProfile.enabled, WorkloadIdentityEnabled:securityProfile.workloadIdentity.enabled}"
クラスターの発行者の URL を取得します。
az connectedk8s show -g <RESOURCE_GROUP> -n <CLUSTER_NAME> --query oidcIssuerProfile.issuerUrl --output tsv
次の手順で使用するために、このコマンドからの出力を書き留めます。
k3s 構成ファイルを作成します。
sudo nano /etc/rancher/k3s/config.yaml
config.yaml
ファイルに次の内容を追加し、<SERVICE_ACCOUNT_ISSUER>
プレースホルダーを、前にメモしたクラスター発行者の URL に置き換えます。kube-apiserver-arg: - service-account-issuer=<SERVICE_ACCOUNT_ISSUER> - service-account-max-token-expiration=24h
ファイルを保存し、nano エディターを終了します。
k3s サービスを再起動します。
sudo systemctl restart k3s
シークレット管理を設定する
Azure IoT Operations のシークレット管理では、Secret Store 拡張機能を使用して Azure キー コンテナーからシークレットを同期し、Kubernetes シークレットとしてエッジに格納します。 Secret Store 拡張機能には、シークレットが格納されている Azure キー コンテナーにアクセスできるユーザー割り当てマネージド ID が必要です。 詳しくは、「Azure リソースのマネージド ID とは」をご覧ください。
シークレット管理を設定するには:
シークレットの格納に使用される Azure キー コンテナーを作成し、
Key Vault Secrets Officer
ロールを使用してシークレットを管理するためのアクセス許可をユーザー アカウントに付与します。Secret Store 拡張機能のためのユーザー割り当てマネージド ID を作成します。
az iot ops secretsync enable コマンドを使用して、シークレット同期用に Azure IoT Operations インスタンスを設定します。 このコマンドは、次の操作を行います。
- ユーザー割り当てマネージド ID を使用してフェデレーション ID 資格情報を作成します。
- Azure キー コンテナーにアクセスするために、ユーザー割り当てマネージド ID にロールの割り当てを追加します。
- Azure IoT Operations インスタンスに関連付けられている最小シークレット プロバイダー クラスを追加します。
# Variable block AIO_INSTANCE_NAME="<AIO_INSTANCE_NAME>" RESOURCE_GROUP="<RESOURCE_GROUP>" USER_ASSIGNED_MI_NAME="<USER_ASSIGNED_MI_NAME>" KEYVAULT_NAME="<KEYVAULT_NAME>" #Get the resource ID of the user-assigned managed identity USER_ASSIGNED_MI_RESOURCE_ID=$(az identity show --name $USER_ASSIGNED_MI_NAME --resource-group $RESOURCE_GROUP --query id --output tsv) #Get the resource ID of the key vault KEYVAULT_RESOURCE_ID=$(az keyvault show --name $KEYVAULT_NAME --resource-group $RESOURCE_GROUP --query id --output tsv) #Enable secret synchronization az iot ops secretsync enable --instance $AIO_INSTANCE_NAME \ --resource-group $RESOURCE_GROUP \ --mi-user-assigned $USER_ASSIGNED_MI_RESOURCE_ID \ --kv-resource-id $KEYVAULT_RESOURCE_ID
シークレットの同期のセットアップが完了したら、「Azure IoT Operations デプロイ用のシークレットを管理する」を参照して、Azure IoT Operations でシークレットを使用する方法を学習できます。
クラウド接続用にユーザー割り当てマネージド ID を設定する
データフロー エンドポイントなどの一部の Azure IoT Operations コンポーネントでは、クラウド接続にユーザー割り当てマネージド ID が使用されます。 シークレット管理の設定に使用したものとは別の ID を使用することをお勧めします。
クラウド接続に使用されるユーザー割り当てマネージド ID を作成します。
Note
マネージド ID を使用するクラウド リソースにはいずれにも、ID アクセス許可を付与する必要があります。
az iot ops identity assign コマンドを使用して、Azure IoT Operations インスタンスに ID を割り当てます。 このコマンドでは、指定された接続クラスターの OIDC 発行者と Azure IoT Operations サービス アカウントを使用して、フェデレーション ID 資格情報も作成します。
# Variable block AIO_INSTANCE_NAME="<AIO_INSTANCE_NAME>" RESOURCE_GROUP="<RESOURCE_GROUP>" USER_ASSIGNED_MI_NAME="<USER_ASSIGNED_MI_NAME FOR CLOUD CONNECTIONS>" #Get the resource ID of the user-assigned managed identity USER_ASSIGNED_MI_RESOURCE_ID=$(az identity show --name $USER_ASSIGNED_MI_NAME --resource-group $RESOURCE_GROUP --query id --output tsv) #Assign the identity to the Azure IoT Operations instance az iot ops identity assign --name $AIO_INSTANCE_NAME \ --resource-group $RESOURCE_GROUP \ --mi-user-assigned $USER_ASSIGNED_MI_RESOURCE_ID
これで、このマネージド ID をデータフロー エンドポイントでクラウド接続に使用できるようになりました。