Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Importante
Esta página inclui instruções para gerenciar componentes do serviço Operações do Azure IoT usando manifestos de implantação do Kubernetes, que estão em versão prévia. Esse recurso é fornecido com várias limitações, e não deve ser usado para cargas de trabalho de produção.
Veja os Termos de Uso Complementares para Versões Prévias do Microsoft Azure para obter termos legais que se aplicam aos recursos do Azure que estão em versão beta, versão prévia ou que, de outra forma, ainda não foram lançados em disponibilidade geral.
As políticas de autorização determinam quais ações os clientes podem executar no agente, como conectar, publicar ou assinar tópicos. Configure o agente MQTT para usar uma ou várias políticas de autorização com o recurso BrokerAuthorization. Cada recurso BrokerAuthorization contém uma lista de regras que especificam as entidades de segurança e os recursos para as políticas de autorização.
Vincular BrokerAuthorization a BrokerListener
Para vincular um recurso BrokerListener a um recurso BrokerAuthorization, especifique o campo authorizationRef
na configuração ports
do recurso BrokerListener. Semelhante a BrokerAuthentication, o recurso BrokerAuthorization pode ser vinculado a várias portas BrokerListener. As políticas de autorização se aplicam a todas as portas de ouvinte vinculadas. Há uma diferença importante em comparação com BrokerAuthentication:
Importante
Para que a configuração BrokerAuthorization se aplique a uma porta de ouvinte, pelo menos um recurso BrokerAuthentication também deve estar vinculado a essa porta de ouvinte.
Para saber mais sobre BrokerListener, consulte o recurso BrokerListener.
Regras de autorização
Para configurar a autorização, crie um recurso BrokerAuthorization no cluster do Kubernetes. As seções a seguir fornecem exemplos de como configurar a autorização para clientes que usam nomes de usuário, atributos, certificados X.509 e SATs (tokens de conta de serviço do Kubernetes). Para uma lista das configurações disponíveis, confira a Referência de API de Autorização do Broker.
O exemplo a seguir mostra como criar um recurso BrokerAuthorization usando nomes de usuário e atributos.
No portal do Azure, navegue até a instância de Operações de IoT.
Em Componentes, selecione Agente MQTT.
Selecione a guia Autorização.
Escolha uma política de autenticação existente ou crie uma nova selecionando Criar política de autorização.
Essa autorização do agente permite que clientes com as IDs do cliente temperature-sensor
ou humidity-sensor
, ou clientes com os atributos organization
, com os valores contoso
e city
, e com o valor seattle
, para:
- Conectar-se ao agente.
- Publicar mensagens em tópicos com escopo de ID de cliente e organização. Por exemplo:
-
temperature-sensor
pode publicar em/sensor/temperature-sensor
e/sensor/contoso
. -
humidity-sensor
pode publicar em/sensor/humidity-sensor
e/sensor/contoso
. -
some-other-username
pode publicar em/sensor/contoso
.
-
- Assine os tópicos
/commands/
com escopo com sua organização. Por exemplo:-
temperature-sensor
pode assinar/commands/contoso
. -
some-other-username
pode assinar/commands/contoso
.
-
Usar um nome de usuário para autorização
Para usar o nome de usuário do MQTT para autorização, especifique-o como uma matriz em principals.usernames
. Dependendo do método de autenticação, o nome de usuário pode não ser verificado:
- Kubernetes SAT: o nome de usuário não deve ser usado para autorização porque não é verificado para MQTTv5 com autenticação aprimorada.
- X.509: o nome de usuário corresponde ao CN (nome comum) de um certificado e pode ser usado para regras de autorização.
- Personalizado: o nome de usuário só deve ser usado para regras de autorização se a autenticação personalizada validar o nome de usuário.
Para evitar problemas de segurança, use o nome de usuário do MQTT para autorização do agente somente quando ele puder ser verificado.
Limitar ainda mais o acesso com base na ID do cliente
Como o campo principals
é um OR
lógico, você pode restringir ainda mais o acesso com base nas IDs do cliente adicionando o campo clientIds
ao campo brokerResources
. Por exemplo, para permitir que clientes com IDs de cliente que começam com o número do seu prédio se conectem e publiquem em tópicos referentes ao seu prédio, use a seguinte configuração:
Nas regras de autorização do agente para a sua política de autorização, use a seguinte configuração:
[
{
"brokerResources": [
{
"clientIds": [
"{principal.attributes.building}*"
],
"method": "Connect",
"topics": []
},
{
"clientIds": [],
"method": "Publish",
"topics": [
"sensors/{principal.attributes.building}/{principal.clientId}/sensor"
]
}
],
"principals": {
"attributes": [
{
"building": "building22"
},
{
"building": "building23"
}
]
}
}
]
Aqui, se o clientIds
não fosse definido no método Connect
, um cliente com qualquer ID de cliente poderia se conectar, desde que tivesse o atributo building
definido como building22
ou building23
. Quando você adiciona o campo clientIds
, somente clientes com IDs de cliente que começam com building22
ou building23
podem se conectar. Essa designação garante que o cliente tenha o atributo correto e que a ID do cliente corresponda ao padrão esperado.
Autorizar clientes que usam a autenticação X.509
Você pode autorizar clientes que usam certificados X.509 para autenticação para acessar recursos com base em propriedades X.509 presentes em seu certificado ou seus certificados emissores na cadeia.
Usar atributos
Para criar regras com base em propriedades do certificado de um cliente, sua AC raiz ou AC intermediária, defina os atributos X.509 no recurso BrokerAuthorization. Para obter mais informações, consulte Atributos de certificado.
Com o nome comum da entidade de certificado do cliente como nome de usuário
Para criar políticas de autorização com base apenas no CN do titular do certificado do cliente, crie regras com base na CN.
Por exemplo, se um cliente tiver um certificado com o assunto CN = smart-lock
, seu nome de usuário será smart-lock
. A partir daí, crie políticas de autorização normalmente.
Autorizar clientes que usam tokens de conta de serviço do Kubernetes
Os atributos de autorização para SATs são definidos como parte das anotações da conta de serviço. Por exemplo, para adicionar um atributo de autorização nomeado group
com o valor authz-sat
, execute o comando:
kubectl annotate serviceaccount mqtt-client aio-broker-auth/group=authz-sat
As anotações de atributo devem começar com aio-broker-auth/
para distingui-las de outras anotações.
Como o aplicativo tem um atributo de autorização chamado authz-sat
, não é necessário fornecer um valor clientId
ou username
. O recurso BrokerAuthorization correspondente usa esse atributo como entidade de segurança, por exemplo:
Nas regras de autorização do agente para a sua política de autorização, use a seguinte configuração:
[
{
"brokerResources": [
{
"clientIds": [],
"method": "Connect",
"topics": []
},
{
"clientIds": [],
"method": "Publish",
"topics": [
"odd-numbered-orders"
]
},
{
"clientIds": [],
"method": "Subscribe",
"topics": [
"orders"
]
}
],
"principals": {
"attributes": [
{
"group": "authz-sat"
}
]
}
}
]
Para saber mais com um exemplo, consulte Configurar a Política de Autorização com o Cliente Dapr.
Armazenamento de estado
O agente MQTT fornece um repositório de estado que os clientes podem usar para armazenar o estado. Você também pode configurar o repositório de estado para estar altamente disponível.
Para configurar a autorização para clientes que usam o repositório de estado, forneça as seguintes permissões:
- Permissão para publicar no armazenamento de valores-chave do sistema do tópico
$services/statestore/_any_/command/invoke/request
- Permissão para assinar o tópico de resposta (definido durante a publicação inicial como um parâmetro)
<response_topic>/#
Chaves do repositório de estado
O repositório de estado é acessado pelo agente MQTT no tópico statestore/v1/FA9AE35F-2F64-47CD-9BFF-08E2B32A0FE8/command/invoke
.
Como os clientes têm acesso ao tópico, você pode especificar chaves e níveis de acesso na seção stateStoreResources
da configuração brokerResources
do agente MQTT.
O formato de seção stateStoreResources
consiste em nível de acesso, um indicador de padrão e o padrão.
Inclua a seção stateStoreResources
nas regras da política de autorização.
"stateStoreResources": [
{
"method": "", // Values: read, write, readwrite
"keyType": "", //Values: string, pattern, binary. Default is pattern
"keys": [
// List of patterns to match
]
},
]
O campo method
especifica o nível de acesso:
- O acesso de leitura é especificado com
read
. O acesso de gravação é especificado comwrite
. O acesso de leitura e gravação é especificado comreadwrite
. - O nível de acesso é necessário.
- O nível de acesso de leitura implica as ações de
get
ekeynotify
. - O nível de acesso de gravação implica as ações de
set
,del
evdel
.
O campo keyType
especifica o tipo de correspondência de chave:
-
pattern
: usado para correspondência de padrões no estilo glob. -
string
: usado para fazer a correspondência exata, por exemplo, quando uma chave contém caracteres que podem ser correspondidos como um padrão (*
,?
,[0-9]
). -
binary
: usado para corresponder a uma chave binária.
O campo keys
especifica as chaves a serem correspondidas. Você pode especificar as chaves como padrões de estilo glob, substituições de token ou cadeias de caracteres exatas.
Exemplos de estilo glob:
-
colors/*
: todas as chaves sob o prefixo "colors/" -
number[0-9]
: qualquer chave de "number0" a "number9" -
char?
: qualquer chave com o prefixo "char" e um sufixo de dígito único, como "charA" -
*
: acesso total a todas as chaves
-
As chaves do repositório de estado também dão suporte à substituição de token quando o tipo de chave é
pattern
e as chaves são reservadas para esta finalidade. Exemplos de substituição de token:clients/{principal.clientId}/*
usernames/{principal.username}/*
rooms/{principal.attributes.room}/*
Aqui está um exemplo de como você pode criar seus recursos do repositório de estado.
Nas regras de autorização do agente para sua política de autorização, adicione uma configuração semelhante:
[
{
"brokerResources": [
{
"clientIds": [
"{principal.attributes.building}*"
],
"method": "Connect"
},
{
"method": "Publish",
"topics": [
"sensors/{principal.attributes.building}/{principal.clientId}/sensor/*"
]
},
{
"method": "Subscribe",
"topics": [
"commands/{principal.attributes.organization}"
]
}
],
"principals": {
"attributes": [
{
"building": "17",
"organization": "contoso"
}
],
"usernames": [
"temperature-sensor",
"humidity-sensor"
]
},
"stateStoreResources": [
{
"method": "Read",
"keyType": "Pattern",
"keys": [
"myreadkey",
"myotherkey?",
"mynumerickeysuffix[0-9]",
"clients/{principal.clientId}/*"
]
},
{
"method": "ReadWrite",
"keyType": "Binary",
"keys": [
"xxxxxxxxxxxxxxxxxxxx"
]
}
]
}
]
Atualizar autorização
Você pode atualizar os recursos de autorização do agente em runtime sem reiniciar. Todos os clientes conectados no momento da atualização da política são desconectados. Também há suporte para alterar o tipo de política.
kubectl edit brokerauthorization my-authz-policies
Desabilitar autorização
- No portal do Azure, navegue até a instância de Operações de IoT.
- Em Componentes, selecione Agente MQTT.
- Selecione o ouvinte do corretor que você deseja editar na lista.
- Na porta em que você deseja desabilitar a autorização, selecione Nenhum na lista suspensa de autorização.
Publicação não autorizada no MQTT 3.1.1
Com o MQTT 3.1.1, quando a publicação é negada, o cliente recebe PUBACK sem erros porque a versão do protocolo não dá suporte ao retorno do código de erro. MQTTv5 retorna PUBACK com o código de motivo 135 (não autorizado) quando a publicação é negada.