Updates from: 09/03/2024 01:06:36
Service Microsoft Docs article Related commit history on GitHub Change details
app-service Overview Vnet Integration https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/app-service/overview-vnet-integration.md
Route tables and network security groups only apply to traffic routed through th
When configuring network security groups or route tables that applies to outbound traffic, you must make sure you consider your application dependencies. Application dependencies include endpoints that your app needs during runtime. Besides APIs and services the app is calling, these endpoints could also be derived endpoints like certificate revocation list (CRL) check endpoints and identity/authentication endpoint, for example Microsoft Entra ID. If you're using [continuous deployment in App Service](./deploy-continuous-deployment.md), you might also need to allow endpoints depending on type and language. Specifically for [Linux continuous deployment](https://github.com/microsoft/Oryx/blob/main/doc/hosts/appservice.md#network-dependencies), you need to allow `oryx-cdn.microsoft.io:443`. For Python you additionally need to allow `files.pythonhosted.org`, `pypi.org`.
+Azure uses UDP port 30,000 to do network health checks. If you block this traffic, it will not directly impact your app, but it will be more difficult for Azure support to detect and troubleshoot network related issues.
+ When you want to route outbound traffic on-premises, you can use a route table to send outbound traffic to your Azure ExpressRoute gateway. If you do route traffic to a gateway, set routes in the external network to send any replies back. Border Gateway Protocol (BGP) routes also affect your app traffic. If you have BGP routes from something like an ExpressRoute gateway, your app outbound traffic is affected. Similar to user-defined routes, BGP routes affect traffic according to your routing scope setting. ## Service endpoints
application-gateway Ingress Controller Annotations https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/application-gateway/ingress-controller-annotations.md
For an Ingress resource to be observed by AGIC, it **must be annotated** with `k
| Annotation Key | Value Type | Default Value | Allowed Values | | -- | -- | -- | -- | | [appgw.ingress.kubernetes.io/backend-path-prefix](#backend-path-prefix) | `string` | `nil` ||
+| [appgw.ingress.kubernetes.io/backend-hostname](#backend-hostname) | `string` | `nil` ||
+| [appgw.ingress.kubernetes.io/health-probe-hostname](#custom-health-probe) | `string` | `127.0.0.1` ||
+| [appgw.ingress.kubernetes.io/health-probe-port](#custom-health-probe) | `int32` | `80` ||
+| [appgw.ingress.kubernetes.io/health-probe-path](#custom-health-probe) | `string` | `/` ||
+| [appgw.ingress.kubernetes.io/health-probe-status-code](#custom-health-probe) | `string` | `200-399` ||
+| [appgw.ingress.kubernetes.io/health-probe-interval](#custom-health-probe) | `int32` | `30` (seconds) ||
+| [appgw.ingress.kubernetes.io/health-probe-timeout](#custom-health-probe) | `int32` | `30` (seconds) ||
+| [appgw.ingress.kubernetes.io/health-probe-unhealthy-threshold](#custom-health-probe) | `int32` | `3` ||
| [appgw.ingress.kubernetes.io/ssl-redirect](#tls-redirect) | `bool` | `false` | | | [appgw.ingress.kubernetes.io/connection-draining](#connection-draining) | `bool` | `false` || | [appgw.ingress.kubernetes.io/connection-draining-timeout](#connection-draining) | `int32` (seconds) | `30` ||
+| [appgw.ingress.kubernetes.io/use-private-ip](#use-private-ip) | `bool` | `false` ||
+| [appgw.ingress.kubernetes.io/override-frontend-port](#override-frontend-port) | `bool` | `false` ||
| [appgw.ingress.kubernetes.io/cookie-based-affinity](#cookie-based-affinity) | `bool` | `false` || | [appgw.ingress.kubernetes.io/request-timeout](#request-timeout) | `int32` (seconds) | `30` || | [appgw.ingress.kubernetes.io/use-private-ip](#use-private-ip) | `bool` | `false` || | [appgw.ingress.kubernetes.io/backend-protocol](#backend-protocol) | `string` | `http` | `http`, `https` |
+| [appgw.ingress.kubernetes.io/hostname-extension](#hostname-extension) | `string` | `nil` ||
+| [appgw.ingress.kubernetes.io/waf-policy-for-path](#waf-policy-for-path) | `string` | `nil` ||
+| [appgw.ingress.kubernetes.io/appgw-ssl-certificate](#application-gateway-ssl-certificate) | `string` | `nil` ||
+| [appgw.ingress.kubernetes.io/appgw-ssl-profile](#application-gateway-ssl-profile) | `string` | `nil` ||
+| [appgw.ingress.kubernetes.io/appgw-trusted-root-certificate](#application-gateway-trusted-root-certificate) | `string` | `nil` ||
| [appgw.ingress.kubernetes.io/rewrite-rule-set](#rewrite-rule-set) | `string` | `nil` ||
+| [appgw.ingress.kubernetes.io/rewrite-rule-set-custom-resource](#rewrite-rule-set-custom-resource) ||||
+| [appgw.ingress.kubernetes.io/rule-priority](#rule-priority) | `int32` | `nil` ||
## Backend Path Prefix
In the previous example, you've defined an ingress resource named `go-server-ing
> [!NOTE] > In the above example, only one rule is defined. However, the annotations are applicable to the entire ingress resource, so if a user defined multiple rules, the backend path prefix would be set up for each of the paths specified. If a user wants different rules with different path prefixes (even for the same service), they would need to define different ingress resources.
+## Backend Hostname
+
+This annotation allows us to specify the host name that Application Gateway should use while talking to the Pods.
+
+### Usage
+
+```yaml
+appgw.ingress.kubernetes.io/backend-hostname: "internal.example.com"
+```
+
+### Example
+
+```yaml
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+ name: go-server-ingress-timeout
+ namespace: test-ag
+ annotations:
+ kubernetes.io/ingress.class: azure/application-gateway
+ appgw.ingress.kubernetes.io/backend-hostname: "internal.example.com"
+spec:
+ rules:
+ - http:
+ paths:
+ - path: /hello/
+ backend:
+ service:
+ name: store-service
+ port:
+ number: 80
+ pathType: Exact
+```
+
+## Custom Health Probe
+
+Application Gateway [can be configured](./application-gateway-probe-overview.md) to send custom health probes to the backend address pool. When these annotations are present, Kubernetes Ingress controller [creates a custom probe](./application-gateway-create-probe-portal.md) to monitor the backend application and applies the changes to the application gateway.
+
+`health-probe-hostname`: This annotation allows a custom hostname on the health probe.<br>
+`health-probe-port`: This annotation configures a custom health probe port.<br>
+`health-probe-path`: This annotation defines a path for the health probe.<br>
+`health-probe-status-code`: This annotation allows the health probe to accept different HTTP status codes.<br>
+`health-probe-interval`: This annotation defines the interval that the health probe runs at.<br>
+`health-probe-timeout`: This annotation defines how long the health probe will wait for a response before failing the probe.<br>
+`health-probe-unhealthy-threshold`: This annotation defines how many health probes must fail for the backend to be marked as unhealthy.
+
+### Usage
+
+```yaml
+appgw.ingress.kubernetes.io/health-probe-hostname: "contoso.com"
+appgw.ingress.kubernetes.io/health-probe-port: 80
+appgw.ingress.kubernetes.io/health-probe-path: "/"
+appgw.ingress.kubernetes.io/health-probe-status-code: "100-599"
+appgw.ingress.kubernetes.io/health-probe-interval: 30
+appgw.ingress.kubernetes.io/health-probe-timeout: 30
+appgw.ingress.kubernetes.io/health-probe-unhealthy-threshold: 2
+```
+
+### Example
+
+```yaml
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+ name: go-server-ingress
+ namespace: test-ag
+ annotations:
+ kubernetes.io/ingress.class: azure/application-gateway
+ appgw.ingress.kubernetes.io/health-probe-hostname: "contoso.com"
+ appgw.ingress.kubernetes.io/health-probe-port: 81
+ appgw.ingress.kubernetes.io/health-probe-path: "/probepath"
+ appgw.ingress.kubernetes.io/health-probe-status-code: "100-599"
+ appgw.ingress.kubernetes.io/health-probe-interval: 31
+ appgw.ingress.kubernetes.io/health-probe-timeout: 31
+ appgw.ingress.kubernetes.io/health-probe-unhealthy-threshold: 2
+spec:
+ rules:
+ - http:
+ paths:
+ - path: /
+ pathType: Exact
+ backend:
+ service:
+ name: go-server-service
+ port:
+ number: 80
+```
+ ## TLS Redirect Application Gateway [can be configured](./redirect-overview.md) to automatically redirect HTTP URLs to their HTTPS counterparts. When this annotation is present and TLS is properly configured, Kubernetes Ingress controller creates a [routing rule with a redirection configuration](./redirect-http-to-https-portal.md#add-a-routing-rule-with-a-redirection-configuration) and applies the changes to your Application Gateway. The redirect created will be HTTP `301 Moved Permanently`.
appgw.ingress.kubernetes.io/use-private-ip: "true"
apiVersion: networking.k8s.io/v1 kind: Ingress metadata:
- name: go-server-ingress-timeout
+ name: go-server-ingress-privateip
namespace: test-ag annotations: kubernetes.io/ingress.class: azure/application-gateway
spec:
rules: - http: paths:
- - path: /hello/
+ - path: /
pathType: Exact backend: service:
spec:
number: 80 ```
+## Override Frontend Port
+
+The annotation allows you to configure a frontend listener to use different ports other than 80/443 for http/https.
+
+If the port is within the App Gw authorized range (1 - 64999), this listener will be created on this specific port. If an invalid port or no port is set in the annotation, the configuration will fall back on default 80 or 443.
+
+### Usage
+
+```yaml
+appgw.ingress.kubernetes.io/override-frontend-port: "port"
+
+```
+
+### Example
+
+```yaml
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+ name: go-server-ingress-overridefrontendport
+ namespace: test-ag
+ annotations:
+ kubernetes.io/ingress.class: azure/application-gateway
+ appgw.ingress.kubernetes.io/override-frontend-port: "8080"
+spec:
+ rules:
+ - http:
+ paths:
+ - path: /hello/
+ backend:
+ service:
+ name: store-service
+ port:
+ number: 80
+ pathType: Exact
+```
+
+> [!NOTE]
+>External request will need to target http://somehost:8080 instead of http://somehost.
+ ## Backend Protocol The following annotation allows you to specify the protocol that Application Gateway should use while communicating with the pods. Supported Protocols are `http` and `https`.
spec:
rules: - http: paths:
- - path: /hello/
+ - path: /
+ pathType: Exact
+ backend:
+ service:
+ name: go-server-service
+ port:
+ number: 443
+```
+
+## Hostname Extension
+
+Application Gateway can be configured to accept multiple hostnames. The hostname-extention annotation allows for this by letting you define multiple hostnames including wildcard hostnames. This will append the hostnames onto the FQDN that is defined in the ingress spec.rules.host on the frontend listener so it is [configured as a multisite listener.](./multiple-site-overview.md)
+
+### Usage
+
+```yaml
+appgw.ingress.kubernetes.io/hostname-extension: "hostname1, hostname2"
+```
+
+### Example
+
+```yaml
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+ name: go-server-ingress-multisite
+ namespace: test-ag
+ annotations:
+ kubernetes.io/ingress.class: azure/application-gateway
+ appgw.ingress.kubernetes.io/hostname-extension: "hostname1, hostname2"
+spec:
+ rules:
+ - host: contoso.com
+ http:
+ paths:
+ - path: /
pathType: Exact backend: service:
spec:
number: 443 ```
+> [!NOTE]
+> In the above example the listener would be configured to accept traffic for the hostnames "hostname1.contoso.com" and "hostname2.contoso.com"
+
+## WAF Policy for Path
+
+This annotation allows you to attach an already created WAF policy to the list paths for a host within a Kubernetes Ingress resource being annotated.
+
+### Usage
+
+```yaml
+appgw.ingress.kubernetes.io/waf-policy-for-path: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SampleRG/providers/Microsoft.Network/applicationGatewayWebApplicationFirewallPolicies/AGICWAFPolcy"
+
+```
+
+### Example
+
+```yaml
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+ name: ad-server-ingress
+ namespace: commerce
+ annotations:
+ kubernetes.io/ingress.class: azure/application-gateway
+ appgw.ingress.kubernetes.io/waf-policy-for-path: "/subscriptions/abcd/resourceGroups/rg/providers/Microsoft.Network/applicationGatewayWebApplicationFirewallPolicies/adserver"
+spec:
+ rules:
+ - http:
+ paths:
+ - path: /ad-server
+ backend:
+ service:
+ name: ad-server
+ port:
+ number: 80
+ pathType: Exact
+ - path: /auth
+ backend:
+ service:
+ name: auth-server
+ port:
+ number: 80
+ pathType: Exact
+```
+
+> [!NOTE]
+> The WAF policy will be applied to both /ad-server and /auth URLs.
+
+## Application Gateway SSL Certificate
+
+The SSL certificate [can be configured to Application Gateway](/cli/azure/network/application-gateway/ssl-cert#az-network-application-gateway-ssl-cert-create) either from a local PFX certificate file or a reference to an Azure Key Vault unversioned secret ID. When the annotation is present with a certificate name and the certificate is pre-installed in Application Gateway, Kubernetes Ingress controller will create a routing rule with a HTTPS listener and apply the changes to your App Gateway. appgw-ssl-certificate annotation can also be used together with ssl-redirect annotation in case of SSL redirect.
+
+Please refer to appgw-ssl-certificate feature for more details.
+
+> [!NOTE]
+> Annotation "appgw-ssl-certificate" will be ignored when TLS Spec is defined in ingress at the same time. If a user wants different certs with different hosts(multi tls certificate termination), they would need to define different ingress resources.
+
+### Usage
+
+```yaml
+appgw.ingress.kubernetes.io/appgw-ssl-certificate: "name-of-appgw-installed-certificate"
+```
+
+### Example
+
+```yaml
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+ name: go-server-ingress-certificate
+ namespace: test-ag
+ annotations:
+ kubernetes.io/ingress.class: azure/application-gateway
+ appgw.ingress.kubernetes.io/appgw-ssl-certificate: "name-of-appgw-installed-certificate"
+spec:
+ rules:
+ - host: www.contoso.com
+ http:
+ paths:
+ - backend:
+ service:
+ name: websocket-repeater
+ port:
+ number: 80
+
+```
+
+## Application Gateway SSL Profile
+
+Users can configure a ssl profile on the Application Gateway per listener. When the annotation is present with a profile name and the profile is pre-installed in the Application Gateway, Kubernetes Ingress controller will create a routing rule with a HTTPS listener and apply the changes to your App Gateway.
+
+### Usage
+
+```yaml
+appgw.ingress.kubernetes.io/appgw-ssl-certificate: "name-of-appgw-installed-certificate"
+appgw.ingress.kubernetes.io/appgw-ssl-profile: "SampleSSLProfile"
+```
+
+### Example
+
+```yaml
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+ name: go-server-ingress-certificate
+ namespace: test-ag
+ annotations:
+ kubernetes.io/ingress.class: azure/application-gateway
+ appgw.ingress.kubernetes.io/appgw-ssl-certificate: "name-of-appgw-installed-certificate"
+ appgw.ingress.kubernetes.io/appgw-ssl-profile: "SampleSSLProfile"
+spec:
+ rules:
+ - host: www.contoso.com
+ http:
+ paths:
+ - backend:
+ service:
+ name: websocket-repeater
+ port:
+ number: 80
+```
+
+## Application Gateway Trusted Root Certificate
+
+Users now can configure their own root certificates to Application Gateway to be trusted via AGIC. The annotation appgw-trusted-root-certificate can be used together with annotation backend-protocol to indicate end-to-end ssl encryption, multiple root certificates, separated by comma, if specified, for example, "name-of-my-root-cert1,name-of-my-root-certificate2".
+
+### Usage
+
+```yaml
+appgw.ingress.kubernetes.io/backend-protocol: "https"
+appgw.ingress.kubernetes.io/appgw-trusted-root-certificate: "name-of-my-root-cert1"
+```
+
+### Example
+
+```yaml
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+ name: go-server-ingress-certificate
+ namespace: test-ag
+ annotations:
+ kubernetes.io/ingress.class: azure/application-gateway
+ appgw.ingress.kubernetes.io/backend-protocol: "https"
+ appgw.ingress.kubernetes.io/appgw-trusted-root-certificate: "name-of-my-root-cert1"
+spec:
+ rules:
+ - host: www.contoso.com
+ http:
+ paths:
+ - backend:
+ service:
+ name: websocket-repeater
+ port:
+ number: 80
+```
+ ## Rewrite Rule Set The following annotation allows you to assign an existing rewrite rule set to the corresponding request routing rule.
spec:
port: number: 8080 ```+
+## Rewrite Rule Set Custom Resource
+
+> [!Note]
+> [Application Gateway for Containers](https://aka.ms/agc) has been released, which introduces numerous performance, resilience, and feature changes. Please consider leveraging Application Gateway for Containers for your next deployment.
+> URL Rewrite rules for Application Gateway for Containers may be found [here for Gateway API](./for-containers/how-to-url-rewrite-gateway-api.md) and [here for Ingress API](for-containers/how-to-url-rewrite-ingress-api.md).
+> Header Rewrite rules for Application Gateway for Containers may be found [here for Gateway API](./for-containers/how-to-header-rewrite-gateway-api.md).
+
+> [!Note]
+> This feature is supported since 1.6.0-rc1. Use [`appgw.ingress.kubernetes.io/rewrite-rule-set`](#rewrite-rule-set), which allows using an existing rewrite rule set on Application Gateway.
+
+Application Gateway allows you to rewrite selected content of requests and responses. With this feature, you can translate URLs, query string parameters as well as modify request and response headers. It also allows you to add conditions to ensure that the URL or the specified headers are rewritten only when certain conditions are met. These conditions are based on the request and response information. Rewrite Rule Set Custom Resource brings this feature to AGIC.
+
+HTTP headers allow a client and server to pass additional information with a request or response. By rewriting these headers, you can accomplish important tasks, such as adding security-related header fields like HSTS/ X-XSS-Protection, removing response header fields that might reveal sensitive information, and removing port information from X-Forwarded-For headers.
+
+With URL rewrite capability, you can: - Rewrite the host name, path and query string of the request URL - Choose to rewrite the URL of all requests or only those requests which match one or more of the conditions you set. These conditions are based on the request and response properties (request header, response header and server variables). - Choose to route the request based on either the original URL or the rewritten URL
+
+### Usage
+
+```yaml
+appgw.ingress.kubernetes.io/rewrite-rule-set-custom-resource
+```
+
+### Example
+
+```yaml
+apiVersion: appgw.ingress.azure.io/v1beta1
+kind: AzureApplicationGatewayRewrite
+metadata:
+ name: my-rewrite-rule-set-custom-resource
+spec:
+ rewriteRules:
+ - name: rule1
+ ruleSequence: 21
+ conditions:
+ - ignoreCase: false
+ negate: false
+ variable: http_req_Host
+ pattern: example.com
+ actions:
+ requestHeaderConfigurations:
+ - actionType: set
+ headerName: incoming-test-header
+ headerValue: incoming-test-value
+ responseHeaderConfigurations:
+ - actionType: set
+ headerName: outgoing-test-header
+ headerValue: outgoing-test-value
+ urlConfiguration:
+ modifiedPath: "/api/"
+ modifiedQueryString: "query=test-value"
+ reroute: false
+```
+
+## Rule Priority
+
+This annotation allows for application gateway ingress controller to explicitly set the priority of the associated [Request Routing Rules.](./multiple-site-overview.md#request-routing-rules-evaluation-order)
+
+### Usage
+
+```yaml
+appgw.ingress.kubernetes.io/rule-priority:
+```
+
+### Example
+
+```yaml
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+ name: go-server-ingress-rulepriority
+ namespace: test-ag
+ annotations:
+ kubernetes.io/ingress.class: azure/application-gateway
+ appgw.ingress.kubernetes.io/rule-priority: 10
+spec:
+ rules:
+ - http:
+ paths:
+ - path: /
+ pathType: Exact
+ backend:
+ service:
+ name: go-server-service
+ port:
+ number: 8080
+```
+
+In the above example the request routing rule would have a priority of 10 set.
application-gateway Key Vault Certs https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/application-gateway/key-vault-certs.md
After Application Gateway is configured to use Key Vault certificates, its insta
Application Gateway uses a secret identifier in Key Vault to reference the certificates. For Azure PowerShell, the Azure CLI, or Azure Resource Manager, we strongly recommend that you use a secret identifier that doesn't specify a version. This way, Application Gateway automatically rotates the certificate if a newer version is available in your Key Vault. An example of a secret URI without a version is `https://myvault.vault.azure.net/secrets/mysecret/`. You may refer to the PowerShell steps provided in the [following section](#key-vault-azure-role-based-access-control-permission-model).
-The Azure portal supports only Key Vault certificates, not secrets. Application Gateway still supports referencing secrets from Key Vault, but only through non-portal resources like PowerShell, the Azure CLI, APIs, and Azure Resource Manager templates (ARM templates).
+The Azure portal supports only Key Vault certificates, not secrets. Application Gateway still supports referencing secrets from Key Vault, but only through non-portal resources like PowerShell, the Azure CLI, APIs, and Azure Resource Manager templates (ARM templates). Key Vault certificates must have an exportable private key in order for the Application Gateway to be able to use them.
References to Key Vaults in other Azure subscriptions are supported, but must be configured via ARM Template, Azure PowerShell, CLI, Bicep, etc. Cross-subscription key vault configuration is not supported by Application Gateway via Azure portal today.
application-gateway Quick Create Portal https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/application-gateway/quick-create-portal.md
Create the application gateway using the tabs on the **Create application gatewa
- **Name**: Enter *myVNet* for the name of the virtual network. - **Subnet name** (Application Gateway subnet): The **Subnets** grid shows a subnet named *default*. Change the name of this subnet to *myAGSubnet*.<br>The application gateway subnet can contain only application gateways. No other resources are allowed. The default IP address range provided is 10.0.0.0/24.
-
- - **Subnet name** (backend server subnet): In the second row of the **Subnets** grid, enter *myBackendSubnet* in the **Subnet name** column.
![Screenshot of create new application gateway: virtual network.](./media/application-gateway-create-gateway-portal/application-gateway-create-vnet.png)
automation Automation Security Overview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/automation/automation-security-overview.md
You need the `Microsoft.Authorization/*/Write` permission. This permission is ob
- [Owner](../role-based-access-control/built-in-roles.md#owner) - [User Access Administrator](../role-based-access-control/built-in-roles.md#user-access-administrator)
-To learn more about classic subscription permissions, see [Azure classic subscription administrators](../role-based-access-control/classic-administrators.md#add-a-co-administrator).
+To learn more about classic subscription permissions, see [Azure classic subscription administrators](../role-based-access-control/classic-administrators.md).
<a name='azure-ad-permissions'></a>
automation Overview Monitoring Agent https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/automation/change-tracking/overview-monitoring-agent.md
**Applies to:** :heavy_check_mark: Windows VMs :heavy_check_mark: Linux VMs :heavy_check_mark: Windows Registry :heavy_check_mark: Windows Files :heavy_check_mark: Linux Files :heavy_check_mark: Windows Software :heavy_check_mark: Windows Services & Linux Daemons > [!Important]
-> - Currently, Change tracking and inventory uses Log Analytics Agent and this is scheduled to retire by 31.August.2024. We recommend that you use Azure Monitoring Agent as the new supporting agent.
-> - Guidance on migration from Change Tracking & Inventory using Log Analytics agent to Azure Monitoring Agent will be available once it is generally available. [Learn more](guidance-migration-log-analytics-monitoring-agent.md).
+> - Change Tracking and Inventory using Log Analytics agent has retired on **31 August 2024**. Follow the guidelines for [migration from Change Tracking and inventory using Log Analytics to Change Tracking and inventory using Azure Monitoring Agent version](guidance-migration-log-analytics-monitoring-agent.md)
> - We recommend that you use Change Tracking with Azure Monitoring Agent with the Change tracking extension version 2.20.0.0 (or above) to access the GA version of this service. This article explains on the latest version of change tracking support using Azure Monitoring Agent as a singular agent for data collection.
azure-monitor Azure Monitor Agent Troubleshoot Windows Vm https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/agents/azure-monitor-agent-troubleshoot-windows-vm.md
Follow the steps below to troubleshoot the latest version of the Azure Monitor a
3. **Verify that the agent is running**: 1. Check if the agent is emitting heartbeat logs to Log Analytics workspace using the query below. Skip if 'Custom Metrics' is the only destination in the DCR: ```Kusto
- Heartbeat | where Category == "Azure Monitor Agent" and 'Computer' == "<computer-name>" | take 10
+ Heartbeat | where Category == "Azure Monitor Agent" and Computer == "<computer-name>" | take 10
``` 2. If not, open Task Manager and check if 'MonAgentCore.exe' process is running. If it is, wait for 5 minutes for heartbeat to show up. 3. If not, check if you see any errors in core agent logs located at `C:\WindowsAzure\Resources\AMADataStore.<virtual-machine-name>\Configuration` on your machine
azure-monitor Migrate To Azure Storage Lifecycle Policy https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/essentials/migrate-to-azure-storage-lifecycle-policy.md
Previously updated : 08/16/2023 Last updated : 09/02/2024 #Customer intent: As a dev-ops administrator I want to migrate my retention setting from diagnostic setting retention storage to Azure Storage lifecycle management so that it continues to work after the feature has been deprecated.
For logs sent to a Log Analytics workspace, retention is set for each table on t
> - March 31, 2023 ΓÇô The Diagnostic Settings Storage Retention feature will no longer be available to configure new retention rules for log data. This includes using the portal, CLI PowerShell, and ARM and Bicep templates. If you have configured retention settings, you'll still be able to see and change them in the portal. > - September 30, 2025 ΓÇô All retention functionality for the Diagnostic Settings Storage Retention feature will be disabled across all environments. -- ## Prerequisites An existing diagnostic setting logging to a storage account.
-## Migration Procedures
-
+## Migration procedures
## [Azure portal](#tab/portal)+ To migrate your diagnostics settings retention rules, follow the steps below: 1. Go to the Diagnostic Settings page for your logging resource and locate the diagnostic setting you wish to migrate 1. Set the retention for your logged categories to *0* 1. Select **Save**
- :::image type="content" source="./media/retention-migration/diagnostics-setting.png" alt-text="A screenshot showing a diagnostics setting page.":::
+ :::image type="content" source="./media/retention-migration/diagnostics-setting.png" lightbox="./media/retention-migration/diagnostics-setting.png" alt-text="A screenshot showing a diagnostics setting page.":::
1. Navigate to the storage account you're logging to 1. Under **Data management**, select **Lifecycle Management** to view or change lifecycle management policies 1. Select List View, and select **Add a rule** 1. Enter a **Rule name** 1. Under **Rule Scope**, select **Limit blobs with filters** 1. Under **Blob Type**, select **Append Blobs** and **Base blobs** under **Blob subtype**. 1. Select **Next** 1. Set your retention time, then select **Next** 1. On the **Filters** tab, under **Blob prefix** set path or prefix to the container or logs you want the retention rule to apply to. The path or prefix can be at any level within the container and will apply to all blobs under that path or prefix.
-For example, for *all* insight activity logs, use the container *insights-activity-logs* to set the retention for all of the log in that container logs.
+For example, for *all* insight activity logs, use the container *insights-activity-logs* to set the retention for all of the logs in that container.
To set the rule for a specific webapp app, use *insights-activity-logs/ResourceId=/SUBSCRIPTIONS/\<your subscription Id\>/RESOURCEGROUPS/\<your resource group\>/PROVIDERS/MICROSOFT.WEB/SITES/\<your webapp name\>*. Use the Storage browser to help you find the path or prefix.
- The example below shows the prefix for a specific web app: **insights-activity-logs/ResourceId=/SUBSCRIPTIONS/d05145d-4a5d-4a5d-4a5d-5267eae1bbc7/RESOURCEGROUPS/rg-001/PROVIDERS/MICROSOFT.WEB/SITES/appfromdocker1*.
- To set the rule for all resources in the resource group, use *insights-activity-logs/ResourceId=/SUBSCRIPTIONS/d05145d-4a5d-4a5d-4a5d-5267eae1bbc7/RESOURCEGROUPS/rg-001*.
+ The example below shows the prefix for a specific web app: **insights-activity-logs/ResourceId=/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/RESOURCEGROUPS/rg-001/PROVIDERS/MICROSOFT.WEB/SITES/appfromdocker1*.
+ To set the rule for all resources in the resource group, use *insights-activity-logs/ResourceId=/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e7/RESOURCEGROUPS/rg-001*.
:::image type="content" source="./media/retention-migration/blob-prefix.png" alt-text="A screenshot showing the Storage browser and resource path." lightbox="./media/retention-migration/blob-prefix.png"::: 1. Select **Add** to save the rule.
To set the rule for a specific webapp app, use *insights-activity-logs/ResourceI
## [CLI](#tab/cli)
-Use the [az storage account management-policy create](/cli/azure/storage/account/management-policy#az-storage-account-management-policy-create) command to create a lifecycle management policy. You must still set the retention in your diagnostic settings to *0*. See the Azure portal section above for more information.
+Use the [az storage account management-policy create](/cli/azure/storage/account/management-policy#az-storage-account-management-policy-create) command to create a lifecycle management policy. You must still set the retention in your diagnostic settings to *0*. For more information, see the migration procedures for the Azure Portal.
The sample policy definition file below sets the retention for all blobs in the
"appendBlob" ], "prefixMatch": [
- "insights-activity-logs/ResourceId=/SUBSCRIPTIONS/ABCD1234-5849-ABCD-1234-9876543210AB"
+ "insights-activity-logs/ResourceId=/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
] } }
The sample policy definition file below sets the retention for all blobs in the
## [Templates](#tab/templates)
-Apply the following template to create a lifecycle management policy. You must still set the retention in your diagnostic settings to *0*. See the Azure portal section above for more information.
+Apply the following template to create a lifecycle management policy. You must still set the retention in your diagnostic settings to *0*. For more information, see the migration procedures for the Azure Portal.
```azurecli
az deployment group create --resource-group <resource group name> --template-fi
```
-The following template sets the retention for storage account *azmonstorageaccount001* for all blobs in the container *insights-activity-logs* for all resources for the subscription ID *ABCD1234-5849-ABCD-1234-9876543210AB*.
+The following template sets the retention for storage account *azmonstorageaccount001* for all blobs in the container *insights-activity-logs* for all resources for the subscription ID *aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e*.
```json {
The following template sets the retention for storage account *azmonstorageaccou
"appendBlob" ], "prefixMatch": [
- "insights-activity-logs/ResourceId=/SUBSCRIPTIONS/ABCD1234-5849-ABCD-1234-9876543210AB"
+ "insights-activity-logs/ResourceId=/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
] } }
azure-monitor Basic Logs Azure Tables https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/logs/basic-logs-azure-tables.md
All custom tables created with or migrated to the [Logs ingestion API](logs-inge
| Service | Table | |:|:| | Azure Active Directory | [AADDomainServicesDNSAuditsGeneral](/azure/azure-monitor/reference/tables/AADDomainServicesDNSAuditsGeneral)<br> [AADDomainServicesDNSAuditsDynamicUpdates](/azure/azure-monitor/reference/tables/AADDomainServicesDNSAuditsDynamicUpdates)<br>[AADManagedIdentitySignInLogs](/azure/azure-monitor/reference/tables/AADManagedIdentitySignInLogs)<br>[AADNonInteractiveUserSignInLogs](/azure/azure-monitor/reference/tables/AADNonInteractiveUserSignInLogs)<br>[AADServicePrincipalSignInLogs](/azure/azure-monitor/reference/tables/AADServicePrincipalSignInLogs) <br>[ADFSSignInLogs](/azure/azure-monitor/reference/tables/ADFSSignInLogs) |
+| Azure Cache for Redis | [ACREntraAuthenticationAuditLog](/azure/azure-monitor/reference/tables/ACREntraAuthenticationAuditLog) |
| Azure Load Balancing | [ALBHealthEvent](/azure/azure-monitor/reference/tables/ALBHealthEvent) | | Azure Databricks | [DatabricksBrickStoreHttpGateway](/azure/azure-monitor/reference/tables/databricksbrickstorehttpgateway)<br>[DatabricksDataMonitoring](/azure/azure-monitor/reference/tables/databricksdatamonitoring)<br>[DatabricksFilesystem](/azure/azure-monitor/reference/tables/databricksfilesystem)<br>[DatabricksDashboards](/azure/azure-monitor/reference/tables/databricksdashboards)<br>[DatabricksCloudStorageMetadata](/azure/azure-monitor/reference/tables/databrickscloudstoragemetadata)<br>[DatabricksPredictiveOptimization](/azure/azure-monitor/reference/tables/databrickspredictiveoptimization)<br>[DatabricksIngestion](/azure/azure-monitor/reference/tables/databricksingestion)<br>[DatabricksMarketplaceConsumer](/azure/azure-monitor/reference/tables/databricksmarketplaceconsumer)<br>[DatabricksLineageTracking](/azure/azure-monitor/reference/tables/databrickslineagetracking) | API Management | [ApiManagementGatewayLogs](/azure/azure-monitor/reference/tables/ApiManagementGatewayLogs)<br>[ApiManagementWebSocketConnectionLogs](/azure/azure-monitor/reference/tables/ApiManagementWebSocketConnectionLogs) |
All custom tables created with or migrated to the [Logs ingestion API](logs-inge
| DNS Security Policies | [DNSQueryLogs](/azure/azure-monitor/reference/tables/DNSQueryLogs) | | Dev Centers | [DevCenterDiagnosticLogs](/azure/azure-monitor/reference/tables/DevCenterDiagnosticLogs)<br>[DevCenterResourceOperationLogs](/azure/azure-monitor/reference/tables/DevCenterResourceOperationLogs)<br>[DevCenterBillingEventLogs](/azure/azure-monitor/reference/tables/DevCenterBillingEventLogs) | | Data Transfer | [DataTransferOperations](/azure/azure-monitor/reference/tables/DataTransferOperations) |
+| Event Grid Namespaces | [EGNSuccessfulHttpDataPlaneOperations](/azure/azure-monitor/reference/tables/EGNSuccessfulHttpDataPlaneOperations)<br>[EGNFailedHttpDataPlaneOperations](/azure/azure-monitor/reference/tables/EGNFailedHttpDataPlaneOperations)|
| Event Hubs | [AZMSArchiveLogs](/azure/azure-monitor/reference/tables/AZMSArchiveLogs)<br>[AZMSAutoscaleLogs](/azure/azure-monitor/reference/tables/AZMSAutoscaleLogs)<br>[AZMSCustomerManagedKeyUserLogs](/azure/azure-monitor/reference/tables/AZMSCustomerManagedKeyUserLogs)<br>[AZMSKafkaCoordinatorLogs](/azure/azure-monitor/reference/tables/AZMSKafkaCoordinatorLogs)<br>[AZMSKafkaUserErrorLogs](/azure/azure-monitor/reference/tables/AZMSKafkaUserErrorLogs) | | Firewalls | [AZFWFlowTrace](/azure/azure-monitor/reference/tables/AZFWFlowTrace) | | Health Care APIs | [AHDSMedTechDiagnosticLogs](/azure/azure-monitor/reference/tables/AHDSMedTechDiagnosticLogs)<br>[AHDSDicomDiagnosticLogs](/azure/azure-monitor/reference/tables/AHDSDicomDiagnosticLogs)<br>[AHDSDicomAuditLogs](/azure/azure-monitor/reference/tables/AHDSDicomAuditLogs) |
azure-monitor Move Workspace https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/logs/move-workspace.md
description: Learn how to move your Log Analytics workspace to another subscript
Previously updated : 10/30/2023 Last updated : 08/12/2024
azure-monitor Quick Create Workspace https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/logs/quick-create-workspace.md
description: Learn how to create a Log Analytics workspace to enable management
Previously updated : 07/02/2023 Last updated : 08/12/2024 # Customer intent: As a DevOps engineer or IT expert, I want to set up a workspace to collect logs from multiple data sources from Azure, on-premises, and third-party cloud deployments. # Create a Log Analytics workspace
-This article shows you how to create a Log Analytics workspace. When you collect logs and data, the information is stored in a workspace. A workspace has a unique workspace ID and resource ID. The workspace name must be unique for a given resource group. After you've created a workspace, configure data sources and solutions to store their data there.
+A Log Analytics workspace is a data store into which you can collect any type of log data from all of your Azure and non-Azure resources and applications. We recommend that you send all log data to one Log Analytics workspace, unless you have specific business needs that require you to create multiple workspaces, as described in [Design a Log Analytics workspace architecture](./workspace-design.md).
-You need a Log Analytics workspace if you collect data from:
-
-* Azure resources in your subscription.
-* On-premises computers monitored by System Center Operations Manager.
-* Device collections from Configuration Manager.
-* Diagnostics or log data from Azure Storage.
+This article explains how to create a Log Analytics workspace.
## Prerequisites
When you create a workspace that was deleted in the last 14 days and in [soft-de
Now that you have a workspace available, you can configure collection of monitoring telemetry, run log searches to analyze that data, and add a management solution to provide more data and analytic insights. To learn more: * See [Monitor health of Log Analytics workspace in Azure Monitor](../logs/monitor-workspace.md) to create alert rules to monitor the health of your workspace.
-* See [Collect Azure service logs and metrics for use in Log Analytics](../essentials/resource-logs.md#send-to-log-analytics-workspace) to enable data collection from Azure resources with Azure Diagnostics or Azure Storage.
+* See [Collect Azure service logs and metrics for use in Log Analytics](../essentials/resource-logs.md#send-to-log-analytics-workspace) to enable data collection from Azure resources with Azure Diagnostics or Azure Storage.
azure-signalr Signalr Howto Troubleshoot Guide https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-signalr/signalr-howto-troubleshoot-guide.md
description: Learn how to troubleshoot common issues
Previously updated : 07/02/2024 Last updated : 08/29/2024 ms.devlang: csharp
This article provides troubleshooting guidance for some of the common issues tha
### Root cause
-For HTTP/2, the max length for a single header is **4 K**, so if using browser to access Azure service, there will be an error `ERR_CONNECTION_` for this limitation.
+For HTTP/2, the max length for a single header is **4 K**, so if using browser to access Azure service, there's an error `ERR_CONNECTION_` for this limitation.
-For HTTP/1.1, or C# clients, the max URI length is **12 K**, the max header length is **16 K**.
+For HTTP/1.1, or C# clients, the max URI length is **12 K** and the max header length is **16 K**.
-With SDK version **1.0.6** or higher, `/negotiate` will throw `413 Payload Too Large` when the generated access token is larger than **4 K**.
+With SDK version **1.0.6** or higher, `/negotiate` throws `413 Payload Too Large` when the generated access token is larger than **4 K**.
### Solution
services.MapAzureSignalR(GetType().FullName, options =>
### Possible errors * ASP.NET "No server available" error [#279](https://github.com/Azure/azure-signalr/issues/279)
-* ASP.NET "The connection isn't active, data cannot be sent to the service." error [#324](https://github.com/Azure/azure-signalr/issues/324)
-* "An error occurred while making the HTTP request to `https://<API endpoint>`. This error could be because the server certificate is not configured properly with HTTP.SYS in the HTTPS case. This error could also be caused by a mismatch of the security binding between the client and the server."
+* ASP.NET "The connection isn't active, data can't be sent to the service." error [#324](https://github.com/Azure/azure-signalr/issues/324)
+* "An error occurred while making the HTTP request to `https://<API endpoint>`. This error might occur if the server certificate isn't properly configured with HTTP.SYS in the HTTPS case. The possible cause of this error is a mismatch of the security binding between the client and server."
### Root cause
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
### Root cause
-Check if your client request has multiple `hub` query strings. `hub` is a preserved query parameter and 400 will throw if the service detects more than one `hub` in the query.
+Check if your client request has multiple `hub` query strings. The `hub` is preserved query parameter, and if the service detects more than one `hub` in the query, it returns a 400 error.
[Having issues or feedback about the troubleshooting? Let us know.](https://aka.ms/asrs/survey/troubleshooting)
For ASP.NET SignalR, the client sends a `/ping` "keep alive" request to the serv
### Solution
-For security concerns, extend TTL isn't encouraged. We suggest adding reconnect logic from the client to restart the connection when such 401 occurs. When the client restarts the connection, it will negotiate with app server to get the JWT token again and get a renewed token.
+For security concerns, extend TTL isn't encouraged. We suggest adding reconnect logic from the client to restart the connection when such 401 occurs. When the client restarts the connection, it negotiates with app server to get the JWT token again and get a renewed token.
Check [here](#restart_connection) for how to restart client connections.
For a SignalR persistent connection, it first `/negotiate` to Azure SignalR serv
## 404 returned for ASP.NET SignalR's reconnect request
-For ASP.NET SignalR, when the [client connection drops](#client_connection_drop), it reconnects using the same `connectionId` for three times before stopping the connection. `/reconnect` can help if the connection is dropped due to network intermittent issues that `/reconnect` can reestablish the persistent connection successfully. Under other circumstances, for example, the client connection is dropped due to the routed server connection is dropped, or SignalR Service has some internal errors like instance restart/failover/deployment, the connection no longer exists, thus `/reconnect` returns `404`. It's the expected behavior for `/reconnect` and after three times retry the connection stops. We suggest having [connection restart](#restart_connection) logic when connection stops.
+For ASP.NET SignalR, when the [client connection drops](#client_connection_drop), it reconnects using the same `connectionId` for three times before stopping the connection. `/reconnect` can help if the connection is dropped due to network intermittent issues that `/reconnect` can reestablish the persistent connection successfully. Under other circumstances, for example, the client connection is dropped due to the routed server connection is dropped, or SignalR Service has some internal errors like instance restart/failover/deployment. The connection no longer exists, thus `/reconnect` returns `404`. It's the expected behavior for `/reconnect` and after three times retry the connection stops. We suggest having [connection restart](#restart_connection) logic when connection stops.
[Having issues or feedback about the troubleshooting? Let us know.](https://aka.ms/asrs/survey/troubleshooting)
There are two cases.
For **Free** instances, **Concurrent** connection count limit is 20 For **Standard** instances, **concurrent** connection count limit **per unit** is 1 K, which means Unit100 allows 100-K concurrent connections.
-The connections include both client and server connections. check [here](./signalr-concept-messages-and-connections.md#how-connections-are-counted) for how connections are counted.
+The connections include both client and server connections. Check [here](./signalr-concept-messages-and-connections.md#how-connections-are-counted) for how connections are counted.
### NegotiateThrottled
-When there are too many client negotiate requests at the **same** time, it may get throttled. The limit relates to the unit counts that more units has a higher limit. Besides, we suggest having a random delay before reconnecting, check [here](#restart_connection) for retry samples.
+When there are too many clients negotiate requests at the **same** time, it might get throttled. The limit relates to the unit counts that more units have a higher limit. Besides, we suggest having a random delay before reconnecting, check [here](#restart_connection) for retry samples.
[Having issues or feedback about the troubleshooting? Let us know.](https://aka.ms/asrs/survey/troubleshooting)
Server-side logging for ASP.NET Core SignalR integrates with the `ILogger` based
}) ```
-Logger categories for Azure SignalR always start with `Microsoft.Azure.SignalR`. To enable detailed logs from Azure SignalR, configure the preceding prefixes to `Debug` level in your **appsettings.json** file like below:
+Logger categories for Azure SignalR always start with `Microsoft.Azure.SignalR`. To enable detailed logs from Azure SignalR, configure the preceding prefixes to `Debug` level in your **appsettings.json** file, see the following example:
```json {
When the client is connected to the Azure SignalR, the persistent connection bet
Client connections can drop under various circumstances: * When `Hub` throws exceptions with the incoming request
-* When the server connection, which the client routed to, drops, see below section for details on [server connection drops](#server_connection_drop)
+* When the server connection, which the client routed to, drops, see the following section for details on [server connection drops](#server_connection_drop)
* When a network connectivity issue happens between client and SignalR Service * When SignalR Service has some internal errors like instance restart, failover, deployment, and so on
Client connections can drop under various circumstances:
## Client connection increases constantly
-It might be caused by improper usage of client connection. If someone forgets to stop/dispose SignalR client, the connection remains open.
+Improper usage of the client connection might cause it. If someone forgets to stop/dispose SignalR client, the connection remains open.
-### Possible errors seen from the SignalR's metrics that is in Monitoring section of Azure portal resource menu
+### Possible errors seen from the SignalR's metrics that are in Monitoring section of Azure portal resource menu
Client connections rise constantly for a long time in Azure SignalR's Metrics.
Client connections rise constantly for a long time in Azure SignalR's Metrics.
### Root cause
-SignalR client connection's `DisposeAsync` never be called, the connection keeps open.
+SignalR client connection's `DisposeAsync` never be called and the connection keeps open.
### Troubleshooting guide
finally
#### Azure Function example
-This issue often occurs when someone establishes a SignalR client connection in an Azure Function method instead of making it a static member in the function class. You might expect only one client connection to be established, but instead you see client connection count increase constantly in metrics. All these connections drop only after the Azure Function or Azure SignalR service restarts. This behavior is because for **each** request, Azure Function creates **one** client connection, and if you don't stop client connection in the function method, the client keeps the connections alive to Azure SignalR service.
+This issue often occurs when someone establishes a SignalR client connection in an Azure Function method instead of making it a static member in the function class. You might expect only one client connection to be established, but instead you see the client connection count increase constantly in metrics. All these connections drop only after the Azure Function or Azure SignalR service restarts. This behavior occurs because Azure Function establishes **one** client connection for **each** request and if you don't stop the client connection in the function method, the client keeps the connections alive to Azure SignalR service.
#### Solution
This issue often occurs when someone establishes a SignalR client connection in
## Server connection drops
-When the app server starts, in the background, the Azure SDK starts to initiate server connections to the remote Azure SignalR. As described in [Internals of Azure SignalR Service](https://github.com/Azure/azure-signalr/blob/dev/docs/internal.md), Azure SignalR routes incoming client traffics to these server connections. Once a server connection is dropped, all the client connections it serves will be closed too.
+When the app server starts, in the background, the Azure SDK starts to initiate server connections to the remote Azure SignalR. As described in [Internals of Azure SignalR Service](https://github.com/Azure/azure-signalr/blob/dev/docs/internal.md), Azure SignalR routes incoming client traffics to these server connections. When a server connection is dropped, it closes all the client connections it was serving.
-As the connections between the app server and SignalR Service are persistent connections, they may experience network connectivity issues. In the Server SDK, we have an **Always Reconnect** strategy to server connections. As a best practice, we also encourage users to add continuous reconnection logic to the clients with a random delay time to avoid massive simultaneous requests to the server.
+As the connections between the app server and SignalR Service are persistent connections, they might experience network connectivity issues. In the Server SDK, we have an **Always Reconnect** strategy to server connections. As a best practice, we also encourage users to add continuous reconnection logic to the clients with a random delay time to avoid massive simultaneous requests to the server.
-Regularly, there are new version releases for the Azure SignalR Service, and sometimes the Azure-wide patching or upgrades or occasionally interruption from our dependent services. These events may bring in a short period of service disruption, but as long as client-side has a disconnect/reconnect mechanism, the effect is minimal like any client-side caused disconnect-reconnect.
+Regularly, there are new version releases for the Azure SignalR Service, and sometimes the Azure-wide patching or upgrades or occasionally interruption from our dependent services. These events might bring in a short period of service disruption, but as long as client-side has a disconnect/reconnect mechanism, the effect is minimal like any client-side caused disconnect-reconnect.
This section describes several possibilities leading to server connection drop, and provides some guidance on how to identify the root cause.
This section describes several possibilities leading to server connection drop,
Server-service connection is closed by **ASRS**(**A**zure **S**ignal**R** **S**ervice).
-For ping timeout, it might be caused by high CPU usage or thread pool starvation on the server side.
+High CPU usage or thread pool starvation on the server side might cause a ping timeout.
For ASP.NET SignalR, a known issue was fixed in SDK 1.6.0. Upgrade your SDK to newest version.
For ASP.NET SignalR, a known issue was fixed in SDK 1.6.0. Upgrade your SDK to n
If your server is starving, that means no threads are working on message processing. All threads aren't responding in a certain method.
-Normally, this scenario is caused by async over sync or by `Task.Result`/`Task.Wait()` in async methods.
+Normally, in async methods, async over sync or by `Task.Result`/`Task.Wait()` causes this scenario.
See [ASP.NET Core performance best practices](/aspnet/core/performance/performance-best-practices#avoid-blocking-calls).
Add it to your service:
service.AddSingleton<ThreadPoolStarvationDetector>(); ```
-Then, check your log when the server connection is disconnected by ping timeout.
+Then, check your log when the server disconnected due to ping timeout.
### How to find the root cause of thread pool starvation
container-registry Container Registry Tasks Overview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/container-registry/container-registry-tasks-overview.md
For example, with triggers for updates to a base image, you can automate [OS and
> [!IMPORTANT] > Azure Container Registry task runs are temporarily paused from Azure free credits. This pause might affect existing task runs. If you encounter problems, open a [support case](../azure-portal/supportability/how-to-create-azure-support-request.md) for our team to provide additional guidance.
->[! WARNING]
-Please be advised that any information provided on the command line or as part of a URI may be logged as part of Azure Container Registry (ACR) diagnostic tracing. This includes sensitive data such as credentials, GitHub personal access tokens, and other secure information. Exercise caution to prevent any potential security risks, it is crucial to avoid including sensitive details in command lines or URIs that are subject to diagnostic logging.
+> [!WARNING]
+> Please be advised that any information provided on the command line or as part of a URI may be logged as part of Azure Container Registry (ACR) diagnostic tracing. This includes sensitive data such as credentials, GitHub personal access tokens, and other secure information. Exercise caution to prevent any potential security risks, it is crucial to avoid including sensitive details in command lines or URIs that are subject to diagnostic logging.
## Task scenarios
cost-management-billing Cancel Azure Subscription https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cost-management-billing/manage/cancel-azure-subscription.md
The following table describes the permission required to cancel a subscription.
|[Microsoft Enterprise Agreement](https://azure.microsoft.com/pricing/enterprise-agreement/) and [Enterprise Dev/Test](https://azure.microsoft.com/offers/ms-azr-0148p/) | Service administrator and subscription owner | |[Azure plan](https://azure.microsoft.com/offers/ms-azr-0017g/) and [Azure plan for DevTest](https://azure.microsoft.com/offers/ms-azr-0148g/) | Subscription owners |
-An account administrator without the service administrator or subscription owner role canΓÇÖt cancel an Azure subscription. However, an account administrator can make themself the service administrator and then they can cancel a subscription. For more information, see [Change the Service Administrator](../../role-based-access-control/classic-administrators.md#change-the-service-administrator).
+An account administrator without the service administrator or subscription owner role canΓÇÖt cancel an Azure subscription. For more information, see [Azure classic subscription administrators](../../role-based-access-control/classic-administrators.md).
## Cancel a subscription in the Azure portal
cost-management-billing Classic Administrator Retire https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cost-management-billing/manage/classic-administrator-retire.md
On August 31, 2024 and later:
- When you create an Azure subscription, the classic Service Administrator role isn't assigned to the subscription. Instead, the user creating the subscription is assigned the Azure RBAC [Owner](../../role-based-access-control/built-in-roles.md#owner) role. - During the [Azure subscription Change Directory operation](/entr#owner) role.-- For situations that require changing or removing Service Administrators, ensure that the subscription has Azure RBAC owners assigned on it. If you're a subscription Azure RBAC owner, you can remove the current Service administrator using the information at [Remove the Service Administrator](../../role-based-access-control/classic-administrators.md?tabs=azure-portal#remove-the-service-administrator). If you aren't a subscription RBAC owner, ask your subscription Azure RBAC owner or a global administrator to update or remove the intended service administrator on the subscription. Or, you can ask them to give you an Azure RBAC role so that you can update or remove the Service Administrator.
+- For situations that require changing or removing Service Administrators, ensure that the subscription has Azure RBAC owners assigned on it. If you're a subscription Azure RBAC owner, you can remove the current Service administrator using the information at [Service Administrator retirement](../../role-based-access-control/classic-administrators.md#service-administrator-retirement). If you aren't a subscription RBAC owner, ask your subscription Azure RBAC owner or a global administrator to update or remove the intended service administrator on the subscription. Or, you can ask them to give you an Azure RBAC role so that you can update or remove the Service Administrator.
## Help and support
ddos-protection Types Of Attacks https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/ddos-protection/types-of-attacks.md
Azure DDoS Protection can mitigate the following types of attacks:
- **Volumetric attacks**: These attacks flood the network layer with a substantial amount of seemingly legitimate traffic. They include UDP floods, amplification floods, and other spoofed-packet floods. DDoS Protection mitigates these potential multi-gigabyte attacks by absorbing and scrubbing them, with Azure's global network scale, automatically. - **Protocol attacks**: These attacks render a target inaccessible, by exploiting a weakness in the layer 3 and layer 4 protocol stack. They include SYN flood attacks, reflection attacks, and other protocol attacks. DDoS Protection mitigates these attacks, differentiating between malicious and legitimate traffic, by interacting with the client, and blocking malicious traffic. - **Resource (application) layer attacks**: These attacks target web application packets, to disrupt the transmission of data between hosts. They include HTTP protocol violations, SQL injection, cross-site scripting, and other layer 7 attacks. Use a Web Application Firewall, such as the Azure [Application Gateway web application firewall](../web-application-firewall/ag/ag-overview.md?toc=%2fazure%2fvirtual-network%2ftoc.json), as well as DDoS Protection to provide defense against these attacks. There are also third-party web application firewall offerings available in the [Azure Marketplace](https://azuremarketplace.microsoft.com/marketplace/apps?page=1&search=web%20application%20firewall).-- **+ ## Azure DDoS Protection Azure DDoS Protection protects resources in a virtual network including public IP addresses associated with virtual machines, load balancers, and application gateways. When coupled with the Application Gateway web application firewall, or a third-party web application firewall deployed in a virtual network with a public IP, Azure DDoS Protection can provide full layer 3 to layer 7 mitigation capability.
dns Dns Protect Private Zones Recordsets https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/dns/dns-protect-private-zones-recordsets.md
The following example shows a custom role definition for managing CNAME records
"NotActions": [ ], "AssignableScopes": [
- "/subscriptions/c276fc76-9cd4-44c9-99a7-4fd71546436e"
+ "/subscriptions/<subscription id>"
] } ```
hdinsight Hdinsight Release Notes Archive https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/hdinsight/hdinsight-release-notes-archive.md
description: Archived release notes for Azure HDInsight. Get development tips an
Previously updated : 08/09/2024 Last updated : 09/02/2024 # Archived release notes
To subscribe, click the ΓÇ£watchΓÇ¥ button in the banner and watch out for [HDIn
## Release Information
+### Release date: Aug 09, 2024
+
+This release note applies to
+++++
+HDInsight release will be available to all regions over several days. This release note is applicable for image number **2407260448**. [How to check the image number?](./view-hindsight-cluster-image-version.md)
+
+HDInsight uses safe deployment practices, which involve gradual region deployment. It might take up to 10 business days for a new release or a new version to be available in all regions.
+
+**OS versions**
+
+* HDInsight 5.1: Ubuntu 18.04.5 LTS Linux Kernel 5.4
+* HDInsight 5.0: Ubuntu 18.04.5 LTS Linux Kernel 5.4
+* HDInsight 4.0: Ubuntu 18.04.5 LTS Linux Kernel 5.4
+
+> [!NOTE]
+> Ubuntu 18.04 is supported under [Extended Security Maintenance(ESM)](https://techcommunity.microsoft.com/t5/linux-and-open-source-blog/canonical-ubuntu-18-04-lts-reaching-end-of-standard-support/ba-p/3822623) by the Azure Linux team for [Azure HDInsight July 2023](/azure/hdinsight/hdinsight-release-notes-archive#release-date-july-25-2023), release onwards.
+
+For workload specific versions, see [HDInsight 5.x component versions](./hdinsight-5x-component-versioning.md).
+
+## Updates
+
+**[Addition of Azure Monitor Agent](./azure-monitor-agent.md) for Log Analytics in HDInsight**
+
+Addition of `SystemMSI` and Automated DCR for Log analytics, given the deprecation of [New Azure Monitor experience (preview)](./hdinsight-hadoop-oms-log-analytics-tutorial.md).
+
+> [!NOTE]
+> Effective Image number 2407260448, customers using portal for log analytics will have default [Azure Monitor Agent](./azure-monitor-agent.md) experience. In case you wish to switch to Azure Monitor experience (preview), you can pin your clusters to old images by creating a [support request](https://portal.azure.com/#blade/Microsoft_Azure_Support/HelpAndSupportBlade/newsupportrequest).
++ ### Release date: Jul 05, 2024 > [!NOTE]
hdinsight Hdinsight Release Notes https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/hdinsight/hdinsight-release-notes.md
description: Latest release notes for Azure HDInsight. Get development tips and
Previously updated : 08/09/2024 Last updated : 08/30/2024 # Azure HDInsight release notes
To subscribe, click the **watch** button in the banner and watch out for [HDInsi
## Release Information
-### Release date: Aug 09, 2024
+### Release date: Aug 30, 2024
+
+> [!NOTE]
+> This is a Hotfix / maintenance release for Resource Provider. For more information see, [Resource Provider](.//hdinsight-overview-versioning.md#hdinsight-resource-provider).
+
+Azure HDInsight periodically releases maintenance updates for delivering bug fixes, performance enhancements, and security patches ensuring you stay up to date with these updates guarantees optimal performance and reliability.
This release note applies to
HDInsight uses safe deployment practices, which involve gradual region deploymen
For workload specific versions, see [HDInsight 5.x component versions](./hdinsight-5x-component-versioning.md).
-## Updates
-
-**[Addition of Azure Monitor Agent](./azure-monitor-agent.md) for Log Analytics in HDInsight**
-
-Addition of `SystemMSI` and Automated DCR for Log analytics, given the deprecation of [New Azure Monitor experience (preview)](./hdinsight-hadoop-oms-log-analytics-tutorial.md).
-
-> [!NOTE]
-> Effective Image number 2407260448, customers using portal for log analytics will have default [Azure Monitor Agent](./azure-monitor-agent.md) experience. In case you wish to switch to Azure Monitor experience (preview), you can pin your clusters to old images by creating a [support request](https://portal.azure.com/#blade/Microsoft_Azure_Support/HelpAndSupportBlade/newsupportrequest).
+## Issue fixed
+* Default DB bug fix.
## :::image type="icon" border="false" source="./media/hdinsight-release-notes/clock.svg"::: Coming soon
We're listening: YouΓÇÖre welcome to add more ideas and other topics here and vo
### Next steps * [Azure HDInsight: Frequently asked questions](./hdinsight-faq.yml) * [Configure the OS patching schedule for Linux-based HDInsight clusters](./hdinsight-os-patching.md)
-* Previous [release note](/azure/hdinsight/hdinsight-release-notes-archive#release-date--january-10-2024)
+* Previous [release note](/azure/hdinsight/hdinsight-release-notes-archive)
iot Iot Overview Security https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot/iot-overview-security.md
Microsoft Defender for IoT can automatically monitor some of the recommendations
## Connection security -- **Use X.509 certificates to authenticate your devices to IoT Hub or IoT Central**: IoT Hub and IoT Central support both X509 certificate-based authentication and security tokens as methods for a device to authenticate. If possible, use X509-based authentication in production environments as it provides greater security. To learn more, see [Authenticating a device to IoT Hub](../iot-hub/iot-hub-dev-guide-sas.md#authenticating-a-device-to-iot-hub) and [Device authentication concepts in IoT Central](../iot-central/core/concepts-device-authentication.md).
+- **Use X.509 certificates to authenticate your devices to IoT Hub or IoT Central**: IoT Hub and IoT Central support both X509 certificate-based authentication and security tokens as methods for a device to authenticate. If possible, use X509-based authentication in production environments as it provides greater security. To learn more, see [Authenticating a device to IoT Hub](../iot-hub/authenticate-authorize-x509.md) and [Device authentication concepts in IoT Central](../iot-central/core/concepts-device-authentication.md).
- **Use Transport Layer Security (TLS) 1.2 to secure connections from devices**: IoT Hub and IoT Central use TLS to secure connections from IoT devices and services. Three versions of the TLS protocol are currently supported: 1.0, 1.1, and 1.2. TLS 1.0 and 1.1 are considered legacy. To learn more, see [Authentication and authorization](iot-overview-device-connectivity.md#authentication).
Microsoft Defender for IoT can automatically monitor some of the recommendations
- **Protect cloud credentials**: An attacker can use the cloud authentication credentials you use to configure and operate your IoT deployment to gain access to and compromise your IoT system. Protect the credentials by changing the password frequently, and don't use these credentials on public machines. -- **Define access controls for your IoT hub**: Understand and define the type of access that each component in your IoT Hub solution needs based on the required functionality. There are two ways you can grant permissions for the service APIs to connect to your IoT hub: [Microsoft Entra ID](../iot-hub/iot-hub-dev-guide-azure-ad-rbac.md) or [Shared Access signatures](../iot-hub/iot-hub-dev-guide-sas.md).
+- **Define access controls for your IoT hub**: Understand and define the type of access that each component in your IoT Hub solution needs based on the required functionality. There are two ways you can grant permissions for the service APIs to connect to your IoT hub: [Microsoft Entra ID](../iot-hub/authenticate-authorize-azure-ad.md) or [Shared Access signatures](../iot-hub/authenticate-authorize-sas.md). If possible, use Microsoft Entra ID in production environments as it provides greater security.
- **Define access controls for your IoT Central application**: Understand and define the type of access that you enable for your IoT Central application. To learn more, see:
nat-gateway Quickstart Create Nat Gateway Portal https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/nat-gateway/quickstart-create-nat-gateway-portal.md
In this section, you test the NAT gateway. You first discover the public IP of t
```output azureuser@vm-1:~$ curl ifconfig.me
- 20.7.200.36
+ 203.0.113.0.25
``` [!INCLUDE [portal-clean-up.md](~/reusable-content/ce-skilling/azure/includes/portal-clean-up.md)]
nat-gateway Tutorial Hub Spoke Nat Firewall https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/nat-gateway/tutorial-hub-spoke-nat-firewall.md
Obtain the NAT gateway public IP address for verification of the steps later in
1. Select **public-ip-nat**.
-1. Make note of value in **IP address**. The example used in this article is **20.225.88.213**.
+1. Make note of value in **IP address**. The example used in this article is **203.0.113.0.25**.
### Test NAT gateway from spoke
Obtain the NAT gateway public IP address for verification of the steps later in
```output azureuser@vm-1:~$ curl ifconfig.me
- 20.225.88.213
+ 203.0.113.0.25
``` 1. Close the Bastion connection to **vm-spoke**.
nat-gateway Tutorial Nat Gateway Load Balancer Internal Portal https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/nat-gateway/tutorial-nat-gateway-load-balancer-internal-portal.md
Previously updated : 02/13/2024 Last updated : 08/30/2024
In this section, you test the NAT gateway. You first discover the public IP of t
```output azureuser@vm-1:~$ curl ifconfig.me
- 20.7.200.36
+ 203.0.113.0.25
``` 1. Close the bastion connection to **vm-1**.
role-based-access-control Classic Administrators https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/role-based-access-control/classic-administrators.md
Title: Azure classic subscription administrators
-description: Describes how to prepare for the retirement of the Co-Administrator and Service Administrator roles and how to remove or change these role assignments.
+description: Describes the retirement of the Co-Administrator and Service Administrator roles and how to convert these role assignments.
Previously updated : 04/08/2024 Last updated : 09/02/2024
# Azure classic subscription administrators > [!IMPORTANT]
-> Classic resources and classic administrators will be [retired on August 31, 2024](https://azure.microsoft.com/updates/cloud-services-retirement-announcement/). Starting April 3, 2024, you won't be able to add new Co-Administrators. This date was recently extended. Remove unnecessary Co-Administrators and use Azure RBAC for fine-grained access control.
+> As of **August 31, 2024**, Azure classic administrator roles (along with Azure classic resources and Azure Service Manager) are retired and no longer supported.
-Microsoft recommends that you manage access to Azure resources using Azure role-based access control (Azure RBAC). However, if you're still using the classic deployment model, you'll need to use a classic subscription administrator role: Service Administrator and Co-Administrator. For information about how to migrate your resources from classic deployment to Resource Manager deployment, see [Azure Resource Manager vs. classic deployment](../azure-resource-manager/management/deployment-models.md).
+Microsoft recommends that you manage access to Azure resources using Azure role-based access control (Azure RBAC). If you're still using the classic deployment model, you'll need to migrate your resources from classic deployment to Resource Manager deployment. For more information, see [Azure Resource Manager vs. classic deployment](../azure-resource-manager/management/deployment-models.md).
-If you still have classic administrators, you should remove these role assignments before the retirement date. This article describes how to prepare for the retirement of the Co-Administrator and Service Administrator roles and how to remove or change these role assignments.
+If you still have active Co-Administrator or Service Administrator role assignments, convert these roles to Azure RBAC immediately. This article describes the retirement of the Co-Administrator and Service Administrator roles and how to convert these role assignments.
## Frequently asked questions
-Will Co-Administrators and Service Administrator lose access after August 31, 2024?
+What happens to classic administrator role assignments after August 31, 2024?
-- Starting on August 31, 2024, Microsoft will start the process to remove access for Co-Administrators and Service Administrator.
+- Co-Administrator and Service Administrator roles are retired and no longer supported. You should convert these roles to Azure RBAC immediately.
How do I know what subscriptions have classic administrators?
What is the equivalent Azure role I should assign for Service Administrator?
Why do I need to migrate to Azure RBAC? -- Classic administrators will be retired. Azure RBAC offers fine grained access control, compatibility with Microsoft Entra Privileged Identity Management (PIM), and full audit logs support. All future investments will be in Azure RBAC.
+- Azure RBAC offers fine grained access control, compatibility with Microsoft Entra Privileged Identity Management (PIM), and full audit logs support. All future investments will be in Azure RBAC.
What about the Account Administrator role? -- The Account Administrator is the primary user for your billing account. Account Administrator isn't being deprecated and you don't need to replace this role assignment. Account Administrator and Service Administrator might be the same user. However, you only need to remove the Service Administrator role assignment.
+- The Account Administrator is the primary user for your billing account. Account Administrator isn't being deprecated and you don't need to convert this role assignment. Account Administrator and Service Administrator might be the same user. However, you only need to convert the Service Administrator role assignment.
-What should I do if I have a strong dependency on Co-Administrators or Service Administrator?
--- Email ACARDeprecation@microsoft.com and describe your scenario.-
-## Prepare for Co-Administrators retirement
-
-If you still have classic administrators, use the following steps to help you prepare for the Co-Administrator role retirement.
-
-### Step 1: Review your current Co-Administrators
-
-1. Sign in to the [Azure portal](https://portal.azure.com) as an [Owner](built-in-roles.md#owner) of a subscription.
-
-1. Use the Azure portal or Azure Resource Graph to [list of your Co-Administrators](#list-classic-administrators).
-
-1. Review the [sign-in logs](/entra/identity/monitoring-health/concept-sign-ins) for your Co-Administrators to assess whether they're active users.
-
-### Step 2: Remove Co-Administrators that no longer need access
-
-1. If user is no longer in your enterprise, [remove Co-Administrator](#remove-a-co-administrator).
-
-1. If user was deleted, but their Co-Administrator assignment wasn't removed, [remove Co-Administrator](#remove-a-co-administrator).
-
- Users that have been deleted typically include the text **(User was not found in this directory)**.
-
- :::image type="content" source="media/classic-administrators/user-not-found.png" alt-text="Screenshot of user not found in directory and with Co-Administrator role." lightbox="media/classic-administrators/user-not-found.png":::
-
-1. After reviewing activity of user, if user is no longer active, [remove Co-Administrator](#remove-a-co-administrator).
-
-### Step 3: Replace existing Co-Administrators with job function roles
-
-Most users don't need the same permissions as a Co-Administrator. Consider a job function role instead.
-
-1. If a user still needs some access, determine the appropriate [job function role](role-assignments-steps.md#job-function-roles) they need.
-
-1. Determine the [scope](scope-overview.md) user needs.
-
-1. Follow steps to [assign a job function role to user](role-assignments-portal.yml).
+What should I do if I lose access to a subscription?
-1. [Remove Co-Administrator](#remove-a-co-administrator).
+- If you remove your classic administrators without having at least one Owner role assignment for a subscription, you will lose access to the subscription and the subscription will be orphaned. To regain access to a subscription, you can do the following:
-### Step 4: Replace existing Co-Administrators with Owner role and conditions
+ - Follow steps to [elevate access to manage all subscriptions in a tenant](elevate-access-global-admin.md).
+ - Assign the Owner role at subscription scope for a user.
+ - Remove elevated access.
-Some users might need more access than what a job function role can provide. If you must assign the [Owner](built-in-roles.md#owner) role, consider adding a condition to constrain the role assignment.
-
-1. Assign the [Owner role at subscription scope with conditions](role-assignments-portal-subscription-admin.yml) to the user.
-
-1. [Remove Co-Administrator](#remove-a-co-administrator).
-
-## Prepare for Service Administrator retirement
-
-If you still have classic administrators, use the following steps to help you prepare for Service Administrator role retirement. To remove the Service Administrator, you must have at least one user who is assigned the Owner role at subscription scope without conditions to avoid orphaning the subscription. A subscription Owner has the same access as the Service Administrator.
-
-### Step 1: Review your current Service Administrator
-
-1. Sign in to the [Azure portal](https://portal.azure.com) as an [Owner](built-in-roles.md#owner) of a subscription.
-
-1. Use the Azure portal or Azure Resource Graph to [list your Service Administrator](#list-classic-administrators).
-
-1. Review the [sign-in logs](/entra/identity/monitoring-health/concept-sign-ins) for your Service Administrator to assess whether they're an active user.
-
-### Step 2: Review your current Billing account owners
-
-The user that is assigned the Service Administrator role might also be the same user that is the administrator for your billing account. You should review your current Billing account owners to ensure they are still accurate.
-
-1. Use the Azure portal to [get your Billing account owners](../cost-management-billing/manage/understand-mca-roles.md#manage-billing-roles-in-the-azure-portal).
-
-1. Review your list of Billing account owners. If necessary, [update or add another Billing account owner](../cost-management-billing/manage/understand-mca-roles.md#manage-billing-roles-in-the-azure-portal).
-
-### Step 3: Replace existing Service Administrator with Owner role
-
-Your Service Administrator might be a Microsoft account or a Microsoft Entra account. A Microsoft account is a personal account such as Outlook, OneDrive, Xbox LIVE, or Microsoft 365. A Microsoft Entra account is an identity created through Microsoft Entra ID.
-
-1. If Service Administrator user is a Microsoft account and you want this user to keep the same permissions, [assign the Owner role](role-assignments-portal.yml) to this user at subscription scope without conditions.
-
-1. If Service Administrator user is a Microsoft Entra account and you want this user to keep the same permissions, [assign the Owner role](role-assignments-portal.yml) to this user at subscription scope without conditions.
-
-1. If you want to change the Service Administrator user to a different user, [assign the Owner role](role-assignments-portal.yml) to this new user at subscription scope without conditions.
+What should I do if I have a strong dependency on Co-Administrators or Service Administrator?
-1. [Remove the Service Administrator](#remove-the-service-administrator).
+- Email ACARDeprecation@microsoft.com and describe your scenario.
## List classic administrators
Follow these steps to list the Service Administrator and Co-Administrators for a
# [Azure Resource Graph](#tab/azure-resource-graph)
-Follow these steps to list the number of Service Administrator and Co-Administrators in your subscriptions using Azure Resource Graph.
+Follow these steps to list the number of Service Administrators and Co-Administrators in your subscriptions using Azure Resource Graph.
1. Sign in to the [Azure portal](https://portal.azure.com) as an [Owner](built-in-roles.md#owner) of a subscription.
Follow these steps to list the number of Service Administrator and Co-Administra
-## Remove a Co-Administrator
+## Co-Administrators retirement
-> [!IMPORTANT]
-> Classic resources and classic administrators will be [retired on August 31, 2024](https://azure.microsoft.com/updates/cloud-services-retirement-announcement/). Starting April 3, 2024, you won't be able to add new Co-Administrators. This date was recently extended. Remove unnecessary Co-Administrators and use Azure RBAC for fine-grained access control.
+If you still have classic administrators, use the following steps to help you convert Co-Administrator role assignments.
-Follow these steps to remove a Co-Administrator.
+### Step 1: Review your current Co-Administrators
+
+1. Sign in to the [Azure portal](https://portal.azure.com) as an [Owner](built-in-roles.md#owner) of a subscription.
+
+1. Use the Azure portal or Azure Resource Graph to [list of your Co-Administrators](#list-classic-administrators).
+
+1. Review the [sign-in logs](/entra/identity/monitoring-health/concept-sign-ins) for your Co-Administrators to assess whether they're active users.
+
+### Step 2: Remove Co-Administrators that no longer need access
+
+1. If user is no longer in your enterprise, [remove Co-Administrator](#how-to-remove-a-co-administrator).
+
+1. If user was deleted, but their Co-Administrator assignment wasn't removed, [remove Co-Administrator](#how-to-remove-a-co-administrator).
+
+ Users that have been deleted typically include the text **(User was not found in this directory)**.
+
+ :::image type="content" source="media/classic-administrators/user-not-found.png" alt-text="Screenshot of user not found in directory and with Co-Administrator role." lightbox="media/classic-administrators/user-not-found.png":::
+
+1. After reviewing activity of user, if user is no longer active, [remove Co-Administrator](#how-to-remove-a-co-administrator).
+
+### Step 3: Convert Co-Administrators to job function roles
+
+Most users don't need the same permissions as a Co-Administrator. Consider a job function role instead.
+
+1. If a user still needs some access, determine the appropriate [job function role](role-assignments-steps.md#job-function-roles) they need.
+
+1. Determine the [scope](scope-overview.md) user needs.
+
+1. Follow steps to [assign a job function role to user](role-assignments-portal.yml).
+
+1. [Remove Co-Administrator](#how-to-remove-a-co-administrator).
+
+### Step 4: Convert Co-Administrators to Owner role with conditions
+
+Some users might need more access than what a job function role can provide. If you must assign the [Owner](built-in-roles.md#owner) role, consider adding a condition or using Microsoft Entra Privileged Identity Management (PIM) to constrain the role assignment.
+
+1. Assign the Owner role with conditions.
+
+ For example, assign the [Owner role at subscription scope with conditions](role-assignments-portal-subscription-admin.yml). If you have PIM, make the user [eligible for Owner role assignment](/entra/id-governance/privileged-identity-management/pim-resource-roles-assign-roles).
+
+1. [Remove Co-Administrator](#how-to-remove-a-co-administrator).
+
+### Step 5: Convert Co-Administrators to Owner role
+
+If a user must be an administrator for a subscription, assign the [Owner](built-in-roles.md#owner) role at subscription scope.
+
+- Follow the steps in [How to convert a Co-Administrator with Owner role](#how-to-convert-a-co-administrator-to-owner-role).
+
+### How to convert a Co-Administrator to Owner role
+
+The easiest way to covert a Co-Administrator role assignment to the [Owner](built-in-roles.md#owner) role at subscription scope is to use the **Remediate** steps.
1. Sign in to the [Azure portal](https://portal.azure.com) as an [Owner](built-in-roles.md#owner) of a subscription.
Follow these steps to remove a Co-Administrator.
1. Select the **Classic administrators** tab to view a list of the Co-Administrators.
-1. Add a check mark next to the Co-Administrator you want to remove.
+1. For the Co-Administrator you want to convert to the Owner role, under the **Remediate** column, select the **Assign RBAC role** link.
-1. Select **Remove**.
+1. In the **Add role assignment** pane, review the role assignment.
-1. In the message box that appears, select **Yes**.
+ :::image type="content" source="./media/classic-administrators/remediate-assign-role.png" alt-text="Screenshot of Add role assignment pane after selecting Assign RBAC role link." lightbox="./media/classic-administrators/remediate-assign-role.png":::
- :::image type="content" source="./media/classic-administrators/remove-coadmin.png" alt-text="Screenshot of message box when removing a Co-Administrator." lightbox="./media/classic-administrators/remove-coadmin.png":::
+1. Select **Review + assign** to assign the Owner role and remove the Co-Administrator role assignment.
-## Add a Co-Administrator
+### How to remove a Co-Administrator
-> [!IMPORTANT]
-> Classic resources and classic administrators will be [retired on August 31, 2024](https://azure.microsoft.com/updates/cloud-services-retirement-announcement/). Starting April 3, 2024, you won't be able to add new Co-Administrators. This date was recently extended. Remove unnecessary Co-Administrators and use Azure RBAC for fine-grained access control.
->
-> You only need to add a Co-Administrator if the user needs to manage Azure classic deployments by using [Azure Service Management PowerShell Module](/powershell/azure/servicemanagement/install-azure-ps). If the user only uses the Azure portal to manage the classic resources, you wonΓÇÖt need to add the classic administrator for the user.
+Follow these steps to remove a Co-Administrator.
1. Sign in to the [Azure portal](https://portal.azure.com) as an [Owner](built-in-roles.md#owner) of a subscription. 1. Open **Subscriptions** and select a subscription.
- Co-Administrators can only be assigned at the subscription scope.
- 1. Select **Access control (IAM)**.
-1. Select the **Classic administrators** tab.
+1. Select the **Classic administrators** tab to view a list of the Co-Administrators.
- :::image type="content" source="./media/shared/classic-administrators.png" alt-text="Screenshot of Access control (IAM) page with Classic administrators tab selected." lightbox="./media/shared/classic-administrators.png":::
+1. Add a check mark next to the Co-Administrator you want to remove.
-1. Select **Add** > **Add co-administrator** to open the Add co-administrators pane.
+1. Select **Delete**.
- If the **Add co-administrator** option is disabled, you don't have permissions.
+1. In the message box that appears, select **Yes**.
-1. Select the user that you want to add and select **Add**.
+ :::image type="content" source="./media/classic-administrators/remove-coadmin.png" alt-text="Screenshot of message box when removing a Co-Administrator." lightbox="./media/classic-administrators/remove-coadmin.png":::
- :::image type="content" source="./media/classic-administrators/add-coadmin.png" alt-text="Screenshot of Add co-administrator pane to add a Co-Administrator." lightbox="./media/classic-administrators/add-coadmin.png":::
+## Service Administrator retirement
-## Add a guest user as a Co-Administrator
+If you still have classic administrators, use the following steps to help you convert the Service Administrator role assignment. Before you remove the Service Administrator, you must have at least one user who is assigned the Owner role at subscription scope without conditions to avoid orphaning the subscription. A subscription Owner has the same access as the Service Administrator.
-To add a guest user as a Co-Administrator, follow the same steps as in the previous [Add a Co-Administrator](#add-a-co-administrator) section. The guest user must meet the following criteria:
+### Step 1: Review your current Service Administrator
-- The guest user must have a presence in your directory. This means that the user was invited to your directory and accepted the invite.
+1. Sign in to the [Azure portal](https://portal.azure.com) as an [Owner](built-in-roles.md#owner) of a subscription.
-For more information, about how to add a guest user to your directory, see [Add Microsoft Entra B2B collaboration users in the Azure portal](../active-directory/external-identities/add-users-administrator.md).
+1. Use the Azure portal or Azure Resource Graph to [list your Service Administrator](#list-classic-administrators).
-Before you remove a guest user from your directory, you should first remove any role assignments for that guest user. For more information, see [Remove an external user from your directory](./role-assignments-external-users.md#remove-an-external-user-from-your-directory).
+1. Review the [sign-in logs](/entra/identity/monitoring-health/concept-sign-ins) for your Service Administrator to assess whether they're an active user.
-### Differences for guest users
+### Step 2: Review your current Billing account owners
-Guest users that have been assigned the Co-Administrator role might see some differences as compared to member users with the Co-Administrator role. Consider the following scenario:
+The user that is assigned the Service Administrator role might also be the same user that is the administrator for your billing account. You should review your current Billing account owners to ensure they are still accurate.
-- User A with a Microsoft Entra account (work or school account) is the Service Administrator for an Azure subscription.-- User B has a Microsoft account.-- User A assigns the Co-Administrator role to user B.-- User B can do almost everything, but is unable to register applications or look up users in the Microsoft Entra directory.
+1. Use the Azure portal to [get your Billing account owners](../cost-management-billing/manage/understand-mca-roles.md#manage-billing-roles-in-the-azure-portal).
-You would expect that user B could manage everything. The reason for this difference is that the Microsoft account is added to the subscription as a guest user instead of a member user. Guest users have different default permissions in Microsoft Entra ID as compared to member users. For example, member users can read other users in Microsoft Entra ID and guest users cannot. Member users can register new service principals in Microsoft Entra ID and guest users cannot.
+1. Review your list of Billing account owners. If necessary, [update or add another Billing account owner](../cost-management-billing/manage/understand-mca-roles.md#manage-billing-roles-in-the-azure-portal).
-If a guest user needs to be able to perform these tasks, a possible solution is to assign the specific Microsoft Entra roles the guest user needs. For example, in the previous scenario, you could assign the [Directory Readers](../active-directory/roles/permissions-reference.md#directory-readers) role to read other users and assign the [Application Developer](../active-directory/roles/permissions-reference.md#application-developer) role to be able to create service principals. For more information about member and guest users and their permissions, see [What are the default user permissions in Microsoft Entra ID?](../active-directory/fundamentals/users-default-permissions.md). For more information about granting access for guest users, see [Assign Azure roles to external users using the Azure portal](role-assignments-external-users.md).
+### Step 3: Convert Service Administrator to Owner role
-Note that the [Azure built-in roles](../role-based-access-control/built-in-roles.md) are different than the [Microsoft Entra roles](../active-directory/roles/permissions-reference.md). The built-in roles don't grant any access to Microsoft Entra ID. For more information, see [Understand the different roles](../role-based-access-control/rbac-and-directory-admin-roles.md).
+Your Service Administrator might be a Microsoft account or a Microsoft Entra account. A Microsoft account is a personal account such as Outlook, OneDrive, Xbox LIVE, or Microsoft 365. A Microsoft Entra account is an identity created through Microsoft Entra ID.
-For information that compares member users and guest users, see [What are the default user permissions in Microsoft Entra ID?](../active-directory/fundamentals/users-default-permissions.md).
+1. If Service Administrator user is a Microsoft account and you want this user to keep the same permissions, [convert the Service Administrator to Owner role](#how-to-convert-the-service-administrator-to-owner-role).
-## Change the Service Administrator
+1. If Service Administrator user is a Microsoft Entra account and you want this user to keep the same permissions, [convert the Service Administrator to Owner role](#how-to-convert-the-service-administrator-to-owner-role).
-Only the Account Administrator can change the Service Administrator for a subscription. By default, when you sign up for an Azure subscription, the Service Administrator is the same as the Account Administrator.
+1. If you want to change the Service Administrator user to a different user, [assign the Owner role](role-assignments-portal.yml) to this new user at subscription scope without conditions. Then, [remove the Service Administrator](#how-to-remove-the-service-administrator).
-The user with the Account Administrator role can access the Azure portal and manage billing, but they can't cancel subscriptions. The user with the Service Administrator role has full access to the Azure portal and they can cancel subscriptions. The Account Administrator can make themself the Service Administrator.
+### How to convert the Service Administrator to Owner role
-Follow these steps to change the Service Administrator in the Azure portal.
+The easiest way to convert the Service Administrator role assignment to the [Owner](built-in-roles.md#owner) role at subscription scope is to use the **Remediate** steps.
-1. Sign in to the [Azure portal](https://portal.azure.com) as the Account Administrator.
+1. Sign in to the [Azure portal](https://portal.azure.com) as an [Owner](built-in-roles.md#owner) of a subscription.
-1. Open **Cost Management + Billing** and select a subscription.
+1. Open **Subscriptions** and select a subscription.
-1. In the left navigation, select **Properties**.
+1. Select **Access control (IAM)**.
-1. Select **Change service admin**.
+1. Select the **Classic administrators** tab to view the Service Administrator.
- :::image type="content" source="./media/classic-administrators/service-admin.png" alt-text="Screenshot of subscription properties page that shows option to change Service Administrator." lightbox="./media/classic-administrators/service-admin.png":::
+1. For the Service Administrator, under the **Remediate** column, select the **Assign RBAC role** link.
-1. In the **Edit service admin** page, enter the email address for the new Service Administrator.
+1. In the **Add role assignment** pane, review the role assignment.
- :::image type="content" source="./media/classic-administrators/service-admin-edit.png" alt-text="Screenshot of Edit service admin pane to change Service Administrator." lightbox="./media/classic-administrators/service-admin-edit.png":::
+ :::image type="content" source="./media/classic-administrators/remediate-assign-role.png" alt-text="Screenshot of Add role assignment pane after selecting Assign RBAC role link." lightbox="./media/classic-administrators/remediate-assign-role.png":::
-1. Select **OK** to save the change.
+1. Select **Review + assign** to assign the Owner role and remove the Service Administrator role assignment.
-## Remove the Service Administrator
+### How to remove the Service Administrator
-To remove the Service Administrator, you must have a user who is assigned the [Owner](built-in-roles.md#owner) role at subscription scope without conditions to avoid orphaning the subscription. A subscription Owner has the same access as the Service Administrator.
+> [!IMPORTANT]
+> To remove the Service Administrator, you must have a user who is assigned the [Owner](built-in-roles.md#owner) role at subscription scope without conditions to avoid orphaning the subscription. A subscription Owner has the same access as the Service Administrator.
1. Sign in to the [Azure portal](https://portal.azure.com) as an [Owner](built-in-roles.md#owner) of a subscription.
To remove the Service Administrator, you must have a user who is assigned the [O
1. Add a check mark next to the Service Administrator.
-1. Select **Remove**.
+1. Select **Delete**.
1. In the message box that appears, select **Yes**. :::image type="content" source="./media/classic-administrators/service-admin-remove.png" alt-text="Screenshot of remove classic administrator message when removing a Service Administrator." lightbox="./media/classic-administrators/service-admin-remove.png":::
-If the Service Administrator user is not in the directory, you might get the following error when you try to remove the Service Administrator:
-
-`Call GSM to delete service admin on subscription <subscriptionId> failed. Exception: Cannot delete user <principalId> since they are not the service administrator. Please retry with the right service administrator user PUID.`
-
-If the Service Administrator user is not in the directory, try to change the Service Administrator to an existing user and then try to remove the Service Administrator.
- ## Next steps - [Understand the different roles](../role-based-access-control/rbac-and-directory-admin-roles.md)
role-based-access-control Rbac And Directory Admin Roles https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/role-based-access-control/rbac-and-directory-admin-roles.md
Several Microsoft Entra roles span Microsoft Entra ID and Microsoft 365, such as
## Classic subscription administrator roles > [!IMPORTANT]
-> Classic resources and classic administrators will be [retired on August 31, 2024](https://azure.microsoft.com/updates/cloud-services-retirement-announcement/). Starting April 3, 2024, you won't be able to add new Co-Administrators. This date was recently extended. Remove unnecessary Co-Administrators and use Azure RBAC for fine-grained access control.
+> As of **August 31, 2024**, Azure classic administrator roles (along with Azure classic resources and Azure Service Manager) are retired and no longer supported.
+>
+> For more information, see [Azure classic subscription administrators](classic-administrators.md).
Account Administrator, Service Administrator, and Co-Administrator are the three classic subscription administrator roles in Azure. Classic subscription administrators have full access to the Azure subscription. They can manage resources using the Azure portal, Azure Resource Manager APIs, and the classic deployment model APIs. The account that is used to sign up for Azure is automatically set as both the Account Administrator and Service Administrator. Then, additional Co-Administrators can be added. The Service Administrator and the Co-Administrators have the equivalent access of users who have been assigned the Owner role (an Azure role) at the subscription scope. The following table describes the differences between these three classic subscription administrative roles.
role-based-access-control Troubleshooting https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/role-based-access-control/troubleshooting.md
If you're a Microsoft Entra Global Administrator and you don't have access to a
## Classic subscription administrators > [!IMPORTANT]
-> Classic resources and classic administrators will be [retired on August 31, 2024](https://azure.microsoft.com/updates/cloud-services-retirement-announcement/). Starting April 3, 2024, you won't be able to add new Co-Administrators. This date was recently extended. Remove unnecessary Co-Administrators and use Azure RBAC for fine-grained access control.
+> As of **August 31, 2024**, Azure classic administrator roles (along with Azure classic resources and Azure Service Manager) are retired and no longer supported.
> > For more information, see [Azure classic subscription administrators](classic-administrators.md).
site-recovery Azure To Azure How To Reprotect https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/site-recovery/azure-to-azure-how-to-reprotect.md
When you [fail over](site-recovery-failover.md) Azure virtual machines from one
## Prerequisites -- The virtual machine failover from the primary to secondary region must be committed.
+- The virtual machine failover from the primary to secondary region must be committed. The virtual machine status must be **Failover committed** before you start.
- The primary target site should be available, and you should be able to access or create resources in that region. ## Reprotect a virtual machine
virtual-desktop App Attach Overview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-desktop/app-attach-overview.md
The following table compares MSIX app attach with app attach:
| Applications can only run on the host pool in which they're added. | Applications can run on any session host running a Windows client operating system in the same Azure region as the application package. | | To update the application, you must delete and recreate the application with another version of the package. You should update the application in a maintenance window. | Applications can be upgraded to a new application version with a new disk image without the need for a maintenance window. | | Users can't run two versions of the same application on the same session host. | Users can run two versions of the same application concurrently on the same session host. |
-| Telemetry for usage and health is now available through Azure Log Analytics. | Telemetry for usage and health is available through Azure Log Analytics. |
+| Telemetry for usage and health is not available through Azure Log Analytics. | Telemetry for usage and health is available through Azure Log Analytics. |
You can use the following application package types and file formats:
virtual-network Public Ip Basic Upgrade Guidance https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-network/ip-services/public-ip-basic-upgrade-guidance.md
We recommend the following approach to upgrade to Standard SKU public IP address
| Resource using Basic SKU public IP addresses | Decision path | | | | | Virtual Machine or Virtual Machine Scale Sets (flex model) | Disassociate IP(s) and utilize the upgrade options detailed after the table. For virtual machines, you can use the [upgrade script](public-ip-upgrade-vm.md). |
- | Load Balancer (Basic SKU) | New LB SKU required. Use the upgrade script [Upgrade Basic Load Balancer to Standard SKU](../../load-balancer/upgrade-basic-standard-with-powershell.md) to upgrade to Standard Load Balancer |
+ | Load Balancer (Basic SKU) | New Load Balancer SKU required. Use the upgrade script [Upgrade Basic Load Balancer to Standard SKU](../../load-balancer/upgrade-basic-standard-with-powershell.md) to upgrade to Standard Load Balancer |
| VPN Gateway (using Basic IPs) |At this time, it's not necessary to upgrade. When an upgrade is necessary, we'll update this decision path with migration information and send out a service health alert. | | ExpressRoute Gateway (using Basic IPs) | New ExpressRoute Gateway is required. Follow the [ExpressRoute Gateway migration guidance](../../expressroute/gateway-migration.md) for upgrading from Basic to Standard SKU. | | Application Gateway (v1 SKU) | New AppGW SKU required. Use this [migration script to migrate from v1 to v2](../../application-gateway/migrate-v1-v2.md). |