Azure IoT MQ プレビューで Azure Key Vault または Kubernetes シークレットを使用してシークレットを管理する
重要
Azure Arc によって有効にされる Azure IoT Operations Preview は、 現在プレビュー段階です。 運用環境ではこのプレビュー ソフトウェアを使わないでください。
ベータ版、プレビュー版、または一般提供としてまだリリースされていない Azure の機能に適用される法律条項については、「Microsoft Azure プレビューの追加使用条件」を参照してください。
Azure Key Vault を使用して、Kubernetes シークレットの代わりに、Azure IoT MQ プレビューの分散 MQTT ブローカーのシークレットを管理できます。 この記事では、ブローカー用に Key Vault を設定し、それを使用してシークレットを管理する方法について説明します。
前提条件
シークレットを含む Azure Key Vault インスタンス。
Key Vault インスタンス内のシークレットに対する
get
とlist
のアクセス許可を持つ Microsoft Entra サービス プリンシパル。 Key Vault のアクセス許可のサービス プリンシパルを構成するには、「Key Vault アクセス ポリシーを割り当てる」を参照してください。既定の
aio-akv-sp
シークレットがある次の例のような、サービス プリンシパルの資格情報を含む Kubernetes シークレット。apiVersion: v1 kind: Secret metadata: name: aio-akv-sp namespace: azure-iot-operations type: Opaque data: clientid: <base64 encoded client id> clientsecret: <base64 encoded client secret>
シークレット管理に Azure Key Vault を使用する
keyVault
フィールドは、Kubernetes シークレット (secretName
) が使用されている場所で使用できます。 次の表では、keyVault
フィールドのプロパティについて説明します。
プロパティ | Required | 説明 |
---|---|---|
コンテナー | はい | シークレットを格納する Azure Key Vault を指定します。 |
vault.name | はい | Azure Key Vault の名前を指定します。 Azure portal から Key Vault 名を取得するには、Key Vault インスタンスに移動し、[概要] ページから名前をコピーします。 |
vault.directoryId | はい | Microsoft Entra テナント ID を指定します。 Azure portal からテナント ID を取得するには、Key Vault インスタンスに移動し、[概要] ページからテナント ID をコピーします。 |
vault.credentials.servicePrincipalLocalSecretName | はい | サービス プリンシパルの資格情報を含むシークレットの名前を指定します。 |
vaultSecret | はい (通常の Key Vault シークレットを使用する場合) | Azure Key Vault 内のシークレットを指定します。 |
vaultSecret.name | はい | シークレットの名前を指定します。 |
vaultSecret.version | いいえ | シークレットのバージョンを指定します。 |
vaultCert | はい (Key Vault 証明書を使用する場合) | Azure Key Vault 内の証明書を指定します。 |
vaultCert.name | はい | 証明書シークレットの名前を指定します。 |
vaultCert.version | いいえ | 証明書シークレットのバージョンを指定します。 |
vaultCaChainSecret | はい (証明書チェーンを使用する場合) | Azure Key Vault 内の証明書チェーンを指定します。 |
vaultCaChainSecret.name | はい | 証明書チェーンの名前を指定します。 |
vaultCaChainSecret.version | いいえ | 証明書チェーンのバージョンを指定します。 |
username | いいえ | Event Hubs Kafka コネクターでのみ使用されます。「Azure IoT MQ と Event Hubs または Kafka の間でメッセージを送受信する」を参照してください。 |
使用するシークレットの種類に応じて、次のどのフィールドを使用できるかが決まります。
vaultSecret
: 通常のシークレットを使用する場合は、このフィールドを使用します。 たとえば、usernamePassword
フィールドを使用して BrokerAuthentication リソースを構成するためにこのフィールドを使用できます。vaultCert
: クライアント証明書およびキーとともに証明書タイプのシークレットを使用する場合は、このフィールドを使用します。 たとえば、BrokerListener で TLS を有効にするためにこのフィールドを使用できます。vaultCaChainSecret
: 追加のすべての中間またはルート証明書を含む、完全な証明書チェーンをリモート サーバーに提示する必要がある場合は、このフィールドを使用します。 たとえば、remoteBrokerConnection
フィールドを使用して MqttBridgeConnector リソースを構成するためにこのフィールドを使用できます。 このフィールドを使用するには、(証明書タイプでなく) 複数行の通常のシークレットとしての PEM 形式の秘密キーがない X.509 証明書を Key Vault にインポートします。 このフィールドは、クライアント証明書と秘密キーを持つvaultCert
に加えて使用する必要があります。
例
たとえば、サーバー証明書のシークレット管理に Azure Key Vault を使用する TLS BrokerListener を作成するには、次の YAML を使用します。
apiVersion: mq.iotoperations.azure.com/v1beta1
kind: BrokerListener
metadata:
name: tls-listener-manual
namespace: azure-iot-operations
spec:
brokerRef: broker
authenticationEnabled: true
authorizationEnabled: false
port: 8883
tls:
keyVault:
vault:
name: my-key-vault
directoryId: <AKV directory ID>
credentials:
servicePrincipalLocalSecretName: aio-akv-sp
vaultCert:
name: my-server-certificate
# version: 939ecc2...
次の例は、BrokerAuthentication リソースの usernamePassword
フィールドに対して Azure Key Vault を使用する方法を示します。
apiVersion: mq.iotoperations.azure.com/v1beta1
kind: BrokerAuthentication
metadata:
name: my-authentication
namespace: azure-iot-operations
spec:
listenerRef:
- tls-listener-manual
authenicationMethods:
- usernamePassword:
keyVault:
vault:
name: my-key-vault
directoryId: <AKV directory ID>
credentials:
servicePrincipalLocalSecretName: aio-akv-sp
vaultSecret:
name: my-username-password-db
# version: 939ecc2...
この例では、MQTT ブリッジのリモート ブローカー資格情報に Azure Key Vault を使用する方法を示します。
apiVersion: mq.iotoperations.azure.com/v1beta1
kind: MqttBridgeConnector
metadata:
name: my-bridge
namespace: azure-iot-operations
spec:
image:
repository: mcr.microsoft.com/azureiotoperations/mqttbridge
tag: 0.4.0-preview
pullPolicy: IfNotPresent
protocol: v5
bridgeInstances: 1
remoteBrokerConnection:
endpoint: example.broker.endpoint:8883
tls:
tlsEnabled: true
trustedCaCertificateConfigMap: my-ca-certificate
authentication:
x509:
keyVault:
vault:
name: my-key-vault
directoryId: <AKV directory ID>
credentials:
servicePrincipalLocalSecretName: aio-akv-sp
vaultCaChainSecret:
name: my-remote-broker-certificate
# version: 939ecc2...