Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo fornece orientações para melhor gerir os requisitos de configuração da função de rede utilizando o Azure Operator Service Manager. Isto inclui o desenho de esquemas de grupos de configuração ótimos (CGSs), valores de grupos de configuração (CGVs) e modelos de recursos networkFunctions (NFs). Tenha estas práticas em mente ao integrar e implementar NFs.
Abordagem de configuração
Considere as seguintes diretrizes para meta-esquemas ao desenhar recursos de configuração:
- Primeiro, escolha quais os parâmetros a expor ao operador.
- Uma regra prática é expor parâmetros suportados por operação direta, como um
helm value. - Suprimir parâmetros suportados por outro agente, como
cloudinit userdata.
- Uma regra prática é expor parâmetros suportados por operação direta, como um
- Organize os parâmetros em conjuntos específicos de site, de instância e de segurança.
- Assegura-te de que os parâmetros não se sobrepõem entre conjuntos.
- Defina parâmetros obrigatórios versus opcionais.
- Para parâmetros opcionais, defina um valor padrão razoável.
- Para evitar a exposição de segredos, assegure a configuração adequada dos parâmetros específicos de segurança.
Abordagem One-CGS
A recomendação original era utilizar apenas um único conjunto CGS/CGV para a NF inteira. Esta abordagem consolidou, em conjunto, os parâmetros específicos: do local, da instância e da segurança. Apenas em casos raros, quando um serviço tinha múltiplos NFs, eram usados vários conjuntos. Muitos parceiros conseguiram integrar com sucesso esta abordagem, e esta continua a ser suportada. No entanto, esta abordagem não obscurece segredos. Todos os valores de configuração são armazenados em texto simples e podem ser exibidos através da maioria dos métodos Azure.
Abordagem Three-CGS
Recomendamos agora que utilize pelo menos três conjuntos CGS/CGV, organizando os parâmetros da seguinte forma:
Parâmetros específicos do sitio
- Exemplos incluem endereços IP e nomes únicos.
- Usa CGS/CGV sem segredos.
- Armazena os valores em texto simples durante as implementações.
Parâmetros específicos de instância
- Exemplos incluem tempos limite e níveis de depuração.
- Usa CGS/CGV sem segredos.
- Armazena os valores em texto simples durante a implementação.
Parâmetros específicos de segurança
- Exemplos incluem palavras-passe e certificados.
- Usa CGS/CGV com segredos.
- Armazenar valores no Azure Key Vault (AKV) para obscurecer durante as implementações.
Advertência
- Ao utilizar segredos, considere restringir o acesso ao âmbito
Microsoft.Resources/deployments/exportTemplate/actiondo controlo de acesso baseado em funções (RBAC).
CGS sem segredos
Este exemplo mostra um CGS expondo abc, xyz, e qwe parâmetros. Dois dos parâmetros têm valores predefinidos e um está marcado como obrigatório.
{
"type": "object",
"properties": {
"abc": {
"type": "integer",
"default": 30
},
"xyz": {
"type": "integer",
"default": 40
},
"qwe": {
"type": "integer"
}
}
"required": "qwe"
}
CGV sem segredos
Este exemplo mostra a entrada CGV fornecida pelo operador durante a implementação do CGV de forma a cumprir o CGS anterior.
{
"qwe": 20
}
Este exemplo mostra o recurso CGV renderizado criado após a conclusão da implementação do CGV.
{
"abc": 30,
"xyz": 40,
"qwe": 20
}
CGV com segredos sem AKV
Quando o AKV não está a ser utilizado, considere os seguintes requisitos do modelo Azure Resource Manager (ARM) para ocultar corretamente os valores secretos ao longo do ciclo de vida dos recursos CGV.
- Para conter todos os segredos, defina-se um parâmetro de objeto com
"type": "secureObject".- Esta configuração obscurece a apresentação de segredos como parâmetros de modelo.
Este exemplo mostra como definir um parâmetro secretCgvContentde objeto .
"parameters": {
"secretCgvContent": {
"type": "SecureObject"
}
}
Observação
- Não te hidrates
secretCgvContentusando a função bicep loadJsonContent(). - Não inclua um
SecureObjectparâmetro numa definição de variável.
- Nas propriedades de recursos CGV, utilize
configurationType: 'Secret'e"secretConfigurationValue": "[string(parameters('secretCgvContent'))]".- Esta configuração impede que os dados secretos sejam exibidos através da maioria das interfaces de utilizador do Azure.
Este exemplo mostra como passar todos os segredos do objeto secretCgvContent para o recurso CGV.
{
"type": "Microsoft.HybridNetwork/configurationGroupValues",
"properties": {
"configurationType": "Secret"
"secretConfigurationValue": "[string(parameters('secretCgvContent'))]"
}
}
CGV com segredos com AKV
Quando o AKV está a ser utilizado, considere os seguintes requisitos do modelo ARM para ocultar corretamente os valores secretos ao longo do ciclo de vida dos recursos CGV.
- Defina uma string
parameterpara cada segredo e um objetovariablepara recolher todos os valores secretos.- A variável objeto contém apenas uma referência à cadeia de parâmetros.
Este exemplo mostra como definir um parâmetro secretPassword1 contido na variável secretVal.configurationValueobjeto .
"parameters": {
"secretPassword1": {
"type": "string"
}
}
"variables": {
"configurationValue": {
"secretVal": {
"elastic_passwd": "secretPassword1"
}
}
}
- Para entrada de parâmetros, use uma referência de modelo para o AKV em vez do segredo em texto simples.
- Esta configuração obscurece a apresentação dos segredos como variáveis modelo.
Este exemplo mostra como definir o segredo secretPassword1 usando o segredo e a chave AKV.
"secretPassword1": {
"reference": {
"keyVault": {
"id": "/subscriptions/xxx/resourceGroups/yyy/providers/Microsoft.KeyVault/vaults/zz"
},
"secretPassword1": "<akv-secret-key>"
}
}
- Nas propriedades de recursos CGV, utilize
configurationType: 'Secret'e"secretConfigurationValue": "string(secretVal.configurationValue)".- Esta configuração impede que os dados secretos sejam exibidos através da maioria das interfaces de utilizador do Azure.
Este exemplo mostra como passar todos os segredos do objeto secretVal.configurationValue para o novo CGV.
{
"resources": [ {
"type": "Microsoft.HybridNetwork/configurationGroupValues",
"properties": {
"configurationType": "Secret"
"secretConfigurationValue": "string(secretVal.configurationValue)"
}
}
]
networkFunctions com segredos
Considere os seguintes requisitos do modelo ARM para ocultar corretamente os valores secretos ao longo do ciclo de vida dos recursos networkFunctions.
- Use
"type": "secureObject"no modelo para os parâmetrossecretValueseconfig- Esta configuração obscurece a apresentação dos segredos como parâmetros do modelo.
"parameters": {
"nfValues": {
"type": "object"
},
"siteSpecificValues": {
"type": "object"
},
"secretValues": {
"type": "secureObject"
},
"config": {
"type": "secureObject",
"defaultValue": "[union(parameters('nfValues'), parameters('siteSpecificValues'), parameters('secretValues'))]"
}
}
Observação
- Não te hidrates
secretValuesusando a função bicep loadJsonContent(). - Não inclua um
SecureObjectparâmetro numa definição de variável.
- Nas propriedades de recursos do networkFunctions, use
configurationType: 'Secret'e"secretDeploymentValues": "[string(parameters('config'))]".- Uma vez implementada uma função de rede, esta configuração impede a exibição dos dados secretos através da maioria das interfaces de utilizador do Azure.
"resources": [
{
"type": "Microsoft.HybridNetwork/networkFunctions",
"configurationType": "Secret",
"secretDeploymentValues": "[string(parameters('config'))]",
}
]
Visão geral do Esquema JSON
JSON Schema é um standard da Internet Engineering Task Force (IETF) que fornece um formato para quais dados JSON são necessários para uma aplicação e como interagir com eles. Aplicar tais padrões a um documento JSON ajuda-o a garantir consistência e validade dos dados em todos os dados JSON.
Onde é utilizado o esquema JSON?
- Azure Operator Service Manager usa a notação de esquema JSON como um meta-esquema nas propriedades
schemaDefinitiondo objeto CGSConfigurationGroupSchemaPropertiesFormat. - O Azure Operator Service Manager permite ao designer e ao editor especificar o Esquema JSON quando o operador deve fornecer dados (valores JSON) durante a instância de um serviço de rede de site (SNS) ou NF.
- O Azure Operator Service Manager permite que as propriedades do meta-esquema sejam opcionais ou obrigatórias. Quando uma propriedade está marcada
required, deve ser especificada nos valores JSON.
Quais palavras-chave JSON são suportadas?
Para o meta-esquema CGS, o Azure Operator Service Manager implementa suporte para palavras-chave padrão JSON tipo a tipo:
- Para tipos de objetos, o suporte a palavras-chave é limitado pela política de filtros. Ver objeto na referência do Esquema JSON.
- Para tipos de cadeia de caracteres, o suporte a palavras-chave não é limitado ou filtrado. Veja string na referência do JSON Schema.
- Para tipos numéricos, o suporte a palavras-chave não é limitado ou filtrado. Ver Tipos numéricos na referência do Esquema JSON.
Campos opcionais e obrigatórios
Declara uma propriedade como opcional ao incluir uma required palavra-chave, que omite a propriedade opcional. Se não especificar a required palavra-chave, todas as propriedades são consideradas necessárias. Precisa de pelo menos um tipo de propriedade obrigatório para dar suporte a um tipo de propriedade opcional.
{
"type": "object",
"properties": {
"abc": {
"type": "integer",
"default": 30
},
"xyz": {
"type": "string",
"default": "abc123"
}
}
"required": ["abc"]
}
Valores padrão no Esquema JSON
Para propriedades opcionais, o Azure Operator Service Manager implementa um método personalizado para gerir valores predefinidos. Quando um valor por defeito é definido no meta-esquema CGS, o Azure Operator Service Manager utiliza esse valor quando a propriedade está em falta ou não está definida nos dados CGV de entrada. A lógica do validador Azure Operator Service Manager basicamente hidrata o valor CGV com o valor padrão quando o operador não fornece um valor.
Como definir padrões
Os valores padrão devem ser especificados dentro das propriedades ou dentro dos elementos de um array. O exemplo seguinte demonstra valores predefinidos com tipos de propriedades inteiras e de cadeia de caracteres:
{
"type": "object",
"properties": {
"abc": {
"type": "integer",
"default": 30
},
"xyz": {
"type": "string",
"default": "abc123"
}
}
}
Regras para definir padrões
As seguintes regras são aplicadas quando está a validar um valor padrão. Considere estas regras quando estiver a usar valores padrão para garantir os resultados esperados.
- Um valor padrão não deve ser aplicado a uma propriedade necessária.
- Um valor padrão é avaliado por ordem top-down a partir do local onde a palavra-chave aparece pela primeira vez.
- Quando existe um valor de propriedade na entrada do CGV, apenas as subpropriedades dessas propriedades são avaliadas para valores predefinidos.
- Quando não existe valor de propriedade no CGV de entrada, é avaliado um padrão, juntamente com quaisquer filhos.
- Quando um valor de propriedade é o
objecttipo, e a sua chave não existe no CGV de entrada, não são avaliados os valores padrão para o objeto.