Skip to content

Commit a63e653

Browse files
authored
Merge pull request #313016 from msftadam/patch-219732
Revise configuration guide for clarity and accuracy
2 parents 10bc843 + d68d9fb commit a63e653

1 file changed

Lines changed: 46 additions & 19 deletions

File tree

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

Lines changed: 46 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,44 +12,44 @@ ms.service: azure-operator-service-manager
1212

1313
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.
1414

15-
## Configurarion group approach
15+
## Configuration group 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.
2020
* A rule of thumb is to expose parameters backed by direct operation, such as a helm value.
21-
* Suppress parameters backed by another agent, such as `cloudinit` `userdata`.
21+
* Suppress parameters backed by another agent, such as `cloudinit userdata`.
2222
* Sort the parameters into site-specific, instance-specific, and security-specific sets.
23-
* Ensure that parameters don't overlap between CGS resources.
23+
* Ensure that parameters don't overlap between sets.
2424
* Define required versus optional parameters.
2525
* For optional parameters, define a reasonable default value.
2626

2727
## One-CGS approach
2828

29-
The original recommendation was to use only a single CGS for the entire NF. This approach consolidated site-specific, instance-specific, and security-specific parameters into a single set of configuration group resources. This approach avoided multiple resource sets, except for rare cases where a service had multiple components. Many partners successfully onboarded services using this approach, and it remains supported. However, this approach doesn't obscure secrets. All configuration values are stored in resources as plain-text.
29+
The original recommendation was to use only a single CGS/CGV set for the entire NF. This approach consolidated site-specific, instance-specific, and security-specific parameters together. Only in rare cases, where a service had multiple NFs, were multiple sets used. Many partners successfully onboarded using this approach, and it remains supported. However, this approach doesn't obscure secrets. All configuration values are stored in plain-text and are displayable via most Azure methods.
3030

3131
## Three-CGS approach
3232

33-
We now recommend that you use at least three CGSs for the entire NF, by organizing parameters into these sets of configuration resource groups:
33+
We now recommend that you use at least three CGS/CGV sets, organizing parameters as follows:
3434

3535
* Site-specific parameters
3636
* Examples include IP addresses and unique names.
37-
* Uses CGS without secrets.
37+
* Uses CGS/CGV without secrets.
3838
* Stores values in plain-text during deployments.
3939

4040
* Instance-specific parameters
4141
* Examples include timeouts and debug levels.
42-
* Uses CGS without secrets.
42+
* Uses CGS/CGV without secrets.
4343
* Stores values in plain-text during deployment.
4444

4545
* Security-specific parameters
4646
* Examples include passwords and certificates.
47-
* Uses CGS with secrets.
47+
* Uses CGS/CGV with secrets.
4848
* Store values in Azure Key Vault to obscure during deployments.
4949

5050
## CGS without secrets
5151

52-
This example shows a sample CGS payload defining `abc`, `xyz`, and `qwe` as exposed parameters. Two of the parameters have default values and one is required.
52+
This example shows a CGS exposing `abc`, `xyz`, and `qwe` parameters. Two of the parameters have default values and one is marked required.
5353

5454
```json
5555
{
@@ -73,15 +73,15 @@ This example shows a sample CGS payload defining `abc`, `xyz`, and `qwe` as expo
7373

7474
## CGV without secrets
7575

76-
This example shows a corresponding CGV input that an operator uses with the prior CGS:
76+
This example shows the CGV input provided by the operator during CGV deployment to satisfy the prior CGS.
7777

7878
```json
7979
{
8080
"qwe": 20
8181
}
8282
```
8383

84-
This example shows the resulting CGV resource that Azure Operator Service Manager generates:
84+
This example shows the rendered CGV resource created after the CGV deployment completes.
8585

8686
```json
8787
{
@@ -92,16 +92,43 @@ This example shows the resulting CGV resource that Azure Operator Service Manage
9292
```
9393

9494
## CGS with secrets
95-
Other then seperating secrets into a unique CGS, no special CGS requirements exist for secret support.
95+
Other than separating secrets into a unique CGS, no special requirements exist for CGS secret support.
9696

9797
## CGV with secrets
98-
Considering the following configuration reqiurements to properly obscure secret values:
99-
* Use `configurationType: 'Secret'` in the resource properties.
100-
* Once a CGV is deployed, this prevents the display of the resource in most Azure methods.
101-
* Use a reference to Azure Key Vault (AKV) in place of the plain-text secret.
102-
* This obscures the display of the secret in the CGV deployment template.
98+
Consider the following Azure Resource Manager (ARM) template requirements to properly obscure secret values throughout the entire CGV resource lifecycle.
99+
100+
* Use `configurationType: 'Secret'` in the template under resource properties.
101+
* Once a CGV is deployed, this configuration prevents displaying the secret data via most Azure methods.
102+
103+
```json
104+
"parameters": {
105+
"secretCgvContent": {
106+
"type": "SecureObject"
107+
}
108+
}
109+
```
110+
111+
* Use `"type": "secureObject"` in the template under parameter type
112+
* This configuration obscures the display of the secrets as template parameters.
113+
114+
```json
115+
{
116+
"type": "Microsoft.HybridNetwork/configurationGroupValues",
117+
"properties": {
118+
"configurationType": "Secret"
119+
"secretDeploymentValues": "[string(parameters('secretCgvContent'))]"
120+
}
121+
}
122+
```
123+
124+
* Use a template reference to Azure Key Vault (AKV) in place of the plain-text secret.
125+
* This configuration obscures the display of the secrets as template variables.
126+
127+
> [!NOTE]
128+
> * ARM templates only support Azure Key Vault for secret reference substitution.
129+
130+
This example shows how to include an AKV reference to a secret named `secretName` in an ARM template.
103131

104-
The following example shows how to include an AKF reference in an ARM template:
105132
```json
106133
"password": {
107134
"reference": {
@@ -112,7 +139,7 @@ The following example shows how to include an AKF reference in an ARM template:
112139
}
113140
```
114141

115-
To further secure resources restrict access to the following RBAC scope: `Microsoft.Resources/deployments/exportTemplate/action`
142+
To further secure resources, consider restricting access to the role based access control (RBAC) scope `Microsoft.Resources/deployments/exportTemplate/action` to only roles that absolutely need to this access.
116143

117144
## Overview of JSON Schema
118145

0 commit comments

Comments
 (0)