Skip to content

Commit 047af74

Browse files
authored
Merge pull request #100948 from bandersmsft/release-mvc-cost-mgt-billing
cost mgt billing - Dirty PR for release branch merge conflict with upstream master
2 parents cc3a6d5 + ad9d895 commit 047af74

File tree

212 files changed

+1349
-934
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

212 files changed

+1349
-934
lines changed

.openpublishing.redirection.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85446,6 +85446,11 @@
8544685446
"redirect_url": "/azure/azure-databricks/databricks-extract-load-sql-data-warehouse",
8544785447
"redirect_document_id": false
8544885448
},
85449+
{
85450+
"source_path": "articles/azure-databricks/vnet-injection.md",
85451+
"redirect_url": "/azure/databricks/administration-guide/cloud-configurations/azure/vnet-inject",
85452+
"redirect_document_id": false
85453+
},
8544985454
{
8545085455
"source_path": "articles/security/blueprints/gdpr-analytics-overview.md",
8545185456
"redirect_url": "https://aka.ms/azureblueprint",

articles/aks/azure-disk-customer-managed-keys.md

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ author: mlearned
66

77
ms.service: container-service
88
ms.topic: article
9-
ms.date: 01/09/2020
9+
ms.date: 01/12/2020
1010
ms.author: mlearned
1111
---
1212

@@ -57,7 +57,7 @@ az account list-locations
5757
az group create -l myAzureRegionName -n myResourceGroup
5858
5959
# Create an Azure Key Vault resource in a supported Azure region
60-
az keyvault create -n myKeyVaultName -g myResourceGroup-l myAzureRegionName --enable-purge-protection true --enable-soft-delete true
60+
az keyvault create -n myKeyVaultName -g myResourceGroup -l myAzureRegionName --enable-purge-protection true --enable-soft-delete true
6161
```
6262

6363
## Create an instance of a DiskEncryptionSet
@@ -72,7 +72,7 @@ keyVaultId=$(az keyvault show --name myKeyVaultName --query [id] -o tsv)
7272
keyVaultKeyUrl=$(az keyvault key show --vault-name myKeyVaultName --name myKeyName --query [key.kid] -o tsv)
7373
7474
# Create a DiskEncryptionSet
75-
az disk-encryption-set create -n myDiskEncryptionSetName -l myAzureRegionName -g myResourceGroup--source-vault $keyVaultId --key-url $keyVaultKeyUrl
75+
az disk-encryption-set create -n myDiskEncryptionSetName -l myAzureRegionName -g myResourceGroup --source-vault $keyVaultId --key-url $keyVaultKeyUrl
7676
```
7777

7878
## Grant the DiskEncryptionSet resource access to the key vault
@@ -81,46 +81,37 @@ Use the DiskEncryptionSet and resource groups you created on the prior steps, an
8181

8282
```azurecli-interactive
8383
# Retrieve the DiskEncryptionSet value and set a variable
84-
desIdentity=$(az disk-encryption-set show -n myDiskEncryptionSetName -g myResourceGroup--query [identity.principalId] -o tsv)
84+
desIdentity=$(az disk-encryption-set show -n myDiskEncryptionSetName -g myResourceGroup --query [identity.principalId] -o tsv)
8585
8686
# Update security policy settings
87-
az keyvault set-policy -n myKeyVaultName -g myResourceGroup--object-id $desIdentity --key-permissions wrapkey unwrapkey get
87+
az keyvault set-policy -n myKeyVaultName -g myResourceGroup --object-id $desIdentity --key-permissions wrapkey unwrapkey get
8888
8989
# Assign the reader role
9090
az role assignment create --assignee $desIdentity --role Reader --scope $keyVaultId
9191
```
9292

9393
## Create a new AKS cluster and encrypt the OS disk with a customer-manged key
9494

95-
Create a new resource group and AKS cluster, then use your key to encrypt the OS disk.
95+
Create a new resource group and AKS cluster, then use your key to encrypt the OS disk. Customer managed key is only supported in kubernetes versions greater than 1.17
9696

9797
```azurecli-interactive
9898
# Retrieve the DiskEncryptionSet value and set a variable
99-
diskEncryptionSetId=$(az resource show -n $diskEncryptionSetName -g ssecmktesting --resource-type "Microsoft.Compute/diskEncryptionSets" --query [id] -o tsv)
99+
diskEncryptionSetId=$(az resource show -n diskEncryptionSetName -g myResourceGroup --resource-type "Microsoft.Compute/diskEncryptionSets" --query [id] -o tsv)
100100
101101
# Create a resource group for the AKS cluster
102102
az group create -n myResourceGroup-l myAzureRegionName
103103
104104
# Create the AKS cluster
105-
az aks create -n myAKSCluster -g myResourceGroup --node-osdisk-diskencryptionsetid diskEncryptionId
105+
az aks create -n myAKSCluster -g myResourceGroup --node-osdisk-diskencryptionset-id $diskEncryptionSetId --kubernetes-version 1.17.0
106106
```
107107

108-
## Add a node pool to an existing AKS cluster and encrypt the OS disk with a customer-managed key
109-
110-
New nodepools do not use encrypted disks by default. You can add a new node pool to an existing cluster and encrypt the OS disk with your own key by using the following command.
111-
112-
```azurecli-interactive
113-
# Add a nodepool to an existing cluster with BYOK encryption
114-
nodepool add –-cluster-name myAKSCluster -n myNodePoolName -g myResourceGroup --node-osdisk-diskencryptionsetid diskEncryptionId
115-
```
108+
When new node pools are added to the cluster created above, the customer managed key provided during the create is used to encrypt the OS disk
116109

117110
## Encrypt your AKS cluster data disk with a customer-managed key
118111

119112
You can also encrypt the AKS data disks with your own keys. Replace myResourceGroup and myDiskEncryptionSetName with your real values, and apply the yaml.
120113

121-
### Deploy the sample image from ACR to AKS
122-
123-
Ensure you have the proper AKS credentials
114+
Ensure you have the proper AKS credentials. The Service principal will need to have contributor access to the resource group where the diskencryptionset is present. Otherwise, you will get an error suggesting that the service principal does not have permissions.
124115

125116
Create a file called **byok-azure-disk.yaml** that contains the following information. Replace myResourceGroup and myDiskEncrptionSetName with your values.
126117

articles/app-service/app-service-web-get-started-windows-container.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,15 +159,15 @@ The streamed logs looks like this:
159159

160160
## Use a different parent image
161161

162-
You're free to use a different custom Docker image to run your app. However, you must choose the right [parent image](https://docs.docker.com/develop/develop-images/baseimages/) for the framework you want:
162+
You're free to use a different custom Docker image to run your app. However, you must choose the right [parent image (base image)](https://docs.docker.com/develop/develop-images/baseimages/) for the framework you want:
163163

164164
- To deploy .NET Framework apps, use a parent image based on the Windows Server Core 2019 [Long-Term Servicing Channel (LTSC)](https://docs.microsoft.com/windows-server/get-started-19/servicing-channels-19#long-term-servicing-channel-ltsc) release.
165165
- To deploy .NET Core apps, use a parent image based on the Windows Server Nano 1809 [Semi-Annual Servicing Channel (SAC)](https://docs.microsoft.com/windows-server/get-started-19/servicing-channels-19#semi-annual-channel) release.
166166

167167
It takes some time to download a parent image during app start-up. However, you can reduce start-up time by using one of the following parent images that are already cached in Azure App Service:
168168

169169
- [mcr.microsoft.com/dotnet/framework/aspnet](https://hub.docker.com/_/microsoft-dotnet-framework-aspnet/):4.7.2-windowsservercore-ltsc2019
170-
- [mcr.microsoft.com/windows/nanoserver](https://hub.docker.com/_/microsoft-windows-nanoserver/):1809 - this image is the base container used across Microsoft [ASP.NET Core](https://hub.docker.com/_microsoft-dotnet-cores-aspnet) Microsoft Windows Nano Server images.
170+
- [mcr.microsoft.com/windows/nanoserver](https://hub.docker.com/_/microsoft-windows-nanoserver/):1809 - this image is the base container used across Microsoft [ASP.NET Core](https://hub.docker.com/_/microsoft-dotnet-core-aspnet/) Microsoft Windows Nano Server images.
171171

172172
## Next steps
173173

articles/app-service/containers/how-to-configure-python.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ az webapp config set --resource-group <resource-group-name> --name <app-name> --
4646

4747
## Container characteristics
4848

49-
Python apps deployed to App Service on Linux run within a Docker container that's defined in the GitHub repository, [Python 3.6](https://github.com/Azure-App-Service/python/tree/master/3.6.6) or [Python 3.7](https://github.com/Azure-App-Service/python/tree/master/3.7.0).
49+
Python apps deployed to App Service on Linux run within a Docker container that's defined in the [App Service Python GitHub repository](https://github.com/Azure-App-Service/python). You can find the image configurations inside the version-specific directories.
5050

5151
This container has the following characteristics:
5252

articles/app-service/containers/toc.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@
180180
- name: Azure CLI
181181
href: /cli/azure/appservice
182182
- name: Azure PowerShell
183-
href: /powershell
183+
href: /powershell/module/az.websites/#app_service
184184
- name: REST API
185185
href: /rest/api/appservice/
186186
- name: Resources

articles/app-service/deploy-zip.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ For more information, see [Kudu documentation](https://github.com/projectkudu/ku
8585

8686
To deploy a WAR file to App Service, send a POST request to `https://<app_name>.scm.azurewebsites.net/api/wardeploy`. The POST request must contain the .war file in the message body. The deployment credentials for your app are provided in the request by using HTTP BASIC authentication.
8787

88+
Always use `/api/wardeploy` when deploying WAR files. This API will expand your WAR file and place it on the shared file drive. using other deployment APIs may result in inconsistent behavior.
89+
8890
For the HTTP BASIC authentication, you need your App Service deployment credentials. To see how to set your deployment credentials, see [Set and reset user-level credentials](deploy-configure-credentials.md#userscope).
8991

9092
### With cURL

articles/app-service/toc.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@
220220
- name: Azure CLI
221221
href: /cli/azure/appservice
222222
- name: Azure PowerShell
223-
href: /powershell
223+
href: /powershell/module/az.websites/#app_service
224224
- name: REST API
225225
href: /rest/api/appservice/
226226
- name: Resource Manager template

articles/automation/TOC.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
displayName: certificate renewal
1616
- name: Configure authentication with AWS
1717
href: automation-config-aws-account.md
18+
- name: Encryption of secure assets in Azure Automation
19+
href: automation-secure-asset-encryption.md
1820
- name: Manage role-based access control
1921
href: automation-role-based-access-control.md
2022
displayName: RBAC
Lines changed: 189 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,189 @@
1+
---
2+
title: Encryption of secure assets in automation
3+
description: Azure automation protects secure assets using multiple levels of encryption. By default, the encryption is done using Microsoft-managed keys. Customers can configure their automation accounts to use customer managed keys for encryption. This article describes the details of both modes of encryption and how you can switch between the two.
4+
services: automation
5+
ms.service: automation
6+
ms.subservice: process-automation
7+
author: snehithm
8+
ms.author: snmuvva
9+
ms.date: 01/11/2020
10+
ms.topic: conceptual
11+
manager: kmadnani
12+
---
13+
14+
# Secure assets in Azure Automation
15+
16+
Secure assets in Azure Automation include credentials, certificates, connections, and encrypted variables. These assets are protected in Azure Automation using multiple levels of encryption.
17+
Based on the top-level key used for the encryption, there are two models for encryption:
18+
- Using Microsoft-managed keys
19+
- Using customer-managed keys
20+
21+
## Microsoft-managed Keys
22+
23+
By default, your Azure Automation account uses Microsoft-managed keys.
24+
25+
Each secure asset is encrypted and stored in Azure Automation using a unique key (Data Encryption key) that is generated for each automation account. These keys themselves are encrypted and stored in Azure Automation using yet another unique key that is generated for each account called an Account Encryption Key (AEK). These account encryption keys encrypted and stored in Azure Automation using Microsoft Managed Keys.
26+
27+
## Customer-managed Keys with Key Vault (preview)
28+
29+
You can manage encryption of secure assets in Azure Automation at the level of an automation account with your own keys. When you specify a customer-managed key at the level of the Automation account, that key is used to protect and control access to the account encryption key for the automation account, which in turn is used to encrypt and decrypt all the secure assets. Customer-managed keys offer greater flexibility to create, rotate, disable, and revoke access controls. You can also audit the encryption keys used to protect your secure assets.
30+
31+
You must use Azure Key Vault to store customer-managed keys. You can either create your own keys and store them in a key vault, or you can use the Azure Key Vault APIs to generate keys. For more information about Azure Key Vault, see [What is Azure Key Vault?](../key-vault/key-vault-overview.md)
32+
33+
## Enable customer-managed keys for an Automation account
34+
35+
When you enable encryption with customer-managed keys for an automation account, Azure Automation wraps the account encryption key with the customer-managed key in the associated key vault. Enabling customer-managed keys does not impact performance, and the account is encrypted with the new key immediately, without any time delay.
36+
37+
A new automation account is always encrypted using Microsoft-managed keys. It's not possible to enable customer-managed keys at the time that the account is created. Customer-managed keys are stored in Azure Key Vault, and the key vault must be provisioned with access policies that grant key permissions to the managed identity that is associated with the automation account. The managed identity is available only after the storage account is created.
38+
39+
When you modify the key being used for Azure Automation secure asset encryption by enabling or disabling customer-managed keys, updating the key version, or specifying a different key, then the encryption of the account encryption key changes, but the secure assets in your Azure Automation account do not need to be re-encrypted.
40+
41+
The following three sections describe the mechanics of enabling customer-managed keys for an Automation account.
42+
43+
> [!NOTE]
44+
> To enable customer-managed keys, you will currently need to make Azure Automation REST API calls using api version 2020-01-13-preview
45+
46+
### Pre-requisites for using Customer-managed keys in Azure Automation
47+
48+
Before enabling customer-managed keys for an Automation account, you must ensure the following pre-requisites are met
49+
50+
- The customer-manged key is stored in an Azure Key Vault.
51+
- You must enable both the **Soft Delete** and **Do Not Purge** properties on the key vault. These features are required to allow for recovery of keys in case of accidental deletion.
52+
- Only RSA keys are supported with Azure Automation encryption. For more information about keys, see [About Azure Key Vault keys, secrets, and certificates](../key-vault/about-keys-secrets-and-certificates.md#key-vault-keys).
53+
- The automation account and the key vault can be in different subscriptions but need to be in the same Azure Active Directory tenant.
54+
55+
### Assign an identity to the automation account
56+
57+
To use customer-managed keys with an automation account, your automation account needs to authenticate against the keyvault storing customer-managed keys. Azure Automation uses system assigned managed identities to authenticate the account with Key Vault. For more information about managed identities, see [What is managed identities for Azure resources?](https://docs.microsoft.com/azure/active-directory/managed-identities-azure-resources/overview)
58+
59+
Configure a system assigned managed identity to the automation account using the following REST API call
60+
61+
```http
62+
PATCH https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/resource-group-name/providers/Microsoft.Automation/automationAccounts/automation-account-name?api-version=2020-01-13-preview
63+
```
64+
Request body
65+
```json
66+
{
67+
"identity":
68+
{
69+
"type": "SystemAssigned"
70+
}
71+
}
72+
```
73+
74+
System assigned identity for the automation account is returned in the response
75+
76+
```json
77+
{
78+
"name": "automation-account-name",
79+
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/resource-group-name/providers/Microsoft.Automation/automationAccounts/automation-account-name",
80+
..
81+
"identity": {
82+
"type": "SystemAssigned",
83+
"principalId": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
84+
"tenantId": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"
85+
},
86+
..
87+
}
88+
```
89+
90+
### Configure the Key Vault access policy
91+
92+
Once a managed identity is assigned to the Automation account, you configure access to the Key Vault storing customer managed Keys. Azure Automation requires **get**, **recover**, **wrapKey**, **UnwrapKey** on the customer managed keys.
93+
94+
Such an access policy can be set using the following REST API call.
95+
96+
```http
97+
PUT https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/sample-group/providers/Microsoft.KeyVault/vaults/sample-vault/accessPolicies/add?api-version=2018-02-14
98+
```
99+
Request body
100+
101+
```json
102+
{
103+
"properties": {
104+
"accessPolicies": [
105+
{
106+
"tenantId": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb",
107+
"objectId": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
108+
"permissions": {
109+
"keys": [
110+
"get",
111+
"recover",
112+
"wrapKey",
113+
"unwrapKey"
114+
],
115+
"secrets": [],
116+
"certificates": []
117+
}
118+
}
119+
]
120+
}
121+
}
122+
```
123+
124+
> [!NOTE]
125+
> The **tenantId** and **objectId** fields must be provided with values of **identity.tenantId** and **identity.principalId** respectively from the response of managed identity for the automation account.
126+
127+
### Change the configuration of automation account to use customer managed key
128+
129+
Finally, you can switch your automation account from Microsft-managed keys to customer-managed keys, using the following REST API call.
130+
131+
```http
132+
PATCH https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/resource-group-name/providers/Microsoft.Automation/automationAccounts/automation-account-name?api-version=2020-01-13-preview
133+
```
134+
Request body
135+
136+
```json
137+
{
138+
"properties": {
139+
"encryption": {
140+
"keySource": "Microsoft.Keyvault",
141+
"keyvaultProperties": {
142+
"keyName": "sample-vault-key",
143+
"keyvaultUri": "https://sample-vault-key12.vault.azure.net",
144+
"keyVersion": "7c73556c521340209371eaf623cc099d"
145+
}
146+
}
147+
}
148+
}
149+
```
150+
Sample response
151+
152+
```json
153+
{
154+
"name": "automation-account-name",
155+
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/resource-group-name/providers/Microsoft.Automation/automationAccounts/automation-account-name",
156+
..
157+
"properties": {
158+
..
159+
"encryption": {
160+
"keyvaultProperties": {
161+
"keyName": "sample-vault-key",
162+
"keyvaultUri": "https://sample-vault-key12.vault.azure.net",
163+
"keyVersion": "7c73556c521340209371eaf623cc099d"
164+
},
165+
"keySource": "Microsoft.Keyvault"
166+
},
167+
..
168+
}
169+
}
170+
```
171+
172+
## Manage customer-managed keys lifecycle
173+
174+
### Rotate customer-managed keys
175+
176+
You can rotate a customer-managed key in Azure Key Vault according to your compliance policies. When the key is rotated, you must update the automation account to use the new key URI.
177+
178+
Rotating the key does not trigger re-encryption of secure assets in the automation account. There is no further action required from the user.
179+
180+
### Revoke access to customer-managed keys
181+
182+
To revoke access to customer-managed keys, use PowerShell or Azure CLI. For more information, see [Azure Key Vault PowerShell](https://docs.microsoft.com/powershell/module/az.keyvault/) or [Azure Key Vault CLI](https://docs.microsoft.com/cli/azure/keyvault). Revoking access effectively blocks access to all secure assets in the automation account, as the encryption key is inaccessible by Azure Automation.
183+
184+
## Next steps
185+
186+
- [What is Azure Key Vault?](../key-vault/key-vault-overview.md)
187+
- [Certificate assets in Azure Automation](shared-resources/certificates.md)
188+
- [Credential assets in Azure Automation](shared-resources/credentials.md)
189+
- [Variable assets in Azure Automation](shared-resources/variables.md)

0 commit comments

Comments
 (0)