Skip to content

Commit 960ea2f

Browse files
Merge pull request #313095 from msftadam/patch-230579
Revise configuration best practices and terminology
2 parents aebff9d + 2be7f3d commit 960ea2f

1 file changed

Lines changed: 23 additions & 22 deletions

File tree

articles/operator-service-manager/configuration-guide.md

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,22 @@ ms.topic: best-practice
88
ms.service: azure-operator-service-manager
99
---
1010

11-
# Best practices for configuration groups
11+
# Configuration best practices
1212

13-
This article provides Azure Operator Service Manager guidelines to optimize the design of configuration group schemas (CGSs) and the operation of configuration group values (CGVs). Network function (NF) vendors, telco operators, and their partners should keep these practices in mind when onboarding and deploying NFs.
13+
This article provides guidelines to best manage network function configuration requirements using Azure Operator Service Manager. This includes designing optimal configuration group schemas (CGSs), configuration group values (CGVs) and networkFunctions (NFs) resource templates. Keep these practices in mind when onboarding and deploying NFs.
1414

15-
## Configuration group approach
15+
## Configuration approach
1616

1717
Consider the following meta-schema guidelines when you're designing configuration resources:
1818

1919
* First, choose which parameters to expose to the operator.
20-
* A rule of thumb is to expose parameters backed by direct operation, such as a helm value.
20+
* A rule of thumb is to expose parameters backed by direct operation, such as a `helm value`.
2121
* Suppress parameters backed by another agent, such as `cloudinit userdata`.
2222
* Sort the parameters into site-specific, instance-specific, and security-specific sets.
2323
* Ensure that parameters don't overlap between sets.
2424
* Define required versus optional parameters.
25-
* For optional parameters, define a reasonable default value.
25+
* For optional parameters, define a reasonable default value.
26+
* To prevent exposing secrets, ensure proper configuration of security-specific parameters.
2627

2728
## One-CGS approach
2829

@@ -47,7 +48,7 @@ We now recommend that you use at least three CGS/CGV sets, organizing parameters
4748
* Uses CGS/CGV with secrets.
4849
* Store values in Azure Key Vault (AKV) to obscure during deployments.
4950

50-
> [!NOTE]
51+
> [!WARNING]
5152
> * When using secrets, consider restricting access to the role based access control (RBAC) scope `Microsoft.Resources/deployments/exportTemplate/action`.
5253
5354
## CGS without secrets
@@ -99,7 +100,7 @@ This example shows the rendered CGV resource created after the CGV deployment co
99100
Where AKV isn't being used, consider the following Azure Resource Manager (ARM) template requirements to properly obscure secret values throughout CGV resource lifecycle.
100101

101102
* To contain all secrets, define an object parameter with `"type": "secureObject"`.
102-
* Before a CGV is deployed, this configuration obscures the display of secrets as template parameters.
103+
* This configuration obscures the display of secrets as template parameters.
103104

104105
This example shows how to define an object parameter `secretCgvContent`.
105106

@@ -112,10 +113,10 @@ This example shows how to define an object parameter `secretCgvContent`.
112113
```
113114

114115
> [!NOTE]
115-
> * Don't hydrate `secretCgvContent` using the bicep loadJsonContent() function as it forces the use of insecure variables.
116+
> * Don't hydrate `secretCgvContent` using the bicep loadJsonContent() function.
116117
117118
* Under CGV resource properties, use `configurationType: 'Secret'` and `"secretConfigurationValue": "[string(parameters('secretCgvContent'))]"`.
118-
* Once a CGV is deployed, this configuration prevents displaying the secret data via most Azure user interfaces.
119+
* This configuration prevents displaying the secret data via most Azure user interfaces.
119120

120121
This example shows how to pass all secrets in the object `secretCgvContent` to the CGV resource.
121122

@@ -131,46 +132,46 @@ This example shows how to pass all secrets in the object `secretCgvContent` to t
131132

132133
## CGV with secrets with AKV
133134

134-
Where AKV is being used, consider the following Azure Resource Manager (ARM) template requirements to properly obscure secret values throughout CGV resource lifecycle.
135+
Where AKV is being used, consider the following ARM template requirements to properly obscure secret values throughout CGV resource lifecycle.
135136

136137
* Define a string `parameter` for each secret and one object `variable` to collect all secret values.
137-
* The object variable contains only a reference to the parameter string and exposes no secrets.
138+
* The object variable contains only a reference to the parameter string.
138139

139-
This example shows how to define a parameter `secretPassword` contained within the object variable `secretVal.configurationValue`.
140+
This example shows how to define a parameter `secretPassword1` contained within the object variable `secretVal.configurationValue`.
140141

141142
```json
142143
"parameters": {
143-
"secretPassword": {
144+
"secretPassword1": {
144145
"type": "string"
145146
}
146147
}
147148
"variables": {
148149
"configurationValue": {
149150
"secretVal": {
150-
"elastic_passwd": "secretPassword"
151+
"elastic_passwd": "secretPassword1"
151152
}
152153
}
153154
}
154155
```
155156

156157
* Use a template reference to AKV in place of the plain-text secret.
157-
* Before the CGV is deployed, this configuration obscures the display of the secrets as template variables.
158+
* This configuration obscures the display of the secrets as template variables.
158159

159-
This example shows how to hydrate the secret `secretPassword` using AKV secret and key.
160+
This example shows how to hydrate the secret `secretPassword1` using AKV secret and key.
160161

161162
```json
162-
"secretPassword": {
163+
"secretPassword1": {
163164
"reference": {
164165
"keyVault": {
165166
"id": "/subscriptions/xxx/resourceGroups/yyy/providers/Microsoft.KeyVault/vaults/zz"
166167
},
167-
"secretPassword": "<akv-secret-key>"
168+
"secretPassword1": "<akv-secret-key>"
168169
}
169170
}
170171
```
171172

172173
* Under CGV resource properties, use `configurationType: 'Secret'` and `"secretConfigurationValue": "string(secretVal.configurationValue)"`.
173-
* Once a CGV is deployed, this configuration prevents displaying the secret data via most Azure user interfaces.
174+
* This configuration prevents displaying the secret data via most Azure user interfaces.
174175

175176
This example shows how to pass all secrets in the object `secretVal.configurationValue` to the new CGV.
176177

@@ -186,9 +187,9 @@ This example shows how to pass all secrets in the object `secretVal.configuratio
186187
]
187188
```
188189

189-
## networkFunction with secrets
190+
## networkFunctions with secrets
190191

191-
Consider the following Azure Resource Manager (ARM) template requirements to properly obscure secret values throughout network function (NF) resource lifecycle.
192+
Consider the following ARM template requirements to properly obscure secret values throughout networkFunctions resource lifecycle.
192193

193194
* Use `"type": "secureObject"` in the template for the `secretValues` and `config` parameter
194195
* This configuration obscures the display of the secrets as template parameters.
@@ -212,7 +213,7 @@ Consider the following Azure Resource Manager (ARM) template requirements to pro
212213
```
213214

214215
> [!NOTE]
215-
> * Don't hydrate `secretCgvContent` using the bicep loadJsonContent() function as it forces the use of insecure variables.
216+
> * Don't hydrate `secretValues` using the bicep loadJsonContent() function.
216217

217218
* Under networkFunctions resource properties, use `configurationType: 'Secret'` and `"secretDeploymentValues": "[string(parameters('config'))]"`.
218219
* Once a network function is deployed, this configuration prevents displaying the secret data via most Azure user interfaces.

0 commit comments

Comments
 (0)