diff --git a/.openpublishing.publish.config.json b/.openpublishing.publish.config.json
index 67ab47fc058a9..bb257ddab952b 100644
--- a/.openpublishing.publish.config.json
+++ b/.openpublishing.publish.config.json
@@ -32,6 +32,18 @@
"need_preview_pull_request": true,
"contribution_branch_mappings": {},
"dependent_repositories": [
+ {
+ "path_to_root": "azure-dev-docs-pr",
+ "url": "https://github.com/MicrosoftDocs/azure-dev-docs-pr",
+ "branch": "main",
+ "branch_mapping": {}
+ },
+ {
+ "path_to_root": "terraform_samples",
+ "url": "https://github.com/Azure/terraform",
+ "branch": "master",
+ "branch_mapping": {}
+ },
{
"path_to_root": "quickstart-templates",
"url": "https://github.com/Azure/azure-quickstart-templates",
@@ -79,7 +91,7 @@
"url": "https://github.com/Azure-Samples/msdocs-storage-bind-function-service",
"branch": "main",
"branch_mapping": {}
- },
+ },
{
"path_to_root": "azure_cli_scripts",
"url": "https://github.com/Azure-Samples/azure-cli-samples",
@@ -889,8 +901,19 @@
"url": "https://github.com/Azure-Samples/azure-sql-binding-func-dotnet-todo",
"branch": "docs-snippets",
"branch_mapping": {}
+ },
+ {
+ "path_to_root": "ms-identity-node",
+ "url": "https://github.com/Azure-Samples/ms-identity-node",
+ "branch": "main",
+ "branch_mapping": {}
+ },
+ {
+ "path_to_root": "ms-identity-javascript-nodejs-desktop",
+ "url": "https://github.com/Azure-Samples/ms-identity-javascript-nodejs-desktop",
+ "branch": "main",
+ "branch_mapping": {}
}
-
],
"branch_target_mapping": {
"live": ["Publish", "PDF"],
@@ -922,6 +945,7 @@
".openpublishing.redirection.azure-monitor.json",
".openpublishing.redirection.azure-percept.json",
".openpublishing.redirection.azure-productivity.json",
+ ".openpublishing.redirection.azure-australia.json",
"articles/azure-fluid-relay/.openpublishing.redirection.fluid-relay.json",
"articles/azure-netapp-files/.openpublishing.redirection.azure-netapp-files.json",
"articles/azure-relay/.openpublishing.redirection.relay.json",
@@ -954,6 +978,7 @@
"articles/container-apps/.openpublishing.redirection.container-apps.json",
"articles/spring-cloud/.openpublishing.redirection.spring-cloud.json",
"articles/load-testing/.openpublishing.redirection.azure-load-testing.json",
- "articles/azure-video-indexer/.openpublishing.redirection.azure-video-indexer.json"
+ "articles/azure-video-indexer/.openpublishing.redirection.azure-video-indexer.json",
+ "articles/machine-learning/.openpublishing.redirection.machine-learning.json"
]
}
diff --git a/.openpublishing.redirection.active-directory.json b/.openpublishing.redirection.active-directory.json
index 911d4b9033f7f..77588b96b0af9 100644
--- a/.openpublishing.redirection.active-directory.json
+++ b/.openpublishing.redirection.active-directory.json
@@ -25,6 +25,11 @@
"redirect_url": "/azure/active-directory/authentication/concept-certificate-based-authentication",
"redirect_document_id": false
},
+ {
+ "source_path_from_root": "/articles/active-directory/saas-apps/bridgelineunbound-tutorial.md",
+ "redirect_url": "/azure/active-directory/saas-apps/tutorial-list",
+ "redirect_document_id": false
+ },
{
"source_path_from_root": "/articles/active-directory/manage-apps/common-scenarios.md",
"redirect_url": "/azure/active-directory/manage-apps/what-is-application-management",
diff --git a/.openpublishing.redirection.azure-australia.json b/.openpublishing.redirection.azure-australia.json
new file mode 100644
index 0000000000000..682bf44172d1e
--- /dev/null
+++ b/.openpublishing.redirection.azure-australia.json
@@ -0,0 +1,84 @@
+{
+ "redirections": [
+ {
+ "source_path_from_root": "/articles/azure-australia/australia-overview.md",
+ "redirect_url": "https://azure.microsoft.com/en-us/global-infrastructure/geographies/",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-australia/azure-key-vault.md",
+ "redirect_url": "https://azure.microsoft.com/en-us/global-infrastructure/geographies/",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-australia/azure-policy.md",
+ "redirect_url": "https://azure.microsoft.com/en-us/global-infrastructure/geographies/",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-australia/gateway-egress-traffic.md",
+ "redirect_url": "https://azure.microsoft.com/en-us/global-infrastructure/geographies/",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-australia/gateway-ingress-traffic.md",
+ "redirect_url": "https://azure.microsoft.com/en-us/global-infrastructure/geographies/",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-australia/gateway-log-audit-visibility.md",
+ "redirect_url": "https://azure.microsoft.com/en-us/global-infrastructure/geographies/",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-australia/gateway-secure-remote-administration.md",
+ "redirect_url": "https://azure.microsoft.com/en-us/global-infrastructure/geographies/",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-australia/identity-federation.md",
+ "redirect_url": "https://azure.microsoft.com/en-us/global-infrastructure/geographies/",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-australia/index.yml",
+ "redirect_url": "https://azure.microsoft.com/en-us/global-infrastructure/geographies/",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-australia/recovery-backup.md",
+ "redirect_url": "https://azure.microsoft.com/en-us/global-infrastructure/geographies/",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-australia/reference-library.md",
+ "redirect_url": "https://azure.microsoft.com/en-us/global-infrastructure/geographies/",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-australia/role-privileged.md",
+ "redirect_url": "https://azure.microsoft.com/en-us/global-infrastructure/geographies/",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-australia/secure-your-data.md",
+ "redirect_url": "https://azure.microsoft.com/en-us/global-infrastructure/geographies/",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-australia/security-explained.md",
+ "redirect_url": "https://azure.microsoft.com/en-us/global-infrastructure/geographies/",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-australia/system-monitor.md",
+ "redirect_url": "https://azure.microsoft.com/en-us/global-infrastructure/geographies/",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-australia/vpn-gateway.md",
+ "redirect_url": "https://azure.microsoft.com/en-us/global-infrastructure/geographies/",
+ "redirect_document_id": false
+ }
+ ]
+}
diff --git a/.openpublishing.redirection.azure-monitor.json b/.openpublishing.redirection.azure-monitor.json
index a157227d979f8..6cac837f651b8 100644
--- a/.openpublishing.redirection.azure-monitor.json
+++ b/.openpublishing.redirection.azure-monitor.json
@@ -1,5 +1,65 @@
{
"redirections": [
+ {
+ "source_path_from_root": "/articles/azure-monitor/app/profiler.md",
+ "redirect_url": "/azure/azure-monitor/profiler/profiler",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-monitor/app/profiler-aspnetcore-linux.md",
+ "redirect_url": "/azure/azure-monitor/profiler/profiler-aspnetcore-linux",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-monitor/app/profiler-azure-functions.md",
+ "redirect_url": "/azure/azure-monitor/profiler/profiler-azure-functions",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-monitor/app/profiler-bring-your-own-storage.md",
+ "redirect_url": "/azure/azure-monitor/profiler/profiler-bring-your-own-storage",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-monitor/app/profiler-cloudservice.md",
+ "redirect_url": "/azure/azure-monitor/profiler/profiler-cloudservice",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-monitor/app/profiler-containers.md",
+ "redirect_url": "/azure/azure-monitor/profiler/profiler-containers",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-monitor/app/profiler-overview.md",
+ "redirect_url": "/azure/azure-monitor/profiler/profiler-overview",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-monitor/app/profiler-servicefabric.md",
+ "redirect_url": "/azure/azure-monitor/profiler/profiler-servicefabric",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-monitor/app/profiler-settings.md",
+ "redirect_url": "/azure/azure-monitor/profiler/profiler-settings",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-monitor/app/profiler-trackrequests.md",
+ "redirect_url": "/azure/azure-monitor/profiler/profiler-trackrequests",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-monitor/app/profiler-troubleshooting.md",
+ "redirect_url": "/azure/azure-monitor/profiler/profiler-troubleshooting",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-monitor/app/profiler-vm.md",
+ "redirect_url": "/azure/azure-monitor/profiler/profiler-vm",
+ "redirect_document_id": false
+ },
{
"source_path_from_root": "/articles/azure-monitor/app/app-insights-dashboards.md",
"redirect_url": "/azure/azure-monitor/app/overview-dashboard",
@@ -65,6 +125,11 @@
"redirect_url": "/azure/azure-monitor/logs/cost-logs",
"redirect_document_id": false
},
+ {
+ "source_path_from_root": "/articles/azure-monitor/logs/design-logs-deployment.md",
+ "redirect_url": "/azure/azure-monitor/logs/workspace-design",
+ "redirect_document_id": false
+ },
{
"source_path_from_root": "/articles/azure-monitor/app/apm-tables.md",
"redirect_url": "/azure/azure-monitor/app/convert-classic-resource#workspace-based-resource-changes",
@@ -77,13 +142,89 @@
},
{
"source_path_from_root": "/articles/azure-monitor/alerts/itsmc-service-manager-script.md",
- "redirect_url": "/azure/azure-monitor/alerts/itsmc-connections.md",
+ "redirect_url": "/azure/azure-monitor/alerts/itsmc-connections",
"redirect_document_id": false
},
{
"source_path_from_root": "/articles/azure-monitor/alerts/itsmc-connections-scsm.md" ,
- "redirect_url": "/azure/azure-monitor/alerts/itsmc-connections.md",
+ "redirect_url": "/azure/azure-monitor/alerts/itsmc-connections",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-monitor/containers/container-insights-azure-redhat-setup.md" ,
+ "redirect_url": "/azure/azure-monitor/containers/container-insights-transition-hybrid",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-monitor/containers/container-insights-azure-redhat4-setup.md" ,
+ "redirect_url": "/azure/azure-monitor/containers/container-insights-transition-hybrid",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-monitor/alerts/alerts-metric-overview.md" ,
+ "redirect_url": "/azure/azure-monitor/alerts/alerts-types",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-monitor/alerts/alerts-managing-alert-instances.md" ,
+ "redirect_url": "/azure/azure-monitor/alerts/alerts-page.md",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-monitor/alerts/alerts-managing-alert-states.md" ,
+ "redirect_url": "/azure/azure-monitor/alerts/alerts-page",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-monitor/alerts/alerts-unified-log.md" ,
+ "redirect_url": "/azure/azure-monitor/alerts/alerts-types",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-monitor/alerts/activity-log-alerts.md" ,
+ "redirect_url": "/azure/azure-monitor/alerts/alerts-types",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-monitor/alerts/alerts-smartgroups-overview.md" ,
+ "redirect_url": "/azure/azure-monitor/alerts/alerts-types",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-monitor/alerts/alerts-managing-smart-groups.md" ,
+ "redirect_url": "/azure/azure-monitor/alerts/alerts-types",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-monitor/insights/data-explorer.md" ,
+ "redirect_url": "/azure/data-explorer/data-explorer-insights",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-monitor/vm/vminsights-ga-release-faq.md" ,
+ "redirect_url": "/azure/azure-monitor/faq#vm-insights",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-monitor/vm/vminsights-log-search.md" ,
+ "redirect_url": "/azure/azure-monitor/alerts/vminsights-log-query",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-monitor/cli-samples.md" ,
+ "redirect_url": "/cli/azure/azure-cli-reference-for-monitor",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-monitor/powershell-samples.md" ,
+ "redirect_url": "/powershell/module/az.monitor",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/azure-monitor/insights/azure-cli-application-insights-component.md" ,
+ "redirect_url": "/cli/azure/monitor/app-insights",
"redirect_document_id": false
}
]
-}
\ No newline at end of file
+}
+
diff --git a/.openpublishing.redirection.defender-for-cloud.json b/.openpublishing.redirection.defender-for-cloud.json
index 61af983b70346..8967979a552c3 100644
--- a/.openpublishing.redirection.defender-for-cloud.json
+++ b/.openpublishing.redirection.defender-for-cloud.json
@@ -15,6 +15,11 @@
"redirect_url": "/azure/defender-for-cloud/policy-reference",
"redirect_document_id": false
},
+ {
+ "source_path_from_root": "/articles/security-center/security-center-identity-access.md",
+ "redirect_url": "/azure/defender-for-cloud/multi-factor-authentication-enforcement",
+ "redirect_document_id": false
+ },
{
"source_path_from_root": "/articles/security-center/security-center-policy-definitions.md",
"redirect_url": "/azure/defender-for-cloud/policy-reference",
diff --git a/.openpublishing.redirection.json b/.openpublishing.redirection.json
index 2db91ac3cc69a..c157e60791b21 100644
--- a/.openpublishing.redirection.json
+++ b/.openpublishing.redirection.json
@@ -170,221 +170,7 @@
"redirect_url": "/previous-versions/azure/virtual-machines/linux/login-using-aad",
"redirect_document_id": false
},
- {
- "source_path": "articles/machine-learning/classic/ai-gallery-control-personal-data-dsr.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/ai-gallery-control-personal-data-dsr",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/algorithm-parameters-optimize.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/algorithm-parameters-optimize",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/azure-ml-netsharp-reference-guide.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/azure-ml-netsharp-reference-guide",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/consume-web-services.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/consume-web-services",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/consuming-from-excel.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/consuming-from-excel",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/create-endpoint.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/create-endpoint",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/create-experiment.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/create-experiment",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/create-models-and-endpoints-with-powershell.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/create-models-and-endpoints-with-powershell",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/create-workspace.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/create-workspace",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/custom-r-modules.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/custom-r-modules",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/deploy-a-machine-learning-web-service.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/deploy-a-machine-learning-web-service",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/deploy-consume-web-service-guide.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/deploy-consume-web-service-guide",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/evaluate-model-performance.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/evaluate-model-performance",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/excel-add-in-for-web-services.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/excel-add-in-for-web-services",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/execute-python-scripts.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/execute-python-scripts",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/export-delete-personal-data-dsr.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/export-delete-personal-data-dsr",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/gallery-how-to-use-contribute-publish.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/gallery-how-to-use-contribute-publish",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/import-data.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/import-data",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/interpret-model-results.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/interpret-model-results",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/manage-experiment-iterations.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/manage-experiment-iterations",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/manage-new-webservice.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/manage-new-webservice",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/manage-web-service-endpoints-using-api-management.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/manage-web-service-endpoints-using-api-management",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/manage-workspace.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/manage-workspace",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/model-progression-experiment-to-web-service.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/model-progression-experiment-to-web-service",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/powershell-module.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/powershell-module",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/r-get-started.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/r-get-started",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/retired-data-science-for-beginners-videos.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/retired-data-science-for-beginners-videos",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/retrain-classic-web-service.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/retrain-classic-web-service",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/retrain-machine-learning-model.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/retrain-machine-learning-model",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/sample-experiments.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/sample-experiments",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/studio-classic-overview.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/studio-classic-overview",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/support-aml-studio.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/support-aml-studio",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/tutorial-part1-credit-risk.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/tutorial-part1-credit-risk",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/tutorial-part2-credit-risk-train.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/tutorial-part2-credit-risk-train",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/tutorial-part3-credit-risk-deploy.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/tutorial-part3-credit-risk-deploy",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/use-data-from-an-on-premises-sql-server.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/use-data-from-an-on-premises-sql-server",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/use-sample-datasets.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/use-sample-datasets",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/version-control.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/version-control",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/web-service-error-codes.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/web-service-error-codes",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/web-service-parameters.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/web-service-parameters",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/web-services-logging.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/web-services-logging",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/web-services-that-use-import-export-modules.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/web-services-that-use-import-export-modules",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/classic/index.yml",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/index",
- "redirect_document_id": false
- },
+
{
"source_path": "articles/storage/blobs/storage-c-plus-plus-how-to-use-blobs.md",
"redirect_url": "/azure/storage/blobs/quickstart-blobs-c-plus-plus",
@@ -2718,6 +2504,11 @@
"redirect_url": "/azure/aks/load-balancer-standard",
"redirect_document_id": false
},
+ {
+ "source_path_from_root": "/articles/aks/keda.md",
+ "redirect_url": "/azure/aks/keda-about",
+ "redirect_document_id": false
+ },
{
"source_path_from_root": "/articles/analysis-services/analysis-services-create-model-portal.md",
"redirect_url": "/azure/analysis-services/analysis-services-overview",
@@ -2748,131 +2539,7 @@
"redirect_url": "/azure/analysis-services/analysis-services-overview",
"redirect_document_id": false
},
- {
- "source_path_from_root": "/articles/machine-learning/reference-yaml-deployment-managed-batch.md",
- "redirect_url": "/azure/machine-learning/reference-yaml-deployment-batch.md",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-kubernetes-instance-type.md",
- "redirect_url": "/azure/machine-learning/how-to-attach-kubernetes-anywhere",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-attach-arc-kubernetes.md",
- "redirect_url": "/azure/machine-learning/how-to-attach-kubernetes-anywhere",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/reference-yaml-endpoint-managed-batch.md",
- "redirect_url": "/azure/machine-learning/reference-yaml-endpoint-batch.md",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/reference-yaml-compute.md",
- "redirect_url": "/azure/machine-learning/reference-yaml-compute-aml.md",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/reference-yaml-deployment-k8s-online.md",
- "redirect_url": "/azure/machine-learning/reference-yaml-overview.md",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/reference-yaml-endpoint-k8s-online.md",
- "redirect_url": "/azure/machine-learning/reference-yaml-overview.md",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/tutorial-train-models-with-aml.md",
- "redirect_url": "/azure/machine-learning/tutorial-train-deploy-notebook",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/tutorial-deploy-models-with-aml.md",
- "redirect_url": "/azure/machine-learning/tutorial-train-deploy-notebook",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-create-labeling-projects.md",
- "redirect_url": "/azure/machine-learning/how-to-create-image-labeling-projects",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/overview-what-is-azure-ml.md",
- "redirect_url": "/azure/machine-learning/overview-what-is-azure-machine-learning",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-troubleshoot-managed-online-endpoints.md",
- "redirect_url": "/azure/machine-learning/how-to-troubleshoot-online-endpoints",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/classic/migrate-overview.md",
- "redirect_url": "/azure/machine-learning/migrate-overview",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/classic/migrate-register-dataset.md",
- "redirect_url": "/azure/machine-learning/migrate-register-dataset",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/classic/migrate-rebuild-experiment.md",
- "redirect_url": "/azure/machine-learning/migrate-rebuild-experiment",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/classic/migrate-rebuild-web-service.md",
- "redirect_url": "/azure/machine-learning/migrate-rebuild-web-service",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/classic/migrate-rebuild-integrate-with-client-app.md",
- "redirect_url": "/azure/machine-learning/migrate-rebuild-integrate-with-client-app",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/classic/migrate-execute-r-script.md",
- "redirect_url": "/azure/machine-learning/migrate-execute-r-script",
- "redirect_document_id": true
- },
- {
- "source_path": "articles/machine-learning/how-to-search-cross-workspace.md",
- "redirect_url": "/azure/machine-learning/how-to-manage-workspace",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/resource-known-issues.md",
- "redirect_url": "/azure/machine-learning/how-to-configure-auto-train#troubleshooting",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/how-to-compute-cluster-instance-os-upgrade.md",
- "redirect_url": "/azure/machine-learning/concept-vulnerability-management",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/how-to-deploy-custom-docker-image.md",
- "redirect_url": "/azure/machine-learning/how-to-deploy-custom-container",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/how-to-deploy-continuously-deploy.md",
- "redirect_url": "/azure/machine-learning/how-to-safely-rollout-managed-endpoints",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/tutorial-deploy-managed-endpoints-using-system-managed-identity.md",
- "redirect_url": "/azure/machine-learning/how-to-access-resources-from-endpoints-managed-identities",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-auto-train-remote.md",
- "redirect_url": "/azure/machine-learning/concept-automated-ml#local-remote",
- "redirect_document_id": false
- },
+
{
"source_path_from_root": "/articles/analysis-services/tutorials/aas-lesson-13-deploy.md",
"redirect_url": "/azure/analysis-services/analysis-services-overview",
@@ -5468,16 +5135,7 @@
"redirect_url": "/azure/architecture/cloud-adoption-guide/subscription-governance-examples",
"redirect_document_id": false
},
- {
- "source_path_from_root": "/articles/machine-learning/service/overview-more-machine-learning.md",
- "redirect_url": "/azure/architecture/data-guide/technology-choices/data-science-and-machine-learning",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/r-developers-guide.md",
- "redirect_url": "/azure/architecture/data-guide/technology-choices/r-developers-guide",
- "redirect_document_id": false
- },
+
{
"source_path_from_root": "/articles/guidance/guidance-elasticsearch.md",
"redirect_url": "/azure/architecture/elasticsearch",
@@ -17833,6 +17491,26 @@
"redirect_url": "/azure/iot-dps/quick-setup-auto-provision-cli",
"redirect_document_id": false
},
+ {
+ "source_path_from_root": "/articles/iot-dps/tutorial-net-provision-device-to-hub.md",
+ "redirect_url": "/azure/iot-dps/",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/iot-dps/tutorial-provision-device-to-hub.md",
+ "redirect_url": "/azure/iot-dps/quick-create-simulated-device-symm-key",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/iot-dps/tutorial-set-up-cloud.md",
+ "redirect_url": "/azure/iot-dps/quick-create-simulated-device-symm-key",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/iot-dps/tutorial-set-up-device.md",
+ "redirect_url": "/azure/iot-dps/quick-create-simulated-device-symm-key",
+ "redirect_document_id": false
+ },
{
"source_path_from_root": "/articles/security/fundamentals/iot-overview.md",
"redirect_url": "/azure/iot-fundamentals/iot-security-architecture",
@@ -19299,438 +18977,8 @@
"redirect_document_id": false
},
{
- "source_path_from_root": "/articles/machine-learning/service/index.yml",
- "redirect_url": "/azure/machine-learning/",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-algorithm-cheat-sheet.md",
- "redirect_url": "/azure/machine-learning/algorithm-cheat-sheet",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/algorithm-cheat-sheet.md",
- "redirect_url": "/azure/machine-learning/algorithm-cheat-sheet",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/import-from-azure-blob-storage.md",
- "redirect_url": "/azure/machine-learning/algorithm-module-reference/module-reference",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/import-from-azure-sql-database.md",
- "redirect_url": "/azure/machine-learning/algorithm-module-reference/module-reference",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/import-from-web-url-via-http.md",
- "redirect_url": "/azure/machine-learning/algorithm-module-reference/module-reference",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-ui-sample-classification-predict-credit-risk-basic.md",
- "redirect_url": "/azure/machine-learning/azure/machine-learning/samples-designer",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/azure-machine-learning-release-notes.md",
- "redirect_url": "/azure/machine-learning/azure-machine-learning-release-notes",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/azure-ml-customer-churn-scenario.md",
- "redirect_url": "/azure/machine-learning/classic/",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/debug-models.md",
- "redirect_url": "/azure/machine-learning/classic/",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/extend-your-experiment-with-r.md",
- "redirect_url": "/azure/machine-learning/classic/",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/text-analytics-module-tutorial.md",
- "redirect_url": "/azure/machine-learning/classic/",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/troubleshooting-creating-ml-workspace.md",
- "redirect_url": "/azure/machine-learning/classic/",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/use-case-excel-studio.md",
- "redirect_url": "/azure/machine-learning/classic/",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/what-is-machine-learning.md",
- "redirect_url": "/azure/machine-learning/classic/",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/ai-gallery-control-personal-data-dsr.md",
- "redirect_url": "/azure/machine-learning/classic/ai-gallery-control-personal-data-dsr",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/algorithm-parameters-optimize.md",
- "redirect_url": "/azure/machine-learning/classic/algorithm-parameters-optimize",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/azure-ml-netsharp-reference-guide.md",
- "redirect_url": "/azure/machine-learning/classic/azure-ml-netsharp-reference-guide",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/consume-web-services.md",
- "redirect_url": "/azure/machine-learning/classic/consume-web-services",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/consume-web-service-with-web-app-template.md",
- "redirect_url": "/azure/machine-learning/classic/consume-web-services",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/consuming-from-excel.md",
- "redirect_url": "/azure/machine-learning/classic/consuming-from-excel",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/create-endpoint.md",
- "redirect_url": "/azure/machine-learning/classic/create-endpoint",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/create-experiment.md",
- "redirect_url": "/azure/machine-learning/classic/create-experiment",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/create-models-and-endpoints-with-powershell.md",
- "redirect_url": "/azure/machine-learning/classic/create-models-and-endpoints-with-powershell",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/create-workspace.md",
- "redirect_url": "/azure/machine-learning/classic/create-workspace",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/custom-r-modules.md",
- "redirect_url": "/azure/machine-learning/classic/custom-r-modules",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/classic/data-science-for-beginners-ask-a-question-you-can-answer-with-data.md",
- "redirect_url": "/azure/machine-learning/classic/retired-data-science-for-beginners-videos",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/classic/data-science-for-beginners-copy-other-peoples-work-to-do-data-science.md",
- "redirect_url": "/azure/machine-learning/classic/retired-data-science-for-beginners-videos",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/classic/data-science-for-beginners-is-your-data-ready-for-data-science.md",
- "redirect_url": "/azure/machine-learning/classic/retired-data-science-for-beginners-videos",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/classic/data-science-for-beginners-predict-an-answer-with-a-simple-model.md",
- "redirect_url": "/azure/machine-learning/classic/retired-data-science-for-beginners-videos",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/classic/data-science-for-beginners-the-5-questions-data-science-answers.md",
- "redirect_url": "/azure/machine-learning/classic/retired-data-science-for-beginners-videos",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/data-science-for-beginners-ask-a-question-you-can-answer-with-data.md",
- "redirect_url": "/azure/machine-learning/classic/retired-data-science-for-beginners-videos",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/data-science-for-beginners-copy-other-peoples-work-to-do-data-science.md",
- "redirect_url": "/azure/machine-learning/classic/retired-data-science-for-beginners-videos",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/data-science-for-beginners-is-your-data-ready-for-data-science.md",
- "redirect_url": "/azure/machine-learning/classic/retired-data-science-for-beginners-videos",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/data-science-for-beginners-predict-an-answer-with-a-simple-model.md",
- "redirect_url": "/azure/machine-learning/classic/retired-data-science-for-beginners-videos",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/data-science-for-beginners-the-5-questions-data-science-answers.md",
- "redirect_url": "/azure/machine-learning/classic/retired-data-science-for-beginners-videos",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/convert-training-experiment-to-scoring-experiment.md",
- "redirect_url": "/azure/machine-learning/classic/deploy-a-machine-learning-web-service",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/deploy-a-machine-learning-web-service.md",
- "redirect_url": "/azure/machine-learning/classic/deploy-a-machine-learning-web-service",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/deploy-consume-web-service-guide.md",
- "redirect_url": "/azure/machine-learning/classic/deploy-consume-web-service-guide",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/deploy-with-resource-manager-template.md",
- "redirect_url": "/azure/machine-learning/classic/deploy-with-resource-manager-template",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/evaluate-model-performance.md",
- "redirect_url": "/azure/machine-learning/classic/evaluate-model-performance",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/excel-add-in-for-web-services.md",
- "redirect_url": "/azure/machine-learning/classic/excel-add-in-for-web-services",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/execute-python-scripts.md",
- "redirect_url": "/azure/machine-learning/classic/execute-python-scripts",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/export-delete-personal-data-dsr.md",
- "redirect_url": "/azure/machine-learning/classic/export-delete-personal-data-dsr",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-monitor-view-training-logs.md",
- "redirect_url": "/azure/machine-learning/how-to-log-view-metrics",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-manage-runs.md",
- "redirect_url": "/azure/machine-learning/how-to-track-monitor-analyze-runs",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-track-experiments.md",
- "redirect_url": "/azure/machine-learning/how-to-log-view-metrics",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-faq.md",
- "redirect_url": "/azure/machine-learning/classic/faq",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/gallery-how-to-use-contribute-publish.md",
- "redirect_url": "/azure/machine-learning/classic/gallery-how-to-use-contribute-publish",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/import-data.md",
- "redirect_url": "/azure/machine-learning/classic/import-data",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/index.yml",
- "redirect_url": "/azure/machine-learning/classic/index",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/interpret-model-results.md",
- "redirect_url": "/azure/machine-learning/classic/interpret-model-results",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/manage-experiment-iterations.md",
- "redirect_url": "/azure/machine-learning/classic/manage-experiment-iterations",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/manage-new-webservice.md",
- "redirect_url": "/azure/machine-learning/classic/manage-new-webservice",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/manage-web-service-endpoints-using-api-management.md",
- "redirect_url": "/azure/machine-learning/classic/manage-web-service-endpoints-using-api-management",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/manage-workspace.md",
- "redirect_url": "/azure/machine-learning/classic/manage-workspace",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/model-progression-experiment-to-web-service.md",
- "redirect_url": "/azure/machine-learning/classic/model-progression-experiment-to-web-service",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/powershell-module.md",
- "redirect_url": "/azure/machine-learning/classic/powershell-module",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/retrain-classic-web-service.md",
- "redirect_url": "/azure/machine-learning/classic/retrain-classic-web-service",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/troubleshooting-retraining-models.md",
- "redirect_url": "/azure/machine-learning/classic/retrain-classic-web-service",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/retrain-existing-resource-manager-based-web-service.md",
- "redirect_url": "/azure/machine-learning/classic/retrain-machine-learning-model",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/retrain-machine-learning-model.md",
- "redirect_url": "/azure/machine-learning/classic/retrain-machine-learning-model",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/retrain-models-programmatically.md",
- "redirect_url": "/azure/machine-learning/classic/retrain-machine-learning-model",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/retrain-new-web-service-using-powershell.md",
- "redirect_url": "/azure/machine-learning/classic/retrain-machine-learning-model",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/r-get-started.md",
- "redirect_url": "/azure/machine-learning/classic/r-get-started",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/sample-experiments.md",
- "redirect_url": "/azure/machine-learning/classic/sample-experiments",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/studio-classic-overview.md",
- "redirect_url": "/azure/machine-learning/classic/studio-classic-overview",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/support-aml-studio.md",
- "redirect_url": "/azure/machine-learning/classic/support-aml-studio",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/tutorial-part1-credit-risk.md",
- "redirect_url": "/azure/machine-learning/classic/tutorial-part1-credit-risk",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/walkthrough-1-create-ml-workspace.md",
- "redirect_url": "/azure/machine-learning/classic/tutorial-part1-credit-risk",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/walkthrough-2-upload-data.md",
- "redirect_url": "/azure/machine-learning/classic/tutorial-part1-credit-risk",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/walkthrough-3-create-new-experiment.md",
- "redirect_url": "/azure/machine-learning/classic/tutorial-part1-credit-risk",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/walkthrough-develop-predictive-solution.md",
- "redirect_url": "/azure/machine-learning/classic/tutorial-part1-credit-risk",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/tutorial-part2-credit-risk-train.md",
- "redirect_url": "/azure/machine-learning/classic/tutorial-part2-credit-risk-train",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/walkthrough-4-train-and-evaluate-models.md",
- "redirect_url": "/azure/machine-learning/classic/tutorial-part2-credit-risk-train",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/tutorial-part3-credit-risk-deploy.md",
- "redirect_url": "/azure/machine-learning/classic/tutorial-part3-credit-risk-deploy",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/walkthrough-5-publish-web-service.md",
- "redirect_url": "/azure/machine-learning/classic/tutorial-part3-credit-risk-deploy",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/walkthrough-6-access-web-service.md",
- "redirect_url": "/azure/machine-learning/classic/tutorial-part3-credit-risk-deploy",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/linear-regression-in-azure.md",
- "redirect_url": "/azure/machine-learning/classic/use-case-excel-studio",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/use-data-from-an-on-premises-sql-server.md",
- "redirect_url": "/azure/machine-learning/classic/use-data-from-an-on-premises-sql-server",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/use-sample-datasets.md",
- "redirect_url": "/azure/machine-learning/classic/use-sample-datasets",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/version-control.md",
- "redirect_url": "/azure/machine-learning/classic/version-control",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/web-service-error-codes.md",
- "redirect_url": "/azure/machine-learning/classic/web-service-error-codes",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/web-service-parameters.md",
- "redirect_url": "/azure/machine-learning/classic/web-service-parameters",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/web-services-logging.md",
- "redirect_url": "/azure/machine-learning/classic/web-services-logging",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/web-services-that-use-import-export-modules.md",
- "redirect_url": "/azure/machine-learning/classic/web-services-that-use-import-export-modules",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/faq.md",
- "redirect_url": "/azure/machine-learning/classic/what-is-ml-studio",
+ "source_path_from_root": "/articles/logic-apps/logic-apps-scenario-error-and-exception-handling.md",
+ "redirect_url": "/azure/logic-apps/logic-apps-exception-handling",
"redirect_document_id": false
},
{
@@ -19773,1502 +19021,50 @@
"redirect_url": "/azure/machine-learning/classic-module-reference/text-analytics",
"redirect_document_id": false
},
+
{
- "source_path_from_root": "/articles/machine-learning/how-to-define-task-type.md",
- "redirect_url": "/azure/machine-learning/concept-automated-ml",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/concept-automated-ml.md",
- "redirect_url": "/azure/machine-learning/concept-automated-ml",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-automated-ml.md",
- "redirect_url": "/azure/machine-learning/concept-automated-ml",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/concept-azure-machine-learning-architecture.md",
- "redirect_url": "/azure/machine-learning/concept-azure-machine-learning-architecture",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/concept-compute-instance.md",
- "redirect_url": "/azure/machine-learning/concept-compute-instance",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/concept-compute-target.md",
- "redirect_url": "/azure/machine-learning/concept-compute-target",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/concept-data.md",
- "redirect_url": "/azure/machine-learning/concept-data",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/concept-deep-learning-vs-machine-learning.md",
- "redirect_url": "/azure/machine-learning/concept-deep-learning-vs-machine-learning",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/concept-designer.md",
- "redirect_url": "/azure/machine-learning/concept-designer",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/ui-concept-visual-interface.md",
- "redirect_url": "/azure/machine-learning/concept-designer",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/concept-enterprise-security.md",
- "redirect_url": "/azure/machine-learning/concept-enterprise-security",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/concept-event-grid-integration.md",
- "redirect_url": "/azure/machine-learning/concept-event-grid-integration",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/event-grid/cli-samples.md",
- "redirect_url": "/azure/event-grid/scripts/event-grid-cli-subscribe-custom-topic",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/event-grid/scripts/event-grid-cli-azure-subscription.md",
- "redirect_url": "/azure/event-grid/scripts/event-grid-cli-subscribe-custom-topic",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/event-grid/scripts/event-grid-cli-create-custom-topic.md",
- "redirect_url": "/azure/event-grid/scripts/event-grid-cli-subscribe-custom-topic",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/event-grid/scripts/event-grid-cli-resource-group-filter.md",
- "redirect_url": "/azure/event-grid/scripts/event-grid-cli-subscribe-custom-topic",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/event-grid/scripts/event-grid-cli-blob.md",
- "redirect_url": "/azure/event-grid/scripts/event-grid-cli-subscribe-custom-topic",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/event-grid/scripts/event-grid-cli-resource-group.md",
- "redirect_url": "/azure/event-grid/scripts/event-grid-cli-subscribe-custom-topic",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/concept-ml-pipelines.md",
- "redirect_url": "/azure/machine-learning/concept-ml-pipelines",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/concept-model-management-and-deployment.md",
- "redirect_url": "/azure/machine-learning/concept-model-management-and-deployment",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/concept-onnx.md",
- "redirect_url": "/azure/machine-learning/concept-onnx",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-build-deploy-onnx.md",
- "redirect_url": "/azure/machine-learning/concept-onnx",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/concept-train-machine-learning-model.md",
- "redirect_url": "/azure/machine-learning/concept-train-machine-learning-model",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/concept-train-model-git-integration.md",
- "redirect_url": "/azure/machine-learning/concept-train-model-git-integration",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/concept-workspace.md",
- "redirect_url": "/azure/machine-learning/concept-workspace",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/concept-editions.md",
- "redirect_url": "/azure/machine-learning/concept-workspace#wheres-enterprise",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/data-science-virtual-machine/dsvm-data-platforms.md",
- "redirect_url": "/azure/machine-learning/data-science-virtual-machine/dsvm-tools-data-platforms",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/data-science-virtual-machine/dsvm-ml-data-science-tools.md",
- "redirect_url": "/azure/machine-learning/data-science-virtual-machine/dsvm-tools-data-science",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/data-science-virtual-machine/dsvm-deep-learning-ai-frameworks.md",
- "redirect_url": "/azure/machine-learning/data-science-virtual-machine/dsvm-tools-deep-learning-frameworks",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/data-science-virtual-machine/dsvm-languages.md",
- "redirect_url": "/azure/machine-learning/data-science-virtual-machine/dsvm-tools-languages",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/data-science-virtual-machine/dsvm-tools-explore-and-visualize.md",
- "redirect_url": "/azure/machine-learning/data-science-virtual-machine/dsvm-tools-productivity",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/data-science-virtual-machine/provision-deep-learning-dsvm.md",
- "redirect_url": "/azure/machine-learning/data-science-virtual-machine/dsvm-ubuntu-intro",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-dsvm-ubuntu-intro.md",
- "redirect_url": "/azure/machine-learning/data-science-virtual-machine/dsvm-ubuntu-intro",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-linux-dsvm-intro.md",
- "redirect_url": "/azure/machine-learning/data-science-virtual-machine/linux-dsvm-intro",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-linux-dsvm-walkthrough.md",
- "redirect_url": "/azure/machine-learning/data-science-virtual-machine/linux-dsvm-walkthrough",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/data-science-virtual-machine/use-deep-learning-dsvm.md",
- "redirect_url": "/azure/machine-learning/data-science-virtual-machine/linux-dsvm-walkthrough#deep-learning",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/data-science-virtual-machine/deep-learning-dsvm-overview.md",
- "redirect_url": "/azure/machine-learning/data-science-virtual-machine/overview",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/data-science-virtual-machine/setup-sql-server-virtual-machine.md",
- "redirect_url": "/azure/machine-learning/data-science-virtual-machine/overview",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/data-science-virtual-machine/setup-virtual-machine.md",
- "redirect_url": "/azure/machine-learning/data-science-virtual-machine/overview",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-setup-sql-server-virtual-machine.md",
- "redirect_url": "/azure/machine-learning/data-science-virtual-machine/overview",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-setup-virtual-machine.md",
- "redirect_url": "/azure/machine-learning/data-science-virtual-machine/overview",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-virtual-machine-overview.md",
- "redirect_url": "/azure/machine-learning/data-science-virtual-machine/overview",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/tutorial-1st-experiment-sdk-setup.md",
- "redirect_url": "/azure/machine-learning/quickstart-create-resources",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/tutorial-1st-experiment-sdk-setup-local.md",
- "redirect_url": "/azure/machine-learning/quickstart-create-resources",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/team-data-science-process/virtual-machines.md",
- "redirect_url": "/azure/machine-learning/data-science-virtual-machine/overview",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-provision-vm.md",
- "redirect_url": "/azure/machine-learning/data-science-virtual-machine/provision-vm",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/data-science-virtual-machine/geo-ai-dsvm-overview.md",
- "redirect_url": "/azure/machine-learning/data-science-virtual-machine/release-notes",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/data-science-virtual-machine/linux-dsvm-intro.md",
- "redirect_url": "/azure/machine-learning/data-science-virtual-machine/release-notes",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/data-science-virtual-machine/provision-geo-ai-dsvm.md",
- "redirect_url": "/azure/machine-learning/data-science-virtual-machine/release-notes",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/data-science-virtual-machine/reference-centos-vm.md",
- "redirect_url": "/azure/machine-learning/data-science-virtual-machine/release-notes",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/data-science-virtual-machine/reference-deprecation.md",
- "redirect_url": "/azure/machine-learning/data-science-virtual-machine/release-notes",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/data-science-virtual-machine/use-geo-ai-dsvm.md",
- "redirect_url": "/azure/machine-learning/data-science-virtual-machine/release-notes",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/data-science-virtual-machine/dsvm-tools-overview.md",
- "redirect_url": "/azure/machine-learning/data-science-virtual-machine/tools-included",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/data-science-virtual-machine/reference-windows-vm.md",
- "redirect_url": "/azure/machine-learning/data-science-virtual-machine/tools-included",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-vm-do-ten-things.md",
- "redirect_url": "/azure/machine-learning/data-science-virtual-machine/vm-do-ten-things",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-access-data.md",
- "redirect_url": "/azure/machine-learning/how-to-access-data",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-assign-roles.md",
- "redirect_url": "/azure/machine-learning/how-to-assign-roles",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-create-attach-compute-sdk.md",
- "redirect_url": "/azure/machine-learning/how-to-attach-compute-targets",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-auto-train-forecast.md",
- "redirect_url": "/azure/machine-learning/how-to-auto-train-forecast",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-auto-train-remote.md",
- "redirect_url": "/azure/machine-learning/how-to-auto-train-remote",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-change-storage-access-key.md",
- "redirect_url": "/azure/machine-learning/how-to-change-storage-access-key",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-configure-auto-train.md",
- "redirect_url": "/azure/machine-learning/how-to-configure-auto-train",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-choose-a-dev-environment.md",
- "redirect_url": "/azure/machine-learning/how-to-configure-environment",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-configure-environment.md",
- "redirect_url": "/azure/machine-learning/how-to-configure-environment",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/quickstart-create-workspace-with-python.md",
- "redirect_url": "/azure/machine-learning/how-to-configure-environment#local",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/quickstart-run-local-notebook.md",
- "redirect_url": "/azure/machine-learning/how-to-configure-environment#local",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-consume-web-service.md",
- "redirect_url": "/azure/machine-learning/how-to-consume-web-service",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-create-labeling-projects.md",
- "redirect_url": "/azure/machine-learning/how-to-create-labeling-projects",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-create-your-first-pipeline.md",
- "redirect_url": "/azure/machine-learning/how-to-create-machine-learning-pipelines",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-create-register-datasets.md",
- "redirect_url": "/azure/machine-learning/how-to-create-register-datasets",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-transform-data.md",
- "redirect_url": "/azure/machine-learning/how-to-create-register-datasets",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-write-data.md",
- "redirect_url": "/azure/machine-learning/how-to-create-register-datasets",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-create-workspace-template.md",
- "redirect_url": "/azure/machine-learning/how-to-create-workspace-template",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/tutorial-resource-manager-workspace.md",
- "redirect_url": "/azure/machine-learning/how-to-create-workspace-template",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-create-your-first-pipeline.md",
- "redirect_url": "/azure/machine-learning/how-to-create-your-first-pipeline",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-debug-batch-predictions.md",
- "redirect_url": "/azure/machine-learning/how-to-debug-batch-predictions",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-debug-batch-predictions.md",
- "redirect_url": "/azure/machine-learning/how-to-debug-parallel-run-step",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/concept-pipeline-practices-tips.md",
- "redirect_url": "/azure/machine-learning/how-to-debug-pipelines",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-debug-pipelines.md",
- "redirect_url": "/azure/machine-learning/how-to-debug-pipelines",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-define-task-type.md",
- "redirect_url": "/azure/machine-learning/how-to-define-task-type",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-deploy-and-where.md",
- "redirect_url": "/azure/machine-learning/how-to-deploy-and-where",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-deploy-to-aci.md",
- "redirect_url": "/azure/machine-learning/how-to-deploy-and-where",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-deploy-to-aks.md",
- "redirect_url": "/azure/machine-learning/how-to-deploy-and-where",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-deploy-to-iot.md",
- "redirect_url": "/azure/machine-learning/how-to-deploy-and-where",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/publish-a-machine-learning-web-service.md",
- "redirect_url": "/azure/machine-learning/how-to-deploy-and-where",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-deploy-app-service.md",
- "redirect_url": "/azure/machine-learning/how-to-deploy-managed-online-endpoints",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-deploy-azure-container-instance.md",
- "redirect_url": "/azure/machine-learning/how-to-deploy-azure-container-instance",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-deploy-azure-kubernetes-service.md",
- "redirect_url": "/azure/machine-learning/how-to-deploy-azure-kubernetes-service",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-deploy-custom-docker-image.md",
- "redirect_url": "/azure/machine-learning/how-to-deploy-custom-docker-image",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/tutorial-labeling.md",
- "redirect_url": "/azure/machine-learning/how-to-create-image-labeling-projects",
- "redirect_document_id": "false"
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-deploy-existing-model.md",
- "redirect_url": "/azure/machine-learning/how-to-deploy-and-where",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-deploy-existing-model.md",
- "redirect_url": "/azure/machine-learning/how-to-deploy-and-where",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-homomorphic-encryption-seal.md",
- "redirect_url": "/azure/machine-learning/",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/concept-accelerate-with-fpgas.md",
- "redirect_url": "/azure/machine-learning/how-to-deploy-fpga-web-service",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-deploy-fpga-web-service.md",
- "redirect_url": "/azure/machine-learning/how-to-deploy-fpga-web-service",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-deploy-functions.md",
- "redirect_url": "/azure/machine-learning/how-to-deploy-managed-online-endpoints",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-deploy-no-code-deployment.md",
- "redirect_url": "/azure/machine-learning/how-to-deploy-mlflow-models-online-endpoints",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/concept-accelerate-inferencing-with-gpus.md",
- "redirect_url": "/azure/machine-learning/how-to-deploy-inferencing-gpus",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-deploy-inferencing-gpus.md",
- "redirect_url": "/azure/machine-learning/how-to-deploy-inferencing-gpus",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-deploy-local-container-notebook-vm.md",
- "redirect_url": "/azure/machine-learning/how-to-deploy-local-container-notebook-vm",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-designer-sample-classification-churn.md",
- "redirect_url": "/azure/machine-learning/how-to-designer-sample-classification-churn",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-designer-sample-classification-predict-income.md",
- "redirect_url": "/azure/machine-learning/how-to-designer-sample-classification-predict-income",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-enable-app-insights.md",
- "redirect_url": "/azure/machine-learning/how-to-enable-app-insights",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-monitor-data-drift.md",
- "redirect_url": "/azure/machine-learning/how-to-enable-data-collection",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-enable-data-collection.md",
- "redirect_url": "/azure/machine-learning/how-to-enable-data-collection",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-enable-logging.md",
- "redirect_url": "/azure/machine-learning/how-to-enable-logging",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-enable-virtual-network.md",
- "redirect_url": "/azure/machine-learning/how-to-enable-virtual-network",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-export-delete-data.md",
- "redirect_url": "/azure/machine-learning/how-to-export-delete-data",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-label-images.md",
- "redirect_url": "/azure/machine-learning/how-to-label-images",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-debug-pipelines-application-insights.md",
- "redirect_url": "/azure/machine-learning/how-to-log-pipelines-application-insights",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-machine-learning-interpretability.md",
- "redirect_url": "/azure/machine-learning/how-to-machine-learning-interpretability",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/machine-learning-interpretability-explainability.md",
- "redirect_url": "/azure/machine-learning/how-to-machine-learning-interpretability",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-machine-learning-interpretability-aml.md",
- "redirect_url": "/azure/machine-learning/how-to-machine-learning-interpretability-aml",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-machine-learning-interpretability-automl.md",
- "redirect_url": "/azure/machine-learning/how-to-machine-learning-interpretability-automl",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-manage-quotas.md",
- "redirect_url": "/azure/machine-learning/how-to-manage-quotas",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-manage-runs.md",
- "redirect_url": "/azure/machine-learning/how-to-manage-runs",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-manage-workspace.md",
- "redirect_url": "/azure/machine-learning/how-to-manage-workspace",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/setup-create-workspace.md",
- "redirect_url": "/azure/machine-learning/how-to-manage-workspace",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-manage-workspace-cli.md",
- "redirect_url": "/azure/machine-learning/how-to-manage-workspace-cli",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/concept-data-drift.md",
- "redirect_url": "/azure/machine-learning/how-to-monitor-data-drift",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-monitor-data-drift.md",
- "redirect_url": "/azure/machine-learning/how-to-monitor-data-drift",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-monitor-datasets.md",
- "redirect_url": "/azure/machine-learning/how-to-monitor-datasets",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-monitor-tensorboard.md",
- "redirect_url": "/azure/machine-learning/how-to-monitor-tensorboard",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-enable-virtual-network.md",
- "redirect_url": "/azure/machine-learning/how-to-network-security-overview",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-retrain-designer.md",
- "redirect_url": "/azure/machine-learning/how-to-retrain-designer",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-run-batch-predictions.md",
- "redirect_url": "/azure/machine-learning/how-to-run-batch-predictions",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-run-batch-predictions-designer.md",
- "redirect_url": "/azure/machine-learning/how-to-run-batch-predictions-designer",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-save-write-experiment-files.md",
- "redirect_url": "/azure/machine-learning/how-to-save-write-experiment-files",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-schedule-pipelines.md",
- "redirect_url": "/azure/machine-learning/how-to-schedule-pipelines",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-secure-web-service.md",
- "redirect_url": "/azure/machine-learning/how-to-secure-web-service",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-algorithm-choice.md",
- "redirect_url": "/azure/machine-learning/how-to-select-algorithms",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/algorithm-choice.md",
- "redirect_url": "/azure/machine-learning/how-to-select-algorithms",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/basics-infographic-with-algorithm-examples.md",
- "redirect_url": "/azure/machine-learning/how-to-select-algorithms",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-setup-authentication.md",
- "redirect_url": "/azure/machine-learning/how-to-setup-authentication",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-train-ml-models.md",
- "redirect_url": "/azure/machine-learning/how-to-set-up-training-targets",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-set-up-training-targets.md",
- "redirect_url": "/azure/machine-learning/how-to-set-up-training-targets",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-enable-logging.md",
- "redirect_url": "/azure/machine-learning/how-to-track-experiments",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-track-experiments.md",
- "redirect_url": "/azure/machine-learning/how-to-track-experiments",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-train-chainer.md",
- "redirect_url": "/azure/machine-learning/how-to-train-chainer",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-train-keras.md",
- "redirect_url": "/azure/machine-learning/how-to-train-keras",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-train-chainer.md",
- "redirect_url": "/azure/machine-learning/how-to-train-ml-models",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-train-ml-models.md",
- "redirect_url": "/azure/machine-learning/how-to-train-ml-models",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-train-pytorch.md",
- "redirect_url": "/azure/machine-learning/how-to-train-pytorch",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-train-scikit-learn.md",
- "redirect_url": "/azure/machine-learning/how-to-train-scikit-learn",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-train-tensorflow.md",
- "redirect_url": "/azure/machine-learning/how-to-train-tensorflow",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-train-with-datasets.md",
- "redirect_url": "/azure/machine-learning/how-to-train-with-datasets",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-schedule-pipelines.md",
- "redirect_url": "/azure/machine-learning/how-to-trigger-published-pipeline",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-troubleshoot-deployment.md",
- "redirect_url": "/azure/machine-learning/how-to-troubleshoot-deployment",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-tune-hyperparameters.md",
- "redirect_url": "/azure/machine-learning/how-to-tune-hyperparameters",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-understand-accuracy-metrics.md",
- "redirect_url": "/azure/machine-learning/how-to-understand-automated-ml",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-understand-automated-ml.md",
- "redirect_url": "/azure/machine-learning/how-to-understand-automated-ml",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-create-portal-experiments.md",
- "redirect_url": "/azure/machine-learning/how-to-use-automated-ml-for-ml-models",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-use-environments.md",
- "redirect_url": "/azure/machine-learning/how-to-use-environments",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/concept-event-grid-integration.md",
- "redirect_url": "/azure/machine-learning/how-to-use-event-grid",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-use-event-grid.md",
- "redirect_url": "/azure/machine-learning/how-to-use-event-grid",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-use-mlflow.md",
- "redirect_url": "/azure/machine-learning/how-to-use-mlflow",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-run-batch-predictions.md",
- "redirect_url": "/azure/machine-learning/how-to-use-parallel-run-step",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-use-secrets-in-runs.md",
- "redirect_url": "/azure/machine-learning/how-to-use-secrets-in-runs",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-version-track-datasets.md",
- "redirect_url": "/azure/machine-learning/how-to-version-track-datasets",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/services.md",
- "redirect_url": "/azure/machine-learning/index",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/monitor-azure-machine-learning.md",
- "redirect_url": "/azure/machine-learning/monitor-azure-machine-learning",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/monitor-resource-reference.md",
- "redirect_url": "/azure/machine-learning/monitor-resource-reference",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-build-deploy-image-classification-models.md",
- "redirect_url": "/azure/machine-learning/overview-what-happened-to-workbench",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/concept-azure-machine-learning-architecture.md",
- "redirect_url": "/azure/machine-learning/concept-azure-machine-learning-v2",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-build-deploy-image-similarity-models.md",
- "redirect_url": "/azure/machine-learning/overview-what-happened-to-workbench",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-build-deploy-object-detection-models.md",
- "redirect_url": "/azure/machine-learning/overview-what-happened-to-workbench",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-build-deploy-text-classification-models.md",
- "redirect_url": "/azure/machine-learning/overview-what-happened-to-workbench",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-improve-accuracy-for-computer-vision-models.md",
- "redirect_url": "/azure/machine-learning/overview-what-happened-to-workbench",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-migrate.md",
- "redirect_url": "/azure/machine-learning/overview-what-happened-to-workbench",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/overview-what-happened-to-workbench.md",
- "redirect_url": "/azure/machine-learning/overview-what-happened-to-workbench",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/overview-what-is-machine-learning.md",
- "redirect_url": "/azure/machine-learning/overview-what-is-machine-learning",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/compare-azure-ml-to-studio-classic.md",
- "redirect_url": "/azure/machine-learning/overview-what-is-machine-learning-studio#ml-studio-classic-vs-azure-machine-learning-studio",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/what-is-ml-studio.md",
- "redirect_url": "/azure/machine-learning/overview-what-is-machine-learning-studio#ml-studio-classic-vs-azure-machine-learning-studio",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/quickstart-get-started-with-cli.md",
- "redirect_url": "/azure/machine-learning/reference-azure-machine-learning-cli",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/reference-azure-machine-learning-cli.md",
- "redirect_url": "/azure/machine-learning/reference-azure-machine-learning-cli",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/resource-known-issues.md",
- "redirect_url": "/azure/machine-learning/how-to-debug-visual-studio-code",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/designer-sample-datasets.md",
- "redirect_url": "/azure/machine-learning/sample-designer-datasets",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-designer-sample-classification-churn.md",
- "redirect_url": "/azure/machine-learning/samples-designer",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-designer-sample-classification-credit-risk-cost-sensitive.md",
- "redirect_url": "/azure/machine-learning/samples-designer",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-designer-sample-classification-flight-delay.md",
- "redirect_url": "/azure/machine-learning/samples-designer",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-designer-sample-classification-predict-income.md",
- "redirect_url": "/azure/machine-learning/samples-designer",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-designer-sample-regression-automobile-price-basic.md",
- "redirect_url": "/azure/machine-learning/samples-designer",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-designer-sample-regression-automobile-price-compare-algorithms.md",
- "redirect_url": "/azure/machine-learning/samples-designer",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-designer-sample-text-classification.md",
- "redirect_url": "/azure/machine-learning/samples-designer",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-ui-sample-classification-predict-flight-delay.md",
- "redirect_url": "/azure/machine-learning/samples-designer",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-ui-sample-regression-predict-automobile-price-basic.md",
- "redirect_url": "/azure/machine-learning/samples-designer",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/sample-designer-datasets.md",
- "redirect_url": "/azure/machine-learning/samples-designer",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-designer-sample-classification-credit-risk-cost-sensitive.md",
- "redirect_url": "/azure/machine-learning/samples-designer",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-designer-sample-classification-flight-delay.md",
- "redirect_url": "/azure/machine-learning/samples-designer",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-designer-sample-regression-automobile-price-basic.md",
- "redirect_url": "/azure/machine-learning/samples-designer",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-designer-sample-regression-automobile-price-compare-algorithms.md",
- "redirect_url": "/azure/machine-learning/samples-designer",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-designer-sample-text-classification.md",
- "redirect_url": "/azure/machine-learning/samples-designer",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-ui-sample-classification-predict-churn.md",
- "redirect_url": "/azure/machine-learning/samples-designer",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-ui-sample-classification-predict-credit-risk-cost-sensitive.md",
- "redirect_url": "/azure/machine-learning/samples-designer",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-ui-sample-classification-predict-flight-delay.md",
- "redirect_url": "/azure/machine-learning/samples-designer",
+ "source_path_from_root": "/articles/event-grid/cli-samples.md",
+ "redirect_url": "/azure/event-grid/scripts/event-grid-cli-subscribe-custom-topic",
"redirect_document_id": true
},
{
- "source_path_from_root": "/articles/machine-learning/service/how-to-ui-sample-regression-predict-automobile-price-basic.md",
- "redirect_url": "/azure/machine-learning/samples-designer",
+ "source_path_from_root": "/articles/event-grid/scripts/event-grid-cli-azure-subscription.md",
+ "redirect_url": "/azure/event-grid/scripts/event-grid-cli-subscribe-custom-topic",
"redirect_document_id": false
},
{
- "source_path_from_root": "/articles/machine-learning/service/how-to-ui-sample-regression-predict-automobile-price-compare-algorithms.md",
- "redirect_url": "/azure/machine-learning/samples-designer",
+ "source_path_from_root": "/articles/event-grid/scripts/event-grid-cli-create-custom-topic.md",
+ "redirect_url": "/azure/event-grid/scripts/event-grid-cli-subscribe-custom-topic",
"redirect_document_id": false
},
{
- "source_path_from_root": "/articles/machine-learning/service/how-to-ui-sample-text-classification.md",
- "redirect_url": "/azure/machine-learning/samples-designer",
+ "source_path_from_root": "/articles/event-grid/scripts/event-grid-cli-resource-group-filter.md",
+ "redirect_url": "/azure/event-grid/scripts/event-grid-cli-subscribe-custom-topic",
"redirect_document_id": false
},
{
- "source_path_from_root": "/articles/machine-learning/service/samples-notebooks.md",
- "redirect_url": "/azure/machine-learning/samples-notebooks",
- "redirect_document_id": true
+ "source_path_from_root": "/articles/event-grid/scripts/event-grid-cli-blob.md",
+ "redirect_url": "/azure/event-grid/scripts/event-grid-cli-subscribe-custom-topic",
+ "redirect_document_id": false
},
{
- "source_path_from_root": "/articles/machine-learning/concept-managed-endpoints.md",
- "redirect_url": "/azure/machine-learning/concept-endpoints",
+ "source_path_from_root": "/articles/event-grid/scripts/event-grid-cli-resource-group.md",
+ "redirect_url": "/azure/event-grid/scripts/event-grid-cli-subscribe-custom-topic",
"redirect_document_id": false
},
+
{
"source_path_from_root": "/articles/notebooks/use-machine-learning-services-jupyter-notebooks.md",
"redirect_url": "/azure/machine-learning/samples-notebooks",
"redirect_document_id": false
},
- {
- "source_path_from_root": "/articles/machine-learning/team-data-science-process/project-execution.md",
- "redirect_url": "/azure/architecture/data-science-process/agile-development",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-apps-anomaly-detection-api.md",
- "redirect_url": "/azure/architecture/data-science-process/apps-anomaly-detection-api",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-automated-data-pipeline-cheat-sheet.md",
- "redirect_url": "/azure/architecture/data-science-process/automated-data-pipeline-cheat-sheet",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/cortana-analytics-architecture-predictive-maintenance.md",
- "redirect_url": "/azure/architecture/data-science-process/cortana-analytics-architecture-predictive-maintenance",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/cortana-analytics-playbook-predictive-maintenance.md",
- "redirect_url": "/azure/architecture/data-science-process/cortana-analytics-playbook-predictive-maintenance",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/cortana-analytics-playbook-vehicle-telemetry.md",
- "redirect_url": "/azure/architecture/data-science-process/cortana-analytics-playbook-vehicle-telemetry",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/cortana-analytics-playbook-vehicle-telemetry-deep-dive.md",
- "redirect_url": "/azure/architecture/data-science-process/cortana-analytics-playbook-vehicle-telemetry-deep-dive",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/cortana-analytics-playbook-vehicle-telemetry-powerbi.md",
- "redirect_url": "/azure/architecture/data-science-process/cortana-analytics-playbook-vehicle-telemetry-powerbi",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/cortana-analytics-technical-guide-predictive-maintenance.md",
- "redirect_url": "/azure/architecture/data-science-process/cortana-analytics-technical-guide-predictive-maintenance",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-create-features.md",
- "redirect_url": "/azure/architecture/data-science-process/create-features",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-create-features-hive.md",
- "redirect_url": "/azure/architecture/data-science-process/create-features-hive",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-create-features-sql-server.md",
- "redirect_url": "/azure/architecture/data-science-process/create-features-sql-server",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-process-data-blob.md",
- "redirect_url": "/azure/architecture/data-science-process/data-blob",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-process-data-lake-walkthrough.md",
- "redirect_url": "/azure/architecture/data-science-process/data-lake-walkthrough",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-environment-setup.md",
- "redirect_url": "/azure/architecture/data-science-process/environment-setup",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-explore-data.md",
- "redirect_url": "/azure/architecture/data-science-process/explore-data",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-create-features-blob.md",
- "redirect_url": "/azure/architecture/data-science-process/explore-data-blob",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-explore-data-blob.md",
- "redirect_url": "/azure/architecture/data-science-process/explore-data-blob",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/team-data-science-process/create-features-blob.md",
- "redirect_url": "/azure/architecture/data-science-process/explore-data-blob",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-explore-data-hive-tables.md",
- "redirect_url": "/azure/architecture/data-science-process/explore-data-hive-tables",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-explore-data-sql-server.md",
- "redirect_url": "/azure/architecture/data-science-process/explore-data-sql-server",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-process-hive-criteo-walkthrough.md",
- "redirect_url": "/azure/architecture/data-science-process/hive-criteo-walkthrough",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-process-hive-walkthrough.md",
- "redirect_url": "/azure/architecture/data-science-process/hive-walkthrough",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-ingest-data.md",
- "redirect_url": "/azure/architecture/data-science-process/ingest-data",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/data-science-process-lifecycle.md",
- "redirect_url": "/azure/architecture/data-science-process/lifecycle",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-move-azure-blob.md",
- "redirect_url": "/azure/architecture/data-science-process/move-azure-blob",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-move-data-to-azure-blob-using-azcopy.md",
- "redirect_url": "/azure/architecture/data-science-process/move-data-to-azure-blob-using-azcopy",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-move-data-to-azure-blob-using-azure-storage-explorer.md",
- "redirect_url": "/azure/architecture/data-science-process/move-data-to-azure-blob-using-azure-storage-explorer",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-move-data-to-azure-blob-using-python.md",
- "redirect_url": "/azure/architecture/data-science-process/move-data-to-azure-blob-using-python",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-move-data-to-azure-blob-using-ssis.md",
- "redirect_url": "/azure/architecture/data-science-process/move-data-to-azure-blob-using-ssis",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-move-hive-tables.md",
- "redirect_url": "/azure/architecture/data-science-process/move-hive-tables",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-move-sql-azure.md",
- "redirect_url": "/azure/architecture/data-science-process/move-sql-azure",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-move-sql-azure-adf.md",
- "redirect_url": "/azure/architecture/data-science-process/move-sql-azure-adf",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-move-sql-server-virtual-machine.md",
- "redirect_url": "/azure/architecture/data-science-process/move-sql-server-virtual-machine",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/data-science-process-overview.md",
- "redirect_url": "/azure/architecture/data-science-process/overview",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-parallel-load-sql-partitioned-tables.md",
- "redirect_url": "/azure/architecture/data-science-process/parallel-load-sql-partitioned-tables",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-plan-sample-scenarios.md",
- "redirect_url": "/azure/architecture/data-science-process/plan-sample-scenarios",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-plan-your-environment.md",
- "redirect_url": "/azure/architecture/data-science-process/plan-your-environment",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/team-data-science-process/cortana-analytics-architecture-predictive-maintenance.md",
- "redirect_url": "/azure/architecture/data-science-process/predictive-maintenance-architecture",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/team-data-science-process/cortana-analytics-playbook-predictive-maintenance.md",
- "redirect_url": "/azure/architecture/data-science-process/predictive-maintenance-playbook",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/team-data-science-process/cortana-analytics-technical-guide-predictive-maintenance.md",
- "redirect_url": "/azure/architecture/data-science-process/predictive-maintenance-technical-guide",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-prepare-data.md",
- "redirect_url": "/azure/architecture/data-science-process/prepare-data",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-python-data-access.md",
- "redirect_url": "/azure/architecture/data-science-process/python-data-access",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-sample-data.md",
- "redirect_url": "/azure/architecture/data-science-process/sample-data",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-sample-data-blob.md",
- "redirect_url": "/azure/architecture/data-science-process/sample-data-blob",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-sample-data-hive.md",
- "redirect_url": "/azure/architecture/data-science-process/sample-data-hive",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-sample-data-sql-server.md",
- "redirect_url": "/azure/architecture/data-science-process/sample-data-sql-server",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-process-scala-walkthrough.md",
- "redirect_url": "/azure/architecture/data-science-process/scala-walkthrough",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-select-features.md",
- "redirect_url": "/azure/architecture/data-science-process/select-features",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-spark-advanced-data-exploration-modeling.md",
- "redirect_url": "/azure/architecture/data-science-process/spark-advanced-data-exploration-modeling",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-spark-data-exploration-modeling.md",
- "redirect_url": "/azure/architecture/data-science-process/spark-data-exploration-modeling",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-spark-model-consumption.md",
- "redirect_url": "/azure/architecture/data-science-process/spark-model-consumption",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-spark-overview.md",
- "redirect_url": "/azure/architecture/data-science-process/spark-overview",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-process-sqldw-walkthrough.md",
- "redirect_url": "/azure/architecture/data-science-process/sqldw-walkthrough",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-process-sql-server-virtual-machine.md",
- "redirect_url": "/azure/architecture/data-science-process/sql-server-virtual-machine",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-process-sql-walkthrough.md",
- "redirect_url": "/azure/architecture/data-science-process/sql-walkthrough",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/data-science-process-walkthroughs.md",
- "redirect_url": "/azure/architecture/data-science-process/walkthroughs",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/team-data-science-process/isic-image-classification.md",
- "redirect_url": "/azure/architecture/data-science-process/walkthroughs",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/team-data-science-process/predict-twitter-sentiment.md",
- "redirect_url": "/azure/architecture/data-science-process/walkthroughs",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/team-data-science-process/predict-twitter-sentiment-amltextpackage.md",
- "redirect_url": "/azure/architecture/data-science-process/walkthroughs",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/team-data-science-process/walkthroughs-aml-with-tdsp.md",
- "redirect_url": "/azure/architecture/data-science-process/walkthroughs",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/data-science-process-walkthroughs-azure-data-lake.md",
- "redirect_url": "/azure/architecture/data-science-process/walkthroughs-azure-data-lake",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/data-science-process-walkthroughs-hdinsight-hadoop.md",
- "redirect_url": "/azure/architecture/data-science-process/walkthroughs-hdinsight-hadoop",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/data-science-process-walkthroughs-spark.md",
- "redirect_url": "/azure/architecture/data-science-process/walkthroughs-spark",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/data-science-process-walkthroughs-sql-data-warehouse.md",
- "redirect_url": "/azure/architecture/data-science-process/walkthroughs-sql-data-warehouse",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/data-science-process-walkthroughs-sql-server.md",
- "redirect_url": "/azure/architecture/data-science-process/walkthroughs-sql-server",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/quickstart-get-started.md",
- "redirect_url": "/azure/machine-learning/tutorial-1st-experiment-sdk-setup",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/quickstart-run-cloud-notebook.md",
- "redirect_url": "/azure/machine-learning/tutorial-1st-experiment-sdk-setup",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/tutorial-1st-experiment-sdk-setup.md",
- "redirect_url": "/azure/machine-learning/tutorial-1st-experiment-sdk-setup",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/tutorial-1st-experiment-sdk-train.md",
- "redirect_url": "/azure/machine-learning/tutorial-1st-experiment-sdk-train",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/tutorial-1st-r-experiment.md",
- "redirect_url": "https://github.com/Azure/azureml-sdk-for-r",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/tutorial-1st-r-experiment.md",
- "redirect_url": "https://github.com/Azure/azureml-sdk-for-r",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/tutorial-auto-train-models.md",
- "redirect_url": "/azure/machine-learning/tutorial-auto-train-models",
- "redirect_document_id": true
- },
-
- {
- "source_path_from_root": "/articles/machine-learning/service/tutorial-data-prep.md",
- "redirect_url": "/azure/machine-learning/tutorial-auto-train-models",
- "redirect_document_id": false
- },
+
{
"source_path_from_root": "/articles/open-datasets/tutorial-opendatasets-automl.md",
"redirect_url": "/azure/machine-learning/tutorial-auto-train-models",
"redirect_document_id": false
},
- {
- "source_path_from_root": "/articles/machine-learning/service/tutorial-deploy-models-with-aml.md",
- "redirect_url": "/azure/machine-learning/tutorial-deploy-models-with-aml",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/tutorial-designer-automobile-price-deploy.md",
- "redirect_url": "/azure/machine-learning/tutorial-designer-automobile-price-deploy",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/ui-tutorial-automobile-price-deploy.md",
- "redirect_url": "/azure/machine-learning/tutorial-designer-automobile-price-deploy",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/tutorial-designer-automobile-price-train-score.md",
- "redirect_url": "/azure/machine-learning/tutorial-designer-automobile-price-train-score",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/ui-tutorial-automobile-price-train-score.md",
- "redirect_url": "/azure/machine-learning/tutorial-designer-automobile-price-train-score",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/tutorial-first-experiment-automated-ml.md",
- "redirect_url": "/azure/machine-learning/tutorial-first-experiment-automated-ml",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-label-images.md",
- "redirect_url": "/azure/machine-learning/how-to-label-data",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-use-parallel-run-step.md",
- "redirect_url": "/azure/machine-learning/tutorial-pipeline-batch-scoring-classification",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/reference-azure-machine-learning-cli.md",
- "redirect_url": "/azure/machine-learning/v1/reference-azure-machine-learning-cli",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/reference-pipeline-yaml.md",
- "redirect_url": "/azure/machine-learning/v1/reference-pipeline-yaml",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-deploy-azure-container-instance.md",
- "redirect_url": "/azure/machine-learning/v1/how-to-deploy-azure-container-instance",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-deploy-profile-model.md",
- "redirect_url": "/azure/machine-learning/v1/how-to-deploy-profile-model",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-deploy-azure-kubernetes-service.md",
- "redirect_url": "/azure/machine-learning/v1/how-to-deploy-azure-kubernetes-service",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-deploy-mlflow-models.md",
- "redirect_url": "/azure/machine-learning/v1/how-to-deploy-mlflow-models",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-use-mlflow.md",
- "redirect_url": "/azure/machine-learning/v1/how-to-use-mlflow",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/tutorial-pipeline-batch-scoring-classification.md",
- "redirect_url": "/azure/machine-learning/tutorial-pipeline-batch-scoring-classification",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-vscode-tools.md",
- "redirect_url": "/azure/machine-learning/tutorial-setup-vscode-extension",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-vscode-train-deploy.md",
- "redirect_url": "/azure/machine-learning/tutorial-setup-vscode-extension",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/tutorial-train-deploy-model-cli.md",
- "redirect_url": "/azure/machine-learning/how-to-train-cli",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/tutorial-train-deploy-model-cli.md",
- "redirect_url": "/azure/machine-learning/how-to-train-cli",
- "redirect_document_id": "false"
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/tutorial-train-models-with-aml.md",
- "redirect_url": "/azure/machine-learning/tutorial-train-models-with-aml",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/tutorial-pipeline-batch-scoring-classification.md",
- "redirect_url": "/azure/machine-learning/tutorial-pipeline-python-sdk",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/how-to-attach-compute-targets.md",
- "redirect_url": "/azure/machine-learning/v1/how-to-attach-compute-targets",
- " redirect_document_id": true
- },
+
{
"source_path_from_root": "/articles/cognitive-services/QnAMaker/reference-precise-answering.md",
"redirect_url": "/azure/cognitive-services/language/custom-question-answering/concepts/precise-answering",
@@ -21984,6 +19780,16 @@
"redirect_url": "/azure/scheduler/migrate-from-scheduler-to-logic-apps",
"redirect_document_id": ""
},
+ {
+ "source_path_from_root": "/articles/search/cognitive-search-quickstart-ocr.md",
+ "redirect_url": "/azure/search/cognitive-search-quickstart-blob",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/search/knowledge-store-view-storage-explorer.md",
+ "redirect_url": "/azure/search/knowledge-store-create-portal#view-kstore",
+ "redirect_document_id": false
+ },
{
"source_path_from_root": "/articles/search/cognitive-search-resources-documentation.md",
"redirect_url": "/azure/search/cognitive-search-concept-intro",
@@ -25149,11 +22955,7 @@
"redirect_url": "/azure/storage/blobs/storage-properties-metadata",
"redirect_document_id": true
},
- {
- "source_path_from_root": "/articles/machine-learning/team-data-science-process/move-data-to-azure-blob-using-python.md",
- "redirect_url": "/azure/storage/blobs/storage-python-how-to-use-blob-storage",
- "redirect_document_id": false
- },
+
{
"source_path_from_root": "/articles/storage/storage-python-how-to-use-blob-storage.md",
"redirect_url": "/azure/storage/blobs/storage-python-how-to-use-blob-storage",
@@ -25924,11 +23726,7 @@
"redirect_url": "/azure/storage/common/storage-use-azcopy-linux",
"redirect_document_id": true
},
- {
- "source_path_from_root": "/articles/machine-learning/team-data-science-process/move-data-to-azure-blob-using-azcopy.md",
- "redirect_url": "/azure/storage/common/storage-use-azcopy-v10",
- "redirect_document_id": false
- },
+
{
"source_path_from_root": "/articles/storage/common/storage-use-azcopy.md",
"redirect_url": "/azure/storage/common/storage-use-azcopy-v10",
@@ -27389,6 +25187,11 @@
"redirect_url": "/azure/web-application-firewall/afds/afds-overview",
"redirect_document_id": false
},
+ {
+ "source_path_from_root": "/articles/web-application-firewall/waf-cdn-create-portal.md",
+ "redirect_url": "/azure/web-application-firewall/cdn/cdn-overview",
+ "redirect_document_id": false
+ },
{
"source_path_from_root": "/articles/frontdoor/waf-faq.md",
"redirect_url": "/azure/web-application-firewall/afds/waf-faq",
@@ -31599,26 +29402,7 @@
"redirect_url": "/previous-versions/azure/virtual-network/virtual-networks-using-network-configuration-file",
"redirect_document_id": false
},
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-explore-prepare-data.md",
- "redirect_url": "/python/api/azureml-core/azureml.core.dataset.dataset",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-manage-dataset-definitions.md",
- "redirect_url": "/python/api/azureml-core/azureml.core.dataset",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-create-dataset-snapshots.md",
- "redirect_url": "/python/api/azureml-core/azureml.data.dataset_snapshot.datasetsnapshot",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/service/how-to-data-prep.md",
- "redirect_url": "/python/api/overview/azure/dataprep/intro?view=azure-dataprep-py",
- "redirect_document_id": false
- },
+
{
"source_path_from_root": "/articles/python-how-to-install.md",
"redirect_url": "/python/azure/python-sdk-azure-install",
@@ -32264,11 +30048,7 @@
"redirect_url": "create-manage-projects",
"redirect_document_id": false
},
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-data-science-the-cortana-analytics-process.md",
- "redirect_url": "data-science-process-overview",
- "redirect_document_id": false
- },
+
{
"source_path_from_root": "/articles/migrate/how-to-tag-v-center.md",
"redirect_url": "how-to-create-a-group",
@@ -32409,26 +30189,7 @@
"redirect_url": "https://azure.microsoft.com/global-infrastructure/services/?products=active-directory-ds",
"redirect_document_id": false
},
- {
- "source_path_from_root": "/articles/machine-learning/cortana-intelligence-appsource-evaluation-tool.md",
- "redirect_url": "https://azure.microsoft.com/overview/ai-platform/",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/cortana-intelligence-appsource-publishing-guide.md",
- "redirect_url": "https://azure.microsoft.com/overview/ai-platform/",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/team-data-science-process/cortana-intelligence-appsource-evaluation-tool.md",
- "redirect_url": "https://azure.microsoft.com/overview/ai-platform/",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/team-data-science-process/cortana-intelligence-appsource-publishing-guide.md",
- "redirect_url": "https://azure.microsoft.com/overview/ai-platform/",
- "redirect_document_id": false
- },
+
{
"source_path_from_root": "/articles/virtual-machines/linux/containers.md",
"redirect_url": "https://azure.microsoft.com/overview/containers/",
@@ -32499,16 +30260,7 @@
"redirect_url": "https://azure.microsoft.com/resources/whitepapers/search/?term=security&type=WhitePaperResource",
"redirect_document_id": false
},
- {
- "source_path_from_root": "/articles/machine-learning/studio/datamarket-deprecation.md",
- "redirect_url": "https://azure.microsoft.com/services/cognitive-services/",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/whats-new.md",
- "redirect_url": "https://azure.microsoft.com/updates/?product=machine-learning-studio",
- "redirect_document_id": false
- },
+
{
"source_path_from_root": "/articles/security/fundamentals/channel-nine.md",
"redirect_url": "/teamblog/channel9joinedmicrosoftlearn/",
@@ -32619,86 +30371,7 @@
"redirect_url": "/azure/active-directory/fundamentals/support-help-options",
"redirect_document_id": false
},
- {
- "source_path_from_root": "/articles/machine-learning/team-data-science-process/cortana-analytics-playbook-vehicle-telemetry.md",
- "redirect_url": "https://gallery.azure.ai/browse?s=vehicle%20telemetry%20analytics",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/team-data-science-process/cortana-analytics-playbook-vehicle-telemetry-deep-dive.md",
- "redirect_url": "https://gallery.azure.ai/browse?s=vehicle%20telemetry%20analytics",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/team-data-science-process/cortana-analytics-playbook-vehicle-telemetry-powerbi.md",
- "redirect_url": "https://gallery.azure.ai/browse?s=vehicle%20telemetry%20analytics",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-marketplace-faq.md",
- "redirect_url": "https://gallery.cortanaintelligence.com/",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-r-csharp-arima.md",
- "redirect_url": "https://gallery.cortanaintelligence.com/",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-r-csharp-binary-classifier.md",
- "redirect_url": "https://gallery.cortanaintelligence.com/",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-r-csharp-binomial-distribution.md",
- "redirect_url": "https://gallery.cortanaintelligence.com/",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-r-csharp-cluster-model.md",
- "redirect_url": "https://gallery.cortanaintelligence.com/",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-r-csharp-difference-in-two-proportions.md",
- "redirect_url": "https://gallery.cortanaintelligence.com/",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-r-csharp-forecasting-exponential-smoothing.md",
- "redirect_url": "https://gallery.cortanaintelligence.com/",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-r-csharp-lexicon-based-sentiment-analysis.md",
- "redirect_url": "https://gallery.cortanaintelligence.com/",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-r-csharp-multivariate-linear-regression.md",
- "redirect_url": "https://gallery.cortanaintelligence.com/",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-r-csharp-normal-distribution.md",
- "redirect_url": "https://gallery.cortanaintelligence.com/",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-r-csharp-retail-demand-forecasting.md",
- "redirect_url": "https://gallery.cortanaintelligence.com/",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-r-csharp-survival-analysis.md",
- "redirect_url": "https://gallery.cortanaintelligence.com/",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-r-csharp-web-service-examples.md",
- "redirect_url": "https://gallery.cortanaintelligence.com/",
- "redirect_document_id": false
- },
+
{
"source_path_from_root": "/articles/container-registry/container-registry-headers.md",
"redirect_url": "https://github.com/Azure/acr/blob/master/docs/http-headers.md",
@@ -33604,16 +31277,7 @@
"redirect_url": "https://portal.azure.com/#create/WordPress.WordPress",
"redirect_document_id": false
},
- {
- "source_path_from_root": "/articles/machine-learning/service/support-for-aml-services.md",
- "redirect_url": "https://social.msdn.microsoft.com/Forums/home?forum=AzureMachineLearningService",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/studio/live-chat.md",
- "redirect_url": "https://social.msdn.microsoft.com/Forums/home?forum=MachineLearning",
- "redirect_document_id": false
- },
+
{
"source_path_from_root": "/articles/billing-troubleshoot-azure-sign-up-issues.md",
"redirect_url": "https://support.microsoft.com/help/4042959",
@@ -34004,56 +31668,7 @@
"redirect_url": "hyper-v-vmm-test-failover",
"redirect_document_id": false
},
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-apps-anomaly-detection.md",
- "redirect_url": "machine-learning-apps-anomaly-detection-api",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-connect-to-azure-machine-learning-web-service.md",
- "redirect_url": "machine-learning-consume-web-services",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-recommendation-api-documentation.md",
- "redirect_url": "machine-learning-datamarket-deprecation",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-recommendation-api-faq.md",
- "redirect_url": "machine-learning-datamarket-deprecation",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-recommendation-api-javascript-integration.md",
- "redirect_url": "machine-learning-datamarket-deprecation",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-recommendation-api-quick-start-guide.md",
- "redirect_url": "machine-learning-datamarket-deprecation",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-recommendation-api-sample-application.md",
- "redirect_url": "machine-learning-datamarket-deprecation",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-feature-selection-and-engineering.md",
- "redirect_url": "machine-learning-data-science-create-features",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-publish-web-service-to-azure-marketplace.md",
- "redirect_url": "machine-learning-gallery-experiments",
- "redirect_document_id": false
- },
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-webservice-deploy-a-web-service.md",
- "redirect_url": "machine-learning-publish-a-machine-learning-web-service",
- "redirect_document_id": false
- },
+
{
"source_path_from_root": "/articles/migrate/concepts-collector.md",
"redirect_url": "migrate-appliance",
@@ -34249,11 +31864,7 @@
"redirect_url": "tutorial-assess-vmware-azure-vm",
"redirect_document_id": false
},
- {
- "source_path_from_root": "/articles/machine-learning/service/ui-quickstart-run-experiment.md",
- "redirect_url": "tutorial-designer-automobile-price-train-score",
- "redirect_document_id": false
- },
+
{
"source_path_from_root": "/articles/migrate/tutorial-prepare-hyper-v.md",
"redirect_url": "tutorial-discover-hyper-v",
@@ -35364,11 +32975,7 @@
"redirect_url": "/azure/cognitive-services/cognitive-services-container-support",
"redirect_document_id": false
},
- {
- "source_path_from_root": "/articles/machine-learning/machine-learning-apps-text-analytics.md",
- "redirect_url": "/azure/cognitive-services/cognitive-services-text-analytics-quick-start",
- "redirect_document_id": false
- },
+
{
"source_path_from_root": "/articles/cognitive-services/Computer-vision/QuickStarts/curl-disk.md",
"redirect_url": "/azure/cognitive-services/computer-vision",
@@ -35499,6 +33106,21 @@
"redirect_url": "/azure/cognitive-services/Computer-vision/overview-image-analysis",
"redirect_document_id": false
},
+ {
+ "source_path_from_root": "/articles/cognitive-services/Computer-vision/Vision-API-How-to-Topics/HowToCallVisionAPI.md",
+ "redirect_url": "/azure/cognitive-services/Computer-vision/how-to/call-analyze-image",
+ "redirect_document_id": true
+ },
+ {
+ "source_path_from_root": "/articles/cognitive-services/Computer-vision/Vision-API-How-to-Topics/HowtoAnalyzeVideo_Vision.md",
+ "redirect_url": "/azure/cognitive-services/Computer-vision/how-to/analyze-video",
+ "redirect_document_id": true
+ },
+ {
+ "source_path_from_root": "/articles/cognitive-services/Computer-vision/Vision-API-How-to-Topics/call-read-api.md",
+ "redirect_url": "/azure/cognitive-services/Computer-vision/how-to/call-read-api",
+ "redirect_document_id": true
+ },
{
"source_path_from_root": "/articles/cognitive-services/Content-Moderator/Review-Tool-User-Guide/Upload-Images.md",
"redirect_url": "/azure/cognitive-services/content-moderator",
@@ -37226,7 +34848,12 @@
},
{
"source_path_from_root": "/articles/cognitive-services/Speech-Service/how-to-customize-speech-models.md",
- "redirect_url": "/azure/cognitive-services/speech-service/how-to-custom-speech-choose-model",
+ "redirect_url": "/azure/cognitive-services/speech-service/how-to-custom-speech-create-project",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/cognitive-services/Speech-Service/how-to-custom-speech-choose-model.md",
+ "redirect_url": "/azure/cognitive-services/speech-service/how-to-custom-speech-create-project",
"redirect_document_id": false
},
{
@@ -37264,6 +34891,11 @@
"redirect_url": "/azure/cognitive-services/speech-service/how-to-develop-custom-commands-application",
"redirect_document_id": false
},
+ {
+ "source_path_from_root": "/articles/cognitive-services/Speech-Service/how-to-custom-commands-integrate-remote-skills.md",
+ "redirect_url": "/azure/cognitive-services/speech-service/custom-commands",
+ "redirect_document_id": false
+ },
{
"source_path_from_root": "/articles/cognitive-services/Speech/API-Reference-REST/BingVoiceOutput.md",
"redirect_url": "/azure/cognitive-services/speech-service/how-to-migrate-from-bing-speech",
@@ -37959,6 +35591,11 @@
"redirect_url": "/azure/cognitive-services/Speech-Service/custom-speech-overview",
"redirect_document_id": false
},
+ {
+ "source_path_from_root": "/articles/cognitive-services/Speech-Service/how-to-specify-source-language.md",
+ "redirect_url": "/azure/cognitive-services/Speech-Service/how-to-recognize-speech",
+ "redirect_document_id": false
+ },
{
"source_path_from_root": "/articles/cognitive-services/entitylinking/GettingStarted.md",
"redirect_url": "/azure/cognitive-services/text-analytics",
@@ -39889,6 +37526,111 @@
"redirect_url": "/azure/cognitive-services/form-recognizer/encrypt-data-at-rest",
"redirect_document_id": false
},
+ {
+ "source_path_from_root": "/articles/cognitive-services/Face/Overview.md",
+ "redirect_url": "/azure/cognitive-services/computer-vision/overview-identity",
+ "redirect_document_id": true
+ },
+ {
+ "source_path_from_root": "/articles/cognitive-services/Face/ReleaseNotes.md",
+ "redirect_url": "/azure/cognitive-services/computer-vision/whats-new",
+ "redirect_document_id": true
+ },
+ {
+ "source_path_from_root": "/articles/cognitive-services/Face/build-enrollment-app.md",
+ "redirect_url": "/azure/cognitive-services/computer-vision/Tutorials/build-enrollment-app",
+ "redirect_document_id": true
+ },
+ {
+ "source_path_from_root": "/articles/cognitive-services/Face/encrypt-data-at-rest.md",
+ "redirect_url": "/azure/cognitive-services/computer-vision/identity-encrypt-data-at-rest",
+ "redirect_document_id": true
+ },
+ {
+ "source_path_from_root": "/articles/cognitive-services/Face/enrollment-overview.md",
+ "redirect_url": "/azure/cognitive-services/computer-vision/enrollment-overview",
+ "redirect_document_id": true
+ },
+ {
+ "source_path_from_root": "/articles/cognitive-services/Face/index.md",
+ "redirect_url": "/azure/cognitive-services/computer-vision/index-identity",
+ "redirect_document_id": true
+ },
+ {
+ "source_path_from_root": "/articles/cognitive-services/Face/APIReference.md",
+ "redirect_url": "/azure/cognitive-services/computer-vision/identity-api-reference",
+ "redirect_document_id": true
+ },
+ {
+ "source_path_from_root": "/articles/cognitive-services/Face/Face-API-How-to-Topics/HowtoAnalyzeVideo_face.md",
+ "redirect_url": "/azure/cognitive-services/computer-vision/how-to/identity-analyze-video",
+ "redirect_document_id": true
+ },
+ {
+ "source_path_from_root": "/articles/cognitive-services/Face/Face-API-How-to-Topics/HowtoDetectFacesinImage.md",
+ "redirect_url": "/azure/cognitive-services/computer-vision/how-to/identity-detect-faces",
+ "redirect_document_id": true
+ },
+ {
+ "source_path_from_root": "/articles/cognitive-services/Face/Face-API-How-to-Topics/find-similar faces.md",
+ "redirect_url": "/azure/cognitive-services/computer-vision/how-to/find-similar-faces",
+ "redirect_document_id": true
+ },
+ {
+ "source_path_from_root": "/articles/cognitive-services/Face/Face-API-How-to-Topics/how-to-add-faces.md",
+ "redirect_url": "/azure/cognitive-services/computer-vision/how-to/add-faces",
+ "redirect_document_id": true
+ },
+ {
+ "source_path_from_root": "/articles/cognitive-services/Face/Face-API-How-to-Topics/how-to-migrate-face-data.md",
+ "redirect_url": "/azure/cognitive-services/computer-vision/how-to/migrate-face-data",
+ "redirect_document_id": true
+ },
+ {
+ "source_path_from_root": "/articles/cognitive-services/Face/Face-API-How-to-Topics/how-to-mitigate-latency.md",
+ "redirect_url": "/azure/cognitive-services/computer-vision/how-to/mitigate-latency",
+ "redirect_document_id": true
+ },
+ {
+ "source_path_from_root": "/articles/cognitive-services/Face/Face-API-How-to-Topics/how-to-use-headpose.md",
+ "redirect_url": "/azure/cognitive-services/computer-vision/how-to/use-headpose",
+ "redirect_document_id": true
+ },
+ {
+ "source_path_from_root": "/articles/cognitive-services/Face/Face-API-How-to-Topics/how-to-use-large-scale.md",
+ "redirect_url": "/azure/cognitive-services/computer-vision/how-to/use-large-scale",
+ "redirect_document_id": true
+ },
+ {
+ "source_path_from_root": "/articles/cognitive-services/Face/Face-API-How-to-Topics/specity-detection-model.md",
+ "redirect_url": "/azure/cognitive-services/computer-vision/how-to/specify-detection-model",
+ "redirect_document_id": true
+ },
+ {
+ "source_path_from_root": "/articles/cognitive-services/Face/Face-API-How-to-Topics/specify-recognition-model.md",
+ "redirect_url": "/azure/cognitive-services/computer-vision/how-to/specify-recognition-model",
+ "redirect_document_id": true
+ },
+ {
+ "source_path_from_root": "/articles/cognitive-services/Face/Face-API-How-to-Topics/use-persondirectory.md",
+ "redirect_url": "/azure/cognitive-services/computer-vision/how-to/use-persondirectory",
+ "redirect_document_id": true
+ },
+ {
+ "source_path_from_root": "/articles/cognitive-services/Face/QuickStarts/client-libraries.md",
+ "redirect_url": "/azure/cognitive-services/computer-vision/quickstarts-sdk/identity-client-library",
+ "redirect_document_id": true
+ },
+ {
+ "source_path_from_root": "/articles/cognitive-services/Face/concepts/face-detection.md",
+ "redirect_url": "/azure/cognitive-services/computer-vision/concept-face-detection",
+ "redirect_document_id": true
+ },
+ {
+ "source_path_from_root": "/articles/cognitive-services/Face/concepts/face-recognition.md",
+ "redirect_url": "/azure/cognitive-services/computer-vision/concept-face-recognition",
+ "redirect_document_id": true
+ },
{
"source_path_from_root": "/articles/azure-monitor/learn/tutorial-response.md",
"redirect_url": "/azure/azure-monitor/alerts/tutorial-response",
@@ -41189,11 +38931,7 @@
"redirect_url": "/azure/cognitive-services/form-recognizer/label-tool",
"redirect_document_id": false
},
- {
- "source_path_from_root": "/articles/machine-learning/tutorial-setup-vscode-extension.md",
- "redirect_url": "/azure/machine-learning/how-to-setup-vs-code",
- "redirect_document_id": false
- },
+
{
"source_path_from_root": "/articles/communication-services/concepts/ui-framework/ui-sdk-features.md",
"redirect_url": "/azure/communication-services/concepts/ui-library/ui-library-use-cases",
@@ -41294,381 +39032,13 @@
"redirect_url": "/azure/dms/tutorial-mysql-azure-mysql-offline-portal",
"redirect_document_id": false
},
- {
- "source_path": "articles/machine-learning/team-data-science-process/context/ml-context.yml",
- "redirect_url": "/azure/architecture/data-science-process/context/ml-context",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/agile-development.md",
- "redirect_url": "/azure/architecture/data-science-process/agile-development",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/apps-anomaly-detection-api.md",
- "redirect_url": "/azure/architecture/data-science-process/apps-anomaly-detection-api",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/automated-data-pipeline-cheat-sheet.md",
- "redirect_url": "/azure/architecture/data-science-process/automated-data-pipeline-cheat-sheet",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/ci-cd-flask.md",
- "redirect_url": "/azure/architecture/data-science-process/ci-cd-flask",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/code-test.md",
- "redirect_url": "/azure/architecture/data-science-process/code-test",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/collaborative-coding-with-git.md",
- "redirect_url": "/azure/architecture/data-science-process/collaborative-coding-with-git",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/create-features-hive.md",
- "redirect_url": "/azure/architecture/data-science-process/create-features-hive",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/create-features-sql-server.md",
- "redirect_url": "/azure/architecture/data-science-process/create-features-sql-server",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/create-features.md",
- "redirect_url": "/azure/architecture/data-science-process/create-features",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/data-blob.md",
- "redirect_url": "/azure/architecture/data-science-process/data-blob",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/data-lake-walkthrough.md",
- "redirect_url": "/azure/architecture/data-science-process/data-lake-walkthrough",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/deploy-models-in-production.md",
- "redirect_url": "/azure/architecture/data-science-process/deploy-models-in-production",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/environment-setup.md",
- "redirect_url": "/azure/architecture/data-science-process/environment-setup",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/execute-data-science-tasks.md",
- "redirect_url": "/azure/architecture/data-science-process/execute-data-science-tasks",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/explore-data-blob.md",
- "redirect_url": "/azure/architecture/data-science-process/explore-data-blob",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/explore-data-hive-tables.md",
- "redirect_url": "/azure/architecture/data-science-process/explore-data-hive-tables",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/explore-data-sql-server.md",
- "redirect_url": "/azure/architecture/data-science-process/explore-data-sql-server",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/explore-data.md",
- "redirect_url": "/azure/architecture/data-science-process/explore-data",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/group-manager-tasks.md",
- "redirect_url": "/azure/architecture/data-science-process/group-manager-tasks",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/hive-criteo-walkthrough.md",
- "redirect_url": "/azure/architecture/data-science-process/hive-criteo-walkthrough",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/hive-walkthrough.md",
- "redirect_url": "/azure/architecture/data-science-process/hive-walkthrough",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/ingest-data.md",
- "redirect_url": "/azure/architecture/data-science-process/ingest-data",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/lifecycle-acceptance.md",
- "redirect_url": "/azure/architecture/data-science-process/lifecycle-acceptance",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/lifecycle-business-understanding.md",
- "redirect_url": "/azure/architecture/data-science-process/lifecycle-business-understanding",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/lifecycle-data.md",
- "redirect_url": "/azure/architecture/data-science-process/lifecycle-data",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/lifecycle-deployment.md",
- "redirect_url": "/azure/architecture/data-science-process/lifecycle-deployment",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/lifecycle-modeling.md",
- "redirect_url": "/azure/architecture/data-science-process/lifecycle-modeling",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/lifecycle.md",
- "redirect_url": "/azure/architecture/data-science-process/lifecycle",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/move-azure-blob.md",
- "redirect_url": "/azure/architecture/data-science-process/move-azure-blob",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/move-data-to-azure-blob-using-azure-storage-explorer.md",
- "redirect_url": "/azure/architecture/data-science-process/move-data-to-azure-blob-using-azure-storage-explorer",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/move-data-to-azure-blob-using-ssis.md",
- "redirect_url": "/azure/architecture/data-science-process/move-data-to-azure-blob-using-ssis",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/move-hive-tables.md",
- "redirect_url": "/azure/architecture/data-science-process/move-hive-tables",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/move-sql-azure-adf.md",
- "redirect_url": "/azure/architecture/data-science-process/move-sql-azure-adf",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/move-sql-azure.md",
- "redirect_url": "/azure/architecture/data-science-process/move-sql-azure",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/move-sql-server-virtual-machine.md",
- "redirect_url": "/azure/architecture/data-science-process/move-sql-server-virtual-machine",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/overview.md",
- "redirect_url": "/azure/architecture/data-science-process/overview",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/parallel-load-sql-partitioned-tables.md",
- "redirect_url": "/azure/architecture/data-science-process/parallel-load-sql-partitioned-tables",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/plan-sample-scenarios.md",
- "redirect_url": "/azure/architecture/data-science-process/plan-sample-scenarios",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/plan-your-environment.md",
- "redirect_url": "/azure/architecture/data-science-process/plan-your-environment",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/platforms-and-tools.md",
- "redirect_url": "/azure/architecture/data-science-process/platforms-and-tools",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/predictive-maintenance-architecture.md",
- "redirect_url": "/azure/architecture/data-science-process/predictive-maintenance-architecture",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/predictive-maintenance-playbook.md",
- "redirect_url": "/azure/architecture/data-science-process/predictive-maintenance-playbook",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/predictive-maintenance-technical-guide.md",
- "redirect_url": "/azure/architecture/data-science-process/predictive-maintenance-technical-guide",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/prepare-data.md",
- "redirect_url": "/azure/architecture/data-science-process/prepare-data",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/project-ic-tasks.md",
- "redirect_url": "/azure/architecture/data-science-process/project-ic-tasks",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/project-lead-tasks.md",
- "redirect_url": "/azure/architecture/data-science-process/project-lead-tasks",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/python-data-access.md",
- "redirect_url": "/azure/architecture/data-science-process/python-data-access",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/roles-tasks.md",
- "redirect_url": "/azure/architecture/data-science-process/roles-tasks",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/sample-data-blob.md",
- "redirect_url": "/azure/architecture/data-science-process/sample-data-blob",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/sample-data-hive.md",
- "redirect_url": "/azure/architecture/data-science-process/sample-data-hive",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/sample-data-sql-server.md",
- "redirect_url": "/azure/architecture/data-science-process/sample-data-sql-server",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/sample-data.md",
- "redirect_url": "/azure/architecture/data-science-process/sample-data",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/scala-walkthrough.md",
- "redirect_url": "/azure/architecture/data-science-process/scala-walkthrough",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/select-features.md",
- "redirect_url": "/azure/architecture/data-science-process/select-features",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/spark-advanced-data-exploration-modeling.md",
- "redirect_url": "/azure/architecture/data-science-process/spark-advanced-data-exploration-modeling",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/spark-data-exploration-modeling.md",
- "redirect_url": "/azure/architecture/data-science-process/spark-data-exploration-modeling",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/spark-model-consumption.md",
- "redirect_url": "/azure/architecture/data-science-process/spark-model-consumption",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/spark-overview.md",
- "redirect_url": "/azure/architecture/data-science-process/spark-overview",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/sql-server-virtual-machine.md",
- "redirect_url": "/azure/architecture/data-science-process/sql-server-virtual-machine",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/sql-walkthrough.md",
- "redirect_url": "/azure/architecture/data-science-process/sql-walkthrough",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/sqldw-walkthrough.md",
- "redirect_url": "/azure/architecture/data-science-process/sqldw-walkthrough",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/team-data-science-process-for-data-scientists.md",
- "redirect_url": "/azure/architecture/data-science-process/team-data-science-process-for-data-scientists",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/team-data-science-process-for-devops.md",
- "redirect_url": "/azure/architecture/data-science-process/team-data-science-process-for-devops",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/team-data-science-process-project-templates.md",
- "redirect_url": "/azure/architecture/data-science-process/team-data-science-process-project-templates",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/team-lead-tasks.md",
- "redirect_url": "/azure/architecture/data-science-process/team-lead-tasks",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/track-progress.md",
- "redirect_url": "/azure/architecture/data-science-process/track-progress",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/walkthroughs-azure-data-lake.md",
- "redirect_url": "/azure/architecture/data-science-process/walkthroughs-azure-data-lake",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/walkthroughs-hdinsight-hadoop.md",
- "redirect_url": "/azure/architecture/data-science-process/walkthroughs-hdinsight-hadoop",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/walkthroughs-spark.md",
- "redirect_url": "/azure/architecture/data-science-process/walkthroughs-spark",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/walkthroughs-sql-data-warehouse.md",
- "redirect_url": "/azure/architecture/data-science-process/walkthroughs-sql-data-warehouse",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/walkthroughs-sql-server.md",
- "redirect_url": "/azure/architecture/data-science-process/walkthroughs-sql-server",
- "redirect_document_id": false
- },
- {
- "source_path": "articles/machine-learning/team-data-science-process/walkthroughs.md",
- "redirect_url": "/azure/architecture/data-science-process/walkthroughs",
- "redirect_document_id": false
- },
+
{
"source_path": "articles/load-balancer/load-balancer-monitor-log.md",
"redirect_url": "/azure/load-balancer/monitor-load-balancer",
"redirect_document_id": false
},
- {
- "source_path": "articles/machine-learning/team-data-science-process/index.yml",
- "redirect_url": "/azure/architecture/data-science-process/overview",
- "redirect_document_id": false
- },
+
{
"source_path": "articles/sentinel/tutorial-investigate-cases.md",
"redirect_url": "/azure/sentinel/investigate-cases",
@@ -41774,411 +39144,7 @@
"redirect_url": "/azure/virtual-network/create-public-ip-prefix-portal",
"redirect_document_id": true
},
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/add-columns.md",
- "redirect_url": "/azure/machine-learning/component-reference/add-columns",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/add-rows.md",
- "redirect_url": "/azure/machine-learning/component-reference/add-rows",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/apply-image-transformation.md",
- "redirect_url": "/azure/machine-learning/component-reference/apply-image-transformation",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/apply-math-operation.md",
- "redirect_url": "/azure/machine-learning/component-reference/apply-math-operation",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/apply-sql-transformation.md",
- "redirect_url": "/azure/machine-learning/component-reference/apply-sql-transformation",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/apply-transformation.md",
- "redirect_url": "/azure/machine-learning/component-reference/apply-transformation",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/assign-data-to-clusters.md",
- "redirect_url": "/azure/machine-learning/component-reference/assign-data-to-clusters",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/boosted-decision-tree-regression.md",
- "redirect_url": "/azure/machine-learning/component-reference/boosted-decision-tree-regression",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/clean-missing-data.md",
- "redirect_url": "/azure/machine-learning/component-reference/clean-missing-data",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/clip-values.md",
- "redirect_url": "/azure/machine-learning/component-reference/clip-values",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/convert-to-csv.md",
- "redirect_url": "/azure/machine-learning/component-reference/convert-to-csv",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/convert-to-dataset.md",
- "redirect_url": "/azure/machine-learning/component-reference/convert-to-dataset",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/convert-to-image-directory.md",
- "redirect_url": "/azure/machine-learning/component-reference/convert-to-image-directory",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/convert-to-indicator-values.md",
- "redirect_url": "/azure/machine-learning/component-reference/convert-to-indicator-values",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/convert-word-to-vector.md",
- "redirect_url": "/azure/machine-learning/component-reference/convert-word-to-vector",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/create-python-model.md",
- "redirect_url": "/azure/machine-learning/component-reference/create-python-model",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/cross-validate-model.md",
- "redirect_url": "/azure/machine-learning/component-reference/cross-validate-model",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/decision-forest-regression.md",
- "redirect_url": "/azure/machine-learning/component-reference/decision-forest-regression",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/densenet.md",
- "redirect_url": "/azure/machine-learning/component-reference/densenet",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/designer-error-codes.md",
- "redirect_url": "/azure/machine-learning/component-reference/designer-error-codes",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/edit-metadata.md",
- "redirect_url": "/azure/machine-learning/component-reference/edit-metadata",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/enter-data-manually.md",
- "redirect_url": "/azure/machine-learning/component-reference/enter-data-manually",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/evaluate-model.md",
- "redirect_url": "/azure/machine-learning/component-reference/evaluate-model",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/evaluate-recommender.md",
- "redirect_url": "/azure/machine-learning/component-reference/evaluate-recommender",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/execute-python-script.md",
- "redirect_url": "/azure/machine-learning/component-reference/execute-python-script",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/execute-r-script.md",
- "redirect_url": "/azure/machine-learning/component-reference/execute-r-script",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/export-data.md",
- "redirect_url": "/azure/machine-learning/component-reference/export-data",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/extract-n-gram-features-from-text.md",
- "redirect_url": "/azure/machine-learning/component-reference/extract-n-gram-features-from-text",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/fast-forest-quantile-regression.md",
- "redirect_url": "/azure/machine-learning/component-reference/fast-forest-quantile-regression",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/feature-hashing.md",
- "redirect_url": "/azure/machine-learning/component-reference/feature-hashing",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/filter-based-feature-selection.md",
- "redirect_url": "/azure/machine-learning/component-reference/filter-based-feature-selection",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/graph-search-syntax.md",
- "redirect_url": "/azure/machine-learning/component-reference/graph-search-syntax",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/group-data-into-bins.md",
- "redirect_url": "/azure/machine-learning/component-reference/group-data-into-bins",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/import-data.md",
- "redirect_url": "/azure/machine-learning/component-reference/import-data",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/init-image-transformation.md",
- "redirect_url": "/azure/machine-learning/component-reference/init-image-transformation",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/join-data.md",
- "redirect_url": "/azure/machine-learning/component-reference/join-data",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/k-means-clustering.md",
- "redirect_url": "/azure/machine-learning/component-reference/k-means-clustering",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/latent-dirichlet-allocation.md",
- "redirect_url": "/azure/machine-learning/component-reference/latent-dirichlet-allocation",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/linear-regression.md",
- "redirect_url": "/azure/machine-learning/component-reference/linear-regression",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/module-reference.md",
- "redirect_url": "/azure/machine-learning/component-reference/component-reference",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/multiclass-boosted-decision-tree.md",
- "redirect_url": "/azure/machine-learning/component-reference/multiclass-boosted-decision-tree",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/multiclass-decision-forest.md",
- "redirect_url": "/azure/machine-learning/component-reference/multiclass-decision-forest",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/multiclass-logistic-regression.md",
- "redirect_url": "/azure/machine-learning/component-reference/multiclass-logistic-regression",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/multiclass-neural-network.md",
- "redirect_url": "/azure/machine-learning/component-reference/multiclass-neural-network",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/neural-network-regression.md",
- "redirect_url": "/azure/machine-learning/component-reference/neural-network-regression",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/normalize-data.md",
- "redirect_url": "/azure/machine-learning/component-reference/normalize-data",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/one-vs-all-multiclass.md",
- "redirect_url": "/azure/machine-learning/component-reference/one-vs-all-multiclass",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/one-vs-one-multiclass.md",
- "redirect_url": "/azure/machine-learning/component-reference/one-vs-one-multiclass",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/partition-and-sample.md",
- "redirect_url": "/azure/machine-learning/component-reference/partition-and-sample",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/pca-based-anomaly-detection.md",
- "redirect_url": "/azure/machine-learning/component-reference/pca-based-anomaly-detection",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/permutation-feature-importance.md",
- "redirect_url": "/azure/machine-learning/component-reference/permutation-feature-importance",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/poisson-regression.md",
- "redirect_url": "/azure/machine-learning/component-reference/poisson-regression",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/preprocess-text.md",
- "redirect_url": "/azure/machine-learning/component-reference/preprocess-text",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/remove-duplicate-rows.md",
- "redirect_url": "/azure/machine-learning/component-reference/remove-duplicate-rows",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/resnet.md",
- "redirect_url": "/azure/machine-learning/component-reference/resnet",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/score-image-model.md",
- "redirect_url": "/azure/machine-learning/component-reference/score-image-model",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/score-model.md",
- "redirect_url": "/azure/machine-learning/component-reference/score-model",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/score-svd-recommender.md",
- "redirect_url": "/azure/machine-learning/component-reference/score-svd-recommender",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/score-vowpal-wabbit-model.md",
- "redirect_url": "/azure/machine-learning/component-reference/score-vowpal-wabbit-model",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/score-wide-and-deep-recommender.md",
- "redirect_url": "/azure/machine-learning/component-reference/score-wide-and-deep-recommender",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/select-columns-in-dataset.md",
- "redirect_url": "/azure/machine-learning/component-reference/select-columns-in-dataset",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/select-columns-transform.md",
- "redirect_url": "/azure/machine-learning/component-reference/select-columns-transform",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/smote.md",
- "redirect_url": "/azure/machine-learning/component-reference/smote",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/split-data.md",
- "redirect_url": "/azure/machine-learning/component-reference/split-data",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/split-image-directory.md",
- "redirect_url": "/azure/machine-learning/component-reference/split-image-directory",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/summarize-data.md",
- "redirect_url": "/azure/machine-learning/component-reference/summarize-data",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/train-anomaly-detection-model.md",
- "redirect_url": "/azure/machine-learning/component-reference/train-anomaly-detection-model",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/train-clustering-model.md",
- "redirect_url": "/azure/machine-learning/component-reference/train-clustering-model",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/train-model.md",
- "redirect_url": "/azure/machine-learning/component-reference/train-model",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/train-pytorch-model.md",
- "redirect_url": "/azure/machine-learning/component-reference/train-pytorch-model",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/train-svd-recommender.md",
- "redirect_url": "/azure/machine-learning/component-reference/train-svd-recommender",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/train-vowpal-wabbit-model.md",
- "redirect_url": "/azure/machine-learning/component-reference/train-vowpal-wabbit-model",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/train-wide-and-deep-recommender.md",
- "redirect_url": "/azure/machine-learning/component-reference/train-wide-and-deep-recommender",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/tune-model-hyperparameters.md",
- "redirect_url": "/azure/machine-learning/component-reference/tune-model-hyperparameters",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/two-class-averaged-perceptron.md",
- "redirect_url": "/azure/machine-learning/component-reference/two-class-averaged-perceptron",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/two-class-boosted-decision-tree.md",
- "redirect_url": "/azure/machine-learning/component-reference/two-class-boosted-decision-tree",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/two-class-decision-forest.md",
- "redirect_url": "/azure/machine-learning/component-reference/two-class-decision-forest",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/two-class-logistic-regression.md",
- "redirect_url": "/azure/machine-learning/component-reference/two-class-logistic-regression",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/two-class-neural-network.md",
- "redirect_url": "/azure/machine-learning/component-reference/two-class-neural-network",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/two-class-support-vector-machine.md",
- "redirect_url": "/azure/machine-learning/component-reference/two-class-support-vector-machine",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/algorithm-module-reference/web-service-input-output.md",
- "redirect_url": "/azure/machine-learning/component-reference/web-service-input-output",
- "redirect_document_id": true
- },
+
{
"source_path_from_root": "/articles/partner-twilio-cloud-services-dotnet-phone-call-web-role.md",
"redirect_url": "https://www.twilio.com/docs/usage/tutorials/serverless-webhooks-azure-functions-and-csharp",
@@ -42239,21 +39205,7 @@
"redirect_url": "https://docs.sendgrid.com/for-developers/partners/microsoft-azure-2021#create-a-twilio-sendgrid-account",
"redirect_document_id": false
},
- {
- "source_path_from_root": "/articles/machine-learning/reference-online-endpoint-yaml.md",
- "redirect_url": "reference-yaml-endpoint-online",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/reference-yaml-job-component.md",
- "redirect_url": "reference-yaml-job-command",
- "redirect_document_id": true
- },
- {
- "source_path_from_root": "/articles/machine-learning/reference-yaml-dataset.md",
- "redirect_url": "reference-yaml-data",
- "redirect_document_id": true
- },
+
{
"source_path_from_root": "/articles/store-sendgrid-nodejs-how-to-send-email.md",
"redirect_url": "https://docs.sendgrid.com/for-developers/partners/microsoft-azure-2021#create-a-twilio-sendgrid-account",
@@ -42774,6 +39726,11 @@
"redirect_url": "/azure/aks/open-service-mesh-integrations",
"redirect_document_id": false
},
+ {
+ "source_path_from_root": "/articles/aks/spark-job.md",
+ "redirect_url": "/azure/aks/integrations#open-source-and-third-party-integrations",
+ "redirect_document_id": false
+ },
{
"source_path_from_root": "/articles/iot-dps/quick-create-device-symmetric-key-csharp.md",
"redirect_url": "/azure/iot-dps/quick-create-simulated-device-symm-key",
@@ -43049,11 +40006,7 @@
"redirect_url": "/learn/modules/translate-text-with-translator-service?toc=/azure/cognitive-services/translator/toc.json&bc=/azure/cognitive-services/translator/breadcrumb/toc.json",
"redirect_document_id": false
},
- {
- "source_path": "articles/machine-learning/classic/deploy-with-resource-manager-template.md",
- "redirect_url": "/previous-versions/azure/machine-learning/classic/deploy-with-resource-manager-template",
- "redirect_document_id": false
- },
+
{
"source_path_from_root": "/articles/governance/policy/how-to/guest-configuration-create-group-policy.md",
"redirect_url": "/azure/governance/policy/how-to/guest-configuration-create",
@@ -43136,92 +40089,92 @@
},
{
"source_path_from_root": "/articles/cognitive-services/video-indexer/connect-to-azure.md",
- "redirect_url": "/azure/azure-video-analyzer/video-analyzer-for-media-docs/connect-to-azure",
+ "redirect_url": "/azure/azure-video-indexer/connect-to-azure",
"redirect_document_id": false
},
{
"source_path_from_root": "/articles/cognitive-services/video-indexer/manage-account-connected-to-azure.md",
- "redirect_url": "/azure/azure-video-analyzer/video-analyzer-for-media-docs/manage-account-connected-to-azure",
+ "redirect_url": "/azure/azure-video-indexer/manage-account-connected-to-azure",
"redirect_document_id": false
},
{
"source_path_from_root": "/articles/cognitive-services/video-indexer/migrate-from-v1-to-v2.md",
- "redirect_url": "/azure/azure-video-analyzer/video-analyzer-for-media-docs/",
+ "redirect_url": "/azure/azure-video-indexer/",
"redirect_document_id": false
},
{
"source_path_from_root": "/articles/cognitive-services/video-indexer/upload-index-videos.md",
- "redirect_url": "/azure/azure-video-analyzer/video-analyzer-for-media-docs/upload-index-videos",
+ "redirect_url": "/azure/azure-video-indexer/upload-index-videos",
"redirect_document_id": false
},
{
"source_path_from_root": "/articles/cognitive-services/video-indexer/video-indexer-concepts.md",
- "redirect_url": "/azure/azure-video-analyzer/video-analyzer-for-media-docs/video-indexer-overview",
+ "redirect_url": "/azure/azure-video-indexer/video-indexer-overview",
"redirect_document_id": false
},
{
"source_path_from_root": "/articles/cognitive-services/video-indexer/video-indexer-create-new.md",
- "redirect_url": "/azure/azure-video-analyzer/video-analyzer-for-media-docs/",
+ "redirect_url": "/azure/azure-video-indexer/",
"redirect_document_id": false
},
{
"source_path_from_root": "/articles/cognitive-services/video-indexer/video-indexer-embed-widgets.md",
- "redirect_url": "/azure/azure-video-analyzer/video-analyzer-for-media-docs/video-indexer-embed-widgets",
+ "redirect_url": "/azure/azure-video-indexer/video-indexer-embed-widgets",
"redirect_document_id": false
},
{
"source_path_from_root": "/articles/cognitive-services/video-indexer/video-indexer-get-started.md",
- "redirect_url": "/azure/azure-video-analyzer/video-analyzer-for-media-docs/video-indexer-get-started",
+ "redirect_url": "/azure/azure-video-indexer/video-indexer-get-started",
"redirect_document_id": false
},
{
"source_path_from_root": "/articles/cognitive-services/video-indexer/video-indexer-output-json-v2.md",
- "redirect_url": "/azure/azure-video-analyzer/video-analyzer-for-media-docs/video-indexer-output-json-v2",
+ "redirect_url": "/azure/azure-video-indexer/video-indexer-output-json-v2",
"redirect_document_id": false
},
{
"source_path_from_root": "/articles/cognitive-services/Video/GetStarted.md",
- "redirect_url": "/azure/azure-video-analyzer/video-analyzer-for-media-docs/video-indexer-overview",
+ "redirect_url": "/azure/azure-video-indexer/video-indexer-overview",
"redirect_document_id": false
},
{
"source_path_from_root": "/articles/cognitive-services/Video/Glossary.md",
- "redirect_url": "/azure/azure-video-analyzer/video-analyzer-for-media-docs/video-indexer-overview",
+ "redirect_url": "/azure/azure-video-indexer/video-indexer-overview",
"redirect_document_id": false
},
{
"source_path_from_root": "/articles/cognitive-services/Video/Home.md",
- "redirect_url": "/azure/azure-video-analyzer/video-analyzer-for-media-docs/video-indexer-overview",
+ "redirect_url": "/azure/azure-video-indexer/video-indexer-overview",
"redirect_document_id": false
},
{
"source_path_from_root": "/articles/cognitive-services/Video/How-To/HowtoAnalyzeVideo_Video.md",
- "redirect_url": "/azure/azure-video-analyzer/video-analyzer-for-media-docs/video-indexer-overview",
+ "redirect_url": "/azure/azure-video-indexer/video-indexer-overview",
"redirect_document_id": false
},
{
"source_path_from_root": "/articles/cognitive-services/Video/How-To/HowtoCallVideoAPIs.md",
- "redirect_url": "/azure/azure-video-analyzer/video-analyzer-for-media-docs/video-indexer-overview",
+ "redirect_url": "/azure/azure-video-indexer/video-indexer-overview",
"redirect_document_id": false
},
{
"source_path_from_root": "/articles/cognitive-services/video-indexer/video-indexer-overview.md",
- "redirect_url": "/azure/azure-video-analyzer/video-analyzer-for-media-docs/video-indexer-overview",
+ "redirect_url": "/azure/azure-video-indexer/video-indexer-overview",
"redirect_document_id": false
},
{
"source_path_from_root": "/articles/cognitive-services/video-indexer/video-indexer-search.md",
- "redirect_url": "/azure/azure-video-analyzer/video-analyzer-for-media-docs/video-indexer-search",
+ "redirect_url": "/azure/azure-video-indexer/video-indexer-search",
"redirect_document_id": false
},
{
"source_path_from_root": "/articles/cognitive-services/video-indexer/video-indexer-use-apis.md",
- "redirect_url": "/azure/azure-video-analyzer/video-analyzer-for-media-docs/video-indexer-use-apis",
+ "redirect_url": "/azure/azure-video-indexer/video-indexer-use-apis",
"redirect_document_id": false
},
{
"source_path_from_root": "/articles/cognitive-services/video-indexer/video-indexer-view-edit.md",
- "redirect_url": "/azure/azure-video-analyzer/video-analyzer-for-media-docs/video-indexer-view-edit",
+ "redirect_url": "/azure/azure-video-indexer/video-indexer-view-edit",
"redirect_document_id": false
},
{
@@ -43234,6 +40187,11 @@
"redirect_url": "/azure/cognitive-services/translator/custom-translator/key-terms",
"redirect_document_id": false
},
+ {
+ "source_path_from_root": "/articles/applied-ai-services/form-recognizer/generate-sas-tokens.md",
+ "redirect_url": "/azure/applied-ai-services/form-recognizer/create-sas-tokens",
+ "redirect_document_id": false
+ },
{
"source_path_from_root": "/articles/cognitive-services/language-service/text-summarization/how-to/call-api.md",
"redirect_url": "/azure/cognitive-services/language-service/summarization/how-to/document-summarization",
@@ -43253,6 +40211,26 @@
"source_path_from_root": "/articles/cognitive-services/language-service/text-summarization/quickstart.md",
"redirect_url": "/azure/cognitive-services/language-service/summarization/quickstart",
"redirect_document_id": true
+ },
+ {
+ "source_path_from_root": "/articles/virtual-network/nat-gateway/tutorial-create-nat-gateway-portal.md",
+ "redirect_url": "/azure/virtual-network/nat-gateway/quickstart-create-nat-gateway-portal",
+ "redirect_document_id": true
+ },
+ {
+ "source_path_from_root": "/articles/virtual-network/nat-gateway/tutorial-create-nat-gateway-powershell.md",
+ "redirect_url": "/azure/virtual-network/nat-gateway/quickstart-create-nat-gateway-powershell",
+ "redirect_document_id": true
+ },
+ {
+ "source_path_from_root": "/articles/virtual-network/nat-gateway/tutorial-create-nat-gateway-cli.md",
+ "redirect_url": "/azure/virtual-network/nat-gateway/quickstart-create-nat-gateway-cli",
+ "redirect_document_id": true
+ },
+ {
+ "source_path_from_root": "/articles/private-link/private-endpoint-static-ip-powershell.md",
+ "redirect_url": "/azure/private-link/create-private-endpoint-powershell",
+ "redirect_document_id": true
}
]
}
diff --git a/.whatsnew/.application-management.json b/.whatsnew/.application-management.json
index befe3203f7913..02cdda7720cf3 100644
--- a/.whatsnew/.application-management.json
+++ b/.whatsnew/.application-management.json
@@ -1,24 +1,24 @@
{
- "$schema": "https://whatsnewapi.azurewebsites.net/schema",
- "docSetProductName": "Azure Active Directory application management",
- "rootDirectory": "articles/active-directory/manage-apps/",
- "docLinkSettings": {
- "linkFormat": "relative",
- "relativeLinkPrefix": "/azure/active-directory/manage-apps"
- },
- "inclusionCriteria": {
- "excludePullRequestTitles": true,
- "minAdditionsToFile" : 10,
- "maxFilesChanged": 50,
- "labels": [
- "label:active-directory/svc",
- "label:app-mgmt/subsvc"
- ]
- },
- "areas": [
- {
- "name": ".",
- "heading": "Azure Active Directory application management"
- }
- ]
-}
+ "$schema": "https://whatsnewapi.azurewebsites.net/schema",
+ "docSetProductName": "Azure Active Directory application management",
+ "rootDirectory": "articles/active-directory/manage-apps/",
+ "docLinkSettings": {
+ "linkFormat": "relative",
+ "relativeLinkPrefix": "/azure/active-directory/manage-apps"
+ },
+ "inclusionCriteria": {
+ "excludePullRequestTitles": true,
+ "minAdditionsToFile" : 10,
+ "maxFilesChanged": 50,
+ "labels": [
+ "label:active-directory/svc",
+ "label:app-mgmt/subsvc"
+ ]
+ },
+ "areas": [
+ {
+ "name": ".",
+ "heading": "Azure Active Directory application management"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/articles/active-directory-b2c/azure-monitor.md b/articles/active-directory-b2c/azure-monitor.md
index f8e8a63b664ca..2b2158144b1e2 100644
--- a/articles/active-directory-b2c/azure-monitor.md
+++ b/articles/active-directory-b2c/azure-monitor.md
@@ -11,12 +11,12 @@ ms.workload: identity
ms.topic: how-to
ms.author: kengaderdus
ms.subservice: B2C
-ms.date: 02/23/2022
+ms.date: 06/03/2022
---
# Monitor Azure AD B2C with Azure Monitor
-Use Azure Monitor to route Azure Active Directory B2C (Azure AD B2C) sign-in and [auditing](view-audit-logs.md) logs to different monitoring solutions. You can retain the logs for long-term use or integrate with third-party security information and event management (SIEM) tools to gain insights into your environment.
+Use Azure Monitor to route Azure Active Directory B2C (Azure AD B2C) sign in and [auditing](view-audit-logs.md) logs to different monitoring solutions. You can retain the logs for long-term use or integrate with third-party security information and event management (SIEM) tools to gain insights into your environment.
You can route log events to:
@@ -26,10 +26,10 @@ You can route log events to:
![Azure Monitor](./media/azure-monitor/azure-monitor-flow.png)
+When you plan to transfer Azure AD B2C logs to different monitoring solutions, or repository, consider that Azure AD B2C logs contain personal data. When you process such data, ensure you use appropriate security measures on the personal data. It includes protection against unauthorized or unlawful processing, using appropriate technical or organizational measures.
+
In this article, you learn how to transfer the logs to an Azure Log Analytics workspace. Then you can create a dashboard or create alerts that are based on Azure AD B2C users' activities.
-> [!IMPORTANT]
-> When you plan to transfer Azure AD B2C logs to different monitoring solutions, or repository, consider the following. Azure AD B2C logs contain personal data. Such data should be processed in a manner that ensures appropriate security of the personal data, including protection against unauthorized or unlawful processing, using appropriate technical or organizational measures.
Watch this video to learn how to configure monitoring for Azure AD B2C using Azure Monitor.
@@ -37,7 +37,7 @@ Watch this video to learn how to configure monitoring for Azure AD B2C using Azu
## Deployment overview
-Azure AD B2C leverages [Azure Active Directory monitoring](../active-directory/reports-monitoring/overview-monitoring.md). Because an Azure AD B2C tenant, unlike Azure AD tenants, can't have a subscription associated with it, we need to take some additional steps to enable the integration between Azure AD B2C and Log Analytics, which is where we'll send the logs.
+Azure AD B2C uses [Azure Active Directory monitoring](../active-directory/reports-monitoring/overview-monitoring.md). Unlike Azure AD tenants, an Azure AD B2C tenant can't have a subscription associated with it. So, we need to take extra steps to enable the integration between Azure AD B2C and Log Analytics, which is where we'll send the logs.
To enable _Diagnostic settings_ in Azure Active Directory within your Azure AD B2C tenant, you use [Azure Lighthouse](../lighthouse/overview.md) to [delegate a resource](../lighthouse/concepts/architecture.md), which allows your Azure AD B2C (the **Service Provider**) to manage an Azure AD (the **Customer**) resource.
> [!TIP]
@@ -45,15 +45,21 @@ To enable _Diagnostic settings_ in Azure Active Directory within your Azure AD B
After you complete the steps in this article, you'll have created a new resource group (here called _azure-ad-b2c-monitor_) and have access to that same resource group that contains the [Log Analytics workspace](../azure-monitor/logs/quick-create-workspace.md) in your **Azure AD B2C** portal. You'll also be able to transfer the logs from Azure AD B2C to your Log Analytics workspace.
-During this deployment, you'll authorize a user or group in your Azure AD B2C directory to configure the Log Analytics workspace instance within the tenant that contains your Azure subscription. To create the authorization, you deploy an [Azure Resource Manager](../azure-resource-manager/index.yml) template to the subscription containing the Log Analytics workspace.
+During this deployment, you'll authorize a user or group in your Azure AD B2C directory to configure the Log Analytics workspace instance within the tenant that contains your Azure subscription. To create the authorization, you deploy an [Azure Resource Manager](../azure-resource-manager/index.yml) template to the subscription that contains the Log Analytics workspace.
The following diagram depicts the components you'll configure in your Azure AD and Azure AD B2C tenants.
![Resource group projection](./media/azure-monitor/resource-group-projection.png)
-During this deployment, you'll configure both your Azure AD B2C tenant and Azure AD tenant where the Log Analytics workspace will be hosted. The Azure AD B2C accounts used (such as your admin account) should be assigned the [Global Administrator](../active-directory/roles/permissions-reference.md#global-administrator) role on the Azure AD B2C tenant. The Azure AD account used to run the deployment must be assigned the [Owner](../role-based-access-control/built-in-roles.md#owner) role in the Azure AD subscription. It's also important to make sure you're signed in to the correct directory as you complete each step as described.
+During this deployment, you'll configure your Azure AD B2C tenant where logs are generated. You'll also configure Azure AD tenant where the Log Analytics workspace will be hosted. The Azure AD B2C accounts used (such as your admin account) should be assigned the [Global Administrator](../active-directory/roles/permissions-reference.md#global-administrator) role on the Azure AD B2C tenant. The Azure AD account you'll use to run the deployment must be assigned the [Owner](../role-based-access-control/built-in-roles.md#owner) role in the Azure AD subscription. It's also important to make sure you're signed in to the correct directory as you complete each step as described.
+
+In summary, you'll use Azure Lighthouse to allow a user or group in your Azure AD B2C tenant to manage a resource group in a subscription associated with a different tenant (the Azure AD tenant). After this authorization is completed, the subscription and log analytics workspace can be selected as a target in the Diagnostic settings in Azure AD B2C.
+
+## Pre-requisites
+
+- An Azure AD B2C account with [Global Administrator](../active-directory/roles/permissions-reference.md#global-administrator) role on the Azure AD B2C tenant.
-In summary, you will use Azure Lighthouse to allow a user or group in your Azure AD B2C tenant to manage a resource group in a subscription associated with a different tenant (the Azure AD tenant). After this authorization is completed, the subscription and log analytics workspace can be selected as a target in the Diagnostic settings in Azure AD B2C.
+- An Azure AD account with the [Owner](../role-based-access-control/built-in-roles.md#owner) role in the Azure AD subscription. See how to [Assign a user as an administrator of an Azure subscription](../role-based-access-control/role-assignments-portal-subscription-admin.md).
## 1. Create or choose resource group
@@ -101,7 +107,7 @@ To make management easier, we recommend using Azure AD user _groups_ for each ro
### 3.3 Create an Azure Resource Manager template
-To create the custom authorization and delegation in Azure Lighthouse, we use an Azure Resource Manager template that grants Azure AD B2C access to the Azure AD resource group you created earlier (for example, _azure-ad-b2c-monitor_). Deploy the template from the GitHub sample by using the **Deploy to Azure** button, which opens the Azure portal and lets you configure and deploy the template directly in the portal. For these steps, make sure you're signed in to your Azure AD tenant (not the Azure AD B2C tenant).
+To create the custom authorization and delegation in Azure Lighthouse, we use an Azure Resource Manager template. This template grants Azure AD B2C access to the Azure AD resource group, which you created earlier, for example, _azure-ad-b2c-monitor_. Deploy the template from the GitHub sample by using the **Deploy to Azure** button, which opens the Azure portal and lets you configure and deploy the template directly in the portal. For these steps, make sure you're signed in to your Azure AD tenant (not the Azure AD B2C tenant).
1. Sign in to the [Azure portal](https://portal.azure.com).
1. Make sure you're using the directory that contains your Azure AD tenant. Select the **Directories + subscriptions** icon in the portal toolbar.
@@ -116,7 +122,7 @@ To create the custom authorization and delegation in Azure Lighthouse, we use an
| --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Subscription | Select the directory that contains the Azure subscription where the _azure-ad-b2c-monitor_ resource group was created. |
| Region | Select the region where the resource will be deployed. |
- | Msp Offer Name | A name describing this definition. For example, _Azure AD B2C Monitoring_. This is the name that will be displayed in Azure Lighthouse. The **MSP Offer Name** must be unique in your Azure AD. To monitor multiple Azure AD B2C tenants, use different names. |
+ | Msp Offer Name | A name describing this definition. For example, _Azure AD B2C Monitoring_. It's the name that will be displayed in Azure Lighthouse. The **MSP Offer Name** must be unique in your Azure AD. To monitor multiple Azure AD B2C tenants, use different names. |
| Msp Offer Description | A brief description of your offer. For example, _Enables Azure Monitor in Azure AD B2C_. |
| Managed By Tenant Id | The **Tenant ID** of your Azure AD B2C tenant (also known as the directory ID). |
| Authorizations | Specify a JSON array of objects that include the Azure AD `principalId`, `principalIdDisplayName`, and Azure `roleDefinitionId`. The `principalId` is the **Object ID** of the B2C group or user that will have access to resources in this Azure subscription. For this walkthrough, specify the group's Object ID that you recorded earlier. For the `roleDefinitionId`, use the [built-in role](../role-based-access-control/built-in-roles.md) value for the _Contributor role_, `b24988ac-6180-42a0-ab88-20f7382dd24c`. |
@@ -143,8 +149,7 @@ After you've deployed the template and waited a few minutes for the resource pro
> [!NOTE]
> On the **Portal settings | Directories + subscriptions** page, ensure that your Azure AD B2C and Azure AD tenants are selected under **Current + delegated directories**.
-1. Sign out of the Azure portal if you're currently signed in (this allows your session credentials to be refreshed in the next step).
-1. Sign in to the [Azure portal](https://portal.azure.com) with your **Azure AD B2C** administrative account. This account must be a member of the security group you specified in the [Delegate resource management](#3-delegate-resource-management) step.
+1. Sign out of the [Azure portal](https://portal.azure.com) and sign back in with your **Azure AD B2C** administrative account. This account must be a member of the security group you specified in the [Delegate resource management](#3-delegate-resource-management) step. Signing out and singing back in allows your session credentials to be refreshed in the next step.
1. Select the **Directories + subscriptions** icon in the portal toolbar.
1. On the **Portal settings | Directories + subscriptions** page, in the **Directory name** list, find your Azure AD directory that contains the Azure subscription and the _azure-ad-b2c-monitor_ resource group you created, and then select **Switch**.
1. Verify that you've selected the correct directory and your Azure subscription is listed and selected in the **Default subscription filter**.
@@ -189,7 +194,7 @@ To configure monitoring settings for Azure AD B2C activity logs:
> [!NOTE]
> It can take up to 15 minutes after an event is emitted for it to [appear in a Log Analytics workspace](../azure-monitor/logs/data-ingestion-time.md). Also, learn more about [Active Directory reporting latencies](../active-directory/reports-monitoring/reference-reports-latencies.md), which can impact the staleness of data and play an important role in reporting.
-If you see the error message "To set up Diagnostic settings to use Azure Monitor for your Azure AD B2C directory, you need to set up delegated resource management," make sure you sign in with a user who is a member of the [security group](#32-select-a-security-group) and [select your subscription](#4-select-your-subscription).
+If you see the error message, _To set up Diagnostic settings to use Azure Monitor for your Azure AD B2C directory, you need to set up delegated resource management_, make sure you sign in with a user who is a member of the [security group](#32-select-a-security-group) and [select your subscription](#4-select-your-subscription).
## 6. Visualize your data
@@ -197,7 +202,7 @@ Now you can configure your Log Analytics workspace to visualize your data and co
### 6.1 Create a Query
-Log queries help you to fully leverage the value of the data collected in Azure Monitor Logs. A powerful query language allows you to join data from multiple tables, aggregate large sets of data, and perform complex operations with minimal code. Virtually any question can be answered and analysis performed as long as the supporting data has been collected, and you understand how to construct the right query. For more information, see [Get started with log queries in Azure Monitor](../azure-monitor/logs/get-started-queries.md).
+Log queries help you to fully use the value of the data collected in Azure Monitor Logs. A powerful query language allows you to join data from multiple tables, aggregate large sets of data, and perform complex operations with minimal code. Virtually any question can be answered and analysis performed as long as the supporting data has been collected, and you understand how to construct the right query. For more information, see [Get started with log queries in Azure Monitor](../azure-monitor/logs/get-started-queries.md).
1. From **Log Analytics workspace**, select **Logs**
1. In the query editor, paste the following [Kusto Query Language](/azure/data-explorer/kusto/query/) query. This query shows policy usage by operation over the past x days. The default duration is set to 90 days (90d). Notice that the query is focused only on the operation where a token/code is issued by policy.
@@ -274,9 +279,9 @@ The workbook will display reports in the form of a dashboard.
## Create alerts
-Alerts are created by alert rules in Azure Monitor and can automatically run saved queries or custom log searches at regular intervals. You can create alerts based on specific performance metrics or when certain events are created, absence of an event, or a number of events are created within a particular time window. For example, alerts can be used to notify you when average number of sign-in exceeds a certain threshold. For more information, see [Create alerts](../azure-monitor/alerts/alerts-log.md).
+Alerts are created by alert rules in Azure Monitor and can automatically run saved queries or custom log searches at regular intervals. You can create alerts based on specific performance metrics or when certain events occur. You can also create alerts on absence of an event, or a number of events are occur within a particular time window. For example, alerts can be used to notify you when average number of sign in exceeds a certain threshold. For more information, see [Create alerts](../azure-monitor/alerts/alerts-log.md).
-Use the following instructions to create a new Azure Alert, which will send an [email notification](../azure-monitor/alerts/action-groups.md#configure-notifications) whenever there is a 25% drop in the **Total Requests** compare to previous period. Alert will run every 5 minutes and look for the drop in the last hour compared to the hour before that. The alerts are created using Kusto query language.
+Use the following instructions to create a new Azure Alert, which will send an [email notification](../azure-monitor/alerts/action-groups.md#configure-notifications) whenever there's a 25% drop in the **Total Requests** compared to previous period. Alert will run every 5 minutes and look for the drop in the last hour compared to the hour before it. The alerts are created using Kusto query language.
1. From **Log Analytics workspace**, select **Logs**.
1. Create a new **Kusto query** by using the query below.
@@ -311,7 +316,7 @@ After the alert is created, go to **Log Analytics workspace** and select **Alert
Azure Monitor and Service Health alerts use action groups to notify users that an alert has been triggered. You can include sending a voice call, SMS, email; or triggering various types of automated actions. Follow the guidance [Create and manage action groups in the Azure portal](../azure-monitor/alerts/action-groups.md)
-Here is an example of an alert notification email.
+Here's an example of an alert notification email.
![Email notification](./media/azure-monitor/alert-email-notification.png)
diff --git a/articles/active-directory-b2c/configure-a-sample-node-web-app.md b/articles/active-directory-b2c/configure-a-sample-node-web-app.md
index 4d27914af7cf9..8fb2e1bcbe2f6 100644
--- a/articles/active-directory-b2c/configure-a-sample-node-web-app.md
+++ b/articles/active-directory-b2c/configure-a-sample-node-web-app.md
@@ -8,7 +8,7 @@ manager: CelesteDG
ms.service: active-directory
ms.workload: identity
ms.topic: how-to
-ms.date: 03/31/2022
+ms.date: 06/08/2022
ms.author: kengaderdus
ms.subservice: B2C
---
@@ -113,7 +113,7 @@ Open your web app in a code editor such as Visual Studio Code. Under the project
|Key |Value |
|---------|---------|
|`APP_CLIENT_ID`|The **Application (client) ID** for the web app you registered in [step 2.1](#step-2-register-a-web-application). |
-|`APP_CLIENT_SECRET`|The client secret for the web app you created in [step 2.2](#step-22-create-a-web-app-client-secret) |
+|`APP_CLIENT_SECRET`|The client secret value for the web app you created in [step 2.2](#step-22-create-a-web-app-client-secret) |
|`SIGN_UP_SIGN_IN_POLICY_AUTHORITY`|The **Sign in and sign up** user flow authority such as `https://.b2clogin.com/.onmicrosoft.com/`. Replace `` with the name of your tenant and `` with the name of your Sign in and Sign up user flow such as `B2C_1_susi`. Learn how to [Get your tenant name](tenant-management.md#get-your-tenant-name). |
|`RESET_PASSWORD_POLICY_AUTHORITY`| The **Reset password** user flow authority such as `https://.b2clogin.com/.onmicrosoft.com/`. Replace `` with the name of your tenant and `` with the name of your Reset password user flow such as `B2C_1_reset_password_node_app`.|
|`EDIT_PROFILE_POLICY_AUTHORITY`|The **Profile editing** user flow authority such as `https://.b2clogin.com/.onmicrosoft.com/`. Replace `` with the name of your tenant and `` with the name of your reset password user flow such as `B2C_1_edit_profile_node_app`. |
diff --git a/articles/active-directory-b2c/configure-authentication-in-sample-node-web-app-with-api.md b/articles/active-directory-b2c/configure-authentication-in-sample-node-web-app-with-api.md
index bd18d4f58771e..1a25ab0bcdc28 100644
--- a/articles/active-directory-b2c/configure-authentication-in-sample-node-web-app-with-api.md
+++ b/articles/active-directory-b2c/configure-authentication-in-sample-node-web-app-with-api.md
@@ -9,7 +9,7 @@ manager: CelesteDG
ms.service: active-directory
ms.workload: identity
ms.topic: how-to
-ms.date: 03/30/2022
+ms.date: 06/08/2022
ms.author: kengaderdus
ms.subservice: B2C
---
@@ -150,7 +150,7 @@ Open your web app in a code editor such as Visual Studio Code. Under the `call-p
|Key |Value |
|---------|---------|
|`APP_CLIENT_ID`|The **Application (client) ID** for the web app you registered in [step 2.3](#step-23-register-the-web-app). |
-|`APP_CLIENT_SECRET`|The client secret for the web app you created in [step 2.4](#step-24-create-a-client-secret) |
+|`APP_CLIENT_SECRET`|The client secret value for the web app you created in [step 2.4](#step-24-create-a-client-secret) |
|`SIGN_UP_SIGN_IN_POLICY_AUTHORITY`|The **Sign in and sign up** user flow authority for the user flow you created in [step 1](#step-1-configure-your-user-flow) such as `https://.b2clogin.com/.onmicrosoft.com/`. Replace `` with the name of your tenant and `` with the name of your Sign in and Sign up user flow such as `B2C_1_susi`. Learn how to [Get your tenant name](tenant-management.md#get-your-tenant-name). |
|`AUTHORITY_DOMAIN`| The Azure AD B2C authority domain such as `https://.b2clogin.com`. Replace `` with the name of your tenant.|
|`APP_REDIRECT_URI`| The application redirect URI where Azure AD B2C will return authentication responses (tokens). It matches the **Redirect URI** you set while registering your app in Azure portal. This URL need to be publicly accessible. Leave the value as is.|
diff --git a/articles/active-directory-b2c/configure-authentication-sample-python-web-app.md b/articles/active-directory-b2c/configure-authentication-sample-python-web-app.md
index 81b80e97f72ad..2ec9e76d8c1cc 100644
--- a/articles/active-directory-b2c/configure-authentication-sample-python-web-app.md
+++ b/articles/active-directory-b2c/configure-authentication-sample-python-web-app.md
@@ -7,7 +7,7 @@ manager: CelesteDG
ms.service: active-directory
ms.workload: identity
ms.topic: reference
-ms.date: 09/15/2021
+ms.date: 06/08/2022
ms.author: kengaderdus
ms.subservice: B2C
ms.custom: "b2c-support"
@@ -98,7 +98,7 @@ Open the *app_config.py* file. This file contains information about your Azure A
|---------|---------|
|`b2c_tenant`| The first part of your Azure AD B2C [tenant name](tenant-management.md#get-your-tenant-name) (for example, `contoso`).|
|`CLIENT_ID`| The web API application ID from [step 2.1](#step-21-register-the-app).|
-|`CLIENT_SECRET`| The client secret you created in [step 2.2](#step-22-create-a-web-app-client-secret). To help increase security, consider storing it instead in an environment variable, as recommended in the comments. |
+|`CLIENT_SECRET`| The client secret value you created in [step 2.2](#step-22-create-a-web-app-client-secret). To help increase security, consider storing it instead in an environment variable, as recommended in the comments. |
|`*_user_flow`|The user flows or custom policy you created in [step 1](#step-1-configure-your-user-flow).|
| | |
diff --git a/articles/active-directory-b2c/identity-provider-adfs.md b/articles/active-directory-b2c/identity-provider-adfs.md
index 85f7aea72adb8..9aabf5320e715 100644
--- a/articles/active-directory-b2c/identity-provider-adfs.md
+++ b/articles/active-directory-b2c/identity-provider-adfs.md
@@ -9,7 +9,7 @@ manager: CelesteDG
ms.service: active-directory
ms.workload: identity
ms.topic: how-to
-ms.date: 01/18/2022
+ms.date: 06/08/2022
ms.custom: project-no-code
ms.author: kengaderdus
ms.subservice: B2C
@@ -88,7 +88,7 @@ In this step, configure the claims AD FS application returns to Azure AD B2C.
1. For **Client ID**, enter the application ID that you previously recorded.
1. For the **Scope**, enter the `openid`.
-1. For **Response type**, select **id_token**, which makes the **Client secret** optional. Learn more about use of [Client ID and secret](identity-provider-generic-openid-connect.md#client-id-and-secret) when adding a generic OpenID Connect identity provider.
+1. For **Response type**, select **id_token**. So, the **Client secret** value isn't needed. Learn more about use of [Client ID and secret](identity-provider-generic-openid-connect.md#client-id-and-secret) when adding a generic OpenID Connect identity provider.
1. (Optional) For the **Domain hint**, enter `contoso.com`. For more information, see [Set up direct sign-in using Azure Active Directory B2C](direct-signin.md#redirect-sign-in-to-a-social-provider).
1. Under **Identity provider claims mapping**, select the following claims:
diff --git a/articles/active-directory-b2c/identity-provider-azure-ad-single-tenant.md b/articles/active-directory-b2c/identity-provider-azure-ad-single-tenant.md
index 8ddaa46868d3a..17e2f9f18f6e2 100644
--- a/articles/active-directory-b2c/identity-provider-azure-ad-single-tenant.md
+++ b/articles/active-directory-b2c/identity-provider-azure-ad-single-tenant.md
@@ -9,7 +9,7 @@ manager: CelesteDG
ms.service: active-directory
ms.workload: identity
ms.topic: how-to
-ms.date: 09/16/2021
+ms.date: 06/08/2022
ms.author: kengaderdus
ms.subservice: B2C
ms.custom: fasttrack-edit, project-no-code
@@ -100,7 +100,7 @@ If you want to get the `family_name` and `given_name` claims from Azure AD, you
For example, `https://login.microsoftonline.com/contoso.onmicrosoft.com/v2.0/.well-known/openid-configuration`. If you use a custom domain, replace `contoso.com` with your custom domain in `https://login.microsoftonline.com/contoso.com/v2.0/.well-known/openid-configuration`.
1. For **Client ID**, enter the application ID that you previously recorded.
-1. For **Client secret**, enter the client secret that you previously recorded.
+1. For **Client secret**, enter the client secret value that you previously recorded.
1. For **Scope**, enter `openid profile`.
1. Leave the default values for **Response type**, and **Response mode**.
1. (Optional) For the **Domain hint**, enter `contoso.com`. For more information, see [Set up direct sign-in using Azure Active Directory B2C](direct-signin.md#redirect-sign-in-to-a-social-provider).
@@ -145,7 +145,7 @@ You need to store the application key that you created in your Azure AD B2C tena
1. Select **Policy keys** and then select **Add**.
1. For **Options**, choose `Manual`.
1. Enter a **Name** for the policy key. For example, `ContosoAppSecret`. The prefix `B2C_1A_` is added automatically to the name of your key when it's created, so its reference in the XML in following section is to *B2C_1A_ContosoAppSecret*.
-1. In **Secret**, enter your client secret that you recorded earlier.
+1. In **Secret**, enter your client secret value that you recorded earlier.
1. For **Key usage**, select `Signature`.
1. Select **Create**.
diff --git a/articles/active-directory-b2c/media/partner-gallery/asignio-logo.png b/articles/active-directory-b2c/media/partner-gallery/asignio-logo.png
index 2e750c2d521ea..02b085c532dff 100644
Binary files a/articles/active-directory-b2c/media/partner-gallery/asignio-logo.png and b/articles/active-directory-b2c/media/partner-gallery/asignio-logo.png differ
diff --git a/articles/active-directory-b2c/media/partner-gallery/haventec-logo.png b/articles/active-directory-b2c/media/partner-gallery/haventec-logo.png
index 898fc82c2cee2..6440a8000287a 100644
Binary files a/articles/active-directory-b2c/media/partner-gallery/haventec-logo.png and b/articles/active-directory-b2c/media/partner-gallery/haventec-logo.png differ
diff --git a/articles/active-directory-b2c/partner-asignio.md b/articles/active-directory-b2c/partner-asignio.md
index fc58fe226996a..31f0beaf64231 100644
--- a/articles/active-directory-b2c/partner-asignio.md
+++ b/articles/active-directory-b2c/partner-asignio.md
@@ -114,7 +114,7 @@ Follow the steps mentioned in [this tutorial](tutorial-register-applications.md?
| Property | Value |
|:--------|:-------------|
|Name | Login with Asignio *(or a name of your choice)*
- |Metadata URL | https://authorization.asignio.com/.well-known/openid-configuration|
+ |Metadata URL | `https://authorization.asignio.com/.well-known/openid-configuration`|
| Client ID | enter the client ID that you previously generated in [step 1](#step-1-configure-an-application-with-asignio)|
|Client Secret | enter the Client secret that you previously generated in [step 1](#step-1-configure-an-application-with-asignio)|
| Scope | openid email profile |
diff --git a/articles/active-directory-b2c/partner-gallery.md b/articles/active-directory-b2c/partner-gallery.md
index 04f79ea04c78b..1332dbfb451c5 100644
--- a/articles/active-directory-b2c/partner-gallery.md
+++ b/articles/active-directory-b2c/partner-gallery.md
@@ -21,7 +21,7 @@ Our ISV partner network extends our solution capabilities to help you build seam
To be considered into this sample documentation, submit your application request in the [Microsoft Application Network portal](https://microsoft.sharepoint.com/teams/apponboarding/Apps/SitePages/Default.aspx). For any additional questions, send an email to [SaaSApplicationIntegrations@service.microsoft.com](mailto:SaaSApplicationIntegrations@service.microsoft.com).
>[!NOTE]
->The [Azure Active Directory B2C community site on GitHub](https://azure-ad-b2c.github.io/azureadb2ccommunity.io/) also provides sample custom policies from the community.
+>The [Azure Active Directory B2C community site on GitHub](https://github.com/azure-ad-b2c/partner-integrations) also provides sample custom policies from the community.
## Identity verification and proofing
diff --git a/articles/active-directory-b2c/partner-n8identity.md b/articles/active-directory-b2c/partner-n8identity.md
index dd97541591a5e..f11be929cf7e2 100644
--- a/articles/active-directory-b2c/partner-n8identity.md
+++ b/articles/active-directory-b2c/partner-n8identity.md
@@ -1,7 +1,7 @@
---
-title: Tutorial for configuring N8 Identity with Azure Active Directory B2C
+title: Configure TheAccessHub Admin Tool by using Azure Active Directory B2C
titleSuffix: Azure AD B2C
-description: Tutorial for configuring TheAccessHub Admin Tool with Azure Active Directory B2C to address customer accounts migration and Customer Service Requests (CSR) administration.
+description: In this tutorial, configure TheAccessHub Admin Tool by using Azure Active Directory B2C to address customer account migration and customer service request (CSR) administration.
services: active-directory-b2c
author: gargi-sinha
manager: CelesteDG
@@ -15,379 +15,391 @@ ms.author: gasinh
ms.subservice: B2C
---
-# Tutorial for configuring TheAccessHub Admin Tool with Azure Active Directory B2C
+# Configure TheAccessHub Admin Tool by using Azure Active Directory B2C
-In this sample tutorial, we provide guidance on how to integrate Azure Active Directory (AD) B2C with [TheAccessHub Admin Tool](https://n8id.com/products/theaccesshub-admintool/) from N8 Identity. This solution addresses customer accounts migration and Customer Service Requests (CSR) administration.
+In this tutorial, we provide guidance on how to integrate Azure Active Directory B2C (Azure AD B2C) with [TheAccessHub Admin Tool](https://n8id.com/products/theaccesshub-admintool/) from N8 Identity. This solution addresses customer account migration and customer service request (CSR) administration.
-This solution is suited for you, if you have one or more of the following needs:
+This solution is suited for you if you have one or more of the following needs:
-- You have an existing site and you want to migrate to Azure AD B2C. However, you're struggling with migration of your customer accounts including passwords
+- You have an existing site and you want to migrate to Azure AD B2C. However, you're struggling with migration of your customer accounts, including passwords.
-- You require a tool for your CSR to administer Azure AD B2C accounts.
+- You need a tool for your CSR to administer Azure AD B2C accounts.
- You have a requirement to use delegated administration for your CSRs.
- You want to synchronize and merge your data from many repositories into Azure AD B2C.
-## Pre-requisites
+## Prerequisites
To get started, you'll need:
- An Azure AD subscription. If you don't have a subscription, you can get a [free account](https://azure.microsoft.com/free/).
-- An [Azure AD B2C tenant](./tutorial-create-tenant.md). Tenant must be linked to your Azure subscription.
+- An [Azure AD B2C tenant](./tutorial-create-tenant.md). The tenant must be linked to your Azure subscription.
-- A TheAccessHub Admin Tool environment: Contact [N8 Identity](https://n8id.com/contact/) to provision a new environment.
+- A TheAccessHub Admin Tool environment. Contact [N8 Identity](https://n8id.com/contact/) to provision a new environment.
-- [Optional] Connection and credential information for any databases or Lightweight Directory Access Protocols (LDAPs) you want to migrate customer data from.
+- (Optional:) Connection and credential information for any databases or Lightweight Directory Access Protocols (LDAPs) that you want to migrate customer data from.
-- [Optional] Configured Azure AD B2C environment for using [custom policies](./tutorial-create-user-flows.md?pivots=b2c-custom-policy), if you wish to integrate TheAccessHub Admin Tool into your sign-up policy flow.
+- (Optional:) A configured Azure AD B2C environment for using [custom policies](./tutorial-create-user-flows.md?pivots=b2c-custom-policy), if you want to integrate TheAccessHub Admin Tool into your sign-up policy flow.
## Scenario description
-The TheAccessHub Admin Tool runs like any other application in Azure. It can run in either N8 Identity’s Azure subscription, or the customer’s subscription. The following architecture diagram shows the implementation.
+The TheAccessHub Admin Tool runs like any other application in Azure. It can run in either N8 Identity's Azure subscription or the customer's subscription. The following architecture diagram shows the implementation.
-![Image showing n8identity architecture diagram](./media/partner-n8identity/n8identity-architecture-diagram.png)
+![Diagram of the n8identity architecture.](./media/partner-n8identity/n8identity-architecture-diagram.png)
|Step | Description |
|:-----| :-----------|
-| 1. | User arrives at a login page. Users select sign-up to create a new account and enter information into the page. Azure AD B2C collects the user attributes.
-| 2. | Azure AD B2C calls the TheAccessHub Admin Tool and passes on the user attributes
+| 1. | Each user arrives at a login page. The user creates a new account and enters information on the page. Azure AD B2C collects the user attributes.
+| 2. | Azure AD B2C calls the TheAccessHub Admin Tool and passes on the user attributes.
| 3. | TheAccessHub Admin Tool checks your existing database for current user information.
-| 4. | The user record is synced from the database to TheAccessHub Admin Tool.
+| 4. | User records are synced from the database to TheAccessHub Admin Tool.
| 5. | TheAccessHub Admin Tool shares the data with the delegated CSR/helpdesk admin.
| 6. | TheAccessHub Admin Tool syncs the user records with Azure AD B2C.
-| 7. |Based on the success/failure response from the TheAccessHub Admin Tool, Azure AD B2C sends a customized welcome email to the user.
+| 7. |Based on the success/failure response from the TheAccessHub Admin Tool, Azure AD B2C sends a customized welcome email to users.
-## Create a Global Admin in your Azure AD B2C tenant
+## Create a Global Administrator in your Azure AD B2C tenant
-The TheAccessHub Admin Tool requires permissions to act on behalf of a Global Administrator to read user information and conduct changes in your Azure AD B2C tenant. Changes to your regular administrators won; t impact TheAccessHub Admin Tool’s ability to interact with the tenant.
+The TheAccessHub Admin Tool requires permissions to act on behalf of a Global Administrator to read user information and conduct changes in your Azure AD B2C tenant. Changes to your regular administrators won't affect TheAccessHub Admin Tool's ability to interact with the tenant.
-To create a Global Administrator, follow these steps:
+To create a Global Administrator:
-1. In the Azure portal, sign into your Azure AD B2C tenant as an administrator. Navigate to **Azure Active Directory** > **Users**
-2. Select **New User**
-3. Choose **Create User** to create a regular directory user and not a customer
-4. Complete the Identity information form
+1. In the Azure portal, sign in to your Azure AD B2C tenant as an administrator. Go to **Azure Active Directory** > **Users**.
+2. Select **New User**.
+3. Choose **Create User** to create a regular directory user and not a customer.
+4. Complete the identity information form:
- a. Enter the username such as ‘theaccesshub’
+ a. Enter the username, such as **theaccesshub**.
- b. Enter the name such as ‘TheAccessHub Service Account’
+ b. Enter the account name, such as **TheAccessHub Service Account**.
-5. Select **Show Password** and copy the initial password for later use
-6. Assign the Global Administrator role
+5. Select **Show Password** and copy the initial password for later use.
+6. Assign the Global Administrator role:
- a. Select the user’s current roles **User** to change it
+ a. For **User**, select the user's current role to change it.
- b. Check the record for Global Administrator
+ b. Select the **Global Administrator** record.
- c. **Select** > **Create**
+ c. Select **Create**.
## Connect TheAccessHub Admin Tool with your Azure AD B2C tenant
-TheAccessHub Admin Tool uses Microsoft’s Graph API to read and make changes to your directory. It acts as a Global Administrator in your tenant. Additional permission is needed by TheAccessHub Admin Tool, which you can grant from within the tool.
+TheAccessHub Admin Tool uses the Microsoft Graph API to read and make changes to your directory. It acts as a Global Administrator in your tenant. TheAccessHub Admin Tool needs additional permission, which you can grant from within the tool.
-To authorize TheAccessHub Admin Tool to access your directory, follow these steps:
+To authorize TheAccessHub Admin Tool to access your directory:
-1. Log into TheAccessHub Admin Tool using credentials provided to you by N8 Identity
+1. Log in to TheAccessHub Admin Tool by using the credentials that N8 Identity has provided.
-2. Navigate to **System Admin** > **Azure AD B2C Config**
+2. Go to **System Admin** > **Azure AD B2C Config**.
-3. Select **Authorize Connection**
+3. Select **Authorize Connection**.
-4. In the new window sign-in with your Global Administrator account. You may be asked to reset your password if you're signing in for the first time with the new service account.
+4. In the new window, sign in with your Global Administrator account. You might be asked to reset your password if you're signing in for the first time with the new service account.
5. Follow the prompts and select **Accept** to grant TheAccessHub Admin Tool the requested permissions.
-## Configure a new CSR user using your enterprise identity
+## Configure a new CSR user by using your enterprise identity
-Create a CSR/Helpdesk user who accesses TheAccessHub Admin Tool using their existing enterprise Azure Active Directory credentials.
+Create a CSR/Helpdesk user who accesses TheAccessHub Admin Tool by using their existing enterprise Azure Active Directory credentials.
-To configure CSR/Helpdesk user with Single Sign-on (SSO), the following steps are recommended:
+To configure a CSR/Helpdesk user with single sign-on (SSO), we recommend the following steps:
-1. Log into TheAccessHub Admin Tool using credentials provided by N8 Identity.
+1. Log in to TheAccessHub Admin Tool by using the credentials that N8 Identity has provided.
-2. Navigate to **Manager Tools** > **Manage Colleagues**
+2. Go to **Manager Tools** > **Manage Colleagues**.
-3. Select **Add Colleague**
+3. Select **Add Colleague**.
-4. Select **Colleague Type Azure Administrator**
+4. For **Colleague Type**, select **Azure Administrator**.
-5. Enter the colleague’s profile information
+5. Enter the colleague's profile information:
- a. Choosing a Home Organization will control who has permission to manage this user.
+ a. Choose a home organization to control who has permission to manage this user.
- b. For Login ID/Azure AD User Name supply the User Principal Name from the user’s Azure Active Directory account.
+ b. For **Login ID/Azure AD User Name**, supply the user principal name from the user's Azure Active Directory account.
- c. On the TheAccessHub Roles tab, check the managed role Helpdesk. It will allow the user to access the manage colleagues view. The user will still need to be placed into a group or be made an organization owner to act on customers.
+ c. On the **TheAccessHub Roles** tab, select the managed role **Helpdesk**. It will allow the user to access the **Manage Colleagues** view. The user will still need to be placed into a group or be made an organization owner to act on customers.
6. Select **Submit**.
-## Configure a new CSR user using a new identity
+## Configure a new CSR user by using a new identity
-Create a CSR/Helpdesk user who will access TheAccessHub Admin Tool with a new local credential unique to TheAccessHub Admin Tool. This will be used mainly by organizations that don't use an Azure AD for their enterprise.
+Create a CSR/Helpdesk user who will access TheAccessHub Admin Tool by using a new local credential that's unique to the tool. This user will be used mainly by organizations that don't use Azure Active Directory.
-To [setup a CSR/Helpdesk](https://youtu.be/iOpOI2OpnLI) user without SSO, follow these steps:
+To [set up a CSR/Helpdesk user](https://youtu.be/iOpOI2OpnLI) without SSO:
-1. Log into TheAccessHub Admin Tool using credentials provided by N8 Identity
+1. Log in to TheAccessHub Admin Tool by using the credentials that N8 Identity has provided.
-2. Navigate to **Manager Tools** > **Manage Colleagues**
+2. Go to **Manager Tools** > **Manage Colleagues**.
-3. Select **Add Colleague**
+3. Select **Add Colleague**.
-4. Select **Colleague Type Local Administrator**
+4. For **Colleague Type**, select **Local Administrator**.
-5. Enter the colleague’s profile information
+5. Enter the colleague's profile information:
- a. Choosing a Home Organization will control who has permission to manage this user.
+ a. Choose a home organization to control who has permission to manage this user.
- b. On the **TheAccessHub Roles** tab, select the managed role **Helpdesk**. It will allow the user to access the manage colleagues view. The user will still need to be placed into a group or be made an organization owner to act on customers.
+ b. On the **TheAccessHub Roles** tab, select the managed role **Helpdesk**. It will allow the user to access the **Manage Colleagues** view. The user will still need to be placed into a group or be made an organization owner to act on customers.
-6. Copy the **Login ID/Email** and **One Time Password** attributes. Provide it to the new user. They'll use these credentials to log in to TheAccessHub Admin Tool. The user will be prompted to enter a new password on their first login.
+6. Copy the **Login ID/Email** and **One Time Password** attributes. Provide them to the new user. The user will use these credentials to log in to TheAccessHub Admin Tool. The user will be prompted to enter a new password on first login.
-7. Select **Submit**
+7. Select **Submit**.
## Configure partitioned CSR administration
-Permissions to manage customer and CSR/Helpdesk users in TheAccessHub Admin Tool are managed with the use of an organization hierarchy. All colleagues and customers have a home organization where they reside. Specific colleagues or groups of colleagues can be assigned as owners of organizations. Organization owners can manage (make changes to) colleagues and customers in organizations or suborganizations they own. To allow multiple colleagues to manage a set of users, a group can be created with many members. The group can then be assigned as an organization owner and all of the group’s members can manage colleagues and customers in the organization.
+Permissions to manage customer and CSR/Helpdesk users in TheAccessHub Admin Tool are managed through an organization hierarchy. All colleagues and customers have a home organization where they reside. You can assign specific colleagues or groups of colleagues as owners of organizations.
+
+Organization owners can manage (make changes to) colleagues and customers in organizations or suborganizations that they own. To allow multiple colleagues to manage a set of users, you can create a group that has many members. You can then assign the group as an organization owner. All of the group's members can then manage colleagues and customers in the organization.
### Create a new group
-1. Log into TheAccessHub Admin Tool using **credentials** provided to you by N8 Identity
+1. Log in to TheAccessHub Admin Tool by using the credentials that N8 Identity has provided.
-2. Navigate to **Organization > Manage Groups**
+2. Go to **Organization > Manage Groups**.
-3. Select > **Add Group**
+3. Select **Add Group**.
-4. Enter a **Group name**, **Group description**, and **Group owner**
+4. Enter values for **Group name**, **Group description**, and **Group owner**.
-5. Search for and check the boxes on the colleagues you want to be members of the group then select >**Add**
+5. Search for and select the boxes on the colleagues you want to be members of the group, and then select **Add**.
6. At the bottom of the page, you can see all members of the group.
-7. If needed members can be removed by selecting the **x** at the end of the row
+ If necessary, you can remove members by selecting the **x** at the end of the row.
-8. Select **Submit**
+7. Select **Submit**.
### Create a new organization
-1. Log into TheAccessHub Admin Tool using credentials provided to you by N8 Identity
+1. Log in to TheAccessHub Admin Tool by using the credentials that N8 Identity has provided.
-2. Navigate to Organization > **Manage Organizations**
+2. Go to **Organization** > **Manage Organizations**.
-3. Select > **Add Organization**
+3. Select **Add Organization**.
-4. Supply an **Organization name**, **Organization owner**, and **Parent organization**.
+4. Supply values for **Organization name**, **Organization owner**, and **Parent organization**:
- a. The organization name is ideally a value that corresponds to your customer data. When loading colleague and customer data, if you supply the name of the organization in the load, the colleague can be automatically placed into the organization.
+ a. The organization name is ideally a value that corresponds to your customer data. When you're loading colleague and customer data, if you supply the name of the organization in the load, the colleague can be automatically placed into the organization.
- b. The owner represents the person or group who will manage the customers and colleagues in this organization and any suborganization within.
+ b. The owner represents the person or group that will manage the customers and colleagues in this organization and any suborganization within it.
- c. The parent organization indicates which other organization is inherently, also responsible for this organization.
+ c. The parent organization indicates which other organization is also responsible for this organization.
5. Select **Submit**.
### Modify the hierarchy via the tree view
-1. Log into TheAccessHub Admin Tool using credentials provided to you by N8 Identity
-
-2. Navigate to **Manager Tools** > **Tree View**
+1. Log in to TheAccessHub Admin Tool by using the credentials that N8 Identity has provided.
-3. In this representation, you can visualize which colleagues and groups can manage which organizations.
+2. Go to **Manager Tools** > **Tree View**.
-4. The hierarchies can be modified by dragging organizations overtop organizations you want them to be parented by.
+3. In this representation, you can visualize which colleagues and groups can manage which organizations. Modify the hierarchy by dragging organizations into parent organizations.
5. Select **Save** when you're finished altering the hierarchy.
-## Customize welcome notification
+## Customize the welcome notification
-While you're using TheAccessHub to migrate users from a previous authentication solution into Azure AD B2C, you may want to customize the user welcome notification, which is sent to the user by TheAccessHub during migration. This message normally includes the link for the customer to set a new password in the Azure AD B2C directory.
+While you're using TheAccessHub Admin Tool to migrate users from a previous authentication solution into Azure AD B2C, you might want to customize the user welcome notification. TheAccessHub Admin Tool sends this notification to users during migration. This message normally includes a link for users to set a new password in the Azure AD B2C directory.
To customize the notification:
-1. Log into TheAccessHub using credentials provided to you by N8 Identity
+1. Log in to TheAccessHub Admin Tool by using the credentials that N8 Identity has provided.
-2. Navigate to **System Admin** > **Notifications**
+2. Go to **System Admin** > **Notifications**.
-3. Select the **Create Colleague template**
+3. Select the **Create Colleague** template.
-4. Select **Edit**
+4. Select **Edit**.
-5. Alter the Message and Template fields as necessary. The Template field is HTML aware and can send HTML formatted notifications to customer emails.
+5. Alter the **Message** and **Template** fields as necessary. The **Template** field is HTML aware and can send HTML-formatted email notifications to customers.
-6. Select **Save** when finished.
+6. Select **Save** when you're finished.
## Migrate data from external data sources to Azure AD B2C
-Using TheAccessHub Admin Tool, you can import data from various databases, LDAPs, and CSV files and then push that data to your Azure AD B2C tenant. It's done by loading data into the Azure AD B2C user colleague type within TheAccessHub Admin Tool. If the source of data isn't Azure itself, the data will be placed into both TheAccessHub Admin Tool and Azure AD B2C. If the source of your external data isn't a simple .csv file on your machine, set up a data source before doing the data load. The below steps describe creating a data source and doing the data load.
+By using TheAccessHub Admin Tool, you can import data from various databases, LDAPs, and .csv files and then push that data to your Azure AD B2C tenant. You migrate the data by loading it into the Azure AD B2C user colleague type within TheAccessHub Admin Tool.
+
+If the source of data isn't Azure itself, the data will be placed into both TheAccessHub Admin Tool and Azure AD B2C. If the source of your external data isn't a simple .csv file on your machine, set up a data source before doing the data load. The following steps describe creating a data source and loading the data.
### Configure a new data source
-1. Log into TheAccessHub Admin Tool using credentials provided to you by N8 Identity
+1. Log in to TheAccessHub Admin Tool by using the credentials that N8 Identity has provided.
-2. Navigate to **System Admin** > **Data Sources**
+2. Go to **System Admin** > **Data Sources**.
-3. Select **Add Data Source**
+3. Select **Add Data Source**.
-4. Supply a **Name** and **Type** for this data source
+4. Supply **Name** and **Type** values for this data source.
-5. Fill in the form data, depending on your data source type:
+5. Fill in the form data, depending on your data source type.
- **For databases**
+ For databases:
- a. **Type** – Database
+ a. For **Type**, enter **Database**.
- b. **Database type** – Select a database from one of the supported database types.
+ b. For **Database type**, select a database from one of the supported database types.
- c. **Connection URL** – Enter a well-formatted JDBC connection string. Such as: ``jdbc:postgresql://myhost.com:5432/databasename``
+ c. For **Connection URL**, enter a well-formatted JDBC connection string, such as `jdbc:postgresql://myhost.com:5432/databasename`.
- d. **Username** – Enter the username for accessing the database
+ d. For **Username**, enter the username for accessing the database.
- e. **Password** – Enter the password for accessing the database
+ e. For **Password**, enter the password for accessing the database.
- f. **Query** – Enter the SQL query to extract the customer details. Such as: ``SELECT * FROM mytable;``
+ f. For **Query**, enter the SQL query to extract the customer details, such as `SELECT * FROM mytable;`.
- g. Select **Test Connection**, you'll see a sample of your data to ensure the connection is working.
+ g. Select **Test Connection**. You'll see a sample of your data to ensure that the connection is working.
- **For LDAPs**
+ For LDAPs:
- a. **Type** – LDAP
+ a. For **Type**, enter **LDAP**.
- b. **Host** – Enter the hostname or IP for machine in which the LDAP server is running. Such as: ``mysite.com``
+ b. For **Host**, enter the host name or IP address for the machine in which the LDAP server is running, such as `mysite.com`.
- c. **Port** – Enter the port number in which the LDAP server is listening.
+ c. For **Port**, enter the port number in which the LDAP server is listening.
- d. **SSL** – Check the box if TheAccessHub Admin Tool should communicate to the LDAP securely using SSL. Using SSL is highly recommended.
+ d. For **SSL**, select the box if TheAccessHub Admin Tool should communicate to the LDAP securely by using SSL. We highly recommend using SSL.
- e. **Login DN** – Enter the DN of the user account to log in and do the LDAP search
+ e. For **Login DN**, enter the distinguished name (DN) of the user account to log in and do the LDAP search.
- f. **Password** – Enter the password for the user
+ f. For **Password**, enter the password for the user.
- g. **Base DN** – Enter the DN at the top of the hierarchy in which you want to do the search
+ g. For **Base DN**, enter the DN at the top of the hierarchy in which you want to do the search.
- h. **Filter** – Enter the LDAP filter string, which will obtain your customer records
+ h. For **Filter**, enter the LDAP filter string, which will obtain your customer records.
- i. **Attributes** – Enter a comma-separated list of attributes from your customer records to pass to TheAccessHub Admin Tool
+ i. For **Attributes**, enter a comma-separated list of attributes from your customer records to pass to TheAccessHub Admin Tool.
- j. Select the **Test Connection**, you'll see a sample of your data to ensure the connection is working.
+ j. Select the **Test Connection**. You'll see a sample of your data to ensure that the connection is working.
- **For OneDrive**
+ For OneDrive:
- a. **Type** – OneDrive for Business
+ a. For **Type**, select **OneDrive for Business**.
- b. Select **Authorize Connection**
+ b. Select **Authorize Connection**.
- c. A new window will prompt you to log in to **OneDrive**, login with a user with read access to your OneDrive account. TheAccessHub Admin Tool, will act for this user to read CSV load files.
+ c. A new window prompts you to sign in to OneDrive. Sign in with a user that has read access to your OneDrive account. TheAccessHub Admin Tool will act for this user to read .csv load files.
d. Follow the prompts and select **Accept** to grant TheAccessHub Admin Tool the requested permissions.
-6. Select **Save** when finished.
+6. Select **Save** when you're finished.
### Synchronize data from your data source into Azure AD B2C
-1. Log into TheAccessHub Admin Tool using credentials provided to you by N8 Identity
+1. Log in to TheAccessHub Admin Tool by using the credentials that N8 Identity has provided.
+
+2. Go to **System Admin** > **Data Synchronization**.
-2. Navigate to **System Admin** > **Data Synchronization**
+3. Select **New Load**.
-3. Select **New Load**
+4. For **Colleague Type**, select **Azure AD B2C User**.
-4. Select the **Colleague Type** Azure AD B2C User
+5. Select **Source**. In the pop-up dialog, select your data source. If you created a OneDrive data source, also select the file.
-5. Select **Source**, in the pop-up dialog, select your data source. If you created a OneDrive data source, also select the file.
+6. If you don't want to create new customer accounts with this load, change the first policy (**IF colleague not found in TheAccessHub THEN**) to **Do Nothing**.
-6. If you don’t want to create new customer accounts with this load, then change the first policy: **IF colleague not found in TheAccessHub THEN** to **Do Nothing**
+7. If you don't want to update existing customer accounts with this load, change the second policy (**IF source and TheAccessHub data mismatch THEN**) to **Do Nothing**.
-7. If you don’t want to update existing customer accounts with this load, then change the second policy **IF source and TheAccessHub data mismatch THEN** to **Do Nothing**
+8. Select **Next**.
-8. Select **Next**
+9. In **Search-Mapping configuration**, you identify how to correlate load records with customers already loaded into TheAccessHub Admin Tool.
-9. In the **Search-Mapping configuration**, we identify how to correlate load records with customers already loaded into TheAccessHub Admin Tool. Choose one or more identifying attributes in the source. Match the attributes with an attribute in TheAccessHub Admin Tool that holds the same values. If a match is found, then the existing record will be overridden; otherwise, a new customer will be created. You can sequence a number of these checks. For example, you could check email first, and then first and last name.
+ Choose one or more identifying attributes in the source. Match the attributes with an attribute in TheAccessHub Admin Tool that holds the same values. If a match is found, the existing record will be overridden. Otherwise, a new customer will be created.
+
+ You can sequence a number of these checks. For example, you could check email first, and then check first and last name.
-10. On the left-hand side menu, select **Data Mapping**.
+10. On the left-side menu, select **Data Mapping**.
-11. In the Data-Mapping configuration, assign which TheAccessHub Admin Tool attributes should be populated from your source attributes. No need to map all the attributes. Unmapped attributes will remain unchanged for existing customers.
+11. In **Data-Mapping configuration**, assign the TheAccessHub Admin Tool attributes that should be populated from your source attributes. There's no need to map all the attributes. Unmapped attributes will remain unchanged for existing customers.
-12. If you map to the attribute org_name with a value that is the name of an existing organization, then new customers created will be placed in that organization.
+12. If you map to the attribute `org_name` with a value that is the name of an existing organization, newly created customers will be placed in that organization.
-13. Select **Next**
+13. Select **Next**.
-14. A Daily/Weekly or Monthly schedule may be specified if this load should be reoccurring. Otherwise keep the default **Now**.
+14. If you want this load to be recurring, specify a **Daily/Weekly** or **Monthly** schedule. Otherwise, keep the default of **Now**.
-15. Select **Submit**
+15. Select **Submit**.
-16. If the **Now schedule** was selected, a new record will be added to the Data Synchronizations screen immediately. Once the validation phase has reached 100%, select the **new record** to see the expected outcome for the load. For scheduled loads, these records will only appear after the scheduled time.
+16. If you selected the **Now** schedule, a new record will be added to the **Data Synchronizations** screen immediately. After the validation phase has reached 100 percent, select the new record to see the expected outcome for the load. For scheduled loads, these records will appear only after the scheduled time.
-17. If there are no errors, select **Run** to commit the changes. Otherwise, select **Remove** from the **More** menu to remove the load. You can then correct the source data or load mappings and try again. Instead, if the number of errors is small, you can manually update the records and select **Update** on each record to make corrections. Finally, you can continue with any errors and resolve them later as **Support Interventions** in TheAccessHub Admin Tool.
+17. If there are no errors, select **Run** to commit the changes. Otherwise, select **Remove** from the **More** menu to remove the load. You can then correct the source data or load mappings and try again.
-18. When the **Data Synchronization** record becomes 100% on the load phase, all the changes resulting from the load will have been initiated. Customers should begin appearing or receiving changes in Azure AD B2C.
+ Instead, if the number of errors is small, you can manually update the records and select **Update** on each record to make corrections. Another option is to continue with any errors and resolve them later as **Support Interventions** in TheAccessHub Admin Tool.
+
+18. When the **Data Synchronization** record becomes 100 percent on the load phase, all the changes resulting from the load have been initiated. Customers should begin appearing or receiving changes in Azure AD B2C.
## Synchronize Azure AD B2C customer data
-As a one-time or ongoing operation, TheAccessHub Admin Tool can synchronize all the customer information from Azure AD B2C into TheAccessHub Admin Tool. This ensures that CSR/Helpdesk administrators are seeing up-to-date customer information.
+As a one-time or ongoing operation, TheAccessHub Admin Tool can synchronize all the customer information from Azure AD B2C into TheAccessHub Admin Tool. This operation ensures that CSR/Helpdesk administrators see up-to-date customer information.
To synchronize data from Azure AD B2C into TheAccessHub Admin Tool:
-1. Log into TheAccessHub Admin Tool using credentials provided to you by N8 Identity
+1. Log in to TheAccessHub Admin Tool by using the credentials that N8 Identity has provided.
-2. Navigate to **System Admin** > **Data Synchronization**
+2. Go to **System Admin** > **Data Synchronization**.
-3. Select **New Load**
+3. Select **New Load**.
-4. Select the **Colleague Type** Azure AD B2C User
+4. For **Colleague Type**, select **Azure AD B2C User**.
5. For the **Options** step, leave the defaults.
-6. Select **Next**
+6. Select **Next**.
+
+7. For the **Data Mapping & Search** step, leave the defaults. Exception: if you map to the attribute `org_name` with a value that is the name of an existing organization, newly created customers will be placed in that organization.
-7. For the **Data Mapping & Search** step, leave the defaults. Except if you map to the attribute **org_name** with a value that is the name of an existing organization, then new customers created will be placed in that organization.
+8. Select **Next**.
-8. Select **Next**
+9. If you want this load to be recurring, specify a **Daily/Weekly** or **Monthly** schedule. Otherwise, keep the default of **Now**. We recommend syncing from Azure AD B2C on a regular basis.
-9. A Daily/Weekly or Monthly schedule may be specified if this load should be reoccurring. Otherwise keep the default: **Now**. We recommend syncing from Azure AD B2C on a regular basis.
+10. Select **Submit**.
-10. Select **Submit**
+11. If you selected the **Now** schedule, a new record will be added to the **Data Synchronizations** screen immediately. After the validation phase has reached 100 percent, select the new record to see the expected outcome for the load. For scheduled loads, these records will appear only after the scheduled time.
-11. If the **Now** schedule was selected, a new record will be added to the Data Synchronizations screen immediately. Once the validation phase has reached 100%, select the new record to see the expected outcome for the load. For scheduled loads, these records will only appear after the scheduled time.
+12. If there are no errors, select **Run** to commit the changes. Otherwise, select **Remove** from the **More** menu to remove the load. You can then correct the source data or load mappings and try again.
-12. If there are no errors, select **Run** to commit the changes. Otherwise, select **Remove** from the More menu to remove the load. You can then correct the source data or load mappings and try again. Instead, if the number of errors is small, you can manually update the records and select **Update** on each record to make corrections. Finally, you can continue with any errors and resolve them later as Support Interventions in TheAccessHub Admin Tool.
+ Instead, if the number of errors is small, you can manually update the records and select **Update** on each record to make corrections. Another option is to continue with any errors and resolve them later as **Support Interventions** in TheAccessHub Admin Tool.
-13. When the **Data Synchronization** record becomes 100% on the load phase, all the changes resulting from the load will have been initiated.
+13. When the **Data Synchronization** record becomes 100 percent on the load phase, all the changes resulting from the load have been initiated.
## Configure Azure AD B2C policies
-Occasionally syncing TheAccessHub Admin Tool is limited in its ability to keep its state up to date with Azure AD B2C. We can leverage TheAccessHub Admin Tool’s API and Azure AD B2C policies to inform TheAccessHub Admin Tool of changes as they happen. This solution requires technical knowledge of [Azure AD B2C custom policies](./user-flow-overview.md). In the next section, we'll give you an example policy steps and a secure certificate to notify TheAccessHub Admin Tool of new accounts in your Sign-Up custom policies.
+Occasional syncing of TheAccessHub Admin Tool limits the tool's ability to keep its state up to date with Azure AD B2C. You can use TheAccessHub Admin Tool's API and Azure AD B2C policies to inform TheAccessHub Admin Tool of changes as they happen. This solution requires technical knowledge of [Azure AD B2C custom policies](./user-flow-overview.md).
+
+The following procedures give you example policy steps and a secure certificate to notify TheAccessHub Admin Tool of new accounts in your sign-up custom policies.
-### Create a secure credential to invoke TheAccessHub Admin Tool’s API
+### Create a secure credential to invoke TheAccessHub Admin Tool's API
-1. Log into TheAccessHub Admin Tool using credentials provided to you by N8 Identity
+1. Log in to TheAccessHub Admin Tool by using the credentials that N8 Identity has provided.
-2. Navigate to **System Admin** > **Admin Tools** > **API Security**
+2. Go to **System Admin** > **Admin Tools** > **API Security**.
-3. Select **Generate**
+3. Select **Generate**.
-4. Copy the **Certificate Password**
+4. Copy the **Certificate Password**.
5. Select **Download** to get the client certificate.
-6. Follow this [tutorial](./secure-rest-api.md#https-client-certificate-authentication ) to add the client certificate into Azure AD B2C.
+6. Follow [this tutorial](./secure-rest-api.md#https-client-certificate-authentication ) to add the client certificate into Azure AD B2C.
### Retrieve your custom policy examples
-1. Log into TheAccessHub Admin Tool using credentials provided to you by N8 Identity
+1. Log in to TheAccessHub Admin Tool by using the credentials that N8 Identity has provided.
-2. Navigate to **System Admin** > **Admin Tools** > **Azure B2C Policies**
+2. Go to **System Admin** > **Admin Tools** > **Azure B2C Policies**.
-3. Supply your Azure AD B2C tenant domain and the two Identity Experience Framework IDs from your Identity Experience Framework configuration
+3. Supply your Azure AD B2C tenant domain and the two Identity Experience Framework IDs from your Identity Experience Framework configuration.
-4. Select **Save**
+4. Select **Save**.
-5. Select **Download** to get a zip file with basic policies that add customers into TheAccessHub Admin Tool as customers sign up.
+5. Select **Download** to get a .zip file with basic policies that add customers into TheAccessHub Admin Tool as customers sign up.
-6. Follow this [tutorial](./tutorial-create-user-flows.md?pivots=b2c-custom-policy) to get started with designing custom policies in Azure AD B2C.
+6. Follow [this tutorial](./tutorial-create-user-flows.md?pivots=b2c-custom-policy) to get started with designing custom policies in Azure AD B2C.
## Next steps
-For additional information, review the following articles:
+For more information, review the following articles:
- [Custom policies in Azure AD B2C](./custom-policy-overview.md)
diff --git a/articles/active-directory-b2c/partner-xid.md b/articles/active-directory-b2c/partner-xid.md
index 800a397d38116..625d3d1ad2139 100644
--- a/articles/active-directory-b2c/partner-xid.md
+++ b/articles/active-directory-b2c/partner-xid.md
@@ -41,27 +41,36 @@ The following architecture diagram shows the implementation.
![image shows the architecture diagram](./media/partner-xid/partner-xid-architecture-diagram.png)
-| Step | Description |
-|:--------|:--------|
-| 1. |User opens Azure AD B2C's sign-in page and then signs in or signs up by entering their username. |
-| 2. |Azure AD B2C redirects the user to xID authorize API endpoint using an OpenID Connect (OIDC) request. An OIDC endpoint is available containing information about the endpoints. xID Identity provider (IdP) redirects the user to the xID authorization sign-in page allowing the user to fill in or select their email address. |
-| 3. |xID IdP sends the push notification to the user's mobile device. |
-| 4. |The user opens the xID app, checks the request, then enters the PIN or authenticates with their biometrics. If PIN or biometrics is successfully verified, xID app activates the private key and creates an electronic signature. |
-| 5. |xID app sends the signature to xID IdP for verification. |
-| 6. |xID IdP shows a consent screen to the user, requesting authorization to give their personal information to the service they're signing in. |
-| 7. |xID IdP returns the OAuth authorization code to Azure AD B2C. |
-| 8. | Azure AD B2C sends a token request using the authorization code. |
-| 9. |xID IdP checks the token request and, if still valid, returns the OAuth access token and the ID token containing the requested user's identifier and email address. |
-| 10. |In addition, if the user's customer content is needed, Azure AD B2C calls the xID userdata API. |
-| 11. |The xID userdata API returns the user's encrypted customer content. Users can decrypt it with their private key, which they create when requesting the xID client information. |
-| 12. | User is either granted or denied access to the customer application based on the verification results. |
+| Step | Description |
+| :--- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| 1. | User opens Azure AD B2C's sign-in page and then signs in or signs up by entering their username. |
+| 2. | Azure AD B2C redirects the user to xID authorize API endpoint using an OpenID Connect (OIDC) request. An OIDC endpoint is available containing information about the endpoints. xID Identity provider (IdP) redirects the user to the xID authorization sign-in page allowing the user to fill in or select their email address. |
+| 3. | xID IdP sends the push notification to the user's mobile device. |
+| 4. | The user opens the xID app, checks the request, then enters the PIN or authenticates with their biometrics. If PIN or biometrics is successfully verified, xID app activates the private key and creates an electronic signature. |
+| 5. | xID app sends the signature to xID IdP for verification. |
+| 6. | xID IdP shows a consent screen to the user, requesting authorization to give their personal information to the service they're signing in. |
+| 7. | xID IdP returns the OAuth authorization code to Azure AD B2C. |
+| 8. | Azure AD B2C sends a token request using the authorization code. |
+| 9. | xID IdP checks the token request and, if still valid, returns the OAuth access token and the ID token containing the requested user's identifier and email address. |
+| 10. | In addition, if the user's customer content is needed, Azure AD B2C calls the xID userdata API. |
+| 11. | The xID userdata API returns the user's encrypted customer content. Users can decrypt it with their private key, which they create when requesting the xID client information. |
+| 12. | User is either granted or denied access to the customer application based on the verification results. |
## Onboard with xID
Request API documents by filling out [the request form](https://xid.inc/contact-us). In the message field, indicate that you'd like to onboard with Azure AD B2C. Then, an xID sales representative will contact you. Follow the instructions provided in the xID API document and request an xID API client. xID tech team will send client information to you in 3-4 working days.
+Supply redirect URI. This is the URI in your site to which the user is returned after a successful authentication. The URI that should be provided to xID for your Azure AD B2C follows the pattern - `https://.b2clogin.com/.onmicrosoft.com/oauth2/authresp`.
-## Step 1: Create a xID policy key
+## Step 1: Register a web application in Azure AD B2C
+
+Before your [applications](application-types.md) can interact with Azure AD B2C, they must be registered in a tenant that you manage.
+
+For testing purposes like this tutorial, you're registering `https://jwt.ms`, a Microsoft-owned web application that displays the decoded contents of a token (the contents of the token never leave your browser).
+
+Follow the steps mentioned in [this tutorial](tutorial-register-applications.md?tabs=app-reg-ga) to **register a web application** and **enable ID token implicit grant** for testing a user flow or custom policy. There's no need to create a Client Secret at this time.
+
+## Step 2: Create a xID policy key
Store the client secret that you received from xID in your Azure AD B2C tenant.
@@ -92,19 +101,19 @@ Store the client secret that you received from xID in your Azure AD B2C tenant.
>[!NOTE]
>In Azure AD B2C, [**custom policies**](./user-flow-overview.md) are designed primarily to address complex scenarios.
-## Step 2: Configure xID as an Identity provider
+## Step 3: Configure xID as an Identity provider
To enable users to sign in using xID, you need to define xID as a claims provider that Azure AD B2C can communicate with through an endpoint. The endpoint provides a set of claims Azure AD B2C uses to verify that a specific user has authenticated using digital identity available on their device. Proving the user's identity.
Use the following steps to add xID as a claims provider:
-1. Get the custom policy starter packs from GitHub, then update the XML files in the SocialAndLocalAccounts starter pack with your Azure AD B2C tenant name:
+1. Get the custom policy starter packs from GitHub, then update the XML files in the SocialAccounts starter pack with your Azure AD B2C tenant name:
i. Download the [.zip file](https://github.com/Azure-Samples/active-directory-b2c-custom-policy-starterpack/archive/master.zip) or [clone the repository](https://github.com/Azure-Samples/active-directory-b2c-custom-policy-starterpack).
- ii. In all of the files in the **LocalAccounts** directory, replace the string `yourtenant` with the name of your Azure AD B2C tenant. For example, if the name of your B2C tenant is `contoso`, all instances of `yourtenant.onmicrosoft.com` become `contoso.onmicrosoft.com`.
+ ii. In all of the files in the **SocialAccounts** directory, replace the string `yourtenant` with the name of your Azure AD B2C tenant. For example, if the name of your B2C tenant is `contoso`, all instances of `yourtenant.onmicrosoft.com` become `contoso.onmicrosoft.com`.
-2. Open the `LocalAccounts/ TrustFrameworkExtensions.xml`.
+2. Open the `SocialAccounts/TrustFrameworkExtensions.xml`.
3. Find the **ClaimsProviders** element. If it doesn't exist, add it under the root element.
@@ -132,9 +141,10 @@ Use the following steps to add xID as a claims provider:
trueclient_secret_basichttps://oidc-uat.x-id.io/userinfo
+ https://oidc-uat.x-id.io/
-
+
@@ -142,7 +152,7 @@ Use the following steps to add xID as a claims provider:
-
+
@@ -201,9 +211,9 @@ Use the following steps to add xID as a claims provider:
5. Save the changes.
-## Step 3: Add a user journey
+## Step 4: Add a user journey
-At this point, you've set up the identity provider, but it's not yet available on any of the sign-in pages. If you have a custom user journey, continue to [step 4](#step-4-add-the-identity-provider-to-a-user-journey). Otherwise, create a duplicate of an existing template user journey as follows:
+At this point, you've set up the identity provider, but it's not yet available on any of the sign-in pages. If you have a custom user journey, continue to [step 5](#step-5-add-the-identity-provider-to-a-user-journey). Otherwise, create a duplicate of an existing template user journey as follows:
1. Open the `TrustFrameworkBase.xml` file from the starter pack.
@@ -215,19 +225,21 @@ At this point, you've set up the identity provider, but it's not yet available o
5. Rename the ID of the user journey. For example, `ID=CustomSignUpSignIn`
-## Step 4: Add the identity provider to a user journey
+## Step 5: Add the identity provider to a user journey
Now that you have a user journey add the new identity provider to the user journey.
1. Find the orchestration step element that includes Type=`CombinedSignInAndSignUp`, or Type=`ClaimsProviderSelection` in the user journey. It's usually the first orchestration step. The **ClaimsProviderSelections** element contains a list of identity providers used for signing in. The order of the elements controls the order of the sign-in buttons presented to the user. Add a **ClaimsProviderSelection** XML element. Set the value of **TargetClaimsExchangeId** to a friendly name, such as `X-IDExchange`.
-2. In the next orchestration step, add a **ClaimsExchange** element. Set the **Id** to the value of the target claims exchange ID to link the xID button to `X-ID-SignIn` action. Next, update the value of **TechnicalProfileReferenceId** to the ID of the technical profile you created earlier.
+2. In the next orchestration step, add a **ClaimsExchange** element. Set the **Id** to the value of the target claims exchange ID to link the xID button to `X-IDExchange` action. Next, update the value of **TechnicalProfileReferenceId** to the ID of the technical profile you created earlier `X-ID-Oauth2`.
- The following XML demonstrates the orchestration steps of a user journey with the identity provider:
+3. Add a new Orchestration step to call xID UserInfo endpoint to return claims about the authenticated user `X-ID-Userdata`.
+
+ The following XML demonstrates the orchestration steps of a user journey with xID identity provider:
```xml
-
+
@@ -291,31 +303,119 @@ Now that you have a user journey add the new identity provider to the user journ
```
-## Step 5: Upload the custom policy
+There are additional identity claims that xID supports and are referenced as part of the policy. Claims schema is the place where you declare these claims. ClaimsSchema element contains list of ClaimType elements. The ClaimType element contains the Id attribute, which is the claim name.
-1. Sign in to the [Azure portal](https://portal.azure.com/#home).
+1. Open the `TrustFrameworksExtension.xml`
-2. Make sure you're using the directory that contains your Azure AD B2C tenant:
+2. Find the `BuildingBlocks` element.
- a. Select the **Directories + subscriptions** icon in the portal toolbar.
+3. Add the following ClaimType element in the **ClaimsSchema** element of your `TrustFrameworksExtension.xml` policy
- b. On the **Portal settings | Directories + subscriptions** page, find your Azure AD B2C directory in the **Directory name** list, and select **Switch**.
-
-3. In the [Azure portal](https://portal.azure.com/#home), search for and select **Azure AD B2C**.
-
-4. Under Policies, select **Identity Experience Framework**.
-
-5. Select **Upload Custom Policy**, and then upload the files in the **LocalAccounts** starter pack in the following order: the extension policy, for example, `TrustFrameworkExtensions.xml`, then the relying party policy, such as `SignUpSignIn.xml`.
+```xml
+
+
+
+
+ sid
+ string
+
+
+ userdataid
+ string
+
+
+ xid_verified
+ boolean
+
+
+ email_verified
+ boolean
+
+
+ Identity Provider Access Token
+ string
+ Stores the access token of the identity provider.
+
+
+ last_name
+ string
+
+
+ first_name
+ string
+
+
+ previous_name
+ string
+
+
+ year
+ string
+
+
+ month
+ string
+
+
+ date
+ string
+
+
+ prefecture
+ string
+
+
+ city
+ string
+
+
+ address
+ string
+
+
+ sub_char_common_name
+ string
+
+
+ sub_char_previous_name
+ string
+
+
+ sub_char_address
+ string
+
+
+ verified_at
+ int
+
+
+ Gender
+ string
+
+
+
+ The user's gender.
+ Your gender.
+ TextBox
+
+
+ correlation ID
+ string
+
+
+
+
+```
## Step 6: Configure the relying party policy
The relying party policy, for example [SignUpSignIn.xml](https://github.com/Azure-Samples/active-directory-b2c-custom-policy-starterpack/blob/main/LocalAccounts/SignUpOrSignin.xml), specifies the user journey which Azure AD B2C will execute. First, find the **DefaultUserJourney** element within the relying party. Then, update the **ReferenceId** to match the user journey ID you added to the identity provider.
-In the following example, for the `X-IDSignUpOrSignIn` user journey, the **ReferenceId** is set to `X-IDSignUpOrSignIn`:
+In the following example, for the xID user journey, the **ReferenceId** is set to `CombinedSignInAndSignUp`:
```xml
-
+ PolicyProfile
@@ -350,8 +450,26 @@ In the following example, for the `X-IDSignUpOrSignIn` user journey, the **Refer
```
+## Step 7: Upload the custom policy
+
+1. Sign in to the [Azure portal](https://portal.azure.com/#home).
+
+2. Make sure you're using the directory that contains your Azure AD B2C tenant:
+
+ a. Select the **Directories + subscriptions** icon in the portal toolbar.
+
+ b. On the **Portal settings | Directories + subscriptions** page, find your Azure AD B2C directory in the **Directory name** list, and select **Switch**.
+
+3. In the [Azure portal](https://portal.azure.com/#home), search for and select **Azure AD B2C**.
+
+4. Under Policies, select **Identity Experience Framework**.
+
+5. Select **Upload Custom Policy**, and then upload the files in the following order:
+ 1. `TrustFrameworkBase.xml`, the base policy file
+ 2. `TrustFrameworkExtensions.xml`, the extension policy
+ 3. `SignUpSignIn.xml`, then the relying party policy
-## Step 7: Test your custom policy
+## Step 8: Test your custom policy
1. In your Azure AD B2C tenant, and under **Policies**, select **Identity Experience Framework**.
diff --git a/articles/active-directory-b2c/quickstart-web-app-dotnet.md b/articles/active-directory-b2c/quickstart-web-app-dotnet.md
index 3336f333b6f40..3e842f3a13a9b 100644
--- a/articles/active-directory-b2c/quickstart-web-app-dotnet.md
+++ b/articles/active-directory-b2c/quickstart-web-app-dotnet.md
@@ -85,7 +85,7 @@ Azure Active Directory B2C provides functionality to allow users to update their
The ASP.NET web application includes an Azure AD access token in the request to the protected web API resource to perform operations on the user's to-do list items.
-You've successfully used your Azure AD B2C user account to make an authorized call an Azure AD B2C protected web API.
+You've successfully used your Azure AD B2C user account to make an authorized call to an Azure AD B2C protected web API.
## Next steps
diff --git a/articles/active-directory-b2c/relyingparty.md b/articles/active-directory-b2c/relyingparty.md
index f965f657fe650..f5e37a3327907 100644
--- a/articles/active-directory-b2c/relyingparty.md
+++ b/articles/active-directory-b2c/relyingparty.md
@@ -43,7 +43,7 @@ The following example shows a **RelyingParty** element in the *B2C_1A_signup_sig
Rolling
- 300
+ 900{OAUTH-KV:campaignId}
diff --git a/articles/active-directory-b2c/restful-technical-profile.md b/articles/active-directory-b2c/restful-technical-profile.md
index f6df2f3e18ca9..afc11c5d030fb 100644
--- a/articles/active-directory-b2c/restful-technical-profile.md
+++ b/articles/active-directory-b2c/restful-technical-profile.md
@@ -9,7 +9,7 @@ manager: CelesteDG
ms.service: active-directory
ms.workload: identity
ms.topic: reference
-ms.date: 05/03/2021
+ms.date: 06/08/2022
ms.author: kengaderdus
ms.subservice: B2C
---
@@ -223,7 +223,7 @@ If the type of authentication is set to `ApiKeyHeader`, the **CryptographicKeys*
| The name of the HTTP header, such as `x-functions-key`, or `x-api-key`. | Yes | The key that is used to authenticate. |
> [!NOTE]
-> At this time, Azure AD B2C supports only one HTTP header for authentication. If your RESTful call requires multiple headers, such as a client ID and client secret, you will need to proxy the request in some manner.
+> At this time, Azure AD B2C supports only one HTTP header for authentication. If your RESTful call requires multiple headers, such as a client ID and client secret value, you will need to proxy the request in some manner.
```xml
diff --git a/articles/active-directory-b2c/saml-identity-provider-technical-profile.md b/articles/active-directory-b2c/saml-identity-provider-technical-profile.md
index 02f41ed3246db..903daf029686e 100644
--- a/articles/active-directory-b2c/saml-identity-provider-technical-profile.md
+++ b/articles/active-directory-b2c/saml-identity-provider-technical-profile.md
@@ -176,7 +176,7 @@ The **CryptographicKeys** element contains the following attributes:
| Attribute |Required | Description |
| --------- | ----------- | ----------- |
| SamlMessageSigning |Yes | The X509 certificate (RSA key set) to use to sign SAML messages. Azure AD B2C uses this key to sign the requests and send them to the identity provider. |
-| SamlAssertionDecryption |No | The X509 certificate (RSA key set). A SAML identity provider uses the public portion of the certificate to encrypt the assertion of the SAML response. Azure AD B2C uses the private portion of the certificate to decrypt the assertion. |
+| SamlAssertionDecryption |No* | The X509 certificate (RSA key set). A SAML identity provider uses the public portion of the certificate to encrypt the assertion of the SAML response. Azure AD B2C uses the private portion of the certificate to decrypt the assertion.
* Required if the external IDP encrypts SAML assertions.|
| MetadataSigning |No | The X509 certificate (RSA key set) to use to sign SAML metadata. Azure AD B2C uses this key to sign the metadata. |
## Next steps
diff --git a/articles/active-directory-b2c/secure-rest-api.md b/articles/active-directory-b2c/secure-rest-api.md
index e91fa2c3bf02e..ca1a8aa87c150 100644
--- a/articles/active-directory-b2c/secure-rest-api.md
+++ b/articles/active-directory-b2c/secure-rest-api.md
@@ -9,7 +9,7 @@ manager: CelesteDG
ms.service: active-directory
ms.workload: identity
ms.topic: how-to
-ms.date: 04/05/2022
+ms.date: 06/08/2022
ms.author: kengaderdus
ms.subservice: B2C
zone_pivot_groups: b2c-policy-type
@@ -303,7 +303,7 @@ For a client credentials flow, you need to create an application secret. The cli
#### Create Azure AD B2C policy keys
-You need to store the client ID and the client secret that you previously recorded in your Azure AD B2C tenant.
+You need to store the client ID and the client secret value that you previously recorded in your Azure AD B2C tenant.
1. Sign in to the [Azure portal](https://portal.azure.com/).
1. Make sure you're using the directory that contains your Azure AD B2C tenant. Select the **Directories + subscriptions** icon in the portal toolbar.
@@ -484,9 +484,22 @@ The following XML snippet is an example of a RESTful technical profile configure
```
-::: zone-end
+Add the validation technical profile reference to the sign up technical profile, which calls the `REST-AcquireAccessToken`. This behavior means that Azure AD B2C moves on to create the account in the directory only after successful validation.
+
+For example:
+ ```XML
+
+ ....
+
+ ....
+
+ ```
+
+
+::: zone-end
+
## API key authentication
::: zone pivot="b2c-user-flow"
diff --git a/articles/active-directory-b2c/string-transformations.md b/articles/active-directory-b2c/string-transformations.md
index 430b002d028cb..8a578bf13488d 100644
--- a/articles/active-directory-b2c/string-transformations.md
+++ b/articles/active-directory-b2c/string-transformations.md
@@ -212,7 +212,7 @@ Determines whether a claim value is equal to the input parameter value. Check ou
| InputClaim | inputClaim1 | string | The claim's type, which is to be compared. |
| InputParameter | operator | string | Possible values: `EQUAL` or `NOT EQUAL`. |
| InputParameter | compareTo | string | String comparison, one of the values: Ordinal, OrdinalIgnoreCase. |
-| InputParameter | ignoreCase | boolean | Specifies whether this comparison should ignore the case of the strings being compared. |
+| InputParameter | ignoreCase | string | Specifies whether this comparison should ignore the case of the strings being compared. |
| OutputClaim | outputClaim | boolean | The claim that is produced after this claims transformation has been invoked. |
### Example of CompareClaimToValue
@@ -227,7 +227,7 @@ Use this claims transformation to check if a claim is equal to a value you speci
-
+
diff --git a/articles/active-directory-b2c/view-audit-logs.md b/articles/active-directory-b2c/view-audit-logs.md
index 852384b0d72f7..0cd9c92d35f4a 100644
--- a/articles/active-directory-b2c/view-audit-logs.md
+++ b/articles/active-directory-b2c/view-audit-logs.md
@@ -9,7 +9,7 @@ manager: CelesteDG
ms.service: active-directory
ms.topic: how-to
ms.workload: identity
-ms.date: 02/20/2020
+ms.date: 06/08/2022
ms.author: kengaderdus
ms.subservice: B2C
ms.custom: fasttrack-edit
@@ -114,7 +114,7 @@ You can try this script in the [Azure Cloud Shell](overview.md). Be sure to upda
# Constants
$ClientID = "your-client-application-id-here" # Insert your application's client ID, a GUID
-$ClientSecret = "your-client-application-secret-here" # Insert your application's client secret
+$ClientSecret = "your-client-application-secret-here" # Insert your application's client secret value
$tenantdomain = "your-b2c-tenant.onmicrosoft.com" # Insert your Azure AD B2C tenant domain name
$loginURL = "https://login.microsoftonline.com"
diff --git a/articles/active-directory-b2c/whats-new-docs.md b/articles/active-directory-b2c/whats-new-docs.md
index f39cea7f8c019..fa5ce2b39a44e 100644
--- a/articles/active-directory-b2c/whats-new-docs.md
+++ b/articles/active-directory-b2c/whats-new-docs.md
@@ -15,6 +15,17 @@ manager: CelesteDG
Welcome to what's new in Azure Active Directory B2C documentation. This article lists new docs that have been added and those that have had significant updates in the last three months. To learn what's new with the B2C service, see [What's new in Azure Active Directory](../active-directory/fundamentals/whats-new.md).
+
+## May 2022
+
+### Updated articles
+
+- [Set redirect URLs to b2clogin.com for Azure Active Directory B2C](b2clogin.md)
+- [Enable custom domains for Azure Active Directory B2C](custom-domain.md)
+- [Configure xID with Azure Active Directory B2C for passwordless authentication](partner-xid.md)
+- [UserJourneys](userjourneys.md)
+- [Secure your API used an API connector in Azure AD B2C](secure-rest-api.md)
+
## April 2022
### New articles
diff --git a/articles/active-directory/app-provisioning/application-provisioning-config-problem-scim-compatibility.md b/articles/active-directory/app-provisioning/application-provisioning-config-problem-scim-compatibility.md
index ab3a977ab598e..a1a0e2a7fabff 100644
--- a/articles/active-directory/app-provisioning/application-provisioning-config-problem-scim-compatibility.md
+++ b/articles/active-directory/app-provisioning/application-provisioning-config-problem-scim-compatibility.md
@@ -8,7 +8,7 @@ ms.service: active-directory
ms.subservice: app-provisioning
ms.workload: identity
ms.topic: reference
-ms.date: 08/25/2021
+ms.date: 05/25/2022
ms.author: kenwith
ms.reviewer: arvinh
---
@@ -27,10 +27,10 @@ The provisioning service uses the concept of a job to operate against an applica
If you are using an application in the gallery, the job generally contains the name of the app (e.g. zoom snowFlake, dataBricks, etc.). You can skip this documentation when using a gallery application. This primarily applies for non-gallery applications with jobID SCIM or customAppSSO.
## SCIM 2.0 compliance issues and status
-In the table below, any item marked as fixed means that the proper behavior can be found on the SCIM job. We have worked to ensure backwards compatibility for the changes we have made. However, we do not recommend implementing old behavior. We recommend using the new behavior for any new implementations and updating existing implementations.
+In the table below, any item marked as fixed means that the proper behavior can be found on the SCIM job. We have worked to ensure backwards compatibility for the changes we have made. We recommend using the new behavior for any new implementations and updating existing implementations. Please note that the customappSSO behavior that was the default prior to December 2018 is not supported anymore.
> [!NOTE]
-> For the changes made in 2018, you can revert back to the customappsso behavior. For the changes made since 2018, you can use the URLs to revert back to the older behavior. We have worked to ensure backwards compatibility for the changes we have made by allowing you to revert back to the old jobID or by using a flag. However, as previously mentioned, we do not recommend implementing old behavior. We recommend using the new behavior for any new implementations and updating existing implementations.
+> For the changes made in 2018, it is possible to revert back to the customappsso behavior. For the changes made since 2018, you can use the URLs to revert back to the older behavior. We have worked to ensure backwards compatibility for the changes we have made by allowing you to revert back to the old jobID or by using a flag. However, as previously mentioned, we do not recommend implementing old behavior as it is not supported anymore. We recommend using the new behavior for any new implementations and updating existing implementations.
| **SCIM 2.0 compliance issue** | **Fixed?** | **Fix date** | **Backwards compatibility** |
|---|---|---|
diff --git a/articles/active-directory/app-provisioning/check-status-user-account-provisioning.md b/articles/active-directory/app-provisioning/check-status-user-account-provisioning.md
index d54aaefdc7ee7..224bd013a5581 100644
--- a/articles/active-directory/app-provisioning/check-status-user-account-provisioning.md
+++ b/articles/active-directory/app-provisioning/check-status-user-account-provisioning.md
@@ -8,7 +8,7 @@ ms.service: active-directory
ms.subservice: app-provisioning
ms.workload: identity
ms.topic: how-to
-ms.date: 05/11/2021
+ms.date: 05/30/2022
ms.author: kenwith
ms.reviewer: arvinh
---
@@ -21,10 +21,15 @@ This article describes how to check the status of provisioning jobs after they h
## Overview
-Provisioning connectors are set up and configured using the [Azure portal](https://portal.azure.com), by following the [provided documentation](../saas-apps/tutorial-list.md) for the supported application. Once configured and running, provisioning jobs can be reported on using one of two methods:
+Provisioning connectors are set up and configured using the [Azure portal](https://portal.azure.com), by following the [provided documentation](../saas-apps/tutorial-list.md) for the supported application. Once configured and running, provisioning jobs can be reported on using the following methods:
-* **Azure portal** - This article primarily describes retrieving report information from the [Azure portal](https://portal.azure.com), which provides both a provisioning summary report as well as detailed provisioning audit logs for a given application.
-* **Audit API** - Azure Active Directory also provides an Audit API that enables programmatic retrieval of the detailed provisioning audit logs. See [Azure Active Directory audit API reference](/graph/api/resources/directoryaudit) for documentation specific to using this API. While this article does not specifically cover how to use the API, it does detail the types of provisioning events that are recorded in the audit log.
+- The [Azure portal](https://portal.azure.com)
+
+- Streaming the provisioning logs into [Azure Monitor](../app-provisioning/application-provisioning-log-analytics.md). This method allows for extended data retention and building custom dashboards, alerts, and queries.
+
+- Querying the [Microsoft Graph API](/graph/api/resources/provisioningobjectsummary) for the provisioning logs.
+
+- Downloading the provisioning logs as a CSV or JSON file.
### Definitions
@@ -35,7 +40,7 @@ This article uses the following terms, defined below:
## Getting provisioning reports from the Azure portal
-To get provisioning report information for a given application, start by launching the [Azure portal](https://portal.azure.com) and **Azure Active Directory** > **Enterprise Apps** > **Provisioning logs (preview)** in the **Activity** section. You can also browse to the Enterprise Application for which provisioning is configured. For example, if you are provisioning users to LinkedIn Elevate, the navigation path to the application details is:
+To get provisioning report information for a given application, start by launching the [Azure portal](https://portal.azure.com) and **Azure Active Directory** > **Enterprise Apps** > **Provisioning logs** in the **Activity** section. You can also browse to the Enterprise Application for which provisioning is configured. For example, if you are provisioning users to LinkedIn Elevate, the navigation path to the application details is:
**Azure Active Directory > Enterprise Applications > All applications > LinkedIn Elevate**
@@ -54,10 +59,10 @@ The **Current Status** should be the first place admins look to check on the ope
![Summary report](./media/check-status-user-account-provisioning/provisioning-progress-bar-section.png)
-## Provisioning logs (preview)
+## Provisioning logs
+
+All activities performed by the provisioning service are recorded in the Azure AD [provisioning logs](../reports-monitoring/concept-provisioning-logs.md?context=azure/active-directory/manage-apps/context/manage-apps-context). You can access the provisioning logs in the Azure portal by selecting **Azure Active Directory** > **Enterprise Apps** > **Provisioning logs ** in the **Activity** section. You can search the provisioning data based on the name of the user or the identifier in either the source system or the target system. For details, see [Provisioning logs](../reports-monitoring/concept-provisioning-logs.md?context=azure/active-directory/manage-apps/context/manage-apps-context).
-All activities performed by the provisioning service are recorded in the Azure AD [provisioning logs](../reports-monitoring/concept-provisioning-logs.md?context=azure/active-directory/manage-apps/context/manage-apps-context). You can access the provisioning logs in the Azure portal by selecting **Azure Active Directory** > **Enterprise Apps** > **Provisioning logs (preview)** in the **Activity** section. You can search the provisioning data based on the name of the user or the identifier in either the source system or the target system. For details, see [Provisioning logs (preview)](../reports-monitoring/concept-provisioning-logs.md?context=azure/active-directory/manage-apps/context/manage-apps-context).
-Logged activity event types include:
## Troubleshooting
@@ -68,4 +73,4 @@ For scenario-based guidance on how to troubleshoot automatic user provisioning,
## Additional Resources
* [Managing user account provisioning for Enterprise Apps](configure-automatic-user-provisioning-portal.md)
-* [What is application access and single sign-on with Azure Active Directory?](../manage-apps/what-is-single-sign-on.md)
\ No newline at end of file
+* [What is application access and single sign-on with Azure Active Directory?](../manage-apps/what-is-single-sign-on.md)
diff --git a/articles/active-directory/app-provisioning/index.yml b/articles/active-directory/app-provisioning/index.yml
index ee755366806b7..f58a38c05446a 100644
--- a/articles/active-directory/app-provisioning/index.yml
+++ b/articles/active-directory/app-provisioning/index.yml
@@ -64,9 +64,4 @@ landingContent:
url: ../saas-apps/workday-inbound-tutorial.md?context=%2fazure%2factive-directory%2fapp-provisioning%2fcontext%2fapp-provisioning-context
- text: SAP SuccessFactors provisioning
url: ../saas-apps/sap-successfactors-inbound-provisioning-cloud-only-tutorial.md?context=%2fazure%2factive-directory%2fapp-provisioning%2fcontext%2fapp-provisioning-context
- - title: New in docs
- linkLists:
- - linkListType: whats-new
- links:
- - text: What's new in docs
- url: whats-new-docs.md
\ No newline at end of file
+
diff --git a/articles/active-directory/app-provisioning/on-premises-application-provisioning-architecture.md b/articles/active-directory/app-provisioning/on-premises-application-provisioning-architecture.md
index 27b2d2c2aa64d..f6580cdfaf66a 100644
--- a/articles/active-directory/app-provisioning/on-premises-application-provisioning-architecture.md
+++ b/articles/active-directory/app-provisioning/on-premises-application-provisioning-architecture.md
@@ -142,6 +142,14 @@ Microsoft provides direct support for the latest agent version and one version b
### Download link
You can download the latest version of the agent using [this link](https://aka.ms/onpremprovisioningagent).
+### 1.1.892.0
+
+May 20th, 2022 - released for download
+
+#### Fixed issues
+
+- We added support for exporting changes to integer attributes, which benefits customers using the generic LDAP connector.
+
### 1.1.846.0
April 11th, 2022 - released for download
diff --git a/articles/active-directory/app-provisioning/plan-auto-user-provisioning.md b/articles/active-directory/app-provisioning/plan-auto-user-provisioning.md
index ea9e26ef57606..92be6e9857896 100644
--- a/articles/active-directory/app-provisioning/plan-auto-user-provisioning.md
+++ b/articles/active-directory/app-provisioning/plan-auto-user-provisioning.md
@@ -237,7 +237,7 @@ It's common for a security review to be required as part of a deployment. If you
If the automatic user provisioning implementation fails to work as desired in the production environment, the following rollback steps below can assist you in reverting to a previous known good state:
-1. Review the [provisioning summary report](../app-provisioning/check-status-user-account-provisioning.md) and [provisioning logs](../app-provisioning/check-status-user-account-provisioning.md#provisioning-logs-preview) to determine what incorrect operations occurred on the affected users and/or groups.
+1. Review the [provisioning logs](../app-provisioning/check-status-user-account-provisioning.md) to determine what incorrect operations occurred on the affected users and/or groups.
1. Use provisioning audit logs to determine the last known good state of the users and/or groups affected. Also review the source systems (Azure AD or AD).
@@ -324,4 +324,4 @@ Refer to the following links to troubleshoot any issues that may turn up during
* [Export or import your provisioning configuration by using Microsoft Graph API](../app-provisioning/export-import-provisioning-configuration.md)
-* [Writing expressions for attribute mappings in Azure Active directory](../app-provisioning/functions-for-customizing-application-data.md)
\ No newline at end of file
+* [Writing expressions for attribute mappings in Azure Active directory](../app-provisioning/functions-for-customizing-application-data.md)
diff --git a/articles/active-directory/app-provisioning/plan-cloud-hr-provision.md b/articles/active-directory/app-provisioning/plan-cloud-hr-provision.md
index 3d32f5721e181..a3c3986ef7b12 100644
--- a/articles/active-directory/app-provisioning/plan-cloud-hr-provision.md
+++ b/articles/active-directory/app-provisioning/plan-cloud-hr-provision.md
@@ -463,7 +463,7 @@ It's common for a security review to be required as part of the deployment of a
The cloud HR user provisioning implementation might fail to work as desired in the production environment. If so, the following rollback steps can assist you in reverting to a previous known good state.
-1. Review the [provisioning summary report](../app-provisioning/check-status-user-account-provisioning.md#getting-provisioning-reports-from-the-azure-portal) and [provisioning logs](../app-provisioning/check-status-user-account-provisioning.md#provisioning-logs-preview) to determine what incorrect operations were performed on the affected users or groups. For more information on the provisioning summary report and logs, see [Manage cloud HR app user provisioning](#manage-your-configuration).
+1. Review the [provisioning logs](../app-provisioning/check-status-user-account-provisioning.md#provisioning-logs) to determine what incorrect operations were performed on the affected users or groups. For more information on the provisioning summary report and logs, see [Manage cloud HR app user provisioning](#manage-your-configuration).
2. The last known good state of the users or groups affected can be determined through the provisioning audit logs or by reviewing the target systems (Azure AD or Active Directory).
3. Work with the app owner to update the users or groups affected directly in the app by using the last known good state values.
diff --git a/articles/active-directory/app-provisioning/toc.yml b/articles/active-directory/app-provisioning/toc.yml
index c02f878695ae1..5746f05dd9a3e 100644
--- a/articles/active-directory/app-provisioning/toc.yml
+++ b/articles/active-directory/app-provisioning/toc.yml
@@ -8,8 +8,6 @@ items:
href: user-provisioning.md
- name: What is HR-driven provisioning?
href: what-is-hr-driven-provisioning.md
- - name: What's new in docs?
- href: whats-new-docs.md
- name: Tutorials
expanded: true
items:
diff --git a/articles/active-directory/app-provisioning/use-scim-to-provision-users-and-groups.md b/articles/active-directory/app-provisioning/use-scim-to-provision-users-and-groups.md
index 1575c83baafd8..ce1d26ec4dc93 100644
--- a/articles/active-directory/app-provisioning/use-scim-to-provision-users-and-groups.md
+++ b/articles/active-directory/app-provisioning/use-scim-to-provision-users-and-groups.md
@@ -8,7 +8,7 @@ ms.service: active-directory
ms.subservice: app-provisioning
ms.workload: identity
ms.topic: tutorial
-ms.date: 04/13/2022
+ms.date: 05/25/2022
ms.author: kenwith
ms.reviewer: arvinh
---
@@ -1350,7 +1350,7 @@ The SCIM spec doesn't define a SCIM-specific scheme for authentication and autho
|Username and password (not recommended or supported by Azure AD)|Easy to implement|Insecure - [Your Pa$$word doesn't matter](https://techcommunity.microsoft.com/t5/azure-active-directory-identity/your-pa-word-doesn-t-matter/ba-p/731984)|Not supported for new gallery or non-gallery apps.|
|Long-lived bearer token|Long-lived tokens do not require a user to be present. They are easy for admins to use when setting up provisioning.|Long-lived tokens can be hard to share with an admin without using insecure methods such as email. |Supported for gallery and non-gallery apps. |
|OAuth authorization code grant|Access tokens are much shorter-lived than passwords, and have an automated refresh mechanism that long-lived bearer tokens do not have. A real user must be present during initial authorization, adding a level of accountability. |Requires a user to be present. If the user leaves the organization, the token is invalid and authorization will need to be completed again.|Supported for gallery apps, but not non-gallery apps. However, you can provide an access token in the UI as the secret token for short term testing purposes. Support for OAuth code grant on non-gallery is in our backlog, in addition to support for configurable auth / token URLs on the gallery app.|
-|OAuth client credentials grant|Access tokens are much shorter-lived than passwords, and have an automated refresh mechanism that long-lived bearer tokens do not have. Both the authorization code grant and the client credentials grant create the same type of access token, so moving between these methods is transparent to the API. Provisioning can be completely automated, and new tokens can be silently requested without user interaction. ||Not supported for gallery and non-gallery apps. Support is in our backlog.|
+|OAuth client credentials grant|Access tokens are much shorter-lived than passwords, and have an automated refresh mechanism that long-lived bearer tokens do not have. Both the authorization code grant and the client credentials grant create the same type of access token, so moving between these methods is transparent to the API. Provisioning can be completely automated, and new tokens can be silently requested without user interaction. ||Supported for gallery apps, but not non-gallery apps. However, you can provide an access token in the UI as the secret token for short term testing purposes. Support for OAuth client credentials grant on non-gallery is in our backlog.|
> [!NOTE]
> It's not recommended to leave the token field blank in the Azure AD provisioning configuration custom app UI. The token generated is primarily available for testing purposes.
diff --git a/articles/active-directory/app-proxy/application-proxy-configure-complex-application.md b/articles/active-directory/app-proxy/application-proxy-configure-complex-application.md
index 5d7ed9aa6d90d..da4efd9ff4c5c 100644
--- a/articles/active-directory/app-proxy/application-proxy-configure-complex-application.md
+++ b/articles/active-directory/app-proxy/application-proxy-configure-complex-application.md
@@ -50,7 +50,7 @@ This article provides you with the information you need to configure wildcard ap
- Note - Regular application will always take precedence over a complex app (wildcard application).
## Pre-requisites
-Before you get started with single sign-on for header-based authentication apps, make sure your environment is ready with the following settings and configurations:
+Before you get started with Application Proxy Complex application scenario apps, make sure your environment is ready with the following settings and configurations:
- You need to enable Application Proxy and install a connector that has line of site to your applications. See the tutorial [Add an on-premises application for remote access through Application Proxy](application-proxy-add-on-premises-application.md#add-an-on-premises-app-to-azure-ad) to learn how to prepare your on-premises environment, install and register a connector, and test the connector.
diff --git a/articles/active-directory/app-proxy/index.yml b/articles/active-directory/app-proxy/index.yml
index a6b6092507dcb..3cce2a03af54b 100644
--- a/articles/active-directory/app-proxy/index.yml
+++ b/articles/active-directory/app-proxy/index.yml
@@ -46,9 +46,4 @@ landingContent:
url: ../manage-apps/v2-howto-app-gallery-listing.md
- text: Understand the platform
url: ../develop/v2-overview.md
- - title: New in docs
- linkLists:
- - linkListType: whats-new
- links:
- - text: What's new in docs
- url: whats-new-docs.md
+
diff --git a/articles/active-directory/app-proxy/toc.yml b/articles/active-directory/app-proxy/toc.yml
index 175c497922717..e20591e0ecc3f 100644
--- a/articles/active-directory/app-proxy/toc.yml
+++ b/articles/active-directory/app-proxy/toc.yml
@@ -5,8 +5,6 @@
items:
- name: What is Application Proxy?
href: what-is-application-proxy.md
- - name: What's new in docs?
- href: whats-new-docs.md
- name: Tutorials
expanded: true
items:
@@ -178,4 +176,4 @@
- name: Stack Overflow
href: https://stackoverflow.com/questions/tagged/azure-active-directory
- name: Videos
- href: https://azure.microsoft.com/documentation/videos/index/?services=active-directory
\ No newline at end of file
+ href: https://azure.microsoft.com/documentation/videos/index/?services=active-directory
diff --git a/articles/active-directory/authentication/TOC.yml b/articles/active-directory/authentication/TOC.yml
index 3c40922d9eadc..68b31d074cd1b 100644
--- a/articles/active-directory/authentication/TOC.yml
+++ b/articles/active-directory/authentication/TOC.yml
@@ -287,7 +287,7 @@
- name: Azure PowerShell cmdlets
href: /powershell/azure/
- name: Microsoft Graph REST API beta
- href: /graph/api/resources/authenticationmethods-overview?view=graph-rest-beta
+ href: /graph/api/resources/authenticationmethods-overview
- name: Service limits and restrictions
href: ../enterprise-users/directory-service-limits-restrictions.md
- name: FIDO2 compatibility
diff --git a/articles/active-directory/authentication/concept-authentication-passwordless.md b/articles/active-directory/authentication/concept-authentication-passwordless.md
index 7c84a9ab92c03..b52abb7a11265 100644
--- a/articles/active-directory/authentication/concept-authentication-passwordless.md
+++ b/articles/active-directory/authentication/concept-authentication-passwordless.md
@@ -128,6 +128,7 @@ The following providers offer FIDO2 security keys of different form factors that
| Nymi | ![y] | ![n]| ![y]| ![n]| ![n] | https://www.nymi.com/nymi-band |
| Octatco | ![y] | ![y]| ![n]| ![n]| ![n] | https://octatco.com/ |
| OneSpan Inc. | ![n] | ![y]| ![n]| ![y]| ![n] | https://www.onespan.com/products/fido |
+| Swissbit | ![n] | ![y]| ![y]| ![n]| ![n] | https://www.swissbit.com/en/products/ishield-fido2/ |
| Thales Group | ![n] | ![y]| ![y]| ![n]| ![n] | https://cpl.thalesgroup.com/access-management/authenticators/fido-devices |
| Thetis | ![y] | ![y]| ![y]| ![y]| ![n] | https://thetis.io/collections/fido2 |
| Token2 Switzerland | ![y] | ![y]| ![y]| ![n]| ![n] | https://www.token2.swiss/shop/product/token2-t2f2-alu-fido2-u2f-and-totp-security-key |
@@ -136,6 +137,7 @@ The following providers offer FIDO2 security keys of different form factors that
| Yubico | ![y] | ![y]| ![y]| ![n]| ![y] | https://www.yubico.com/solutions/passwordless/ |
+
[y]: ./media/fido2-compatibility/yes.png
[n]: ./media/fido2-compatibility/no.png
diff --git a/articles/active-directory/authentication/concept-registration-mfa-sspr-combined.md b/articles/active-directory/authentication/concept-registration-mfa-sspr-combined.md
index 79f05568ec44b..92c2dfb10a889 100644
--- a/articles/active-directory/authentication/concept-registration-mfa-sspr-combined.md
+++ b/articles/active-directory/authentication/concept-registration-mfa-sspr-combined.md
@@ -6,7 +6,7 @@ services: active-directory
ms.service: active-directory
ms.subservice: authentication
ms.topic: conceptual
-ms.date: 03/1/2022
+ms.date: 05/24/2022
ms.author: justinha
author: justinha
@@ -73,6 +73,9 @@ Users can set one of the following options as the default Multi-Factor Authentic
- Phone call
- Text message
+>[!NOTE]
+>Virtual phone numbers are not supported for Voice calls or SMS messages.
+
Third party authenticator apps do not provide push notification. As we continue to add more authentication methods to Azure AD, those methods become available in combined registration.
## Combined registration modes
diff --git a/articles/active-directory/authentication/fido2-compatibility.md b/articles/active-directory/authentication/fido2-compatibility.md
index 55c1b360c95ce..43ba617bb1f4a 100644
--- a/articles/active-directory/authentication/fido2-compatibility.md
+++ b/articles/active-directory/authentication/fido2-compatibility.md
@@ -28,12 +28,12 @@ This table shows support for authenticating Azure Active Directory (Azure AD) an
| | USB | NFC | BLE | USB | NFC | BLE | USB | NFC | BLE | USB | NFC | BLE |
| **Windows** | ![Chrome supports USB on Windows for Azure AD accounts.][y] | ![Chrome supports NFC on Windows for Azure AD accounts.][y] | ![Chrome supports BLE on Windows for Azure AD accounts.][y] | ![Edge supports USB on Windows for Azure AD accounts.][y] | ![Edge supports NFC on Windows for Azure AD accounts.][y] | ![Edge supports BLE on Windows for Azure AD accounts.][y] | ![Firefox supports USB on Windows for Azure AD accounts.][y] | ![Firefox supports NFC on Windows for Azure AD accounts.][y] | ![Firefox supports BLE on Windows for Azure AD accounts.][y] | ![Safari supports USB on Windows for Azure AD accounts.][n] | ![Safari supports NFC on Windows for Azure AD accounts.][n] | ![Safari supports BLE on Windows for Azure AD accounts.][n] |
| **macOS** | ![Chrome supports USB on macOS for Azure AD accounts.][y] | ![Chrome supports NFC on macOS for Azure AD accounts.][n] | ![Chrome supports BLE on macOS for Azure AD accounts.][n] | ![Edge supports USB on macOS for Azure AD accounts.][y] | ![Edge supports NFC on macOS for Azure AD accounts.][n] | ![Edge supports BLE on macOS for Azure AD accounts.][n] | ![Firefox supports USB on macOS for Azure AD accounts.][n] | ![Firefox supports NFC on macOS for Azure AD accounts.][n] | ![Firefox supports BLE on macOS for Azure AD accounts.][n] | ![Safari supports USB on macOS for Azure AD accounts.][n] | ![Safari supports NFC on macOS for Azure AD accounts.][n] | ![Safari supports BLE on macOS for Azure AD accounts.][n] |
-| **ChromeOS** | ![Chrome supports USB on ChromeOS for Azure AD accounts.][y] | ![Chrome supports NFC on ChromeOS for Azure AD accounts.][n] | ![Chrome supports BLE on ChromeOS for Azure AD accounts.][n] | ![Edge supports USB on ChromeOS for Azure AD accounts.][n] | ![Edge supports NFC on ChromeOS for Azure AD accounts.][n] | ![Edge supports BLE on ChromeOS for Azure AD accounts.][n] | ![Firefox supports USB on ChromeOS for Azure AD accounts.][n] | ![Firefox supports NFC on ChromeOS for Azure AD accounts.][n] | ![Firefox supports BLE on ChromeOS for Azure AD accounts.][n] | ![Safari supports USB on ChromeOS for Azure AD accounts.][n] | ![Safari supports NFC on ChromeOS for Azure AD accounts.][n] | ![Safari supports BLE on ChromeOS for Azure AD accounts.][n] |
+| **ChromeOS** | ![Chrome supports USB on ChromeOS for Azure AD accounts.][y]* | ![Chrome supports NFC on ChromeOS for Azure AD accounts.][n] | ![Chrome supports BLE on ChromeOS for Azure AD accounts.][n] | ![Edge supports USB on ChromeOS for Azure AD accounts.][n] | ![Edge supports NFC on ChromeOS for Azure AD accounts.][n] | ![Edge supports BLE on ChromeOS for Azure AD accounts.][n] | ![Firefox supports USB on ChromeOS for Azure AD accounts.][n] | ![Firefox supports NFC on ChromeOS for Azure AD accounts.][n] | ![Firefox supports BLE on ChromeOS for Azure AD accounts.][n] | ![Safari supports USB on ChromeOS for Azure AD accounts.][n] | ![Safari supports NFC on ChromeOS for Azure AD accounts.][n] | ![Safari supports BLE on ChromeOS for Azure AD accounts.][n] |
| **Linux** | ![Chrome supports USB on Linux for Azure AD accounts.][y] | ![Chrome supports NFC on Linux for Azure AD accounts.][n] | ![Chrome supports BLE on Linux for Azure AD accounts.][n] | ![Edge supports USB on Linux for Azure AD accounts.][n] | ![Edge supports NFC on Linux for Azure AD accounts.][n] | ![Edge supports BLE on Linux for Azure AD accounts.][n] | ![Firefox supports USB on Linux for Azure AD accounts.][n] | ![Firefox supports NFC on Linux for Azure AD accounts.][n] | ![Firefox supports BLE on Linux for Azure AD accounts.][n] | ![Safari supports USB on Linux for Azure AD accounts.][n] | ![Safari supports NFC on Linux for Azure AD accounts.][n] | ![Safari supports BLE on Linux for Azure AD accounts.][n] |
| **iOS** | ![Chrome supports USB on iOS for Azure AD accounts.][n] | ![Chrome supports NFC on iOS for Azure AD accounts.][n] | ![Chrome supports BLE on iOS for Azure AD accounts.][n] | ![Edge supports USB on iOS for Azure AD accounts.][n] | ![Edge supports NFC on Linux for Azure AD accounts.][n] | ![Edge supports BLE on Linux for Azure AD accounts.][n] | ![Firefox supports USB on Linux for Azure AD accounts.][n] | ![Firefox supports NFC on iOS for Azure AD accounts.][n] | ![Firefox supports BLE on iOS for Azure AD accounts.][n] | ![Safari supports USB on iOS for Azure AD accounts.][n] | ![Safari supports NFC on iOS for Azure AD accounts.][n] | ![Safari supports BLE on iOS for Azure AD accounts.][n] |
| **Android** | ![Chrome supports USB on Android for Azure AD accounts.][n] | ![Chrome supports NFC on Android for Azure AD accounts.][n] | ![Chrome supports BLE on Android for Azure AD accounts.][n] | ![Edge supports USB on Android for Azure AD accounts.][n] | ![Edge supports NFC on Android for Azure AD accounts.][n] | ![Edge supports BLE on Android for Azure AD accounts.][n] | ![Firefox supports USB on Android for Azure AD accounts.][n] | ![Firefox supports NFC on Android for Azure AD accounts.][n] | ![Firefox supports BLE on Android for Azure AD accounts.][n] | ![Safari supports USB on Android for Azure AD accounts.][n] | ![Safari supports NFC on Android for Azure AD accounts.][n] | ![Safari supports BLE on Android for Azure AD accounts.][n] |
-
+*Key Registration is currently not supported with ChromeOS/Chrome Browser.
## Unsupported browsers
diff --git a/articles/active-directory/authentication/how-to-mfa-number-match.md b/articles/active-directory/authentication/how-to-mfa-number-match.md
index a01ffbe36d1dd..60bc32c970a5b 100644
--- a/articles/active-directory/authentication/how-to-mfa-number-match.md
+++ b/articles/active-directory/authentication/how-to-mfa-number-match.md
@@ -243,11 +243,10 @@ To enable number matching in the Azure AD portal, complete the following steps:
![Screenshot of enabling number match.](media/howto-authentication-passwordless-phone/enable-number-matching.png)
>[!NOTE]
->[Least privilege role in Azure Active Directory - Multi-factor Authentication](https://docs.microsoft.com/azure/active-directory/roles/delegate-by-task#multi-factor-authentication)
+>[Least privilege role in Azure Active Directory - Multi-factor Authentication](../roles/delegate-by-task.md#multi-factor-authentication)
Number matching is not supported for Apple Watch notifications. Apple Watch need to use their phone to approve notifications when number matching is enabled.
## Next steps
-[Authentication methods in Azure Active Directory - Microsoft Authenticator app](concept-authentication-authenticator-app.md)
-
+[Authentication methods in Azure Active Directory - Microsoft Authenticator app](concept-authentication-authenticator-app.md)
\ No newline at end of file
diff --git a/articles/active-directory/authentication/how-to-migrate-mfa-server-to-azure-mfa-with-federation.md b/articles/active-directory/authentication/how-to-migrate-mfa-server-to-azure-mfa-with-federation.md
index 6c435910c295e..197bbaafbd097 100644
--- a/articles/active-directory/authentication/how-to-migrate-mfa-server-to-azure-mfa-with-federation.md
+++ b/articles/active-directory/authentication/how-to-migrate-mfa-server-to-azure-mfa-with-federation.md
@@ -175,7 +175,7 @@ This section covers final steps before migrating user phone numbers.
### Set federatedIdpMfaBehavior to enforceMfaByFederatedIdp
-For federated domains, MFA may be enforced by Azure AD Conditional Access or by the on-premises federation provider. Each federated domain has a Microsoft Graph PowerShell security setting named **federatedIdpMfaBehavior**. You can set **federatedIdpMfaBehavior** to `enforceMfaByFederatedIdp` so Azure AD accepts MFA that's performed by the federated identity provider. If the federated identity provider didn't perform MFA, Azure AD redirects the request to the federated identity provider to perform MFA. For more information, see [federatedIdpMfaBehavior](/graph/api/resources/internaldomainfederation?view=graph-rest-beta#federatedidpmfabehavior-values).
+For federated domains, MFA may be enforced by Azure AD Conditional Access or by the on-premises federation provider. Each federated domain has a Microsoft Graph PowerShell security setting named **federatedIdpMfaBehavior**. You can set **federatedIdpMfaBehavior** to `enforceMfaByFederatedIdp` so Azure AD accepts MFA that's performed by the federated identity provider. If the federated identity provider didn't perform MFA, Azure AD redirects the request to the federated identity provider to perform MFA. For more information, see [federatedIdpMfaBehavior](/graph/api/resources/internaldomainfederation?view=graph-rest-beta#federatedidpmfabehavior-values&preserve-view=true ).
>[!NOTE]
> The **federatedIdpMfaBehavior** setting is an evolved version of the **SupportsMfa** property of the [Set-MsolDomainFederationSettings MSOnline v1 PowerShell cmdlet](/powershell/module/msonline/set-msoldomainfederationsettings).
diff --git a/articles/active-directory/authentication/howto-authentication-passwordless-security-key-on-premises.md b/articles/active-directory/authentication/howto-authentication-passwordless-security-key-on-premises.md
index c9ac792e5ead8..948f391f98bf0 100644
--- a/articles/active-directory/authentication/howto-authentication-passwordless-security-key-on-premises.md
+++ b/articles/active-directory/authentication/howto-authentication-passwordless-security-key-on-premises.md
@@ -288,17 +288,10 @@ Make sure that enough DCs are patched to respond in time to service your resourc
> [!NOTE]
> The `/keylist` switch in the `nltest` command is available in client Windows 10 v2004 and later.
-### What if I have a CloudTGT but it never gets exchange for a OnPremTGT when I am using Windows Hello for Business Cloud Trust?
-
-Make sure that the user you are signed in as, is a member of the groups of users that can use FIDO2 as an authentication method, or enable it for all users.
-
-> [!NOTE]
-> Even if you are not explicitly using a security key to sign-in to your device, the underlying technology is dependent on the FIDO2 infrastructure requirements.
-
### Do FIDO2 security keys work in a Windows login with RODC present in the hybrid environment?
An FIDO2 Windows login looks for a writable DC to exchange the user TGT. As long as you have at least one writable DC per site, the login works fine.
## Next steps
-[Learn more about passwordless authentication](concept-authentication-passwordless.md)
\ No newline at end of file
+[Learn more about passwordless authentication](concept-authentication-passwordless.md)
diff --git a/articles/active-directory/authentication/howto-authentication-temporary-access-pass.md b/articles/active-directory/authentication/howto-authentication-temporary-access-pass.md
index 32d47f58ff618..b01a8819962d8 100644
--- a/articles/active-directory/authentication/howto-authentication-temporary-access-pass.md
+++ b/articles/active-directory/authentication/howto-authentication-temporary-access-pass.md
@@ -1,21 +1,21 @@
---
title: Configure a Temporary Access Pass in Azure AD to register Passwordless authentication methods
-description: Learn how to configure and enable users to to register Passwordless authentication methods by using a Temporary Access Pass
+description: Learn how to configure and enable users to register Passwordless authentication methods by using a Temporary Access Pass
services: active-directory
ms.service: active-directory
ms.subservice: authentication
ms.topic: conceptual
-ms.date: 10/22/2021
+ms.date: 05/24/2022
ms.author: justinha
-author: inbarckMS
+author: tilarso
manager: karenhoran
-ms.reviewer: inbarc
+ms.reviewer: tilarso
ms.collection: M365-identity-device-management
---
-# Configure Temporary Access Pass in Azure AD to register Passwordless authentication methods (Preview)
+# Configure Temporary Access Pass in Azure AD to register Passwordless authentication methods
Passwordless authentication methods, such as FIDO2 and Passwordless Phone Sign-in through the Microsoft Authenticator app, enable users to sign in securely without a password.
Users can bootstrap Passwordless methods in one of two ways:
@@ -23,28 +23,30 @@ Users can bootstrap Passwordless methods in one of two ways:
- Using existing Azure AD Multi-Factor Authentication methods
- Using a Temporary Access Pass (TAP)
-A Temporary Access Pass is a time-limited passcode issued by an admin that satisfies strong authentication requirements and can be used to onboard other authentication methods, including Passwordless ones.
+A Temporary Access Pass is a time-limited passcode issued by an admin that satisfies strong authentication requirements and can be used to onboard other authentication methods, including Passwordless ones such as Microsoft Authenticator or even Windows Hello.
A Temporary Access Pass also makes recovery easier when a user has lost or forgotten their strong authentication factor like a FIDO2 security key or Microsoft Authenticator app, but needs to sign in to register new strong authentication methods.
This article shows you how to enable and use a Temporary Access Pass in Azure AD using the Azure portal.
You can also perform these actions using the REST APIs.
->[!NOTE]
->Temporary Access Pass is currently in public preview. Some features might not be supported or have limited capabilities.
-
## Enable the Temporary Access Pass policy
A Temporary Access Pass policy defines settings, such as the lifetime of passes created in the tenant, or the users and groups who can use a Temporary Access Pass to sign-in.
-Before anyone can sign in with a Temporary Access Pass, you need to enable the authentication method policy and choose which users and groups can sign in by using a Temporary Access Pass.
+Before anyone can sign-in with a Temporary Access Pass, you need to enable Temporary Access Pass in the authentication method policy and choose which users and groups can sign in by using a Temporary Access Pass.
Although you can create a Temporary Access Pass for any user, only those included in the policy can sign-in with it.
Global administrator and Authentication Method Policy administrator role holders can update the Temporary Access Pass authentication method policy.
To configure the Temporary Access Pass authentication method policy:
-1. Sign in to the Azure portal as a Global admin and click **Azure Active Directory** > **Security** > **Authentication methods** > **Temporary Access Pass**.
-1. Click **Yes** to enable the policy, select which users have the policy applied, and any **General** settings.
+1. Sign in to the Azure portal as a Global admin or Authentication Policy admin and click **Azure Active Directory** > **Security** > **Authentication methods** > **Temporary Access Pass**.
+![Screenshot of how to manage Temporary Access Pass within the authentication method policy experience.](./media/how-to-authentication-temporary-access-pass/policy.png)
+1. Set Enable to **Yes** to enable the policy, select which users have the policy applied.
+![Screenshot of how to enable the Temporary Access Pass authentication method policy.](./media/how-to-authentication-temporary-access-pass/policy-scope.png)
+1. (Optional) Click **Configure** and modify the default Temporary Access Pass settings, such as setting maximum lifetime, or length.
+![Screenshot of how to customize the settings for Temporary Access Pass.](./media/how-to-authentication-temporary-access-pass/policy-settings.png)
+1. Click **Save** to apply the policy.
+
- ![Screenshot of how to enable the Temporary Access Pass authentication method policy](./media/how-to-authentication-temporary-access-pass/policy.png)
The default value and the range of allowed values are described in the following table.
@@ -52,7 +54,7 @@ To configure the Temporary Access Pass authentication method policy:
| Setting | Default values | Allowed values | Comments |
|---|---|---|---|
| Minimum lifetime | 1 hour | 10 – 43200 Minutes (30 days) | Minimum number of minutes that the Temporary Access Pass is valid. |
- | Maximum lifetime | 24 hours | 10 – 43200 Minutes (30 days) | Maximum number of minutes that the Temporary Access Pass is valid. |
+ | Maximum lifetime | 8 hours | 10 – 43200 Minutes (30 days) | Maximum number of minutes that the Temporary Access Pass is valid. |
| Default lifetime | 1 hour | 10 – 43200 Minutes (30 days) | Default values can be override by the individual passes, within the minimum and maximum lifetime configured by the policy. |
| One-time use | False | True / False | When the policy is set to false, passes in the tenant can be used either once or more than once during its validity (maximum lifetime). By enforcing one-time use in the Temporary Access Pass policy, all passes created in the tenant will be created as one-time use. |
| Length | 8 | 8-48 characters | Defines the length of the passcode. |
@@ -71,14 +73,14 @@ These roles can perform the following actions related to a Temporary Access Pass
1. Click **Azure Active Directory**, browse to Users, select a user, such as *Chris Green*, then choose **Authentication methods**.
1. If needed, select the option to **Try the new user authentication methods experience**.
1. Select the option to **Add authentication methods**.
-1. Below **Choose method**, click **Temporary Access Pass (Preview)**.
+1. Below **Choose method**, click **Temporary Access Pass**.
1. Define a custom activation time or duration and click **Add**.
- ![Screenshot of how to create a Temporary Access Pass](./media/how-to-authentication-temporary-access-pass/create.png)
+ ![Screenshot of how to create a Temporary Access Pass.](./media/how-to-authentication-temporary-access-pass/create.png)
1. Once added, the details of the Temporary Access Pass are shown. Make a note of the actual Temporary Access Pass value. You provide this value to the user. You can't view this value after you click **Ok**.
- ![Screenshot of Temporary Access Pass details](./media/how-to-authentication-temporary-access-pass/details.png)
+ ![Screenshot of Temporary Access Pass details.](./media/how-to-authentication-temporary-access-pass/details.png)
The following commands show how to create and get a Temporary Access Pass by using PowerShell:
@@ -86,34 +88,34 @@ The following commands show how to create and get a Temporary Access Pass by usi
# Create a Temporary Access Pass for a user
$properties = @{}
$properties.isUsableOnce = $True
-$properties.startDateTime = '2021-03-11 06:00:00'
+$properties.startDateTime = '2022-05-23 06:00:00'
$propertiesJSON = $properties | ConvertTo-Json
New-MgUserAuthenticationTemporaryAccessPassMethod -UserId user2@contoso.com -BodyParameter $propertiesJSON
Id CreatedDateTime IsUsable IsUsableOnce LifetimeInMinutes MethodUsabilityReason StartDateTime TemporaryAccessPass
-- --------------- -------- ------------ ----------------- --------------------- ------------- -------------------
-c5dbd20a-8b8f-4791-a23f-488fcbde3b38 9/03/2021 11:19:17 PM False True 60 NotYetValid 11/03/2021 6:00:00 AM TAPRocks!
+c5dbd20a-8b8f-4791-a23f-488fcbde3b38 5/22/2022 11:19:17 PM False True 60 NotYetValid 23/05/2022 6:00:00 AM TAPRocks!
# Get a user's Temporary Access Pass
Get-MgUserAuthenticationTemporaryAccessPassMethod -UserId user3@contoso.com
Id CreatedDateTime IsUsable IsUsableOnce LifetimeInMinutes MethodUsabilityReason StartDateTime TemporaryAccessPass
-- --------------- -------- ------------ ----------------- --------------------- ------------- -------------------
-c5dbd20a-8b8f-4791-a23f-488fcbde3b38 9/03/2021 11:19:17 PM False True 60 NotYetValid 11/03/2021 6:00:00 AM
+c5dbd20a-8b8f-4791-a23f-488fcbde3b38 5/22/2022 11:19:17 PM False True 60 NotYetValid 23/05/2022 6:00:00 AM
```
## Use a Temporary Access Pass
-The most common use for a Temporary Access Pass is for a user to register authentication details during the first sign-in, without the need to complete additional security prompts. Authentication methods are registered at [https://aka.ms/mysecurityinfo](https://aka.ms/mysecurityinfo). Users can also update existing authentication methods here.
+The most common use for a Temporary Access Pass is for a user to register authentication details during the first sign-in or device setup, without the need to complete additional security prompts. Authentication methods are registered at [https://aka.ms/mysecurityinfo](https://aka.ms/mysecurityinfo). Users can also update existing authentication methods here.
1. Open a web browser to [https://aka.ms/mysecurityinfo](https://aka.ms/mysecurityinfo).
1. Enter the UPN of the account you created the Temporary Access Pass for, such as *tapuser@contoso.com*.
1. If the user is included in the Temporary Access Pass policy, they will see a screen to enter their Temporary Access Pass.
1. Enter the Temporary Access Pass that was displayed in the Azure portal.
- ![Screenshot of how to enter a Temporary Access Pass](./media/how-to-authentication-temporary-access-pass/enter.png)
+ ![Screenshot of how to enter a Temporary Access Pass.](./media/how-to-authentication-temporary-access-pass/enter.png)
>[!NOTE]
>For federated domains, a Temporary Access Pass is preferred over federation. A user with a Temporary Access Pass will complete the authentication in Azure AD and will not get redirected to the federated Identity Provider (IdP).
@@ -122,12 +124,27 @@ The user is now signed in and can update or register a method such as FIDO2 secu
Users who update their authentication methods due to losing their credentials or device should make sure they remove the old authentication methods.
Users can also continue to sign-in by using their password; a TAP doesn’t replace a user’s password.
+
+### User management of Temporary Access Pass
+
+Users managing their security information at [https://aka.ms/mysecurityinfo](https://aka.ms/mysecurityinfo) will see an entry for the Temporary Access Pass. If a user does not have any other registered methods they will be presented a banner at the top of the screen requesting them to add a new sign-in method. Users can additionally view the TAP expiration time, and delete the TAP if no longer needed.
+
+![Screenshot of how users can manage a Temporary Access Pass in My Security Info.](./media/how-to-authentication-temporary-access-pass/tap-my-security-info.png)
+
+### Windows device setup
+Users with a Temporary Access Pass can navigate the setup process on Windows 10 and 11 to perform device join operations and configure Windows Hello For Business. Temporary Access Pass usage for setting up Windows Hello for Business varies based on the devices joined state:
+- During Azure AD Join setup, users can authenticate with a TAP (no password required) and setup Windows Hello for Business.
+- On already Azure AD Joined devices, users must first authenticate with another method such as a password, smartcard or FIDO2 key, before using TAP to setup Windows Hello for Business.
+- On Hybrid Azure AD Joined devices, users must first authenticate with another method such as a password, smartcard or FIDO2 key, before using TAP to setup Windows Hello for Business.
+
+![Screenshot of how to enter Temporary Access Pass when setting up Windows 10.](./media/how-to-authentication-temporary-access-pass/windows-10-tap.png)
+
### Passwordless phone sign-in
Users can also use their Temporary Access Pass to register for Passwordless phone sign-in directly from the Authenticator app.
For more information, see [Add your work or school account to the Microsoft Authenticator app](https://support.microsoft.com/account-billing/add-your-work-or-school-account-to-the-microsoft-authenticator-app-43a73ab5-b4e8-446d-9e54-2a4cb8e4e93c).
-![Screenshot of how to enter a Temporary Access Pass using work or school account](./media/how-to-authentication-temporary-access-pass/enter-work-school.png)
+![Screenshot of how to enter a Temporary Access Pass using work or school account.](./media/how-to-authentication-temporary-access-pass/enter-work-school.png)
### Guest access
@@ -144,7 +161,7 @@ Users need to reauthenticate with different authentication methods after the Tem
Under the **Authentication methods** for a user, the **Detail** column shows when the Temporary Access Pass expired. You can delete an expired Temporary Access Pass using the following steps:
1. In the Azure AD portal, browse to **Users**, select a user, such as *Tap User*, then choose **Authentication methods**.
-1. On the right-hand side of the **Temporary Access Pass (Preview)** authentication method shown in the list, select **Delete**.
+1. On the right-hand side of the **Temporary Access Pass** authentication method shown in the list, select **Delete**.
You can also use PowerShell:
@@ -157,7 +174,7 @@ Remove-MgUserAuthenticationTemporaryAccessPassMethod -UserId user3@contoso.com -
- A user can only have one Temporary Access Pass. The passcode can be used during the start and end time of the Temporary Access Pass.
- If the user requires a new Temporary Access Pass:
- - If the existing Temporary Access Pass is valid, the admin needs to delete the existing Temporary Access Pass and create a new pass for the user.
+ - If the existing Temporary Access Pass is valid, the admin can create a new Temporary Access Pass which will override the existing valid Temporary Access Pass.
- If the existing Temporary Access Pass has expired, a new Temporary Access Pass will override the existing Temporary Access Pass.
For more information about NIST standards for onboarding and recovery, see [NIST Special Publication 800-63A](https://pages.nist.gov/800-63-3/sp800-63a.html#sec4).
@@ -167,10 +184,9 @@ For more information about NIST standards for onboarding and recovery, see [NIST
Keep these limitations in mind:
- When using a one-time Temporary Access Pass to register a Passwordless method such as FIDO2 or Phone sign-in, the user must complete the registration within 10 minutes of sign-in with the one-time Temporary Access Pass. This limitation does not apply to a Temporary Access Pass that can be used more than once.
-- Temporary Access Pass is in public preview and currently not available in Azure for US Government.
- Users in scope for Self Service Password Reset (SSPR) registration policy *or* [Identity Protection Multi-factor authentication registration policy](../identity-protection/howto-identity-protection-configure-mfa-policy.md) will be required to register authentication methods after they have signed in with a Temporary Access Pass.
Users in scope for these policies will get redirected to the [Interrupt mode of the combined registration](concept-registration-mfa-sspr-combined.md#combined-registration-modes). This experience does not currently support FIDO2 and Phone Sign-in registration.
-- A Temporary Access Pass cannot be used with the Network Policy Server (NPS) extension and Active Directory Federation Services (AD FS) adapter, or during Windows Setup/Out-of-Box-Experience (OOBE), Autopilot, or to deploy Windows Hello for Business.
+- A Temporary Access Pass cannot be used with the Network Policy Server (NPS) extension and Active Directory Federation Services (AD FS) adapter.
## Troubleshooting
diff --git a/articles/active-directory/authentication/howto-mfa-adfs.md b/articles/active-directory/authentication/howto-mfa-adfs.md
index 263338232bc7b..6216fecb45858 100644
--- a/articles/active-directory/authentication/howto-mfa-adfs.md
+++ b/articles/active-directory/authentication/howto-mfa-adfs.md
@@ -20,7 +20,7 @@ ms.collection: M365-identity-device-management
If your organization is federated with Azure Active Directory, use Azure AD Multi-Factor Authentication or Active Directory Federation Services (AD FS) to secure resources that are accessed by Azure AD. Use the following procedures to secure Azure Active Directory resources with either Azure AD Multi-Factor Authentication or Active Directory Federation Services.
>[!NOTE]
->Set the domain setting [federatedIdpMfaBehavior](/graph/api/resources/internaldomainfederation?view=graph-rest-beta#federatedidpmfabehavior-values) to `enforceMfaByFederatedIdp` (recommended) or **SupportsMFA** to `$True`. The **federatedIdpMfaBehavior** setting overrides **SupportsMFA** when both are set.
+>Set the domain setting [federatedIdpMfaBehavior](/graph/api/resources/internaldomainfederation?view=graph-rest-beta#federatedidpmfabehavior-values&preserve-view=true) to `enforceMfaByFederatedIdp` (recommended) or **SupportsMFA** to `$True`. The **federatedIdpMfaBehavior** setting overrides **SupportsMFA** when both are set.
## Secure Azure AD resources using AD FS
diff --git a/articles/active-directory/authentication/howto-mfa-getstarted.md b/articles/active-directory/authentication/howto-mfa-getstarted.md
index 9b59b148021e4..1fcf5abed4a8d 100644
--- a/articles/active-directory/authentication/howto-mfa-getstarted.md
+++ b/articles/active-directory/authentication/howto-mfa-getstarted.md
@@ -4,7 +4,7 @@ description: Learn about deployment considerations and strategy for successful i
ms.service: active-directory
ms.subservice: authentication
ms.topic: how-to
-ms.date: 02/02/2022
+ms.date: 06/01/2022
ms.author: mtillman
author: mtillman
manager: martinco
@@ -246,7 +246,7 @@ You can monitor authentication method registration and usage across your organiz
The Azure AD sign in reports include authentication details for events when a user is prompted for MFA, and if any Conditional Access policies were in use. You can also use PowerShell for reporting on users registered for Azure AD Multi-Factor Authentication.
-NPS extension and AD FS logs can be viewed from **Security** > **MFA** > **Activity report**.
+NPS extension and AD FS logs can be viewed from **Security** > **MFA** > **Activity report**. Inclusion of this activity in the [Sign-in logs](../reports-monitoring/concept-sign-ins.md) is currently in Preview.
For more information, and additional Azure AD Multi-Factor Authentication reports, see [Review Azure AD Multi-Factor Authentication events](howto-mfa-reporting.md#view-the-azure-ad-sign-ins-report).
diff --git a/articles/active-directory/authentication/howto-mfa-nps-extension-advanced.md b/articles/active-directory/authentication/howto-mfa-nps-extension-advanced.md
index db5b999e32abe..a90c31e1cabb2 100644
--- a/articles/active-directory/authentication/howto-mfa-nps-extension-advanced.md
+++ b/articles/active-directory/authentication/howto-mfa-nps-extension-advanced.md
@@ -6,7 +6,7 @@ services: multi-factor-authentication
ms.service: active-directory
ms.subservice: authentication
ms.topic: how-to
-ms.date: 07/11/2018
+ms.date: 06/01/2022
ms.author: justinha
author: justinha
@@ -23,13 +23,13 @@ The Network Policy Server (NPS) extension extends your cloud-based Azure AD Mult
Since the NPS extension connects to both your on-premises and cloud directories, you might encounter an issue where your on-premises user principal names (UPNs) don't match the names in the cloud. To solve this problem, use alternate login IDs.
-Within the NPS extension, you can designate an Active Directory attribute to be used in place of the UPN for Azure AD Multi-Factor Authentication. This enables you to protect your on-premises resources with two-step verification without modifying your on-premises UPNs.
+Within the NPS extension, you can designate an Active Directory attribute to be used as the UPN for Azure AD Multi-Factor Authentication. This enables you to protect your on-premises resources with two-step verification without modifying your on-premises UPNs.
To configure alternate login IDs, go to `HKLM\SOFTWARE\Microsoft\AzureMfa` and edit the following registry values:
| Name | Type | Default value | Description |
| ---- | ---- | ------------- | ----------- |
-| LDAP_ALTERNATE_LOGINID_ATTRIBUTE | string | Empty | Designate the name of Active Directory attribute that you want to use instead of the UPN. This attribute is used as the AlternateLoginId attribute. If this registry value is set to a [valid Active Directory attribute](/windows/win32/adschema/attributes-all) (for example, mail or displayName), then the attribute's value is used in place of the user's UPN for authentication. If this registry value is empty or not configured, then AlternateLoginId is disabled and the user's UPN is used for authentication. |
+| LDAP_ALTERNATE_LOGINID_ATTRIBUTE | string | Empty | Designate the name of Active Directory attribute that you want to use as the UPN. This attribute is used as the AlternateLoginId attribute. If this registry value is set to a [valid Active Directory attribute](/windows/win32/adschema/attributes-all) (for example, mail or displayName), then the attribute's value is used as the user's UPN for authentication. If this registry value is empty or not configured, then AlternateLoginId is disabled and the user's UPN is used for authentication. |
| LDAP_FORCE_GLOBAL_CATALOG | boolean | False | Use this flag to force the use of Global Catalog for LDAP searches when looking up AlternateLoginId. Configure a domain controller as a Global Catalog, add the AlternateLoginId attribute to the Global Catalog, and then enable this flag.
If LDAP_LOOKUP_FORESTS is configured (not empty), **this flag is enforced as true**, regardless of the value of the registry setting. In this case, the NPS extension requires the Global Catalog to be configured with the AlternateLoginId attribute for each forest. |
| LDAP_LOOKUP_FORESTS | string | Empty | Provide a semi-colon separated list of forests to search. For example, *contoso.com;foobar.com*. If this registry value is configured, the NPS extension iteratively searches all the forests in the order in which they were listed, and returns the first successful AlternateLoginId value. If this registry value is not configured, the AlternateLoginId lookup is confined to the current domain.|
diff --git a/articles/active-directory/authentication/howto-mfa-userstates.md b/articles/active-directory/authentication/howto-mfa-userstates.md
index 0962904c000ba..769564fc4f06f 100644
--- a/articles/active-directory/authentication/howto-mfa-userstates.md
+++ b/articles/active-directory/authentication/howto-mfa-userstates.md
@@ -6,7 +6,7 @@ services: multi-factor-authentication
ms.service: active-directory
ms.subservice: authentication
ms.topic: how-to
-ms.date: 07/22/2021
+ms.date: 06/01/2022
ms.author: justinha
author: justinha
@@ -54,9 +54,9 @@ All users start out *Disabled*. When you enroll users in per-user Azure AD Multi
To view and manage user states, complete the following steps to access the Azure portal page:
1. Sign in to the [Azure portal](https://portal.azure.com) as a Global administrator.
-1. Search for and select *Azure Active Directory*, then select **Users** > **All users**.
-1. Select **Per-user MFA**. You may need to scroll to the right to see this menu option. Select the example screenshot below to see the full Azure portal window and menu location:
- [![Select Multi-Factor Authentication from the Users window in Azure AD.](media/howto-mfa-userstates/selectmfa-cropped.png)](media/howto-mfa-userstates/selectmfa.png#lightbox)
+1. Search for and select **Azure Active Directory**, then select **Users** > **All users**.
+1. Select **Per-user MFA**.
+ :::image type="content" border="true" source="media/howto-mfa-userstates/selectmfa-cropped.png" alt-text="Screenshot of select Multi-Factor Authentication from the Users window in Azure AD.":::
1. A new page opens that displays the user state, as shown in the following example.
![Screenshot that shows example user state information for Azure AD Multi-Factor Authentication](./media/howto-mfa-userstates/userstate1.png)
diff --git a/articles/active-directory/authentication/media/how-to-authentication-temporary-access-pass/create.png b/articles/active-directory/authentication/media/how-to-authentication-temporary-access-pass/create.png
index db06b8e02a33d..b218b02a47e38 100644
Binary files a/articles/active-directory/authentication/media/how-to-authentication-temporary-access-pass/create.png and b/articles/active-directory/authentication/media/how-to-authentication-temporary-access-pass/create.png differ
diff --git a/articles/active-directory/authentication/media/how-to-authentication-temporary-access-pass/details.png b/articles/active-directory/authentication/media/how-to-authentication-temporary-access-pass/details.png
index f7c720cf38fa1..2644e77d59a23 100644
Binary files a/articles/active-directory/authentication/media/how-to-authentication-temporary-access-pass/details.png and b/articles/active-directory/authentication/media/how-to-authentication-temporary-access-pass/details.png differ
diff --git a/articles/active-directory/authentication/media/how-to-authentication-temporary-access-pass/policy-scope.png b/articles/active-directory/authentication/media/how-to-authentication-temporary-access-pass/policy-scope.png
new file mode 100644
index 0000000000000..a250ec173590c
Binary files /dev/null and b/articles/active-directory/authentication/media/how-to-authentication-temporary-access-pass/policy-scope.png differ
diff --git a/articles/active-directory/authentication/media/how-to-authentication-temporary-access-pass/policy-settings.png b/articles/active-directory/authentication/media/how-to-authentication-temporary-access-pass/policy-settings.png
new file mode 100644
index 0000000000000..adc56e142f75c
Binary files /dev/null and b/articles/active-directory/authentication/media/how-to-authentication-temporary-access-pass/policy-settings.png differ
diff --git a/articles/active-directory/authentication/media/how-to-authentication-temporary-access-pass/policy.png b/articles/active-directory/authentication/media/how-to-authentication-temporary-access-pass/policy.png
index 352e4914693a7..245d83aced56a 100644
Binary files a/articles/active-directory/authentication/media/how-to-authentication-temporary-access-pass/policy.png and b/articles/active-directory/authentication/media/how-to-authentication-temporary-access-pass/policy.png differ
diff --git a/articles/active-directory/authentication/media/how-to-authentication-temporary-access-pass/tap-my-security-info.png b/articles/active-directory/authentication/media/how-to-authentication-temporary-access-pass/tap-my-security-info.png
new file mode 100644
index 0000000000000..48a4d0c770ef5
Binary files /dev/null and b/articles/active-directory/authentication/media/how-to-authentication-temporary-access-pass/tap-my-security-info.png differ
diff --git a/articles/active-directory/authentication/media/how-to-authentication-temporary-access-pass/windows-10-tap.png b/articles/active-directory/authentication/media/how-to-authentication-temporary-access-pass/windows-10-tap.png
new file mode 100644
index 0000000000000..9b806e4ae3cfb
Binary files /dev/null and b/articles/active-directory/authentication/media/how-to-authentication-temporary-access-pass/windows-10-tap.png differ
diff --git a/articles/active-directory/authentication/media/howto-mfa-userstates/selectmfa-cropped.png b/articles/active-directory/authentication/media/howto-mfa-userstates/selectmfa-cropped.png
index 2d445277d852f..48cdf7518fde8 100644
Binary files a/articles/active-directory/authentication/media/howto-mfa-userstates/selectmfa-cropped.png and b/articles/active-directory/authentication/media/howto-mfa-userstates/selectmfa-cropped.png differ
diff --git a/articles/active-directory/authentication/tutorial-enable-cloud-sync-sspr-writeback.md b/articles/active-directory/authentication/tutorial-enable-cloud-sync-sspr-writeback.md
index 589246e7cabd0..e6ee0f1b24256 100644
--- a/articles/active-directory/authentication/tutorial-enable-cloud-sync-sspr-writeback.md
+++ b/articles/active-directory/authentication/tutorial-enable-cloud-sync-sspr-writeback.md
@@ -5,7 +5,7 @@ services: active-directory
ms.service: active-directory
ms.subservice: authentication
ms.topic: tutorial
-ms.date: 10/25/2021
+ms.date: 05/31/2022
ms.author: justinha
author: justinha
ms.reviewer: tilarso
@@ -58,7 +58,7 @@ With password writeback enabled in Azure AD Connect cloud sync, now verify, and
To verify and enable password writeback in SSPR, complete the following steps:
-1. Sign into the Azure portal using a global administrator account.
+1. Sign into the Azure portal using a [Hybrid Identity Administrator](../roles/permissions-reference.md#hybrid-identity-administrator) account.
1. Navigate to Azure Active Directory, select **Password reset**, then choose **On-premises integration**.
1. Verify the Azure AD Connect cloud sync agent set up is complete.
1. Set **Write back passwords to your on-premises directory?** to **Yes**.
@@ -72,12 +72,12 @@ To verify and enable password writeback in SSPR, complete the following steps:
If you no longer want to use the SSPR password writeback functionality you have configured as part of this document, complete the following steps:
-1. Sign into the Azure portal using a global administrator account.
+1. Sign into the Azure portal using a [Hybrid Identity Administrator](../roles/permissions-reference.md#hybrid-identity-administrator) account.
1. Search for and select Azure Active Directory, select **Password reset**, then choose **On-premises integration**.
1. Set **Write back passwords to your on-premises directory?** to **No**.
1. Set **Allow users to unlock accounts without resetting their password?** to **No**.
-From your Azure AD Connect cloud sync server, run `Set-AADCloudSyncPasswordWritebackConfiguration` using global administrator credentials to disable password writeback with Azure AD Connect cloud sync.
+From your Azure AD Connect cloud sync server, run `Set-AADCloudSyncPasswordWritebackConfiguration` using Hybrid Identity Administrator credentials to disable password writeback with Azure AD Connect cloud sync.
```powershell
Import-Module ‘C:\\Program Files\\Microsoft Azure AD Connect Provisioning Agent\\Microsoft.CloudSync.Powershell.dll’
diff --git a/articles/active-directory/authentication/tutorial-enable-sspr-writeback.md b/articles/active-directory/authentication/tutorial-enable-sspr-writeback.md
index fe68a51decb43..e0d4da0edc45d 100644
--- a/articles/active-directory/authentication/tutorial-enable-sspr-writeback.md
+++ b/articles/active-directory/authentication/tutorial-enable-sspr-writeback.md
@@ -6,7 +6,7 @@ services: active-directory
ms.service: active-directory
ms.subservice: authentication
ms.topic: tutorial
-ms.date: 11/11/2021
+ms.date: 05/31/2022
ms.author: justinha
author: justinha
@@ -14,6 +14,7 @@ ms.reviewer: tilarso
ms.collection: M365-identity-device-management
ms.custom: contperf-fy20q4
+adobe-target: true
# Customer intent: As an Azure AD Administrator, I want to learn how to enable and use password writeback so that when end-users reset their password through a web browser their updated password is synchronized back to my on-premises AD environment.
---
@@ -42,7 +43,7 @@ To complete this tutorial, you need the following resources and privileges:
* A working Azure AD tenant with at least an Azure AD Premium P1 or trial license enabled.
* If needed, [create one for free](https://azure.microsoft.com/free/?WT.mc_id=A261C142F).
* For more information, see [Licensing requirements for Azure AD SSPR](concept-sspr-licensing.md).
-* An account with *global administrator* privileges.
+* An account with [Hybrid Identity Administrator](../roles/permissions-reference.md#hybrid-identity-administrator).
* Azure AD configured for self-service password reset.
* If needed, [complete the previous tutorial to enable Azure AD SSPR](tutorial-enable-sspr.md).
* An existing on-premises AD DS environment configured with a current version of Azure AD Connect.
@@ -118,7 +119,7 @@ With password writeback enabled in Azure AD Connect, now configure Azure AD SSPR
To enable password writeback in SSPR, complete the following steps:
-1. Sign in to the [Azure portal](https://portal.azure.com) using a global administrator account.
+1. Sign in to the [Azure portal](https://portal.azure.com) using a Hybrid Identity Administrator account.
1. Search for and select **Azure Active Directory**, select **Password reset**, then choose **On-premises integration**.
1. Set the option for **Write back passwords to your on-premises directory?** to *Yes*.
1. Set the option for **Allow users to unlock accounts without resetting their password?** to *Yes*.
diff --git a/articles/active-directory/azuread-dev/about-microsoft-identity-platform.md b/articles/active-directory/azuread-dev/about-microsoft-identity-platform.md
index 16a4c4404557b..08bb3d4ec3da3 100644
--- a/articles/active-directory/azuread-dev/about-microsoft-identity-platform.md
+++ b/articles/active-directory/azuread-dev/about-microsoft-identity-platform.md
@@ -1,5 +1,5 @@
---
-title: Evolution of Microsoft identity platform - Azure
+title: Evolution of Microsoft identity platform
description: Learn about Microsoft identity platform, an evolution of the Azure Active Directory (Azure AD) identity service and developer platform.
services: active-directory
author: rwike77
@@ -22,7 +22,7 @@ The [Microsoft identity platform](../develop/index.yml) is an evolution of the A
Many developers have previously worked with the Azure AD v1.0 platform to authenticate work and school accounts (provisioned by Azure AD) by requesting tokens from the Azure AD v1.0 endpoint, using Azure AD Authentication Library (ADAL), Azure portal for application registration and configuration, and the Microsoft Graph API for programmatic application configuration.
-With the unified Microsoft identity platform (v2.0), you can write code once and authenticate any Microsoft identity into your application. For several platforms, the fully supported open-source Microsoft Authentication Library (MSAL) is recommended for use against the identity platform endpoints. MSAL is simple to use, provides great single sign-on (SSO) experiences for your users, helps you achieve high reliability and performance, and is developed using Microsoft Secure Development Lifecycle (SDL). When calling APIs, you can configure your application to take advantage of incremental consent, which allows you to delay the request for consent for more invasive scopes until the application’s usage warrants this at runtime. MSAL also supports Azure Active Directory B2C, so your customers use their preferred social, enterprise, or local account identities to get single sign-on access to your applications and APIs.
+With the unified Microsoft identity platform (v2.0), you can write code once and authenticate any Microsoft identity into your application. For several platforms, the fully supported open-source Microsoft Authentication Library (MSAL) is recommended for use against the identity platform endpoints. MSAL is simple to use, provides great single sign-on (SSO) experiences for your users, helps you achieve high reliability and performance, and is developed using Microsoft Secure Development Lifecycle (SDL). When calling APIs, you can configure your application to take advantage of incremental consent, which allows you to delay the request for consent for more invasive scopes until the application's usage warrants this at runtime. MSAL also supports Azure Active Directory B2C, so your customers use their preferred social, enterprise, or local account identities to get single sign-on access to your applications and APIs.
With Microsoft identity platform, expand your reach to these kinds of users:
@@ -42,9 +42,9 @@ The following diagram shows the Microsoft identity experience at a high level, i
### App registration experience
-The Azure portal **[App registrations](https://go.microsoft.com/fwlink/?linkid=2083908)** experience is the one portal experience for managing all applications you’ve integrated with Microsoft identity platform. If you have been using the Application Registration Portal, start using the Azure portal app registration experience instead.
+The Azure portal **[App registrations](https://go.microsoft.com/fwlink/?linkid=2083908)** experience is the one portal experience for managing all applications you've integrated with Microsoft identity platform. If you have been using the Application Registration Portal, start using the Azure portal app registration experience instead.
-For integration with Azure AD B2C (when authenticating social or local identities), you’ll need to register your application in an Azure AD B2C tenant. This experience is also part of the Azure portal.
+For integration with Azure AD B2C (when authenticating social or local identities), you'll need to register your application in an Azure AD B2C tenant. This experience is also part of the Azure portal.
Use the [Application API](/graph/api/resources/application) to programmatically configure your applications integrated with Microsoft identity platform for authenticating any Microsoft identity.
diff --git a/articles/active-directory/azuread-dev/active-directory-devhowto-adal-error-handling.md b/articles/active-directory/azuread-dev/active-directory-devhowto-adal-error-handling.md
index 25123634e38b8..f4a6469e5326d 100644
--- a/articles/active-directory/azuread-dev/active-directory-devhowto-adal-error-handling.md
+++ b/articles/active-directory/azuread-dev/active-directory-devhowto-adal-error-handling.md
@@ -1,5 +1,5 @@
---
-title: ADAL client app error handling best practices | Azure
+title: ADAL client app error handling best practices
description: Provides error handling guidance and best practices for ADAL client applications.
services: active-directory
author: rwike77
diff --git a/articles/active-directory/azuread-dev/app-types.md b/articles/active-directory/azuread-dev/app-types.md
index d03b33bcba088..5e5bab8f2c754 100644
--- a/articles/active-directory/azuread-dev/app-types.md
+++ b/articles/active-directory/azuread-dev/app-types.md
@@ -1,5 +1,5 @@
---
-title: Application types in v1.0 | Azure
+title: Application types in v1.0
description: Describes the types of apps and scenarios supported by the Azure Active Directory v2.0 endpoint.
services: active-directory
author: rwike77
diff --git a/articles/active-directory/azuread-dev/azure-ad-endpoint-comparison.md b/articles/active-directory/azuread-dev/azure-ad-endpoint-comparison.md
index bc60652609202..8566a38d78d65 100644
--- a/articles/active-directory/azuread-dev/azure-ad-endpoint-comparison.md
+++ b/articles/active-directory/azuread-dev/azure-ad-endpoint-comparison.md
@@ -1,5 +1,5 @@
---
-title: Why update to Microsoft identity platform (v2.0) | Azure
+title: Why update to Microsoft identity platform (v2.0)
description: Know the differences between the Microsoft identity platform (v2.0) endpoint and the Azure Active Directory (Azure AD) v1.0 endpoint, and learn the benefits of updating to v2.0.
services: active-directory
author: rwike77
diff --git a/articles/active-directory/azuread-dev/v1-authentication-scenarios.md b/articles/active-directory/azuread-dev/v1-authentication-scenarios.md
index 60b3207dfb0bb..fc276ee116801 100644
--- a/articles/active-directory/azuread-dev/v1-authentication-scenarios.md
+++ b/articles/active-directory/azuread-dev/v1-authentication-scenarios.md
@@ -1,5 +1,5 @@
---
-title: Azure AD for developers (v1.0) | Azure
+title: Azure AD for developers (v1.0)
description: Learn authentication basics for Azure AD for developers (v1.0) such as the app model, API, provisioning, and the most common authentication scenarios.
services: active-directory
documentationcenter: dev-center-name
diff --git a/articles/active-directory/azuread-dev/videos.md b/articles/active-directory/azuread-dev/videos.md
index 8e708961e9d52..2394192756a00 100644
--- a/articles/active-directory/azuread-dev/videos.md
+++ b/articles/active-directory/azuread-dev/videos.md
@@ -1,11 +1,11 @@
---
-title: Azure ADAL to MSAL migration videos | Azure
+title: Azure ADAL to MSAL migration videos
description: Videos that help you migrate from the Azure Active Directory developer platform to the Microsoft identity platform
services: active-directory
author: mmacy
manager: CelesteDG
ms.service: active-directory
-ms.subservice: develop
+ms.subservice: azuread-dev
ms.topic: conceptual
ms.workload: identity
ms.date: 02/12/2020
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/TOC.yml b/articles/active-directory/cloud-infrastructure-entitlement-management/TOC.yml
index 7dd76b378929f..d0678307f7aad 100644
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/TOC.yml
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/TOC.yml
@@ -1,161 +1,161 @@
- - name: CloudKnox Permissions Management
+ - name: Permissions Management
href: index.yml
- name: Overview
expanded: true
items:
- - name: What's CloudKnox Permissions Management?
- href: cloudknox-overview.md
+ - name: What's Permissions Management?
+ href: overview.md
- name: How-to guides
expanded: true
items:
- - name: Onboard CloudKnox on the Azure AD tenant
+ - name: Onboard Permissions Management on the Azure AD tenant
expanded: true
items:
- - name: Enable CloudKnox in your organization
- href: cloudknox-onboard-enable-tenant.md
+ - name: Enable Permissions Management in your organization
+ href: onboard-enable-tenant.md
- name: Onboard an AWS account
- href: cloudknox-onboard-aws.md
+ href: onboard-aws.md
- name: Onboard an Azure subscription
- href: cloudknox-onboard-azure.MD
+ href: onboard-azure.MD
- name: Onboard a GCP project
- href: cloudknox-onboard-gcp.md
+ href: onboard-gcp.md
- name: Enable or disable the controller after onboarding is complete
- href: cloudknox-onboard-enable-controller-after-onboarding.md
+ href: onboard-enable-controller-after-onboarding.md
- name: Add an account/ subscription/ project after onboarding is complete
- href: cloudknox-onboard-add-account-after-onboarding.md
+ href: onboard-add-account-after-onboarding.md
- name: View risk metrics in your authorization system
expanded: false
items:
- name: View key statistics and data about your authorization system
- href: cloudknox-ui-dashboard.md
+ href: ui-dashboard.md
- name: View data about the activity in your authorization system
- href: cloudknox-product-dashboard.md
+ href: product-dashboard.md
- name: Configure settings for data collection
expanded: false
items:
- name: View and configure settings for data collection
- href: cloudknox-product-data-sources.md
+ href: product-data-sources.md
- name: Display an inventory of created resources and licenses
- href: cloudknox-product-data-inventory.md
+ href: product-data-inventory.md
- name: Manage organizational and personal information
expanded: false
items:
- name: View personal and organization information
- href: cloudknox-product-account-settings.md
+ href: product-account-settings.md
- name: View information about identities, resources, and tasks
expanded: false
items:
- name: View analytic information with the Analytics dashboard
- href: cloudknox-usage-analytics-home.md
+ href: usage-analytics-home.md
- name: View analytic information about users
- href: cloudknox-usage-analytics-users.md
+ href: usage-analytics-users.md
- name: View analytic information about groups
- href: cloudknox-usage-analytics-groups.md
+ href: usage-analytics-groups.md
- name: View analytic information about active resources
- href: cloudknox-usage-analytics-active-resources.md
+ href: usage-analytics-active-resources.md
- name: View analytic information about active tasks
- href: cloudknox-usage-analytics-active-tasks.md
+ href: usage-analytics-active-tasks.md
- name: View analytic information about access keys
- href: cloudknox-usage-analytics-access-keys.md
+ href: usage-analytics-access-keys.md
- name: View analytic information about serverless functions
- href: cloudknox-usage-analytics-serverless-functions.md
+ href: usage-analytics-serverless-functions.md
- name: Manage roles/policies and permission requests
expanded: false
items:
- name: View roles/policies and requests for permission in the Remediation dashboard
- href: cloudknox-ui-remediation.md
+ href: ui-remediation.md
- name: View information about roles/policies
- href: cloudknox-howto-view-role-policy.md
+ href: how-to-view-role-policy.md
- name: View information about active and completed tasks
- href: cloudknox-ui-tasks.md
+ href: ui-tasks.md
- name: Create a role/policy
- href: cloudknox-howto-create-role-policy.md
+ href: how-to-create-role-policy.md
- name: Clone a role/policy
- href: cloudknox-howto-clone-role-policy.md
+ href: how-to-clone-role-policy.md
- name: Modify a role/policy
- href: cloudknox-howto-modify-role-policy.md
+ href: how-to-modify-role-policy.md
- name: Delete a role/policy
- href: cloudknox-howto-delete-role-policy.md
+ href: how-to-delete-role-policy.md
- name: Attach and detach policies for AWS identities
- href: cloudknox-howto-attach-detach-permissions.md
+ href: how-to-attach-detach-permissions.md
- name: Add and remove roles and tasks for Azure and GCP identities
- href: cloudknox-howto-add-remove-role-task.md
+ href: how-to-add-remove-role-task.md
- name: Revoke access to high-risk and unused tasks or assign read-only status
- href: cloudknox-howto-revoke-task-readonly-status.md
+ href: how-to-revoke-task-readonly-status.md
- name: Create or approve a request for permissions
- href: cloudknox-howto-create-approve-privilege-request.md
+ href: how-to-create-approve-privilege-request.md
- name: Manage users, roles, and their access levels
expanded: false
items:
- name: Manage users and groups
- href: cloudknox-ui-user-management.md
+ href: ui-user-management.md
# - name: Define and manage users, roles, and access levels
- # href: cloudknox-product-define-permission-levels.md
+ # href: product-define-permission-levels.md
- name: Select group-based permissions settings
- href: cloudknox-howto-create-group-based-permissions.md
+ href: how-to-create-group-based-permissions.md
- name: Use queries to view information about user access
expanded: false
items:
- name: Use queries to see how users access information
- href: cloudknox-ui-audit-trail.md
+ href: ui-audit-trail.md
- name: Create a custom query
- href: cloudknox-howto-create-custom-queries.md
+ href: how-to-create-custom-queries.md
- name: Generate an on-demand report from a query
- href: cloudknox-howto-audit-trail-results.md
+ href: how-to-audit-trail-results.md
- name: Filter and query user activity
- href: cloudknox-product-audit-trail.md
+ href: product-audit-trail.md
- name: Set activity alerts and triggers
expanded: false
items:
- name: View information about activity triggers
- href: cloudknox-ui-triggers.md
+ href: ui-triggers.md
- name: Create and view activity alerts and alert triggers
- href: cloudknox-howto-create-alert-trigger.md
+ href: how-to-create-alert-trigger.md
- name: Create and view rule-based anomalies and anomaly triggers
- href: cloudknox-product-rule-based-anomalies.md
+ href: product-rule-based-anomalies.md
- name: Create and view statistical anomalies and anomaly triggers
- href: cloudknox-product-statistical-anomalies.md
+ href: product-statistical-anomalies.md
- name: Create and view permission analytics triggers
- href: cloudknox-product-permission-analytics.md
+ href: product-permission-analytics.md
- name: Manage rules for authorization systems
expanded: false
items:
- name: View rules in the Autopilot dashboard
- href: cloudknox-ui-autopilot.md
+ href: ui-autopilot.md
- name: Create a rule
- href: cloudknox-howto-create-rule.md
+ href: how-to-create-rule.md
- name: Generate, view, and apply rule recommendations
- href: cloudknox-howto-recommendations-rule.md
+ href: how-to-recommendations-rule.md
- name: View notification settings for a rule
- href: cloudknox-howto-notifications-rule.md
+ href: how-to-notifications-rule.md
- name: Create and view reports
expanded: false
items:
- name: View system reports in the Reports dashboard
- href: cloudknox-product-reports.md
+ href: product-reports.md
- name: View a list and description of system reports
- href: cloudknox-all-reports.md
+ href: all-reports.md
- name: Generate and view a system report
- href: cloudknox-report-view-system-report.md
+ href: report-view-system-report.md
- name: Create, view, and share a custom report
- href: cloudknox-report-create-custom-report.md
+ href: report-create-custom-report.md
- name: Generate and download the Permissions analytics report
- href: cloudknox-product-permissions-analytics-reports.md
+ href: product-permissions-analytics-reports.md
- name: Troubleshoot
expanded: false
items:
- name: Troubleshoot issues
- href: cloudknox-troubleshoot.md
+ href: troubleshoot.md
- name: Training videos
expanded: false
items:
- - name: Get started with CloudKnox training videos
- href: cloudknox-training-videos.md
+ - name: Get started with Permissions Management training videos
+ href: training-videos.md
- name: Reference
expanded: false
items:
- name: FAQs
- href: cloudknox-faqs.md
+ href: faqs.md
- name: Glossary
- href: cloudknox-multi-cloud-glossary.md
+ href: multi-cloud-glossary.md
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/all-reports.md b/articles/active-directory/cloud-infrastructure-entitlement-management/all-reports.md
new file mode 100644
index 0000000000000..ac4b7ff73a519
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/all-reports.md
@@ -0,0 +1,61 @@
+---
+title: View a list and description of all system reports available in Permissions Management reports
+description: View a list and description of all system reports available in Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: overview
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# View a list and description of system reports
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some of the information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+Permissions Management has various types of system reports that capture specific sets of data. These reports allow management, auditors, and administrators to:
+
+- Make timely decisions.
+- Analyze trends and system/user performance.
+- Identify trends in data and high risk areas so that management can address issues more quickly and improve their efficiency.
+
+This article provides you with a list and description of the system reports available in Permissions Management. Depending on the report, you can download it in comma-separated values (**CSV**) format, portable document format (**PDF**), or Microsoft Excel Open XML Spreadsheet (**XLSX**) format.
+
+## Download a system report
+
+1. In the Permissions Management home page, select the **Reports** tab, and then select the **Systems Reports** subtab.
+1. In the **Report Name** column, find the report you want, and then select the down arrow to the right of the report name to download the report.
+
+ Or, from the ellipses **(...)** menu, select **Download**.
+
+ The following message displays: **Successfully Started To Generate On Demand Report.**
+
+
+## Summary of available system reports
+
+| Report name | Type of the report | File format | Description | Availability | Collated report? |
+|----------------------------|-----------------------------------|--------------------------|---------------------------| ----------------------------|----------------------------------|
+| Access Key Entitlements and Usage Report | Summary
Detailed | CSV | This report displays: - Access key age, last rotation date, and last usage date availability in the summary report. Use this report to decide when to rotate access keys. - Granted task and Permissions creep index (PCI) score. This report provides supporting information when you want to take the action on the keys. | AWSAzureGCP | Yes |
+| All Permissions for Identity | Detailed | CSV | This report lists all the assigned permissions for the selected identities. | Amazon Web Services (AWS), Microsoft Azure, or Google Cloud Platform (GCP) | N/A |
+| Group Entitlements and Usage | Summary | CSV | This report tracks all group level entitlements and the permission assignment, PCI. The number of members is also listed as part of this report. | AWS, Azure, or GCP | Yes |
+| Identity Permissions | Summary | CSV | This report tracks any, or specific, task usage per **User**, **Group**, **Role**, or **App**. | AWS, Azure, or GCP | No |
+| NIST 800-53 | Detailed Summary Dashboard | CSV PDF | **Dashboard**: This report helps track the overall progress of the NIST 800-53 benchmark. It lists the percentage passing, overall pass or fail of test control along with the breakup of L1/L2 per Auth system. **Summary**: For each authorized system, this report lists the test control pass or fail per authorized system and the number of resources evaluated for each test control. **Detailed**: This report helps auditors and administrators to track the resource level pass or fail per test control. | AWS, Azure, or GCP | Yes |
+| PCI DSS | Detailed Summary Dashboard | CSV | **Dashboard**: This report helps track the overall progress of the PCI-DSS benchmark. It lists the percentage passing, overall pass or fail of test control along with the breakup of L1/L2 per Auth system. **Summary**: For each authorized system, this report lists the test control pass or fail per authorized system and the number of resources evaluated for each test control. **Detailed**: This report helps auditors and administrators to track the resource level pass or fail per test control. | AWS, Azure, or GCP | Yes |
+| PCI History | Summary | CSV | This report helps track **Monthly PCI History** for each authorized system. It can be used to plot the trend of the PCI. | AWS, Azure, or GCP | Yes |
+| Permissions Analytics Report (PAR) | Summary | PDF | This report helps monitor the **Identity Privilege** related activity across the authorized systems. It captures any Identity permission change. This report has the following main sections: **User Summary**, **Group Summary**, **Role Summary & Delete Task Summary**. The **User Summary** lists the current granted permissions along with high-risk permissions and resources accessed in 1-day, 7-day, or 30-days durations. There are subsections for newly added or deleted users, users with PCI change, high-risk active/inactive users. The **Group Summary** lists the administrator level groups with the current granted permissions along with high-risk permissions and resources accessed in 1-day, 7-day, or 30-day durations. There are subsections for newly added or deleted groups, groups with PCI change, High-risk active/inactive groups. The **Role Summary** and the **Group Summary** list similar details. The **Delete Task** summary section lists the number of times the **Delete Task** has been executed in the given period. | AWS, Azure, or GCP | No |
+| Permissions Analytics Report (PAR) | Detailed | CSV | This report lists the different key findings in the selected authorized systems. The key findings include **Super identities**, **Inactive identities**, **Over-provisioned active identities**, **Storage bucket hygiene**, **Access key age (AWS)**, and so on. This report helps administrators to visualize the findings across the organization and make decisions. | AWS, Azure, or GCP | Yes |
+| Role/Policy Details | Summary | CSV | This report captures **Assigned/Unassigned** and **Custom/system policy with used/unused condition** for specific or all AWS accounts. Similar data can be captured for Azure and GCP for assigned and unassigned roles. | AWS, Azure, or GCP | No |
+| User Entitlements and Usage | Detailed
Summary | CSV | This report provides a summary and details of **User entitlements and usage**.
**Data displayed on Usage Analytics** screen is downloaded as part of the **Summary** report. **Detailed permissions usage per User** is listed in the Detailed report. | AWS, Azure, or GCP | Yes |
+
+
+## Next steps
+
+- For information on how to view system reports in the **Reports** dashboard, see [View system reports in the Reports dashboard](product-reports.md).
+- For information about how to create, view, and share a system report, see [Create, view, and share a custom report](report-view-system-report.md).
+- For information about how to create and view a custom report, see [Generate and view a custom report](report-create-custom-report.md).
+- For information about how to create and view the Permissions analytics report, see [Generate and download the Permissions analytics report](product-permissions-analytics-reports.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-all-reports.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-all-reports.md
deleted file mode 100644
index 716f9029be38d..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-all-reports.md
+++ /dev/null
@@ -1,61 +0,0 @@
----
-title: View a list and description of all system reports available in CloudKnox Permissions Management reports
-description: View a list and description of all system reports available in CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: overview
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# View a list and description of system reports
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-CloudKnox Permissions Management (CloudKnox) has various types of system reports that capture specific sets of data. These reports allow management, auditors, and administrators to:
-
-- Make timely decisions.
-- Analyze trends and system/user performance.
-- Identify trends in data and high risk areas so that management can address issues more quickly and improve their efficiency.
-
-This article provides you with a list and description of the system reports available in CloudKnox. Depending on the report, you can download it in comma-separated values (**CSV**) format, portable document format (**PDF**), or Microsoft Excel Open XML Spreadsheet (**XLSX**) format.
-
-## Download a system report
-
-1. In the CloudKnox home page, select the **Reports** tab, and then select the **Systems Reports** subtab.
-1. In the **Report Name** column, find the report you want, and then select the down arrow to the right of the report name to download the report.
-
- Or, from the ellipses **(...)** menu, select **Download**.
-
- The following message displays: **Successfully Started To Generate On Demand Report.**
-
-
-## Summary of available system reports
-
-| Report name | Type of the report | File format | Description | Availability | Collated report? |
-|----------------------------|-----------------------------------|--------------------------|---------------------------| ----------------------------|----------------------------------|
-| Access Key Entitlements and Usage Report | Summary Detailed | CSV | This report displays: - Access key age, last rotation date, and last usage date availability in the summary report. Use this report to decide when to rotate access keys. - Granted task and Permissions creep index (PCI) score. This report provides supporting information when you want to take the action on the keys. | AWSAzureGCP | Yes |
-| All Permissions for Identity | Detailed | CSV | This report lists all the assigned permissions for the selected identities. | Amazon Web Services (AWS), Microsoft Azure, or Google Cloud Platform (GCP) | N/A |
-| Group Entitlements and Usage | Summary | CSV | This report tracks all group level entitlements and the permission assignment, PCI. The number of members is also listed as part of this report. | AWS, Azure, or GCP | Yes |
-| Identity Permissions | Summary | CSV | This report tracks any, or specific, task usage per **User**, **Group**, **Role**, or **App**. | AWS, Azure, or GCP | No |
-| NIST 800-53 | Detailed Summary Dashboard | CSV PDF | **Dashboard**: This report helps track the overall progress of the NIST 800-53 benchmark. It lists the percentage passing, overall pass or fail of test control along with the breakup of L1/L2 per Auth system. **Summary**: For each authorized system, this report lists the test control pass or fail per authorized system and the number of resources evaluated for each test control. **Detailed**: This report helps auditors and administrators to track the resource level pass or fail per test control. | AWS, Azure, or GCP | Yes |
-| PCI DSS | Detailed Summary Dashboard | CSV | **Dashboard**: This report helps track the overall progress of the PCI-DSS benchmark. It lists the percentage passing, overall pass or fail of test control along with the breakup of L1/L2 per Auth system. **Summary**: For each authorized system, this report lists the test control pass or fail per authorized system and the number of resources evaluated for each test control. **Detailed**: This report helps auditors and administrators to track the resource level pass or fail per test control. | AWS, Azure, or GCP | Yes |
-| PCI History | Summary | CSV | This report helps track **Monthly PCI History** for each authorized system. It can be used to plot the trend of the PCI. | AWS, Azure, or GCP | Yes |
-| Permissions Analytics Report (PAR) | Summary | PDF | This report helps monitor the **Identity Privilege** related activity across the authorized systems. It captures any Identity permission change. This report has the following main sections: **User Summary**, **Group Summary**, **Role Summary & Delete Task Summary**. The **User Summary** lists the current granted permissions along with high-risk permissions and resources accessed in 1-day, 7-day, or 30-days durations. There are subsections for newly added or deleted users, users with PCI change, high-risk active/inactive users. The **Group Summary** lists the administrator level groups with the current granted permissions along with high-risk permissions and resources accessed in 1-day, 7-day, or 30-day durations. There are subsections for newly added or deleted groups, groups with PCI change, High-risk active/inactive groups. The **Role Summary** and the **Group Summary** list similar details. The **Delete Task** summary section lists the number of times the **Delete Task** has been executed in the given period. | AWS, Azure, or GCP | No |
-| Permissions Analytics Report (PAR) | Detailed | CSV | This report lists the different key findings in the selected authorized systems. The key findings include **Super identities**, **Inactive identities**, **Over-provisioned active identities**, **Storage bucket hygiene**, **Access key age (AWS)**, and so on. This report helps administrators to visualize the findings across the organization and make decisions. | AWS, Azure, or GCP | Yes |
-| Role/Policy Details | Summary | CSV | This report captures **Assigned/Unassigned** and **Custom/system policy with used/unused condition** for specific or all AWS accounts. Similar data can be captured for Azure and GCP for assigned and unassigned roles. | AWS, Azure, or GCP | No |
-| User Entitlements and Usage | Detailed
Summary | CSV | This report provides a summary and details of **User entitlements and usage**.
**Data displayed on Usage Analytics** screen is downloaded as part of the **Summary** report. **Detailed permissions usage per User** is listed in the Detailed report. | AWS, Azure, or GCP | Yes |
-
-
-## Next steps
-
-- For information on how to view system reports in the **Reports** dashboard, see [View system reports in the Reports dashboard](cloudknox-product-reports.md).
-- For information about how to create, view, and share a system report, see [Create, view, and share a custom report](cloudknox-report-view-system-report.md).
-- For information about how to create and view a custom report, see [Generate and view a custom report](cloudknox-report-create-custom-report.md).
-- For information about how to create and view the Permissions analytics report, see [Generate and download the Permissions analytics report](cloudknox-product-permissions-analytics-reports.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-faqs.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-faqs.md
deleted file mode 100644
index b06e14cd767e1..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-faqs.md
+++ /dev/null
@@ -1,160 +0,0 @@
----
-title: Frequently asked questions (FAQs) about CloudKnox Permissions Management
-description: Frequently asked questions (FAQs) about CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: faq
-ms.date: 04/20/2022
-ms.author: kenwith
----
-
-# Frequently asked questions (FAQs)
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-> [!NOTE]
-> The CloudKnox Permissions Management (CloudKnox) PREVIEW is currently not available for tenants hosted in the European Union (EU).
-
-
-This article answers frequently asked questions (FAQs) about CloudKnox Permissions Management (CloudKnox).
-
-## What's CloudKnox Permissions Management?
-
-CloudKnox is a cloud infrastructure entitlement management (CIEM) solution that provides comprehensive visibility into permissions assigned to all identities. For example, over-privileged workload and user identities, actions, and resources across multi-cloud infrastructures in Microsoft Azure, Amazon Web Services (AWS), and Google Cloud Platform (GCP). CloudKnox detects, automatically right-sizes, and continuously monitors unused and excessive permissions. It deepens the Zero Trust security strategy by augmenting the least privilege access principle.
-
-
-## What are the prerequisites to use CloudKnox?
-
-CloudKnox supports data collection from AWS, GCP, and/or Microsoft Azure. For data collection and analysis, customers are required to have an Azure Active Directory (Azure AD) account to use CloudKnox.
-
-## Can a customer use CloudKnox if they have other identities with access to their IaaS platform that aren’t yet in Azure AD (for example, if part of their business has Okta or AWS Identity & Access Management (IAM))?
-
-Yes, a customer can detect, mitigate, and monitor the risk of ‘backdoor’ accounts that are local to AWS IAM, GCP, or from other identity providers such as Okta or AWS IAM.
-
-## Where can customers access CloudKnox?
-
-Customers can access the CloudKnox interface with a link from the Azure AD extension in the Azure portal.
-
-## Can non-cloud customers use CloudKnox on-premises?
-
-No, CloudKnox is a hosted cloud offering.
-
-## Can non-Azure customers use CloudKnox?
-
-Yes, non-Azure customers can use our solution. CloudKnox is a multi-cloud solution so even customers who have no subscription to Azure can benefit from it.
-
-## Is CloudKnox available for tenants hosted in the European Union (EU)?
-
-No, the CloudKnox Permissions Management (CloudKnox) PREVIEW is currently not available for tenants hosted in the European Union (EU).
-
-## If I’m already using Azure AD Privileged Identity Management (PIM) for Azure, what value does CloudKnox provide?
-
-CloudKnox complements Azure AD PIM. Azure AD PIM provides just-in-time access for admin roles in Azure (as well as Microsoft Online Services and apps that use groups), while CloudKnox allows multi-cloud discovery, remediation, and monitoring of privileged access across Azure, AWS, and GCP.
-
-## What languages does CloudKnox support?
-
-CloudKnox currently supports English.
-
-## What public cloud infrastructures are supported by CloudKnox?
-
-CloudKnox currently supports the three major public clouds: Amazon Web Services (AWS), Google Cloud Platform (GCP), and Microsoft Azure.
-
-## Does CloudKnox support hybrid environments?
-
-CloudKnox currently doesn’t support hybrid environments.
-
-## What types of identities are supported by CloudKnox?
-
-CloudKnox supports user identities (for example, employees, customers, external partners) and workload identities (for example, virtual machines, containers, web apps, serverless functions).
-
-
-
-## Is CloudKnox available in Government Cloud?
-
-No, CloudKnox is currently not available in Government clouds.
-
-## Is CloudKnox available for sovereign clouds?
-
-No, CloudKnox is currently not available in sovereign Clouds.
-
-## How does CloudKnox collect insights about permissions usage?
-
-CloudKnox has a data collector that collects access permissions assigned to various identities, activity logs, and resources metadata. This gathers full visibility into permissions granted to all identities to access the resources and details on usage of granted permissions.
-
-## How does CloudKnox evaluate cloud permissions risk?
-
-CloudKnox offers granular visibility into all identities and their permissions granted versus used, across cloud infrastructures to uncover any action performed by any identity on any resource. This isn't limited to just user identities, but also workload identities such as virtual machines, access keys, containers, and scripts. The dashboard gives an overview of permission profile to locate the riskiest identities and resources.
-
-## What is the Permissions Creep Index?
-
-The Permissions Creep Index (PCI) is a quantitative measure of risk associated with an identity or role determined by comparing permissions granted versus permissions exercised. It allows users to instantly evaluate the level of risk associated with the number of unused or over-provisioned permissions across identities and resources. It measures how much damage identities can cause based on the permissions they have.
-
-## How can customers use CloudKnox to delete unused or excessive permissions?
-
-CloudKnox allows users to right-size excessive permissions and automate least privilege policy enforcement with just a few clicks. The solution continuously analyzes historical permission usage data for each identity and gives customers the ability to right-size permissions of that identity to only the permissions that are being used for day-to-day operations. All unused and other risky permissions can be automatically removed.
-
-## How can customers grant permissions on-demand with CloudKnox?
-
-For any break-glass or one-off scenarios where an identity needs to perform a specific set of actions on a set of specific resources, the identity can request those permissions on-demand for a limited period with a self-service workflow. Customers can either use the built-in workflow engine or their IT service management (ITSM) tool. The user experience is the same for any identity type, identity source (local, enterprise directory, or federated) and cloud.
-
-## What is the difference between permissions on-demand and just-in-time access?
-
-Just-in-time (JIT) access is a method used to enforce the principle of least privilege to ensure identities are given the minimum level of permissions to perform the task at hand. Permissions on-demand are a type of JIT access that allows the temporary elevation of permissions, enabling identities to access resources on a by-request, timed basis.
-
-## How can customers monitor permissions usage with CloudKnox?
-
-Customers only need to track the evolution of their Permission Creep Index to monitor permissions usage. They can do this in the “Analytics” tab in their CloudKnox dashboard where they can see how the PCI of each identity or resource is evolving over time.
-
-## Can customers generate permissions usage reports?
-
-Yes, CloudKnox has various types of system report available that capture specific data sets. These reports allow customers to:
-- Make timely decisions.
-- Analyze usage trends and system/user performance.
-- Identify high-risk areas.
-
-For information about permissions usage reports, see [Generate and download the Permissions analytics report](cloudknox-product-permissions-analytics-reports.md).
-
-## Does CloudKnox integrate with third-party ITSM (Information Technology Security Management) tools?
-
-CloudKnox integrates with ServiceNow.
-
-
-## How is CloudKnox being deployed?
-
-Customers with Global Admin role have first to onboard CloudKnox on their Azure AD tenant, and then onboard their AWS accounts, GCP projects, and Azure subscriptions. More details about onboarding can be found in our product documentation.
-
-## How long does it take to deploy CloudKnox?
-
-It depends on each customer and how many AWS accounts, GCP projects, and Azure subscriptions they have.
-
-## Once CloudKnox is deployed, how fast can I get permissions insights?
-
-Once fully onboarded with data collection set up, customers can access permissions usage insights within hours. Our machine-learning engine refreshes the Permission Creep Index every hour so that customers can start their risk assessment right away.
-
-## Is CloudKnox collecting and storing sensitive personal data?
-
-No, CloudKnox doesn’t have access to sensitive personal data.
-
-## Where can I find more information about CloudKnox?
-
-You can read our blog and visit our web page. You can also get in touch with your Microsoft point of contact to schedule a demo.
-
-## Resources
-
-- [Public Preview announcement blog](https://www.aka.ms/CloudKnox-Public-Preview-Blog)
-- [CloudKnox Permissions Management web page](https://microsoft.com/security/business/identity-access-management/permissions-management)
-
-
-
-## Next steps
-
-- For an overview of CloudKnox, see [What's CloudKnox Permissions Management?](cloudknox-overview.md).
-- For information on how to onboard CloudKnox in your organization, see [Enable CloudKnox in your organization](cloudknox-onboard-enable-tenant.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-add-remove-role-task.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-add-remove-role-task.md
deleted file mode 100644
index c9f6dd44a3096..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-add-remove-role-task.md
+++ /dev/null
@@ -1,118 +0,0 @@
----
-title: Add and remove roles and tasks for groups, users, and service accounts for Microsoft Azure and Google Cloud Platform (GCP) identities in the Remediation dashboard in CloudKnox Permissions Management
-description: How to attach and detach permissions for groups, users, and service accounts for Microsoft Azure and Google Cloud Platform (GCP) identities in the Remediation dashboard in CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# Add and remove roles and tasks for Microsoft Azure and Google Cloud Platform (GCP) identities
-
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-This article describes how you can add and remove roles and tasks for Microsoft Azure and Google Cloud Platform (GCP) identities using the **Remediation** dashboard.
-
-> [!NOTE]
-> To view the **Remediation** tab, your must have **Viewer**, **Controller**, or **Administrator** permissions. To make changes on this tab, you must have **Controller** or **Administrator** permissions. If you don’t have these permissions, contact your system administrator.
-
-## View permissions
-
-1. On the CloudKnox home page, select the **Remediation** tab, and then select the **Permissions** subtab.
-1. From the **Authorization System Type** dropdown, select **Azure** or **GCP**.
-1. From the **Authorization System** dropdown, select the accounts you want to access.
-1. From the **Search For** dropdown, select **Group**, **User**, or **APP**.
-1. To search for more parameters, you can make a selection from the **User States**, **Permission Creep Index**, and **Task Usage** dropdowns.
-1. Select **Apply**.
- CloudKnox displays a list of groups, users, and service accounts that match your criteria.
-1. In **Enter a username**, enter or select a user.
-1. In **Enter a Group Name**, enter or select a group, then select **Apply**.
-1. Make a selection from the results list.
-
- The table displays the **Username** **Domain/Account**, **Source**, **Resource** and **Current Role**.
-
-
-## Add a role
-
-1. On the CloudKnox home page, select the **Remediation** tab, and then select the **Permissions** subtab.
-1. From the **Authorization System Type** dropdown, select **Azure** or **GCP**.
-1. From the **Authorization System** dropdown, select the accounts you want to access.
-1. From the **Search For** dropdown, select **Group**, **User**, or **APP/Service Account**, and then select **Apply**.
-1. Make a selection from the results list.
-
-1. To attach a role, select **Add role**.
-1. In the **Add Role** page, from the **Available Roles** list, select the plus sign **(+)** to move the role to the **Selected Roles** list.
-1. When you have finished adding roles, select **Submit**.
-1. When the following message displays: **Are you sure you want to change permission?**, select:
- - **Generate Script** to generate a script where you can manually add/remove the permissions you selected.
- - **Execute** to change the permission.
- - **Close** to cancel the action.
-
-## Remove a role
-
-1. On the CloudKnox home page, select the **Remediation** tab, and then select the **Permissions** subtab.
-1. From the **Authorization System Type** dropdown, select **Azure** or **GCP**.
-1. From the **Authorization System** dropdown, select the accounts you want to access.
-1. From the **Search For** dropdown, select **Group**, **User**, or **APP/Service Account**, and then select **Apply**.
-1. Make a selection from the results list.
-
-1. To remove a role, select **Remove Role**.
-1. In the **Remove Role** page, from the **Available Roles** list, select the plus sign **(+)** to move the role to the **Selected Roles** list.
-1. When you have finished selecting roles, select **Submit**.
-1. When the following message displays: **Are you sure you want to change permission?**, select:
- - **Generate Script** to generate a script where you can manually add/remove the permissions you selected.
- - **Execute** to change the permission.
- - **Close** to cancel the action.
-
-## Add a task
-
-1. On the CloudKnox home page, select the **Remediation** tab, and then select the **Permissions** subtab.
-1. From the **Authorization System Type** dropdown, select **Azure** or **GCP**.
-1. From the **Authorization System** dropdown, select the accounts you want to access.
-1. From the **Search For** dropdown, select **Group**, **User**, or **APP/Service Account**, and then select **Apply**.
-1. Make a selection from the results list.
-
-1. To attach a role, select **Add Tasks**.
-1. In the **Add Tasks** page, from the **Available Tasks** list, select the plus sign **(+)** to move the task to the **Selected Tasks** list.
-1. When you have finished adding tasks, select **Submit**.
-1. When the following message displays: **Are you sure you want to change permission?**, select:
- - **Generate Script** to generate a script where you can manually add/remove the permissions you selected.
- - **Execute** to change the permission.
- - **Close** to cancel the action.
-
-## Remove a task
-
-1. On the CloudKnox home page, select the **Remediation** tab, and then select the **Permissions** subtab.
-1. From the **Authorization System Type** dropdown, select **Azure** or **GCP**.
-1. From the **Authorization System** dropdown, select the accounts you want to access.
-1. From the **Search For** dropdown, select **Group**, **User**, or **APP/Service Account**, and then select **Apply**.
-1. Make a selection from the results list.
-
-1. To remove a task, select **Remove Tasks**.
-1. In the **Remove Tasks** page, from the **Available Tasks** list, select the plus sign **(+)** to move the task to the **Selected Tasks** list.
-1. When you have finished selecting tasks, select **Submit**.
-1. When the following message displays: **Are you sure you want to change permission?**, select:
- - **Generate Script** to generate a script where you can manually add/remove the permissions you selected.
- - **Execute** to change the permission.
- - **Close** to cancel the action.
-
-## Next steps
-
-
-- For information on how to view existing roles/policies, requests, and permissions, see [View roles/policies, requests, and permission in the Remediation dashboard](cloudknox-ui-remediation.md).
-- For information on how to create a role/policy, see [Create a role/policy](cloudknox-howto-create-role-policy.md).
-- For information on how to clone a role/policy, see [Clone a role/policy](cloudknox-howto-clone-role-policy.md).
-- For information on how to delete a role/policy, see [Delete a role/policy](cloudknox-howto-delete-role-policy.md).
-- For information on how to modify a role/policy, see Modify a role/policy](cloudknox-howto-modify-role-policy.md).
-- To view information about roles/policies, see [View information about roles/policies](cloudknox-howto-view-role-policy.md).
-- For information on how to attach and detach permissions for Amazon Web Services (AWS) identities, see [Attach and detach policies for AWS identities](cloudknox-howto-attach-detach-permissions.md).
-- For information on how to revoke high-risk and unused tasks or assign read-only status for Microsoft Azure and Google Cloud Platform (GCP) identities, see [Revoke high-risk and unused tasks or assign read-only status for Azure and GCP identities](cloudknox-howto-revoke-task-readonly-status.md)
-For information on how to create or approve a request for permissions, see [Create or approve a request for permissions](cloudknox-howto-create-approve-privilege-request.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-attach-detach-permissions.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-attach-detach-permissions.md
deleted file mode 100644
index 6054e4c1c99c6..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-attach-detach-permissions.md
+++ /dev/null
@@ -1,84 +0,0 @@
----
-title: Attach and detach permissions for users, roles, and groups for Amazon Web Services (AWS) identities in the Remediation dashboard in CloudKnox Permissions Management
-description: How to attach and detach permissions for users, roles, and groups for Amazon Web Services (AWS) identities in the Remediation dashboard in CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# Attach and detach policies for Amazon Web Services (AWS) identities
-
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-This article describes how you can attach and detach permissions for users, roles, and groups for Amazon Web Services (AWS) identities using the **Remediation** dashboard.
-
-> [!NOTE]
-> To view the **Remediation** tab, your must have **Viewer**, **Controller**, or **Administrator** permissions. To make changes on this tab, you must have **Controller** or **Administrator** permissions. If you don’t have these permissions, contact your system administrator.
-
-## View permissions
-
-1. On the CloudKnox home page, select the **Remediation** tab, and then select the **Permissions** subtab.
-1. From the **Authorization System Type** dropdown, select **AWS**.
-1. From the **Authorization System** dropdown, select the accounts you want to access.
-1. From the **Search For** dropdown, select **Group**, **User**, or **Role**.
-1. To search for more parameters, you can make a selection from the **User States**, **Permission Creep Index**, and **Task Usage** dropdowns.
-1. Select **Apply**.
- CloudKnox displays a list of users, roles, or groups that match your criteria.
-1. In **Enter a username**, enter or select a user.
-1. In **Enter a group name**, enter or select a group, then select **Apply**.
-1. Make a selection from the results list.
-
- The table displays the related **Username** **Domain/Account**, **Source** and **Policy Name**.
-
-
-## Attach policies
-
-1. On the CloudKnox home page, select the **Remediation** tab, and then select the **Permissions** subtab.
-1. From the **Authorization System Type** dropdown, select **AWS**.
-1. In **Enter a username**, enter or select a user.
-1. In **Enter a Group Name**, enter or select a group, then select **Apply**.
-1. Make a selection from the results list.
-1. To attach a policy, select **Attach Policies**.
-1. In the **Attach Policies** page, from the **Available policies** list, select the plus sign **(+)** to move the policy to the **Selected policies** list.
-1. When you have finished adding policies, select **Submit**.
-1. When the following message displays: **Are you sure you want to change permission?**, select:
- - **Generate Script** to generate a script where you can manually add/remove the permissions you selected.
- - **Execute** to change the permission.
- - **Close** to cancel the action.
-
-## Detach policies
-
-1. On the CloudKnox home page, select the **Remediation** tab, and then select the **Permissions** subtab.
-1. From the **Authorization System Type** dropdown, select **AWS**.
-1. In **Enter a username**, enter or select a user.
-1. In **Enter a Group Name**, enter or select a group, then select **Apply**.
-1. Make a selection from the results list.
-1. To remove a policy, select **Detach Policies**.
-1. In the **Detach Policies** page, from the **Available policies** list, select the plus sign **(+)** to move the policy to the **Selected policies** list.
-1. When you have finished selecting policies, select **Submit**.
-1. When the following message displays: **Are you sure you want to change permission?**, select:
- - **Generate Script** to generate a script where you can manually add/remove the permissions you selected.
- - **Execute** to change the permission.
- - **Close** to cancel the action.
-
-## Next steps
-
-
-- For information on how to view existing roles/policies, requests, and permissions, see [View roles/policies, requests, and permission in the Remediation dashboard](cloudknox-ui-remediation.md).
-- For information on how to create a role/policy, see [Create a role/policy](cloudknox-howto-create-role-policy.md).
-- For information on how to clone a role/policy, see [Clone a role/policy](cloudknox-howto-clone-role-policy.md).
-- For information on how to delete a role/policy, see [Delete a role/policy](cloudknox-howto-delete-role-policy.md).
-- For information on how to modify a role/policy, see Modify a role/policy](cloudknox-howto-modify-role-policy.md).
-- To view information about roles/policies, see [View information about roles/policies](cloudknox-howto-view-role-policy.md).
-- For information on how to revoke high-risk and unused tasks or assign read-only status for Microsoft Azure and Google Cloud Platform (GCP) identities, see [Revoke high-risk and unused tasks or assign read-only status for Azure and GCP identities](cloudknox-howto-revoke-task-readonly-status.md)
-For information on how to create or approve a request for permissions, see [Create or approve a request for permissions](cloudknox-howto-create-approve-privilege-request.md).
-
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-audit-trail-results.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-audit-trail-results.md
deleted file mode 100644
index 8b383ad66a584..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-audit-trail-results.md
+++ /dev/null
@@ -1,65 +0,0 @@
----
-title: Generate an on-demand report from a query in the Audit dashboard in CloudKnox Permissions Management
-description: How to generate an on-demand report from a query in the **Audit** dashboard in CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# Generate an on-demand report from a query
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-This article describes how you can generate an on-demand report from a query in the **Audit** dashboard in CloudKnox Permissions Management (CloudKnox). You can:
-
-- Run a report on-demand.
-- Schedule and run a report as often as you want.
-- Share a report with other members of your team and management.
-
-## Generate a custom report on-demand
-
-1. In the CloudKnox home page, select the **Audit** tab.
-
- CloudKnox displays the query options available to you.
-1. In the **Audit** dashboard, select **Search** to run the query.
-1. Select **Export**.
-
- CloudKnox generates the report and exports it in comma-separated values (**CSV**) format, portable document format (**PDF**), or Microsoft Excel Open XML Spreadsheet (**XLSX**) format.
-
-
-
-
-## Next steps
-
-- For information on how to view how users access information, see [Use queries to see how users access information](cloudknox-ui-audit-trail.md).
-- For information on how to filter and view user activity, see [Filter and query user activity](cloudknox-product-audit-trail.md).
-- For information on how to create a query,see [Create a custom query](cloudknox-howto-create-custom-queries.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-clone-role-policy.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-clone-role-policy.md
deleted file mode 100644
index b922cd5fc9043..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-clone-role-policy.md
+++ /dev/null
@@ -1,55 +0,0 @@
----
-title: Clone a role/policy in the Remediation dashboard in CloudKnox Permissions Management
-description: How to clone a role/policy in the Just Enough Permissions (JEP) Controller.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# Clone a role/policy in the Remediation dashboard
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-This article describes how you can use the **Remediation** dashboard in CloudKnox Permissions Management (CloudKnox) to clone roles/policies for the Amazon Web Services (AWS), Microsoft Azure, or Google Cloud Platform (GCP) authorization systems.
-
-> [!NOTE]
-> To view the **Remediation** tab, you must have **Viewer**, **Controller**, or **Administrator** permissions. To make changes on this tab, you must have **Controller** or **Administrator** permissions. If you don’t have these permissions, contact your system administrator.
-
-> [!NOTE]
-> Microsoft Azure uses the term *role* for what other Cloud providers call *policy*. CloudKnox automatically makes this terminology change when you select the authorization system type. In the user documentation, we use *role/policy* to refer to both.
-
-## Clone a role/policy
-
-1. On the CloudKnox home page, select the **Remediation** tab, and then select the **Role/Policies** tab.
-1. Select the role/policy you want to clone, and from the **Actions** column, select **Clone**.
-1. **(AWS Only)** In the **Clone** box, the **Clone Resources** and **Clone Conditions** checkboxes are automatically selected.
- Deselect the boxes if the resources and conditions are different from what is displayed.
-1. Enter a name for each authorization system that was selected in the **Policy Name** boxes, and then select **Next**.
-
-1. If the data collector hasn't been given controller privileges, the following message displays: **Only online/controller-enabled authorization systems can be submitted for cloning.**
-
- To clone this role manually, download the script and JSON file.
-
-1. Select **Submit**.
-1. Refresh the **Role/Policies** tab to see the role/policy you cloned.
-
-## Next steps
-
-
-- For information on how to view existing roles/policies, requests, and permissions, see [View roles/policies, requests, and permission in the Remediation dashboard](cloudknox-ui-remediation.md).
-- For information on how to create a role/policy, see [Create a role/policy](cloudknox-howto-create-role-policy.md).
-- For information on how to delete a role/policy, see [Delete a role/policy](cloudknox-howto-delete-role-policy.md).
-- For information on how to modify a role/policy, see Modify a role/policy](cloudknox-howto-modify-role-policy.md).
-- To view information about roles/policies, see [View information about roles/policies](cloudknox-howto-view-role-policy.md).
-- For information on how to attach and detach permissions for AWS identities, see [Attach and detach policies for AWS identities](cloudknox-howto-attach-detach-permissions.md).
-- For information on how to revoke high-risk and unused tasks or assign read-only status for Azure and GCP identities, see [Revoke high-risk and unused tasks or assign read-only status for Azure and GCP identities](cloudknox-howto-revoke-task-readonly-status.md)
-- For information on how to create or approve a request for permissions, see [Create or approve a request for permissions](cloudknox-howto-create-approve-privilege-request.md).
-- For information on how to view information about roles/policies, see [View information about roles/policies](cloudknox-howto-view-role-policy.md)
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-create-alert-trigger.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-create-alert-trigger.md
deleted file mode 100644
index fb94891542776..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-create-alert-trigger.md
+++ /dev/null
@@ -1,113 +0,0 @@
----
-title: Create and view activity alerts and alert triggers in CloudKnox Permissions Management
-description: How to create and view activity alerts and alert triggers in CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# Create and view activity alerts and alert triggers
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-This article describes how you can create and view activity alerts and alert triggers in CloudKnox Permissions Management (CloudKnox).
-
-## Create an activity alert trigger
-
-1. In the CloudKnox home page, select **Activity Triggers** (the bell icon).
-1. In the **Activity** tab, select **Create Activity Trigger**.
-1. In the **Alert Name** box, enter a name for your alert.
-1. In **Authorization System Type**, select your authorization system: Amazon Web Services (**AWS**), Microsoft **Azure**, or Google Cloud Platform (**GCP**).
-1. In **Authorization System**, select **Is** or **In**, and then select one or more accounts and folders.
-1. From the **Select a Type** dropdown, select: **Access Key ID**, **Identity Tag Key**, **Identity Tag Key Value**, **Resource Name**, **Resource Tag Key**, **Resource Tag Key Value**, **Role Name**, **Role Session Name**, **State**, **Task Name**, or **Username**.
-1. From the **Operator** dropdown, select an option:
-
- - **Is**/**Is Not**: Select in the value field to view a list of all available values. You can either select or enter the required value.
- - **Contains**/**Not Contains**: Enter any text that the query parameter should or shouldn't contain, for example *CloudKnox*.
- - **In**/**Not In**: Select in the value field to view list of all available values. Select the required multiple values.
-
-1. To add another parameter, select the plus sign **(+)**, then select an operator, and then enter a value.
-
- To remove a parameter, select the minus sign **(-)**.
-1. To add another activity type, select **Add**, and then enter your parameters.
-1. To save your alert, select **Save**.
-
- A message displays to confirm your activity trigger has been created.
-
- The **Triggers** table in the **Alert Triggers** subtab displays your alert trigger.
-
-## View an activity alert
-
-1. In the CloudKnox home page, select **Activity Triggers** (the bell icon).
-1. In the **Activity** tab, select the **Alerts** subtab.
-1. From the **Alert Name** dropdown, select an alert.
-1. From the **Date** dropdown, select **Last 24 Hours**, **Last 2 Days**, **Last Week**, or **Custom Range**.
-
- If you select **Custom Range**, select date and time settings, and then select **Apply**.
-1. To view the alert, select **Apply**
-
- The **Alerts** table displays information about your alert.
-
-
-
-## View activity alert triggers
-
-1. In the CloudKnox home page, select **Activity triggers** (the bell icon).
-1. In the **Activity** tab, select the **Alert Triggers** subtab.
-1. From the **Status** dropdown, select **All**, **Activated** or **Deactivated**, then select **Apply**.
-
- The **Triggers** table displays the following information:
-
- - **Alerts**: The name of the alert trigger.
- - **# of users subscribed**: The number of users who have subscribed to a specific alert trigger.
-
- - Select a number in this column to view information about the user.
-
- - **Created By**: The email address of the user who created the alert trigger.
- - **Modified By**: The email address of the user who last modified the alert trigger.
- - **Last Updated**: The date and time the alert trigger was last updated.
- - **Subscription**: A switch that displays if the alert is **On** or **Off**.
-
- - If the column displays **Off**, the current user isn't subscribed to that alert. Switch the toggle to **On** to subscribe to the alert.
- - The user who creates an alert trigger is automatically subscribed to the alert, and will receive emails about the alert.
-
-1. To see only activated or only deactivated triggers, from the **Status** dropdown, select **Activated** or **Deactivated**, and then select **Apply**.
-
-1. To view other options available to you, select the ellipses (**...**), and then select from the available options.
-
- If the **Subscription** is **On**, the following options are available:
-
- - **Edit**: Enables you to modify alert parameters
-
- > [!NOTE]
- > Only the user who created the alert can perform the following actions: edit the trigger screen, rename an alert, deactivate an alert, and delete an alert. Changes made by other users aren't saved.
-
- - **Duplicate**: Create a duplicate of the alert called "**Copy of XXX**".
- - **Rename**: Enter the new name of the query, and then select **Save.**
- - **Deactivate**: The alert will still be listed, but will no longer send emails to subscribed users.
- - **Activate**: Activate the alert trigger and start sending emails to subscribed users.
- - **Notification Settings**: View the **Email** of users who are subscribed to the alert trigger and their **User Status**.
- - **Delete**: Delete the alert.
-
- If the **Subscription** is **Off**, the following options are available:
- - **View**: View details of the alert trigger.
- - **Notification Settings**: View the **Email** of users who are subscribed to the alert trigger and their **User Status**.
- - **Duplicate**: Create a duplicate copy of the selected alert trigger.
-
-
-
-
-## Next steps
-
-- For an overview on activity triggers, see [View information about activity triggers](cloudknox-ui-triggers.md).
-- For information on rule-based anomalies and anomaly triggers, see [Create and view rule-based anomalies and anomaly triggers](cloudknox-product-rule-based-anomalies.md).
-- For information on finding outliers in identity's behavior, see [Create and view statistical anomalies and anomaly triggers](cloudknox-product-statistical-anomalies.md).
-- For information on permission analytics triggers, see [Create and view permission analytics triggers](cloudknox-product-permission-analytics.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-create-approve-privilege-request.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-create-approve-privilege-request.md
deleted file mode 100644
index 9cbe190dbef37..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-create-approve-privilege-request.md
+++ /dev/null
@@ -1,120 +0,0 @@
----
-title: Create or approve a request for permissions in the Remediation dashboard in CloudKnox Permissions Management
-description: How to create or approve a request for permissions in the Remediation dashboard.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# Create or approve a request for permissions
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-This article describes how to create or approve a request for permissions in the **Remediation** dashboard in CloudKnox Permissions Management (CloudKnox). You can create and approve requests for the Amazon Web Services (AWS), Microsoft Azure, or Google Cloud Platform (GCP) authorization systems.
-
-The **Remediation** dashboard has two privilege-on-demand (POD) workflows you can use:
-- **New Request**: The workflow used by a user to create a request for permissions for a specified duration.
-- **Approver**: The workflow used by an approver to review and approve or reject a user’s request for permissions.
-
-
-> [!NOTE]
-> To view the **Remediation** dashboard, you must have **Viewer**, **Controller**, or **Administrator** permissions. To make changes on this tab, you must have **Controller** or **Administrator** permissions. If you don’t have these permissions, contact your system administrator.
-
-## Create a request for permissions
-
-1. On the CloudKnox home page, select the **Remediation** tab, and then select the **My Requests** subtab.
-
- The **My Requests** subtab displays the following options:
- - **Pending**: A list of requests you’ve made but haven't yet been reviewed.
- - **Approved**: A list of requests that have been reviewed and approved by the approver. These requests have either already been activated or are in the process of being activated.
- - **Processed**: A summary of the requests you’ve created that have been approved (**Done**), **Rejected**, and requests that have been **Canceled**.
-
-1. To create a request for permissions, select **New Request**.
-1. In the **Roles/Tasks** page:
- 1. From the **Authorization System Type** dropdown, select the authorization system type you want to access: **AWS**, **Azure** or **GCP**.
- 1. From the **Authorization System** dropdown, select the accounts you want to access.
- 1. From the **Identity** dropdown, select the identity on whose behalf you’re requesting access.
-
- - If the identity you select is a Security Assertions Markup Language (SAML) user, and since a SAML user accesses the system through assumption of a role, select the user’s role in **Role**.
-
- - If the identity you select is a local user, to select the policies you want:
- 1. Select **Request Policy(s)**.
- 1. In **Available Policies**, select the policies you want.
- 1. To select a specific policy, select the plus sign, and then find and select the policy you want.
-
- The policies you’ve selected appear in the **Selected policies** box.
-
- - If the identity you select is a local user, to select the tasks you want:
- 1. Select **Request Task(s)**.
- 1. In **Available Tasks**, select the tasks you want.
- 1. To select a specific task, select the plus sign, and then select the task you want.
-
- The tasks you’ve selected appear in the **Selected Tasks** box.
-
- If the user already has existing policies, they're displayed in **Existing Policies**.
-1. Select **Next**.
-
-1. If you selected **AWS**, the **Scope** page appears.
-
- 1. In **Select Scope**, select:
- - **All Resources**
- - **Specific Resources**, and then select the resources you want.
- - **No Resources**
- 1. In **Request Conditions**:
- 1. Select **JSON** to add a JSON block of code.
- 1. Select **Done** to accept the code you’ve entered, or **Clear** to delete what you’ve entered and start again.
- 1. In **Effect**, select **Allow** or **Deny.**
- 1. Select **Next**.
-
-1. The **Confirmation** page appears.
-1. In **Request Summary**, enter a summary for your request.
-1. Optional: In **Note**, enter a note for the approver.
-1. In **Schedule**, select when (how quickly) you want your request to be processed:
- - **ASAP**
- - **Once**
- - In **Create Schedule**, select the **Frequency**, **Date**, **Time**, and **For** the required duration, then select **Schedule**.
- - **Daily**
- - **Weekly**
- - **Monthly**
-1. Select **Submit**.
-
- The following message appears: **Your Request Has Been Successfully Submitted.**
-
- The request you submitted is now listed in **Pending Requests**.
-
-## Approve or reject a request for permissions
-
-1. On the CloudKnox home page, select the **Remediation** tab, and then select the **My requests** subtab.
-1. To view a list of requests that haven't yet been reviewed, select **Pending Requests**.
-1. In the **Request Summary** list, select the ellipses **(…)** menu on the right of a request, and then select:
-
- - **Details** to view the details of the request.
- - **Approve** to approve the request.
- - **Reject** to reject the request.
-
-1. (Optional) add a note to the requestor, and then select **Confirm.**
-
- The **Approved** subtab displays a list of requests that have been reviewed and approved by the approver. These requests have either already been activated or are in the process of being activated.
- The **Processed** subtab displays a summary of the requests that have been approved or rejected, and requests that have been canceled.
-
-
-## Next steps
-
-
-- For information on how to view existing roles/policies, requests, and permissions, see [View roles/policies, requests, and permission in the Remediation dashboard](cloudknox-ui-remediation.md).
-- For information on how to create a role/policy, see [Create a role/policy](cloudknox-howto-create-role-policy.md).
-- For information on how to clone a role/policy, see [Clone a role/policy](cloudknox-howto-clone-role-policy.md).
-- For information on how to delete a role/policy, see [Delete a role/policy](cloudknox-howto-delete-role-policy.md).
-- For information on how to modify a role/policy, see Modify a role/policy](cloudknox-howto-modify-role-policy.md).
-- To view information about roles/policies, see [View information about roles/policies](cloudknox-howto-view-role-policy.md).
-- For information on how to attach and detach permissions for Amazon Web Services (AWS) identities, see [Attach and detach policies for AWS identities](cloudknox-howto-attach-detach-permissions.md).
-- For information on how to add and remove roles and tasks for Microsoft Azure and Google Cloud Platform (GCP) identities, see [Add and remove roles and tasks for Azure and GCP identities](cloudknox-howto-attach-detach-permissions.md).
-- For information on how to revoke high-risk and unused tasks or assign read-only status for Microsoft Azure and Google Cloud Platform (GCP) identities, see [Revoke high-risk and unused tasks or assign read-only status for Azure and GCP identities](cloudknox-howto-revoke-task-readonly-status.md)
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-create-custom-queries.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-create-custom-queries.md
deleted file mode 100644
index 181f0988bfc96..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-create-custom-queries.md
+++ /dev/null
@@ -1,121 +0,0 @@
----
-title: Create a custom query in CloudKnox Permissions Management
-description: How to create a custom query in the Audit dashboard in CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# Create a custom query
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-This article describes how you can use the **Audit** dashboard in CloudKnox Permissions Management (CloudKnox) to create custom queries that you can modify, save, and run as often as you want.
-
-## Open the Audit dashboard
-
-- In the CloudKnox home page, select the **Audit** tab.
-
- CloudKnox displays the query options available to you.
-
-## Create a custom query
-
-1. In the **Audit** dashboard, in the **New Query** subtab, select **Authorization System Type**, and then select the authorization systems you want to search: Amazon Web Services (**AWS**), Microsoft **Azure**, Google Cloud Platform (**GCP**), or Platform (**Platform**).
-1. Select the authorization systems you want to search from the **List** and **Folders** box, and then select **Apply**.
-
-1. In the **New Query** box, enter your query parameters, and then select **Add**.
- For example, to query by a date, select **Date** in the first box. In the second and third boxes, select the down arrow, and then select one of the date-related options.
-
-1. To add parameters, select **Add**, select the down arrow in the first box to display a dropdown of available selections. Then select the parameter you want.
-1. To add more parameters to the same query, select **Add** (the plus sign), and from the first box, select **And** or **Or**.
-
- Repeat this step for the second and third box to complete entering the parameters.
-1. To change your query as you're creating it, select **Edit** (the pencil icon), and then change the query parameters.
-1. To change the parameter options, select the down arrow in each box to display a dropdown of available selections. Then select the option you want.
-1. To discard your selections, select **Reset Query** for the parameter you want to change, and then make your selections again.
-1. When you’re ready to run your query, select **Search**.
-1. To save the query, select **Save**.
-
- CloudKnox saves the query and adds it to the **Saved Queries** list.
-
-## Save the query under a new name
-
-1. In the **Audit** dashboard, select the ellipses menu **(…)** on the far right and select **Save As**.
-2. Enter a new name for the query, and then select **Save**.
-
- CloudKnox saves the query under the new name. Both the new query and the original query display in the **Saved Queries** list.
-
-## View a saved query
-
-1. In the **Audit** dashboard, select the down arrow next to **Saved Queries**.
-
- A list of saved queries appears.
-2. Select the query you want to open.
-3. To open the query with the authorization systems you saved with the query, select **Load with the saved authorization systems**.
-4. To open the query with the authorization systems you have currently selected (which may be different from the ones you originally saved), select **Load with the currently selected authorization systems**.
-5. Select **Load Queries**.
-
- CloudKnox displays details of the query in the **Activity** table. Select a query to see its details:
-
- - The **Identity Details**.
- - The **Domain** name.
- - The **Resource Name** and **Resource Type**.
- - The **Task Name**.
- - The **Date**.
- - The **IP Address**.
- - The **Authorization System**.
-
-## View a raw events summary
-
-1. In the **Audit** dashboard, select **View** (the eye icon) to open the **Raw Events Summary** box.
-
- The **Raw Events Summary** box displays **Username or Role Session Name**, the **Task name**, and the script for your query.
-1. Select **Copy** to copy the script.
-1. Select **X** to close the **Raw events summary** box.
-
-
-## Run a saved query
-
-1. In the **Audit** dashboard, select the query you want to run.
-
- CloudKnox displays the results of the query in the **Activity** table.
-
-## Delete a query
-
-1. In the **Audit** dashboard, load the query you want to delete.
-2. Select **Delete**.
-
- CloudKnox deletes the query. Deleted queries don't display in the **Saved Queries** list.
-
-## Rename a query
-
-1. In the **Audit** dashboard, load the query you want to rename.
-2. Select the ellipses menu **(…)** on the far right, and select **Rename**.
-3. Enter a new name for the query, and then select **Save**.
-
- CloudKnox saves the query under the new name. Both the new query and the original query display in the **Saved Queries** list.
-
-## Duplicate a query
-
-1. In the **Audit** dashboard, load the query you want to duplicate.
-2. Select the ellipses menu **(…)** on the far right, and then select **Duplicate**.
-
- CloudKnox creates a copy of the query. Both the copy of the query and the original query display in the **Saved Queries** list.
-
- You can rename the original or copy of the query, change it, and save it without changing the other query.
-
-
-
-## Next steps
-
-- For information on how to view how users access information, see [Use queries to see how users access information](cloudknox-ui-audit-trail.md).
-- For information on how to filter and view user activity, see [Filter and query user activity](cloudknox-product-audit-trail.md).
-- For information on how to generate an on-demand report from a query, see [Generate an on-demand report from a query](cloudknox-howto-audit-trail-results.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-create-group-based-permissions.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-create-group-based-permissions.md
deleted file mode 100644
index 731a60ed97e41..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-create-group-based-permissions.md
+++ /dev/null
@@ -1,57 +0,0 @@
----
-title: Select group-based permissions settings in CloudKnox Permissions Management with the User management dashboard
-description: How to select group-based permissions settings in CloudKnox Permissions Management with the User management dashboard.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# Select group-based permissions settings
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-This article describes how you can create and manage group-based permissions in CloudKnox Permissions Management (CloudKnox) with the User management dashboard.
-
-[!NOTE] The CloudKnox Administrator for all authorization systems will be able to create the new group based permissions.
-
-## Select administrative permissions settings for a group
-
-1. To display the **User Management** dashboard, select **User** (your initials) in the upper right of the screen, and then select **User Management**.
-1. Select the **Groups** tab, and then press the **Create Permission** button in the upper right of the table.
-1. In the **Set Group Permission** box, begin typing the name of an **Azure Active Directory Security Group** in your tenant.
-
-1. Select the permission setting you want:
-2.
- - **Admin for all Authorization System Types** provides **View**, **Control**, and **Approve** permissions for all authorization system types.
- - **Admin for selected Authorization System Types** provides **View**, **Control**, and **Approve** permissions for selected authorization system types.
- - **Custom** allows you to set **View**, **Control**, and **Approve** permissions for the authorization system types that you select.
-1. Select **Next**
-
-1. If you selected **Admin for all Authorization System Types**
- - Select Identities for each Authorization System that you would like members of this group to Request on.
-
-1. If you selected **Admin for selected Authorization System Types**
- - Select **Viewer**, **Controller**, or **Approver** for the **Authorization System Types** you want.
- - Select **Next** and then select Identities for each Authorization System that you would like members of this group to Request on.
-
-1. If you select **Custom**, select the **Authorization System Types** you want.
- - Select **Viewer**, **Controller**, or **Approver** for the **Authorization Systems** you want.
- - Select **Next** and then select Identities for each Authorization System that you would like members of this group to Request on.
-
-1. Select **Save**, The following message appears: **New Group Has been Created Successfully.**
-1. To see the group you created in the **Groups** table, refresh the page.
-
-## Next steps
-
-- For information about how to manage user information, see [Manage users and groups with the User management dashboard](cloudknox-ui-user-management.md).
-- For information about how to view information about active and completed tasks, see [View information about active and completed tasks](cloudknox-ui-tasks.md).
-- For information about how to view personal and organization information, see [View personal and organization information](cloudknox-product-account-settings.md).
-
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-create-role-policy.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-create-role-policy.md
deleted file mode 100644
index 91218399c57d1..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-create-role-policy.md
+++ /dev/null
@@ -1,171 +0,0 @@
----
-title: Create a role/policy in the Remediation dashboard in CloudKnox Permissions Management
-description: How to create a role/policy in the Remediation dashboard in CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# Create a role/policy in the Remediation dashboard
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-This article describes how you can use the **Remediation** dashboard in CloudKnox Permissions Management (CloudKnox) to create roles/policies for the Amazon Web Services (AWS), Microsoft Azure, or Google Cloud Platform (GCP) authorization systems.
-
-> [!NOTE]
-> To view the **Remediation** tab, you must have **Viewer**, **Controller**, or **Administrator** permissions. To make changes on this tab, you must have **Controller** or **Administrator** permissions. If you don’t have these permissions, contact your system administrator.
-
-> [!NOTE]
-> Microsoft Azure uses the term *role* for what other cloud providers call *policy*. CloudKnox automatically makes this terminology change when you select the authorization system type. In the user documentation, we use *role/policy* to refer to both.
-
-## Create a policy for AWS
-
-1. On the CloudKnox home page, select the **Remediation** tab, and then select the **Role/Policies** tab.
-1. Use the dropdown lists to select the **Authorization System Type** and **Authorization System**.
-1. Select **Create Policy**.
-1. On the **Details** page, the **Authorization System Type** and **Authorization System** are pre-populated from your previous settings.
- - To change the settings, make a selection from the dropdown.
-1. Under **How Would You Like To Create The Policy**, select the required option:
-
- - **Activity of User(s)**: Allows you to create a policy based on user activity.
- - **Activity of Group(s)**: Allows you to create a policy based on the aggregated activity of all the users belonging to the group(s).
- - **Activity of Resource(s)**: Allows you to create a policy based on the activity of a resource, for example, an EC2 instance.
- - **Activity of Role**: Allows you to create a policy based on the aggregated activity of all the users that assumed the role.
- - **Activity of Tag(s)**: Allows you to create a policy based on the aggregated activity of all the tags.
- - **Activity of Lambda Function**: Allows you to create a new policy based on the Lambda function.
- - **From Existing Policy**: Allows you to create a new policy based on an existing policy.
- - **New Policy**: Allows you to create a new policy from scratch.
-1. In **Tasks performed in last**, select the duration: **90 days**, **60 days**, **30 days**, **7 days**, or **1 day**.
-1. Depending on your preference, select or deselect **Include Access Advisor data.**
-1. In **Settings**, from the **Available** column, select the plus sign **(+)** to move the identity into the **Selected** column, and then select **Next**.
-
-1. On the **Tasks** page, from the **Available** column, select the plus sign **(+)** to move the task into the **Selected** column.
- - To add a whole category, select a category.
- - To add individual items from a category, select the down arrow on the left of the category name, and then select individual items.
-1. In **Resources**, select **All Resources** or **Specific Resources**.
-
- If you select **Specific Resources**, a list of available resources appears. Find the resources you want to add, and then select **Add**.
-1. In **Request Conditions**, select **JSON** .
-1. In **Effect**, select **Allow** or **Deny**, and then select **Next**.
-1. In **Policy name:**, enter a name for your policy.
-1. To add another statement to your policy, select **Add Statement**, and then, from the list of **Statements**, select a statement.
-1. Review your **Task**, **Resources**, **Request Conditions**, and **Effect** settings, and then select **Next**.
-
-
-1. On the **Preview** page, review the script to confirm it's what you want.
-1. If your controller isn't enabled, select **Download JSON** or **Download Script** to download the code and run it yourself.
-
- If your controller is enabled, skip this step.
-1. Select **Split Policy**, and then select **Submit**.
-
- A message confirms that your policy has been submitted for creation
-
-1. The [**CloudKnox Tasks**](cloudknox-ui-tasks.md) pane appears on the right.
- - The **Active** tab displays a list of the policies CloudKnox is currently processing.
- - The **Completed** tab displays a list of the policies CloudKnox has completed.
-1. Refresh the **Role/Policies** tab to see the policy you created.
-
-
-
-## Create a role for Azure
-
-1. On the CloudKnox home page, select the **Remediation** tab, and then select the **Role/Policies** tab.
-1. Use the dropdown lists to select the **Authorization System Type** and **Authorization System**.
-1. Select **Create Role**.
-1. On the **Details** page, the **Authorization System Type** and **Authorization System** are pre-populated from your previous settings.
- - To change the settings, select the box and make a selection from the dropdown.
-1. Under **How Would You Like To Create The Role?**, select the required option:
-
- - **Activity of User(s)**: Allows you to create a role based on user activity.
- - **Activity of Group(s)**: Allows you to create a role based on the aggregated activity of all the users belonging to the group(s).
- - **Activity of App(s)**: Allows you to create a role based on the aggregated activity of all apps.
- - **From Existing Role**: Allows you to create a new role based on an existing role.
- - **New Role**: Allows you to create a new role from scratch.
-
-1. In **Tasks performed in last**, select the duration: **90 days**, **60 days**, **30 days**, **7 days**, or **1 day**.
-1. Depending on your preference:
- - Select or deselect **Ignore Non-Microsoft Read Actions**.
- - Select or deselect **Include Read-Only Tasks**.
-1. In **Settings**, from the **Available** column, select the plus sign **(+)** to move the identity into the **Selected** column, and then select **Next**.
-
-1. On the **Tasks** page, in **Role name:**, enter a name for your role.
-1. From the **Available** column, select the plus sign **(+)** to move the task into the **Selected** column.
- - To add a whole category, select a category.
- - To add individual items from a category, select the down arrow on the left of the category name, and then select individual items.
-1. Select **Next**.
-
-1. On the **Preview** page, review:
- - The list of selected **Actions** and **Not Actions**.
- - The **JSON** or **Script** to confirm it's what you want.
-1. If your controller isn't enabled, select **Download JSON** or **Download Script** to download the code and run it yourself.
-
- If your controller is enabled, skip this step.
-
-1. Select **Submit**.
-
- A message confirms that your role has been submitted for creation
-
-1. The [**CloudKnox Tasks**](cloudknox-ui-tasks.md) pane appears on the right.
- - The **Active** tab displays a list of the policies CloudKnox is currently processing.
- - The **Completed** tab displays a list of the policies CloudKnox has completed.
-1. Refresh the **Role/Policies** tab to see the role you created.
-
-## Create a role for GCP
-
-1. On the CloudKnox home page, select the **Remediation** tab, and then select the **Role/Policies** tab.
-1. Use the dropdown lists to select the **Authorization System Type** and **Authorization System**.
-1. Select **Create Role**.
-1. On the **Details** page, the **Authorization System Type** and **Authorization System** are pre-populated from your previous settings.
- - To change the settings, select the box and make a selection from the dropdown.
-1. Under **How Would You Like To Create The Role?**, select the required option:
-
- - **Activity of User(s)**: Allows you to create a role based on user activity.
- - **Activity of Group(s)**: Allows you to create a role based on the aggregated activity of all the users belonging to the group(s).
- - **Activity of Service Account(s)**: Allows you to create a role based on the aggregated activity of all service accounts.
- - **From Existing Role**: Allows you to create a new role based on an existing role.
- - **New Role**: Allows you to create a new role from scratch.
-
-1. In **Tasks performed in last**, select the duration: **90 days**, **60 days**, **30 days**, **7 days**, or **1 day**.
-1. If you selected **Activity Of Service Account(s)** in the previous step, select or deselect **Collect activity across all GCP Authorization Systems.**
-1. From the **Available** column, select the plus sign **(+)** to move the identity into the **Selected** column, and then select **Next**.
-
-
-1. On the **Tasks** page, in **Role name:**, enter a name for your role.
-1. From the **Available** column, select the plus sign **(+)** to move the task into the **Selected** column.
- - To add a whole category, select a category.
- - To add individual items from a category, select the down arrow on the left of the category name, and then select individual items.
-1. Select **Next**.
-
-1. On the **Preview** page, review:
- - The list of selected **Actions**.
- - The **YAML** or **Script** to confirm it's what you want.
-1. If your controller isn't enabled, select **Download YAML** or **Download Script** to download the code and run it yourself.
-1. Select **Submit**.
- A message confirms that your role has been submitted for creation
-
-1. The [**CloudKnox Tasks**](cloudknox-ui-tasks.md) pane appears on the right.
-
- - The **Active** tab displays a list of the policies CloudKnox is currently processing.
- - The **Completed** tab displays a list of the policies CloudKnox has completed.
-1. Refresh the **Role/Policies** tab to see the role you created.
-
-
-## Next steps
-
-- For information on how to view existing roles/policies, requests, and permissions, see [View roles/policies, requests, and permission in the Remediation dashboard](cloudknox-ui-remediation.md).
-- For information on how to modify a role/policy, see [Modify a role/policy](cloudknox-howto-modify-role-policy.md).
-- For information on how to clone a role/policy, see [Clone a role/policy](cloudknox-howto-clone-role-policy.md).
-- For information on how to delete a role/policy, see [Delete a role/policy](cloudknox-howto-delete-role-policy.md).
-- To view information about roles/policies, see [View information about roles/policies](cloudknox-howto-view-role-policy.md).
-- For information on how to attach and detach permissions for AWS identities, see [Attach and detach policies for AWS identities](cloudknox-howto-attach-detach-permissions.md).
-- For information on how to revoke high-risk and unused tasks or assign read-only status for Azure and GCP identities, see [Revoke high-risk and unused tasks or assign read-only status for Azure and GCP identities](cloudknox-howto-revoke-task-readonly-status.md)
-- For information on how to create or approve a request for permissions, see [Create or approve a request for permissions](cloudknox-howto-create-approve-privilege-request.md).
-- For information on how to view information about roles/policies, see [View information about roles/policies](cloudknox-howto-view-role-policy.md)
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-create-rule.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-create-rule.md
deleted file mode 100644
index 38c00f0e645a2..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-create-rule.md
+++ /dev/null
@@ -1,71 +0,0 @@
----
-title: Create a rule in the Autopilot dashboard in CloudKnox Permissions Management
-description: How to create a rule in the Autopilot dashboard in CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# Create a rule in the Autopilot dashboard
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-This article describes how to create a rule in the CloudKnox Permissions Management (CloudKnox) **Autopilot** dashboard.
-
-> [!NOTE]
-> Only users with **Administrator** permissions can view and make changes on the Autopilot tab. If you don’t have these permissions, contact your system administrator.
-
-## Create a rule
-
-1. In the CloudKnox home page, select the **Autopilot** tab.
-1. In the **Autopilot** dashboard, from the **Authorization system types** dropdown, select Amazon Web Services (**AWS**), Microsoft **Azure**, or Google Cloud Platform (**GCP**).
-1. From the **Authorization System** dropdown, in the **List** and **Folders** box, select the account and folder names that you want, and then select **Apply**.
-1. In the **Autopilot** dashboard, select **New Rule**.
-1. In the **Rule Name** box, enter a name for your rule.
-1. Select **AWS**, **Azure**, **GCP**, and then select **Next**.
-
-1. Select **Authorization Systems**, and then select **All** or the account names that you want.
-1. From the **Folders** dropdown, select a folder, and then select **Apply**.
-
- To change your folder settings, select **Reset**.
-
- - The **Status** column displays if the authorization system is **Online** or **Offline**.
- - The **Controller** column displays if the controller is **Enabled** or **Not Enabled**.
-
-
-1. Select **Configure** , and then select the following parameters for your rule:
-
- - **Role Created On Is**: Select the duration in days.
- - **Role Last Used On Is**: Select the duration in days when the role was last used.
- - **Cross Account Role**: Select **True** or **False**.
-
-1. Select **Mode**, and then, if you want recommendations to be generated and applied manually, select **On-Demand**.
-1. Select **Save**
-
- The following information displays in the **Autopilot Rules** table:
-
- - **Rule Name**: The name of the rule.
- - **State**: The status of the rule: idle (not being use) or active (being used).
- - **Rule Type**: The type of rule being applied.
- - **Mode**: The status of the mode: on-demand or not.
- - **Last Generated**: The date and time the rule was last generated.
- - **Created By**: The email address of the user who created the rule.
- - **Last Modified On**: The date and time the rule was last modified.
- - **Subscription**: Provides an **On** or **Off** switch that allows you to receive email notifications when recommendations have been generated, applied, or unapplied.
-
-
-
-
-## Next steps
-
-- For more information about viewing rules, see [View roles in the Autopilot dashboard](cloudknox-ui-autopilot.md).
-- For information about generating, viewing, and applying rule recommendations for rules, see [Generate, view, and apply rule recommendations for rules](cloudknox-howto-recommendations-rule.md).
-- For information about notification settings for rules, see [View notification settings for a rule](cloudknox-howto-notifications-rule.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-delete-role-policy.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-delete-role-policy.md
deleted file mode 100644
index 5339d078bcdd7..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-delete-role-policy.md
+++ /dev/null
@@ -1,51 +0,0 @@
----
-title: Delete a role/policy in the Remediation dashboard in CloudKnox Permissions Management
-description: How to delete a role/policy in the Just Enough Permissions (JEP) Controller.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# Delete a role/policy in the Remediation dashboard
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-This article describes how you can use the **Remediation** dashboard in CloudKnox Permissions Management (CloudKnox) to delete roles/policies for the Amazon Web Services (AWS), Microsoft Azure, or Google Cloud Platform (GCP) authorization systems.
-
-> [!NOTE]
-> To view the **Remediation** dashboard, you must have **Viewer**, **Controller**, or **Administrator** permissions. To make changes on this tab, you must have **Controller** or **Administrator** permissions. If you don’t have these permissions, contact your system administrator.
-
-> [!NOTE]
-> Microsoft Azure uses the term *role* for what other Cloud providers call *policy*. CloudKnox automatically makes this terminology change when you select the authorization system type. In the user documentation, we use *role/policy* to refer to both.
-
-## Delete a role/policy
-
-1. On the CloudKnox home page, select the **Remediation** tab, and then select the **Role/Policies** subtab.
-1. Select the role/policy you want to delete, and from the **Actions** column, select **Delete**.
-
- You can only delete a role/policy if it isn't assigned to an identity.
-
- You can't delete system roles/policies.
-
-1. On the **Preview** page, review the role/policy information to make sure you want to delete it, and then select **Submit**.
-
-## Next steps
-
-
-- For information on how to view existing roles/policies, requests, and permissions, see [View roles/policies, requests, and permission in the Remediation dashboard](cloudknox-ui-remediation.md).
-- For information on how to create a role/policy, see [Create a role/policy](cloudknox-howto-create-role-policy.md).
-- For information on how to clone a role/policy, see [Clone a role/policy](cloudknox-howto-clone-role-policy.md).
-- For information on how to modify a role/policy, see Modify a role/policy](cloudknox-howto-modify-role-policy.md).
-- To view information about roles/policies, see [View information about roles/policies](cloudknox-howto-view-role-policy.md).
-- For information on how to attach and detach permissions for AWS identities, see [Attach and detach policies for AWS identities](cloudknox-howto-attach-detach-permissions.md).
-- For information on how to revoke high-risk and unused tasks or assign read-only status for Azure and GCP identities, see [Revoke high-risk and unused tasks or assign read-only status for Azure and GCP identities](cloudknox-howto-revoke-task-readonly-status.md)
-- For information on how to create or approve a request for permissions, see [Create or approve a request for permissions](cloudknox-howto-create-approve-privilege-request.md).
-- For information on how to view information about roles/policies, see [View information about roles/policies](cloudknox-howto-view-role-policy.md)
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-modify-role-policy.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-modify-role-policy.md
deleted file mode 100644
index b04e1e695c7f5..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-modify-role-policy.md
+++ /dev/null
@@ -1,50 +0,0 @@
----
-title: Modify a role/policy in the Remediation dashboard in CloudKnox Permissions Management
-description: How to modify a role/policy in the Remediation dashboard in CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# Modify a role/policy in the Remediation dashboard
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-This article describes how you can use the **Remediation** dashboard in CloudKnox Permissions Management (CloudKnox) to modify roles/policies for the Amazon Web Services (AWS), Microsoft Azure, or Google Cloud Platform (GCP) authorization systems.
-
-> [!NOTE]
-> To view the **Remediation** tab, you must have **Viewer**, **Controller**, or **Administrator** permissions. To make changes on this tab, you must have **Controller** or **Administrator** permissions. If you don’t have these permissions, contact your system administrator.
-
-> [!NOTE]
-> Microsoft Azure uses the term *role* for what other cloud providers call *policy*. CloudKnox automatically makes this terminology change when you select the authorization system type. In the user documentation, we use *role/policy* to refer to both.
-
-## Modify a role/policy
-
-1. On the CloudKnox home page, select the **Remediation** tab, and then select the **Role/Policies** tab.
-1. Select the role/policy you want to modify, and from the **Actions** column, select **Modify**.
-
- You can't modify **System** policies and roles.
-
-1. On the **Statements** page, make your changes to the **Tasks**, **Resources**, **Request conditions**, and **Effect** sections as required, and then select **Next**.
-
-1. Review the changes to the JSON or script on the **Preview** page, and then select **Submit**.
-
-## Next steps
-
-- For information on how to view existing roles/policies, requests, and permissions, see [View roles/policies, requests, and permission in the Remediation dashboard](cloudknox-ui-remediation.md).
-- For information on how to create a role/policy, see [Create a role/policy](cloudknox-howto-create-role-policy.md).
-- For information on how to clone a role/policy, see [Clone a role/policy](cloudknox-howto-clone-role-policy.md).
-- For information on how to delete a role/policy, see [Delete a role/policy](cloudknox-howto-delete-role-policy.md).
-- To view information about roles/policies, see [View information about roles/policies](cloudknox-howto-view-role-policy.md).
-- For information on how to attach and detach permissions for AWS identities, see [Attach and detach policies for AWS identities](cloudknox-howto-attach-detach-permissions.md).
-- For information on how to revoke high-risk and unused tasks or assign read-only status for Azure and GCP identities, see [Revoke high-risk and unused tasks or assign read-only status for Azure and GCP identities](cloudknox-howto-revoke-task-readonly-status.md)
-- For information on how to create or approve a request for permissions, see [Create or approve a request for permissions](cloudknox-howto-create-approve-privilege-request.md).
-- For information on how to view information about roles/policies, see [View information about roles/policies](cloudknox-howto-view-role-policy.md)
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-notifications-rule.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-notifications-rule.md
deleted file mode 100644
index 54d9c277b0b4e..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-notifications-rule.md
+++ /dev/null
@@ -1,44 +0,0 @@
----
-title: View notification settings for a rule in the Autopilot dashboard in CloudKnox Permissions Management
-description: How to view notification settings for a rule in the Autopilot dashboard in CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# View notification settings for a rule in the Autopilot dashboard
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-This article describes how to view notification settings for a rule in the CloudKnox Permissions Management (CloudKnox) **Autopilot** dashboard.
-
-> [!NOTE]
-> Only users with **Administrator** permissions can view and make changes on the Autopilot tab. If you don’t have these permissions, contact your system administrator.
-
-## View notification settings for a rule
-
-1. In the CloudKnox home page, select the **Autopilot** tab.
-1. In the **Autopilot** dashboard, from the **Authorization system types** dropdown, select Amazon Web Services (**AWS**), Microsoft **Azure**, or Google Cloud Platform (**GCP**).
-1. From the **Authorization System** dropdown, in the **List** and **Folders** box, select the account and folder names that you want, and then select **Apply**.
-1. In the **Autopilot** dashboard, select a rule.
-1. In the far right of the row, select the ellipses **(...)**
-1. To view notification settings for a rule, select **Notification Settings**.
-
- CloudKnox displays a list of subscribed users. These users are signed up to receive notifications for the selected rule.
-
-1. To close the **Notification Settings** box, select **Close**.
-
-
-## Next steps
-
-- For more information about viewing rules, see [View roles in the Autopilot dashboard](cloudknox-ui-autopilot.md).
-- For information about creating rules, see [Create a rule](cloudknox-howto-create-rule.md).
-- For information about generating, viewing, and applying rule recommendations for rules, see [Generate, view, and apply rule recommendations for rules](cloudknox-howto-recommendations-rule.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-recommendations-rule.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-recommendations-rule.md
deleted file mode 100644
index f73e725c3909c..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-recommendations-rule.md
+++ /dev/null
@@ -1,88 +0,0 @@
----
-title: Generate, view, and apply rule recommendations in the Autopilot dashboard in CloudKnox Permissions Management
-description: How to generate, view, and apply rule recommendations in the Autopilot dashboard in CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# Generate, view, and apply rule recommendations in the Autopilot dashboard
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-This article describes how to generate and view rule recommendations in the CloudKnox Permissions Management (CloudKnox) **Autopilot** dashboard.
-
-> [!NOTE]
-> Only users with **Administrator** permissions can view and make changes on the Autopilot tab. If you don’t have these permissions, contact your system administrator.
-
-## Generate rule recommendations
-
-1. In the CloudKnox home page, select the **Autopilot** tab.
-1. In the **Autopilot** dashboard, from the **Authorization system types** dropdown, select Amazon Web Services (**AWS**), Microsoft **Azure**, or Google Cloud Platform (**GCP**).
-1. From the **Authorization System** dropdown, in the **List** and **Folders** box, select the account and folder names that you want, and then select **Apply**.
-1. In the **Autopilot** dashboard, select a rule.
-1. In the far right of the row, select the ellipses **(...)**.
-1. To generate recommendations for each user and the authorization system, select **Generate Recommendations**.
-
- Only the user who created the selected rule can generate a recommendation.
-1. View your recommendations in the **Recommendations** subtab.
-1. Select **Close** to close the **Recommendations** subtab.
-
-## View rule recommendations
-
-1. In the CloudKnox home page, select the **Autopilot** tab.
-1. In the **Autopilot** dashboard, from the **Authorization system types** dropdown, select Amazon Web Services (**AWS**), Microsoft **Azure**, or Google Cloud Platform (**GCP**).
-1. From the **Authorization System** dropdown, in the **List** and **Folders** box, select the account and folder names that you want, and then select **Apply**.
-1. In the **Autopilot** dashboard, select a rule.
-1. In the far right of the row, select the ellipses **(...)**
-
-1. To view recommendations for each user and the authorization system, select **View Recommendations**.
-
- CloudKnox displays the recommendations for each user and authorization system in the **Recommendations** subtab.
-
-1. Select **Close** to close the **Recommendations** subtab.
-
-## Apply rule recommendations
-
-1. In the CloudKnox home page, select the **Autopilot** tab.
-1. In the **Autopilot** dashboard, from the **Authorization system types** dropdown, select Amazon Web Services (**AWS**), Microsoft **Azure**, or Google Cloud Platform (**GCP**).
-1. From the **Authorization System** dropdown, in the **List** and **Folders** box, select the account and folder names that you want, and then select **Apply**.
-1. In the **Autopilot** dashboard, select a rule.
-1. In the far right of the row, select the ellipses **(...)**
-
-1. To view recommendations for each user and the authorization system, select **View Recommendations**.
-
- CloudKnox displays the recommendations for each user and authorization system in the **Recommendations** subtab.
-
-1. To apply a recommendation, select the **Apply Recommendations** subtab, and then select a recommendation.
-1. Select **Close** to close the **Recommendations** subtab.
-
-## Unapply rule recommendations
-
-1. In the CloudKnox home page, select the **Autopilot** tab.
-1. In the **Autopilot** dashboard, from the **Authorization system types** dropdown, select Amazon Web Services (**AWS**), Microsoft **Azure**, or Google Cloud Platform (**GCP**).
-1. From the **Authorization System** dropdown, in the **List** and **Folders** box, select the account and folder names that you want, and then select **Apply**.
-1. In the **Autopilot** dashboard, select a rule.
-1. In the far right of the row, select the ellipses **(...)**
-
-1. To view recommendations for each user and the authorization system, select **View Recommendations**.
-
- CloudKnox displays the recommendations for each user and authorization system in the **Recommendations** subtab.
-
-1. To remove a recommendation, select the **Unapply Recommendations** subtab, and then select a recommendation.
-1. Select **Close** to close the **Recommendations** subtab.
-
-
-## Next steps
-
-- For more information about viewing rules, see [View roles in the Autopilot dashboard](cloudknox-ui-autopilot.md).
-- For information about creating rules, see [Create a rule](cloudknox-howto-create-rule.md).
-- For information about notification settings for rules, see [View notification settings for a rule](cloudknox-howto-notifications-rule.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-revoke-task-readonly-status.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-revoke-task-readonly-status.md
deleted file mode 100644
index d2c5e51db065a..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-revoke-task-readonly-status.md
+++ /dev/null
@@ -1,111 +0,0 @@
----
-title: Revoke access to high-risk and unused tasks or assign read-only status for Microsoft Azure and Google Cloud Platform (GCP) identities in the Remediation dashboard in CloudKnox Permissions Management
-description: How to revoke access to high-risk and unused tasks or assign read-only status for Microsoft Azure and Google Cloud Platform (GCP) identities in the Remediation dashboard in CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# Revoke access to high-risk and unused tasks or assign read-only status for Microsoft Azure and Google Cloud Platform (GCP) identities
-
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-This article describes how you can revoke high-risk and unused tasks or assign read-only status for Microsoft Azure and Google Cloud Platform (GCP) identities using the **Remediation** dashboard.
-
-> [!NOTE]
-> To view the **Remediation** tab, your must have **Viewer**, **Controller**, or **Administrator** permissions. To make changes on this tab, you must have **Controller** or **Administrator** permissions. If you don’t have these permissions, contact your system administrator.
-
-## View an identity's permissions
-
-1. On the CloudKnox home page, select the **Remediation** tab, and then select the **Permissions** subtab.
-1. From the **Authorization System Type** dropdown, select **Azure** or **GCP**.
-1. From the **Authorization System** dropdown, select the accounts you want to access.
-1. From the **Search for** dropdown, select **Group**, **User**, or **APP/Service Account**.
-1. To search for more parameters, you can make a selection from the **User States**, **Permission Creep Index**, and **Task Usage** dropdowns.
-1. Select **Apply**.
-
- CloudKnox displays a list of groups, users, and service accounts that match your criteria.
-1. In **Enter a username**, enter or select a user.
-1. In **Enter a Group Name**, enter or select a group, then select **Apply**.
-1. Make a selection from the results list.
-
- The table displays the **Username** **Domain/Account**, **Source**, **Resource** and **Current Role**.
-
-
-## Revoke an identity's access to unused tasks
-
-1. On the CloudKnox home page, select the **Remediation** tab, and then select the **Permissions** subtab.
-1. From the **Authorization System Type** dropdown, select **Azure** or **GCP**.
-1. From the **Authorization System** dropdown, select the accounts you want to access.
-1. From the **Search for** dropdown, select **Group**, **User**, or **APP/Service Account**, and then select **Apply**.
-1. Make a selection from the results list.
-
-1. To revoke an identity's access to tasks they aren't using, select **Revoke Unused Tasks**.
-1. When the following message displays: **Are you sure you want to change permission?**, select:
- - **Generate Script** to generate a script where you can manually add/remove the permissions you selected.
- - **Execute** to change the permission.
- - **Close** to cancel the action.
-
-## Revoke an identity's access to high-risk tasks
-
-1. On the CloudKnox home page, select the **Remediation** tab, and then select the **Permissions** subtab.
-1. From the **Authorization System Type** dropdown, select **Azure** or **GCP**.
-1. From the **Authorization System** dropdown, select the accounts you want to access.
-1. From the **Search For** dropdown, select **Group**, **User**, or **APP/Service Account**, and then select **Apply**.
-1. Make a selection from the results list.
-
-1. To revoke an identity's access to high-risk tasks, select **Revoke High-Risk Tasks**.
-1. When the following message displays: **Are you sure you want to change permission?**, select:
- - **Generate Script** to generate a script where you can manually add/remove the permissions you selected.
- - **Execute** to change the permission.
- - **Close** to cancel the action.
-
-## Revoke an identity's ability to delete tasks
-
-1. On the CloudKnox home page, select the **Remediation** tab, and then select the **Permissions** subtab.
-1. From the **Authorization System Type** dropdown, select **Azure** or **GCP**.
-1. From the **Authorization System** dropdown, select the accounts you want to access.
-1. From the **Search For** dropdown, select **Group**, **User**, or **APP/Service Account**, and then select **Apply**.
-1. Make a selection from the results list.
-
-1. To revoke an identity's ability to delete tasks, select **Revoke Delete Tasks**.
-1. When the following message displays: **Are you sure you want to change permission?**, select:
- - **Generate Script** to generate a script where you can manually add/remove the permissions you selected.
- - **Execute** to change the permission.
- - **Close** to cancel the action.
-
-## Assign read-only status to an identity
-
-1. On the CloudKnox home page, select the **Remediation** tab, and then select the **Permissions** subtab.
-1. From the **Authorization System Type** dropdown, select **Azure** or **GCP**.
-1. From the **Authorization System** dropdown, select the accounts you want to access.
-1. From the **Search for** dropdown, select **Group**, **User**, or **APP/Service Account**, and then select **Apply**.
-1. Make a selection from the results list.
-
-1. To assign read-only status to an identity, select **Assign Read-Only Status**.
-1. When the following message displays: **Are you sure you want to change permission?**, select:
- - **Generate Script** to generate a script where you can manually add/remove the permissions you selected.
- - **Execute** to change the permission.
- - **Close** to cancel the action.
-
-
-## Next steps
-
-- For information on how to view existing roles/policies, requests, and permissions, see [View roles/policies, requests, and permission in the Remediation dashboard](cloudknox-ui-remediation.md).
-- For information on how to create a role/policy, see [Create a role/policy](cloudknox-howto-create-role-policy.md).
-- For information on how to clone a role/policy, see [Clone a role/policy](cloudknox-howto-clone-role-policy.md).
-- For information on how to delete a role/policy, see [Delete a role/policy](cloudknox-howto-delete-role-policy.md).
-- For information on how to modify a role/policy, see Modify a role/policy](cloudknox-howto-modify-role-policy.md).
-- To view information about roles/policies, see [View information about roles/policies](cloudknox-howto-view-role-policy.md).
-- For information on how to attach and detach permissions for AWS identities, see [Attach and detach policies for AWS identities](cloudknox-howto-attach-detach-permissions.md).
-- For information on how to add and remove roles and tasks for Azure and GCP identities, see [Add and remove roles and tasks for Azure and GCP identities](cloudknox-howto-attach-detach-permissions.md).
-- For information on how to create or approve a request for permissions, see [Create or approve a request for permissions](cloudknox-howto-create-approve-privilege-request.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-view-role-policy.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-view-role-policy.md
deleted file mode 100644
index a6574d3ae8d2a..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-howto-view-role-policy.md
+++ /dev/null
@@ -1,102 +0,0 @@
----
-title: View information about roles/ policies in the Remediation dashboard in CloudKnox Permissions Management
-description: How to view and filter information about roles/ policies in the Remediation dashboard in CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# View information about roles/ policies in the Remediation dashboard
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-The **Remediation** dashboard in CloudKnox Permissions Management (CloudKnox) enables system administrators to view, adjust, and remediate excessive permissions based on a user's activity data. You can use the **Roles/Policies** subtab in the dashboard to view information about roles and policies in the Amazon Web Services (AWS), Microsoft Azure, or Google Cloud Platform (GCP) authorization systems.
-
-> [!NOTE]
-> To view the **Remediation dashboard** tab, you must have **Viewer**, **Controller**, or **Administrator** permissions. To make changes on this tab, you must have **Controller** or **Administrator** permissions. If you don’t have these permissions, contact your system administrator.
-
-> [!NOTE]
-> Microsoft Azure uses the term *role* for what other Cloud providers call *policy*. CloudKnox automatically makes this terminology change when you select the authorization system type. In the user documentation, we use *role/policy* to refer to both.
-
-
-## View information about roles/policies
-
-1. On the CloudKnox home page, select the **Remediation** tab, and then select the **Role/Policies** subtab.
-
- The **Role/Policies list** displays a list of existing roles/policies and the following information about each role/policy
- - **Role/Policy Name**: The name of the roles/policies available to you.
- - **Role/Policy Type**: **Custom**, **System**, or **CloudKnox Only**
- - **Actions**: The type of action you can perform on the role/policy, **Clone**, **Modify**, or **Delete**
-
-
-1. To display details about the role/policy and view its assigned tasks and identities, select the arrow to the left of the role/policy name.
-
- The **Tasks** list appears, displaying:
- - A list of **Tasks**.
- - **For AWS:**
- - The **Users**, **Groups**, and **Roles** the task is **Directly Assigned To**.
- - The **Group Members** and **Role Identities** the task is **Indirectly Accessible By**.
-
- - **For Azure:**
- - The **Users**, **Groups**, **Enterprise Applications** and **Managed Identities** the task is **Directly Assigned To**.
- - The **Group Members** the task is **Indirectly Accessible By**.
-
- - **For GCP:**
- - The **Users**, **Groups**, and **Service Accounts** the task is **Directly Assigned To**.
- - The **Group Members** the task is **Indirectly Accessible By**.
-
-1. To close the role/policy details, select the arrow to the left of the role/policy name.
-
-## Export information about roles/policies
-
-- **Export CSV**: Select this option to export the displayed list of roles/policies as a comma-separated values (CSV) file.
-
- When the file is successfully exported, a message appears: **Exported Successfully.**
-
- - Check your email for a message from the CloudKnox Customer Success Team. This email contains a link to:
- - The **Role Policy Details** report in CSV format.
- - The **Reports** dashboard where you can configure how and when you can automatically receive reports.
-
-
-
-
-## Filter information about roles/policies
-
-1. On the CloudKnox home page, select the **Remediation** dashboard, and then select the **Role/Policies** tab.
-1. To filter the roles/policies, select from the following options:
-
- - **Authorization System Type**: Select **AWS**, **Azure**, or **GCP**.
- - **Authorization System**: Select the accounts you want.
- - **Role/Policy Type**: Select from the following options:
-
- - **All**: All managed roles/policies.
- - **Custom**: A customer-managed role/policy.
- - **System**: A cloud service provider-managed role/policy.
- - **CloudKnox Only**: A role/policy created by CloudKnox.
-
- - **Role/Policy Status**: Select **All**, **Assigned**, or **Unassigned**.
- - **Role/Policy Usage**: Select **All** or **Unused**.
-1. Select **Apply**.
-
- To discard your changes, select **Reset Filter**.
-
-
-## Next steps
-
-- For information on how to view existing roles/policies, requests, and permissions, see [View roles/policies, requests, and permission in the Remediation dashboard](cloudknox-ui-remediation.md).
-- For information on how to create a role/policy, see [Create a role/policy](cloudknox-howto-create-role-policy.md).
-- For information on how to clone a role/policy, see [Clone a role/policy](cloudknox-howto-clone-role-policy.md).
-- For information on how to delete a role/policy, see [Delete a role/policy](cloudknox-howto-delete-role-policy.md).
-- For information on how to modify a role/policy, see Modify a role/policy](cloudknox-howto-modify-role-policy.md).
-- For information on how to attach and detach permissions AWS identities, see [Attach and detach policies for AWS identities](cloudknox-howto-attach-detach-permissions.md).
-- For information on how to revoke high-risk and unused tasks or assign read-only status for Azure and GCP identities, see [Revoke high-risk and unused tasks or assign read-only status for Azure and GCP identities](cloudknox-howto-revoke-task-readonly-status.md)
-- For information on how to create or approve a request for permissions, see [Create or approve a request for permissions](cloudknox-howto-create-approve-privilege-request.md).
-- For information on how to view information about roles/policies, see [View information about roles/policies](cloudknox-howto-view-role-policy.md)
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-integration-api.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-integration-api.md
deleted file mode 100644
index 2bcae5561976b..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-integration-api.md
+++ /dev/null
@@ -1,105 +0,0 @@
----
-title: Set and view configuration settings in CloudKnox Permissions Management
-description: How to view the CloudKnox Permissions Management API integration settings and create service accounts and roles.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# Set and view configuration settings
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-This topic describes how to view configuration settings, create and delete a service account, and create a role in CloudKnox Permissions Management (CloudKnox).
-
-## View configuration settings
-
-The **Integrations** dashboard displays the authorization systems available to you.
-
-1. To display the **Integrations** dashboard, select **User** (your initials) in the upper right of the screen, and then select **Integrations.**
-
- The **Integrations** dashboard displays a tile for each available authorization system.
-
-1. Select an authorization system tile to view the following integration information:
-
- 1. To find out more about the CloudKnox API, select **CloudKnox API**, and then select documentation.
-
-
- 1. To view information about service accounts, select **Integration**:
- - **Email**: Lists the email address of the user who created the integration.
- - **Created By**: Lists the first and last name of the user who created the integration.
- - **Created On**: Lists the date and time the integration was created.
- - **Recent Activity**: Lists the date and time the integration was last used, or notes if the integration was never used.
- - **Service Account ID**: Lists the service account ID.
- - **Access Key**: Lists the access key code.
-
- 1. To view settings information, select **Settings**:
- - **Roles can create service account**: Lists the type of roles you can create.
- - **Access Key Rotation Policy**: Lists notifications and actions you can set.
- - **Access Key Usage Policy**: Lists notifications and actions you can set.
-
-## Create a service account
-
-1. On the **Integrations** dashboard, select **User**, and then select **Integrations.**
-2. Click **Create Service Account**. The following information is pre-populated on the page:
- - **API Endpoint**
- - **Service Account ID**
- - **Access Key**
- - **Secret Key**
-
-3. To copy the codes, select the **Duplicate** icon next to the respective information.
-
- > [!NOTE]
- > The codes are time sensitive and will regenerate after the box is closed.
-
-4. To regenerate the codes, at the bottom of the column, select **Regenerate**.
-
-## Delete a service account
-
-1. On the **Integrations** dashboard, select **User**, and then select **Integrations.**
-
-1. On the right of the email address, select **Delete Service Account**.
-
- On the **Validate OTP To Delete [Service Name] Integration** box, a message displays asking you to check your email for a code sent to the email address on file.
-
- If you don't receive the code, select **Resend OTP**.
-
-1. In the **Enter OTP** box, enter the code from the email.
-
-1. Click **Verify**.
-
-## Create a role
-
-1. On the **Integrations** dashboard, select **User**, and then select **Settings**.
-2. Under **Roles can create service account**, select the role you want:
- - **Super Admin**
- - **Viewer**
- - **Controller**
-
-3. In the **Access Key Rotation Policy** column, select options for the following:
-
- - **How often should the users rotate their access keys?**: Select **30 days**, **60 days**, **90 days**, or **Never**.
- - **Notification**: Enter a whole number in the blank space within **Notify "X" days before the selected period**, or select **Don't Notify**.
- - **Action (after the key rotation period ends)**: Select **Disable Action Key** or **No Action**.
-
-4. In the **Access Key Usage Policy** column, select options for the following:
-
- - **How often should the users go without using their access keys?**: Select **30 days**, **60 days**, **90 days**, or **Never**.
- - **Notification**: Enter a whole number in the blank space within **Notify "X" days before the selected period**, or select **Don't Notify**.
- - **Action (after the key rotation period ends)**: Select **Disable Action Key** or **No Action**.
-
-5. Click **Save**.
-
-
-
-
-
-
\ No newline at end of file
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-multi-cloud-glossary.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-multi-cloud-glossary.md
deleted file mode 100644
index c18ec28669bb1..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-multi-cloud-glossary.md
+++ /dev/null
@@ -1,82 +0,0 @@
----
-title: CloudKnox Permissions Management - The CloudKnox glossary
-description: CloudKnox Permissions Management glossary
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: conceptual
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# The CloudKnox glossary
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-This glossary provides a list of some of the commonly used cloud terms in CloudKnox Permissions Management (CloudKnox). These terms will help CloudKnox users navigate through cloud-specific terms and cloud-generic terms.
-
-## Commonly-used acronyms and terms
-
-| Term | Definition |
-|-----------------------|-----------------------------------------------------|
-| ACL | Access control list. A list of files or resources that contain information about which users or groups have permission to access those resources or modify those files. |
-| ARN | Azure Resource Notification |
-| Authorization System | CIEM supports AWS accounts, Azure Subscriptions, GCP projects as the Authorization systems |
-| Authorization System Type | Any system which provides the authorizations by assigning the permissions to the identities, resources. CIEM supports AWS, Azure, GCP as the Authorization System Types |
-| Cloud security | A form of cybersecurity that protects data stored online on cloud computing platforms from theft, leakage, and deletion. Includes firewalls, penetration testing, obfuscation, tokenization, virtual private networks (VPN), and avoiding public internet connections. |
-| Cloud storage | A service model in which data is maintained, managed, and backed up remotely. Available to users over a network. |
-| CIAM | Cloud Infrastructure Access Management |
-| CIEM | Cloud Infrastructure Entitlement Management. The next generation of solutions for enforcing least privilege in the cloud. It addresses cloud-native security challenges of managing identity access management in cloud environments. |
-| CIS | Cloud infrastructure security |
-| CWP | Cloud Workload Protection. A workload-centric security solution that targets the unique protection requirements of workloads in modern enterprise environments. |
-| CNAPP | Cloud-Native Application Protection. The convergence of cloud security posture management (CSPM), cloud workload protection (CWP), cloud infrastructure entitlement management (CIEM), and cloud applications security broker (CASB). An integrated security approach that covers the entire lifecycle of cloud-native applications. |
-| CSPM | Cloud Security Posture Management. Addresses risks of compliance violations and misconfigurations in enterprise cloud environments. Also focuses on the resource level to identify deviations from best practice security settings for cloud governance and compliance. |
-| CWPP | Cloud Workload Protection Platform |
-| Data Collector | Virtual entity which stores the data collection configuration |
-| Delete task | A high-risk task that allows users to permanently delete a resource. |
-| ED | Enterprise directory |
-| Entitlement | An abstract attribute that represents different forms of user permissions in a range of infrastructure systems and business applications.|
-| Entitlement management | Technology that grants, resolves, enforces, revokes, and administers fine-grained access entitlements (that is, authorizations, privileges, access rights, permissions and rules). Its purpose is to execute IT access policies to structured/unstructured data, devices, and services. It can be delivered by different technologies, and is often different across platforms, applications, network components, and devices. |
-| High-risk task | A task in which a user can cause data leakage, service disruption, or service degradation. |
-| Hybrid cloud | Sometimes called a cloud hybrid. A computing environment that combines an on-premises data center (a private cloud) with a public cloud. It allows data and applications to be shared between them. |
-| hybrid cloud storage | A private or public cloud used to store an organization's data. |
-| ICM | Incident Case Management |
-| IDS | Intrusion Detection Service |
-| Identity analytics | Includes basic monitoring and remediation, dormant and orphan account detection and removal, and privileged account discovery. |
-| Identity lifecycle management | Maintain digital identities, their relationships with the organization, and their attributes during the entire process from creation to eventual archiving, using one or more identity life cycle patterns. |
-| IGA | Identity governance and administration. Technology solutions that conduct identity management and access governance operations. IGA includes the tools, technologies, reports, and compliance activities required for identity lifecycle management. It includes every operation from account creation and termination to user provisioning, access certification, and enterprise password management. It looks at automated workflow and data from authoritative sources capabilities, self-service user provisioning, IT governance, and password management. |
-| ITSM | Information Technology Security Management. Tools that enable IT operations organizations (infrastructure and operations managers), to better support the production environment. Facilitate the tasks and workflows associated with the management and delivery of quality IT services. |
-| JEP | Just Enough Permissions |
-| JIT | Just in Time access can be seen as a way to enforce the principle of least privilege to ensure users and non-human identities are given the minimum level of privileges. It also ensures that privileged activities are conducted in accordance with an organization’s Identity Access Management (IAM), IT Service Management (ITSM), and Privileged Access Management (PAM) policies, with its entitlements and workflows. JIT access strategy enables organizations to maintain a full audit trail of privileged activities so they can easily identify who or what gained access to which systems, what they did at what time, and for how long. |
-| Least privilege | Ensures that users only gain access to the specific tools they need to complete a task. |
-| Multi-tenant | A single instance of the software and its supporting infrastructure serves multiple customers. Each customer shares the software application and also shares a single database. |
-| OIDC | OpenID Connect. An authentication protocol that verifies user identity when a user is trying to access a protected HTTPs end point. OIDC is an evolutionary development of ideas implemented earlier in OAuth. |
-| PAM | Privileged access management. Tools that offer one or more of these features: discover, manage, and govern privileged accounts on multiple systems and applications; control access to privileged accounts, including shared and emergency access; randomize, manage, and vault credentials (password, keys, etc.) for administrative, service, and application accounts; single sign-on (SSO) for privileged access to prevent credentials from being revealed; control, filter, and orchestrate privileged commands, actions, and tasks; manage and broker credentials to applications, services, and devices to avoid exposure; and monitor, record, audit, and analyze privileged access, sessions, and actions. |
-| PASM | Privileged accounts are protected by vaulting their credentials. Access to those accounts is then brokered for human users, services, and applications. Privileged session management (PSM) functions establish sessions with possible credential injection and full session recording. Passwords and other credentials for privileged accounts are actively managed and changed at definable intervals or upon the occurrence of specific events. PASM solutions may also provide application-to-application password management (AAPM) and zero-install remote privileged access features for IT staff and third parties that don't require a VPN. |
-| PEDM | Specific privileges are granted on the managed system by host-based agents to logged-in users. PEDM tools provide host-based command control (filtering); application allow, deny, and isolate controls; and/or privilege elevation. The latter is in the form of allowing particular commands to be run with a higher level of privileges. PEDM tools execute on the actual operating system at the kernel or process level. Command control through protocol filtering is explicitly excluded from this definition because the point of control is less reliable. PEDM tools may also provide file integrity monitoring features. |
-| Permission | Rights and privileges. Details given by users or network administrators that define access rights to files on a network. Access controls attached to a resource dictating which identities can access it and how. Privileges are attached to identities and are the ability to perform certain actions. An identity having the ability to perform an action on a resource. |
-| POD | Permission on Demand. A type of JIT access that allows the temporary elevation of permissions, enabling identities to access resources on a by-request, timed basis. |
-| Permissions creep index (PCI) | A number from 0 to 100 that represents the incurred risk of users with access to high-risk privileges. PCI is a function of users who have access to high-risk privileges but aren't actively using them. |
-| Policy and role management | Maintain rules that govern automatic assignment and removal of access rights. Provides visibility of access rights for selection in access requests, approval processes, dependencies, and incompatibilities between access rights, and more. Roles are a common vehicle for policy management. |
-| Privilege | The authority to make changes to a network or computer. Both people and accounts can have privileges, and both can have different levels of privilege. |
-| Privileged account | A login credential to a server, firewall, or other administrative account. Often referred to as admin accounts. Comprised of the actual username and password; these two things together make up the account. A privileged account is allowed to do more things than a normal account. |
-| Public Cloud | Computing services offered by third-party providers over the public Internet, making them available to anyone who wants to use or purchase them. They may be free or sold on-demand, allowing customers to pay only per usage for the CPU cycles, storage, or bandwidth they consume. |
-| Resource | Any entity that uses compute capabilities can be accessed by users and services to perform actions. |
-| Role | An IAM identity that has specific permissions. Instead of being uniquely associated with one person, a role is intended to be assumable by anyone who needs it. A role doesn't have standard long-term credentials such as a password or access keys associated with. |
-| SCIM | System for Cross–domain Identity Management |
-| SIEM | Security Information and Event Management. Technology that supports threat detection, compliance and security incident management through the collection and analysis (both near real time and historical) of security events, as well as a wide variety of other event and contextual data sources. The core capabilities are a broad scope of log event collection and management, the ability to analyze log events and other data across disparate sources, and operational capabilities (such as incident management, dashboards, and reporting). |
-| SOAR | Security orchestration, automation and response (SOAR). Technologies that enable organizations to take inputs from various sources (mostly from security information and event management [SIEM] systems) and apply workflows aligned to processes and procedures. These workflows can be orchestrated via integrations with other technologies and automated to achieve the desired outcome and greater visibility. Other capabilities include case and incident management features; the ability to manage threat intelligence, dashboards and reporting; and analytics that can be applied across various functions. SOAR tools significantly enhance security operations activities like threat detection and response by providing machine-powered assistance to human analysts to improve the efficiency and consistency of people and processes. |
-| Super user / Super identity | A powerful account used by IT system administrators that can be used to make configurations to a system or application, add or remove users, or delete data. |
-| Tenant | A dedicated instance of the services and organization data stored within a specific default location. |
-| UUID | Universally unique identifier. A 128-bit label used for information in computer systems. The term globally unique identifier (GUID) is also used.|
-| Zero trust security | The three foundational principles: explicit verification, breach assumption, and least privileged access.|
-| ZTNA | Zero trust network access. A product or service that creates an identity- and context-based, logical access boundary around an application or set of applications. The applications are hidden from discovery, and access is restricted via a trust broker to a set of named entities. The broker verifies the identity, context and policy adherence of the specified participants before allowing access and prohibits lateral movement elsewhere in the network. It removes application assets from public visibility and significantly reduces the surface area for attack.|
-
-## Next steps
-
-- For an overview of CloudKnox, see [What's CloudKnox Permissions Management?](cloudknox-overview.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-onboard-add-account-after-onboarding.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-onboard-add-account-after-onboarding.md
deleted file mode 100644
index bceb2295d4593..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-onboard-add-account-after-onboarding.md
+++ /dev/null
@@ -1,112 +0,0 @@
----
-title: Add an account/ subscription/ project to Microsoft CloudKnox Permissions Management after onboarding is complete
-description: How to add an account/ subscription/ project to Microsoft CloudKnox Permissions Management after onboarding is complete.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# Add an account/ subscription/ project after onboarding is complete
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-This article describes how to add an Amazon Web Services (AWS) account, Microsoft Azure subscription, or Google Cloud Platform (GCP) project in Microsoft CloudKnox Permissions Management (CloudKnox) after you've completed the onboarding process.
-
-## Add an AWS account after onboarding is complete
-
-1. In the CloudKnox home page, select **Settings** (the gear icon), and then select the **Data collectors** tab.
-1. On the **Data collectors** dashboard, select **AWS**.
-1. Select the ellipses **(...)** at the end of the row, and then select **Edit Configuration**.
-
- The **CloudKnox Onboarding - Summary** page displays.
-
-1. Go to **AWS Account IDs**, and then select **Edit** (the pencil icon).
-
- The **CloudKnox Onboarding - AWS Member Account Details** page displays.
-
-1. Go to **Enter Your AWS Account IDs**, and then select **Add** (the plus **+** sign).
-1. Copy your account ID from AWS and paste it into the **Enter Account ID** box.
-
- The AWS account ID is automatically added to the script.
-
- If you want to add more account IDs, repeat steps 5 and 6 to add up to a total of 10 account IDs.
-
-1. Copy the script.
-1. Go to AWS and start the Cloud Shell.
-1. Create a new script for the new account and press the **Enter** key.
-1. Paste the script you copied.
-1. Locate the account line, delete the original account ID (the one that was previously added), and then run the script.
-1. Return to CloudKnox, and the new account ID you added will be added to the list of account IDs displayed in the **CloudKnox Onboarding - Summary** page.
-1. Select **Verify now & save**.
-
- When your changes are saved, the following message displays: **Successfully updated configuration.**
-
-
-## Add an Azure subscription after onboarding is complete
-
-1. In the CloudKnox home page, select **Settings** (the gear icon), and then select the **Data collectors** tab.
-1. On the **Data collectors** dashboard, select **Azure**.
-1. Select the ellipses **(...)** at the end of the row, and then select **Edit Configuration**.
-
- The **CloudKnox Onboarding - Summary** page displays.
-
-1. Go to **Azure subscription IDs**, and then select **Edit** (the pencil icon).
-1. Go to **Enter your Azure Subscription IDs**, and then select **Add subscription** (the plus **+** sign).
-1. Copy and paste your subscription ID from Azure and paste it into the subscription ID box.
-
- The subscription ID is automatically added to the subscriptions line in the script.
-
- If you want to add more subscription IDs, repeat steps 4 and 5 to add up to a total of 10 subscriptions.
-
-1. Copy the script.
-1. Go to Azure and start the Cloud Shell.
-1. Create a new script for the new subscription and press enter.
-1. Paste the script you copied.
-1. Locate the subscription line and delete the original subscription ID (the one that was previously added), and then run the script.
-1. Return to CloudKnox, and the new subscription ID you added will be added to the list of subscription IDs displayed in the **CloudKnox Onboarding - Summary** page.
-1. Select **Verify now & save**.
-
- When your changes are saved, the following message displays: **Successfully updated configuration.**
-
-## Add a GCP project after onboarding is complete
-
-1. In the CloudKnox home page, select **Settings** (the gear icon), and then select the **Data collectors** tab.
-1. On the **Data collectors** dashboard, select **GCP**.
-1. Select the ellipses **(...)** at the end of the row, and then select **Edit Configuration**.
-
- The **CloudKnox Onboarding - Summary** page displays.
-
-1. Go to **GCP Project IDs**, and then select **Edit** (the pencil icon).
-1. Go to **Enter your GCP Project IDs**, and then select **Add Project ID** (the plus **+** sign).
-1. Copy and paste your project ID from Azure and paste it into the **Project ID** box.
-
- The project ID is automatically added to the **Project ID** line in the script.
-
- If you want to add more project IDs, repeat steps 4 and 5 to add up to a total of 10 project IDs.
-
-1. Copy the script.
-1. Go to GCP and start the Cloud Shell.
-1. Create a new script for the new project ID and press enter.
-1. Paste the script you copied.
-1. Locate the project ID line and delete the original project ID (the one that was previously added), and then run the script.
-1. Return to CloudKnox, and the new project ID you added will be added to the list of project IDs displayed in the **CloudKnox Onboarding - Summary** page.
-1. Select **Verify now & save**.
-
- When your changes are saved, the following message displays: **Successfully updated configuration.**
-
-
-
-## Next steps
-
-- For information on how to onboard an Amazon Web Services (AWS) account, see [Onboard an AWS account](cloudknox-onboard-aws.md).
- - For information on how to onboard a Microsoft Azure subscription, see [Onboard a Microsoft Azure subscription](cloudknox-onboard-azure.md).
-- For information on how to onboard a Google Cloud Platform (GCP) project, see [Onboard a GCP project](cloudknox-onboard-gcp.md).
-- For information on how to enable or disable the controller after onboarding is complete, see [Enable or disable the controller](cloudknox-onboard-enable-controller-after-onboarding.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-onboard-aws.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-onboard-aws.md
deleted file mode 100644
index 968f5dfb047ee..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-onboard-aws.md
+++ /dev/null
@@ -1,173 +0,0 @@
----
-title: Onboard an Amazon Web Services (AWS) account on CloudKnox Permissions Management
-description: How to onboard an Amazon Web Services (AWS) account on CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 04/20/2022
-ms.author: kenwith
----
-
-# Onboard an Amazon Web Services (AWS) account
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-> [!NOTE]
-> The CloudKnox Permissions Management (CloudKnox) PREVIEW is currently not available for tenants hosted in the European Union (EU).
-
-
-This article describes how to onboard an Amazon Web Services (AWS) account on CloudKnox Permissions Management (CloudKnox).
-
-> [!NOTE]
-> A *global administrator* or *super admin* (an admin for all authorization system types) can perform the tasks in this article after the global administrator has initially completed the steps provided in [Enable CloudKnox on your Azure Active Directory tenant](cloudknox-onboard-enable-tenant.md).
-
-
-## View a training video on configuring and onboarding an AWS account
-
-To view a video on how to configure and onboard AWS accounts in CloudKnox, select [Configure and onboard AWS accounts](https://www.youtube.com/watch?v=R6K21wiWYmE).
-
-## Onboard an AWS account
-
-1. If the **Data Collectors** dashboard isn't displayed when CloudKnox launches:
-
- - In the CloudKnox home page, select **Settings** (the gear icon), and then select the **Data Collectors** subtab.
-
-1. On the **Data Collectors** dashboard, select **AWS**, and then select **Create Configuration**.
-
-### 1. Create an Azure AD OIDC App.
-
-1. On the **CloudKnox Onboarding - Azure AD OIDC App Creation** page, enter the **OIDC Azure app name**.
-
- This app is used to set up an OpenID Connect (OIDC) connection to your AWS account. OIDC is an interoperable authentication protocol based on the OAuth 2.0 family of specifications. The scripts generated on this page create the app of this specified name in your Azure AD tenant with the right configuration.
-
-1. To create the app registration, copy the script and run it in your Azure command-line app.
-
- > [!NOTE]
- > 1. To confirm that the app was created, open **App registrations** in Azure and, on the **All applications** tab, locate your app.
- > 1. Select the app name to open the **Expose an API** page. The **Application ID URI** displayed in the **Overview** page is the *audience value* used while making an OIDC connection with your AWS account.
-
-1. Return to CloudKnox, and in the **CloudKnox Onboarding - Azure AD OIDC App Creation**, select **Next**.
-
-### 2. Set up an AWS OIDC account.
-
-1. In the **CloudKnox Onboarding - AWS OIDC Account Setup** page, enter the **AWS OIDC account ID** where the OIDC provider is created. You can change the role name to your requirements.
-1. Open another browser window and sign in to the AWS account where you want to create the OIDC provider.
-1. Select **Launch Template**. This link takes you to the **AWS CloudFormation create stack** page.
-1. Scroll to the bottom of the page, and in the **Capabilities** box, select **I acknowledge that AWS CloudFormation might create IAM resources with custom names**. Then select **Create Stack.**
-
- This AWS CloudFormation stack creates an OIDC Identity Provider (IdP) representing Azure AD STS and an AWS IAM role with a trust policy that allows external identities from Azure AD to assume it via the OIDC IdP. These entities are listed on the **Resources** page.
-
-1. Return to CloudKnox, and in the **CloudKnox Onboarding - AWS OIDC Account Setup** page, select **Next**.
-
-### 3. Set up an AWS master account. (Optional)
-
-1. If your organization has Service Control Policies (SCPs) that govern some or all of the member accounts, set up the master account connection in the **CloudKnox Onboarding - AWS Master Account Details** page.
-
- Setting up the master account connection allows CloudKnox to auto-detect and onboard any AWS member accounts that have the correct CloudKnox role.
-
- - In the **CloudKnox Onboarding - AWS Master Account Details** page, enter the **Master Account ID** and **Master Account Role**.
-
-1. Open another browser window and sign in to the AWS console for your master account.
-
-1. Return to CloudKnox, and in the **CloudKnox Onboarding - AWS Master Account Details** page, select **Launch Template**.
-
- The **AWS CloudFormation create stack** page opens, displaying the template.
-
-1. Review the information in the template, make changes, if necessary, then scroll to the bottom of the page.
-
-1. In the **Capabilities** box, select **I acknowledge that AWS CloudFormation might create IAM resources with custom names**. Then select **Create stack**.
-
- This AWS CloudFormation stack creates a role in the master account with the necessary permissions (policies) to collect SCPs and list all the accounts in your organization.
-
- A trust policy is set on this role to allow the OIDC role created in your AWS OIDC account to access it. These entities are listed in the **Resources** tab of your CloudFormation stack.
-
-1. Return to CloudKnox, and in **CloudKnox Onboarding - AWS Master Account Details**, select **Next**.
-
-### 4. Set up an AWS Central logging account. (Optional but recommended)
-
-1. If your organization has a central logging account where logs from some or all of your AWS account are stored, in the **CloudKnox Onboarding - AWS Central Logging Account Details** page, set up the logging account connection.
-
- In the **CloudKnox Onboarding - AWS Central Logging Account Details** page, enter the **Logging Account ID** and **Logging Account Role**.
-
-1. In another browser window, sign in to the AWS console for the AWS account you use for central logging.
-
-1. Return to CloudKnox, and in the **CloudKnox Onboarding - AWS Central Logging Account Details** page, select **Launch Template**.
-
- The **AWS CloudFormation create stack** page opens, displaying the template.
-
-1. Review the information in the template, make changes, if necessary, then scroll to the bottom of the page.
-
-1. In the **Capabilities** box, select **I acknowledge that AWS CloudFormation might create IAM resources with custom names**, and then select **Create stack**.
-
- This AWS CloudFormation stack creates a role in the logging account with the necessary permissions (policies) to read S3 buckets used for central logging. A trust policy is set on this role to allow the OIDC role created in your AWS OIDC account to access it. These entities are listed in the **Resources** tab of your CloudFormation stack.
-
-1. Return to CloudKnox, and in the **CloudKnox Onboarding - AWS Central Logging Account Details** page, select **Next**.
-
-### 5. Set up an AWS member account.
-
-1. In the **CloudKnox Onboarding - AWS Member Account Details** page, enter the **Member Account Role** and the **Member Account IDs**.
-
- You can enter up to 10 account IDs. Click the plus icon next to the text box to add more account IDs.
-
- > [!NOTE]
- > Perform the next 6 steps for each account ID you add.
-
-1. Open another browser window and sign in to the AWS console for the member account.
-
-1. Return to the **CloudKnox Onboarding - AWS Member Account Details** page, select **Launch Template**.
-
- The **AWS CloudFormation create stack** page opens, displaying the template.
-
-1. In the **CloudTrailBucketName** page, enter a name.
-
- You can copy and paste the **CloudTrailBucketName** name from the **Trails** page in AWS.
-
- > [!NOTE]
- > A *cloud bucket* collects all the activity in a single account that CloudKnox monitors. Enter the name of a cloud bucket here to provide CloudKnox with the access required to collect activity data.
-
-1. From the **Enable Controller** dropdown, select:
-
- - **True**, if you want the controller to provide CloudKnox with read and write access so that any remediation you want to do from the CloudKnox platform can be done automatically.
- - **False**, if you want the controller to provide CloudKnox with read-only access.
-
-1. Scroll to the bottom of the page, and in the **Capabilities** box, select **I acknowledge that AWS CloudFormation might create IAM resources with custom names**. Then select **Create stack**.
-
- This AWS CloudFormation stack creates a collection role in the member account with necessary permissions (policies) for data collection.
-
- A trust policy is set on this role to allow the OIDC role created in your AWS OIDC account to access it. These entities are listed in the **Resources** tab of your CloudFormation stack.
-
-1. Return to CloudKnox, and in the **CloudKnox Onboarding - AWS Member Account Details** page, select **Next**.
-
- This step completes the sequence of required connections from Azure AD STS to the OIDC connection account and the AWS member account.
-
-### 6. Review and save.
-
-1. In **CloudKnox Onboarding – Summary**, review the information you’ve added, and then select **Verify Now & Save**.
-
- The following message appears: **Successfully created configuration.**
-
- On the **Data Collectors** dashboard, the **Recently Uploaded On** column displays **Collecting**. The **Recently Transformed On** column displays **Processing.**
-
- You have now completed onboarding AWS, and CloudKnox has started collecting and processing your data.
-
-### 7. View the data.
-
-1. To view the data, select the **Authorization Systems** tab.
-
- The **Status** column in the table displays **Collecting Data.**
-
- The data collection process may take some time, depending on the size of the account and how much data is available for collection.
-
-
-## Next steps
-
-- For information on how to onboard a Microsoft Azure subscription, see [Onboard a Microsoft Azure subscription](cloudknox-onboard-azure.md).
-- For information on how to onboard a Google Cloud Platform (GCP) project, see [Onboard a Google Cloud Platform (GCP) project](cloudknox-onboard-gcp.md).
-- For information on how to enable or disable the controller after onboarding is complete, see [Enable or disable the controller](cloudknox-onboard-enable-controller-after-onboarding.md).
-- For information on how to add an account/subscription/project after onboarding is complete, see [Add an account/subscription/project after onboarding is complete](cloudknox-onboard-add-account-after-onboarding.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-onboard-azure.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-onboard-azure.md
deleted file mode 100644
index 939c093c9b3a5..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-onboard-azure.md
+++ /dev/null
@@ -1,99 +0,0 @@
----
-title: Onboard a Microsoft Azure subscription in CloudKnox Permissions Management
-description: How to a Microsoft Azure subscription on CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 04/20/2022
-ms.author: kenwith
----
-
-# Onboard a Microsoft Azure subscription
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-> [!NOTE]
-> The CloudKnox Permissions Management (CloudKnox) PREVIEW is currently not available for tenants hosted in the European Union (EU).
-
-This article describes how to onboard a Microsoft Azure subscription or subscriptions on CloudKnox Permissions Management (CloudKnox). Onboarding a subscription creates a new authorization system to represent the Azure subscription in CloudKnox.
-
-> [!NOTE]
-> A *global administrator* or *super admin* (an admin for all authorization system types) can perform the tasks in this article after the global administrator has initially completed the steps provided in [Enable CloudKnox on your Azure Active Directory tenant](cloudknox-onboard-enable-tenant.md).
-
-## Prerequisites
-
-To add CloudKnox to your Azure AD tenant:
-- You must have an Azure AD user account and an Azure command-line interface (Azure CLI) on your system, or an Azure subscription. If you don't already have one, [create a free account](https://azure.microsoft.com/free/).
-- You must have **Microsoft.Authorization/roleAssignments/write** permission at the subscription or management group scope to perform these tasks. If you don't have this permission, you can ask someone who has this permission to perform these tasks for you.
-
-
-## View a training video on enabling CloudKnox in your Azure AD tenant
-
-To view a video on how to enable CloudKnox in your Azure AD tenant, select [Enable CloudKnox in your Azure AD tenant](https://www.youtube.com/watch?v=-fkfeZyevoo).
-
-## How to onboard an Azure subscription
-
-1. If the **Data Collectors** dashboard isn't displayed when CloudKnox launches:
-
- - In the CloudKnox home page, select **Settings** (the gear icon), and then select the **Data Collectors** subtab.
-
-1. On the **Data Collectors** dashboard, select **Azure**, and then select **Create Configuration**.
-
-### 1. Add Azure subscription details
-
-1. On the **CloudKnox Onboarding - Azure Subscription Details** page, enter the **Subscription IDs** that you want to onboard.
-
- > [!NOTE]
- > To locate the Azure subscription IDs, open the **Subscriptions** page in Azure.
- > You can enter up to 10 subscriptions IDs. Select the plus sign **(+)** icon next to the text box to enter more subscriptions.
-
-1. From the **Scope** dropdown, select **Subscription** or **Management Group**. The script box displays the role assignment script.
-
- > [!NOTE]
- > Select **Subscription** if you want to assign permissions separately for each individual subscription. The generated script has to be executed once per subscription.
- > Select **Management Group** if all of your subscriptions are under one management group. The generated script must be executed once for the management group.
-
-1. To give this role assignment to the service principal, copy the script to a file on your system where Azure CLI is installed and execute it.
-
- You can execute the script once for each subscription, or once for all the subscriptions in the management group.
-
-1. From the **Enable Controller** dropdown, select:
-
- - **True**, if you want the controller to provide CloudKnox with read and write access so that any remediation you want to do from the CloudKnox platform can be done automatically.
- - **False**, if you want the controller to provide CloudKnox with read-only access.
-
-1. Return to **CloudKnox Onboarding - Azure Subscription Details** page and select **Next**.
-
-### 2. Review and save.
-
-- In **CloudKnox Onboarding – Summary** page, review the information you’ve added, and then select **Verify Now & Save**.
-
- The following message appears: **Successfully Created Configuration.**
-
- On the **Data Collectors** tab, the **Recently Uploaded On** column displays **Collecting**. The **Recently Transformed On** column displays **Processing.**
-
- You have now completed onboarding Azure, and CloudKnox has started collecting and processing your data.
-
-### 3. View the data.
-
-- To view the data, select the **Authorization Systems** tab.
-
- The **Status** column in the table displays **Collecting Data.**
-
- The data collection process will take some time, depending on the size of the account and how much data is available for collection.
-
-
-## Next steps
-
-- For information on how to onboard an Amazon Web Services (AWS) account, see [Onboard an Amazon Web Services (AWS) account](cloudknox-onboard-aws.md).
-- For information on how to onboard a Google Cloud Platform (GCP) project, see [Onboard a Google Cloud Platform (GCP) project](cloudknox-onboard-gcp.md).
-- For information on how to enable or disable the controller after onboarding is complete, see [Enable or disable the controller](cloudknox-onboard-enable-controller-after-onboarding.md).
-- For information on how to add an account/subscription/project after onboarding is complete, see [Add an account/subscription/project after onboarding is complete](cloudknox-onboard-add-account-after-onboarding.md).
-- For an overview on CloudKnox, see [What's CloudKnox Permissions Management?](cloudknox-overview.md).
-- For information on how to start viewing information about your authorization system in CloudKnox, see [View key statistics and data about your authorization system](cloudknox-ui-dashboard.md).
\ No newline at end of file
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-onboard-enable-controller-after-onboarding.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-onboard-enable-controller-after-onboarding.md
deleted file mode 100644
index 2e380779c657a..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-onboard-enable-controller-after-onboarding.md
+++ /dev/null
@@ -1,103 +0,0 @@
----
-title: Enable or disable the controller in Microsoft CloudKnox Permissions Management after onboarding is complete
-description: How to enable or disable the controller in Microsoft CloudKnox Permissions Management after onboarding is complete.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# Enable or disable the controller after onboarding is complete
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-This article describes how to enable or disable the controller in Microsoft Azure and Google Cloud Platform (GCP) after onboarding is complete.
-
-This article also describes how to enable the controller in Amazon Web Services (AWS) if you disabled it during onboarding. You can only enable the controller in AWS at this time; you can't disable it.
-
-## Enable the controller in AWS
-
-> [!NOTE]
-> You can only enable the controller in AWS; you can't disable it at this time.
-
-1. Sign in to the AWS console of the member account in a separate browser window.
-1. Go to the CloudKnox home page, select **Settings** (the gear icon), and then select the **Data Collectors** subtab.
-1. On the **Data Collectors** dashboard, select **AWS**, and then select **Create Configuration**.
-1. On the **CloudKnox Onboarding - AWS Member Account Details** page, select **Launch Template**.
-
- The **AWS CloudFormation create stack** page opens, displaying the template.
-1. In the **CloudTrailBucketName** box, enter a name.
-
- You can copy and paste the **CloudTrailBucketName** name from the **Trails** page in AWS.
-
- > [!NOTE]
- > A *cloud bucket* collects all the activity in a single account that CloudKnox monitors. Enter the name of a cloud bucket here to provide CloudKnox with the access required to collect activity data.
-
-1. In the **EnableController** box, from the drop-down list, select **True** to provide CloudKnox with read and write access so that any remediation you want to do from the CloudKnox platform can be done automatically.
-
-1. Scroll to the bottom of the page, and in the **Capabilities** box and select **I acknowledge that AWS CloudFormation might create IAM resources with custom names**. Then select **Create stack**.
-
- This AWS CloudFormation stack creates a collection role in the member account with necessary permissions (policies) for data collection. A trust policy is set on this role to allow the OIDC role created in your AWS OIDC account to access it. These entities are listed in the **Resources** tab of your CloudFormation stack.
-
-1. Return to CloudKnox, and on the CloudKnox **Onboarding - AWS Member Account Details** page, select **Next**.
-1. On **CloudKnox Onboarding – Summary** page, review the information you’ve added, and then select **Verify Now & Save**.
-
- The following message appears: **Successfully created configuration.**
-
-## Enable or disable the controller in Azure
-
-
-1. In Azure, open the **Access control (IAM)** page.
-1. In the **Check access** section, in the **Find** box, enter **Cloud Infrastructure Entitlement Management**.
-
- The **Cloud Infrastructure Entitlement Management assignments** page appears, displaying the roles assigned to you.
-
- - If you have read-only permission, the **Role** column displays **Reader**.
- - If you have administrative permission, the **Role** column displays **User Access Administrative**.
-
-1. To add the administrative role assignment, return to the **Access control (IAM)** page, and then select **Add role assignment**.
-1. Add or remove the role assignment for Cloud Infrastructure Entitlement Management.
-
-1. Go to the CloudKnox home page, select **Settings** (the gear icon), and then select the **Data Collectors** subtab.
-1. On the **Data Collectors** dashboard, select **Azure**, and then select **Create Configuration**.
-1. On the **CloudKnox Onboarding - Azure Subscription Details** page, enter the **Subscription ID**, and then select **Next**.
-1. On **CloudKnox Onboarding – Summary** page, review the controller permissions, and then select **Verify Now & Save**.
-
- The following message appears: **Successfully Created Configuration.**
-
-
-## Enable or disable the controller in GCP
-
-1. Execute the **gcloud auth login**.
-1. Follow the instructions displayed on the screen to authorize access to your Google account.
-1. Execute the **sh mciem-workload-identity-pool.sh** to create the workload identity pool, provider, and service account.
-1. Execute the **sh mciem-member-projects.sh** to give CloudKnox permissions to access each of the member projects.
-
- - If you want to manage permissions through CloudKnox, select **Y** to **Enable controller**.
- - If you want to onboard your projects in read-only mode, select **N** to **Disable controller**.
-
-1. Optionally, execute **mciem-enable-gcp-api.sh** to enable all recommended GCP APIs.
-
-1. Go to the CloudKnox home page, select **Settings** (the gear icon), and then select the **Data Collectors** subtab.
-1. On the **Data Collectors** dashboard, select **GCP**, and then select **Create Configuration**.
-1. On the **CloudKnox Onboarding - Azure AD OIDC App Creation** page, select **Next**.
-1. On the **CloudKnox Onboarding - GCP OIDC Account Details & IDP Access** page, enter the **OIDC Project Number** and **OIDC Project ID**, and then select **Next**.
-1. On the **CloudKnox Onboarding - GCP Project IDs** page, enter the **Project IDs**, and then select **Next**.
-1. On the **CloudKnox Onboarding – Summary** page, review the information you’ve added, and then select **Verify Now & Save**.
-
- The following message appears: **Successfully Created Configuration.**
-
-## Next steps
-
-- For information on how to onboard an Amazon Web Services (AWS) account, see [Onboard an AWS account](cloudknox-onboard-aws.md).
-- For information on how to onboard a Microsoft Azure subscription, see [Onboard a Microsoft Azure subscription](cloudknox-onboard-azure.md).
-- For information on how to onboard a Google Cloud Platform (GCP) project, see [Onboard a GCP project](cloudknox-onboard-gcp.md).
-- For information on how to add an account/subscription/project after onboarding is complete, see [Add an account/subscription/project after onboarding is complete](cloudknox-onboard-add-account-after-onboarding.md).
-
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-onboard-enable-tenant.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-onboard-enable-tenant.md
deleted file mode 100644
index d8c80ae7996f4..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-onboard-enable-tenant.md
+++ /dev/null
@@ -1,112 +0,0 @@
----
-title: Enable CloudKnox Permissions Management in your organization
-description: How to enable CloudKnox Permissions Management in your organization.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 04/20/2022
-ms.author: kenwith
----
-
-# Enable CloudKnox in your organization
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-
-> [!NOTE]
-> The CloudKnox Permissions Management (CloudKnox) PREVIEW is currently not available for tenants hosted in the European Union (EU).
-
-
-
-This article describes how to enable CloudKnox Permissions Management (CloudKnox) in your organization. Once you've enabled CloudKnox, you can connect it to your Amazon Web Services (AWS), Microsoft Azure, or Google Cloud Platform (GCP) platforms.
-
-> [!NOTE]
-> To complete this task, you must have *global administrator* permissions as a user in that tenant. You can't enable CloudKnox as a user from other tenant who has signed in via B2B or via Azure Lighthouse.
-
-## Prerequisites
-
-To enable CloudKnox in your organization:
-
-- You must have an Azure AD tenant. If you don't already have one, [create a free account](https://azure.microsoft.com/free/).
-- You must be eligible for or have an active assignment to the global administrator role as a user in that tenant.
-
-> [!NOTE]
-> During public preview, CloudKnox doesn't perform a license check.
-
-## View a training video on enabling CloudKnox
-
-- To view a video on how to enable CloudKnox in your Azure AD tenant, select [Enable CloudKnox in your Azure AD tenant](https://www.youtube.com/watch?v=-fkfeZyevoo).
-- To view a video on how to configure and onboard AWS accounts in CloudKnox, select [Configure and onboard AWS accounts](https://www.youtube.com/watch?v=R6K21wiWYmE).
-- To view a video on how to configure and onboard GCP accounts in CloudKnox, select [Configure and onboard GCP accounts](https://www.youtube.com/watch?app=desktop&v=W3epcOaec28).
-
-
-## How to enable CloudKnox on your Azure AD tenant
-
-1. In your browser:
- 1. Go to [Azure services](https://portal.azure.com) and use your credentials to sign in to [Azure Active Directory](https://ms.portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/Overview).
- 1. If you aren't already authenticated, sign in as a global administrator user.
- 1. If needed, activate the global administrator role in your Azure AD tenant.
- 1. In the Azure AD portal, select **Features highlights**, and then select **CloudKnox Permissions Management**.
-
- 1. If you're prompted to select a sign in account, sign in as a global administrator for a specified tenant.
-
- The **Welcome to CloudKnox Permissions Management** screen appears, displaying information on how to enable CloudKnox on your tenant.
-
-1. To provide access to the CloudKnox application, create a service principal.
-
- An Azure service principal is a security identity used by user-created apps, services, and automation tools to access specific Azure resources.
-
- > [!NOTE]
- > To complete this step, you must have Azure CLI or Azure PowerShell on your system, or an Azure subscription where you can run Cloud Shell.
-
- - To create a service principal that points to the CloudKnox application via Cloud Shell:
-
- 1. Copy the script on the **Welcome** screen:
-
- `az ad sp create --id b46c3ac5-9da6-418f-a849-0a07a10b3c6c`
-
- 1. If you have an Azure subscription, return to the Azure AD portal and select **Cloud Shell** on the navigation bar.
- If you don't have an Azure subscription, open a command prompt on a Windows Server.
- 1. If you have an Azure subscription, paste the script into Cloud Shell and press **Enter**.
-
- - For information on how to create a service principal through the Azure portal, see [Create an Azure service principal with the Azure CLI](/cli/azure/create-an-azure-service-principal-azure-cli).
-
- - For information on the **az** command and how to sign in with the no subscriptions flag, see [az login](/cli/azure/reference-index?view=azure-cli-latest#az-login&preserve-view=true).
-
- - For information on how to create a service principal via Azure PowerShell, see [Create an Azure service principal with Azure PowerShell](/powershell/azure/create-azure-service-principal-azureps?view=azps-7.1.0&preserve-view=true).
-
- 1. After the script runs successfully, the service principal attributes for CloudKnox display. Confirm the attributes.
-
- The **Cloud Infrastructure Entitlement Management** application displays in the Azure AD portal under **Enterprise applications**.
-
-1. Return to the **Welcome to CloudKnox** screen and select **Enable CloudKnox Permissions Management**.
-
- You have now completed enabling CloudKnox on your tenant. CloudKnox launches with the **Data Collectors** dashboard.
-
-## Configure data collection settings
-
-Use the **Data Collectors** dashboard in CloudKnox to configure data collection settings for your authorization system.
-
-1. If the **Data Collectors** dashboard isn't displayed when CloudKnox launches:
-
- - In the CloudKnox home page, select **Settings** (the gear icon), and then select the **Data Collectors** subtab.
-
-1. Select the authorization system you want: **AWS**, **Azure**, or **GCP**.
-
-1. For information on how to onboard an AWS account, Azure subscription, or GCP project into CloudKnox, select one of the following articles and follow the instructions:
-
- - [Onboard an AWS account](cloudknox-onboard-aws.md)
- - [Onboard an Azure subscription](cloudknox-onboard-azure.md)
- - [Onboard a GCP project](cloudknox-onboard-gcp.md)
-
-## Next steps
-
-- For an overview of CloudKnox, see [What's CloudKnox Permissions Management?](cloudknox-overview.md)
-- For a list of frequently asked questions (FAQs) about CloudKnox, see [FAQs](cloudknox-faqs.md).
-- For information on how to start viewing information about your authorization system in CloudKnox, see [View key statistics and data about your authorization system](cloudknox-ui-dashboard.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-onboard-gcp.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-onboard-gcp.md
deleted file mode 100644
index 8b894aea37e73..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-onboard-gcp.md
+++ /dev/null
@@ -1,134 +0,0 @@
----
-title: Onboard a Google Cloud Platform (GCP) project in CloudKnox Permissions Management
-description: How to onboard a Google Cloud Platform (GCP) project on CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 04/20/2022
-ms.author: kenwith
----
-
-# Onboard a Google Cloud Platform (GCP) project
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-
-> [!NOTE]
-> The CloudKnox Permissions Management (CloudKnox) PREVIEW is currently not available for tenants hosted in the European Union (EU).
-
-
-This article describes how to onboard a Google Cloud Platform (GCP) project on CloudKnox Permissions Management (CloudKnox).
-
-> [!NOTE]
-> A *global administrator* or *super admin* (an admin for all authorization system types) can perform the tasks in this article after the global administrator has initially completed the steps provided in [Enable CloudKnox on your Azure Active Directory tenant](cloudknox-onboard-enable-tenant.md).
-
-## View a training video on configuring and onboarding a GCP account
-
-To view a video on how to configure and onboard GCP accounts in CloudKnox, select [Configure and onboard GCP accounts](https://www.youtube.com/watch?app=desktop&v=W3epcOaec28).
-
-
-## Onboard a GCP project
-
-1. If the **Data Collectors** dashboard isn't displayed when CloudKnox launches:
-
- - In the CloudKnox home page, select **Settings** (the gear icon), and then select the **Data Collectors** subtab.
-
-1. On the **Data Collectors** tab, select **GCP**, and then select **Create Configuration**.
-
-### 1. Create an Azure AD OIDC app.
-
-1. On the **CloudKnox Onboarding - Azure AD OIDC App Creation** page, enter the **OIDC Azure App Name**.
-
- This app is used to set up an OpenID Connect (OIDC) connection to your GCP project. OIDC is an interoperable authentication protocol based on the OAuth 2.0 family of specifications. The scripts generated will create the app of this specified name in your Azure AD tenant with the right configuration.
-
-1. To create the app registration, copy the script and run it in your command-line app.
-
- > [!NOTE]
- > 1. To confirm that the app was created, open **App registrations** in Azure and, on the **All applications** tab, locate your app.
- > 1. Select the app name to open the **Expose an API** page. The **Application ID URI** displayed in the **Overview** page is the *audience value* used while making an OIDC connection with your AWS account.
-
- 1. Return to CloudKnox, and in the **CloudKnox Onboarding - Azure AD OIDC App Creation**, select **Next**.
-
-### 2. Set up a GCP OIDC project.
-
-1. In the **CloudKnox Onboarding - GCP OIDC Account Details & IDP Access** page, enter the **OIDC Project ID** and **OIDC Project Number** of the GCP project in which the OIDC provider and pool will be created. You can change the role name to your requirements.
-
- > [!NOTE]
- > You can find the **Project number** and **Project ID** of your GCP project on the GCP **Dashboard** page of your project in the **Project info** panel.
-
-1. You can change the **OIDC Workload Identity Pool Id**, **OIDC Workload Identity Pool Provider Id** and **OIDC Service Account Name** to meet your requirements.
-
- Optionally, specify **G-Suite IDP Secret Name** and **G-Suite IDP User Email** to enable G-Suite integration.
-
- You can either download and run the script at this point or you can do it in the Google Cloud Shell, as described [later in this article](cloudknox-onboard-gcp.md#4-run-scripts-in-cloud-shell-optional-if-not-already-executed).
-1. Select **Next**.
-
-### 3. Set up GCP member projects.
-
-1. In the **CloudKnox Onboarding - GCP Project Ids** page, enter the **Project IDs**.
-
- You can enter up to 10 GCP project IDs. Select the plus icon next to the text box to insert more project IDs.
-
-1. You can choose to download and run the script at this point, or you can do it via Google Cloud Shell, as described in the [next step](cloudknox-onboard-gcp.md#4-run-scripts-in-cloud-shell-optional-if-not-already-executed).
-
-### 4. Run scripts in Cloud Shell. (Optional if not already executed)
-
-1. In the **CloudKnox Onboarding - GCP Project Ids** page, select **Launch SSH**.
-1. To copy all your scripts into your current directory, in **Open in Cloud Shell**, select **Trust repo**, and then select **Confirm**.
-
- The Cloud Shell provisions the Cloud Shell machine and makes a connection to your Cloud Shell instance.
-
- > [!NOTE]
- > Follow the instructions in the browser as they may be different from the ones given here.
-
- The **Welcome to CloudKnox GCP onboarding** screen appears, displaying steps you must complete to onboard your GCP project.
-
-### 5. Paste the environment vars from the CloudKnox portal.
-
-1. Return to CloudKnox and select **Copy export variables**.
-1. In the GCP Onboarding shell editor, paste the variables you copied, and then press **Enter**.
-1. Execute the **gcloud auth login**.
-1. Follow instructions displayed on the screen to authorize access to your Google account.
-1. Execute the **sh mciem-workload-identity-pool.sh** to create the workload identity pool, provider, and service account.
-1. Execute the **sh mciem-member-projects.sh** to give CloudKnox permissions to access each of the member projects.
-
- - If you want to manage permissions through CloudKnox, select **Y** to **Enable controller**.
-
- - If you want to onboard your projects in read-only mode, select **N** to **Disable controller**.
-
-1. Optionally, execute **mciem-enable-gcp-api.sh** to enable all recommended GCP APIs.
-
-1. Return to **CloudKnox Onboarding - GCP Project Ids**, and then select **Next**.
-
-### 6. Review and save.
-
-1. In the **CloudKnox Onboarding – Summary** page, review the information you’ve added, and then select **Verify Now & Save**.
-
- The following message appears: **Successfully Created Configuration.**
-
- On the **Data Collectors** tab, the **Recently Uploaded On** column displays **Collecting**. The **Recently Transformed On** column displays **Processing.**
-
- You have now completed onboarding GCP, and CloudKnox has started collecting and processing your data.
-
-### 7. View the data.
-
-- To view the data, select the **Authorization Systems** tab.
-
- The **Status** column in the table displays **Collecting Data.**
-
- The data collection process may take some time, depending on the size of the account and how much data is available for collection.
-
-
-
-## Next steps
-
-- For information on how to onboard an Amazon Web Services (AWS) account, see [Onboard an Amazon Web Services (AWS) account](cloudknox-onboard-aws.md).
-- For information on how to onboard a Microsoft Azure subscription, see [Onboard a Microsoft Azure subscription](cloudknox-onboard-azure.md).
-- For information on how to enable or disable the controller after onboarding is complete, see [Enable or disable the controller](cloudknox-onboard-enable-controller-after-onboarding.md).
-- For information on how to add an account/subscription/project after onboarding is complete, see [Add an account/subscription/project after onboarding is complete](cloudknox-onboard-add-account-after-onboarding.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-overview.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-overview.md
deleted file mode 100644
index cac6d12faa329..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-overview.md
+++ /dev/null
@@ -1,78 +0,0 @@
----
-title: What's CloudKnox Permissions Management?
-description: An introduction to CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: overview
-ms.date: 04/20/2022
-ms.author: kenwith
----
-
-# What's CloudKnox Permissions Management?
-
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-> [!NOTE]
-> The CloudKnox Permissions Management (CloudKnox) PREVIEW is currently not available for tenants hosted in the European Union (EU).
-
-## Overview
-
-CloudKnox Permissions Management (CloudKnox) is a cloud infrastructure entitlement management (CIEM) solution that provides comprehensive visibility into permissions assigned to all identities. For example, over-privileged workload and user identities, actions, and resources across multi-cloud infrastructures in Microsoft Azure, Amazon Web Services (AWS), and Google Cloud Platform (GCP).
-
-CloudKnox detects, automatically right-sizes, and continuously monitors unused and excessive permissions.
-
-Organizations have to consider permissions management as a central piece of their Zero Trust security to implement least privilege access across their entire infrastructure:
-
-- Organizations are increasingly adopting multi-cloud strategy and are struggling with the lack of visibility and the increasing complexity of managing access permissions.
-- With the proliferation of identities and cloud services, the number of high-risk cloud permissions is exploding, expanding the attack surface for organizations.
-- IT security teams are under increased pressure to ensure access to their expanding cloud estate is secure and compliant.
-- The inconsistency of cloud providers’ native access management models makes it even more complex for Security and Identity to manage permissions and enforce least privilege access policies across their entire environment.
-
-:::image type="content" source="media/cloudknox-overview/cloudknox-key-cases.png" alt-text="CloudKnox Permissions Management.":::
-
-## Key use cases
-
-CloudKnox allows customers to address three key use cases: *discover*, *remediate*, and *monitor*.
-
-### Discover
-
-Customers can assess permission risks by evaluating the gap between permissions granted and permissions used.
-
-- Cross-cloud permissions discovery: Granular and normalized metrics for key cloud platforms: AWS, Azure, and GCP.
-- Permission Creep Index (PCI): An aggregated metric that periodically evaluates the level of risk associated with the number of unused or excessive permissions across your identities and resources. It measures how much damage identities can cause based on the permissions they have.
-- Permission usage analytics: Multi-dimensional view of permissions risk for all identities, actions, and resources.
-
-### Remediate
-
-Customers can right-size permissions based on usage, grant new permissions on-demand, and automate just-in-time access for cloud resources.
-
-- Automated deletion of permissions unused for the past 90 days.
-- Permissions on-demand: Grant identities permissions on-demand for a time-limited period or an as-needed basis.
-
-
-### Monitor
-
-Customers can detect anomalous activities with machine language-powered (ML-powered) alerts and generate detailed forensic reports.
-
-- ML-powered anomaly detections.
-- Context-rich forensic reports around identities, actions, and resources to support rapid investigation and remediation.
-
-CloudKnox deepens Zero Trust security strategies by augmenting the least privilege access principle, allowing customers to:
-
-- Get comprehensive visibility: Discover which identity is doing what, where, and when.
-- Automate least privilege access: Use access analytics to ensure identities have the right permissions, at the right time.
-- Unify access policies across infrastructure as a service (IaaS) platforms: Implement consistent security policies across your cloud infrastructure.
-
-
-
-## Next steps
-
-- For information on how to onboard CloudKnox in your organization, see [Enable CloudKnox in your organization](cloudknox-onboard-enable-tenant.md).
-- For a list of frequently asked questions (FAQs) about CloudKnox, see [FAQs](cloudknox-faqs.md).
\ No newline at end of file
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-account-explorer.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-account-explorer.md
deleted file mode 100644
index 3ee999fbceb97..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-account-explorer.md
+++ /dev/null
@@ -1,78 +0,0 @@
----
-title: The CloudKnox Permissions Management - View roles and identities that can access account information from an external account
-description: How to view information about identities that can access accounts from an external account in CloudKnox Permissions Management.
-services: active-directory
-manager: rkarlin
-ms.service: active-directory
-ms.topic: how-to
-author: kenwith
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# View roles and identities that can access account information from an external account
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-You can view information about users, groups, and resources that can access account information from an external account in CloudKnox Permissions Management (CloudKnox).
-
-## Display information about users, groups, or tasks
-
-1. In CloudKnox, select the **Usage analytics** tab, and then, from the dropdown, select one of the following:
-
- - **Users**
- - **Group**
- - **Active resources**
- - **Active tasks**
- - **Active resources**
- - **Serverless functions**
-
-1. To choose an account from your authorization system, select the lock icon in the left panel.
-1. In the **Authorization systems** pane, select an account, then select **Apply**.
-1. To choose a user, role, or group, select the person icon.
-1. Select a user or group, then select **Apply**.
-1. To choose an account from your authorization system, select it from the Authorization Systems menu.
-1. In the user type filter, user, role, or group.
-1. In the **Task** filter, select **All** or **High-risk tasks**, then select **Apply**.
-1. To delete a task, select **Delete**, then select **Apply**.
-
-## Export information about users, groups, or tasks
-
-To export the data in comma-separated values (CSV) file format, select **Export** from the top-right hand corner of the table.
-
-## View users and roles
-1. To view users and roles, select the lock icon, and then select the person icon to open the **Users** pane.
-1. To view the **Role summary**, select the "eye" icon to the right of the role name.
-
- The following details display:
- - **Policies**: A list of all the policies attached to the role.
- - **Trusted entities**: The identities from external accounts that can assume this role.
-
-1. To view all the identities from various accounts that can assume this role, select the down arrow to the left of the role name.
-1. To view a graph of all the identities that can access the specified account and through which role(s), select the role name.
-
- If CloudKnox is monitoring the external account, it lists specific identities from the accounts that can assume this role. Otherwise, it lists the identities declared in the **Trusted entity** section.
-
- **Connecting roles**: Lists the following roles for each account:
- - *Direct roles* that are trusted by the account role.
- - *Intermediary roles* that aren't directly trusted by the account role but are assumable by identities through role-chaining.
-
-1. To view all the roles from that account that are used to access the specified account, select the down arrow to the left of the account name.
-1. To view the trusted identities declared by the role, select the down arrow to the left of the role name.
-
- The trusted identities for the role are listed only if the account is being monitored by CloudKnox.
-
-1. To view the role definition, select the "eye" icon to the right of the role name.
-
- When you select the down arrow and expand details, a search box is displayed. Enter your criteria in this box to search for specific roles.
-
- **Identities with access**: Lists the identities that come from external accounts:
- - To view all the identities from that account can access the specified account, select the down arrow to the left of the account name.
- - To view the **Role summary** for EC2 instances and Lambda functions, select the "eye" icon to the right of the identity name.
- - To view a graph of how the identity can access the specified account and through which role(s), select the identity name.
-
-1. The **Info** tab displays the **Privilege creep index** and **Service control policy (SCP)** information about the account.
-
-For more information about the **Privilege creep index** and SCP information, see [View key statistics and data about your authorization system](cloudknox-ui-dashboard.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-account-settings.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-account-settings.md
deleted file mode 100644
index 5ab6917745ce9..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-account-settings.md
+++ /dev/null
@@ -1,42 +0,0 @@
----
-title: View personal and organization information in CloudKnox Permissions Management
-description: How to view personal and organization information in the Account settings dashboard in CloudKnox Permissions Management.
-services: active-directory
-manager: rkarlin
-ms.service: active-directory
-ms.topic: overview
-author: kenwith
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# View personal and organization information
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-The **Account settings** dashboard in CloudKnox Permissions Management (CloudKnox) allows you to view personal information, passwords, and account preferences.
-This information can't be modified because the user information is pulled from Azure AD. Only **User Session Time(min)**
-
-## View personal information
-
-1. In the CloudKnox home page, select the down arrow to the right of the **User** (your initials) menu, and then select **Account Settings**.
-
- The **Personal Information** box displays your **First Name**, **Last Name**, and the **Email Address** that was used to register your account on CloudKnox.
-
-## View current organization information
-
-1. In the CloudKnox home page, select the down arrow to the right of the **User** (your initials) menu, and then select **Account Settings**.
-
- The **Current Organization Information** displays the **Name** of your organization, the **Tenant ID** box, and the **User Session Timeout (min)**.
-
-1. To change duration of the **User Session Timeout (min)**, select **Edit** (the pencil icon), and then enter the number of minutes before you want a user session to time out.
-1. Select the check mark to confirm your new setting.
-
-
-## Next steps
-
-- For information about how to manage user information, see [Manage users and groups with the User management dashboard](cloudknox-ui-user-management.md).
-- For information about how to view information about active and completed tasks, see [View information about active and completed tasks](cloudknox-ui-tasks.md).
-- For information about how to select group-based permissions settings, see [Select group-based permissions settings](cloudknox-howto-create-group-based-permissions.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-audit-trail.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-audit-trail.md
deleted file mode 100644
index ef3ea798af791..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-audit-trail.md
+++ /dev/null
@@ -1,401 +0,0 @@
----
-title: Filter and query user activity in CloudKnox Permissions Management
-description: How to filter and query user activity in CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# Filter and query user activity
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-The **Audit** dashboard in CloudKnox Permissions Management (CloudKnox) details all user activity performed in your authorization system. It captures all high risk activity in a centralized location, and allows system administrators to query the logs. The **Audit** dashboard enables you to:
-
-- Create and save new queries so you can access key data points easily.
-- Query across multiple authorization systems in one query.
-
-## Filter information by authorization system
-
-If you haven't used filters before, the default filter is the first authorization system in the filter list.
-
-If you have used filters before, the default filter is last filter you selected.
-
-1. To display the **Audit** dashboard, on the CloudKnox home page, select **Audit**.
-
-1. To select your authorization system type, in the **Authorization System Type** box, select Amazon Web Services (**AWS**), Microsoft Azure (**Azure**), Google Cloud Platform (**GCP**), or Platform (**Platform**).
-
-1. To select your authorization system, in the **Authorization System** box:
-
- - From the **List** subtab, select the accounts you want to use.
- - From the **Folders** subtab, select the folders you want to use.
-
-1. To view your query results, select **Apply**.
-
-## Create, view, modify, or delete a query
-
-There are several different query parameters you can configure individually or in combination. The query parameters and corresponding instructions are listed in the following sections.
-
-- To create a new query, select **New Query**.
-- To view an existing query, select **View** (the eye icon).
-- To edit an existing query, select **Edit** (the pencil icon).
-- To delete a function line in a query, select **Delete** (the minus sign **-** icon).
-- To create multiple queries at one time, select **Add New Tab** to the right of the **Query** tabs that are displayed.
-
- You can open a maximum number of six query tab pages at the same time. A message will appear when you've reached the maximum.
-
-## Create a query with specific parameters
-
-### Create a query with a date
-
-1. In the **New Query** section, the default parameter displayed is **Date In "Last day"**.
-
- The first-line parameter always defaults to **Date** and can't be deleted.
-
-1. To edit date details, select **Edit** (the pencil icon).
-
- To view query details, select **View** (the eye icon).
-
-1. Select **Operator**, and then select an option:
- - **In**: Select this option to set a time range from the past day to the past year.
- - **Is**: Select this option to choose a specific date from the calendar.
- - **Custom**: Select this option to set a date range from the **From** and **To** calendars.
-
-1. To run the query on the current selection, select **Search**.
-
-1. To save your query, select **Save**.
-
- To clear the recent selections, select **Reset**.
-
-### View operator options for identities
-
-The **Operator** menu displays the following options depending on the identity you select in the first dropdown:
-
-- **Is** / **Is Not**: View a list of all available usernames. You can either select or enter a username in the box.
-- **Contains** / **Not Contains**: Enter text that the **Username** should or shouldn't contain, for example, *CloudKnox*.
-- **In** / **Not In**: View a list all available usernames and select multiple usernames.
-
-### Create a query with a username
-
-1. In the **New query** section, select **Add**.
-
-1. From the menu, select **Username**.
-
-1. From the **Operator** menu, select the required option.
-
-1. To add criteria to this section, select **Add**.
-
- You can change the operation between **And** / **Or** statements, and select other criteria. For example, the first set of criteria selected can be **Is** with the username **Test**.
-
-1. Select the plus (**+**) sign, select **Or** with **Contains**, and then enter a username, for example, *CloudKnox*.
-
-1. To remove a row of criteria, select **Remove** (the minus sign **-** icon).
-
-1. To run the query on the current selection, select **Search**.
-
-1. To clear the recent selections, select **Reset**.
-
-### Create a query with a resource name
-
-1. In the **New query** section, select **Add**.
-
-1. From the menu, select **Resource Name**.
-
-1. From the **Operator** menu, select the required option.
-
-1. To add criteria to this section, select **Add**.
-
- You can change the operation between **And** / **Or** statements, and select other criteria. For example, the first set of criteria selected can be **Is** with resource name **Test**.
-
-1. Select the plus (**+**) sign, select **Or** with **Contains**, and then enter a username, for example, *CloudKnox*.
-
-1. To remove a row of criteria, select **Remove** (the minus sign **-** icon).
-
-1. To run the query on the current selection, select **Search**.
-
-1. To clear the recent selections, select **Reset**.
-
-### Create a query with a resource type
-
-1. In the **New Query** section, select **Add**.
-
-1. From the menu, select **Resource Type**.
-
-1. From the **Operator** menu, select the required option.
-
-1. To add criteria to this section, select **Add**.
-
-1. Change the operation between **And** / **Or** statements, and select other criteria. For example, the first set of criteria selected can be **Is** with resource type **s3::bucket**.
-
-1. Select the plus (**+**) sign, select **Or** with **Is**, and then enter or select `ec2::instance`.
-
-1. To remove a row of criteria, select **Remove** (the minus sign **-** icon).
-
-1. To run the query on the current selection, select **Search**.
-
-1. To clear the recent selections, select **Reset**.
-
-
-### Create a query with a task name
-
-1. In the **New Query** section, select **Add**.
-
-1. From the menu, select **Task Name**.
-
-1. From the **Operator** menu, select the required option.
-
-1. To add criteria to this section, select **Add**.
-
-1. Change the operation between **And** / **Or** statements, and select other criteria. For example, the first set of criteria selected can be **Is** with task name **s3:CreateBucket**.
-
-1. Select **Add**, select **Or** with **Is**, and then enter or select `ec2:TerminateInstance`.
-
-1. To remove a row of criteria, select **Remove** (the minus sign **-** icon).
-
-1. To run the query on the current selection, select **Search**.
-
-1. To clear the recent selections, select **Reset**.
-
-### Create a query with a state
-
-1. In the **New Query** section, select **Add**.
-
-1. From the menu, select **State**.
-
-1. From the **Operator** menu, select the required option.
-
- - **Is** / **Is not**: Allows a user to select in the value field and select **Authorization Failure**, **Error**, or **Success**.
-
-1. To add criteria to this section, select **Add**.
-
-1. Change the operation between **And** / **Or** statements, and select other criteria. For example, the first set of criteria selected can be **Is** with State **Authorization Failure**.
-
-1. Select the **Add** icon, select **Or** with **Is**, and then select **Success**.
-
-1. To remove a row of criteria, select **Remove** (the minus sign **-** icon).
-
-1. To run the query on the current selection, select **Search**.
-
-1. To clear the recent selections, select **Reset**.
-
-### Create a query with a role name
-
-1. In the **New query** section, select **Add**.
-
-2. From the menu, select **Role Name**.
-
-3. From the **Operator** menu, select the required option.
-
-4. To add criteria to this section, select **Add**.
-
-5. Change the operation between **And** / **Or** statements, and select other criteria. For example, the first set of criteria selected can be **Contains** with free text **Test**.
-
-6. Select the **Add** icon, select **Or** with **Contains**, and then enter your criteria, for example *CloudKnox*.
-
-7. To remove a row of criteria, select **Remove** (the minus sign **-** icon).
-
-8. To run the query on the current selection, select **Search**.
-
-9. To clear the recent selections, select **Reset**.
-
-### Create a query with a role session name
-
-1. In the **New Query** section, select **Add**.
-
-2. From the menu, select **Role Session Name**.
-
-3. From the **Operator** menu, select the required option.
-
-4. To add criteria to this section, select **Add**.
-
-5. Change the operation between **And** / **Or** statements, and select other criteria. For example, the first set of criteria selected can be **Contains** with free text **Test**.
-
-6. Select the **Add** icon, select **Or** with **Contains**, and then enter your criteria, for example *CloudKnox*.
-
-7. To remove a row of criteria, select **Remove** (the minus sign **-** icon).
-
-8. To run the query on the current selection, select **Search**.
-
-9. To clear the recent selections, select **Reset**.
-
-### Create a query with an access key ID
-
-1. In the **New Query** section, select **Add**.
-
-2. From the menu, select **Access Key ID**.
-
-3. From the **Operator** menu, select the required option.
-
-4. To add criteria to this section, select **Add**.
-
-5. Change the operation between **And** / **Or** statements, and select other criteria. For example, the first set of criteria selected can be **Contains** with free `AKIAIFXNDW2Z2MPEH5OQ`.
-
-6. Select the **Add** icon, select **Or** with **Not** **Contains**, and then enter `AKIAVP2T3XG7JUZRM7WU`.
-
-7. To remove a row of criteria, select **Remove** (the minus sign **-** icon).
-
-8. To run the query on the current selection, select **Search**.
-
-9. To clear the recent selections, select **Reset**.
-
-### Create a query with a tag key
-
-1. In the **New Query** section, select **Add**.
-
-2. From the menu, select **Tag Key**.
-
-3. From the **Operator** menu, select the required option.
-
-4. To add criteria to this section, select **Add**.
-
-5. Change the operation between **And** / **Or** statements, and select other criteria. For example, the first set of criteria selected can be **Is** and type in, or select **Test**.
-
-6. Select the **Add** icon, select **Or** with **Is**, and then enter your criteria, for example *CloudKnox*.
-
-7. To remove a row of criteria, select **Remove** (the minus sign **-** icon).
-
-8. To run the query on the current selection, select **Search**.
-
-9. To clear the recent selections, select **Reset**.
-
-### Create a query with a tag key value
-
-1. In the **New Query** section, select **Add**.
-
-2. From the menu, select **Tag Key Value**.
-
-3. From the **Operator** menu, select the required option.
-
-4. To add criteria to this section, select **Add**.
-
-5. Change the operation between **And** / **Or** statements, and select other criteria. For example, the first set of criteria selected can be **Is** and type in, or select **Test**.
-
-6. Select the **Add** icon, select **Or** with **Is**, and then enter your criteria, for example *CloudKnox*.
-
-7. To remove a row of criteria, select **Remove** (the minus sign **-** icon).
-
-8. To run the query on the current selection, select **Search**.
-
-9. To clear the recent selections, select **Reset**.
-
-### View query results
-
-1. In the **Activity** table, your query results display in columns.
-
- The results display all executed tasks that aren't read-only.
-
-1. To sort each column by ascending or descending value, select the up or down arrows next to the column name.
-
- - **Identity Details**: The name of the identity, for example the name of the role session performing the task.
-
- - To view the **Raw Events Summary**, which displays the full details of the event, next to the **Name** column, select **View**.
-
- - **Resource Name**: The name of the resource on which the task is being performed.
-
- If the column displays **Multiple**, it means multiple resources are listed in the column.
-
-1. To view a list of all resources, hover over **Multiple**.
-
- - **Resource Type**: Displays the type of resource, for example, *Key* (encryption key) or *Bucket* (storage).
- - **Task Name**: The name of the task that was performed by the identity.
-
- An exclamation mark (**!**) next to the task name indicates that the task failed.
-
- - **Date**: The date when the task was performed.
-
- - **IP Address**: The IP address from where the user performed the task.
-
- - **Authorization System**: The authorization system name in which the task was performed.
-
-1. To download the results in comma-separated values (CSV) file format, select **Download**.
-
-## Save a query
-
-1. After you complete your query selections from the **New Query** section, select **Save**.
-
-2. In the **Query Name** box, enter a name for your query, and then select **Save**.
-
-3. To save a query with a different name, select the ellipses (**...**) next to **Save**, and then select **Save As**.
-
-4. Make your query selections from the **New Query** section, select the ellipses (**...**), and then select **Save As**.
-
-5. To save a new query, in the **Save Query** box, enter the name for the query, and then select **Save**.
-
-6. To save an existing query you've modified, select the ellipses (**...**).
-
- - To save a modified query under the same name, select **Save**.
- - To save a modified query under a different name, select **Save As**.
-
-### View a saved query
-
-1. Select **Saved Queries**, and then select a query from the **Load Queries** list.
-
- A message box opens with the following options: **Load with the saved authorization system** or **Load with the currently selected authorization system**.
-
-1. Select the appropriate option, and then select **Load Queries**.
-
-1. View the query information:
-
- - **Query Name**: Displays the name of the saved query.
- - **Query Type**: Displays whether the query is a *System* query or a *Custom* query.
- - **Schedule**: Displays how often a report will be generated. You can schedule a one-time report or a monthly report.
- - **Next On**: Displays the date and time the next report will be generated.
- - **Format**: Displays the output format for the report, for example, CSV.
- - **Last Modified On**: Displays the date in which the query was last modified on.
-
-1. To view or set schedule details, select the gear icon, select **Create Schedule**, and then set the details.
-
- If a schedule has already been created, select the gear icon to open the **Edit Schedule** box.
-
- - **Repeat**: Sets how often the report should repeat.
- - **Start On**: Sets the date when you want to receive the report.
- - **At**: Sets the specific time when you want to receive the report.
- - **Report Format**: Select the output type for the file, for example, CSV.
- - **Share Report With**: The email address of the user who is creating the schedule is displayed in this field. You can add other email addresses.
-
-1. After selecting your options, select **Schedule**.
-
-
-### Save a query under a different name
-
-- Select the ellipses (**...**).
-
- System queries have only one option:
-
- - **Duplicate**: Creates a duplicate of the query and names the file *Copy of XXX*.
-
- Custom queries have the following options:
-
- - **Rename**: Enter the new name of the query and select **Save**.
- - **Delete**: Delete the saved query.
-
- The **Delete Query** box opens, asking you to confirm that you want to delete the query. Select **Yes** or **No**.
-
- - **Duplicate**: Creates a duplicate of the query and names it *Copy of XXX*.
- - **Delete Schedule**: Deletes the schedule details for this query.
-
- This option isn't available if you haven't yet saved a schedule.
-
- The **Delete Schedule** box opens, asking you to confirm that you want to delete the schedule. Select **Yes** or **No**.
-
-
-## Export the results of a query as a report
-
-- To export the results of the query, select **Export**.
-
- CloudKnox exports the results in comma-separated values (**CSV**) format, portable document format (**PDF**), or Microsoft Excel Open XML Spreadsheet (**XLSX**) format.
-
-
-## Next steps
-
-- For information on how to view how users access information, see [Use queries to see how users access information](cloudknox-ui-audit-trail.md).
-- For information on how to create a query, see [Create a custom query](cloudknox-howto-create-custom-queries.md).
-- For information on how to generate an on-demand report from a query, see [Generate an on-demand report from a query](cloudknox-howto-audit-trail-results.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-dashboard.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-dashboard.md
deleted file mode 100644
index 48d0653e35e93..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-dashboard.md
+++ /dev/null
@@ -1,82 +0,0 @@
----
-title: View data about the activity in your authorization system in CloudKnox Permissions Management
-description: How to view data about the activity in your authorization system in the CloudKnox Dashboard in CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-
-
-# View data about the activity in your authorization system
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-The CloudKnox Permissions Management (CloudKnox) **Dashboard** provides an overview of the authorization system and account activity being monitored. You can use this dashboard to view data collected from your Amazon Web Services (AWS), Microsoft Azure, and Google Cloud Platform (GCP) authorization systems.
-
-## View data about your authorization system
-
-1. In the CloudKnox home page, select **Dashboard**.
-1. From the **Authorization systems type** dropdown, select **AWS**, **Azure**, or **GCP**.
-1. Select the **Authorization System** box to display a **List** of accounts and **Folders** available to you.
-1. Select the accounts and folders you want, and then select **Apply**.
-
- The **Permission Creep Index (PCI)** chart updates to display information about the accounts and folders you selected. The number of days since the information was last updated displays in the upper right corner.
-
-1. In the Permission Creep Index (PCI) graph, select a bubble.
-
- The bubble displays the number of identities that are considered high-risk.
-
- *High-risk* refers to the number of users who have permissions that exceed their normal or required usage.
-
-1. Select the box to display detailed information about the identities contributing to the **Low PCI**, **Medium PCI**, and **High PCI**.
-
-1. The **Highest PCI change** displays the authorization system name with the PCI number and the change number for the last seven days, if applicable.
-
- - To view all the changes and PCI ratings in your authorization system, select **View all**.
-
-1. To return to the PCI graph, select the **Graph** icon in the upper right of the list box.
-
-For more information about the CloudKnox **Dashboard**, see [View key statistics and data about your authorization system](cloudknox-ui-dashboard.md).
-
-## View user data on the PCI heat map
-
-The **Permission Creep Index (PCI)** heat map shows the incurred risk of users with access to high-risk privileges. The distribution graph displays all the users who contribute to the privilege creep. It displays how many users contribute to a particular score. For example, if the score from the PCI chart is 14, the graph shows how many users have a score of 14.
-
-- To view detailed data about a user, select the number.
-
- The PCI trend graph shows you the historical trend of the PCI score over the last 90 days.
-
-- To download the **PCI History** report, select **Download** (the down arrow icon).
-
-
-## View information about users, roles, resources, and PCI trends
-
-To view specific information about the following, select the number displayed on the heat map.
-
-- **Users**: Displays the total number of users and how many fall into the high, medium, and low categories.
-- **Roles**: Displays the total number of roles and how many fall into the high, medium, and low categories.
-- **Resources**: Displays the total number of resources and how many fall into the high, medium, and low categories.
-- **PCI trend**: Displays a line graph of the PCI trend over the last several weeks.
-
-## View identity findings
-
-The **Identity** section below the heat map on the left side of the page shows all the relevant findings about identities, including roles that can access secret information, roles that are inactive, over provisioned active roles, and so on.
-
-- To expand the full list of identity findings, select **All findings**.
-
-## View resource findings
-
-The **Resource** section below the heat map on the right side of the page shows all the relevant findings about your resources. It includes unencrypted S3 buckets, open security groups, managed keys, and so on.
-
-## Next steps
-
-- For more information about how to view key statistics and data in the Dashboard, see [View key statistics and data about your authorization system](cloudknox-ui-dashboard.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-data-inventory.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-data-inventory.md
deleted file mode 100644
index 594f7f8b54df2..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-data-inventory.md
+++ /dev/null
@@ -1,56 +0,0 @@
----
-title: CloudKnox Permissions Management - Display an inventory of created resources and licenses for your authorization system
-description: How to display an inventory of created resources and licenses for your authorization system in CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# Display an inventory of created resources and licenses for your authorization system
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-You can use the **Inventory** dashboard in CloudKnox Permissions Management (CloudKnox) to display an inventory of created resources and licensing information for your authorization system and its associated accounts.
-
-## View resources created for your authorization system
-
-1. To access your inventory information, in the CloudKnox home page, select **Settings** (the gear icon).
-1. Select the **Inventory** tab, select the **Inventory** subtab, and then select your authorization system type:
-
- - **AWS** for Amazon Web Services.
- - **Azure** for Microsoft Azure.
- - **GCP** for Google Cloud Platform.
-
- The **Inventory** tab displays information pertinent to your authorization system type.
-
-1. To change the columns displayed in the table, select **Columns**, and then select the information you want to display.
-
- - To discard your changes, select **Reset to default**.
-
-## View the number of licenses associated with your authorization system
-
-1. To access licensing information about your data sources, in the CloudKnox home page, select **Settings** (the gear icon).
-
-1. Select the **Inventory** tab, select the **Licensing** subtab, and then select your authorization system type.
-
- The **Licensing** table displays the following information pertinent to your authorization system type:
-
- - The names of your accounts in the **Authorization system** column.
- - The number of **Compute** licenses.
- - The number of **Serverless** licenses.
- - The number of **Compute containers**.
- - The number of **Databases**.
- - The **Total number of licenses**.
-
-
-## Next steps
-
-- For information about viewing and configuring settings for collecting data from your authorization system and its associated accounts, see [View and configure settings for data collection](cloudknox-product-data-sources.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-data-sources.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-data-sources.md
deleted file mode 100644
index 2e28b31534987..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-data-sources.md
+++ /dev/null
@@ -1,107 +0,0 @@
----
-title: View and configure settings for data collection from your authorization system in CloudKnox Permissions Management
-description: How to view and configure settings for collecting data from your authorization system in CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# View and configure settings for data collection
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-
-You can use the **Data Collectors** dashboard in CloudKnox Permissions Management (CloudKnox) to view and configure settings for collecting data from your authorization systems. It also provides information about the status of the data collection.
-
-## Access and view data sources
-
-1. To access your data sources, in the CloudKnox home page, select **Settings** (the gear icon). Then select the **Data Collectors** tab.
-
-1. On the **Data Collectors** dashboard, select your authorization system type:
-
- - **AWS** for Amazon Web Services.
- - **Azure** for Microsoft Azure.
- - **GCP** for Google Cloud Platform.
-
-1. To display specific information about an account:
-
- 1. Enter the following information:
-
- - **Uploaded on**: Select **All** accounts, **Online** accounts, or **Offline** accounts.
- - **Transformed on**: Select **All** accounts, **Online** accounts, or **Offline** accounts.
- - **Search**: Enter an ID or Internet Protocol (IP) address to find a specific account.
-
- 1. Select **Apply** to display the results.
-
- Select **Reset Filter** to discard your settings.
-
-1. The following information displays:
-
- - **ID**: The unique identification number for the data collector.
- - **Data types**: Displays the data types that are collected:
- - **Entitlements**: The permissions of all identities and resources for all the configured authorization systems.
- - **Recently uploaded on**: Displays whether the entitlement data is being collected.
-
- The status displays *ONLINE* if the data collection has no errors and *OFFLINE* if there are errors.
- - **Recently transformed on**: Displays whether the entitlement data is being processed.
-
- The status displays *ONLINE* if the data processing has no errors and *OFFLINE* if there are errors.
- - The **Tenant ID**.
- - The **Tenant name**.
-
-## Modify a data collector
-
-1. Select the ellipses **(...)** at the end of the row in the table.
-1. Select **Edit Configuration**.
-
- The **CloudKnox Onboarding - Summary** box displays.
-
-1. Select **Edit** (the pencil icon) for each field you want to change.
-1. Select **Verify now & save**.
-
- To verify your changes later, select **Save & verify later**.
-
- When your changes are saved, the following message displays: **Successfully updated configuration.**
-
-## Delete a data collector
-
-1. Select the ellipses **(...)** at the end of the row in the table.
-1. Select **Delete Configuration**.
-
- The **CloudKnox Onboarding - Summary** box displays.
-1. Select **Delete**.
-1. Check your email for a one time password (OTP) code, and enter it in **Enter OTP**.
-
- If you don't receive an OTP, select **Resend OTP**.
-
- The following message displays: **Successfully deleted configuration.**
-
-## Start collecting data from an authorization system
-
-1. Select the **Authorization Systems** tab, and then select your authorization system type.
-1. Select the ellipses **(...)** at the end of the row in the table.
-1. Select **Collect Data**.
-
- A message displays to confirm data collection has started.
-
-## Stop collecting data from an authorization system
-
-1. Select the ellipses **(...)** at the end of the row in the table.
-1. To delete your authorization system, select **Delete**.
-
- The **Validate OTP To Delete Authorization System** box displays.
-
-1. Enter the OTP code
-1. Select **Verify**.
-
-## Next steps
-
-- For information about viewing an inventory of created resources and licensing information for your authorization system, see [Display an inventory of created resources and licenses for your authorization system](cloudknox-product-data-inventory.md)
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-define-permission-levels.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-define-permission-levels.md
deleted file mode 100644
index d775a826389a1..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-define-permission-levels.md
+++ /dev/null
@@ -1,277 +0,0 @@
----
-title: Define and manage users, roles, and access levels in CloudKnox Permissions Management
-description: How to define and manage users, roles, and access levels in CloudKnox Permissions Management User management dashboard.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# Define and manage users, roles, and access levels
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-In CloudKnox Permissions Management (CloudKnox), a key component of the interface is the User management dashboard. This topic describes how system administrators can define and manage users, their roles, and their access levels in the system.
-
-## The User management dashboard
-
-The CloudKnox User management dashboard provides a high-level overview of:
-
-- Registered and invited users.
-- Permissions allowed for each user within a given system.
-- Recent user activity.
-
-It also provides the functionality to invite or delete a user, edit, view, and customize permissions settings.
-
-
-## Manage users for customers without SAML integration
-
-Follow this process to invite users if the customer hasn't enabled SAML integration with the CloudKnox application.
-
-### Invite a user to CloudKnox
-
-Inviting a user to CloudKnox adds the user to the system and allows system administrators to assign permissions to those users. Follow the steps below to invite a user to CloudKnox.
-
-1. To invite a user to CloudKnox, select the down caret icon next to the **User** icon on the right of the screen, and then select **User Management**.
-2. From the **Users** tab, select **Invite User**.
-3. From the **Set User Permission** window, in the **User** text box, enter the user's email address.
-4. Under **Permission**, select the applicable option.
-
- - **Admin for All Authorization System Types**: **View**, **Control**, and **Approve** permissions for all Authorization System Types.
-
- 1. Select **Next**.
- 2. Select **Requestor for User** for each authorization system, if applicable.
-
- A user must have an account with a valid email address in the authorization system to select **Requestor for User**. If a user doesn't exist in the authorization system, **Requestor for User** is grayed out.
- 3. Optional: To request access for multiple other identities, under **Requestor for Other Users**, select **Add**, and then select **Users**.
-
- For example, a user may have various roles in different authorization systems, so they can select the **Add** icon and the **Users** icon to request access for all their accounts.
- 4. On the **Add Users** screen, enter the user's name or ID in the **User Search** box and select all applicable users. Then select **Add**.
-
- - **Admin for Selected Authorization System Types**: **View**, **Control**, and **Approve** permissions for selected Authorization System Types.
-
- 1. Select **Viewer**, **Controller**, or **Approver** for the appropriate authorization system(s).
- 2. Select **Next**.
- 3. Select **Requestor for User** for each authorization system, if applicable.
-
- A user must have an account with a valid email address in the authorization system to select **Requestor for User**. If a user doesn't exist in the authorization system, **Requestor for User** is grayed out.
- 4. Optional: To request access for multiple other identities, under **Requestor for Other Users**, select **Add**, and then select **Users**.
-
- For example, a user may have various roles in different authorization systems, so they can select **Add**, and then select **Users** to request access for all their accounts.
- 5. On the **Add Users** screen, enter the user's name or ID in the **User Search** box and select all applicable users. Then select **Add**.
-
- - **Custom**: **View**, **Control**, and **Approve** permissions for specific accounts in **Auth System Types**.
-
- 1. Select **Next**.
-
- The default view displays the **List** section.
- 2. Select the appropriate boxes for **Viewer**, **Controller**, or **Approver**.
-
- For access to all authorization system types, select **All (Current and Future)**.
- 1. Select **Next**.
- 1. Select **Requestor for User** for each authorization system, if applicable.
-
- A user must have an account with a valid email address in the authorization system to select **Requestor for User**. If a user doesn't exist in the authorization system, **Requestor for User** is grayed out.
- 5. Optional: To request access for multiple other identities, under **Requestor for Other Users**, select **Add**, and then select **Users**.
-
- For example, a user may have various roles in different authorization systems, so they can select **Add**, and then select **Users** to request access for all their accounts.
- 6. On the **Add Users** screen, enter the user's name or ID in the **User Search** box and select all applicable users. Then select **Add**.
-
-5. Select **Save**.
-
- The following message displays in green at the top of the screen: **New User Has Been Invited Successfully**.
-
-
-
-## Manage users for customers with SAML integration
-
-Follow this process to invite users if the customer has enabled SAML integration with the CloudKnox application.
-
-### Create a permission in CloudKnox
-
-Creating a permission directly in CloudKnox allows system administrators to assign permissions to specific users. The following steps help you to create a permission.
-
-- On the right side of the screen, select the down caret icon next to **User**, and then select **User management**.
-
-- For **Users**:
- 1. To create permissions for a specific user, select the **Users** tab, and then select **Permission.**
- 2. From the **Set User Permission** window, enter the user's email address in the **User** text box.
- 3. Under **Permission**, select the applicable button. Then expand menu to view instructions for each option.
- - **Admin for All Authorization System Types**: **View**, **Control**, and **Approve** permissions for all Authorization System Types.
- 1. Select **Next**.
- 2. Check **Requestor for User** for each authorization system, if applicable.
-
- A user must have an account with a valid email address in the authorization system to select **Requestor for User**. If a user doesn't exist in the authorization system, **Requestor for User** is grayed out.
-
- 3. Optional: To request access for multiple other identities, under **Requestor for Other Users**, select **Add**, and then select **Users**.
-
- For example, a user may have various roles in different authorization systems, so they can select **Add**, and then select **Users** to request access for all their accounts.
-
- 4. On the **Add Users** screen, enter the user's name or ID in the **User Search** box and select all applicable users. Then select **Add**.
-
- - **Admin for Selected Authorization System Types**: **View**, **Control**, and **Approve** permissions for selected Authorization System Types.
- 1. Check **Viewer**, **Controller**, or **Approver** for the appropriate authorization system(s).
- 2. Select **Next**.
- 3. Check **Requestor for User** for each authorization system, if applicable.
-
- A user must have an account with a valid email address in the authorization system to select **Requestor for User**. If a user doesn't exist in the authorization system, **Requestor for User** is grayed out.
-
- 4. Optional: To request access for multiple other identities, under **Requestor for Other Users**, select **Add**, and then select **Users**.
-
- For example, a user may have various roles in different authorization systems, so they can select **Add**, and then select **Users** to request access for all their accounts.
- 5. On the **Add Users** screen, enter the user's name or ID in the **User Search** box and select all applicable users. Then select **Add**.
- - **Custom**: **View**, **Control**, and **Approve** permissions for specific accounts in **Auth System Types**.
-
- 1. Select **Next**.
-
- The default view displays the **List** tab, which displays individual authorization systems.
- - To view groups of authorization systems organized into folder, select the **Folder** tab.
- 2. Check the appropriate boxes for **Viewer**, **Controller**, or **Approver**.
-
- For access to all authorization system types, select **All (Current and Future)**.
- 3. Select **Next**.
- 4. Check **Requestor for User** for each authorization system, if applicable.
-
- A user must have an account with a valid email address in the authorization system to select **Requestor for User**. If a user doesn't exist in the authorization system, **Requestor for User** is grayed out.
- 5. Optional: To request access for multiple other identities, under **Requestor for Other Users**, select **Add**, and then select **Users**.
-
- For example, a user can have various roles in different authorization systems, so they can select **Add**, and then select **Users** to request access for all their accounts.
-
- 6. On the **Add Users** screen, enter the user's name or ID in the **User Search** box and select all applicable users. Then select **Add**.
-
- 4. Select **Save**.
-
- The following message displays in green at the top of the screen:
- **New User Has Been Created Successfully**.
- 5. The new user receives an email invitation to log in to CloudKnox.
-
-### The Pending tab
-
-1. To view the created permission, select the **Pending** tab. The system administrator can view the following details:
- - **Email Address**: Displays the email address of the invited user.
- - **Permissions**: Displays each service account and if the user has permissions as a **Viewer**, **Controller**, **Approver**, or **Requestor**.
- - **Invited By**: Displays the email address of the person who sent the invitation.
- - **Sent**: Displays the date the invitation was sent to the user.
-2. To make changes to the following, select the ellipses **(...)** in the far right column.
- - **View Permissions**: Displays a list of accounts for which the user has permissions.
- - **Edit Permissions**: System administrators can edit a user's permissions.
- - **Delete**: System administrators can delete a permission
- - **Reinvite**: System administrator can reinvite the permission if the user didn't receive the email invite
-
- When a user registers with CloudKnox, they move from the **Pending** tab to the **Registered** tab.
-
-### The Registered tab
-
-- For **Users**:
-
- 1. The **Registered** tab provides a high-level overview of user details to system administrators:
- - The **Name/Email Address** column lists the name and email address of the user.
- - The **Permissions** column lists each authorization system, and each type of permission.
-
- If a user has all permissions for all authorization systems, **Admin for All Authorization Types** display across all columns. If a user only has some permissions, numbers display in each column they have permissions for. For example, if the number "3" is listed in the **Viewer** column, the user has viewer permission for three accounts within that authorization system.
- - The **Joined On** column records when the user registered for CloudKnox.
- - The **Recent Activity** column displays the date when a user last performed an activity.
- - The **Search** button allows a system administrator to search for a user by name and all users who match the criteria displays.
- - The **Filters** option allows a system administrator to filter by specific details. When the filter option is selected, the **Authorization System** box displays.
-
- To display all authorization system accounts,Select **All**. Then select the appropriate boxes for the accounts that need to be viewed.
- 2. To make the changes to the following changes, select the ellipses **(...)** in the far right column:
- - **View Permissions**: Displays a list of accounts for which the user has permissions.
- - **Edit Permissions**: System administrators can edit the accounts for which a user has permissions.
- - **Remove Permissions**: System administrators can remove permissions from a user.
-
-- For **Groups**:
- 1. To create permissions for a specific user, select the **Groups** tab, and then select **Permission**.
- 2. From the **Set Group Permission** window, enter the name of the group in the **Group Name** box.
-
- The identity provider creates groups.
-
- Some users may be part of multiple groups. In this case, the user's overall permissions is a union of the permissions assigned the various groups the user is a member of.
- 3. Under **Permission**, select the applicable button and expand the menu to view instructions for each option.
-
- - **Admin for All Authorization System Types**: **View**, **Control**, and **Approve** permissions for all Authorization System Types.
- 1. Select **Next**.
- 2. Check **Requestor for User** for each authorization system, if applicable.
-
- A user must have an account with a valid email address in the authorization system to select **Requestor for User**. If a user doesn't exist in the authorization system, **Requestor for User** is grayed out.
- 3. Optional: To request access for multiple other identities, under **Requestor for Other Users**, select **Add**, and then select **Users**.
-
- For example, a user may have various roles in different authorization systems, so they can select **Add**, and then select **Users** to request access for all their accounts.
-
- 4. On the **Add Users** screen, enter the user's name or ID in the **User Search** box and select all applicable users. Then select **Add**.
-
- - **Admin for Selected Authorization System Types**: **View**, **Control**, and **Approve** permissions for selected Authorization System Types.
- 1. Check **Viewer**, **Controller**, or **Approver** for the appropriate authorization system(s).
- 2. Select **Next**.
- 3. Check **Requestor for User** for each authorization system, if applicable.
-
- A user must have an account with a valid email address in the authorization system to select **Requestor for User**. If a user doesn't exist in the authorization system, **Requestor for User** is grayed out.
- 4. Optional: To request access for multiple other identities, under **Requestor for Other Users**, select **Add**, and then select **Users**.
-
- For example, a user may have various roles in different authorization systems, so they can select **Add**, and then select **Users** to request access for all their accounts.
-
- 5. On the **Add Users** screen, enter the user's name or ID in the **User Search** box and select all applicable users. Then select **Add**.
-
- - **Custom**: **View**, **Control**, and **Approve** permissions for specific accounts in Auth System Types.
- 1. Select **Next**.
-
- The default view displays the **List** section.
-
- 2. Check the appropriate boxes for **Viewer**, **Controller**, or **Approver.
-
- For access to all authorization system types, select **All (Current and Future)**.
-
- 3. Select **Next**.
-
- 4. Check **Requestor for User** for each authorization system, if applicable.
-
- A user must have an account with a valid email address in the authorization system to select **Requestor for User**. If a user doesn't exist in the authorization system, **Requestor for User** is grayed out.
-
- 5. Optional: To request access for multiple other identities, under **Requestor for Other Users**, select **Add**, and then select **Users**.
-
- For example, a user may have various roles in different authorization systems, so they can select **Add**, and then select **Users** to request access for all their accounts.
-
- 6. On the **Add Users** screen, enter the user's name or ID in the **User Search** box and select all applicable users. Then select **Add**.
-
- 4. Select **Save**.
-
- The following message displays in green at the top of the screen: **New Group Has Been Created Successfully**.
-
-### The Groups tab
-
-1. The **Groups** tab provides a high-level overview of user details to system administrators:
-
- - The **Name** column lists the name of the group.
- - The **Permissions** column lists each authorization system, and each type of permission.
-
- If a group has all permissions for all authorization systems, **Admin for All Authorization Types** displays across all columns.
-
- If a group only has some permissions, the corresponding columns display numbers for the groups.
-
- For example, if the number "3" is listed in the **Viewer** column, then the group has viewer permission for three accounts within that authorization system.
- - The **Modified By** column records the email address of the person who created the group.
- - The **Modified On** column records the date the group was last modified on.
- - The **Search** button allows a system administrator to search for a group by name and all groups who match the criteria displays.
- - The **Filters** option allows a system administrator to filter by specific details. When the filter option is selected, the **Authorization System** box displays.
-
- To display all authorization system accounts, select **All**. Then select the appropriate boxes for the accounts that need to be viewed.
-
-2. To make changes to the following, select the ellipses **(...)** in the far right column:
- - **View Permissions**: Displays a list of the accounts for which the group has permissions.
- - **Edit Permissions**: System administrators can edit a group's permissions.
- - **Duplicate**: System administrators can duplicate permissions from one group to another.
- - **Delete**: System administrators can delete permissions from a group.
-
-
-## Next steps
-
-- For information about how to view user management information, see [Manage users with the User management dashboard](cloudknox-ui-user-management.md).
-- For information about how to create group-based permissions, see [Create group-based permissions](cloudknox-howto-create-group-based-permissions.md).
-
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-integrations.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-integrations.md
deleted file mode 100644
index b6a48c857287e..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-integrations.md
+++ /dev/null
@@ -1,51 +0,0 @@
----
-title: View integration information about an authorization system in CloudKnox Permissions Management
-description: View integration information about an authorization system in CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# View integration information about an authorization system
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-The **Integrations** dashboard in CloudKnox Permissions Management (CloudKnox) allows you to view all your authorization systems in one place, and to ensure all applications are functioning as one. This information helps improve quality and performance as a whole.
-
-## Display integration information about an authorization system
-
-Refer to the **Integration** subpages in CloudKnox for information about available authorization systems for integration.
-
-1. To display the **Integrations** dashboard, select **User** (your initials) in the upper right of the screen, and then select **Integrations.**
-
- The **Integrations** dashboard displays a tile for each available authorization system.
-
-1. Select an authorization system tile to view its integration information.
-
-## Available integrated authorization systems
-
-The following authorization systems may be listed in the **Integrations** dashboard, depending on which systems are integrated into the CloudKnox application.
-
-- **ServiceNow**: Manages digital workflows for enterprise operations, and the CloudKnox integration allows you to request and approve permissions through the ServiceNow ticketing workflow.
-- **Splunk**: Searches, monitors, and analyzes machine-generated data, and the CloudKnox integration enables exporting usage analytics data, alerts, and logs.
-- **HashiCorp Terraform**: CloudKnox enables the generation of least-privilege policies through the Hashi Terraform provider.
-- **CloudKnox API**: The CloudKnox application programming interface (API) provides access to CloudKnox features.
-- **Saviynt**: Enables you to view Identity entitlements and usage inside the Saviynt console.
-- **Securonix**: Enables exporting usage analytics data, alerts, and logs.
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-permission-analytics.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-permission-analytics.md
deleted file mode 100644
index 479f73496ba06..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-permission-analytics.md
+++ /dev/null
@@ -1,102 +0,0 @@
----
-title: Create and view permission analytics triggers in CloudKnox Permissions Management
-description: How to create and view permission analytics triggers in the Permission analytics tab in CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# Create and view permission analytics triggers
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-This article describes how you can create and view permission analytics triggers in CloudKnox Permissions Management (CloudKnox).
-
-## View permission analytics triggers
-
-1. In the CloudKnox home page, select **Activity triggers** (the bell icon).
-1. Select **Permission Analytics**, and then select the **Alerts** subtab.
-
- The **Alerts** subtab displays the following information:
-
- - **Alert Name**: Lists the name of the alert.
- - To view the name, ID, role, domain, authorization system, statistical condition, anomaly date, and observance period, select **Alert name**.
- - To expand the top information found with a graph of when the anomaly occurred, select **Details**.
- - **Anomaly Alert Rule**: Displays the name of the rule select when creating the alert.
- - **# of Occurrences**: Displays how many times the alert trigger has occurred.
- - **Task**: Displays how many tasks are affected by the alert
- - **Resources**: Displays how many resources are affected by the alert
- - **Identity**: Displays how many identities are affected by the alert
- - **Authorization System**: Displays which authorization systems the alert applies to
- - **Date/Time**: Displays the date and time of the alert.
- - **Date/Time (UTC)**: Lists the date and time of the alert in Coordinated Universal Time (UTC).
-
-1. To filter the alerts, select the appropriate alert name or, from the **Alert Name** menu,select **All**.
-
- - From the **Date** dropdown menu, select **Last 24 Hours**, **Last 2 Days**, **Last Week**, or **Custom Range**, and then select **Apply**.
-
- If you select **Custom range**, select date and time settings, and then select **Apply**. - **View Trigger**: Displays the current trigger settings and applicable authorization system details.
-
-1. To view the following details, select the ellipses (**...**):
-
- - **Details**: Displays **Authorization System Type**, **Authorization Systems**, **Resources**, **Tasks**, and **Identities** that matched the alert criteria.
-1. To view specific matches, select **Resources**, **Tasks**, or **Identities**.
-
- The **Activity** section displays details about the **Identity Name**, **Resource Name**, **Task Name**, **Date**, and **IP Address**.
-
-## Create a permission analytics trigger
-
-1. In the CloudKnox home page, select **Activity triggers** (the bell icon).
-1. Select **Permission Analytics**, select the **Alerts** subtab, and then select **Create Permission Analytics Trigger**.
-1. In the **Alert Name** box, enter a name for the alert.
-1. Select the **Authorization System**.
-1. Select **Identity performed high number of tasks**, and then select **Next**.
-1. On the **Authorization Systems** tab, select the appropriate accounts and folders, or select **All**.
-
- This screen defaults to the **List** view but can also be changed to the **Folder** view, and the applicable folder can be selected instead of individually by system.
-
- - The **Status** column displays if the authorization system is online or offline
- - The **Controller** column displays if the controller is enabled or disabled.
-
-1. On the **Configuration** tab, to update the **Time Interval**, select **90 Days**, **60 Days**, or **30 Days** from the **Time range** dropdown.
-1. Select **Save**.
-
-## View permission analytics alert triggers
-
-1. In the CloudKnox home page, select **Activity triggers** (the bell icon).
-1. Select **Permission Analytics**, and then select the **Alert Triggers** subtab.
-
- The **Alert triggers** subtab displays the following information:
-
- - **Alert**: Lists the name of the alert.
- - **Anomaly Alert Rule**: Displays the name of the rule select when creating the alert.
- - **# of users subscribed**: Displays the number of users subscribed to the alert.
- - **Created By**: Displays the email address of the user who created the alert.
- - **Last modified By**: Displays the email address of the user who last modified the alert.
- - **Last Modified On**: Displays the date and time the trigger was last modified.
- - **Subscription**: Toggle the button to **On** or **Off**.
- - **View Trigger**: Displays the current trigger settings and applicable authorization system details.
-
-1. To view other options available to you, select the ellipses (**...**), and then make a selection from the available options:
-
- - **Details** displays **Authorization System Type**, **Authorization Systems**, **Resources**, **Tasks**, and **Identities** that matched the alert criteria.
- - To view the specific matches, select **Resources**, **Tasks**, or **Identities**.
- - The **Activity** section displays details about the **Identity Name**, **Resource Name**, **Task Name**, **Date**, and **IP Address**.
-
-1. To filter by **Activated** or **Deactivated**, in the **Status** section, select **All**, **Activated**, or **Deactivated**, and then select **Apply**.
-
-
-## Next steps
-
-- For an overview on activity triggers, see [View information about activity triggers](cloudknox-ui-triggers.md).
-- For information on activity alerts and alert triggers, see [Create and view activity alerts and alert triggers](cloudknox-howto-create-alert-trigger.md).
-- For information on rule-based anomalies and anomaly triggers, see [Create and view rule-based anomalies and anomaly triggers](cloudknox-product-rule-based-anomalies.md).
-- For information on finding outliers in identity's behavior, see [Create and view statistical anomalies and anomaly triggers](cloudknox-product-statistical-anomalies.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-permissions-analytics-reports.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-permissions-analytics-reports.md
deleted file mode 100644
index 7f2acdd173c01..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-permissions-analytics-reports.md
+++ /dev/null
@@ -1,126 +0,0 @@
----
-title: Generate and download the Permissions analytics report in CloudKnox Permissions Management
-description: How to generate and download the Permissions analytics report in CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# Generate and download the Permissions analytics report
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-This article describes how to generate and download the **Permissions analytics report** in CloudKnox Permissions Management (CloudKnox).
-
-> [!NOTE]
-> This topic applies only to Amazon Web Services (AWS) users.
-
-## Generate the Permissions analytics report
-
-1. In the CloudKnox home page, select the **Reports** tab, and then select the **Systems Reports** subtab.
-
- The **Systems Reports** subtab displays a list of reports the **Reports** table.
-1. Find **Permissions Analytics Report** in the list, and to download the report, select the down arrow to the right of the report name, or from the ellipses **(...)** menu, select **Download**.
-
- The following message displays: **Successfully Started To Generate On Demand Report.**
-
-1. For detailed information in the report, select the right arrow next to one of the following categories. Or, select the required category under the **Findings** column.
-
- - **AWS**
- - Inactive Identities
- - Users
- - Roles
- - Resources
- - Serverless Functions
- - Inactive Groups
- - Super Identities
- - Users
- - Roles
- - Resources
- - Serverless Functions
- - Over-Provisioned Active Identities
- - Users
- - Roles
- - Resources
- - Serverless Functions
- - PCI Distribution
- - Privilege Escalation
- - Users
- - Roles
- - Resources
- - S3 Bucket Encryption
- - Unencrypted Buckets
- - SSE-S3 Buckets
- - S3 Buckets Accessible Externally
- - EC2 S3 Buckets Accessibility
- - Open Security Groups
- - Identities That Can Administer Security Tools
- - Users
- - Roles
- - Resources
- - Serverless Functions
- - Identities That Can Access Secret Information
- - Users
- - Roles
- - Resources
- - Serverless Functions
- - Cross-Account Access
- - External Accounts
- - Roles That Allow All Identities
- - Hygiene: MFA Enforcement
- - Hygiene: IAM Access Key Age
- - Hygiene: Unused IAM Access Keys
- - Exclude From Reports
- - Users
- - Roles
- - Resources
- - Serverless Functions
- - Groups
- - Security Groups
- - S3 Buckets
-
-
-1. Select a category and view the following columns of information:
-
- - **User**, **Role**, **Resource**, **Serverless Function Name**: Displays the name of the identity.
- - **Authorization System**: Displays the authorization system to which the identity belongs.
- - **Domain**: Displays the domain name to which the identity belongs.
- - **Permissions**: Displays the maximum number of permissions that the identity can be granted.
- - **Used**: Displays how many permissions that the identity has used.
- - **Granted**: Displays how many permissions that the identity has been granted.
- - **PCI**: Displays the permission creep index (PCI) score of the identity.
- - **Date Last Active On**: Displays the date that the identity was last active.
- - **Date Created On**: Displays the date when the identity was created.
-
-
-
-
-
-## Next steps
-
-- For information on how to view system reports in the **Reports** dashboard, see [View system reports in the Reports dashboard](cloudknox-product-reports.md).
-- For a detailed overview of available system reports, see [View a list and description of system reports](cloudknox-all-reports.md).
-- For information about how to generate and view a system report, see [Generate and view a system report](cloudknox-report-view-system-report.md).
-- For information about how to create, view, and share a system report, see [Create, view, and share a custom report](cloudknox-report-view-system-report.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-reports.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-reports.md
deleted file mode 100644
index be79c6b0acb40..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-reports.md
+++ /dev/null
@@ -1,141 +0,0 @@
----
-title: View system reports in the Reports dashboard in CloudKnox Permissions Management
-description: How to view system reports in the Reports dashboard in CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# View system reports in the Reports dashboard
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-CloudKnox Permissions Management (CloudKnox) has various types of system report types available that capture specific sets of data. These reports allow management to:
-
-- Make timely decisions.
-- Analyze trends and system/user performance.
-- Identify trends in data and high risk areas so that management can address issues more quickly and improve their efficiency.
-
-## Explore the Reports dashboard
-
-The **Reports** dashboard provides a table of information with both system reports and custom reports. The **Reports** dashboard defaults to the **System Reports** tab, which has the following details:
-
-- **Report Name**: The name of the report.
-- **Category**: The type of report. For example, **Permission**.
-- **Authorization Systems**: Displays which authorizations the custom report applies to.
-- **Format**: Displays the output format the report can be generated in. For example, comma-separated values (CSV) format, portable document format (PDF), or Microsoft Excel Open XML Spreadsheet (XLSX) format.
-
- - To download a report, select the down arrow to the right of the report name, or from the ellipses **(...)** menu, select **Download**.
-
- The following message displays across the top of the screen in green if the download is successful: **Successfully Started To Generate On Demand Report**.
-
-## Available system reports
-
-CloudKnox offers the following reports for management associated with the authorization systems noted in parenthesis:
-
-- **Access Key Entitlements And Usage**:
- - **Summary of report**: Provides information about access key, for example, permissions, usage, and rotation date.
- - **Applies to**: Amazon Web Services (AWS) and Microsoft Azure
- - **Report output type**: CSV
- - **Ability to collate report**: Yes
- - **Type of report**: **Summary** or **Detailed**
- - **Use cases**:
- - The access key age, last rotation date, and last usage date is available in the summary report to help with key rotation.
- - The granted task and Permissions creep index (PCI) score to take action on the keys.
-
-- **User Entitlements And Usage**:
- - **Summary of report**: Provides information about the identities' permissions, for example, entitlement, usage, and PCI.
- - **Applies to**: AWS, Azure, and Google Cloud Platform (GCP)
- - **Report output type**: CSV
- - **Ability to collate report**: Yes
- - **Type of report**: **Summary** or **Detailed**
- - **Use cases**:
- - The data displayed on the **Usage Analytics** screen is downloaded as part of the **Summary** report. The user's detailed permissions usage is listed in the **Detailed** report.
-
-- **Group Entitlements And Usage**:
- - **Summary of report**: Provides information about the group's permissions, for example, entitlement, usage, and PCI.
- - **Applies to**: AWS, Azure, and GCP
- - **Report output type**: CSV
- - **Ability to collate report**: Yes
- - **Type of report**: **Summary**
- - **Use cases**:
- - All group level entitlements and permission assignments, PCIs, and the number of members are listed as part of this report.
-
-- **Identity Permissions**:
- - **Summary of report**: Report on identities that have specific permissions, for example, identities that have permission to delete any S3 buckets.
- - **Applies to**: AWS, Azure, and GCP
- - **Report output type**: CSV
- - **Ability to collate report**: No
- - **Type of report**: **Summary**
- - **Use cases**:
- - Any task usage or specific task usage via User/Group/Role/App can be tracked with this report.
-
-- **Identity privilege activity report**
- - **Summary of report**: Provides information about permission changes that have occurred in the selected duration.
- - **Applies to**: AWS, Azure, and GCP
- - **Report output type**: PDF
- - **Ability to collate report**: No
- - **Type of report**: **Summary**
- - **Use cases**:
- - Any identity permission change can be captured using this report.
- - The **Identity Privilege Activity** report has the following main sections: **User Summary**, **Group Summary**, **Role Summary**, and **Delete Task Summary**.
- - The **User** summary lists the current granted permissions and high-risk permissions and resources accessed in 1 day, 7 days, or 30 days. There are subsections for newly added or deleted users, users with PCI change, and High-risk active/inactive users.
- - The **Group** summary lists the administrator level groups with the current granted permissions and high-risk permissions and resources accessed in 1 day, 7 days, or 30 days. There are subsections for newly added or deleted groups, groups with PCI change, and High-risk active/inactive groups.
- - The **Role summary** lists similar details as **Group Summary**.
- - The **Delete Task summary** section lists the number of times the **Delete task** has been executed in the given time period.
-
-- **Permissions Analytics Report**
- - **Summary of report**: Provides information about the violation of key security best practices.
- - **Applies to**: AWS, Azure, and GCP
- - **Report output type**: CSV
- - **Ability to collate report**: Yes
- - **Type of report**: **Detailed**
- - **Use cases**:
- - This report lists the different key findings in the selected auth systems. The key findings include super identities, inactive identities, over provisioned active identities, storage bucket hygiene, and access key age (for AWS only). The report helps administrators to visualize the findings across the organization.
-
- For more information about this report, see [Permissions analytics report](cloudknox-product-permissions-analytics-reports.md).
-
-- **Role/Policy Details**
- - **Summary of report**: Provides information about roles and policies.
- - **Applies to**: AWS, Azure, GCP
- - **Report output type**: CSV
- - **Ability to collate report**: No
- - **Type of report**: **Summary**
- - **Use cases**:
- - Assigned/Unassigned, custom/system policy, and the used/unused condition is captured in this report for any specific, or all, AWS accounts. Similar data can be captured for Azure/GCP for the assigned/unassigned roles.
-
-- **PCI History**
- - **Summary of report**: Provides a report of privilege creep index (PCI) history.
- - **Applies to**: AWS, Azure, GCP
- - **Report output type**: CSV
- - **Ability to collate report**: Yes
- - **Type of report**: **Summary**
- - **Use cases**:
- - This report plots the trend of the PCI by displaying the monthly PCI history for each authorization system.
-
-- **All Permissions for Identity**
- - **Summary of report**: Provides results of all permissions for identities.
- - **Applies to**: AWS, Azure, GCP
- - **Report output type**: CSV
- - **Ability to collate report**: Yes
- - **Type of report**: **Detailed**
- - **Use cases**:
- - This report lists all the assigned permissions for the selected identities.
-
-
-
-
-## Next steps
-
-- For a detailed overview of available system reports, see [View a list and description of system reports](cloudknox-all-reports.md).
-- For information about how to create, view, and share a system report, see [Create, view, and share a custom report](cloudknox-report-view-system-report.md).
-- For information about how to create and view a custom report, see [Generate and view a custom report](cloudknox-report-create-custom-report.md).
-- For information about how to create and view the Permissions analytics report, see [Generate and download the Permissions analytics report](cloudknox-product-permissions-analytics-reports.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-rule-based-anomalies.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-rule-based-anomalies.md
deleted file mode 100644
index f9af667bb858d..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-rule-based-anomalies.md
+++ /dev/null
@@ -1,123 +0,0 @@
----
-title: Create and view rule-based anomalies and anomaly triggers in CloudKnox Permissions Management
-description: How to create and view rule-based anomalies and anomaly triggers in CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# Create and view rule-based anomaly alerts and anomaly triggers
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-Rule-based anomalies identify recent activity in CloudKnox Permissions Management (CloudKnox) that is determined to be unusual based on explicit rules defined in the activity trigger. The goal of rule-based anomaly is high precision detection.
-
-## View rule-based anomaly alerts
-
-1. In the CloudKnox home page, select **Activity triggers** (the bell icon).
-1. Select **Rule-Based Anomaly**, and then select the **Alerts** subtab.
-
- The **Alerts** subtab displays the following information:
-
- - **Alert Name**: Lists the name of the alert.
-
- - To view the specific identity, resource, and task names that occurred during the alert collection period, select the **Alert Name**.
-
- - **Anomaly Alert Rule**: Displays the name of the rule select when creating the alert.
- - **# of Occurrences**: How many times the alert trigger has occurred.
- - **Task**: How many tasks performed are triggered by the alert.
- - **Resources**: How many resources accessed are triggered by the alert.
- - **Identity**: How many identities performing unusual behavior are triggered by the alert.
- - **Authorization System**: Displays which authorization systems the alert applies to, Amazon Web Services (**AWS**), Microsoft **Azure**, or Google Cloud Platform (**GCP**).
- - **Date/Time**: Lists the date and time of the alert.
- - **Date/Time (UTC)**: Lists the date and time of the alert in Coordinated Universal Time (UTC).
-
-
-1. To filter alerts:
-
- - From the **Alert Name** dropdown, select **All** or the appropriate alert name.
- - From the **Date** dropdown menu, select **Last 24 Hours**, **Last 2 Days**, **Last Week**, or **Custom Range**, and select **Apply**.
-
- - If you select **Custom Range**, also enter **From** and **To** duration settings.
-1. To view details that match the alert criteria, select the ellipses (**...**).
-
- - **View Trigger**: Displays the current trigger settings and applicable authorization system details
- - **Details**: Displays details about **Authorization System Type**, **Authorization Systems**, **Resources**, **Tasks**, **Identities**, and **Activity**
- - **Activity**: Displays details about the **Identity Name**, **Resource Name**, **Task Name**, **Date/Time**, **Inactive For**, and **IP Address**. Selecting the "eye" icon displays the **Raw Events Summary**
-
-## Create a rule-based anomaly trigger
-
-1. In the CloudKnox home page, select **Activity triggers** (the bell icon).
-1. Select **Rule-Based Anomaly**, and then select the **Alerts** subtab.
-1. Select **Create Anomaly Trigger**.
-
-1. In the **Alert Name** box, enter a name for the alert.
-1. Select the **Authorization System**, **AWS**, **Azure**, or **GCP**.
-1. Select one of the following conditions:
- - **Any Resource Accessed for the First Time**: The identity accesses a resource for the first time during the specified time interval.
- - **Identity Performs a Particular Task for the First Time**: The identity does a specific task for the first time during the specified time interval.
- - **Identity Performs a Task for the First Time**: The identity performs any task for the first time during the specified time interval
-1. Select **Next**.
-1. On the **Authorization Systems** tab, select the available authorization systems and folders, or select **All**.
-
- This screen defaults to **List** view, but you can change it to **Folders** view. You can select the applicable folder instead of individually selecting by authorization system.
-
- - The **Status** column displays if the authorization system is online or offline.
- - The **Controller** column displays if the controller is enabled or disabled.
-
-1. On the **Configuration** tab, to update the **Time Interval**, select **90 Days**, **60 Days**, or **30 Days** from the **Time range** dropdown.
-1. Select **Save**.
-
-## View a rule-based anomaly trigger
-
-1. In the CloudKnox home page, select **Activity triggers** (the bell icon).
-1. Select **Rule-Based Anomaly**, and then select the **Alert Triggers** subtab.
-
- The **Alert Triggers** subtab displays the following information:
-
- - **Alerts**: Displays the name of the alert.
- - **Anomaly Alert Rule**: Displays the name of the selected rule when creating the alert.
- - **# of Users Subscribed**: Displays the number of users subscribed to the alert.
- - **Created By**: Displays the email address of the user who created the alert.
- - **Last Modified By**: Displays the email address of the user who last modified the alert.
- - **Last Modified On**: Displays the date and time the trigger was last modified.
- - **Subscription**: Subscribes you to receive alert emails. Switches between **On** and **Off**.
-
-1. To view other options available to you, select the ellipses (**...**), and then select from the available options:
-
- If the **Subscription** is **On**, the following options are available:
-
- - **Edit**: Enables you to modify alert parameters.
-
- Only the user who created the alert can edit the trigger screen, rename an alert, deactivate an alert, and delete an alert. Changes made by other users aren't saved.
-
- - **Duplicate**: Create a duplicate copy of the selected alert trigger.
- - **Rename**: Enter the new name of the query, and then select **Save.**
- - **Deactivate**: The alert will still be listed, but will no longer send emails to subscribed users.
- - **Activate**: Activate the alert trigger and start sending emails to subscribed users.
- - **Notification Settings**: View the **Email** of users who are subscribed to the alert trigger.
- - **Delete**: Delete the alert.
-
- If the **Subscription** is **Off**, the following options are available:
- - **View**: View details of the alert trigger.
- - **Notification Settings**: View the **Email** of users who are subscribed to the alert trigger.
- - **Duplicate**: Create a duplicate copy of the selected alert trigger.
-
-1. To filter by **Activated** or **Deactivated**, in the **Status** section, select **All**, **Activated**, or **Deactivated**, and then select **Apply**.
-
-
-
-## Next steps
-
-- For an overview on activity triggers, see [View information about activity triggers](cloudknox-ui-triggers.md).
-- For information on activity alerts and alert triggers, see [Create and view activity alerts and alert triggers](cloudknox-howto-create-alert-trigger.md).
-- For information on finding outliers in identity's behavior, see [Create and view statistical anomalies and anomaly triggers](cloudknox-product-statistical-anomalies.md).
-- For information on permission analytics triggers, see [Create and view permission analytics triggers](cloudknox-product-permission-analytics.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-statistical-anomalies.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-statistical-anomalies.md
deleted file mode 100644
index ebddfd89f42dd..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-product-statistical-anomalies.md
+++ /dev/null
@@ -1,125 +0,0 @@
----
-title: Create and view statistical anomalies and anomaly triggers in CloudKnox Permissions Management
-description: How to create and view statistical anomalies and anomaly triggers in the Statistical Anomaly tab in CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# Create and view statistical anomalies and anomaly triggers
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-Statistical anomalies can detect outliers in an identity's behavior if recent activity is determined to be unusual based on models defined in an activity trigger. The goal of this anomaly trigger is a high recall rate.
-
-## View statistical anomalies in an identity's behavior
-
-1. In the CloudKnox home page, select **Activity triggers** (the bell icon).
-1. Select **Statistical Anomaly**, and then select the **Alerts** subtab.
-
- The **Alerts** subtab displays the following information:
-
- - **Alert Name**: Lists the name of the alert.
- - **Anomaly Alert Rule**: Displays the name of the rule select when creating the alert.
- - **# of Occurrences**: Displays how many times the alert trigger has occurred.
- - **Authorization System**: Displays which authorization systems the alert applies to.
- - **Date/Time**: Lists the day of the outlier occurring.
- - **Date/Time (UTC)**: Lists the day of the outlier occurring in Coordinated Universal Time (UTC).
-
-
-1. To filter the alerts based on name, select the appropriate alert name or choose **All** from the **Alert Name** dropdown menu, and select **Apply**.
-1. To filter the alerts based on alert time, select **Last 24 Hours**, **Last 2 Days**, **Last Week**, or **Custom Range** from the **Date** dropdown menu, and select **Apply**.
-1. If you select the ellipses (**...**) and select:
- - **Details**, this brings you to an Alert Summary view with **Authorization System**, **Statistical Model** and **Observance Period** displayed along with a table with a row per identity triggering this alert. From here you can click:
- - **Details**: Displays graph(s) highlighting the anomaly with context, and up to the top 3 actions performed on the day of the anomaly
- - **View Trigger**: Displays the current trigger settings and applicable authorization system details
- - **View Trigger**: Displays the current trigger settings and applicable authorization system details
-
-## Create a statistical anomaly trigger
-
-1. In the CloudKnox home page, select **Activity triggers** (the bell icon).
-1. Select **Statistical Anomaly**, select the **Alerts** subtab, and then select **Create Alert Trigger**.
-1. Enter a name for the alert in the **Alert Name** box.
-1. Select the **Authorization System**, Amazon Web Services (**AWS**), Microsoft **Azure**, or Google Cloud Platform (**GCP**).
-1. Select one of the following conditions:
-
- - **Identity Performed High Number of Tasks**: The identity performs higher than their usual volume of tasks. For example, an identity typically performs 25 tasks per day, and now it is performing 100 tasks per day.
- - **Identity Performed Low Number of Tasks**: The identity performs lower than their usual volume of tasks. For example, an identity typically performs 100 tasks per day, and now it is performing 25 tasks per day.
- - **Identity Performed Tasks with Unusual Results**: The identity performing an action gets a different result than usual, such as most tasks end in a successful result and are now ending in a failed result or vice versa.
- - **Identity Performed Tasks with Unusual Timing**: The identity does tasks at unusual times as established by their baseline in the observance period. Times are grouped by the following UTC 4 hour windows.
- - 12AM-4AM UTC
- - 4AM-8AM UTC
- - 8AM-12PM UTC
- - 12PM-4PM UTC
- - 4PM-8PM UTC
- - 8PM-12AM UTC
- - **Identity Performed Tasks with Unusual Types**: The identity performs unusual types of tasks as established by their baseline in the observance period. For example, an identity performs read, write, or delete tasks they wouldn't ordinarily perform.
- - **Identity Performed Tasks with Multiple Unusual Patterns**: The identity has several unusual patterns in the tasks performed by the identity as established by their baseline in the observance period.
-1. Select **Next**.
-
-1. On the **Authorization Systems** tab, select the appropriate systems, or, to select all systems, select **All**.
-
- The screen defaults to the **List** view but you can switch to **Folder** view using the menu, and then select the applicable folder instead of individually by system.
-
- - The **Status** column displays if the authorization system is online or offline.
-
- - The **Controller** column displays if the controller is enabled or disabled.
-
-
-1. On the **Configuration** tab, to update the **Time Interval**, from the **Time Range** dropdown, select **90 Days**, **60 Days**, or **30 Days**, and then select **Save**.
-
-## View statistical anomaly triggers
-
-1. In the CloudKnox home page, select **Activity triggers** (the bell icon).
-1. Select **Statistical Anomaly**, and then select the **Alert Triggers** subtab.
-
- The **Alert Triggers** subtab displays the following information:
-
- - **Alert**: Displays the name of the alert.
- - **Anomaly Alert Rule**: Displays the name of the rule select when creating the alert.
- - **# of users subscribed**: Displays the number of users subscribed to the alert.
- - **Created By**: Displays the email address of the user who created the alert.
- - **Last Modified By**: Displays the email address of the user who last modified the alert.
- - **Last Modified On**: Displays the date and time the trigger was last modified.
- - **Subscription**: Subscribes you to receive alert emails. Toggle the button to **On** or **Off**.
-
-1. To filter by **Activated** or **Deactivated**, in the **Status** section, select **All**, **Activated**, or **Deactivated**, and then select **Apply**.
-
-1. To view other options available to you, select the ellipses (**...**), and then select from the available options:
-
- If the **Subscription** is **On**, the following options are available:
- - **Edit**: Enables you to modify alert parameters
-
- > [!NOTE]
- > Only the user who created the alert can perform the following actions: edit the trigger screen, rename an alert, deactivate an alert, and delete an alert. Changes made by other users aren't saved.
- - **Duplicate**: Create a duplicate copy of the selected alert trigger.
- - **Rename**: Enter the new name of the query, and then select **Save.**
- - **Deactivate**: The alert will still be listed, but will no longer send emails to subscribed users.
- - **Activate**: Activate the alert trigger and start sending emails to subscribed users.
- - **Notification Settings**: View the **Email** of users who are subscribed to the alert trigger.
- - **Delete**: Delete the alert.
-
- If the **Subscription** is **Off**, the following options are available:
- - **View**: View details of the alert trigger.
- - **Notification settings**: View the **Email** of users who are subscribed to the alert trigger.
- - **Duplicate**: Create a duplicate copy of the selected alert trigger.
-
-
-1. Select **Apply**.
-
-
-
-## Next steps
-
-- For an overview on activity triggers, see [View information about activity triggers](cloudknox-ui-triggers.md).
-- For information on activity alerts and alert triggers, see [Create and view activity alerts and alert triggers](cloudknox-howto-create-alert-trigger.md).
-- For information on rule-based anomalies and anomaly triggers, see [Create and view rule-based anomalies and anomaly triggers](cloudknox-product-rule-based-anomalies.md).
-- For information on permission analytics triggers, see [Create and view permission analytics triggers](cloudknox-product-permission-analytics.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-report-create-custom-report.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-report-create-custom-report.md
deleted file mode 100644
index 2f7d8b0c51ff4..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-report-create-custom-report.md
+++ /dev/null
@@ -1,128 +0,0 @@
----
-title: Create, view, and share a custom report a custom report in CloudKnox Permissions Management
-description: How to create, view, and share a custom report in the CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# Create, view, and share a custom report
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-This article describes how to create, view, and share a custom report in CloudKnox Permissions Management (CloudKnox).
-
-## Create a custom report
-
-1. In the CloudKnox home page, select the **Reports** tab, and then select the **Custom Reports** subtab.
-1. Select **New Custom Report**.
-1. In the **Report Name** box, enter a name for your report.
-1. From the **Report Based on** list:
- 1. To view which authorization systems the report applies to, hover over each report name.
- 1. To view a description of a report, select the report.
-1. Select a report you want to use as the base for your custom report, and then select **Next**.
-1. In the **MyReport** box, select the **Authorization System** you want: Amazon Web Services (**AWS**), Microsoft Azure (**Azure**), or Google Cloud Platform (**GCP**).
-
-1. To add specific accounts, select the **List** subtab, and then select **All** or the account names.
-1. To add specific folders, select the **Folders** subtab, and then select **All** or the folder names.
-
-1. Select the **Report Format** subtab, and then select the format for your report: comma-separated values (**CSV**) file, portable document format (**PDF**), or Microsoft Excel Open XML Spreadsheet (**XLSX**) file.
-1. Select the **Schedule** tab, and then select the frequency for your report, from **None** up to **Monthly**.
-
- - For **Hourly** and **Daily** options, set the start date by choosing from the **Calendar** dropdown, and can input a specific time of the day they want to receive the report.
-
- In addition to date and time, the **Weekly** and **Biweekly** provide options for you to select on which day(s)of the week the report should repeat.
-
-1. Select **Save**.
-
- The following message displays across the top of the screen in green if the download is successful: **Report has been created**.
-The report name appears in the **Reports** table.
-
-## View a custom report
-
-1. In the CloudKnox home page, select the **Reports** tab, and then select the **Custom Reports** subtab.
-
- The **Custom Reports** tab displays the following information in the **Reports** table:
-
- - **Report Name**: The name of the report.
- - **Category**: The type of report: **Permission**.
- - **Authorization System**: The authorization system in which you can view the report: AWS, Azure, and GCP.
- - **Format**: The format of the report, **CSV**, **PDF**, or **XLSX** format.
-
-1. To view a report, from the **Report Name** column, select the report you want.
-1. To download a report, select the down arrow to the right of the report name, or from the ellipses **(...)** menu, select **Download**.
-1. To refresh the list of reports, select **Reload**.
-
-## Share a custom report
-
-1. In the CloudKnox home page, select the **Reports** tab, and then select the **Custom Reports** subtab.
-1. In the **Reports** table, select a report and then select the ellipses (**...**) icon.
-1. In the **Report Settings** box, select **Share with**.
-1. In the **Search Email to add** box, enter the name of other CloudKnox user(s).
-
- You can only share reports with other CloudKnox users.
-1. Select **Save**.
-
-## Search for a custom report
-
-1. In the CloudKnox home page, select the **Reports** tab, and then select the **Custom Reports** subtab.
-1. On the **Custom Reports** tab, select **Search**.
-1. In the **Search** box, enter the name of the report you want.
-
- The **Custom Reports** tab displays a list of reports that match your search criteria.
-1. Select the report you want.
-1. To download a report, select the down arrow to the right of the report name, or from the ellipses **(...)** menu, select **Download**.
-1. To refresh the list of reports, select **Reload**.
-
-
-## Modify a saved or scheduled custom report
-
-1. In the CloudKnox home page, select the **Reports** tab, and then select the **Custom Reports** subtab.
-1. Hover over the report name on the **Custom Reports** tab.
-
- - To rename the report, select **Edit** (the pencil icon), and enter a new name.
- - To change the settings for your report, select **Settings** (the gear icon). Make your changes, and then select **Save**.
-
- - To download a copy of the report, select the **Down arrow** icon.
-
-1. To perform other actions to the report, select the ellipses (**...**) icon:
-
- - **Download**: Downloads a copy of the report.
-
- - **Report Settings**: Displays the settings for the report, including scheduling, sharing the report, and so on.
-
- - **Duplicate**: Creates a duplicate of the report called **"Copy of XXX"**. Any reports not created by the current user are listed as **Duplicate**.
-
- When you select **Duplicate**, a box appears asking if you're sure you want to create a duplicate. Select **Confirm**.
-
- When the report is successfully duplicated, the following message displays: **Report generated successfully**.
-
- - **API Settings**: Download the report using your Application Programming Interface (API) settings.
-
- When this option is selected, the **API Settings** window opens and displays the **Report ID** and **Secret Key**. Select **Generate New Key**.
-
- - **Delete**: Select this option to delete the report.
-
- After selecting **Delete**, a pop-up box appears asking if the user is sure they want to delete the report. Select **Confirm**.
-
- **Report is deleted successfully** appears across the top of the screen in green if successfully deleted.
-
- - **Unsubscribe**: Unsubscribe the user from receiving scheduled reports and notifications.
-
- This option is only available after a report has been scheduled.
-
-
-## Next steps
-
-- For information on how to view system reports in the **Reports** dashboard, see [View system reports in the Reports dashboard](cloudknox-product-reports.md).
-- For a detailed overview of available system reports, see [View a list and description of system reports](cloudknox-all-reports.md).
-- For information about how to generate and view a system report, see [Generate and view a system report](cloudknox-report-view-system-report.md).
-- For information about how to create and view the Permissions analytics report, see [Generate and download the Permissions analytics report](cloudknox-product-permissions-analytics-reports.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-report-view-system-report.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-report-view-system-report.md
deleted file mode 100644
index 35563a9b5634b..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-report-view-system-report.md
+++ /dev/null
@@ -1,60 +0,0 @@
----
-title: Generate and view a system report in CloudKnox Permissions Management
-description: How to generate and view a system report in the CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# Generate and view a system report
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-This article describes how to generate and view a system report in CloudKnox Permissions Management (CloudKnox).
-
-## Generate a system report
-
-1. In the CloudKnox home page, select the **Reports** tab, and then select the **Systems Reports** subtab.
- The **Systems Reports** subtab displays the following options in the **Reports** table:
-
- - **Report Name**: The name of the report.
- - **Category**: The type of report: **Permission**.
- - **Authorization System**: The authorization system activity in the report: Amazon Web Services (AWS), Microsoft Azure (Azure), and Google Cloud Platform (GCP).
- - **Format**: The format in which the report is available: comma-separated values (**CSV**) format, portable document format (**PDF**), or Microsoft Excel Open XML Spreadsheet (**XLSX**) format.
-
-1. In the **Report Name** column, find the report you want, and then select the down arrow to the right of the report name to download the report.
-
- Or, from the ellipses **(...)** menu, select **Download**.
-
- The following message displays: **Successfully Started To Generate On Demand Report.**
-
- > [!NOTE]
- > If you select one authorization system, the report includes a summary. If you select more than one authorization system, the report does not include a summary.
-
-1. To refresh the list of reports, select **Reload**.
-
-## Search for a system report
-
-1. On the **Systems Reports** subtab, select **Search**.
-1. In the **Search** box, enter the name of the report you want.
-
- The **Systems Reports** subtab displays a list of reports that match your search criteria.
-1. Select a report from the **Report Name** column.
-1. To download a report, select the down arrow to the right of the report name, or from the ellipses **(...)** menu, select **Download**.
-1. To refresh the list of reports, select **Reload**.
-
-
-## Next steps
-
-- For information on how to view system reports in the **Reports** dashboard, see [View system reports in the Reports dashboard](cloudknox-product-reports.md).
-- For a detailed overview of available system reports, see [View a list and description of system reports](cloudknox-all-reports.md).
-- For information about how to create, view, and share a system report, see [Create, view, and share a custom report](cloudknox-report-view-system-report.md).
-- For information about how to create and view the Permissions analytics report, see [Generate and download the Permissions analytics report](cloudknox-product-permissions-analytics-reports.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-training-videos.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-training-videos.md
deleted file mode 100644
index 5e92b74f6f400..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-training-videos.md
+++ /dev/null
@@ -1,41 +0,0 @@
----
-title: CloudKnox Permissions Management training videos
-description: CloudKnox Permissions Management training videos.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 04/20/2022
-ms.author: kenwith
----
-
-# CloudKnox Permissions Management training videos
-
-To view step-by-step training videos on how to use CloudKnox Permissions Management (CloudKnox) features, select a link below.
-
-## Onboard CloudKnox in your organization
-
-
-### Enable CloudKnox in your Azure Active Directory (Azure AD) tenant
-
-To view a video on how to enable CloudKnox in your Azure AD tenant, select [Enable CloudKnox in your Azure AD tenant](https://www.youtube.com/watch?v=-fkfeZyevoo).
-
-### Configure and onboard Amazon Web Services (AWS) accounts
-
-To view a video on how to configure and onboard Amazon Web Services (AWS) accounts in CloudKnox, select [Configure and onboard AWS accounts](https://www.youtube.com/watch?v=R6K21wiWYmE).
-
-### Configure and onboard Google Cloud Platform (GCP) accounts
-
-To view a video on how to configure and onboard Google Cloud Platform (GCP) accounts in CloudKnox, select [Configure and onboard GCP accounts](https://www.youtube.com/watch?app=desktop&v=W3epcOaec28).
-
-
-
-
-## Next steps
-
-- For an overview of CloudKnox, see [What's CloudKnox Permissions Management?](cloudknox-overview.md)
-- For a list of frequently asked questions (FAQs) about CloudKnox, see [FAQs](cloudknox-faqs.md).
-- For information on how to start viewing information about your authorization system in CloudKnox, see [View key statistics and data about your authorization system](cloudknox-ui-dashboard.md).
\ No newline at end of file
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-troubleshoot.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-troubleshoot.md
deleted file mode 100644
index 8d685638b9e0c..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-troubleshoot.md
+++ /dev/null
@@ -1,42 +0,0 @@
----
-title: Troubleshoot issues with CloudKnox Permissions Management
-description: Troubleshoot issues with CloudKnox Permissions Management
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: troubleshooting
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# Troubleshoot issues with CloudKnox Permissions Management
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-This section answers troubleshoot issues with CloudKnox Permissions Management (CloudKnox).
-
-## One time passcode (OTP) email
-
-### The user didn't receive the OTP email.
-
-- Check your junk or Spam mail folder for the email.
-
-## Reports
-
-### The individual files are generated according to the authorization system (subscription/account/project).
-
-- Select the **Collate** option in the **Custom Report** screen in the CloudKnox **Reports** tab.
-
-## Data collection in AWS
-
-### Data collection > AWS Authorization system data collection status is offline. Upload and transform is also offline.
-
-- Check the CloudKnox-related role that exists in these accounts.
-- Validate the trust relationship with the OpenID Connect (OIDC) role.
-
-
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-ui-audit-trail.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-ui-audit-trail.md
deleted file mode 100644
index 6f854bb414c74..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-ui-audit-trail.md
+++ /dev/null
@@ -1,75 +0,0 @@
----
-title: Use queries to see how users access information in an authorization system in CloudKnox Permissions Management
-description: How to use queries to see how users access information in an authorization system in CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: overview
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# Use queries to see how users access information
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-The **Audit** dashboard in CloudKnox Permissions Management (CloudKnox) provides an overview of queries a CloudKnox user has created to review how users access their authorization systems and accounts.
-
-This article provides an overview of the components of the **Audit** dashboard.
-
-## View information in the Audit dashboard
-
-
-1. In CloudKnox, select the **Audit** tab.
-
- CloudKnox displays the query options available to you.
-
-1. The following options display at the top of the **Audit** dashboard:
-
- - A tab for each existing query. Select the tab to see details about the query.
- - **New Query**: Select the tab to create a new query.
- - **New tab (+)**: Select the tab to add a **New Query** tab.
- - **Saved Queries**: Select to view a list of saved queries.
-
-1. To return to the main page, select **Back to Audit Trail**.
-
-
-## Use a query to view information
-
-1. In CloudKnox, select the **Audit** tab.
-1. The **New query** tab displays the following options:
-
- - **Authorization Systems Type**: A list of your authorization systems: Amazon Web Services (**AWS**), Microsoft Azure (**Azure**), Google Cloud Platform (**GCP**), or Platform (**Platform**).
-
- - **Authorization System**: A **List** of accounts and **Folders** in the authorization system.
-
- - To display a **List** of accounts and **Folders** in the authorization system, select the down arrow, and then select **Apply**.
-
-1. To add an **Audit Trail Condition**, select **Conditions** (the eye icon), select the conditions you want to add, and then select **Close**.
-
-1. To edit existing parameters, select **Edit** (the pencil icon).
-
-1. To add the parameter that you created to the query, select **Add**.
-
-1. To search for activity data that you can add to the query, select **Search** .
-
-1. To save your query, select **Save**.
-
-1. To save your query under a different name, select **Save As** (the ellipses **(...)** icon).
-
-1. To discard your work and start creating a query again, select **Reset Query**.
-
-1. To delete a query, select the **X** to the right of the query tab.
-
-
-
-## Next steps
-
-- For information on how to filter and view user activity, see [Filter and query user activity](cloudknox-product-audit-trail.md).
-- For information on how to create a query,see [Create a custom query](cloudknox-howto-create-custom-queries.md).
-- For information on how to generate an on-demand report from a query, see [Generate an on-demand report from a query](cloudknox-howto-audit-trail-results.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-ui-autopilot.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-ui-autopilot.md
deleted file mode 100644
index 586576497eb4b..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-ui-autopilot.md
+++ /dev/null
@@ -1,71 +0,0 @@
----
-title: View rules in the Autopilot dashboard in CloudKnox Permissions Management
-description: How to view rules in the Autopilot dashboard in CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: overview
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# View rules in the Autopilot dashboard
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-The **Autopilot** dashboard in CloudKnox Permissions Management (CloudKnox) provides a table of information about **Autopilot rules** for administrators.
-
-
-> [!NOTE]
-> Only users with the **Administrator** role can view and make changes on this tab.
-
-## View a list of rules
-
-1. In the CloudKnox home page, select the **Autopilot** tab.
-1. In the **Autopilot** dashboard, from the **Authorization system types** dropdown, select the authorization system types you want: Amazon Web Services (**AWS**), Microsoft **Azure**, or Google Cloud Platform (**GCP**).
-1. From the **Authorization System** dropdown, in the **List** and **Folders** box, select the account and folder names that you want.
-1. Select **Apply**.
-
- The following information displays in the **Autopilot Rules** table:
-
- - **Rule Name**: The name of the rule.
- - **State**: The status of the rule: idle (not being use) or active (being used).
- - **Rule Type**: The type of rule being applied.
- - **Mode**: The status of the mode: on-demand or not.
- - **Last Generated**: The date and time the rule was last generated.
- - **Created By**: The email address of the user who created the rule.
- - **Last Modified**: The date and time the rule was last modified.
- - **Subscription**: Provides an **On** or **Off** subscription that allows you to receive email notifications when recommendations have been generated, applied, or unapplied.
-
-## View other available options for rules
-
-- Select the ellipses **(...)**
-
- The following options are available:
-
- - **View Rule**: Select to view details of the rule.
- - **Delete Rule**: Select to delete the rule. Only the user who created the selected rule can delete the rule.
- - **Generate Recommendations**: Creates recommendations for each user and the authorization system. Only the user who created the selected rule can create recommendations.
- - **View Recommendations**: Displays the recommendations for each user and authorization system.
- - **Notification Settings**: Displays the users subscribed to this rule. Only the user who created the selected rule can add other users to be notified.
-
-You can also select:
-
-- **Reload**: Select to refresh the displayed list of roles/policies.
-- **Search**: Select to search for a specific role/policy.
-- **Columns**: From the dropdown list, select the columns you want to display.
- - Select **Reset to default** to return to the system defaults.
-- **New Rule**: Select to create a new rule. For more information, see [Create a rule](cloudknox-howto-create-rule.md).
-
-
-
-## Next steps
-
-- For information about creating rules, see [Create a rule](cloudknox-howto-create-rule.md).
-- For information about generating, viewing, and applying rule recommendations for rules, see [Generate, view, and apply rule recommendations for rules](cloudknox-howto-recommendations-rule.md).
-- For information about notification settings for rules, see [View notification settings for a rule](cloudknox-howto-notifications-rule.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-ui-dashboard.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-ui-dashboard.md
deleted file mode 100644
index f813214c6f402..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-ui-dashboard.md
+++ /dev/null
@@ -1,140 +0,0 @@
----
-title: View key statistics and data about your authorization system in CloudKnox Permissions Management
-description: How to view statistics and data about your authorization system in the CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: overview
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-
-# View key statistics and data about your authorization system
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-CloudKnox Permissions Management (CloudKnox) provides a summary of key statistics and data about your authorization system regularly. This information is available for Amazon Web Services (AWS), Microsoft Azure, and Google Cloud Platform (GCP).
-
-## View metrics related to avoidable risk
-
-The data provided by CloudKnox includes metrics related to avoidable risk. These metrics allow the CloudKnox administrator to identify areas where they can reduce risks related to the principle of least permissions.
-
-You can view the following information in CloudKnox:
-
-- The **Permission Creep Index (PCI)** heat map on the CloudKnox **Dashboard** identifies:
- - The number of users who have been granted high-risk permissions but aren't using them.
- - The number of users who contribute to the permission creep index (PCI) and where they are on the scale.
-
-- The [**Analytics** dashboard](cloudknox-usage-analytics-home.md) provides a snapshot of permission metrics within the last 90 days.
-
-
-## Components of the CloudKnox Dashboard
-
-The CloudKnox **Dashboard** displays the following information:
-
-- **Authorization system types**: A dropdown list of authorization system types you can access: AWS, Azure, and GCP.
-
-- **Authorization System**: Displays a **List** of accounts and **Folders** in the selected authorization system you can access.
-
- - To add or remove accounts and folders, from the **Name** list, select or deselect accounts and folders, and then select **Apply**.
-
-- **Permission Creep Index (PCI)**: The graph displays the **# of identities contributing to PCI**.
-
- The PCI graph may display one or more bubbles. Each bubble displays the number of identities that are considered high risk. *High-risk* refers to the number of users who have permissions that exceed their normal or required usage.
- - To display a list of the number of identities contributing to the **Low PCI**, **Medium PCI**, and **High PCI**, select the **List** icon in the upper right of the graph.
- - To display the PCI graph again, select the **Graph** icon in the upper right of the list box.
-
-- **Highest PCI change**: Displays a list of your accounts and information about the **PCI** and **Change** in the index over the past 7 days.
- - To download the list, select the down arrow in the upper right of the list box.
-
- The following message displays: **We'll email you a link to download the file.**
- - Check your email for the message from the CloudKnox Customer Success Team. The email contains a link to the **PCI history** report in Microsoft Excel format.
- - The email also includes a link to the **Reports** dashboard, where you can configure how and when you want to receive reports automatically.
- - To view all the PCI changes, select **View all**.
-
-- **Identity**: A summary of the **Findings** that includes:
- - The number of **Inactive** identities that haven't been accessed in over 90 days.
- - The number of **Super** identities that access data regularly.
- - The number of identities that can **Access secret information**: A list of roles that can access sensitive or secret information.
- - **Over-provisioned active** identities that have more permissions than they currently access.
- - The number of identities **With permission escalation**: A list of roles that can increase permissions.
-
- To view the list of all identities, select **All findings**.
-
-- **Resources**: A summary of the **Findings** that includes the number of resources that are:
- - **Open security groups**
- - **Microsoft managed keys**
- - **Instances with access to S3 buckets**
- - **Unencrypted S3 buckets**
- - **SSE-S3 Encrypted buckets**
- - **S3 Bucket accessible externally**
-
-
-
-## The PCI heat map
-
-The **Permission Creep Index** heat map shows the incurred risk of users with access to high-risk permissions, and provides information about:
-
-- Users who were given access to high-risk permissions but aren't actively using them. *High-risk permissions* include the ability to modify or delete information in the authorization system.
-
-- The number of resources a user has access to, otherwise known as resource reach.
-
-- The high-risk permissions coupled with the number of resources a user has access to produce the score seen on the chart.
-
- Permissions are classified as *high*, *medium*, and *low*.
-
- - **High** (displayed in red) - The score is between 68 and 100. The user has access to many high-risk permissions they aren't using, and has high resource reach.
- - **Medium** (displayed in yellow) - The score is between 34 and 67. The user has access to some high-risk permissions that they use, or have medium resource reach.
- - **Low** (displayed in green) - The score is between 0 and 33. The user has access to few high-risk permissions. They use all their permissions and have low resource reach.
-
-- The number displayed on the graph shows how many users contribute to a particular score. To view detailed data about a user, hover over the number.
-
- The distribution graph displays all the users who contribute to the permission creep. It displays how many users contribute to a particular score. For example, if the score from the PCI chart is 14, the graph shows how many users have a score of 14.
-
-- The **PCI Trend** graph shows you the historical trend of the PCI score over the last 90 days.
- - To download the **PCI history report**, select **Download**.
-
-### View information on the heat map
-
-1. Select the number on the heat map bubble to display:
-
- - The total number of **Identities** and how many of them are in the high, medium, and low categories.
- - The **PCI trend** over the last several weeks.
-
-1. The **Identity** section below the heat map on the left side of the page shows all the relevant findings about identities, including roles that can access secret information, roles that are inactive, over provisioned active roles, and so on.
-
- - To expand the full list of identities, select **All findings**.
-
-1. The **Resource** section below the heat map on the right side of the page shows all the relevant findings about resources. It includes unencrypted S3 buckets, open security groups, and so on.
-
-
-## The Analytics summary
-
-You can also view a summary of users and activities section on the [Analytics dashboard](cloudknox-usage-analytics-home.md). This dashboard provides a snapshot of the following high-risk tasks or actions users have accessed, and displays the total number of users with the high-risk access, how many users are inactive or have unexecuted tasks, and how many users are active or have executed tasks:
-
-- **Users with access to high-risk tasks**: Displays the total number of users with access to a high risk task (**Total**), how many users have access but haven't used the task (**Inactive**), and how many users are actively using the task (**Active**).
-
-- **Users with access to delete tasks**: A subset of high-risk tasks, which displays the number of users with access to delete tasks (**Total**), how many users have the delete permissions but haven't used the permissions (**Inactive**), and how many users are actively executing the delete capability (**Active**).
-
-- **High-risk tasks accessible by users**: Displays all available high-risk tasks in the authorization system (**Granted**), how many high-risk tasks aren't used (**Unexecuted**), and how many high-risk tasks are used (**Executed**).
-
-- **Delete tasks accessible by users**: Displays all available delete tasks in the authorization system (**Granted**), how many delete tasks aren't used (**Unexecuted**), and how many delete tasks are used (**Executed**).
-
-- **Resources that permit high-risk tasks**: Displays the total number of resources a user has access to (**Total**), how many resources are available but not used (**Inactive**), and how many resources are used (**Active**).
-
-- **Resources that permit delete tasks**: Displays the total number of resources that permit delete tasks (**Total**), how many resources with delete tasks aren't used (**Inactive**), and how many resources with delete tasks are used (**Active**).
-
-
-
-## Next steps
-
-- For information on how to view authorization system and account activity data on the CloudKnox Dashboard, see [View data about the activity in your authorization system](cloudknox-product-dashboard.md).
-- For an overview of the Analytics dashboard, see [An overview of the Analytics dashboard](cloudknox-usage-analytics-home.md).
-
-
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-ui-remediation.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-ui-remediation.md
deleted file mode 100644
index c2a38900d6ff2..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-ui-remediation.md
+++ /dev/null
@@ -1,241 +0,0 @@
----
-title: View existing roles/policies and requests for permission in the Remediation dashboard in CloudKnox Permissions Management
-description: How to view existing roles/policies and requests for permission in the Remediation dashboard in CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: overview
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# View roles/policies and requests for permission in the Remediation dashboard
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-The **Remediation** dashboard in CloudKnox Permissions Management (CloudKnox) provides an overview of roles/policies, permissions, a list of existing requests for permissions, and requests for permissions you have made.
-
-This article provides an overview of the components of the **Remediation** dashboard.
-
-> [!NOTE]
-> To view the **Remediation** dashboard, your must have **Viewer**, **Controller**, or **Administrator** permissions. To make changes on this dashboard, you must have **Controller** or **Administrator** permissions. If you don’t have these permissions, contact your system administrator.
-
-> [!NOTE]
-> Microsoft Azure uses the term *role* for what other cloud providers call *policy*. CloudKnox automatically makes this terminology change when you select the authorization system type. In the user documentation, we use *role/policy* to refer to both.
-
-## Display the Remediation dashboard
-
-1. On the CloudKnox home page, select the **Remediation** tab.
-
- The **Remediation** dashboard includes six subtabs:
-
- - **Roles/Policies**: Use this subtab to perform Create Read Update Delete (CRUD) operations on roles/policies.
- - **Permissions**: Use this subtab to perform Read Update Delete (RUD) on granted permissions.
- - **Role/Policy Template**: Use this subtab to create a template for roles/policies template.
- - **Requests**: Use this subtab to view approved, pending, and processed Permission on Demand (POD) requests.
- - **My Requests**: Use this tab to manage lifecycle of the POD request either created by you or needs your approval.
- - **Settings**: Use this subtab to select **Request Role/Policy Filters**, **Request Settings**, and **Auto-Approve** settings.
-
-1. Use the dropdown to select the **Authorization System Type** and **Authorization System**, and then select **Apply**.
-
-## View and create roles/policies
-
-The **Role/Policies** subtab provides the following settings that you can use to view and create a role/policy.
-
-- **Authorization System Type**: Displays a dropdown with authorization system types you can access, Amazon Web Services (AWS), Microsoft Azure, and Google Cloud Platform (GCP).
-- **Authorization System**: Displays a list of authorization systems accounts you can access.
-- **Policy Type**: A dropdown with available role/policy types. You can select **All**, **Custom**, **System**, or **CloudKnox Only**.
-- **Policy Status**: A dropdown with available role/policy statuses. You can select **All**, **Assigned**, or **Unassigned**.
-- **Policy Usage**: A dropdown with **All** or **Unused** roles/policies.
-- **Apply**: Select this option to save the changes you've made.
-- **Reset Filter**: Select this option to discard the changes you've made.
-
-The **Policy list** displays a list of existing roles/policies and the following information about each role/policy.
-
-- **Policy Name**: The name of the roles/policies available to you.
-- **Policy Type**: **Custom**, **System**, or **CloudKnox Only**
-- **Actions**
- - Select **Clone** to create a duplicate copy of the role/policy.
- - Select **Modify** to change the existing role/policy.
- - Select **Delete** to delete the role/policy.
-
-Other options available to you:
-- **Search**: Select this option to search for a specific role/policy.
-- **Reload**: Select this option to refresh the displayed list of roles/policies.
-- **Export CSV**: Select this option to export the displayed list of roles/policies as a comma-separated values (CSV) file.
-
- When the file is successfully exported, a message appears: **Exported Successfully.**
-
- - Check your email for a message from the CloudKnox Customer Success Team. This email contains a link to:
- - The **Role Policy Details** report in CSV format.
- - The **Reports** dashboard where you can configure how and when you can automatically receive reports.
-- **Create Role/Policy**: Select this option to create a new role/policy. For more information, see [Create a role/policy](cloudknox-howto-create-role-policy.md).
-
-
-## Add filters to permissions
-
-The **Permissions** subtab provides the following settings that you can use to add filters to your permissions.
-
-- **Authorization System Type**: Displays a dropdown with authorization system types you can access, AWS, Azure, and GCP.
-- **Authorization System**: Displays a list of authorization systems accounts you can access.
-- **Search For**: A dropdown from which you can select **Group**, **User**, or **Role**.
-- **User Status**: A dropdown from which you can select **Any**, **Active**, or **Inactive**.
-- **Privilege Creep Index** (PCI): A dropdown from which you can select a PCI rating of **Any**, **High**, **Medium**, or **Low**.
-- **Task Usage**: A dropdown from which you can select **Any**, **Granted**, **Used**, or **Unused**.
-- **Enter a Username**: A dropdown from which you can select a username.
-- **Enter a Group Name**: A dropdown from which you can select a group name.
-- **Apply**: Select this option to save the changes you've made and run the filter.
-- **Reset Filter**: Select this option to discard the changes you've made.
-- **Export CSV**: Select this option to export the displayed list of roles/policies as a comma-separated values (CSV) file.
-
- When the file is successfully exported, a message appears: **Exported Successfully.**
-
- - Check your email for a message from the CloudKnox Customer Success Team. This email contains a link to:
- - The **Role Policy Details** report in CSV format.
- - The **Reports** dashboard where you can configure how and when you can automatically receive reports.
-
-
-## Create templates for roles/policies
-
-Use the **Role/Policy Template** subtab to create a template for roles/policies.
-
-1. Select:
- - **Authorization System Type**: Displays a dropdown with authorization system types you can access, WS, Azure, and GCP.
- - **Create Template**: Select this option to create a template.
-
-1. In the **Details** page, make the required selections:
- - **Authorization System Type**: Select the authorization system types you want, **AWS**, **Azure**, or **GCP**.
- - **Template Name**: Enter a name for your template, and then select **Next**.
-
-1. In the **Statements** page, complete the **Tasks**, **Resources**, **Request Conditions** and **Effect** sections. Then select **Save** to save your role/policy template.
-
-Other options available to you:
-- **Search**: Select this option to search for a specific role/policy.
-- **Reload**: Select this option to refresh the displayed list of roles/policies.
-
-## View requests for permission
-
-Use the **Requests** tab to view a list of **Pending**, **Approved**, and **Processed** requests for permissions your team members have made.
-
-- Select:
- - **Authorization System Type**: Displays a dropdown with authorization system types you can access, AWS, Azure, and GCP.
- - **Authorization System**: Displays a list of authorization systems accounts you can access.
-
-Other options available to you:
-
-- **Reload**: Select this option to refresh the displayed list of roles/policies.
-- **Search**: Select this option to search for a specific role/policy.
-- **Columns**: Select one or more of the following to view more information about the request:
- - **Submitted By**
- - **On Behalf Of**
- - **Authorization System**
- - **Tasks/Scope/Policies**
- - **Request Date**
- - **Schedule**
- - **Submitted**
- - **Reset to Default**: Select this option to discard your settings.
-
-### View pending requests
-
-The **Pending** table displays the following information:
-
-- **Summary**: A summary of the request.
-- **Submitted By**: The name of the user who submitted the request.
-- **On Behalf Of**: The name of the user on whose behalf the request was made.
-- **Authorization System**: The authorization system the user selected.
-- **Task/Scope/Policies**: The type of task/scope/policy selected.
-- **Request Date**: The date when the request was made.
-- **Submitted**: The period since the request was made.
-- The ellipses **(...)** menu - Select the ellipses, and then select **Details**, **Approve**, or **Reject**.
-- Select an option:
- - **Reload**: Select this option to refresh the displayed list of roles/policies.
- - **Search**: Select this option to search for a specific role/policy.
- - **Columns**: From the dropdown, select the columns you want to display.
-
-**To return to the previous view:**
-
-- Select the up arrow.
-
-### View approved requests
-
-The **Approved** table displays information about the requests that have been approved.
-
-### View processed requests
-
-The **Processed** table displays information about the requests that have been processed.
-
-## View requests for permission for your approval
-
-Use the **My Requests** subtab to view a list of **Pending**, **Approved**, and **Processed** requests for permissions your team members have made and you must approve or reject.
-
-- Select:
- - **Authorization System Type**: Displays a dropdown with authorization system types you can access, AWS, Azure, and GCP.
- - **Authorization System**: Displays a list of authorization systems accounts you can access.
-
-Other options available to you:
-
-- **Reload**: Select this option to refresh the displayed list of roles/policies.
-- **Search**: Select this option to search for a specific role/policy.
-- **Columns**: Select one or more of the following to view more information about the request:
- - **On Behalf Of**
- - **Authorization System**
- - **Tasks/Scope/Policies**
- - **Request Date**
- - **Schedule**
- - **Reset to Default**: Select this option to discard your settings.
-- **New Request**: Select this option to create a new request for permissions. For more information, see Create a request for permissions.
-
-### View pending requests
-
-The **Pending** table displays the following information:
-
-- **Summary**: A summary of the request.
-- **Submitted By**: The name of the user who submitted the request.
-- **On Behalf Of**: The name of the user on whose behalf the request was made.
-- **Authorization System**: The authorization system the user selected.
-- **Task/Scope/Policies**: The type of task/scope/policy selected.
-- **Request Date**: The date when the request was made.
-- **Submitted**: The period since the request was made.
-- The ellipses **(...)** menu - Select the ellipses, and then select **Details**, **Approve**, or **Reject**.
-- Select an option:
- - **Reload**: Select this option to refresh the displayed list of roles/policies.
- - **Search**: Select this option to search for a specific role/policy.
- - **Columns**: From the dropdown, select the columns you want to display.
-
-
-### View approved requests
-
-The **Approved** table displays information about the requests that have been approved.
-
-### View processed requests
-
-The **Processed** table displays information about the requests that have been processed.
-
-## Make setting selections for requests and auto-approval
-
-The **Settings** subtab provides the following settings that you can use to make setting selections to **Request Role/Policy Filters**, **Request Settings**, and **Auto-Approve** requests.
-
-- **Authorization System Type**: Displays a dropdown with authorization system types you can access, AWS, Azure, and GCP.
-- **Authorization System**: Displays a list of authorization systems accounts you can access.
-- **Reload**: Select this option to refresh the displayed list of role/policy filters.
-- **Create Filter**: Select this option to create a new filter.
-
-## Next steps
-
-
-- For information on how to view existing roles/policies, requests, and permissions, see [View roles/policies, requests, and permission in the Remediation dashboard](cloudknox-ui-remediation.md).
-- For information on how to create a role/policy, see [Create a role/policy](cloudknox-howto-create-role-policy.md).
-- For information on how to clone a role/policy, see [Clone a role/policy](cloudknox-howto-clone-role-policy.md).
-- For information on how to delete a role/policy, see [Delete a role/policy](cloudknox-howto-delete-role-policy.md).
-- For information on how to modify a role/policy, see Modify a role/policy](cloudknox-howto-modify-role-policy.md).
-- To view information about roles/policies, see [View information about roles/policies](cloudknox-howto-view-role-policy.md).
-- For information on how to attach and detach permissions for AWS identities, see [Attach and detach policies for AWS identities](cloudknox-howto-attach-detach-permissions.md).
-- For information on how to revoke high-risk and unused tasks or assign read-only status for Azure and GCP identities, see [Revoke high-risk and unused tasks or assign read-only status for Azure and GCP identities](cloudknox-howto-revoke-task-readonly-status.md)
-- For information on how to create or approve a request for permissions, see [Create or approve a request for permissions](cloudknox-howto-create-approve-privilege-request.md).
-- For information on how to view information about roles/policies, see [View information about roles/policies](cloudknox-howto-view-role-policy.md)
-
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-ui-tasks.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-ui-tasks.md
deleted file mode 100644
index bd11caa9bb3b6..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-ui-tasks.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: View information about active and completed tasks in CloudKnox Permissions Management
-description: How to view information about active and completed tasks in the Activities pane in CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: overview
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# View information about active and completed tasks
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-This article describes the usage of the **CloudKnox Tasks** pane in CloudKnox Permissions Management (CloudKnox).
-
-## Display active and completed tasks
-
-1. In the CloudKnox home page, select **Tasks** (the timer icon).
-
- The **CloudKnox Tasks** pane appears on the right of the CloudKnox home page. It has two tabs:
- - **Active**: Displays a list of active tasks, a description of each task, and when the task was started.
-
- If there are no active tasks, the following message displays: **There are no active tasks**.
- - **Completed**: Displays a list of completed tasks, a description of each task, when the task was started and ended, and whether the task **Failed** or **Succeeded**.
-
- If there are no completed activities, the following message displays: **There are no recently completed tasks**.
-1. To close the **CloudKnox Tasks** pane, click outside the pane.
-
-## Next steps
-
-- For information on how to create a role/policy in the **Remediation** dashboard, see [Create a role/policy](cloudknox-howto-create-role-policy.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-ui-triggers.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-ui-triggers.md
deleted file mode 100644
index c0faaaaba109d..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-ui-triggers.md
+++ /dev/null
@@ -1,87 +0,0 @@
----
-title: View information about activity triggers in CloudKnox Permissions Management
-description: How to view information about activity triggers in the Activity triggers dashboard in CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: overview
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# View information about activity triggers
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-This article describes how to use the **Activity triggers** dashboard in CloudKnox Permissions Management (CloudKnox) to view information about activity alerts and triggers.
-
-## Display the Activity triggers dashboard
-
-- In the CloudKnox home page, select **Activity triggers** (the bell icon).
-
- The **Activity triggers** dashboard has four tabs:
-
- - **Activity**
- - **Rule-Based Anomaly**
- - **Statistical Anomaly**
- - **Permission Analytics**
-
- Each tab has two subtabs:
-
- - **Alerts**
- - **Alert Triggers**
-
-## View information about alerts
-
-The **Alerts** subtab in the **Activity**, **Rule-Based Anomaly**, **Statistical Anomaly**, and **Permission Analytics** tabs display the following information:
-
-- **Alert Name**: Select **All** alert names or specific ones.
-- **Date**: Select **Last 24 hours**, **Last 2 Days**, **Last Week**, or **Custom Range.**
-
- - If you select **Custom Range**, also enter **From** and **To** duration settings.
-- **Apply**: Select this option to activate your settings.
-- **Reset Filter**: Select this option to discard your settings.
-- **Reload**: Select this option to refresh the displayed information.
-- **Create Activity Trigger**: Select this option to [create a new alert trigger](cloudknox-howto-create-alert-trigger.md).
-- The **Alerts** table displays a list of alerts with the following information:
- - **Alerts**: The name of the alert.
- - **# of users subscribed**: The number of users who have subscribed to the alert.
- - **Created By**: The name of the user who created the alert.
- - **Modified By**: The name of the user who modified the alert.
-
-The **Rule-Based Anomaly** tab and the **Statistical Anomaly** tab both have one more option:
-
-- **Columns**: Select the columns you want to display: **Task**, **Resource**, and **Identity**.
- - To return to the system default settings, select **Reset to default**.
-
-## View information about alert triggers
-
-The **Alert Triggers** subtab in the **Activity**, **Rule-Based Anomaly**, **Statistical Anomaly**, and **Permission Analytics** tab displays the following information:
-
-- **Status**: Select the alert status you want to display: **All**, **Activated**, or **Deactivated**.
-- **Apply**: Select this option to activate your settings.
-- **Reset Filter**: Select this option to discard your settings.
-- **Reload**: Select **Reload** to refresh the displayed information.
-- **Create Activity Trigger**: Select this option to [create a new alert trigger](cloudknox-howto-create-alert-trigger.md).
-- The **Triggers** table displays a list of triggers with the following information:
- - **Alerts**: The name of the alert.
- - **# of users subscribed**: The number of users who have subscribed to the alert.
- - **Created By**: The name of the user who created the alert.
- - **Modified By**: The name of the user who modified the alert.
-
-
-
-
-
-
-## Next steps
-
-- For information on activity alerts and alert triggers, see [Create and view activity alerts and alert triggers](cloudknox-howto-create-alert-trigger.md).
-- For information on rule-based anomalies and anomaly triggers, see [Create and view rule-based anomalies and anomaly triggers](cloudknox-product-rule-based-anomalies.md).
-- For information on finding outliers in identity's behavior, see [Create and view statistical anomalies and anomaly triggers](cloudknox-product-statistical-anomalies.md).
-- For information on permission analytics triggers, see [Create and view permission analytics triggers](cloudknox-product-permission-analytics.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-ui-user-management.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-ui-user-management.md
deleted file mode 100644
index 010ce9de7b7e1..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-ui-user-management.md
+++ /dev/null
@@ -1,89 +0,0 @@
----
-title: Manage users and groups with the User management dashboard in CloudKnox Permissions Management
-description: How to manage users and groups in the User management dashboard in CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: overview
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# Manage users and groups with the User management dashboard
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-This article describes how to use the CloudKnox Permissions Management (CloudKnox) **User management** dashboard to view and manage users and groups.
-
-**To display the User management dashboard**:
-
-- In the upper right of the CloudKnox home page, select **User** (your initials) in the upper right of the screen, and then select **User management.**
-
- The **User Management** dashboard has two tabs:
-
- - **Users**: Displays information about registered users.
- - **Groups**: Displays information about groups.
-
-## Manage users
-
-Use the **Users** tab to display the following information about users:
-
-- **Name** and **Email Address**: The user's name and email address.
-- **Joined On**: The date the user registered on the system.
-- **Recent Activity**: The date the user last used their permissions to access the system.
-- The ellipses **(...)** menu: Select the ellipses, and then select **View Permissions** to open the **View User Permission** box.
-
- - To view details about the user's permissions, select one of the following options:
- - **Admin for all Authorization System Types** provides **View**, **Control**, and **Approve** permissions for all authorization system types.
- - **Admin for selected Authorization System Types** provides **View**, **Control**, and **Approve** permissions for selected authorization system types.
- - **Custom** provides **View**, **Control**, and **Approve** permissions for the authorization system types you select.
-
-You can also select the following options:
-
-- **Reload**: Select this option to refresh the information displayed in the **User** table.
-- **Search**: Enter a name or email address to search for a specific user.
-
-## Manage groups
-
-Use the **Groups** tab to display the following information about groups:
-
-- **Name**: Displays the registered user's name and email address.
-- **Permissions**:
- - The **Authorization Systems** and the type of permissions the user has been granted: **Admin for all Authorization System Types**, **Admin for selected Authorization System Types**, or **Custom**.
- - Information about the **Viewer**, **Controller**, **Approver**, and **Requestor**.
-- **Modified By**: The email address of the user who modified the group.
-- **Modified On**: The date the user last modified the group.
-
-- The ellipses **(...)** menu: Select the ellipses to:
-
- - **View Permissions**: Select this option to view details about the group's permissions, and then select one of the following options:
- - **Admin for all Authorization System Types** provides **View**, **Control**, and **Approve** permissions for all authorization system types.
- - **Admin for selected Authorization System Types** provides **View**, **Control**, and **Approve** permissions for selected authorization system types.
- - **Custom** provides **View**, **Control**, and **Approve** permissions for specific authorization system types that you select.
-
- - **Edit Permissions**: Select this option to modify the group's permissions.
- - **Delete**: Select this option to delete the group's permissions.
-
- The **Delete Permission** box asks you to confirm that you want to delete the group.
- - Select **Delete** if you want to delete the group, **Cancel** to discard your changes.
-
-
-You can also select the following options:
-
-- **Reload**: Select this option to refresh the information displayed in the **User** table.
-- **Search**: Enter a name or email address to search for a specific user.
-- **Filters**: Select the authorization systems and accounts you want to display.
-- **Create Permission**: Create a group and set up its permissions. For more information, see [Create group-based permissions](cloudknox-howto-create-group-based-permissions.md)
-
-
-
-## Next steps
-
-- For information about how to view information about active and completed tasks, see [View information about active and completed tasks](cloudknox-ui-tasks.md).
-- For information about how to view personal and organization information, see [View personal and organization information](cloudknox-product-account-settings.md).
-- For information about how to select group-based permissions settings, see [Select group-based permissions settings](cloudknox-howto-create-group-based-permissions.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-usage-analytics-access-keys.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-usage-analytics-access-keys.md
deleted file mode 100644
index 2d8b54bda2202..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-usage-analytics-access-keys.md
+++ /dev/null
@@ -1,139 +0,0 @@
----
-title: View analytic information about access keys in CloudKnox Permissions Management
-description: How to view analytic information about access keys in CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# View analytic information about access keys
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-The **Analytics** dashboard in CloudKnox Permissions Management (CloudKnox) provides details about identities, resources, and tasks that you can use make informed decisions about granting permissions, and reducing risk on unused permissions.
-
-- **Users**: Tracks assigned permissions and usage of various identities.
-- **Groups**: Tracks assigned permissions and usage of the group and the group members.
-- **Active Resources**: Tracks active resources (used in the last 90 days).
-- **Active Tasks**: Tracks active tasks (performed in the last 90 days).
-- **Access Keys**: Tracks the permission usage of access keys for a given user.
-- **Serverless Functions**: Tracks assigned permissions and usage of the serverless functions.
-
-This article describes how to view usage analytics about access keys.
-
-## Create a query to view access keys
-
-When you select **Access keys**, the **Analytics** dashboard provides a high-level overview of tasks used by various identities.
-
-1. On the main **Analytics** dashboard, select **Access Keys** from the drop-down list at the top of the screen.
-
- The following components make up the **Access Keys** dashboard:
-
- - **Authorization System Type**: Select the authorization you want to use: Amazon Web Services (AWS), Microsoft Azure, or Google Cloud Platform (GCP).
- - **Authorization System**: Select from a **List** of accounts and **Folders***.
- - **Key Status**: Select **All**, **Active**, or **Inactive**.
- - **Key Activity State**: Select **All**, how long the access key has been used, or **Not Used**.
- - **Key Age**: Select **All** or how long ago the access key was created.
- - **Task Type**: Select **All** tasks, **High Risk Tasks** or, for a list of tasks where users have deleted data, select **Delete Tasks**.
- - **Search**: Enter criteria to find specific tasks.
-1. Select **Apply** to display the criteria you've selected.
-
- Select **Reset Filter** to discard your changes.
-
-
-## View the results of your query
-
-The **Access Keys** table displays the results of your query.
-
-- **Access Key ID**: Provides the ID for the access key.
- - To view details about the access keys, select the down arrow to the left of the ID.
-- The **Owner** name.
-- The **Account** number.
-- The **Permission Creep Index (PCI)**: Provides the following information:
- - **Index**: A numeric value assigned to the PCI.
- - **Since**: How many days the PCI value has been at the displayed level.
-- **Tasks** Displays the number of **Granted** and **Executed** tasks.
-- **Resources**: The number of resources used.
-- **Access Key Age**: How old the access key is, in days.
-- **Last Used**: How long ago the access key was last accessed.
-
-## Apply filters to your query
-
-There are many filter options within the **Active Tasks** screen, including filters by **Authorization System**, filters by **User** and filters by **Task**.
-Filters can be applied in one, two, or all three categories depending on the type of information you're looking for.
-
-### Apply filters by authorization system type
-
-1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
-1. Select **Apply** to run your query and display the information you selected.
-
- Select **Reset Filter** to discard your changes.
-
-
-### Apply filters by authorization system
-
-1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
-1. From the **Authorization System** dropdown, select accounts from a **List** of accounts and **Folders**.
-1. Select **Apply** to run your query and display the information you selected.
-
- Select **Reset Filter** to discard your changes.
-
-### Apply filters by key status
-
-1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
-1. From the **Authorization System** dropdown, select from a **List** of accounts and **Folders**.
-1. From the **Key Status** dropdown, select the type of key: **All**, **Active**, or **Inactive**.
-1. Select **Apply** to run your query and display the information you selected.
-
- Select **Reset Filter** to discard your changes.
-
-### Apply filters by key activity status
-
-1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
-1. From the **Authorization System** dropdown, select from a **List** of accounts and **Folders**.
-1. From the **Key Activity State** dropdown, select **All**, the duration for how long the access key has been used, or **Not Used**.
-
-1. Select **Apply** to run your query and display the information you selected.
-
- Select **Reset Filter** to discard your changes.
-
-### Apply filters by key age
-
-1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
-1. From the **Authorization System** dropdown, select from a **List** of accounts and **Folders**.
-1. From the **Key Age** dropdown, select **All** or how long ago the access key was created.
-
-1. Select **Apply** to run your query and display the information you selected.
-
- Select **Reset Filter** to discard your changes.
-
-### Apply filters by task type
-
-1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
-1. From the **Authorization System** dropdown, select from a **List** of accounts and **Folders**.
-1. From the **Task Type** dropdown, select **All** tasks, **High Risk Tasks** or, for a list of tasks where users have deleted data, select **Delete tasks**.
-1. Select **Apply** to run your query and display the information you selected.
-
- Select **Reset Filter** to discard your changes.
-
-
-
-## Export the results of your query
-
-- To view a report of the results of your query as a comma-separated values (CSV) file, select **Export**, and then select **CSV** or **CSV (Detailed)**.
-
-## Next steps
-
-- To view active tasks, see [View usage analytics about active tasks](cloudknox-usage-analytics-active-tasks.md).
-- To view assigned permissions and usage by users, see [View usage analytics about users](cloudknox-usage-analytics-users.md).
-- To view assigned permissions and usage of the group and the group members, see [View usage analytics about groups](cloudknox-usage-analytics-groups.md).
-- To view active resources, see [View usage analytics about active resources](cloudknox-usage-analytics-active-resources.md).
-- To view assigned permissions and usage of the serverless functions, see [View usage analytics about serverless functions](cloudknox-usage-analytics-serverless-functions.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-usage-analytics-active-resources.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-usage-analytics-active-resources.md
deleted file mode 100644
index e42aa721e001a..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-usage-analytics-active-resources.md
+++ /dev/null
@@ -1,126 +0,0 @@
----
-title: View analytic information about active resources in CloudKnox Permissions Management
-description: How to view usage analytics about active resources in CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# View analytic information about active resources
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-The **Analytics** dashboard in CloudKnox Permissions Management (CloudKnox) collects detailed information, analyzes, reports on, and visualizes data about all identity types. System administrators can use the information to make informed decisions about granting permissions and reducing risk on unused permissions for:
-
-- **Users**: Tracks assigned permissions and usage of various identities.
-- **Groups**: Tracks assigned permissions and usage of the group and the group members.
-- **Active Resources**: Tracks active resources (used in the last 90 days).
-- **Active Tasks**: Tracks active tasks (performed in the last 90 days).
-- **Access Keys**: Tracks the permission usage of access keys for a given user.
-- **Serverless Functions**: Tracks assigned permissions and usage of the serverless functions.
-
-This article describes how to view usage analytics about active resources.
-
-## Create a query to view active resources
-
-1. On the main **Analytics** dashboard, select **Active Resources** from the drop-down list at the top of the screen.
-
- The dashboard only lists tasks that are active. The following components make up the **Active Resources** dashboard:
-1. From the dropdowns, select:
- - **Authorization System Type**: The authorization you want to use: Amazon Web Services (AWS), Microsoft Azure, or Google Cloud Platform (GCP).
- - **Authorization System**: The **List** of accounts and **Folders** you want to include.
- - **Tasks Type**: Select **All** tasks, **High Risk Tasks** or, for a list of tasks where users have deleted data, select **Delete Tasks**.
- - **Service Resource Type**: The service resource type.
- - **Search**: Enter criteria to find specific tasks.
-
-1. Select **Apply** to display the criteria you've selected.
-
- Select **Reset Filter** to discard your changes.
-
-
-## View the results of your query
-
-The **Active Resources** table displays the results of your query:
-
-- **Resource Name**: Provides the name of the task.
- - To view details about the task, select the down arrow.
-- **Account**: The name of the account.
-- **Resources Type**: The type of resources used, for example, **bucket** or **key**.
-- **Tasks**: Displays the number of **Granted** and **Executed** tasks.
-- **Number of Users**: The number of users with access and accessed.
-- Select the ellipses **(...)** and select **Tags** to add a tag.
-
-## Add a tag to an active resource
-
-1. Select the ellipses **(...)** and select **Tags**.
-1. From the **Select a Tag** dropdown, select a tag.
-1. To create a custom tag select **New Custom Tag**, add a tag name, and then select **Create**.
-1. In the **Value (Optional)** box, enter a value.
-1. Select the ellipses **(...)** to select **Advanced Save** options, and then select **Save**.
-1. To add the tag to the serverless function, select **Add Tag**.
-
-
-## Apply filters to your query
-
-There are many filter options within the **Active Resources** screen, including filters by **Authorization System**, filters by **User** and filters by **Task**.
-Filters can be applied in one, two, or all three categories depending on the type of information you're looking for.
-
-### Apply filters by authorization system
-
-1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
-1. Select **Apply** to run your query and display the information you selected.
-
- Select **Reset Filter** to discard your changes.
-
-
-### Apply filters by authorization system type
-
-1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
-1. From the **Authorization System** dropdown, select from a **List** of accounts and **Folders**.
-1. Select **Apply** to run your query and display the information you selected.
-
- Select **Reset Filter** to discard your changes.
-
-### Apply filters by task type
-
-You can filter user details by type of user, user role, app, or service used, or by resource.
-
-1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
-1. From the **Authorization System** dropdown, select from a **List** of accounts and **Folders**.
-1. From the **Task Type**, select the type of user: **All**, **User**, **Role/App/Service a/c**, or **Resource**.
-1. Select **Apply** to run your query and display the information you selected.
-
- Select **Reset Filter** to discard your changes.
-
-
-### Apply filters by service resource type
-
-You can filter user details by type of user, user role, app, or service used, or by resource.
-
-1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
-1. From the **Authorization System** dropdown, select from a **List** of accounts and **Folders**.
-1. From the **Service Resource Type**, select the type of service resource.
-1. Select **Apply** to run your query and display the information you selected.
-
- Select **Reset Filter** to discard your changes.
-
-## Export the results of your query
-
-- To view a report of the results of your query as a comma-separated values (CSV) file, select **Export**, and then select **CSV**.
-
-
-## Next steps
-
-- To track active tasks, see [View usage analytics about active tasks](cloudknox-usage-analytics-active-tasks.md).
-- To track assigned permissions and usage of users, see [View usage analytics about users](cloudknox-usage-analytics-users.md).
-- To track assigned permissions and usage of the group and the group members, see [View usage analytics about groups](cloudknox-usage-analytics-groups.md).
-- To track the permission usage of access keys for a given user, see [View usage analytics about access keys](cloudknox-usage-analytics-access-keys.md).
-- To track assigned permissions and usage of the serverless functions, see [View usage analytics about serverless functions](cloudknox-usage-analytics-serverless-functions.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-usage-analytics-active-tasks.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-usage-analytics-active-tasks.md
deleted file mode 100644
index e0e6679f637f0..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-usage-analytics-active-tasks.md
+++ /dev/null
@@ -1,111 +0,0 @@
----
-title: View analytic information about active tasks in CloudKnox Permissions Management
-description: How to view analytic information about active tasks in CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# View analytic information about active tasks
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-The **Analytics** dashboard in CloudKnox Permissions Management (CloudKnox) collects detailed information, analyzes, reports on, and visualizes data about all identity types. System administrators can use the information to make informed decisions about granting permissions and reducing risk on unused permissions for:
-
-- **Users**: Tracks assigned permissions and usage of various identities.
-- **Groups**: Tracks assigned permissions and usage of the group and the group members.
-- **Active Resources**: Tracks active resources (used in the last 90 days).
-- **Active Tasks**: Tracks active tasks (performed in the last 90 days).
-- **Access Keys**: Tracks the permission usage of access keys for a given user.
-- **Serverless Functions**: Tracks assigned permissions and usage of the serverless functions.
-
-This article describes how to view usage analytics about active tasks.
-
-## Create a query to view active tasks
-
-When you select **Active Tasks**, the **Analytics** dashboard provides a high-level overview of tasks used by various identities.
-
-1. On the main **Analytics** dashboard, select **Active Tasks** from the drop-down list at the top of the screen.
-
- The dashboard only lists tasks that are active. The following components make up the **Active Tasks** dashboard:
-
- - **Authorization System Type**: Select the authorization you want to use: Amazon Web Services (AWS), Microsoft Azure, or Google Cloud Platform (GCP).
- - **Authorization System**: Select from a **List** of accounts and **Folders***.
- - **Tasks Type**: Select **All** tasks, **High Risk tasks** or, for a list of tasks where users have deleted data, select **Delete Tasks**.
- - **Search**: Enter criteria to find specific tasks.
-
-1. Select **Apply** to display the criteria you've selected.
-
- Select **Reset Filter** to discard your changes.
-
-
-## View the results of your query
-
-The **Active Tasks** table displays the results of your query.
-
-- **Task Name**: Provides the name of the task.
- - To view details about the task, select the down arrow in the table.
-
- - A **Normal Task** icon displays to the left of the task name if the task is normal (that is, not risky).
- - A **Deleted Task** icon displays to the left of the task name if the task involved deleting data.
- - A **High-Risk Task** icon displays to the left of the task name if the task is high-risk.
-
-- **Performed on (resources)**: The number of resources on which the task was used.
-
-- **Number of Users**: Displays how many users performed tasks. The tasks are organized into the following columns:
- - **With Access**: Displays the number of users that have access to the task but haven't accessed it.
- - **Accessed**: Displays the number of users that have accessed the task.
-
-
-## Apply filters to your query
-
-There are many filter options within the **Active Tasks** screen, including **Authorization System**, **User**, and **Task**.
-Filters can be applied in one, two, or all three categories depending on the type of information you're looking for.
-
-### Apply filters by authorization system type
-
-1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
-1. Select **Apply** to run your query and display the information you selected.
-
- Select **Reset Filter** to discard your changes.
-
-### Apply filters by authorization system
-
-1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
-1. From the **Authorization System** dropdown, select accounts from a **List** of accounts and **Folders**.
-1. Select **Apply** to run your query and display the information you selected.
-
- Select **Reset Filter** to discard your changes.
-
-
-### Apply filters by task type
-
-You can filter user details by type of user, user role, app, or service used, or by resource.
-
-1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
-1. From the **Authorization System** dropdown, select from a **List** of accounts and **Folders**.
-1. From the **Task Type** dropdown, select the type of tasks: **All**, **High Risk Tasks**, or **Delete Tasks**.
-1. Select **Apply** to run your query and display the information you selected.
-
- Select **Reset Filter** to discard your changes.
-
-
-## Export the results of your query
-
-- To view a report of the results of your query as a comma-separated values (CSV) file, select **Export**, and then select **CSV**.
-
-## Next steps
-
-- To view assigned permissions and usage by users, see [View analytic information about users](cloudknox-usage-analytics-users.md).
-- To view assigned permissions and usage of the group and the group members, see [View analytic information about groups](cloudknox-usage-analytics-groups.md).
-- To view active resources, see [View analytic information about active resources](cloudknox-usage-analytics-active-resources.md).
-- To view the permission usage of access keys for a given user, see [View analytic information about access keys](cloudknox-usage-analytics-access-keys.md).
-- To view assigned permissions and usage of the serverless functions, see [View analytic information about serverless functions](cloudknox-usage-analytics-serverless-functions.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-usage-analytics-groups.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-usage-analytics-groups.md
deleted file mode 100644
index f53777999454d..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-usage-analytics-groups.md
+++ /dev/null
@@ -1,154 +0,0 @@
----
-title: View analytic information about groups in CloudKnox Permissions Management
-description: How to view analytic information about groups in CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# View analytic information about groups
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-The **Analytics** dashboard in CloudKnox Permissions Management (CloudKnox) collects detailed information, analyzes, reports on, and visualizes data about all identity types. System administrators can use the information to make informed decisions about granting permissions and reducing risk on unused permissions for:
-
-- **Users**: Tracks assigned permissions and usage of various identities.
-- **Groups**: Tracks assigned permissions and usage of the group and the group members.
-- **Active Resources**: Tracks active resources (used in the last 90 days).
-- **Active Tasks**: Tracks active tasks (performed in the last 90 days).
-- **Access Keys**: Tracks the permission usage of access keys for a given user.
-- **Serverless Functions**: Tracks assigned permissions and usage of the serverless functions.
-
-This article describes how to view usage analytics about groups.
-
-## Create a query to view groups
-
-When you select **Groups**, the **Usage Analytics** dashboard provides a high-level overview of groups.
-
-1. On the main **Analytics** dashboard, select **Groups** from the drop-down list at the top of the screen.
-
- The following components make up the **Groups** dashboard:
-
- - **Authorization System Type**: Select the authorization you want to use: Amazon Web Services (AWS), Microsoft Azure, or Google Cloud Platform (GCP).
- - **Authorization System**: Select from a **List** of accounts and **Folders**.
- - **Group Type**: Select **All**, **ED**, or **Local**.
- - **Group Activity Status**: Select **All**, **Active**, or **Inactive**.
- - **Tasks Type**: Select **All**, **High Risk Tasks**, or **Delete Tasks**
- - **Search**: Enter group name to find specific group.
-1. To display the criteria you've selected, select **Apply**.
- - **Reset Filter**: Select to discard your changes.
-
-
-## View the results of your query
-
-The **Groups** table displays the results of your query:
-
-- **Group Name**: Provides the name of the group.
- - To view details about the group, select the down arrow.
-- A **Group Type** icon displays to the left of the group name to describe the type of group (**ED** or **Local**).
-- The **Domain/Account** name.
-- The **Permission Creep Index (PCI)**: Provides the following information:
- - **Index**: A numeric value assigned to the PCI.
- - **Since**: How many days the PCI value has been at the displayed level.
-- **Tasks**: Displays the number of **Granted** and **Executed** tasks.
-- **Resources**: The number of resources used.
-- **Users**: The number of users who accessed the group.
-- Select the ellipses **(...)** and select **Tags** to add a tag.
-
-## Add a tag to a group
-
-1. Select the ellipses **(...)** and select **Tags**.
-1. From the **Select a Tag** dropdown, select a tag.
-1. To create a custom tag select **New Custom Tag**, add a tag name, and then select **Create**.
-1. In the **Value (Optional)** box, enter a value.
-1. Select the ellipses **(...)** to select **Advanced Save** options, and then select **Save**.
-1. To add the tag to the serverless function, select **Add Tag**.
-
-## View detailed information about a group
-
-1. Select the down arrow to the left of the **Group Name**.
-
- The list of **Tasks** organized by **Unused** and **Used** displays.
-
-1. Select the arrow to the left of the group name to view details about the task.
-1. Select **Information** (**i**) to view when the task was last used.
-1. From the **Tasks** dropdown, select **All Tasks**, **High Risk Tasks**, and **Delete Tasks**.
-1. The pane on the right displays a list of **Users**, **Policies** for **AWS** and **Roles** for **GCP or AZURE**, and **Tags**.
-
-## Apply filters to your query
-
-There are many filter options within the **Groups** screen, including filters by **Authorization System Type**, **Authorization System**, **Group Type**, **Group Activity Status**, and **Tasks Type**.
-Filters can be applied in one, two, or all three categories depending on the type of information you're looking for.
-
-### Apply filters by authorization system type
-
-1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
-1. Select **Apply** to run your query and display the information you selected.
-
- Select **Reset Filter** to discard your changes.
-
-### Apply filters by authorization system
-
-1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
-1. From the **Authorization System** dropdown, select accounts from a **List** of accounts and **Folders**.
-1. Select **Apply** to run your query and display the information you selected.
-
- Select **Reset Filter** to discard your changes.
-
-
-### Apply filters by group type
-
-You can filter user details by type of user, user role, app, or service used, or by resource.
-
-1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
-1. From the **Authorization System** dropdown, select from a **List** of accounts and **Folders**.
-1. From the **Group Type** dropdown, select the type of user: **All**, **ED**, or **Local**.
-1. Select **Apply** to run your query and display the information you selected.
-
- Select **Reset Filter** to discard your changes.
-
-### Apply filters by group activity status
-
-You can filter user details by type of user, user role, app, or service used, or by resource.
-
-1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
-1. From the **Authorization System** dropdown, select from a **List** of accounts and **Folders**.
-1. From the **Group Activity Status** dropdown, select the type of user: **All**, **Active**, or **Inactive**.
-1. Select **Apply** to run your query and display the information you selected.
-
- Select **Reset Filter** to discard your changes.
-
-### Apply filters by tasks type
-
-You can filter user details by type of user, user role, app, or service used, or by resource.
-
-1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
-1. From the **Authorization System** dropdown, select from a **List** of accounts and **Folders**.
-1. From the **Tasks Type** dropdown, select the type of user: **All**, **High Risk Tasks**, or **Delete Tasks**.
-1. Select **Apply** to run your query and display the information you selected.
-
- Select **Reset Filter** to discard your changes.
-
-
-## Export the results of your query
-
-- To view a report of the results of your query as a comma-separated values (CSV) file, select **Export**, and then select **CSV**.
-- To view a list of members of the groups in your query, select **Export**, and then select **Memberships**.
-
-
-
-## Next steps
-
-- To view active tasks, see [View analytic information about active tasks](cloudknox-usage-analytics-active-tasks.md).
-- To view assigned permissions and usage by users, see [View analytic information about users](cloudknox-usage-analytics-users.md).
-- To view active resources, see [View analytic information about active resources](cloudknox-usage-analytics-active-resources.md).
-- To view the permission usage of access keys for a given user, see [View analytic information about access keys](cloudknox-usage-analytics-access-keys.md).
-- To view assigned permissions and usage of the serverless functions, see [View analytic information about serverless functions](cloudknox-usage-analytics-serverless-functions.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-usage-analytics-home.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-usage-analytics-home.md
deleted file mode 100644
index 055a106e941f0..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-usage-analytics-home.md
+++ /dev/null
@@ -1,52 +0,0 @@
----
-title: View analytic information with the Analytics dashboard in CloudKnox Permissions Management
-description: How to use the Analytics dashboard in CloudKnox Permissions Management to view details about users, groups, active resources, active tasks, access keys, and serverless functions.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# View analytic information with the Analytics dashboard
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-This article provides a brief overview of the Analytics dashboard in CloudKnox Permissions Management (CloudKnox), and the type of analytic information it provides for Amazon Web Services (AWS), Microsoft Azure, or Google Cloud Platform (GCP).
-
-## Display the Analytics dashboard
-
-- From the CloudKnox home page, select the **Analytics** tab.
-
- The **Analytics** dashboard displays detailed information about:
-
- - **Users**: Tracks assigned permissions and usage by users. For more information, see [View analytic information about users](cloudknox-usage-analytics-users.md).
-
- - **Groups**: Tracks assigned permissions and usage of the group and the group members. For more information, see [View analytic information about groups](cloudknox-usage-analytics-groups.md).
-
- - **Active Resources**: Tracks resources that have been used in the last 90 days. For more information, see [View analytic information about active resources](cloudknox-usage-analytics-active-resources.md).
-
- - **Active Tasks**: Tracks tasks that have been performed in the last 90 days. For more information, see [View analytic information about active tasks](cloudknox-usage-analytics-active-tasks.md).
-
- - **Access Keys**: Tracks the permission usage of access keys for a given user. For more information, see [View analytic information about access keys](cloudknox-usage-analytics-access-keys.md).
-
- - **Serverless Functions**: Tracks assigned permissions and usage of the serverless functions for AWS only. For more information, see [View analytic information about serverless functions](cloudknox-usage-analytics-serverless-functions.md).
-
- System administrators can use this information to make decisions about granting permissions and reducing risk on unused permissions.
-
-
-
-## Next steps
-
-- To view active tasks, see [View analytic information about active tasks](cloudknox-usage-analytics-active-tasks.md).
-- To view assigned permissions and usage by users, see [View analytic information about users](cloudknox-usage-analytics-users.md).
-- To view assigned permissions and usage of the group and the group members, see [View analytic information about groups](cloudknox-usage-analytics-groups.md).
-- To view active resources, see [View analytic information about active resources](cloudknox-usage-analytics-active-resources.md).
-- To view the permission usage of access keys for a given user, see [View analytic information about access keys](cloudknox-usage-analytics-access-keys.md).
-- To view assigned permissions and usage of the serverless functions, see [View analytic information about serverless functions](cloudknox-usage-analytics-serverless-functions.md).
\ No newline at end of file
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-usage-analytics-serverless-functions.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-usage-analytics-serverless-functions.md
deleted file mode 100644
index 976ff2b442a0b..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-usage-analytics-serverless-functions.md
+++ /dev/null
@@ -1,112 +0,0 @@
----
-title: View analytic information about serverless functions in CloudKnox Permissions Management
-description: How to view analytic information about serverless functions in CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# View analytic information about serverless functions
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-The **Analytics** dashboard in CloudKnox Permissions Management (CloudKnox) collects detailed information, analyzes, reports on, and visualizes data about all identity types. System administrators can use the information to make informed decisions about granting permissions and reducing risk on unused permissions for:
-
-- **Users**: Tracks assigned permissions and usage of various identities.
-- **Groups**: Tracks assigned permissions and usage of the group and the group members.
-- **Active Resources**: Tracks active resources (used in the last 90 days).
-- **Active Tasks**: Tracks active tasks (performed in the last 90 days).
-- **Access Keys**: Tracks the permission usage of access keys for a given user.
-- **Serverless Functions**: Tracks assigned permissions and usage of the serverless functions.
-
-This article describes how to view usage analytics about serverless functions.
-
-## Create a query to view serverless functions
-
-When you select **Serverless Functions**, the **Analytics** dashboard provides a high-level overview of tasks used by various identities.
-
-1. On the main **Analytics** dashboard, select **Serverless Functions** from the dropdown list at the top of the screen.
-
- The following components make up the **Serverless Functions** dashboard:
-
- - **Authorization System Type**: Select the authorization you want to use: Amazon Web Services (AWS), Microsoft Azure, or Google Cloud Platform (GCP).
- - **Authorization System**: Select from a **List** of accounts and **Folders**.
- - **Search**: Enter criteria to find specific tasks.
-1. Select **Apply** to display the criteria you've selected.
-
- Select **Reset Filter** to discard your changes.
-
-
-## View the results of your query
-
-The **Serverless Functions** table displays the results of your query.
-
-- **Function Name**: Provides the name of the serverless function.
- - To view details about a serverless function, select the down arrow to the left of the function name.
-- A **Function Type** icon displays to the left of the function name to describe the type of serverless function, for example **Lambda function**.
-- The **Permission Creep Index (PCI)**: Provides the following information:
- - **Index**: A numeric value assigned to the PCI.
- - **Since**: How many days the PCI value has been at the displayed level.
-- **Tasks**: Displays the number of **Granted** and **Executed** tasks.
-- **Resources**: The number of resources used.
-- **Last Activity On**: The date the function was last accessed.
-- Select the ellipses **(...)**, and then select **Tags** to add a tag.
-
-## Add a tag to a serverless function
-
-1. Select the ellipses **(...)** and select **Tags**.
-1. From the **Select a Tag** dropdown, select a tag.
-1. To create a custom tag select **New Custom Tag**, add a tag name, and then select **Create**.
-1. In the **Value (Optional)** box, enter a value.
-1. Select the ellipses **(...)** to select **Advanced Save** options, and then select **Save**.
-1. To add the tag to the serverless function, select **Add Tag**.
-
-## View detailed information about a serverless function
-
-1. Select the down arrow to the left of the function name to display the following:
-
- - A list of **Tasks** organized by **Used** and **Unused**.
- - **Versions**, if a version is available.
-
-1. Select the arrow to the left of the task name to view details about the task.
-1. Select **Information** (**i**) to view when the task was last used.
-1. From the **Tasks** dropdown, select **All Tasks**, **High Risk Tasks**, and **Delete Tasks**.
-
-
-## Apply filters to your query
-
-You can filter the **Serverless Functions** results by **Authorization System Type** and **Authorization System**.
-
-### Apply filters by authorization system type
-
-1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
-1. Select **Apply** to run your query and display the information you selected.
-
- Select **Reset Filter** to discard your changes.
-
-
-### Apply filters by authorization system
-
-1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
-1. From the **Authorization System** dropdown, select accounts from a **List** of accounts and **Folders**.
-1. Select **Apply** to run your query and display the information you selected.
-
- Select **Reset Filter** to discard your changes.
-
-
-
-## Next steps
-
-- To view active tasks, see [View usage analytics about active tasks](cloudknox-usage-analytics-active-tasks.md).
-- To view assigned permissions and usage by users, see [View analytic information about users](cloudknox-usage-analytics-users.md).
-- To view assigned permissions and usage of the group and the group members, see [View analytic information about groups](cloudknox-usage-analytics-groups.md).
-- To view active resources, see [View analytic information about active resources](cloudknox-usage-analytics-active-resources.md).
-- To view the permission usage of access keys for a given user, see [View analytic information about access keys](cloudknox-usage-analytics-access-keys.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-usage-analytics-users.md b/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-usage-analytics-users.md
deleted file mode 100644
index 43aea761580c9..0000000000000
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/cloudknox-usage-analytics-users.md
+++ /dev/null
@@ -1,166 +0,0 @@
----
-title: View analytic information about users in CloudKnox Permissions Management
-description: How to view analytic information about users in CloudKnox Permissions Management.
-services: active-directory
-author: kenwith
-manager: rkarlin
-ms.service: active-directory
-ms.subservice: ciem
-ms.workload: identity
-ms.topic: how-to
-ms.date: 02/23/2022
-ms.author: kenwith
----
-
-# View analytic information about users
-
-> [!IMPORTANT]
-> CloudKnox Permissions Management (CloudKnox) is currently in PREVIEW.
-> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
-
-The **Analytics** dashboard in CloudKnox Permissions Management (CloudKnox) collects detailed information, analyzes, reports on, and visualizes data about all identity types. System administrators can use the information to make informed decisions about granting permissions and reducing risk on unused permissions for:
-
-- **Users**: Tracks assigned permissions and usage of various identities.
-- **Groups**: Tracks assigned permissions and usage of the group and the group members.
-- **Active Resources**: Tracks active resources (used in the last 90 days).
-- **Active Tasks**: Tracks active tasks (performed in the last 90 days).
-- **Access Keys**: Tracks the permission usage of access keys for a given user.
-- **Serverless Functions**: Tracks assigned permissions and usage of the serverless functions.
-
-This article describes how to view usage analytics about users.
-
-## Create a query to view users
-
-When you select **Users**, the **Analytics** dashboard provides a high-level overview of tasks used by various identities.
-
-1. On the main **Analytics** dashboard, select **Users** from the drop-down list at the top of the screen.
-
- The following components make up the **Users** dashboard:
-
- - **Authorization System Type**: Select the authorization you want to use: Amazon Web Services (AWS), Microsoft Azure, or Google Cloud Platform (GCP).
- - **Authorization System**: Select from a **List** of accounts and **Folders***.
- - **Identity Type**: Select **All** identity types, **User**, **Role/App/Service a/c** or **Resource**.
- - **Search**: Enter criteria to find specific tasks.
-1. Select **Apply** to display the criteria you've selected.
-
- Select **Reset filter** to discard your changes.
-
-
-## View the results of your query
-
-The **Identities** table displays the results of your query.
-
-- **Name**: Provides the name of the group.
- - To view details about the group, select the down arrow.
-- The **Domain/Account** name.
-- The **Permission Creep Index (PCI)**: Provides the following information:
- - **Index**: A numeric value assigned to the PCI.
- - **Since**: How many days the PCI value has been at the displayed level.
-- **Tasks**: Displays the number of **Granted** and **Executed** tasks.
-- **Resources**: The number of resources used.
-- **User Groups**: The number of users who accessed the group.
-- **Last Activity On**: The date the function was last accessed.
-- The ellipses **(...)**: Select **Tags** to add a tag.
-
- If you're using AWS, another selection is available from the ellipses menu: **Auto Remediate**. You can use this option to remediate your results automatically.
-
-## Add a tag to a user
-
-1. Select the ellipses **(...)** and select **Tags**.
-1. From the **Select a Tag** dropdown, select a tag.
-1. To create a custom tag select **New Custom Tag**, add a tag name, and then select **Create**.
-1. In the **Value (Optional)** box, enter a value.
-1. Select the ellipses **(...)** to select **Advanced Save** options, and then select **Save**.
-1. To add the tag to the serverless function, select **Add Tag**.
-
-## Set the auto-remediate option (AWS only)
-
-- Select the ellipses **(...)** and select **Auto Remediate**.
-
- A message displays to confirm that your remediation settings are automatically updated.
-
-## Apply filters to your query
-
-There are many filter options within the **Users** screen, including filters by **Authorization System**, **Identity Type**, and **Identity State**.
-Filters can be applied in one, two, or all three categories depending on the type of information you're looking for.
-
-### Apply filters by authorization system type
-
-1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
-1. Select **Apply** to run your query and display the information you selected.
-
- Select **Reset Filter** to discard your changes.
-
-
-### Apply filters by authorization system
-
-1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
-1. From the **Authorization System** dropdown, select accounts from a **List** of accounts and **Folders**.
-1. Select **Apply** to run your query and display the information you selected.
-
- Select **Reset filter** to discard your changes.
-
-### Apply filters by identity type
-
-1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
-1. From the **Authorization System** dropdown, select from a **List** of accounts and **Folders**.
-1. From the **Identity Type**, select the type of user: **All**, **User**, **Role/App/Service a/c**, or **Resource**.
-1. Select **Apply** to run your query and display the information you selected.
-
- Select **Reset Filter** to discard your changes.
-
-### Apply filters by identity subtype
-
-1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
-1. From the **Authorization System** dropdown, select from a **List** of accounts and **Folders**.
-1. From the **Identity Subtype**, select the type of user: **All**, **ED**, **Local**, or **Cross Account**.
-1. Select **Apply** to run your query and display the information you selected.
-
- Select **Reset filter** to discard your changes.
-
-### Apply filters by identity state
-
-1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
-1. From the **Authorization System** dropdown, select from a **List** of accounts and **Folders**.
-1. From the **Identity State**, select the type of user: **All**, **Active**, or **Inactive**.
-1. Select **Apply** to run your query and display the information you selected.
-
- Select **Reset Filter** to discard your changes.
-
-
-### Apply filters by identity filters
-
-1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
-1. From the **Authorization System** dropdown, select from a **List** of accounts and **Folders**.
-1. From the **Identity Type**, select: **Risky** or **Incl. in PCI Calculation Only**.
-1. Select **Apply** to run your query and display the information you selected.
-
- Select **Reset Filter** to discard your changes.
-
-
-### Apply filters by task type
-
-You can filter user details by type of user, user role, app, or service used, or by resource.
-
-1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
-1. From the **Authorization System** dropdown, select from a **List** of accounts and **Folders**.
-1. From the **Task Type**, select the type of user: **All** or **High Risk Tasks**.
-1. Select **Apply** to run your query and display the information you selected.
-
- Select **Reset Filter** to discard your changes.
-
-
-## Export the results of your query
-
-- To export a report of the results of your query as a comma-separated values (CSV) file, select **Export**, and then select **CSV**.
-- To export the data in a detailed comma-separated values (CSV) file format, select **Export** and then select **CSV (Detailed)**.
-- To export a report of user permissions, select **Export** and then select **Permissions**.
-
-
-## Next steps
-
-- To view active tasks, see [View analytic information about active tasks](cloudknox-usage-analytics-active-tasks.md).
-- To view assigned permissions and usage of the group and the group members, see [View analytic information about groups](cloudknox-usage-analytics-groups.md).
-- To view active resources, see [View analytic information about active resources](cloudknox-usage-analytics-active-resources.md).
-- To view the permission usage of access keys for a given user, see [View analytic information about access keys](cloudknox-usage-analytics-access-keys.md).
-- To view assigned permissions and usage of the serverless functions, see [View analytic information about serverless functions](cloudknox-usage-analytics-serverless-functions.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/faqs.md b/articles/active-directory/cloud-infrastructure-entitlement-management/faqs.md
new file mode 100644
index 0000000000000..d97c4fafe1cec
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/faqs.md
@@ -0,0 +1,158 @@
+---
+title: Frequently asked questions (FAQs) about Permissions Management
+description: Frequently asked questions (FAQs) about Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: faq
+ms.date: 04/20/2022
+ms.author: kenwith
+---
+
+# Frequently asked questions (FAQs)
+
+> [!IMPORTANT]
+> Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+> [!NOTE]
+> The Permissions Management PREVIEW is currently not available for tenants hosted in the European Union (EU).
+
+
+This article answers frequently asked questions (FAQs) about Permissions Management.
+
+## What's Permissions Management?
+
+Permissions Management is a cloud infrastructure entitlement management (CIEM) solution that provides comprehensive visibility into permissions assigned to all identities. For example, over-privileged workload and user identities, actions, and resources across multi-cloud infrastructures in Microsoft Azure, Amazon Web Services (AWS), and Google Cloud Platform (GCP). Permissions Management detects, automatically right-sizes, and continuously monitors unused and excessive permissions. It deepens the Zero Trust security strategy by augmenting the least privilege access principle.
+
+
+## What are the prerequisites to use Permissions Management?
+
+Permissions Management supports data collection from AWS, GCP, and/or Microsoft Azure. For data collection and analysis, customers are required to have an Azure Active Directory (Azure AD) account to use Permissions Management.
+
+## Can a customer use Permissions Management if they have other identities with access to their IaaS platform that aren't yet in Azure AD (for example, if part of their business has Okta or AWS Identity & Access Management (IAM))?
+
+Yes, a customer can detect, mitigate, and monitor the risk of 'backdoor' accounts that are local to AWS IAM, GCP, or from other identity providers such as Okta or AWS IAM.
+
+## Where can customers access Permissions Management?
+
+Customers can access the Permissions Management interface with a link from the Azure AD extension in the Azure portal.
+
+## Can non-cloud customers use Permissions Management on-premises?
+
+No, Permissions Management is a hosted cloud offering.
+
+## Can non-Azure customers use Permissions Management?
+
+Yes, non-Azure customers can use our solution. Permissions Management is a multi-cloud solution so even customers who have no subscription to Azure can benefit from it.
+
+## Is Permissions Management available for tenants hosted in the European Union (EU)?
+
+No, the Permissions Management Permissions Management PREVIEW is currently not available for tenants hosted in the European Union (EU).
+
+## If I'm already using Azure AD Privileged Identity Management (PIM) for Azure, what value does Permissions Management provide?
+
+Permissions Management complements Azure AD PIM. Azure AD PIM provides just-in-time access for admin roles in Azure (as well as Microsoft Online Services and apps that use groups), while Permissions Management allows multi-cloud discovery, remediation, and monitoring of privileged access across Azure, AWS, and GCP.
+
+## What languages does Permissions Management support?
+
+Permissions Management currently supports English.
+
+## What public cloud infrastructures are supported by Permissions Management?
+
+Permissions Management currently supports the three major public clouds: Amazon Web Services (AWS), Google Cloud Platform (GCP), and Microsoft Azure.
+
+## Does Permissions Management support hybrid environments?
+
+Permissions Management currently doesn't support hybrid environments.
+
+## What types of identities are supported by Permissions Management?
+
+Permissions Management supports user identities (for example, employees, customers, external partners) and workload identities (for example, virtual machines, containers, web apps, serverless functions).
+
+
+
+## Is Permissions Management available in Government Cloud?
+
+No, Permissions Management is currently not available in Government clouds.
+
+## Is Permissions Management available for sovereign clouds?
+
+No, Permissions Management is currently not available in sovereign Clouds.
+
+## How does Permissions Management collect insights about permissions usage?
+
+Permissions Management has a data collector that collects access permissions assigned to various identities, activity logs, and resources metadata. This gathers full visibility into permissions granted to all identities to access the resources and details on usage of granted permissions.
+
+## How does Permissions Management evaluate cloud permissions risk?
+
+Permissions Management offers granular visibility into all identities and their permissions granted versus used, across cloud infrastructures to uncover any action performed by any identity on any resource. This isn't limited to just user identities, but also workload identities such as virtual machines, access keys, containers, and scripts. The dashboard gives an overview of permission profile to locate the riskiest identities and resources.
+
+## What is the Permissions Creep Index?
+
+The Permissions Creep Index (PCI) is a quantitative measure of risk associated with an identity or role determined by comparing permissions granted versus permissions exercised. It allows users to instantly evaluate the level of risk associated with the number of unused or over-provisioned permissions across identities and resources. It measures how much damage identities can cause based on the permissions they have.
+
+## How can customers use Permissions Management to delete unused or excessive permissions?
+
+Permissions Management allows users to right-size excessive permissions and automate least privilege policy enforcement with just a few clicks. The solution continuously analyzes historical permission usage data for each identity and gives customers the ability to right-size permissions of that identity to only the permissions that are being used for day-to-day operations. All unused and other risky permissions can be automatically removed.
+
+## How can customers grant permissions on-demand with Permissions Management?
+
+For any break-glass or one-off scenarios where an identity needs to perform a specific set of actions on a set of specific resources, the identity can request those permissions on-demand for a limited period with a self-service workflow. Customers can either use the built-in workflow engine or their IT service management (ITSM) tool. The user experience is the same for any identity type, identity source (local, enterprise directory, or federated) and cloud.
+
+## What is the difference between permissions on-demand and just-in-time access?
+
+Just-in-time (JIT) access is a method used to enforce the principle of least privilege to ensure identities are given the minimum level of permissions to perform the task at hand. Permissions on-demand are a type of JIT access that allows the temporary elevation of permissions, enabling identities to access resources on a by-request, timed basis.
+
+## How can customers monitor permissions usage with Permissions Management?
+
+Customers only need to track the evolution of their Permission Creep Index to monitor permissions usage. They can do this in the "Analytics" tab in their Permissions Management dashboard where they can see how the PCI of each identity or resource is evolving over time.
+
+## Can customers generate permissions usage reports?
+
+Yes, Permissions Management has various types of system report available that capture specific data sets. These reports allow customers to:
+- Make timely decisions.
+- Analyze usage trends and system/user performance.
+- Identify high-risk areas.
+
+For information about permissions usage reports, see [Generate and download the Permissions analytics report](product-permissions-analytics-reports.md).
+
+## Does Permissions Management integrate with third-party ITSM (Information Technology Security Management) tools?
+
+Permissions Management integrates with ServiceNow.
+
+## How is Permissions Management being deployed?
+
+Customers with Global Admin role have first to onboard Permissions Management on their Azure AD tenant, and then onboard their AWS accounts, GCP projects, and Azure subscriptions. More details about onboarding can be found in our product documentation.
+
+## How long does it take to deploy Permissions Management?
+
+It depends on each customer and how many AWS accounts, GCP projects, and Azure subscriptions they have.
+
+## Once Permissions Management is deployed, how fast can I get permissions insights?
+
+Once fully onboarded with data collection set up, customers can access permissions usage insights within hours. Our machine-learning engine refreshes the Permission Creep Index every hour so that customers can start their risk assessment right away.
+
+## Is Permissions Management collecting and storing sensitive personal data?
+
+No, Permissions Management doesn't have access to sensitive personal data.
+
+## Where can I find more information about Permissions Management?
+
+You can read our blog and visit our web page. You can also get in touch with your Microsoft point of contact to schedule a demo.
+
+## Resources
+
+- [Public Preview announcement blog](https://www.aka.ms/CloudKnox-Public-Preview-Blog)
+- [Permissions Management web page](https://microsoft.com/security/business/identity-access-management/permissions-management)
+
+
+## Next steps
+
+- For an overview of Permissions Management, see [What's Permissions Management Permissions Management?](overview.md).
+- For information on how to onboard Permissions Management in your organization, see [Enable Permissions Management in your organization](onboard-enable-tenant.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-add-remove-role-task.md b/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-add-remove-role-task.md
new file mode 100644
index 0000000000000..d07250a8bd6e1
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-add-remove-role-task.md
@@ -0,0 +1,118 @@
+---
+title: Add and remove roles and tasks for groups, users, and service accounts for Microsoft Azure and Google Cloud Platform (GCP) identities in the Remediation dashboard in Permissions Management
+description: How to attach and detach permissions for groups, users, and service accounts for Microsoft Azure and Google Cloud Platform (GCP) identities in the Remediation dashboard in Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# Add and remove roles and tasks for Microsoft Azure and Google Cloud Platform (GCP) identities
+
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management (Entra) is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+This article describes how you can add and remove roles and tasks for Microsoft Azure and Google Cloud Platform (GCP) identities using the **Remediation** dashboard.
+
+> [!NOTE]
+> To view the **Remediation** tab, your must have **Viewer**, **Controller**, or **Administrator** permissions. To make changes on this tab, you must have **Controller** or **Administrator** permissions. If you don't have these permissions, contact your system administrator.
+
+## View permissions
+
+1. On the Entra home page, select the **Remediation** tab, and then select the **Permissions** subtab.
+1. From the **Authorization System Type** dropdown, select **Azure** or **GCP**.
+1. From the **Authorization System** dropdown, select the accounts you want to access.
+1. From the **Search For** dropdown, select **Group**, **User**, or **APP**.
+1. To search for more parameters, you can make a selection from the **User States**, **Permission Creep Index**, and **Task Usage** dropdowns.
+1. Select **Apply**.
+ Entra displays a list of groups, users, and service accounts that match your criteria.
+1. In **Enter a username**, enter or select a user.
+1. In **Enter a Group Name**, enter or select a group, then select **Apply**.
+1. Make a selection from the results list.
+
+ The table displays the **Username** **Domain/Account**, **Source**, **Resource** and **Current Role**.
+
+
+## Add a role
+
+1. On the Entra home page, select the **Remediation** tab, and then select the **Permissions** subtab.
+1. From the **Authorization System Type** dropdown, select **Azure** or **GCP**.
+1. From the **Authorization System** dropdown, select the accounts you want to access.
+1. From the **Search For** dropdown, select **Group**, **User**, or **APP/Service Account**, and then select **Apply**.
+1. Make a selection from the results list.
+
+1. To attach a role, select **Add role**.
+1. In the **Add Role** page, from the **Available Roles** list, select the plus sign **(+)** to move the role to the **Selected Roles** list.
+1. When you have finished adding roles, select **Submit**.
+1. When the following message displays: **Are you sure you want to change permission?**, select:
+ - **Generate Script** to generate a script where you can manually add/remove the permissions you selected.
+ - **Execute** to change the permission.
+ - **Close** to cancel the action.
+
+## Remove a role
+
+1. On the Entra home page, select the **Remediation** tab, and then select the **Permissions** subtab.
+1. From the **Authorization System Type** dropdown, select **Azure** or **GCP**.
+1. From the **Authorization System** dropdown, select the accounts you want to access.
+1. From the **Search For** dropdown, select **Group**, **User**, or **APP/Service Account**, and then select **Apply**.
+1. Make a selection from the results list.
+
+1. To remove a role, select **Remove Role**.
+1. In the **Remove Role** page, from the **Available Roles** list, select the plus sign **(+)** to move the role to the **Selected Roles** list.
+1. When you have finished selecting roles, select **Submit**.
+1. When the following message displays: **Are you sure you want to change permission?**, select:
+ - **Generate Script** to generate a script where you can manually add/remove the permissions you selected.
+ - **Execute** to change the permission.
+ - **Close** to cancel the action.
+
+## Add a task
+
+1. On the Permissions Management home page, select the **Remediation** tab, and then select the **Permissions** subtab.
+1. From the **Authorization System Type** dropdown, select **Azure** or **GCP**.
+1. From the **Authorization System** dropdown, select the accounts you want to access.
+1. From the **Search For** dropdown, select **Group**, **User**, or **APP/Service Account**, and then select **Apply**.
+1. Make a selection from the results list.
+
+1. To attach a role, select **Add Tasks**.
+1. In the **Add Tasks** page, from the **Available Tasks** list, select the plus sign **(+)** to move the task to the **Selected Tasks** list.
+1. When you have finished adding tasks, select **Submit**.
+1. When the following message displays: **Are you sure you want to change permission?**, select:
+ - **Generate Script** to generate a script where you can manually add/remove the permissions you selected.
+ - **Execute** to change the permission.
+ - **Close** to cancel the action.
+
+## Remove a task
+
+1. On the Entra home page, select the **Remediation** tab, and then select the **Permissions** subtab.
+1. From the **Authorization System Type** dropdown, select **Azure** or **GCP**.
+1. From the **Authorization System** dropdown, select the accounts you want to access.
+1. From the **Search For** dropdown, select **Group**, **User**, or **APP/Service Account**, and then select **Apply**.
+1. Make a selection from the results list.
+
+1. To remove a task, select **Remove Tasks**.
+1. In the **Remove Tasks** page, from the **Available Tasks** list, select the plus sign **(+)** to move the task to the **Selected Tasks** list.
+1. When you have finished selecting tasks, select **Submit**.
+1. When the following message displays: **Are you sure you want to change permission?**, select:
+ - **Generate Script** to generate a script where you can manually add/remove the permissions you selected.
+ - **Execute** to change the permission.
+ - **Close** to cancel the action.
+
+## Next steps
+
+
+- For information on how to view existing roles/policies, requests, and permissions, see [View roles/policies, requests, and permission in the Remediation dashboard](ui-remediation.md).
+- For information on how to create a role/policy, see [Create a role/policy](how-to-create-role-policy.md).
+- For information on how to clone a role/policy, see [Clone a role/policy](how-to-clone-role-policy.md).
+- For information on how to delete a role/policy, see [Delete a role/policy](how-to-delete-role-policy.md).
+- For information on how to modify a role/policy, see Modify a role/policy](how-to-modify-role-policy.md).
+- To view information about roles/policies, see [View information about roles/policies](how-to-view-role-policy.md).
+- For information on how to attach and detach permissions for Amazon Web Services (AWS) identities, see [Attach and detach policies for AWS identities](how-to-attach-detach-permissions.md).
+- For information on how to revoke high-risk and unused tasks or assign read-only status for Microsoft Azure and Google Cloud Platform (GCP) identities, see [Revoke high-risk and unused tasks or assign read-only status for Azure and GCP identities](how-to-revoke-task-readonly-status.md)
+For information on how to create or approve a request for permissions, see [Create or approve a request for permissions](how-to-create-approve-privilege-request.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-attach-detach-permissions.md b/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-attach-detach-permissions.md
new file mode 100644
index 0000000000000..fc27f20740905
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-attach-detach-permissions.md
@@ -0,0 +1,83 @@
+---
+title: Attach and detach permissions for users, roles, and groups for Amazon Web Services (AWS) identities in the Remediation dashboard in Permissions Management
+description: How to attach and detach permissions for users, roles, and groups for Amazon Web Services (AWS) identities in the Remediation dashboard in Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# Attach and detach policies for Amazon Web Services (AWS) identities
+
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+This article describes how you can attach and detach permissions for users, roles, and groups for Amazon Web Services (AWS) identities using the **Remediation** dashboard.
+
+> [!NOTE]
+> To view the **Remediation** tab, your must have **Viewer**, **Controller**, or **Administrator** permissions. To make changes on this tab, you must have **Controller** or **Administrator** permissions. If you don't have these permissions, contact your system administrator.
+
+## View permissions
+
+1. On the Permissions Management home page, select the **Remediation** tab, and then select the **Permissions** subtab.
+1. From the **Authorization System Type** dropdown, select **AWS**.
+1. From the **Authorization System** dropdown, select the accounts you want to access.
+1. From the **Search For** dropdown, select **Group**, **User**, or **Role**.
+1. To search for more parameters, you can make a selection from the **User States**, **Permission Creep Index**, and **Task Usage** dropdowns.
+1. Select **Apply**.
+ Permissions Management displays a list of users, roles, or groups that match your criteria.
+1. In **Enter a username**, enter or select a user.
+1. In **Enter a group name**, enter or select a group, then select **Apply**.
+1. Make a selection from the results list.
+
+ The table displays the related **Username** **Domain/Account**, **Source** and **Policy Name**.
+
+
+## Attach policies
+
+1. On the Permissions Management home page, select the **Remediation** tab, and then select the **Permissions** subtab.
+1. From the **Authorization System Type** dropdown, select **AWS**.
+1. In **Enter a username**, enter or select a user.
+1. In **Enter a Group Name**, enter or select a group, then select **Apply**.
+1. Make a selection from the results list.
+1. To attach a policy, select **Attach Policies**.
+1. In the **Attach Policies** page, from the **Available policies** list, select the plus sign **(+)** to move the policy to the **Selected policies** list.
+1. When you have finished adding policies, select **Submit**.
+1. When the following message displays: **Are you sure you want to change permission?**, select:
+ - **Generate Script** to generate a script where you can manually add/remove the permissions you selected.
+ - **Execute** to change the permission.
+ - **Close** to cancel the action.
+
+## Detach policies
+
+1. On the Permissions Management Permissions Management home page, select the **Remediation** tab, and then select the **Permissions** subtab.
+1. From the **Authorization System Type** dropdown, select **AWS**.
+1. In **Enter a username**, enter or select a user.
+1. In **Enter a Group Name**, enter or select a group, then select **Apply**.
+1. Make a selection from the results list.
+1. To remove a policy, select **Detach Policies**.
+1. In the **Detach Policies** page, from the **Available policies** list, select the plus sign **(+)** to move the policy to the **Selected policies** list.
+1. When you have finished selecting policies, select **Submit**.
+1. When the following message displays: **Are you sure you want to change permission?**, select:
+ - **Generate Script** to generate a script where you can manually add/remove the permissions you selected.
+ - **Execute** to change the permission.
+ - **Close** to cancel the action.
+
+## Next steps
+
+
+- For information on how to view existing roles/policies, requests, and permissions, see [View roles/policies, requests, and permission in the Remediation dashboard](ui-remediation.md).
+- For information on how to create a role/policy, see [Create a role/policy](how-to-create-role-policy.md).
+- For information on how to clone a role/policy, see [Clone a role/policy](how-to-clone-role-policy.md).
+- For information on how to delete a role/policy, see [Delete a role/policy](how-to-delete-role-policy.md).
+- For information on how to modify a role/policy, see Modify a role/policy](how-to-modify-role-policy.md).
+- To view information about roles/policies, see [View information about roles/policies](how-to-view-role-policy.md).
+- For information on how to revoke high-risk and unused tasks or assign read-only status for Microsoft Azure and Google Cloud Platform (GCP) identities, see [Revoke high-risk and unused tasks or assign read-only status for Azure and GCP identities](how-to-revoke-task-readonly-status.md)
+For information on how to create or approve a request for permissions, see [Create or approve a request for permissions](how-to-create-approve-privilege-request.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-audit-trail-results.md b/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-audit-trail-results.md
new file mode 100644
index 0000000000000..2f94f20e97959
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-audit-trail-results.md
@@ -0,0 +1,65 @@
+---
+title: Generate an on-demand report from a query in the Audit dashboard in Permissions Management
+description: How to generate an on-demand report from a query in the **Audit** dashboard in Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# Generate an on-demand report from a query
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+This article describes how you can generate an on-demand report from a query in the **Audit** dashboard in Permissions Management. You can:
+
+- Run a report on-demand.
+- Schedule and run a report as often as you want.
+- Share a report with other members of your team and management.
+
+## Generate a custom report on-demand
+
+1. In the Permissions Management home page, select the **Audit** tab.
+
+ Permissions Management displays the query options available to you.
+1. In the **Audit** dashboard, select **Search** to run the query.
+1. Select **Export**.
+
+ Permissions Management generates the report and exports it in comma-separated values (**CSV**) format, portable document format (**PDF**), or Microsoft Excel Open XML Spreadsheet (**XLSX**) format.
+
+
+
+
+## Next steps
+
+- For information on how to view how users access information, see [Use queries to see how users access information](ui-audit-trail.md).
+- For information on how to filter and view user activity, see [Filter and query user activity](product-audit-trail.md).
+- For information on how to create a query,see [Create a custom query](how-to-create-custom-queries.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-clone-role-policy.md b/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-clone-role-policy.md
new file mode 100644
index 0000000000000..9ae6da95198fe
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-clone-role-policy.md
@@ -0,0 +1,55 @@
+---
+title: Clone a role/policy in the Remediation dashboard in Permissions Management
+description: How to clone a role/policy in the Just Enough Permissions (JEP) Controller.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# Clone a role/policy in the Remediation dashboard
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+This article describes how you can use the **Remediation** dashboard in Permissions Management to clone roles/policies for the Amazon Web Services (AWS), Microsoft Azure, or Google Cloud Platform (GCP) authorization systems.
+
+> [!NOTE]
+> To view the **Remediation** tab, you must have **Viewer**, **Controller**, or **Administrator** permissions. To make changes on this tab, you must have **Controller** or **Administrator** permissions. If you don't have these permissions, contact your system administrator.
+
+> [!NOTE]
+> Microsoft Azure uses the term *role* for what other Cloud providers call *policy*. Permissions Management automatically makes this terminology change when you select the authorization system type. In the user documentation, we use *role/policy* to refer to both.
+
+## Clone a role/policy
+
+1. On the Permissions Management Permissions Management home page, select the **Remediation** tab, and then select the **Role/Policies** tab.
+1. Select the role/policy you want to clone, and from the **Actions** column, select **Clone**.
+1. **(AWS Only)** In the **Clone** box, the **Clone Resources** and **Clone Conditions** checkboxes are automatically selected.
+ Deselect the boxes if the resources and conditions are different from what is displayed.
+1. Enter a name for each authorization system that was selected in the **Policy Name** boxes, and then select **Next**.
+
+1. If the data collector hasn't been given controller privileges, the following message displays: **Only online/controller-enabled authorization systems can be submitted for cloning.**
+
+ To clone this role manually, download the script and JSON file.
+
+1. Select **Submit**.
+1. Refresh the **Role/Policies** tab to see the role/policy you cloned.
+
+## Next steps
+
+
+- For information on how to view existing roles/policies, requests, and permissions, see [View roles/policies, requests, and permission in the Remediation dashboard](ui-remediation.md).
+- For information on how to create a role/policy, see [Create a role/policy](how-to-create-role-policy.md).
+- For information on how to delete a role/policy, see [Delete a role/policy](how-to-delete-role-policy.md).
+- For information on how to modify a role/policy, see Modify a role/policy](how-to-modify-role-policy.md).
+- To view information about roles/policies, see [View information about roles/policies](how-to-view-role-policy.md).
+- For information on how to attach and detach permissions for AWS identities, see [Attach and detach policies for AWS identities](how-to-attach-detach-permissions.md).
+- For information on how to revoke high-risk and unused tasks or assign read-only status for Azure and GCP identities, see [Revoke high-risk and unused tasks or assign read-only status for Azure and GCP identities](how-to-revoke-task-readonly-status.md)
+- For information on how to create or approve a request for permissions, see [Create or approve a request for permissions](how-to-create-approve-privilege-request.md).
+- For information on how to view information about roles/policies, see [View information about roles/policies](how-to-view-role-policy.md)
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-create-alert-trigger.md b/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-create-alert-trigger.md
new file mode 100644
index 0000000000000..aa7340f908e9b
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-create-alert-trigger.md
@@ -0,0 +1,113 @@
+---
+title: Create and view activity alerts and alert triggers in Permissions Management
+description: How to create and view activity alerts and alert triggers in Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# Create and view activity alerts and alert triggers
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+This article describes how you can create and view activity alerts and alert triggers in Permissions Management.
+
+## Create an activity alert trigger
+
+1. In the Permissions Management home page, select **Activity Triggers** (the bell icon).
+1. In the **Activity** tab, select **Create Activity Trigger**.
+1. In the **Alert Name** box, enter a name for your alert.
+1. In **Authorization System Type**, select your authorization system: Amazon Web Services (**AWS**), Microsoft **Azure**, or Google Cloud Platform (**GCP**).
+1. In **Authorization System**, select **Is** or **In**, and then select one or more accounts and folders.
+1. From the **Select a Type** dropdown, select: **Access Key ID**, **Identity Tag Key**, **Identity Tag Key Value**, **Resource Name**, **Resource Tag Key**, **Resource Tag Key Value**, **Role Name**, **Role Session Name**, **State**, **Task Name**, or **Username**.
+1. From the **Operator** dropdown, select an option:
+
+ - **Is**/**Is Not**: Select in the value field to view a list of all available values. You can either select or enter the required value.
+ - **Contains**/**Not Contains**: Enter any text that the query parameter should or shouldn't contain, for example *Permissions Management*.
+ - **In**/**Not In**: Select in the value field to view list of all available values. Select the required multiple values.
+
+1. To add another parameter, select the plus sign **(+)**, then select an operator, and then enter a value.
+
+ To remove a parameter, select the minus sign **(-)**.
+1. To add another activity type, select **Add**, and then enter your parameters.
+1. To save your alert, select **Save**.
+
+ A message displays to confirm your activity trigger has been created.
+
+ The **Triggers** table in the **Alert Triggers** subtab displays your alert trigger.
+
+## View an activity alert
+
+1. In the Permissions Management home page, select **Activity Triggers** (the bell icon).
+1. In the **Activity** tab, select the **Alerts** subtab.
+1. From the **Alert Name** dropdown, select an alert.
+1. From the **Date** dropdown, select **Last 24 Hours**, **Last 2 Days**, **Last Week**, or **Custom Range**.
+
+ If you select **Custom Range**, select date and time settings, and then select **Apply**.
+1. To view the alert, select **Apply**
+
+ The **Alerts** table displays information about your alert.
+
+
+
+## View activity alert triggers
+
+1. In the Permissions Management home page, select **Activity triggers** (the bell icon).
+1. In the **Activity** tab, select the **Alert Triggers** subtab.
+1. From the **Status** dropdown, select **All**, **Activated** or **Deactivated**, then select **Apply**.
+
+ The **Triggers** table displays the following information:
+
+ - **Alerts**: The name of the alert trigger.
+ - **# of users subscribed**: The number of users who have subscribed to a specific alert trigger.
+
+ - Select a number in this column to view information about the user.
+
+ - **Created By**: The email address of the user who created the alert trigger.
+ - **Modified By**: The email address of the user who last modified the alert trigger.
+ - **Last Updated**: The date and time the alert trigger was last updated.
+ - **Subscription**: A switch that displays if the alert is **On** or **Off**.
+
+ - If the column displays **Off**, the current user isn't subscribed to that alert. Switch the toggle to **On** to subscribe to the alert.
+ - The user who creates an alert trigger is automatically subscribed to the alert, and will receive emails about the alert.
+
+1. To see only activated or only deactivated triggers, from the **Status** dropdown, select **Activated** or **Deactivated**, and then select **Apply**.
+
+1. To view other options available to you, select the ellipses (**...**), and then select from the available options.
+
+ If the **Subscription** is **On**, the following options are available:
+
+ - **Edit**: Enables you to modify alert parameters
+
+ > [!NOTE]
+ > Only the user who created the alert can perform the following actions: edit the trigger screen, rename an alert, deactivate an alert, and delete an alert. Changes made by other users aren't saved.
+
+ - **Duplicate**: Create a duplicate of the alert called "**Copy of XXX**".
+ - **Rename**: Enter the new name of the query, and then select **Save.**
+ - **Deactivate**: The alert will still be listed, but will no longer send emails to subscribed users.
+ - **Activate**: Activate the alert trigger and start sending emails to subscribed users.
+ - **Notification Settings**: View the **Email** of users who are subscribed to the alert trigger and their **User Status**.
+ - **Delete**: Delete the alert.
+
+ If the **Subscription** is **Off**, the following options are available:
+ - **View**: View details of the alert trigger.
+ - **Notification Settings**: View the **Email** of users who are subscribed to the alert trigger and their **User Status**.
+ - **Duplicate**: Create a duplicate copy of the selected alert trigger.
+
+
+
+
+## Next steps
+
+- For an overview on activity triggers, see [View information about activity triggers](ui-triggers.md).
+- For information on rule-based anomalies and anomaly triggers, see [Create and view rule-based anomalies and anomaly triggers](product-rule-based-anomalies.md).
+- For information on finding outliers in identity's behavior, see [Create and view statistical anomalies and anomaly triggers](product-statistical-anomalies.md).
+- For information on permission analytics triggers, see [Create and view permission analytics triggers](product-permission-analytics.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-create-approve-privilege-request.md b/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-create-approve-privilege-request.md
new file mode 100644
index 0000000000000..9b71b530ad173
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-create-approve-privilege-request.md
@@ -0,0 +1,120 @@
+---
+title: Create or approve a request for permissions in the Remediation dashboard in Permissions Management
+description: How to create or approve a request for permissions in the Remediation dashboard.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# Create or approve a request for permissions
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+This article describes how to create or approve a request for permissions in the **Remediation** dashboard in Permissions Management. You can create and approve requests for the Amazon Web Services (AWS), Microsoft Azure, or Google Cloud Platform (GCP) authorization systems.
+
+The **Remediation** dashboard has two privilege-on-demand (POD) workflows you can use:
+- **New Request**: The workflow used by a user to create a request for permissions for a specified duration.
+- **Approver**: The workflow used by an approver to review and approve or reject a user's request for permissions.
+
+
+> [!NOTE]
+> To view the **Remediation** dashboard, you must have **Viewer**, **Controller**, or **Administrator** permissions. To make changes on this tab, you must have **Controller** or **Administrator** permissions. If you don't have these permissions, contact your system administrator.
+
+## Create a request for permissions
+
+1. On the Permissions Management home page, select the **Remediation** tab, and then select the **My Requests** subtab.
+
+ The **My Requests** subtab displays the following options:
+ - **Pending**: A list of requests you've made but haven't yet been reviewed.
+ - **Approved**: A list of requests that have been reviewed and approved by the approver. These requests have either already been activated or are in the process of being activated.
+ - **Processed**: A summary of the requests you've created that have been approved (**Done**), **Rejected**, and requests that have been **Canceled**.
+
+1. To create a request for permissions, select **New Request**.
+1. In the **Roles/Tasks** page:
+ 1. From the **Authorization System Type** dropdown, select the authorization system type you want to access: **AWS**, **Azure** or **GCP**.
+ 1. From the **Authorization System** dropdown, select the accounts you want to access.
+ 1. From the **Identity** dropdown, select the identity on whose behalf you're requesting access.
+
+ - If the identity you select is a Security Assertions Markup Language (SAML) user, and since a SAML user accesses the system through assumption of a role, select the user's role in **Role**.
+
+ - If the identity you select is a local user, to select the policies you want:
+ 1. Select **Request Policy(s)**.
+ 1. In **Available Policies**, select the policies you want.
+ 1. To select a specific policy, select the plus sign, and then find and select the policy you want.
+
+ The policies you've selected appear in the **Selected policies** box.
+
+ - If the identity you select is a local user, to select the tasks you want:
+ 1. Select **Request Task(s)**.
+ 1. In **Available Tasks**, select the tasks you want.
+ 1. To select a specific task, select the plus sign, and then select the task you want.
+
+ The tasks you've selected appear in the **Selected Tasks** box.
+
+ If the user already has existing policies, they're displayed in **Existing Policies**.
+1. Select **Next**.
+
+1. If you selected **AWS**, the **Scope** page appears.
+
+ 1. In **Select Scope**, select:
+ - **All Resources**
+ - **Specific Resources**, and then select the resources you want.
+ - **No Resources**
+ 1. In **Request Conditions**:
+ 1. Select **JSON** to add a JSON block of code.
+ 1. Select **Done** to accept the code you've entered, or **Clear** to delete what you've entered and start again.
+ 1. In **Effect**, select **Allow** or **Deny.**
+ 1. Select **Next**.
+
+1. The **Confirmation** page appears.
+1. In **Request Summary**, enter a summary for your request.
+1. Optional: In **Note**, enter a note for the approver.
+1. In **Schedule**, select when (how quickly) you want your request to be processed:
+ - **ASAP**
+ - **Once**
+ - In **Create Schedule**, select the **Frequency**, **Date**, **Time**, and **For** the required duration, then select **Schedule**.
+ - **Daily**
+ - **Weekly**
+ - **Monthly**
+1. Select **Submit**.
+
+ The following message appears: **Your Request Has Been Successfully Submitted.**
+
+ The request you submitted is now listed in **Pending Requests**.
+
+## Approve or reject a request for permissions
+
+1. On the Permissions Management home page, select the **Remediation** tab, and then select the **My requests** subtab.
+1. To view a list of requests that haven't yet been reviewed, select **Pending Requests**.
+1. In the **Request Summary** list, select the ellipses **(…)** menu on the right of a request, and then select:
+
+ - **Details** to view the details of the request.
+ - **Approve** to approve the request.
+ - **Reject** to reject the request.
+
+1. (Optional) add a note to the requestor, and then select **Confirm.**
+
+ The **Approved** subtab displays a list of requests that have been reviewed and approved by the approver. These requests have either already been activated or are in the process of being activated.
+ The **Processed** subtab displays a summary of the requests that have been approved or rejected, and requests that have been canceled.
+
+
+## Next steps
+
+
+- For information on how to view existing roles/policies, requests, and permissions, see [View roles/policies, requests, and permission in the Remediation dashboard](ui-remediation.md).
+- For information on how to create a role/policy, see [Create a role/policy](how-to-create-role-policy.md).
+- For information on how to clone a role/policy, see [Clone a role/policy](how-to-clone-role-policy.md).
+- For information on how to delete a role/policy, see [Delete a role/policy](how-to-delete-role-policy.md).
+- For information on how to modify a role/policy, see Modify a role/policy](how-to-modify-role-policy.md).
+- To view information about roles/policies, see [View information about roles/policies](how-to-view-role-policy.md).
+- For information on how to attach and detach permissions for Amazon Web Services (AWS) identities, see [Attach and detach policies for AWS identities](how-to-attach-detach-permissions.md).
+- For information on how to add and remove roles and tasks for Microsoft Azure and Google Cloud Platform (GCP) identities, see [Add and remove roles and tasks for Azure and GCP identities](how-to-attach-detach-permissions.md).
+- For information on how to revoke high-risk and unused tasks or assign read-only status for Microsoft Azure and Google Cloud Platform (GCP) identities, see [Revoke high-risk and unused tasks or assign read-only status for Azure and GCP identities](how-to-revoke-task-readonly-status.md)
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-create-custom-queries.md b/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-create-custom-queries.md
new file mode 100644
index 0000000000000..fa299568213f7
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-create-custom-queries.md
@@ -0,0 +1,121 @@
+---
+title: Create a custom query in Permissions Management
+description: How to create a custom query in the Audit dashboard in Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# Create a custom query
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+This article describes how you can use the **Audit** dashboard in Permissions Management to create custom queries that you can modify, save, and run as often as you want.
+
+## Open the Audit dashboard
+
+- In the Permissions Management home page, select the **Audit** tab.
+
+ Permissions Management displays the query options available to you.
+
+## Create a custom query
+
+1. In the **Audit** dashboard, in the **New Query** subtab, select **Authorization System Type**, and then select the authorization systems you want to search: Amazon Web Services (**AWS**), Microsoft **Azure**, Google Cloud Platform (**GCP**), or Platform (**Platform**).
+1. Select the authorization systems you want to search from the **List** and **Folders** box, and then select **Apply**.
+
+1. In the **New Query** box, enter your query parameters, and then select **Add**.
+ For example, to query by a date, select **Date** in the first box. In the second and third boxes, select the down arrow, and then select one of the date-related options.
+
+1. To add parameters, select **Add**, select the down arrow in the first box to display a dropdown of available selections. Then select the parameter you want.
+1. To add more parameters to the same query, select **Add** (the plus sign), and from the first box, select **And** or **Or**.
+
+ Repeat this step for the second and third box to complete entering the parameters.
+1. To change your query as you're creating it, select **Edit** (the pencil icon), and then change the query parameters.
+1. To change the parameter options, select the down arrow in each box to display a dropdown of available selections. Then select the option you want.
+1. To discard your selections, select **Reset Query** for the parameter you want to change, and then make your selections again.
+1. When you're ready to run your query, select **Search**.
+1. To save the query, select **Save**.
+
+ Permissions Management saves the query and adds it to the **Saved Queries** list.
+
+## Save the query under a new name
+
+1. In the **Audit** dashboard, select the ellipses menu **(…)** on the far right and select **Save As**.
+2. Enter a new name for the query, and then select **Save**.
+
+ Permissions Management saves the query under the new name. Both the new query and the original query display in the **Saved Queries** list.
+
+## View a saved query
+
+1. In the **Audit** dashboard, select the down arrow next to **Saved Queries**.
+
+ A list of saved queries appears.
+2. Select the query you want to open.
+3. To open the query with the authorization systems you saved with the query, select **Load with the saved authorization systems**.
+4. To open the query with the authorization systems you have currently selected (which may be different from the ones you originally saved), select **Load with the currently selected authorization systems**.
+5. Select **Load Queries**.
+
+ Permissions Management displays details of the query in the **Activity** table. Select a query to see its details:
+
+ - The **Identity Details**.
+ - The **Domain** name.
+ - The **Resource Name** and **Resource Type**.
+ - The **Task Name**.
+ - The **Date**.
+ - The **IP Address**.
+ - The **Authorization System**.
+
+## View a raw events summary
+
+1. In the **Audit** dashboard, select **View** (the eye icon) to open the **Raw Events Summary** box.
+
+ The **Raw Events Summary** box displays **Username or Role Session Name**, the **Task name**, and the script for your query.
+1. Select **Copy** to copy the script.
+1. Select **X** to close the **Raw events summary** box.
+
+
+## Run a saved query
+
+1. In the **Audit** dashboard, select the query you want to run.
+
+ Permissions Management displays the results of the query in the **Activity** table.
+
+## Delete a query
+
+1. In the **Audit** dashboard, load the query you want to delete.
+2. Select **Delete**.
+
+ Permissions Management deletes the query. Deleted queries don't display in the **Saved Queries** list.
+
+## Rename a query
+
+1. In the **Audit** dashboard, load the query you want to rename.
+2. Select the ellipses menu **(…)** on the far right, and select **Rename**.
+3. Enter a new name for the query, and then select **Save**.
+
+ Permissions Management saves the query under the new name. Both the new query and the original query display in the **Saved Queries** list.
+
+## Duplicate a query
+
+1. In the **Audit** dashboard, load the query you want to duplicate.
+2. Select the ellipses menu **(…)** on the far right, and then select **Duplicate**.
+
+ Permissions Management creates a copy of the query. Both the copy of the query and the original query display in the **Saved Queries** list.
+
+ You can rename the original or copy of the query, change it, and save it without changing the other query.
+
+
+
+## Next steps
+
+- For information on how to view how users access information, see [Use queries to see how users access information](ui-audit-trail.md).
+- For information on how to filter and view user activity, see [Filter and query user activity](product-audit-trail.md).
+- For information on how to generate an on-demand report from a query, see [Generate an on-demand report from a query](how-to-audit-trail-results.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-create-group-based-permissions.md b/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-create-group-based-permissions.md
new file mode 100644
index 0000000000000..51cc754dc8906
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-create-group-based-permissions.md
@@ -0,0 +1,56 @@
+---
+title: Select group-based permissions settings in Permissions Management with the User management dashboard
+description: How to select group-based permissions settings in Permissions Management with the User management dashboard.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# Select group-based permissions settings
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+This article describes how you can create and manage group-based permissions in Permissions Management with the User management dashboard.
+
+[!NOTE] The Permissions Management Administrator for all authorization systems will be able to create the new group based permissions.
+
+## Select administrative permissions settings for a group
+
+1. To display the **User Management** dashboard, select **User** (your initials) in the upper right of the screen, and then select **User Management**.
+1. Select the **Groups** tab, and then press the **Create Permission** button in the upper right of the table.
+1. In the **Set Group Permission** box, begin typing the name of an **Azure Active Directory Security Group** in your tenant.
+
+1. Select the permission setting you want:
+2.
+ - **Admin for all Authorization System Types** provides **View**, **Control**, and **Approve** permissions for all authorization system types.
+ - **Admin for selected Authorization System Types** provides **View**, **Control**, and **Approve** permissions for selected authorization system types.
+ - **Custom** allows you to set **View**, **Control**, and **Approve** permissions for the authorization system types that you select.
+1. Select **Next**
+
+1. If you selected **Admin for all Authorization System Types**
+ - Select Identities for each Authorization System that you would like members of this group to Request on.
+
+1. If you selected **Admin for selected Authorization System Types**
+ - Select **Viewer**, **Controller**, or **Approver** for the **Authorization System Types** you want.
+ - Select **Next** and then select Identities for each Authorization System that you would like members of this group to Request on.
+
+1. If you select **Custom**, select the **Authorization System Types** you want.
+ - Select **Viewer**, **Controller**, or **Approver** for the **Authorization Systems** you want.
+ - Select **Next** and then select Identities for each Authorization System that you would like members of this group to Request on.
+
+1. Select **Save**, The following message appears: **New Group Has been Created Successfully.**
+1. To see the group you created in the **Groups** table, refresh the page.
+
+## Next steps
+
+- For information about how to manage user information, see [Manage users and groups with the User management dashboard](ui-user-management.md).
+- For information about how to view information about active and completed tasks, see [View information about active and completed tasks](ui-tasks.md).
+- For information about how to view personal and organization information, see [View personal and organization information](product-account-settings.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-create-role-policy.md b/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-create-role-policy.md
new file mode 100644
index 0000000000000..cd2a8f0ab8be8
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-create-role-policy.md
@@ -0,0 +1,171 @@
+---
+title: Create a role/policy in the Remediation dashboard in Permissions Management
+description: How to create a role/policy in the Remediation dashboard in Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# Create a role/policy in the Remediation dashboard
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+This article describes how you can use the **Remediation** dashboard in Permissions Management to create roles/policies for the Amazon Web Services (AWS), Microsoft Azure, or Google Cloud Platform (GCP) authorization systems.
+
+> [!NOTE]
+> To view the **Remediation** tab, you must have **Viewer**, **Controller**, or **Administrator** permissions. To make changes on this tab, you must have **Controller** or **Administrator** permissions. If you don't have these permissions, contact your system administrator.
+
+> [!NOTE]
+> Microsoft Azure uses the term *role* for what other cloud providers call *policy*. Permissions Management automatically makes this terminology change when you select the authorization system type. In the user documentation, we use *role/policy* to refer to both.
+
+## Create a policy for AWS
+
+1. On the Entra home page, select the **Remediation** tab, and then select the **Role/Policies** tab.
+1. Use the dropdown lists to select the **Authorization System Type** and **Authorization System**.
+1. Select **Create Policy**.
+1. On the **Details** page, the **Authorization System Type** and **Authorization System** are pre-populated from your previous settings.
+ - To change the settings, make a selection from the dropdown.
+1. Under **How Would You Like To Create The Policy**, select the required option:
+
+ - **Activity of User(s)**: Allows you to create a policy based on user activity.
+ - **Activity of Group(s)**: Allows you to create a policy based on the aggregated activity of all the users belonging to the group(s).
+ - **Activity of Resource(s)**: Allows you to create a policy based on the activity of a resource, for example, an EC2 instance.
+ - **Activity of Role**: Allows you to create a policy based on the aggregated activity of all the users that assumed the role.
+ - **Activity of Tag(s)**: Allows you to create a policy based on the aggregated activity of all the tags.
+ - **Activity of Lambda Function**: Allows you to create a new policy based on the Lambda function.
+ - **From Existing Policy**: Allows you to create a new policy based on an existing policy.
+ - **New Policy**: Allows you to create a new policy from scratch.
+1. In **Tasks performed in last**, select the duration: **90 days**, **60 days**, **30 days**, **7 days**, or **1 day**.
+1. Depending on your preference, select or deselect **Include Access Advisor data.**
+1. In **Settings**, from the **Available** column, select the plus sign **(+)** to move the identity into the **Selected** column, and then select **Next**.
+
+1. On the **Tasks** page, from the **Available** column, select the plus sign **(+)** to move the task into the **Selected** column.
+ - To add a whole category, select a category.
+ - To add individual items from a category, select the down arrow on the left of the category name, and then select individual items.
+1. In **Resources**, select **All Resources** or **Specific Resources**.
+
+ If you select **Specific Resources**, a list of available resources appears. Find the resources you want to add, and then select **Add**.
+1. In **Request Conditions**, select **JSON** .
+1. In **Effect**, select **Allow** or **Deny**, and then select **Next**.
+1. In **Policy name:**, enter a name for your policy.
+1. To add another statement to your policy, select **Add Statement**, and then, from the list of **Statements**, select a statement.
+1. Review your **Task**, **Resources**, **Request Conditions**, and **Effect** settings, and then select **Next**.
+
+
+1. On the **Preview** page, review the script to confirm it's what you want.
+1. If your controller isn't enabled, select **Download JSON** or **Download Script** to download the code and run it yourself.
+
+ If your controller is enabled, skip this step.
+1. Select **Split Policy**, and then select **Submit**.
+
+ A message confirms that your policy has been submitted for creation
+
+1. The [**Permissions Management Tasks**](ui-tasks.md) pane appears on the right.
+ - The **Active** tab displays a list of the policies Permissions Management is currently processing.
+ - The **Completed** tab displays a list of the policies Permissions Management has completed.
+1. Refresh the **Role/Policies** tab to see the policy you created.
+
+
+
+## Create a role for Azure
+
+1. On the Permissions Management home page, select the **Remediation** tab, and then select the **Role/Policies** tab.
+1. Use the dropdown lists to select the **Authorization System Type** and **Authorization System**.
+1. Select **Create Role**.
+1. On the **Details** page, the **Authorization System Type** and **Authorization System** are pre-populated from your previous settings.
+ - To change the settings, select the box and make a selection from the dropdown.
+1. Under **How Would You Like To Create The Role?**, select the required option:
+
+ - **Activity of User(s)**: Allows you to create a role based on user activity.
+ - **Activity of Group(s)**: Allows you to create a role based on the aggregated activity of all the users belonging to the group(s).
+ - **Activity of App(s)**: Allows you to create a role based on the aggregated activity of all apps.
+ - **From Existing Role**: Allows you to create a new role based on an existing role.
+ - **New Role**: Allows you to create a new role from scratch.
+
+1. In **Tasks performed in last**, select the duration: **90 days**, **60 days**, **30 days**, **7 days**, or **1 day**.
+1. Depending on your preference:
+ - Select or deselect **Ignore Non-Microsoft Read Actions**.
+ - Select or deselect **Include Read-Only Tasks**.
+1. In **Settings**, from the **Available** column, select the plus sign **(+)** to move the identity into the **Selected** column, and then select **Next**.
+
+1. On the **Tasks** page, in **Role name:**, enter a name for your role.
+1. From the **Available** column, select the plus sign **(+)** to move the task into the **Selected** column.
+ - To add a whole category, select a category.
+ - To add individual items from a category, select the down arrow on the left of the category name, and then select individual items.
+1. Select **Next**.
+
+1. On the **Preview** page, review:
+ - The list of selected **Actions** and **Not Actions**.
+ - The **JSON** or **Script** to confirm it's what you want.
+1. If your controller isn't enabled, select **Download JSON** or **Download Script** to download the code and run it yourself.
+
+ If your controller is enabled, skip this step.
+
+1. Select **Submit**.
+
+ A message confirms that your role has been submitted for creation
+
+1. The [**Permissions Management Tasks**](ui-tasks.md) pane appears on the right.
+ - The **Active** tab displays a list of the policies Permissions Management is currently processing.
+ - The **Completed** tab displays a list of the policies Permissions Management has completed.
+1. Refresh the **Role/Policies** tab to see the role you created.
+
+## Create a role for GCP
+
+1. On the Permissions Management home page, select the **Remediation** tab, and then select the **Role/Policies** tab.
+1. Use the dropdown lists to select the **Authorization System Type** and **Authorization System**.
+1. Select **Create Role**.
+1. On the **Details** page, the **Authorization System Type** and **Authorization System** are pre-populated from your previous settings.
+ - To change the settings, select the box and make a selection from the dropdown.
+1. Under **How Would You Like To Create The Role?**, select the required option:
+
+ - **Activity of User(s)**: Allows you to create a role based on user activity.
+ - **Activity of Group(s)**: Allows you to create a role based on the aggregated activity of all the users belonging to the group(s).
+ - **Activity of Service Account(s)**: Allows you to create a role based on the aggregated activity of all service accounts.
+ - **From Existing Role**: Allows you to create a new role based on an existing role.
+ - **New Role**: Allows you to create a new role from scratch.
+
+1. In **Tasks performed in last**, select the duration: **90 days**, **60 days**, **30 days**, **7 days**, or **1 day**.
+1. If you selected **Activity Of Service Account(s)** in the previous step, select or deselect **Collect activity across all GCP Authorization Systems.**
+1. From the **Available** column, select the plus sign **(+)** to move the identity into the **Selected** column, and then select **Next**.
+
+
+1. On the **Tasks** page, in **Role name:**, enter a name for your role.
+1. From the **Available** column, select the plus sign **(+)** to move the task into the **Selected** column.
+ - To add a whole category, select a category.
+ - To add individual items from a category, select the down arrow on the left of the category name, and then select individual items.
+1. Select **Next**.
+
+1. On the **Preview** page, review:
+ - The list of selected **Actions**.
+ - The **YAML** or **Script** to confirm it's what you want.
+1. If your controller isn't enabled, select **Download YAML** or **Download Script** to download the code and run it yourself.
+1. Select **Submit**.
+ A message confirms that your role has been submitted for creation
+
+1. The [**Permissions Management Tasks**](ui-tasks.md) pane appears on the right.
+
+ - The **Active** tab displays a list of the policies Permissions Management is currently processing.
+ - The **Completed** tab displays a list of the policies Permissions Management has completed.
+1. Refresh the **Role/Policies** tab to see the role you created.
+
+
+## Next steps
+
+- For information on how to view existing roles/policies, requests, and permissions, see [View roles/policies, requests, and permission in the Remediation dashboard](ui-remediation.md).
+- For information on how to modify a role/policy, see [Modify a role/policy](how-to-modify-role-policy.md).
+- For information on how to clone a role/policy, see [Clone a role/policy](how-to-clone-role-policy.md).
+- For information on how to delete a role/policy, see [Delete a role/policy](how-to-delete-role-policy.md).
+- To view information about roles/policies, see [View information about roles/policies](how-to-view-role-policy.md).
+- For information on how to attach and detach permissions for AWS identities, see [Attach and detach policies for AWS identities](how-to-attach-detach-permissions.md).
+- For information on how to revoke high-risk and unused tasks or assign read-only status for Azure and GCP identities, see [Revoke high-risk and unused tasks or assign read-only status for Azure and GCP identities](how-to-revoke-task-readonly-status.md)
+- For information on how to create or approve a request for permissions, see [Create or approve a request for permissions](how-to-create-approve-privilege-request.md).
+- For information on how to view information about roles/policies, see [View information about roles/policies](how-to-view-role-policy.md)
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-create-rule.md b/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-create-rule.md
new file mode 100644
index 0000000000000..d2da0287aecb9
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-create-rule.md
@@ -0,0 +1,71 @@
+---
+title: Create a rule in the Autopilot dashboard in Permissions Management
+description: How to create a rule in the Autopilot dashboard in Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# Create a rule in the Autopilot dashboard
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+This article describes how to create a rule in the Permissions Management **Autopilot** dashboard.
+
+> [!NOTE]
+> Only users with **Administrator** permissions can view and make changes on the Autopilot tab. If you don't have these permissions, contact your system administrator.
+
+## Create a rule
+
+1. In the Permissions Management home page, select the **Autopilot** tab.
+1. In the **Autopilot** dashboard, from the **Authorization system types** dropdown, select Amazon Web Services (**AWS**), Microsoft **Azure**, or Google Cloud Platform (**GCP**).
+1. From the **Authorization System** dropdown, in the **List** and **Folders** box, select the account and folder names that you want, and then select **Apply**.
+1. In the **Autopilot** dashboard, select **New Rule**.
+1. In the **Rule Name** box, enter a name for your rule.
+1. Select **AWS**, **Azure**, **GCP**, and then select **Next**.
+
+1. Select **Authorization Systems**, and then select **All** or the account names that you want.
+1. From the **Folders** dropdown, select a folder, and then select **Apply**.
+
+ To change your folder settings, select **Reset**.
+
+ - The **Status** column displays if the authorization system is **Online** or **Offline**.
+ - The **Controller** column displays if the controller is **Enabled** or **Not Enabled**.
+
+
+1. Select **Configure** , and then select the following parameters for your rule:
+
+ - **Role Created On Is**: Select the duration in days.
+ - **Role Last Used On Is**: Select the duration in days when the role was last used.
+ - **Cross Account Role**: Select **True** or **False**.
+
+1. Select **Mode**, and then, if you want recommendations to be generated and applied manually, select **On-Demand**.
+1. Select **Save**
+
+ The following information displays in the **Autopilot Rules** table:
+
+ - **Rule Name**: The name of the rule.
+ - **State**: The status of the rule: idle (not being use) or active (being used).
+ - **Rule Type**: The type of rule being applied.
+ - **Mode**: The status of the mode: on-demand or not.
+ - **Last Generated**: The date and time the rule was last generated.
+ - **Created By**: The email address of the user who created the rule.
+ - **Last Modified On**: The date and time the rule was last modified.
+ - **Subscription**: Provides an **On** or **Off** switch that allows you to receive email notifications when recommendations have been generated, applied, or unapplied.
+
+
+
+
+## Next steps
+
+- For more information about viewing rules, see [View roles in the Autopilot dashboard](ui-autopilot.md).
+- For information about generating, viewing, and applying rule recommendations for rules, see [Generate, view, and apply rule recommendations for rules](how-to-recommendations-rule.md).
+- For information about notification settings for rules, see [View notification settings for a rule](how-to-notifications-rule.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-delete-role-policy.md b/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-delete-role-policy.md
new file mode 100644
index 0000000000000..6cb3b89f7592c
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-delete-role-policy.md
@@ -0,0 +1,51 @@
+---
+title: Delete a role/policy in the Remediation dashboard in Permissions Management
+description: How to delete a role/policy in the Just Enough Permissions (JEP) Controller.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# Delete a role/policy in the Remediation dashboard
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+This article describes how you can use the **Remediation** dashboard in Permissions Management to delete roles/policies for the Amazon Web Services (AWS), Microsoft Azure, or Google Cloud Platform (GCP) authorization systems.
+
+> [!NOTE]
+> To view the **Remediation** dashboard, you must have **Viewer**, **Controller**, or **Administrator** permissions. To make changes on this tab, you must have **Controller** or **Administrator** permissions. If you don't have these permissions, contact your system administrator.
+
+> [!NOTE]
+> Microsoft Azure uses the term *role* for what other Cloud providers call *policy*. Permissions Management automatically makes this terminology change when you select the authorization system type. In the user documentation, we use *role/policy* to refer to both.
+
+## Delete a role/policy
+
+1. On the Permissions Management home page, select the **Remediation** tab, and then select the **Role/Policies** subtab.
+1. Select the role/policy you want to delete, and from the **Actions** column, select **Delete**.
+
+ You can only delete a role/policy if it isn't assigned to an identity.
+
+ You can't delete system roles/policies.
+
+1. On the **Preview** page, review the role/policy information to make sure you want to delete it, and then select **Submit**.
+
+## Next steps
+
+
+- For information on how to view existing roles/policies, requests, and permissions, see [View roles/policies, requests, and permission in the Remediation dashboard](ui-remediation.md).
+- For information on how to create a role/policy, see [Create a role/policy](how-to-create-role-policy.md).
+- For information on how to clone a role/policy, see [Clone a role/policy](how-to-clone-role-policy.md).
+- For information on how to modify a role/policy, see Modify a role/policy](how-to-modify-role-policy.md).
+- To view information about roles/policies, see [View information about roles/policies](how-to-view-role-policy.md).
+- For information on how to attach and detach permissions for AWS identities, see [Attach and detach policies for AWS identities](how-to-attach-detach-permissions.md).
+- For information on how to revoke high-risk and unused tasks or assign read-only status for Azure and GCP identities, see [Revoke high-risk and unused tasks or assign read-only status for Azure and GCP identities](how-to-revoke-task-readonly-status.md)
+- For information on how to create or approve a request for permissions, see [Create or approve a request for permissions](how-to-create-approve-privilege-request.md).
+- For information on how to view information about roles/policies, see [View information about roles/policies](how-to-view-role-policy.md)
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-modify-role-policy.md b/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-modify-role-policy.md
new file mode 100644
index 0000000000000..8c51e75c7c2f7
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-modify-role-policy.md
@@ -0,0 +1,50 @@
+---
+title: Modify a role/policy in the Remediation dashboard in Permissions Management
+description: How to modify a role/policy in the Remediation dashboard in Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# Modify a role/policy in the Remediation dashboard
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+This article describes how you can use the **Remediation** dashboard in Permissions Management to modify roles/policies for the Amazon Web Services (AWS), Microsoft Azure, or Google Cloud Platform (GCP) authorization systems.
+
+> [!NOTE]
+> To view the **Remediation** tab, you must have **Viewer**, **Controller**, or **Administrator** permissions. To make changes on this tab, you must have **Controller** or **Administrator** permissions. If you don't have these permissions, contact your system administrator.
+
+> [!NOTE]
+> Microsoft Azure uses the term *role* for what other cloud providers call *policy*. Permissions Management automatically makes this terminology change when you select the authorization system type. In the user documentation, we use *role/policy* to refer to both.
+
+## Modify a role/policy
+
+1. On the Permissions Management home page, select the **Remediation** tab, and then select the **Role/Policies** tab.
+1. Select the role/policy you want to modify, and from the **Actions** column, select **Modify**.
+
+ You can't modify **System** policies and roles.
+
+1. On the **Statements** page, make your changes to the **Tasks**, **Resources**, **Request conditions**, and **Effect** sections as required, and then select **Next**.
+
+1. Review the changes to the JSON or script on the **Preview** page, and then select **Submit**.
+
+## Next steps
+
+- For information on how to view existing roles/policies, requests, and permissions, see [View roles/policies, requests, and permission in the Remediation dashboard](ui-remediation.md).
+- For information on how to create a role/policy, see [Create a role/policy](how-to-create-role-policy.md).
+- For information on how to clone a role/policy, see [Clone a role/policy](how-to-clone-role-policy.md).
+- For information on how to delete a role/policy, see [Delete a role/policy](how-to-delete-role-policy.md).
+- To view information about roles/policies, see [View information about roles/policies](how-to-view-role-policy.md).
+- For information on how to attach and detach permissions for AWS identities, see [Attach and detach policies for AWS identities](how-to-attach-detach-permissions.md).
+- For information on how to revoke high-risk and unused tasks or assign read-only status for Azure and GCP identities, see [Revoke high-risk and unused tasks or assign read-only status for Azure and GCP identities](how-to-revoke-task-readonly-status.md)
+- For information on how to create or approve a request for permissions, see [Create or approve a request for permissions](how-to-create-approve-privilege-request.md).
+- For information on how to view information about roles/policies, see [View information about roles/policies](how-to-view-role-policy.md)
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-notifications-rule.md b/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-notifications-rule.md
new file mode 100644
index 0000000000000..08e466861d3f9
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-notifications-rule.md
@@ -0,0 +1,44 @@
+---
+title: View notification settings for a rule in the Autopilot dashboard in Permissions Management
+description: How to view notification settings for a rule in the Autopilot dashboard in Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# View notification settings for a rule in the Autopilot dashboard
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+This article describes how to view notification settings for a rule in the Permissions Management **Autopilot** dashboard.
+
+> [!NOTE]
+> Only users with **Administrator** permissions can view and make changes on the Autopilot tab. If you don't have these permissions, contact your system administrator.
+
+## View notification settings for a rule
+
+1. In the Permissions Management home page, select the **Autopilot** tab.
+1. In the **Autopilot** dashboard, from the **Authorization system types** dropdown, select Amazon Web Services (**AWS**), Microsoft **Azure**, or Google Cloud Platform (**GCP**).
+1. From the **Authorization System** dropdown, in the **List** and **Folders** box, select the account and folder names that you want, and then select **Apply**.
+1. In the **Autopilot** dashboard, select a rule.
+1. In the far right of the row, select the ellipses **(...)**
+1. To view notification settings for a rule, select **Notification Settings**.
+
+ Permissions Management displays a list of subscribed users. These users are signed up to receive notifications for the selected rule.
+
+1. To close the **Notification Settings** box, select **Close**.
+
+
+## Next steps
+
+- For more information about viewing rules, see [View roles in the Autopilot dashboard](ui-autopilot.md).
+- For information about creating rules, see [Create a rule](how-to-create-rule.md).
+- For information about generating, viewing, and applying rule recommendations for rules, see [Generate, view, and apply rule recommendations for rules](how-to-recommendations-rule.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-recommendations-rule.md b/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-recommendations-rule.md
new file mode 100644
index 0000000000000..2d83f8b4a4693
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-recommendations-rule.md
@@ -0,0 +1,88 @@
+---
+title: Generate, view, and apply rule recommendations in the Autopilot dashboard in Permissions Management
+description: How to generate, view, and apply rule recommendations in the Autopilot dashboard in Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# Generate, view, and apply rule recommendations in the Autopilot dashboard
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+This article describes how to generate and view rule recommendations in the Permissions Management **Autopilot** dashboard.
+
+> [!NOTE]
+> Only users with **Administrator** permissions can view and make changes on the Autopilot tab. If you don't have these permissions, contact your system administrator.
+
+## Generate rule recommendations
+
+1. In the Permissions Management home page, select the **Autopilot** tab.
+1. In the **Autopilot** dashboard, from the **Authorization system types** dropdown, select Amazon Web Services (**AWS**), Microsoft **Azure**, or Google Cloud Platform (**GCP**).
+1. From the **Authorization System** dropdown, in the **List** and **Folders** box, select the account and folder names that you want, and then select **Apply**.
+1. In the **Autopilot** dashboard, select a rule.
+1. In the far right of the row, select the ellipses **(...)**.
+1. To generate recommendations for each user and the authorization system, select **Generate Recommendations**.
+
+ Only the user who created the selected rule can generate a recommendation.
+1. View your recommendations in the **Recommendations** subtab.
+1. Select **Close** to close the **Recommendations** subtab.
+
+## View rule recommendations
+
+1. In the Permissions Management home page, select the **Autopilot** tab.
+1. In the **Autopilot** dashboard, from the **Authorization system types** dropdown, select Amazon Web Services (**AWS**), Microsoft **Azure**, or Google Cloud Platform (**GCP**).
+1. From the **Authorization System** dropdown, in the **List** and **Folders** box, select the account and folder names that you want, and then select **Apply**.
+1. In the **Autopilot** dashboard, select a rule.
+1. In the far right of the row, select the ellipses **(...)**
+
+1. To view recommendations for each user and the authorization system, select **View Recommendations**.
+
+ Permissions Management displays the recommendations for each user and authorization system in the **Recommendations** subtab.
+
+1. Select **Close** to close the **Recommendations** subtab.
+
+## Apply rule recommendations
+
+1. In the Permissions Management home page, select the **Autopilot** tab.
+1. In the **Autopilot** dashboard, from the **Authorization system types** dropdown, select Amazon Web Services (**AWS**), Microsoft **Azure**, or Google Cloud Platform (**GCP**).
+1. From the **Authorization System** dropdown, in the **List** and **Folders** box, select the account and folder names that you want, and then select **Apply**.
+1. In the **Autopilot** dashboard, select a rule.
+1. In the far right of the row, select the ellipses **(...)**
+
+1. To view recommendations for each user and the authorization system, select **View Recommendations**.
+
+ Permissions Management displays the recommendations for each user and authorization system in the **Recommendations** subtab.
+
+1. To apply a recommendation, select the **Apply Recommendations** subtab, and then select a recommendation.
+1. Select **Close** to close the **Recommendations** subtab.
+
+## Unapply rule recommendations
+
+1. In the Permissions Management home page, select the **Autopilot** tab.
+1. In the **Autopilot** dashboard, from the **Authorization system types** dropdown, select Amazon Web Services (**AWS**), Microsoft **Azure**, or Google Cloud Platform (**GCP**).
+1. From the **Authorization System** dropdown, in the **List** and **Folders** box, select the account and folder names that you want, and then select **Apply**.
+1. In the **Autopilot** dashboard, select a rule.
+1. In the far right of the row, select the ellipses **(...)**
+
+1. To view recommendations for each user and the authorization system, select **View Recommendations**.
+
+ Permissions Management displays the recommendations for each user and authorization system in the **Recommendations** subtab.
+
+1. To remove a recommendation, select the **Unapply Recommendations** subtab, and then select a recommendation.
+1. Select **Close** to close the **Recommendations** subtab.
+
+
+## Next steps
+
+- For more information about viewing rules, see [View roles in the Autopilot dashboard](ui-autopilot.md).
+- For information about creating rules, see [Create a rule](how-to-create-rule.md).
+- For information about notification settings for rules, see [View notification settings for a rule](how-to-notifications-rule.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-revoke-task-readonly-status.md b/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-revoke-task-readonly-status.md
new file mode 100644
index 0000000000000..85a0a4465fe8c
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-revoke-task-readonly-status.md
@@ -0,0 +1,111 @@
+---
+title: Revoke access to high-risk and unused tasks or assign read-only status for Microsoft Azure and Google Cloud Platform (GCP) identities in the Remediation dashboard in Permissions Management
+description: How to revoke access to high-risk and unused tasks or assign read-only status for Microsoft Azure and Google Cloud Platform (GCP) identities in the Remediation dashboard in Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# Revoke access to high-risk and unused tasks or assign read-only status for Microsoft Azure and Google Cloud Platform (GCP) identities
+
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+This article describes how you can revoke high-risk and unused tasks or assign read-only status for Microsoft Azure and Google Cloud Platform (GCP) identities using the **Remediation** dashboard.
+
+> [!NOTE]
+> To view the **Remediation** tab, your must have **Viewer**, **Controller**, or **Administrator** permissions. To make changes on this tab, you must have **Controller** or **Administrator** permissions. If you don't have these permissions, contact your system administrator.
+
+## View an identity's permissions
+
+1. On the Permissions Management home page, select the **Remediation** tab, and then select the **Permissions** subtab.
+1. From the **Authorization System Type** dropdown, select **Azure** or **GCP**.
+1. From the **Authorization System** dropdown, select the accounts you want to access.
+1. From the **Search for** dropdown, select **Group**, **User**, or **APP/Service Account**.
+1. To search for more parameters, you can make a selection from the **User States**, **Permission Creep Index**, and **Task Usage** dropdowns.
+1. Select **Apply**.
+
+ Permissions Management displays a list of groups, users, and service accounts that match your criteria.
+1. In **Enter a username**, enter or select a user.
+1. In **Enter a Group Name**, enter or select a group, then select **Apply**.
+1. Make a selection from the results list.
+
+ The table displays the **Username** **Domain/Account**, **Source**, **Resource** and **Current Role**.
+
+
+## Revoke an identity's access to unused tasks
+
+1. On the Permissions Management home page, select the **Remediation** tab, and then select the **Permissions** subtab.
+1. From the **Authorization System Type** dropdown, select **Azure** or **GCP**.
+1. From the **Authorization System** dropdown, select the accounts you want to access.
+1. From the **Search for** dropdown, select **Group**, **User**, or **APP/Service Account**, and then select **Apply**.
+1. Make a selection from the results list.
+
+1. To revoke an identity's access to tasks they aren't using, select **Revoke Unused Tasks**.
+1. When the following message displays: **Are you sure you want to change permission?**, select:
+ - **Generate Script** to generate a script where you can manually add/remove the permissions you selected.
+ - **Execute** to change the permission.
+ - **Close** to cancel the action.
+
+## Revoke an identity's access to high-risk tasks
+
+1. On the Permissions Management home page, select the **Remediation** tab, and then select the **Permissions** subtab.
+1. From the **Authorization System Type** dropdown, select **Azure** or **GCP**.
+1. From the **Authorization System** dropdown, select the accounts you want to access.
+1. From the **Search For** dropdown, select **Group**, **User**, or **APP/Service Account**, and then select **Apply**.
+1. Make a selection from the results list.
+
+1. To revoke an identity's access to high-risk tasks, select **Revoke High-Risk Tasks**.
+1. When the following message displays: **Are you sure you want to change permission?**, select:
+ - **Generate Script** to generate a script where you can manually add/remove the permissions you selected.
+ - **Execute** to change the permission.
+ - **Close** to cancel the action.
+
+## Revoke an identity's ability to delete tasks
+
+1. On the Permissions Management home page, select the **Remediation** tab, and then select the **Permissions** subtab.
+1. From the **Authorization System Type** dropdown, select **Azure** or **GCP**.
+1. From the **Authorization System** dropdown, select the accounts you want to access.
+1. From the **Search For** dropdown, select **Group**, **User**, or **APP/Service Account**, and then select **Apply**.
+1. Make a selection from the results list.
+
+1. To revoke an identity's ability to delete tasks, select **Revoke Delete Tasks**.
+1. When the following message displays: **Are you sure you want to change permission?**, select:
+ - **Generate Script** to generate a script where you can manually add/remove the permissions you selected.
+ - **Execute** to change the permission.
+ - **Close** to cancel the action.
+
+## Assign read-only status to an identity
+
+1. On the Permissions Management home page, select the **Remediation** tab, and then select the **Permissions** subtab.
+1. From the **Authorization System Type** dropdown, select **Azure** or **GCP**.
+1. From the **Authorization System** dropdown, select the accounts you want to access.
+1. From the **Search for** dropdown, select **Group**, **User**, or **APP/Service Account**, and then select **Apply**.
+1. Make a selection from the results list.
+
+1. To assign read-only status to an identity, select **Assign Read-Only Status**.
+1. When the following message displays: **Are you sure you want to change permission?**, select:
+ - **Generate Script** to generate a script where you can manually add/remove the permissions you selected.
+ - **Execute** to change the permission.
+ - **Close** to cancel the action.
+
+
+## Next steps
+
+- For information on how to view existing roles/policies, requests, and permissions, see [View roles/policies, requests, and permission in the Remediation dashboard](ui-remediation.md).
+- For information on how to create a role/policy, see [Create a role/policy](how-to-create-role-policy.md).
+- For information on how to clone a role/policy, see [Clone a role/policy](how-to-clone-role-policy.md).
+- For information on how to delete a role/policy, see [Delete a role/policy](how-to-delete-role-policy.md).
+- For information on how to modify a role/policy, see Modify a role/policy](how-to-modify-role-policy.md).
+- To view information about roles/policies, see [View information about roles/policies](how-to-view-role-policy.md).
+- For information on how to attach and detach permissions for AWS identities, see [Attach and detach policies for AWS identities](how-to-attach-detach-permissions.md).
+- For information on how to add and remove roles and tasks for Azure and GCP identities, see [Add and remove roles and tasks for Azure and GCP identities](how-to-attach-detach-permissions.md).
+- For information on how to create or approve a request for permissions, see [Create or approve a request for permissions](how-to-create-approve-privilege-request.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-view-role-policy.md b/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-view-role-policy.md
new file mode 100644
index 0000000000000..9c1e939b897f4
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/how-to-view-role-policy.md
@@ -0,0 +1,102 @@
+---
+title: View information about roles/ policies in the Remediation dashboard in Permissions Management
+description: How to view and filter information about roles/ policies in the Remediation dashboard in Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# View information about roles/ policies in the Remediation dashboard
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+The **Remediation** dashboard in Permissions Management enables system administrators to view, adjust, and remediate excessive permissions based on a user's activity data. You can use the **Roles/Policies** subtab in the dashboard to view information about roles and policies in the Amazon Web Services (AWS), Microsoft Azure, or Google Cloud Platform (GCP) authorization systems.
+
+> [!NOTE]
+> To view the **Remediation dashboard** tab, you must have **Viewer**, **Controller**, or **Administrator** permissions. To make changes on this tab, you must have **Controller** or **Administrator** permissions. If you don't have these permissions, contact your system administrator.
+
+> [!NOTE]
+> Microsoft Azure uses the term *role* for what other Cloud providers call *policy*. Permissions Management automatically makes this terminology change when you select the authorization system type. In the user documentation, we use *role/policy* to refer to both.
+
+
+## View information about roles/policies
+
+1. On the Permissions Management home page, select the **Remediation** tab, and then select the **Role/Policies** subtab.
+
+ The **Role/Policies list** displays a list of existing roles/policies and the following information about each role/policy
+ - **Role/Policy Name**: The name of the roles/policies available to you.
+ - **Role/Policy Type**: **Custom**, **System**, or **Permissions Management Only**
+ - **Actions**: The type of action you can perform on the role/policy, **Clone**, **Modify**, or **Delete**
+
+
+1. To display details about the role/policy and view its assigned tasks and identities, select the arrow to the left of the role/policy name.
+
+ The **Tasks** list appears, displaying:
+ - A list of **Tasks**.
+ - **For AWS:**
+ - The **Users**, **Groups**, and **Roles** the task is **Directly Assigned To**.
+ - The **Group Members** and **Role Identities** the task is **Indirectly Accessible By**.
+
+ - **For Azure:**
+ - The **Users**, **Groups**, **Enterprise Applications** and **Managed Identities** the task is **Directly Assigned To**.
+ - The **Group Members** the task is **Indirectly Accessible By**.
+
+ - **For GCP:**
+ - The **Users**, **Groups**, and **Service Accounts** the task is **Directly Assigned To**.
+ - The **Group Members** the task is **Indirectly Accessible By**.
+
+1. To close the role/policy details, select the arrow to the left of the role/policy name.
+
+## Export information about roles/policies
+
+- **Export CSV**: Select this option to export the displayed list of roles/policies as a comma-separated values (CSV) file.
+
+ When the file is successfully exported, a message appears: **Exported Successfully.**
+
+ - Check your email for a message from the Permissions Management Customer Success Team. This email contains a link to:
+ - The **Role Policy Details** report in CSV format.
+ - The **Reports** dashboard where you can configure how and when you can automatically receive reports.
+
+
+
+
+## Filter information about roles/policies
+
+1. On the Permissions Management home page, select the **Remediation** dashboard, and then select the **Role/Policies** tab.
+1. To filter the roles/policies, select from the following options:
+
+ - **Authorization System Type**: Select **AWS**, **Azure**, or **GCP**.
+ - **Authorization System**: Select the accounts you want.
+ - **Role/Policy Type**: Select from the following options:
+
+ - **All**: All managed roles/policies.
+ - **Custom**: A customer-managed role/policy.
+ - **System**: A cloud service provider-managed role/policy.
+ - **Permissions Management Only**: A role/policy created by Permissions Management.
+
+ - **Role/Policy Status**: Select **All**, **Assigned**, or **Unassigned**.
+ - **Role/Policy Usage**: Select **All** or **Unused**.
+1. Select **Apply**.
+
+ To discard your changes, select **Reset Filter**.
+
+
+## Next steps
+
+- For information on how to view existing roles/policies, requests, and permissions, see [View roles/policies, requests, and permission in the Remediation dashboard](ui-remediation.md).
+- For information on how to create a role/policy, see [Create a role/policy](how-to-create-role-policy.md).
+- For information on how to clone a role/policy, see [Clone a role/policy](how-to-clone-role-policy.md).
+- For information on how to delete a role/policy, see [Delete a role/policy](how-to-delete-role-policy.md).
+- For information on how to modify a role/policy, see Modify a role/policy](how-to-modify-role-policy.md).
+- For information on how to attach and detach permissions AWS identities, see [Attach and detach policies for AWS identities](how-to-attach-detach-permissions.md).
+- For information on how to revoke high-risk and unused tasks or assign read-only status for Azure and GCP identities, see [Revoke high-risk and unused tasks or assign read-only status for Azure and GCP identities](how-to-revoke-task-readonly-status.md)
+- For information on how to create or approve a request for permissions, see [Create or approve a request for permissions](how-to-create-approve-privilege-request.md).
+- For information on how to view information about roles/policies, see [View information about roles/policies](how-to-view-role-policy.md)
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/index.yml b/articles/active-directory/cloud-infrastructure-entitlement-management/index.yml
index ad09baeee4cfe..89f86084a634a 100644
--- a/articles/active-directory/cloud-infrastructure-entitlement-management/index.yml
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/index.yml
@@ -1,11 +1,11 @@
### YamlMime:Landing
-title: CloudKnox Permissions Management
-summary: CloudKnox Permissions Management is a cloud infrastructure entitlement management (CIEM) solution that provides comprehensive visibility into permissions assigned to all identities (users and workloads), actions, and resources across cloud infrastructures. It detects, right-sizes, and monitors unused and excessive permissions and enables Zero Trust security through least privilege access in Microsoft Azure, Amazon Web Services (AWS), and Google Cloud Platform (GCP).
+title: Permissions Management
+summary: Permissions Management is a cloud infrastructure entitlement management (CIEM) solution that provides comprehensive visibility into permissions assigned to all identities (users and workloads), actions, and resources across cloud infrastructures. It detects, right-sizes, and monitors unused and excessive permissions and enables Zero Trust security through least privilege access in Microsoft Azure, Amazon Web Services (AWS), and Google Cloud Platform (GCP).
metadata:
- title: CloudKnox Permissions Management
- description: Learn how to use CloudKnox Permissions Management and Cloud Infrastructure Entitlement Management (CIEM)
+ title: Permissions Management
+ description: Learn how to use Permissions Management and Cloud Infrastructure Entitlement Management (CIEM)
services: active-directory
author: kenwith
manager: rkarlin
@@ -15,8 +15,8 @@ metadata:
ms.topic: landing-page
ms.date: 03/09/2022
ms.author: kenwith
-
-
+
+
# linkListType: architecture | concept | deploy | download | get-started | how-to-guide | learn | overview | quickstart | reference | tutorial | whats-new
@@ -24,104 +24,102 @@ landingContent:
# Cards and links should be based on top customer tasks or top subjects
# Start card title with a verb
# Card
- - title: What's CloudKnox Permissions Management?
+ - title: What's Permissions Management?
linkLists:
- linkListType: overview
links:
- text: Overview
- url: cloudknox-overview.md
+ url: overview.md
# Card
- - title: Onboard CloudKnox Permissions Management
+ - title: Onboard Permissions Management
linkLists:
- linkListType: overview
links:
- - text: Enable CloudKnox
- url: cloudknox-onboard-enable-tenant.md
+ - text: Enable Permissions Management
+ url: onboard-enable-tenant.md
# Card
- title: View risk metrics in your authorization system
linkLists:
- linkListType: overview
links:
- text: View key statistics and data about your authorization system
- url: cloudknox-ui-dashboard.md
+ url: ui-dashboard.md
# Card
- title: Configure settings for data collection
linkLists:
- linkListType: overview
links:
- text: View and configure settings for data collection
- url: cloudknox-product-data-sources.md
+ url: product-data-sources.md
# Card
# - title: Manage organizational and personal information
# linkLists:
# - linkListType: overview
# links:
# - text: Set personal information and preferences
- # url: cloudknox-product-account-settings.md
+ # url: product-account-settings.md
# Card
- title: View information about identities
linkLists:
- linkListType: overview
links:
- text: View information about identities
- url: cloudknox-usage-analytics-home.md
+ url: usage-analytics-home.md
- text: View how users access information
- url: cloudknox-ui-audit-trail.md
+ url: ui-audit-trail.md
# Card
- title: Manage roles/policies and permission requests
linkLists:
- linkListType: overview
links:
- text: View existing roles/policies and requests for permission
- url: cloudknox-ui-remediation.md
+ url: ui-remediation.md
# Card
# - title: View how users access information
# linkLists:
# - linkListType: overview
# links:
# - text: View how users access information
- # url: cloudknox-ui-audit-trail.md
+ # url: ui-audit-trail.md
# Card
- title: Set activity alerts and triggers
linkLists:
- linkListType: overview
links:
- text: View information about activity triggers
- url: cloudknox-ui-triggers.md
+ url: ui-triggers.md
# Card
- title: Manage rules for authorization systems
linkLists:
- linkListType: overview
links:
- text: Create and view rules in the Autopilot dashboard
- url: cloudknox-ui-autopilot.md
+ url: ui-autopilot.md
# Card
- title: Generate reports
linkLists:
- linkListType: overview
links:
- text: Generate and view a system report
- url: cloudknox-report-view-system-report.md
+ url: report-view-system-report.md
# Card
- # - title: Learn with CloudKnox videos
+ # - title: Learn with Permissions Management videos
# linkLists:
# - linkListType: overview
# links:
- # - text: CloudKnox Permissions Management training videos
- # url: cloudknox-training-videos.md
+ # - text: Permissions Management training videos
+ # url: training-videos.md
# Card
- title: FAQs
linkLists:
- linkListType: overview
links:
- text: FAQs
- url: cloudknox-faqs.md
+ url: faqs.md
# Card
- title: Troubleshoot
linkLists:
- linkListType: overview
links:
- text: Troubleshoot
- url: cloudknox-troubleshoot.md
-
-
+ url: troubleshoot.md
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/integration-api.md b/articles/active-directory/cloud-infrastructure-entitlement-management/integration-api.md
new file mode 100644
index 0000000000000..75795ba239219
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/integration-api.md
@@ -0,0 +1,105 @@
+---
+title: Set and view configuration settings in Permissions Management
+description: How to view the Permissions Management API integration settings and create service accounts and roles.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# Set and view configuration settings
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+This topic describes how to view configuration settings, create and delete a service account, and create a role in Permissions Management.
+
+## View configuration settings
+
+The **Integrations** dashboard displays the authorization systems available to you.
+
+1. To display the **Integrations** dashboard, select **User** (your initials) in the upper right of the screen, and then select **Integrations.**
+
+ The **Integrations** dashboard displays a tile for each available authorization system.
+
+1. Select an authorization system tile to view the following integration information:
+
+ 1. To find out more about the Permissions Management API, select **Permissions Management API**, and then select documentation.
+
+
+ 1. To view information about service accounts, select **Integration**:
+ - **Email**: Lists the email address of the user who created the integration.
+ - **Created By**: Lists the first and last name of the user who created the integration.
+ - **Created On**: Lists the date and time the integration was created.
+ - **Recent Activity**: Lists the date and time the integration was last used, or notes if the integration was never used.
+ - **Service Account ID**: Lists the service account ID.
+ - **Access Key**: Lists the access key code.
+
+ 1. To view settings information, select **Settings**:
+ - **Roles can create service account**: Lists the type of roles you can create.
+ - **Access Key Rotation Policy**: Lists notifications and actions you can set.
+ - **Access Key Usage Policy**: Lists notifications and actions you can set.
+
+## Create a service account
+
+1. On the **Integrations** dashboard, select **User**, and then select **Integrations.**
+2. Click **Create Service Account**. The following information is pre-populated on the page:
+ - **API Endpoint**
+ - **Service Account ID**
+ - **Access Key**
+ - **Secret Key**
+
+3. To copy the codes, select the **Duplicate** icon next to the respective information.
+
+ > [!NOTE]
+ > The codes are time sensitive and will regenerate after the box is closed.
+
+4. To regenerate the codes, at the bottom of the column, select **Regenerate**.
+
+## Delete a service account
+
+1. On the **Integrations** dashboard, select **User**, and then select **Integrations.**
+
+1. On the right of the email address, select **Delete Service Account**.
+
+ On the **Validate OTP To Delete [Service Name] Integration** box, a message displays asking you to check your email for a code sent to the email address on file.
+
+ If you don't receive the code, select **Resend OTP**.
+
+1. In the **Enter OTP** box, enter the code from the email.
+
+1. Click **Verify**.
+
+## Create a role
+
+1. On the **Integrations** dashboard, select **User**, and then select **Settings**.
+2. Under **Roles can create service account**, select the role you want:
+ - **Super Admin**
+ - **Viewer**
+ - **Controller**
+
+3. In the **Access Key Rotation Policy** column, select options for the following:
+
+ - **How often should the users rotate their access keys?**: Select **30 days**, **60 days**, **90 days**, or **Never**.
+ - **Notification**: Enter a whole number in the blank space within **Notify "X" days before the selected period**, or select **Don't Notify**.
+ - **Action (after the key rotation period ends)**: Select **Disable Action Key** or **No Action**.
+
+4. In the **Access Key Usage Policy** column, select options for the following:
+
+ - **How often should the users go without using their access keys?**: Select **30 days**, **60 days**, **90 days**, or **Never**.
+ - **Notification**: Enter a whole number in the blank space within **Notify "X" days before the selected period**, or select **Don't Notify**.
+ - **Action (after the key rotation period ends)**: Select **Disable Action Key** or **No Action**.
+
+5. Click **Save**.
+
+
+
+
+
+
\ No newline at end of file
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/multi-cloud-glossary.md b/articles/active-directory/cloud-infrastructure-entitlement-management/multi-cloud-glossary.md
new file mode 100644
index 0000000000000..a23f7007f5708
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/multi-cloud-glossary.md
@@ -0,0 +1,82 @@
+---
+title: Permissions Management glossary
+description: Permissions Management glossary
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: conceptual
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# The Permissions Management glossary
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+This glossary provides a list of some of the commonly used cloud terms in Permissions Management. These terms will help Permissions Management users navigate through cloud-specific terms and cloud-generic terms.
+
+## Commonly-used acronyms and terms
+
+| Term | Definition |
+|-----------------------|-----------------------------------------------------|
+| ACL | Access control list. A list of files or resources that contain information about which users or groups have permission to access those resources or modify those files. |
+| ARN | Azure Resource Notification |
+| Authorization System | CIEM supports AWS accounts, Azure Subscriptions, GCP projects as the Authorization systems |
+| Authorization System Type | Any system which provides the authorizations by assigning the permissions to the identities, resources. CIEM supports AWS, Azure, GCP as the Authorization System Types |
+| Cloud security | A form of cybersecurity that protects data stored online on cloud computing platforms from theft, leakage, and deletion. Includes firewalls, penetration testing, obfuscation, tokenization, virtual private networks (VPN), and avoiding public internet connections. |
+| Cloud storage | A service model in which data is maintained, managed, and backed up remotely. Available to users over a network. |
+| CIAM | Cloud Infrastructure Access Management |
+| CIEM | Cloud Infrastructure Entitlement Management. The next generation of solutions for enforcing least privilege in the cloud. It addresses cloud-native security challenges of managing identity access management in cloud environments. |
+| CIS | Cloud infrastructure security |
+| CWP | Cloud Workload Protection. A workload-centric security solution that targets the unique protection requirements of workloads in modern enterprise environments. |
+| CNAPP | Cloud-Native Application Protection. The convergence of cloud security posture management (CSPM), cloud workload protection (CWP), cloud infrastructure entitlement management (CIEM), and cloud applications security broker (CASB). An integrated security approach that covers the entire lifecycle of cloud-native applications. |
+| CSPM | Cloud Security Posture Management. Addresses risks of compliance violations and misconfigurations in enterprise cloud environments. Also focuses on the resource level to identify deviations from best practice security settings for cloud governance and compliance. |
+| CWPP | Cloud Workload Protection Platform |
+| Data Collector | Virtual entity which stores the data collection configuration |
+| Delete task | A high-risk task that allows users to permanently delete a resource. |
+| ED | Enterprise directory |
+| Entitlement | An abstract attribute that represents different forms of user permissions in a range of infrastructure systems and business applications.|
+| Entitlement management | Technology that grants, resolves, enforces, revokes, and administers fine-grained access entitlements (that is, authorizations, privileges, access rights, permissions and rules). Its purpose is to execute IT access policies to structured/unstructured data, devices, and services. It can be delivered by different technologies, and is often different across platforms, applications, network components, and devices. |
+| High-risk task | A task in which a user can cause data leakage, service disruption, or service degradation. |
+| Hybrid cloud | Sometimes called a cloud hybrid. A computing environment that combines an on-premises data center (a private cloud) with a public cloud. It allows data and applications to be shared between them. |
+| hybrid cloud storage | A private or public cloud used to store an organization's data. |
+| ICM | Incident Case Management |
+| IDS | Intrusion Detection Service |
+| Identity analytics | Includes basic monitoring and remediation, dormant and orphan account detection and removal, and privileged account discovery. |
+| Identity lifecycle management | Maintain digital identities, their relationships with the organization, and their attributes during the entire process from creation to eventual archiving, using one or more identity life cycle patterns. |
+| IGA | Identity governance and administration. Technology solutions that conduct identity management and access governance operations. IGA includes the tools, technologies, reports, and compliance activities required for identity lifecycle management. It includes every operation from account creation and termination to user provisioning, access certification, and enterprise password management. It looks at automated workflow and data from authoritative sources capabilities, self-service user provisioning, IT governance, and password management. |
+| ITSM | Information Technology Security Management. Tools that enable IT operations organizations (infrastructure and operations managers), to better support the production environment. Facilitate the tasks and workflows associated with the management and delivery of quality IT services. |
+| JEP | Just Enough Permissions |
+| JIT | Just in Time access can be seen as a way to enforce the principle of least privilege to ensure users and non-human identities are given the minimum level of privileges. It also ensures that privileged activities are conducted in accordance with an organization's Identity Access Management (IAM), IT Service Management (ITSM), and Privileged Access Management (PAM) policies, with its entitlements and workflows. JIT access strategy enables organizations to maintain a full audit trail of privileged activities so they can easily identify who or what gained access to which systems, what they did at what time, and for how long. |
+| Least privilege | Ensures that users only gain access to the specific tools they need to complete a task. |
+| Multi-tenant | A single instance of the software and its supporting infrastructure serves multiple customers. Each customer shares the software application and also shares a single database. |
+| OIDC | OpenID Connect. An authentication protocol that verifies user identity when a user is trying to access a protected HTTPs end point. OIDC is an evolutionary development of ideas implemented earlier in OAuth. |
+| PAM | Privileged access management. Tools that offer one or more of these features: discover, manage, and govern privileged accounts on multiple systems and applications; control access to privileged accounts, including shared and emergency access; randomize, manage, and vault credentials (password, keys, etc.) for administrative, service, and application accounts; single sign-on (SSO) for privileged access to prevent credentials from being revealed; control, filter, and orchestrate privileged commands, actions, and tasks; manage and broker credentials to applications, services, and devices to avoid exposure; and monitor, record, audit, and analyze privileged access, sessions, and actions. |
+| PASM | Privileged accounts are protected by vaulting their credentials. Access to those accounts is then brokered for human users, services, and applications. Privileged session management (PSM) functions establish sessions with possible credential injection and full session recording. Passwords and other credentials for privileged accounts are actively managed and changed at definable intervals or upon the occurrence of specific events. PASM solutions may also provide application-to-application password management (AAPM) and zero-install remote privileged access features for IT staff and third parties that don't require a VPN. |
+| PEDM | Specific privileges are granted on the managed system by host-based agents to logged-in users. PEDM tools provide host-based command control (filtering); application allow, deny, and isolate controls; and/or privilege elevation. The latter is in the form of allowing particular commands to be run with a higher level of privileges. PEDM tools execute on the actual operating system at the kernel or process level. Command control through protocol filtering is explicitly excluded from this definition because the point of control is less reliable. PEDM tools may also provide file integrity monitoring features. |
+| Permission | Rights and privileges. Details given by users or network administrators that define access rights to files on a network. Access controls attached to a resource dictating which identities can access it and how. Privileges are attached to identities and are the ability to perform certain actions. An identity having the ability to perform an action on a resource. |
+| POD | Permission on Demand. A type of JIT access that allows the temporary elevation of permissions, enabling identities to access resources on a by-request, timed basis. |
+| Permissions creep index (PCI) | A number from 0 to 100 that represents the incurred risk of users with access to high-risk privileges. PCI is a function of users who have access to high-risk privileges but aren't actively using them. |
+| Policy and role management | Maintain rules that govern automatic assignment and removal of access rights. Provides visibility of access rights for selection in access requests, approval processes, dependencies, and incompatibilities between access rights, and more. Roles are a common vehicle for policy management. |
+| Privilege | The authority to make changes to a network or computer. Both people and accounts can have privileges, and both can have different levels of privilege. |
+| Privileged account | A login credential to a server, firewall, or other administrative account. Often referred to as admin accounts. Comprised of the actual username and password; these two things together make up the account. A privileged account is allowed to do more things than a normal account. |
+| Public Cloud | Computing services offered by third-party providers over the public Internet, making them available to anyone who wants to use or purchase them. They may be free or sold on-demand, allowing customers to pay only per usage for the CPU cycles, storage, or bandwidth they consume. |
+| Resource | Any entity that uses compute capabilities can be accessed by users and services to perform actions. |
+| Role | An IAM identity that has specific permissions. Instead of being uniquely associated with one person, a role is intended to be assumable by anyone who needs it. A role doesn't have standard long-term credentials such as a password or access keys associated with. |
+| SCIM | System for Cross–domain Identity Management |
+| SIEM | Security Information and Event Management. Technology that supports threat detection, compliance and security incident management through the collection and analysis (both near real time and historical) of security events, as well as a wide variety of other event and contextual data sources. The core capabilities are a broad scope of log event collection and management, the ability to analyze log events and other data across disparate sources, and operational capabilities (such as incident management, dashboards, and reporting). |
+| SOAR | Security orchestration, automation and response (SOAR). Technologies that enable organizations to take inputs from various sources (mostly from security information and event management [SIEM] systems) and apply workflows aligned to processes and procedures. These workflows can be orchestrated via integrations with other technologies and automated to achieve the desired outcome and greater visibility. Other capabilities include case and incident management features; the ability to manage threat intelligence, dashboards and reporting; and analytics that can be applied across various functions. SOAR tools significantly enhance security operations activities like threat detection and response by providing machine-powered assistance to human analysts to improve the efficiency and consistency of people and processes. |
+| Super user / Super identity | A powerful account used by IT system administrators that can be used to make configurations to a system or application, add or remove users, or delete data. |
+| Tenant | A dedicated instance of the services and organization data stored within a specific default location. |
+| UUID | Universally unique identifier. A 128-bit label used for information in computer systems. The term globally unique identifier (GUID) is also used.|
+| Zero trust security | The three foundational principles: explicit verification, breach assumption, and least privileged access.|
+| ZTNA | Zero trust network access. A product or service that creates an identity- and context-based, logical access boundary around an application or set of applications. The applications are hidden from discovery, and access is restricted via a trust broker to a set of named entities. The broker verifies the identity, context and policy adherence of the specified participants before allowing access and prohibits lateral movement elsewhere in the network. It removes application assets from public visibility and significantly reduces the surface area for attack.|
+
+## Next steps
+
+- For an overview of Permissions Management, see [What's Permissions Management?](overview.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/onboard-add-account-after-onboarding.md b/articles/active-directory/cloud-infrastructure-entitlement-management/onboard-add-account-after-onboarding.md
new file mode 100644
index 0000000000000..c02c442060d62
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/onboard-add-account-after-onboarding.md
@@ -0,0 +1,112 @@
+---
+title: Add an account /subscription/ project to Permissions Management after onboarding is complete
+description: How to add an account/ subscription/ project to Permissions Management after onboarding is complete.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# Add an account/ subscription/ project after onboarding is complete
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+This article describes how to add an Amazon Web Services (AWS) account, Microsoft Azure subscription, or Google Cloud Platform (GCP) project in Microsoft Permissions Management after you've completed the onboarding process.
+
+## Add an AWS account after onboarding is complete
+
+1. In the Permissions Management home page, select **Settings** (the gear icon), and then select the **Data collectors** tab.
+1. On the **Data collectors** dashboard, select **AWS**.
+1. Select the ellipses **(...)** at the end of the row, and then select **Edit Configuration**.
+
+ The **Permissions Management Onboarding - Summary** page displays.
+
+1. Go to **AWS Account IDs**, and then select **Edit** (the pencil icon).
+
+ The **Permissions Management Onboarding - AWS Member Account Details** page displays.
+
+1. Go to **Enter Your AWS Account IDs**, and then select **Add** (the plus **+** sign).
+1. Copy your account ID from AWS and paste it into the **Enter Account ID** box.
+
+ The AWS account ID is automatically added to the script.
+
+ If you want to add more account IDs, repeat steps 5 and 6 to add up to a total of 10 account IDs.
+
+1. Copy the script.
+1. Go to AWS and start the Cloud Shell.
+1. Create a new script for the new account and press the **Enter** key.
+1. Paste the script you copied.
+1. Locate the account line, delete the original account ID (the one that was previously added), and then run the script.
+1. Return to Permissions Management, and the new account ID you added will be added to the list of account IDs displayed in the **Permissions Management Onboarding - Summary** page.
+1. Select **Verify now & save**.
+
+ When your changes are saved, the following message displays: **Successfully updated configuration.**
+
+
+## Add an Azure subscription after onboarding is complete
+
+1. In the Permissions Management home page, select **Settings** (the gear icon), and then select the **Data collectors** tab.
+1. On the **Data collectors** dashboard, select **Azure**.
+1. Select the ellipses **(...)** at the end of the row, and then select **Edit Configuration**.
+
+ The **Permissions Management Onboarding - Summary** page displays.
+
+1. Go to **Azure subscription IDs**, and then select **Edit** (the pencil icon).
+1. Go to **Enter your Azure Subscription IDs**, and then select **Add subscription** (the plus **+** sign).
+1. Copy and paste your subscription ID from Azure and paste it into the subscription ID box.
+
+ The subscription ID is automatically added to the subscriptions line in the script.
+
+ If you want to add more subscription IDs, repeat steps 4 and 5 to add up to a total of 10 subscriptions.
+
+1. Copy the script.
+1. Go to Azure and start the Cloud Shell.
+1. Create a new script for the new subscription and press enter.
+1. Paste the script you copied.
+1. Locate the subscription line and delete the original subscription ID (the one that was previously added), and then run the script.
+1. Return to Permissions Management, and the new subscription ID you added will be added to the list of subscription IDs displayed in the **Permissions Management Onboarding - Summary** page.
+1. Select **Verify now & save**.
+
+ When your changes are saved, the following message displays: **Successfully updated configuration.**
+
+## Add a GCP project after onboarding is complete
+
+1. In the Permissions Management home page, select **Settings** (the gear icon), and then select the **Data collectors** tab.
+1. On the **Data collectors** dashboard, select **GCP**.
+1. Select the ellipses **(...)** at the end of the row, and then select **Edit Configuration**.
+
+ The **Permissions Management Onboarding - Summary** page displays.
+
+1. Go to **GCP Project IDs**, and then select **Edit** (the pencil icon).
+1. Go to **Enter your GCP Project IDs**, and then select **Add Project ID** (the plus **+** sign).
+1. Copy and paste your project ID from Azure and paste it into the **Project ID** box.
+
+ The project ID is automatically added to the **Project ID** line in the script.
+
+ If you want to add more project IDs, repeat steps 4 and 5 to add up to a total of 10 project IDs.
+
+1. Copy the script.
+1. Go to GCP and start the Cloud Shell.
+1. Create a new script for the new project ID and press enter.
+1. Paste the script you copied.
+1. Locate the project ID line and delete the original project ID (the one that was previously added), and then run the script.
+1. Return to Permissions Management, and the new project ID you added will be added to the list of project IDs displayed in the **Permissions Management Onboarding - Summary** page.
+1. Select **Verify now & save**.
+
+ When your changes are saved, the following message displays: **Successfully updated configuration.**
+
+
+
+## Next steps
+
+- For information on how to onboard an Amazon Web Services (AWS) account, see [Onboard an AWS account](onboard-aws.md).
+ - For information on how to onboard a Microsoft Azure subscription, see [Onboard a Microsoft Azure subscription](onboard-azure.md).
+- For information on how to onboard a Google Cloud Platform (GCP) project, see [Onboard a GCP project](onboard-gcp.md).
+- For information on how to enable or disable the controller after onboarding is complete, see [Enable or disable the controller](onboard-enable-controller-after-onboarding.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/onboard-aws.md b/articles/active-directory/cloud-infrastructure-entitlement-management/onboard-aws.md
new file mode 100644
index 0000000000000..fc4d7b83549e4
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/onboard-aws.md
@@ -0,0 +1,173 @@
+---
+title: Onboard an Amazon Web Services (AWS) account on Permissions Management
+description: How to onboard an Amazon Web Services (AWS) account on Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 04/20/2022
+ms.author: kenwith
+---
+
+# Onboard an Amazon Web Services (AWS) account
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+> [!NOTE]
+> The Permissions Management PREVIEW is currently not available for tenants hosted in the European Union (EU).
+
+
+This article describes how to onboard an Amazon Web Services (AWS) account on Permissions Management.
+
+> [!NOTE]
+> A *global administrator* or *super admin* (an admin for all authorization system types) can perform the tasks in this article after the global administrator has initially completed the steps provided in [Enable Permissions Management on your Azure Active Directory tenant](onboard-enable-tenant.md).
+
+
+## View a training video on configuring and onboarding an AWS account
+
+To view a video on how to configure and onboard AWS accounts in Permissions Management, select [Configure and onboard AWS accounts](https://www.youtube.com/watch?v=R6K21wiWYmE).
+
+## Onboard an AWS account
+
+1. If the **Data Collectors** dashboard isn't displayed when Permissions Management launches:
+
+ - In the Permissions Management home page, select **Settings** (the gear icon), and then select the **Data Collectors** subtab.
+
+1. On the **Data Collectors** dashboard, select **AWS**, and then select **Create Configuration**.
+
+### 1. Create an Azure AD OIDC App
+
+1. On the **Permissions Management Onboarding - Azure AD OIDC App Creation** page, enter the **OIDC Azure app name**.
+
+ This app is used to set up an OpenID Connect (OIDC) connection to your AWS account. OIDC is an interoperable authentication protocol based on the OAuth 2.0 family of specifications. The scripts generated on this page create the app of this specified name in your Azure AD tenant with the right configuration.
+
+1. To create the app registration, copy the script and run it in your Azure command-line app.
+
+ > [!NOTE]
+ > 1. To confirm that the app was created, open **App registrations** in Azure and, on the **All applications** tab, locate your app.
+ > 1. Select the app name to open the **Expose an API** page. The **Application ID URI** displayed in the **Overview** page is the *audience value* used while making an OIDC connection with your AWS account.
+
+1. Return to Permissions Management, and in the **Permissions Management Onboarding - Azure AD OIDC App Creation**, select **Next**.
+
+### 2. Set up an AWS OIDC account
+
+1. In the **Permissions Management Onboarding - AWS OIDC Account Setup** page, enter the **AWS OIDC account ID** where the OIDC provider is created. You can change the role name to your requirements.
+1. Open another browser window and sign in to the AWS account where you want to create the OIDC provider.
+1. Select **Launch Template**. This link takes you to the **AWS CloudFormation create stack** page.
+1. Scroll to the bottom of the page, and in the **Capabilities** box, select **I acknowledge that AWS CloudFormation might create IAM resources with custom names**. Then select **Create Stack.**
+
+ This AWS CloudFormation stack creates an OIDC Identity Provider (IdP) representing Azure AD STS and an AWS IAM role with a trust policy that allows external identities from Azure AD to assume it via the OIDC IdP. These entities are listed on the **Resources** page.
+
+1. Return to Permissions Management, and in the **Permissions Management Onboarding - AWS OIDC Account Setup** page, select **Next**.
+
+### 3. Set up an AWS master account (Optional)
+
+1. If your organization has Service Control Policies (SCPs) that govern some or all of the member accounts, set up the master account connection in the **Permissions Management Onboarding - AWS Master Account Details** page.
+
+ Setting up the master account connection allows Permissions Management to auto-detect and onboard any AWS member accounts that have the correct Permissions Management role.
+
+ - In the **Permissions Management Onboarding - AWS Master Account Details** page, enter the **Master Account ID** and **Master Account Role**.
+
+1. Open another browser window and sign in to the AWS console for your master account.
+
+1. Return to Permissions Management, and in the **Permissions Management Onboarding - AWS Master Account Details** page, select **Launch Template**.
+
+ The **AWS CloudFormation create stack** page opens, displaying the template.
+
+1. Review the information in the template, make changes, if necessary, then scroll to the bottom of the page.
+
+1. In the **Capabilities** box, select **I acknowledge that AWS CloudFormation might create IAM resources with custom names**. Then select **Create stack**.
+
+ This AWS CloudFormation stack creates a role in the master account with the necessary permissions (policies) to collect SCPs and list all the accounts in your organization.
+
+ A trust policy is set on this role to allow the OIDC role created in your AWS OIDC account to access it. These entities are listed in the **Resources** tab of your CloudFormation stack.
+
+1. Return to Permissions Management, and in **Permissions Management Onboarding - AWS Master Account Details**, select **Next**.
+
+### 4. Set up an AWS Central logging account (Optional but recommended)
+
+1. If your organization has a central logging account where logs from some or all of your AWS account are stored, in the **Permissions Management Onboarding - AWS Central Logging Account Details** page, set up the logging account connection.
+
+ In the **Permissions Management Onboarding - AWS Central Logging Account Details** page, enter the **Logging Account ID** and **Logging Account Role**.
+
+1. In another browser window, sign in to the AWS console for the AWS account you use for central logging.
+
+1. Return to Permissions Management, and in the **Permissions Management Onboarding - AWS Central Logging Account Details** page, select **Launch Template**.
+
+ The **AWS CloudFormation create stack** page opens, displaying the template.
+
+1. Review the information in the template, make changes, if necessary, then scroll to the bottom of the page.
+
+1. In the **Capabilities** box, select **I acknowledge that AWS CloudFormation might create IAM resources with custom names**, and then select **Create stack**.
+
+ This AWS CloudFormation stack creates a role in the logging account with the necessary permissions (policies) to read S3 buckets used for central logging. A trust policy is set on this role to allow the OIDC role created in your AWS OIDC account to access it. These entities are listed in the **Resources** tab of your CloudFormation stack.
+
+1. Return to Permissions Management, and in the **Permissions Management Onboarding - AWS Central Logging Account Details** page, select **Next**.
+
+### 5. Set up an AWS member account
+
+1. In the **Permissions Management Onboarding - AWS Member Account Details** page, enter the **Member Account Role** and the **Member Account IDs**.
+
+ You can enter up to 10 account IDs. Click the plus icon next to the text box to add more account IDs.
+
+ > [!NOTE]
+ > Perform the next 6 steps for each account ID you add.
+
+1. Open another browser window and sign in to the AWS console for the member account.
+
+1. Return to the **Permissions Management Onboarding - AWS Member Account Details** page, select **Launch Template**.
+
+ The **AWS CloudFormation create stack** page opens, displaying the template.
+
+1. In the **CloudTrailBucketName** page, enter a name.
+
+ You can copy and paste the **CloudTrailBucketName** name from the **Trails** page in AWS.
+
+ > [!NOTE]
+ > A *cloud bucket* collects all the activity in a single account that Permissions Management monitors. Enter the name of a cloud bucket here to provide Permissions Management with the access required to collect activity data.
+
+1. From the **Enable Controller** dropdown, select:
+
+ - **True**, if you want the controller to provide Permissions Management with read and write access so that any remediation you want to do from the Permissions Management platform can be done automatically.
+ - **False**, if you want the controller to provide Permissions Management with read-only access.
+
+1. Scroll to the bottom of the page, and in the **Capabilities** box, select **I acknowledge that AWS CloudFormation might create IAM resources with custom names**. Then select **Create stack**.
+
+ This AWS CloudFormation stack creates a collection role in the member account with necessary permissions (policies) for data collection.
+
+ A trust policy is set on this role to allow the OIDC role created in your AWS OIDC account to access it. These entities are listed in the **Resources** tab of your CloudFormation stack.
+
+1. Return to Permissions Management, and in the **Permissions Management Onboarding - AWS Member Account Details** page, select **Next**.
+
+ This step completes the sequence of required connections from Azure AD STS to the OIDC connection account and the AWS member account.
+
+### 6. Review and save
+
+1. In **Permissions Management Onboarding – Summary**, review the information you've added, and then select **Verify Now & Save**.
+
+ The following message appears: **Successfully created configuration.**
+
+ On the **Data Collectors** dashboard, the **Recently Uploaded On** column displays **Collecting**. The **Recently Transformed On** column displays **Processing.**
+
+ You have now completed onboarding AWS, and Permissions Management has started collecting and processing your data.
+
+### 7. View the data
+
+1. To view the data, select the **Authorization Systems** tab.
+
+ The **Status** column in the table displays **Collecting Data.**
+
+ The data collection process may take some time, depending on the size of the account and how much data is available for collection.
+
+
+## Next steps
+
+- For information on how to onboard a Microsoft Azure subscription, see [Onboard a Microsoft Azure subscription](onboard-azure.md).
+- For information on how to onboard a Google Cloud Platform (GCP) project, see [Onboard a Google Cloud Platform (GCP) project](onboard-gcp.md).
+- For information on how to enable or disable the controller after onboarding is complete, see [Enable or disable the controller](onboard-enable-controller-after-onboarding.md).
+- For information on how to add an account/subscription/project after onboarding is complete, see [Add an account/subscription/project after onboarding is complete](onboard-add-account-after-onboarding.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/onboard-azure.md b/articles/active-directory/cloud-infrastructure-entitlement-management/onboard-azure.md
new file mode 100644
index 0000000000000..9b21f89b3dbc7
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/onboard-azure.md
@@ -0,0 +1,99 @@
+---
+title: Onboard a Microsoft Azure subscription in Permissions Management
+description: How to a Microsoft Azure subscription on Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 04/20/2022
+ms.author: kenwith
+---
+
+# Onboard a Microsoft Azure subscription
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management (Permissions Management) is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+> [!NOTE]
+> The Permissions Management PREVIEW is currently not available for tenants hosted in the European Union (EU).
+
+This article describes how to onboard a Microsoft Azure subscription or subscriptions on Permissions Management (Permissions Management). Onboarding a subscription creates a new authorization system to represent the Azure subscription in Permissions Management.
+
+> [!NOTE]
+> A *global administrator* or *super admin* (an admin for all authorization system types) can perform the tasks in this article after the global administrator has initially completed the steps provided in [Enable Permissions Management on your Azure Active Directory tenant](onboard-enable-tenant.md).
+
+## Prerequisites
+
+To add Permissions Management to your Azure AD tenant:
+- You must have an Azure AD user account and an Azure command-line interface (Azure CLI) on your system, or an Azure subscription. If you don't already have one, [create a free account](https://azure.microsoft.com/free/).
+- You must have **Microsoft.Authorization/roleAssignments/write** permission at the subscription or management group scope to perform these tasks. If you don't have this permission, you can ask someone who has this permission to perform these tasks for you.
+
+
+## View a training video on enabling Permissions Management in your Azure AD tenant
+
+To view a video on how to enable Permissions Management in your Azure AD tenant, select [Enable Permissions Management in your Azure AD tenant](https://www.youtube.com/watch?v=-fkfeZyevoo).
+
+## How to onboard an Azure subscription
+
+1. If the **Data Collectors** dashboard isn't displayed when Permissions Management launches:
+
+ - In the Permissions Management home page, select **Settings** (the gear icon), and then select the **Data Collectors** subtab.
+
+1. On the **Data Collectors** dashboard, select **Azure**, and then select **Create Configuration**.
+
+### 1. Add Azure subscription details
+
+1. On the **Permissions Management Onboarding - Azure Subscription Details** page, enter the **Subscription IDs** that you want to onboard.
+
+ > [!NOTE]
+ > To locate the Azure subscription IDs, open the **Subscriptions** page in Azure.
+ > You can enter up to 10 subscriptions IDs. Select the plus sign **(+)** icon next to the text box to enter more subscriptions.
+
+1. From the **Scope** dropdown, select **Subscription** or **Management Group**. The script box displays the role assignment script.
+
+ > [!NOTE]
+ > Select **Subscription** if you want to assign permissions separately for each individual subscription. The generated script has to be executed once per subscription.
+ > Select **Management Group** if all of your subscriptions are under one management group. The generated script must be executed once for the management group.
+
+1. To give this role assignment to the service principal, copy the script to a file on your system where Azure CLI is installed and execute it.
+
+ You can execute the script once for each subscription, or once for all the subscriptions in the management group.
+
+1. From the **Enable Controller** dropdown, select:
+
+ - **True**, if you want the controller to provide Permissions Management with read and write access so that any remediation you want to do from the Permissions Management platform can be done automatically.
+ - **False**, if you want the controller to provide Permissions Management with read-only access.
+
+1. Return to **Permissions Management Onboarding - Azure Subscription Details** page and select **Next**.
+
+### 2. Review and save.
+
+- In **Permissions Management Onboarding – Summary** page, review the information you've added, and then select **Verify Now & Save**.
+
+ The following message appears: **Successfully Created Configuration.**
+
+ On the **Data Collectors** tab, the **Recently Uploaded On** column displays **Collecting**. The **Recently Transformed On** column displays **Processing.**
+
+ You have now completed onboarding Azure, and Permissions Management has started collecting and processing your data.
+
+### 3. View the data.
+
+- To view the data, select the **Authorization Systems** tab.
+
+ The **Status** column in the table displays **Collecting Data.**
+
+ The data collection process will take some time, depending on the size of the account and how much data is available for collection.
+
+
+## Next steps
+
+- For information on how to onboard an Amazon Web Services (AWS) account, see [Onboard an Amazon Web Services (AWS) account](onboard-aws.md).
+- For information on how to onboard a Google Cloud Platform (GCP) project, see [Onboard a Google Cloud Platform (GCP) project](onboard-gcp.md).
+- For information on how to enable or disable the controller after onboarding is complete, see [Enable or disable the controller](onboard-enable-controller-after-onboarding.md).
+- For information on how to add an account/subscription/project after onboarding is complete, see [Add an account/subscription/project after onboarding is complete](onboard-add-account-after-onboarding.md).
+- For an overview on Permissions Management, see [What's Permissions Management?](overview.md).
+- For information on how to start viewing information about your authorization system in Permissions Management, see [View key statistics and data about your authorization system](ui-dashboard.md).
\ No newline at end of file
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/onboard-enable-controller-after-onboarding.md b/articles/active-directory/cloud-infrastructure-entitlement-management/onboard-enable-controller-after-onboarding.md
new file mode 100644
index 0000000000000..f8fa037bb9114
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/onboard-enable-controller-after-onboarding.md
@@ -0,0 +1,102 @@
+---
+title: Enable or disable the controller in Permissions Management after onboarding is complete
+description: How to enable or disable the controller in Permissions Management after onboarding is complete.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# Enable or disable the controller after onboarding is complete
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+This article describes how to enable or disable the controller in Microsoft Azure and Google Cloud Platform (GCP) after onboarding is complete.
+
+This article also describes how to enable the controller in Amazon Web Services (AWS) if you disabled it during onboarding. You can only enable the controller in AWS at this time; you can't disable it.
+
+## Enable the controller in AWS
+
+> [!NOTE]
+> You can only enable the controller in AWS; you can't disable it at this time.
+
+1. Sign in to the AWS console of the member account in a separate browser window.
+1. Go to the Permissions Management home page, select **Settings** (the gear icon), and then select the **Data Collectors** subtab.
+1. On the **Data Collectors** dashboard, select **AWS**, and then select **Create Configuration**.
+1. On the **Permissions Management Onboarding - AWS Member Account Details** page, select **Launch Template**.
+
+ The **AWS CloudFormation create stack** page opens, displaying the template.
+1. In the **CloudTrailBucketName** box, enter a name.
+
+ You can copy and paste the **CloudTrailBucketName** name from the **Trails** page in AWS.
+
+ > [!NOTE]
+ > A *cloud bucket* collects all the activity in a single account that Permissions Management monitors. Enter the name of a cloud bucket here to provide Permissions Management with the access required to collect activity data.
+
+1. In the **EnableController** box, from the drop-down list, select **True** to provide Permissions Management with read and write access so that any remediation you want to do from the Permissions Management platform can be done automatically.
+
+1. Scroll to the bottom of the page, and in the **Capabilities** box and select **I acknowledge that AWS CloudFormation might create IAM resources with custom names**. Then select **Create stack**.
+
+ This AWS CloudFormation stack creates a collection role in the member account with necessary permissions (policies) for data collection. A trust policy is set on this role to allow the OIDC role created in your AWS OIDC account to access it. These entities are listed in the **Resources** tab of your CloudFormation stack.
+
+1. Return to Permissions Management, and on the Permissions Management **Onboarding - AWS Member Account Details** page, select **Next**.
+1. On **Permissions Management Onboarding – Summary** page, review the information you've added, and then select **Verify Now & Save**.
+
+ The following message appears: **Successfully created configuration.**
+
+## Enable or disable the controller in Azure
+
+
+1. In Azure, open the **Access control (IAM)** page.
+1. In the **Check access** section, in the **Find** box, enter **Cloud Infrastructure Entitlement Management**.
+
+ The **Cloud Infrastructure Entitlement Management assignments** page appears, displaying the roles assigned to you.
+
+ - If you have read-only permission, the **Role** column displays **Reader**.
+ - If you have administrative permission, the **Role** column displays **User Access Administrative**.
+
+1. To add the administrative role assignment, return to the **Access control (IAM)** page, and then select **Add role assignment**.
+1. Add or remove the role assignment for Cloud Infrastructure Entitlement Management.
+
+1. Go to the Permissions Management home page, select **Settings** (the gear icon), and then select the **Data Collectors** subtab.
+1. On the **Data Collectors** dashboard, select **Azure**, and then select **Create Configuration**.
+1. On the **Permissions Management Onboarding - Azure Subscription Details** page, enter the **Subscription ID**, and then select **Next**.
+1. On **Permissions Management Onboarding – Summary** page, review the controller permissions, and then select **Verify Now & Save**.
+
+ The following message appears: **Successfully Created Configuration.**
+
+
+## Enable or disable the controller in GCP
+
+1. Execute the **gcloud auth login**.
+1. Follow the instructions displayed on the screen to authorize access to your Google account.
+1. Execute the **sh mciem-workload-identity-pool.sh** to create the workload identity pool, provider, and service account.
+1. Execute the **sh mciem-member-projects.sh** to give Permissions Management permissions to access each of the member projects.
+
+ - If you want to manage permissions through Permissions Management, select **Y** to **Enable controller**.
+ - If you want to onboard your projects in read-only mode, select **N** to **Disable controller**.
+
+1. Optionally, execute **mciem-enable-gcp-api.sh** to enable all recommended GCP APIs.
+
+1. Go to the Permissions Management home page, select **Settings** (the gear icon), and then select the **Data Collectors** subtab.
+1. On the **Data Collectors** dashboard, select **GCP**, and then select **Create Configuration**.
+1. On the **Permissions Management Onboarding - Azure AD OIDC App Creation** page, select **Next**.
+1. On the **Permissions Management Onboarding - GCP OIDC Account Details & IDP Access** page, enter the **OIDC Project Number** and **OIDC Project ID**, and then select **Next**.
+1. On the **Permissions Management Onboarding - GCP Project IDs** page, enter the **Project IDs**, and then select **Next**.
+1. On the **Permissions Management Onboarding – Summary** page, review the information you've added, and then select **Verify Now & Save**.
+
+ The following message appears: **Successfully Created Configuration.**
+
+## Next steps
+
+- For information on how to onboard an Amazon Web Services (AWS) account, see [Onboard an AWS account](onboard-aws.md).
+- For information on how to onboard a Microsoft Azure subscription, see [Onboard a Microsoft Azure subscription](onboard-azure.md).
+- For information on how to onboard a Google Cloud Platform (GCP) project, see [Onboard a GCP project](onboard-gcp.md).
+- For information on how to add an account/subscription/project after onboarding is complete, see [Add an account/subscription/project after onboarding is complete](onboard-add-account-after-onboarding.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/onboard-enable-tenant.md b/articles/active-directory/cloud-infrastructure-entitlement-management/onboard-enable-tenant.md
new file mode 100644
index 0000000000000..3bae1ac5a5865
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/onboard-enable-tenant.md
@@ -0,0 +1,112 @@
+---
+title: Enable Permissions Management in your organization
+description: How to enable Permissions Management in your organization.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 04/20/2022
+ms.author: kenwith
+---
+
+# Enable Permissions Management in your organization
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+
+> [!NOTE]
+> The Permissions Management PREVIEW is currently not available for tenants hosted in the European Union (EU).
+
+
+
+This article describes how to enable Permissions Management in your organization. Once you've enabled Permissions Management, you can connect it to your Amazon Web Services (AWS), Microsoft Azure, or Google Cloud Platform (GCP) platforms.
+
+> [!NOTE]
+> To complete this task, you must have *global administrator* permissions as a user in that tenant. You can't enable Permissions Management as a user from other tenant who has signed in via B2B or via Azure Lighthouse.
+
+## Prerequisites
+
+To enable Permissions Management in your organization:
+
+- You must have an Azure AD tenant. If you don't already have one, [create a free account](https://azure.microsoft.com/free/).
+- You must be eligible for or have an active assignment to the global administrator role as a user in that tenant.
+
+> [!NOTE]
+> During public preview, Permissions Management doesn't perform a license check.
+
+## View a training video on enabling Permissions Management
+
+- To view a video on how to enable Permissions Management in your Azure AD tenant, select [Enable Permissions Management in your Azure AD tenant](https://www.youtube.com/watch?v=-fkfeZyevoo).
+- To view a video on how to configure and onboard AWS accounts in Permissions Management, select [Configure and onboard AWS accounts](https://www.youtube.com/watch?v=R6K21wiWYmE).
+- To view a video on how to configure and onboard GCP accounts in Permissions Management, select [Configure and onboard GCP accounts](https://www.youtube.com/watch?app=desktop&v=W3epcOaec28).
+
+
+## How to enable Permissions Management on your Azure AD tenant
+
+1. In your browser:
+ 1. Go to [Azure services](https://portal.azure.com) and use your credentials to sign in to [Azure Active Directory](https://ms.portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/Overview).
+ 1. If you aren't already authenticated, sign in as a global administrator user.
+ 1. If needed, activate the global administrator role in your Azure AD tenant.
+ 1. In the Azure AD portal, select **Features highlights**, and then select **Permissions Management**.
+
+ 1. If you're prompted to select a sign in account, sign in as a global administrator for a specified tenant.
+
+ The **Welcome to Permissions Management** screen appears, displaying information on how to enable Permissions Management on your tenant.
+
+1. To provide access to the Permissions Management application, create a service principal.
+
+ An Azure service principal is a security identity used by user-created apps, services, and automation tools to access specific Azure resources.
+
+ > [!NOTE]
+ > To complete this step, you must have Azure CLI or Azure PowerShell on your system, or an Azure subscription where you can run Cloud Shell.
+
+ - To create a service principal that points to the Permissions Management application via Cloud Shell:
+
+ 1. Copy the script on the **Welcome** screen:
+
+ `az ad sp create --id b46c3ac5-9da6-418f-a849-0a07a10b3c6c`
+
+ 1. If you have an Azure subscription, return to the Azure AD portal and select **Cloud Shell** on the navigation bar.
+ If you don't have an Azure subscription, open a command prompt on a Windows Server.
+ 1. If you have an Azure subscription, paste the script into Cloud Shell and press **Enter**.
+
+ - For information on how to create a service principal through the Azure portal, see [Create an Azure service principal with the Azure CLI](/cli/azure/create-an-azure-service-principal-azure-cli).
+
+ - For information on the **az** command and how to sign in with the no subscriptions flag, see [az login](/cli/azure/reference-index?view=azure-cli-latest#az-login&preserve-view=true).
+
+ - For information on how to create a service principal via Azure PowerShell, see [Create an Azure service principal with Azure PowerShell](/powershell/azure/create-azure-service-principal-azureps?view=azps-7.1.0&preserve-view=true).
+
+ 1. After the script runs successfully, the service principal attributes for Permissions Management display. Confirm the attributes.
+
+ The **Cloud Infrastructure Entitlement Management** application displays in the Azure AD portal under **Enterprise applications**.
+
+1. Return to the **Welcome to Permissions Management** screen and select **Enable Permissions Management**.
+
+ You have now completed enabling Permissions Management on your tenant. Permissions Management launches with the **Data Collectors** dashboard.
+
+## Configure data collection settings
+
+Use the **Data Collectors** dashboard in Permissions Management to configure data collection settings for your authorization system.
+
+1. If the **Data Collectors** dashboard isn't displayed when Permissions Management launches:
+
+ - In the Permissions Management home page, select **Settings** (the gear icon), and then select the **Data Collectors** subtab.
+
+1. Select the authorization system you want: **AWS**, **Azure**, or **GCP**.
+
+1. For information on how to onboard an AWS account, Azure subscription, or GCP project into Permissions Management, select one of the following articles and follow the instructions:
+
+ - [Onboard an AWS account](onboard-aws.md)
+ - [Onboard an Azure subscription](onboard-azure.md)
+ - [Onboard a GCP project](onboard-gcp.md)
+
+## Next steps
+
+- For an overview of Permissions Management, see [What's Permissions Management?](overview.md)
+- For a list of frequently asked questions (FAQs) about Permissions Management, see [FAQs](faqs.md).
+- For information on how to start viewing information about your authorization system in Permissions Management, see [View key statistics and data about your authorization system](ui-dashboard.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/onboard-gcp.md b/articles/active-directory/cloud-infrastructure-entitlement-management/onboard-gcp.md
new file mode 100644
index 0000000000000..f811ac098cdd4
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/onboard-gcp.md
@@ -0,0 +1,134 @@
+---
+title: Onboard a Google Cloud Platform (GCP) project in Permissions Management
+description: How to onboard a Google Cloud Platform (GCP) project on Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 04/20/2022
+ms.author: kenwith
+---
+
+# Onboard a Google Cloud Platform (GCP) project
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+
+> [!NOTE]
+> The Permissions Management PREVIEW is currently not available for tenants hosted in the European Union (EU).
+
+
+This article describes how to onboard a Google Cloud Platform (GCP) project on Permissions Management.
+
+> [!NOTE]
+> A *global administrator* or *super admin* (an admin for all authorization system types) can perform the tasks in this article after the global administrator has initially completed the steps provided in [Enable Permissions Management on your Azure Active Directory tenant](onboard-enable-tenant.md).
+
+## View a training video on configuring and onboarding a GCP account
+
+To view a video on how to configure and onboard GCP accounts in Permissions Management, select [Configure and onboard GCP accounts](https://www.youtube.com/watch?app=desktop&v=W3epcOaec28).
+
+
+## Onboard a GCP project
+
+1. If the **Data Collectors** dashboard isn't displayed when Permissions Management launches:
+
+ - In the Permissions Management home page, select **Settings** (the gear icon), and then select the **Data Collectors** subtab.
+
+1. On the **Data Collectors** tab, select **GCP**, and then select **Create Configuration**.
+
+### 1. Create an Azure AD OIDC app.
+
+1. On the **Permissions Management Onboarding - Azure AD OIDC App Creation** page, enter the **OIDC Azure App Name**.
+
+ This app is used to set up an OpenID Connect (OIDC) connection to your GCP project. OIDC is an interoperable authentication protocol based on the OAuth 2.0 family of specifications. The scripts generated will create the app of this specified name in your Azure AD tenant with the right configuration.
+
+1. To create the app registration, copy the script and run it in your command-line app.
+
+ > [!NOTE]
+ > 1. To confirm that the app was created, open **App registrations** in Azure and, on the **All applications** tab, locate your app.
+ > 1. Select the app name to open the **Expose an API** page. The **Application ID URI** displayed in the **Overview** page is the *audience value* used while making an OIDC connection with your AWS account.
+
+ 1. Return to Permissions Management, and in the **Permissions Management Onboarding - Azure AD OIDC App Creation**, select **Next**.
+
+### 2. Set up a GCP OIDC project.
+
+1. In the **Permissions Management Onboarding - GCP OIDC Account Details & IDP Access** page, enter the **OIDC Project ID** and **OIDC Project Number** of the GCP project in which the OIDC provider and pool will be created. You can change the role name to your requirements.
+
+ > [!NOTE]
+ > You can find the **Project number** and **Project ID** of your GCP project on the GCP **Dashboard** page of your project in the **Project info** panel.
+
+1. You can change the **OIDC Workload Identity Pool Id**, **OIDC Workload Identity Pool Provider Id** and **OIDC Service Account Name** to meet your requirements.
+
+ Optionally, specify **G-Suite IDP Secret Name** and **G-Suite IDP User Email** to enable G-Suite integration.
+
+ You can either download and run the script at this point or you can do it in the Google Cloud Shell, as described [later in this article](onboard-gcp.md#4-run-scripts-in-cloud-shell-optional-if-not-already-executed).
+1. Select **Next**.
+
+### 3. Set up GCP member projects.
+
+1. In the **Permissions Management Onboarding - GCP Project Ids** page, enter the **Project IDs**.
+
+ You can enter up to 10 GCP project IDs. Select the plus icon next to the text box to insert more project IDs.
+
+1. You can choose to download and run the script at this point, or you can do it via Google Cloud Shell, as described in the [next step](onboard-gcp.md#4-run-scripts-in-cloud-shell-optional-if-not-already-executed).
+
+### 4. Run scripts in Cloud Shell. (Optional if not already executed)
+
+1. In the **Permissions Management Onboarding - GCP Project Ids** page, select **Launch SSH**.
+1. To copy all your scripts into your current directory, in **Open in Cloud Shell**, select **Trust repo**, and then select **Confirm**.
+
+ The Cloud Shell provisions the Cloud Shell machine and makes a connection to your Cloud Shell instance.
+
+ > [!NOTE]
+ > Follow the instructions in the browser as they may be different from the ones given here.
+
+ The **Welcome to Permissions Management GCP onboarding** screen appears, displaying steps you must complete to onboard your GCP project.
+
+### 5. Paste the environment vars from the Permissions Management portal.
+
+1. Return to Permissions Management and select **Copy export variables**.
+1. In the GCP Onboarding shell editor, paste the variables you copied, and then press **Enter**.
+1. Execute the **gcloud auth login**.
+1. Follow instructions displayed on the screen to authorize access to your Google account.
+1. Execute the **sh mciem-workload-identity-pool.sh** to create the workload identity pool, provider, and service account.
+1. Execute the **sh mciem-member-projects.sh** to give Permissions Management permissions to access each of the member projects.
+
+ - If you want to manage permissions through Permissions Management, select **Y** to **Enable controller**.
+
+ - If you want to onboard your projects in read-only mode, select **N** to **Disable controller**.
+
+1. Optionally, execute **mciem-enable-gcp-api.sh** to enable all recommended GCP APIs.
+
+1. Return to **Permissions Management Onboarding - GCP Project Ids**, and then select **Next**.
+
+### 6. Review and save.
+
+1. In the **Permissions Management Onboarding – Summary** page, review the information you've added, and then select **Verify Now & Save**.
+
+ The following message appears: **Successfully Created Configuration.**
+
+ On the **Data Collectors** tab, the **Recently Uploaded On** column displays **Collecting**. The **Recently Transformed On** column displays **Processing.**
+
+ You have now completed onboarding GCP, and Permissions Management has started collecting and processing your data.
+
+### 7. View the data.
+
+- To view the data, select the **Authorization Systems** tab.
+
+ The **Status** column in the table displays **Collecting Data.**
+
+ The data collection process may take some time, depending on the size of the account and how much data is available for collection.
+
+
+
+## Next steps
+
+- For information on how to onboard an Amazon Web Services (AWS) account, see [Onboard an Amazon Web Services (AWS) account](onboard-aws.md).
+- For information on how to onboard a Microsoft Azure subscription, see [Onboard a Microsoft Azure subscription](onboard-azure.md).
+- For information on how to enable or disable the controller after onboarding is complete, see [Enable or disable the controller](onboard-enable-controller-after-onboarding.md).
+- For information on how to add an account/subscription/project after onboarding is complete, see [Add an account/subscription/project after onboarding is complete](onboard-add-account-after-onboarding.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/overview.md b/articles/active-directory/cloud-infrastructure-entitlement-management/overview.md
new file mode 100644
index 0000000000000..67286f887251c
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/overview.md
@@ -0,0 +1,78 @@
+---
+title: What's Permissions Management?
+description: An introduction to Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: overview
+ms.date: 04/20/2022
+ms.author: kenwith
+---
+
+# What's Permissions Management?
+
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+> [!NOTE]
+> The Permissions Management PREVIEW is currently not available for tenants hosted in the European Union (EU).
+
+## Overview
+
+Permissions Management is a cloud infrastructure entitlement management (CIEM) solution that provides comprehensive visibility into permissions assigned to all identities. For example, over-privileged workload and user identities, actions, and resources across multi-cloud infrastructures in Microsoft Azure, Amazon Web Services (AWS), and Google Cloud Platform (GCP).
+
+Permissions Management detects, automatically right-sizes, and continuously monitors unused and excessive permissions.
+
+Organizations have to consider permissions management as a central piece of their Zero Trust security to implement least privilege access across their entire infrastructure:
+
+- Organizations are increasingly adopting multi-cloud strategy and are struggling with the lack of visibility and the increasing complexity of managing access permissions.
+- With the proliferation of identities and cloud services, the number of high-risk cloud permissions is exploding, expanding the attack surface for organizations.
+- IT security teams are under increased pressure to ensure access to their expanding cloud estate is secure and compliant.
+- The inconsistency of cloud providers' native access management models makes it even more complex for Security and Identity to manage permissions and enforce least privilege access policies across their entire environment.
+
+:::image type="content" source="media/cloudknox-overview/cloudknox-key-cases.png" alt-text="CloudKnox Permissions Management.":::
+
+## Key use cases
+
+Permissions Management allows customers to address three key use cases: *discover*, *remediate*, and *monitor*.
+
+### Discover
+
+Customers can assess permission risks by evaluating the gap between permissions granted and permissions used.
+
+- Cross-cloud permissions discovery: Granular and normalized metrics for key cloud platforms: AWS, Azure, and GCP.
+- Permission Creep Index (PCI): An aggregated metric that periodically evaluates the level of risk associated with the number of unused or excessive permissions across your identities and resources. It measures how much damage identities can cause based on the permissions they have.
+- Permission usage analytics: Multi-dimensional view of permissions risk for all identities, actions, and resources.
+
+### Remediate
+
+Customers can right-size permissions based on usage, grant new permissions on-demand, and automate just-in-time access for cloud resources.
+
+- Automated deletion of permissions unused for the past 90 days.
+- Permissions on-demand: Grant identities permissions on-demand for a time-limited period or an as-needed basis.
+
+
+### Monitor
+
+Customers can detect anomalous activities with machine language-powered (ML-powered) alerts and generate detailed forensic reports.
+
+- ML-powered anomaly detections.
+- Context-rich forensic reports around identities, actions, and resources to support rapid investigation and remediation.
+
+Permissions Management deepens Zero Trust security strategies by augmenting the least privilege access principle, allowing customers to:
+
+- Get comprehensive visibility: Discover which identity is doing what, where, and when.
+- Automate least privilege access: Use access analytics to ensure identities have the right permissions, at the right time.
+- Unify access policies across infrastructure as a service (IaaS) platforms: Implement consistent security policies across your cloud infrastructure.
+
+
+
+## Next steps
+
+- For information on how to onboard Permissions Management for your organization, see [Enable Permissions Management in your organization](onboard-enable-tenant.md).
+- For a list of frequently asked questions (FAQs) about Permissions Management, see [FAQs](faqs.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/product-account-explorer.md b/articles/active-directory/cloud-infrastructure-entitlement-management/product-account-explorer.md
new file mode 100644
index 0000000000000..d36ed904a965b
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/product-account-explorer.md
@@ -0,0 +1,78 @@
+---
+title: View roles and identities that can access account information from an external account
+description: How to view information about identities that can access accounts from an external account in Permissions Management.
+services: active-directory
+manager: rkarlin
+ms.service: active-directory
+ms.topic: how-to
+author: kenwith
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# View roles and identities that can access account information from an external account
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+You can view information about users, groups, and resources that can access account information from an external account in Permissions Management.
+
+## Display information about users, groups, or tasks
+
+1. In Permissions Management, select the **Usage analytics** tab, and then, from the dropdown, select one of the following:
+
+ - **Users**
+ - **Group**
+ - **Active resources**
+ - **Active tasks**
+ - **Active resources**
+ - **Serverless functions**
+
+1. To choose an account from your authorization system, select the lock icon in the left panel.
+1. In the **Authorization systems** pane, select an account, then select **Apply**.
+1. To choose a user, role, or group, select the person icon.
+1. Select a user or group, then select **Apply**.
+1. To choose an account from your authorization system, select it from the Authorization Systems menu.
+1. In the user type filter, user, role, or group.
+1. In the **Task** filter, select **All** or **High-risk tasks**, then select **Apply**.
+1. To delete a task, select **Delete**, then select **Apply**.
+
+## Export information about users, groups, or tasks
+
+To export the data in comma-separated values (CSV) file format, select **Export** from the top-right hand corner of the table.
+
+## View users and roles
+1. To view users and roles, select the lock icon, and then select the person icon to open the **Users** pane.
+1. To view the **Role summary**, select the "eye" icon to the right of the role name.
+
+ The following details display:
+ - **Policies**: A list of all the policies attached to the role.
+ - **Trusted entities**: The identities from external accounts that can assume this role.
+
+1. To view all the identities from various accounts that can assume this role, select the down arrow to the left of the role name.
+1. To view a graph of all the identities that can access the specified account and through which role(s), select the role name.
+
+ If Permissions Management is monitoring the external account, it lists specific identities from the accounts that can assume this role. Otherwise, it lists the identities declared in the **Trusted entity** section.
+
+ **Connecting roles**: Lists the following roles for each account:
+ - *Direct roles* that are trusted by the account role.
+ - *Intermediary roles* that aren't directly trusted by the account role but are assumable by identities through role-chaining.
+
+1. To view all the roles from that account that are used to access the specified account, select the down arrow to the left of the account name.
+1. To view the trusted identities declared by the role, select the down arrow to the left of the role name.
+
+ The trusted identities for the role are listed only if the account is being monitored by Permissions Management.
+
+1. To view the role definition, select the "eye" icon to the right of the role name.
+
+ When you select the down arrow and expand details, a search box is displayed. Enter your criteria in this box to search for specific roles.
+
+ **Identities with access**: Lists the identities that come from external accounts:
+ - To view all the identities from that account can access the specified account, select the down arrow to the left of the account name.
+ - To view the **Role summary** for EC2 instances and Lambda functions, select the "eye" icon to the right of the identity name.
+ - To view a graph of how the identity can access the specified account and through which role(s), select the identity name.
+
+1. The **Info** tab displays the **Privilege creep index** and **Service control policy (SCP)** information about the account.
+
+For more information about the **Privilege creep index** and SCP information, see [View key statistics and data about your authorization system](ui-dashboard.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/product-account-settings.md b/articles/active-directory/cloud-infrastructure-entitlement-management/product-account-settings.md
new file mode 100644
index 0000000000000..7219ed8d1fb91
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/product-account-settings.md
@@ -0,0 +1,42 @@
+---
+title: View personal and organization information in Permissions Management
+description: How to view personal and organization information in the Account settings dashboard in Permissions Management.
+services: active-directory
+manager: rkarlin
+ms.service: active-directory
+ms.topic: overview
+author: kenwith
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# View personal and organization information
+
+> [!IMPORTANT]
+> Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+The **Account settings** dashboard in Permissions Management allows you to view personal information, passwords, and account preferences.
+This information can't be modified because the user information is pulled from Azure AD. Only **User Session Time(min)**
+
+## View personal information
+
+1. In the Permissions Management home page, select the down arrow to the right of the **User** (your initials) menu, and then select **Account Settings**.
+
+ The **Personal Information** box displays your **First Name**, **Last Name**, and the **Email Address** that was used to register your account on Permissions Management.
+
+## View current organization information
+
+1. In the Permissions Management home page, select the down arrow to the right of the **User** (your initials) menu, and then select **Account Settings**.
+
+ The **Current Organization Information** displays the **Name** of your organization, the **Tenant ID** box, and the **User Session Timeout (min)**.
+
+1. To change duration of the **User Session Timeout (min)**, select **Edit** (the pencil icon), and then enter the number of minutes before you want a user session to time out.
+1. Select the check mark to confirm your new setting.
+
+
+## Next steps
+
+- For information about how to manage user information, see [Manage users and groups with the User management dashboard](ui-user-management.md).
+- For information about how to view information about active and completed tasks, see [View information about active and completed tasks](ui-tasks.md).
+- For information about how to select group-based permissions settings, see [Select group-based permissions settings](how-to-create-group-based-permissions.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/product-audit-trail.md b/articles/active-directory/cloud-infrastructure-entitlement-management/product-audit-trail.md
new file mode 100644
index 0000000000000..fc0679b50dabc
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/product-audit-trail.md
@@ -0,0 +1,401 @@
+---
+title: Filter and query user activity in Permissions Management
+description: How to filter and query user activity in Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# Filter and query user activity
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+The **Audit** dashboard in Permissions Management details all user activity performed in your authorization system. It captures all high risk activity in a centralized location, and allows system administrators to query the logs. The **Audit** dashboard enables you to:
+
+- Create and save new queries so you can access key data points easily.
+- Query across multiple authorization systems in one query.
+
+## Filter information by authorization system
+
+If you haven't used filters before, the default filter is the first authorization system in the filter list.
+
+If you have used filters before, the default filter is last filter you selected.
+
+1. To display the **Audit** dashboard, on the Permissions Management home page, select **Audit**.
+
+1. To select your authorization system type, in the **Authorization System Type** box, select Amazon Web Services (**AWS**), Microsoft Azure (**Azure**), Google Cloud Platform (**GCP**), or Platform (**Platform**).
+
+1. To select your authorization system, in the **Authorization System** box:
+
+ - From the **List** subtab, select the accounts you want to use.
+ - From the **Folders** subtab, select the folders you want to use.
+
+1. To view your query results, select **Apply**.
+
+## Create, view, modify, or delete a query
+
+There are several different query parameters you can configure individually or in combination. The query parameters and corresponding instructions are listed in the following sections.
+
+- To create a new query, select **New Query**.
+- To view an existing query, select **View** (the eye icon).
+- To edit an existing query, select **Edit** (the pencil icon).
+- To delete a function line in a query, select **Delete** (the minus sign **-** icon).
+- To create multiple queries at one time, select **Add New Tab** to the right of the **Query** tabs that are displayed.
+
+ You can open a maximum number of six query tab pages at the same time. A message will appear when you've reached the maximum.
+
+## Create a query with specific parameters
+
+### Create a query with a date
+
+1. In the **New Query** section, the default parameter displayed is **Date In "Last day"**.
+
+ The first-line parameter always defaults to **Date** and can't be deleted.
+
+1. To edit date details, select **Edit** (the pencil icon).
+
+ To view query details, select **View** (the eye icon).
+
+1. Select **Operator**, and then select an option:
+ - **In**: Select this option to set a time range from the past day to the past year.
+ - **Is**: Select this option to choose a specific date from the calendar.
+ - **Custom**: Select this option to set a date range from the **From** and **To** calendars.
+
+1. To run the query on the current selection, select **Search**.
+
+1. To save your query, select **Save**.
+
+ To clear the recent selections, select **Reset**.
+
+### View operator options for identities
+
+The **Operator** menu displays the following options depending on the identity you select in the first dropdown:
+
+- **Is** / **Is Not**: View a list of all available usernames. You can either select or enter a username in the box.
+- **Contains** / **Not Contains**: Enter text that the **Username** should or shouldn't contain, for example, *Permissions Management*.
+- **In** / **Not In**: View a list all available usernames and select multiple usernames.
+
+### Create a query with a username
+
+1. In the **New query** section, select **Add**.
+
+1. From the menu, select **Username**.
+
+1. From the **Operator** menu, select the required option.
+
+1. To add criteria to this section, select **Add**.
+
+ You can change the operation between **And** / **Or** statements, and select other criteria. For example, the first set of criteria selected can be **Is** with the username **Test**.
+
+1. Select the plus (**+**) sign, select **Or** with **Contains**, and then enter a username, for example, *Permissions Management*.
+
+1. To remove a row of criteria, select **Remove** (the minus sign **-** icon).
+
+1. To run the query on the current selection, select **Search**.
+
+1. To clear the recent selections, select **Reset**.
+
+### Create a query with a resource name
+
+1. In the **New query** section, select **Add**.
+
+1. From the menu, select **Resource Name**.
+
+1. From the **Operator** menu, select the required option.
+
+1. To add criteria to this section, select **Add**.
+
+ You can change the operation between **And** / **Or** statements, and select other criteria. For example, the first set of criteria selected can be **Is** with resource name **Test**.
+
+1. Select the plus (**+**) sign, select **Or** with **Contains**, and then enter a username, for example, *Permissions Management*.
+
+1. To remove a row of criteria, select **Remove** (the minus sign **-** icon).
+
+1. To run the query on the current selection, select **Search**.
+
+1. To clear the recent selections, select **Reset**.
+
+### Create a query with a resource type
+
+1. In the **New Query** section, select **Add**.
+
+1. From the menu, select **Resource Type**.
+
+1. From the **Operator** menu, select the required option.
+
+1. To add criteria to this section, select **Add**.
+
+1. Change the operation between **And** / **Or** statements, and select other criteria. For example, the first set of criteria selected can be **Is** with resource type **s3::bucket**.
+
+1. Select the plus (**+**) sign, select **Or** with **Is**, and then enter or select `ec2::instance`.
+
+1. To remove a row of criteria, select **Remove** (the minus sign **-** icon).
+
+1. To run the query on the current selection, select **Search**.
+
+1. To clear the recent selections, select **Reset**.
+
+
+### Create a query with a task name
+
+1. In the **New Query** section, select **Add**.
+
+1. From the menu, select **Task Name**.
+
+1. From the **Operator** menu, select the required option.
+
+1. To add criteria to this section, select **Add**.
+
+1. Change the operation between **And** / **Or** statements, and select other criteria. For example, the first set of criteria selected can be **Is** with task name **s3:CreateBucket**.
+
+1. Select **Add**, select **Or** with **Is**, and then enter or select `ec2:TerminateInstance`.
+
+1. To remove a row of criteria, select **Remove** (the minus sign **-** icon).
+
+1. To run the query on the current selection, select **Search**.
+
+1. To clear the recent selections, select **Reset**.
+
+### Create a query with a state
+
+1. In the **New Query** section, select **Add**.
+
+1. From the menu, select **State**.
+
+1. From the **Operator** menu, select the required option.
+
+ - **Is** / **Is not**: Allows a user to select in the value field and select **Authorization Failure**, **Error**, or **Success**.
+
+1. To add criteria to this section, select **Add**.
+
+1. Change the operation between **And** / **Or** statements, and select other criteria. For example, the first set of criteria selected can be **Is** with State **Authorization Failure**.
+
+1. Select the **Add** icon, select **Or** with **Is**, and then select **Success**.
+
+1. To remove a row of criteria, select **Remove** (the minus sign **-** icon).
+
+1. To run the query on the current selection, select **Search**.
+
+1. To clear the recent selections, select **Reset**.
+
+### Create a query with a role name
+
+1. In the **New query** section, select **Add**.
+
+2. From the menu, select **Role Name**.
+
+3. From the **Operator** menu, select the required option.
+
+4. To add criteria to this section, select **Add**.
+
+5. Change the operation between **And** / **Or** statements, and select other criteria. For example, the first set of criteria selected can be **Contains** with free text **Test**.
+
+6. Select the **Add** icon, select **Or** with **Contains**, and then enter your criteria, for example *Permissions Management*.
+
+7. To remove a row of criteria, select **Remove** (the minus sign **-** icon).
+
+8. To run the query on the current selection, select **Search**.
+
+9. To clear the recent selections, select **Reset**.
+
+### Create a query with a role session name
+
+1. In the **New Query** section, select **Add**.
+
+2. From the menu, select **Role Session Name**.
+
+3. From the **Operator** menu, select the required option.
+
+4. To add criteria to this section, select **Add**.
+
+5. Change the operation between **And** / **Or** statements, and select other criteria. For example, the first set of criteria selected can be **Contains** with free text **Test**.
+
+6. Select the **Add** icon, select **Or** with **Contains**, and then enter your criteria, for example *Permissions Management*.
+
+7. To remove a row of criteria, select **Remove** (the minus sign **-** icon).
+
+8. To run the query on the current selection, select **Search**.
+
+9. To clear the recent selections, select **Reset**.
+
+### Create a query with an access key ID
+
+1. In the **New Query** section, select **Add**.
+
+2. From the menu, select **Access Key ID**.
+
+3. From the **Operator** menu, select the required option.
+
+4. To add criteria to this section, select **Add**.
+
+5. Change the operation between **And** / **Or** statements, and select other criteria. For example, the first set of criteria selected can be **Contains** with free `AKIAIFXNDW2Z2MPEH5OQ`.
+
+6. Select the **Add** icon, select **Or** with **Not** **Contains**, and then enter `AKIAVP2T3XG7JUZRM7WU`.
+
+7. To remove a row of criteria, select **Remove** (the minus sign **-** icon).
+
+8. To run the query on the current selection, select **Search**.
+
+9. To clear the recent selections, select **Reset**.
+
+### Create a query with a tag key
+
+1. In the **New Query** section, select **Add**.
+
+2. From the menu, select **Tag Key**.
+
+3. From the **Operator** menu, select the required option.
+
+4. To add criteria to this section, select **Add**.
+
+5. Change the operation between **And** / **Or** statements, and select other criteria. For example, the first set of criteria selected can be **Is** and type in, or select **Test**.
+
+6. Select the **Add** icon, select **Or** with **Is**, and then enter your criteria, for example *Permissions Management*.
+
+7. To remove a row of criteria, select **Remove** (the minus sign **-** icon).
+
+8. To run the query on the current selection, select **Search**.
+
+9. To clear the recent selections, select **Reset**.
+
+### Create a query with a tag key value
+
+1. In the **New Query** section, select **Add**.
+
+2. From the menu, select **Tag Key Value**.
+
+3. From the **Operator** menu, select the required option.
+
+4. To add criteria to this section, select **Add**.
+
+5. Change the operation between **And** / **Or** statements, and select other criteria. For example, the first set of criteria selected can be **Is** and type in, or select **Test**.
+
+6. Select the **Add** icon, select **Or** with **Is**, and then enter your criteria, for example *Permissions Management*.
+
+7. To remove a row of criteria, select **Remove** (the minus sign **-** icon).
+
+8. To run the query on the current selection, select **Search**.
+
+9. To clear the recent selections, select **Reset**.
+
+### View query results
+
+1. In the **Activity** table, your query results display in columns.
+
+ The results display all executed tasks that aren't read-only.
+
+1. To sort each column by ascending or descending value, select the up or down arrows next to the column name.
+
+ - **Identity Details**: The name of the identity, for example the name of the role session performing the task.
+
+ - To view the **Raw Events Summary**, which displays the full details of the event, next to the **Name** column, select **View**.
+
+ - **Resource Name**: The name of the resource on which the task is being performed.
+
+ If the column displays **Multiple**, it means multiple resources are listed in the column.
+
+1. To view a list of all resources, hover over **Multiple**.
+
+ - **Resource Type**: Displays the type of resource, for example, *Key* (encryption key) or *Bucket* (storage).
+ - **Task Name**: The name of the task that was performed by the identity.
+
+ An exclamation mark (**!**) next to the task name indicates that the task failed.
+
+ - **Date**: The date when the task was performed.
+
+ - **IP Address**: The IP address from where the user performed the task.
+
+ - **Authorization System**: The authorization system name in which the task was performed.
+
+1. To download the results in comma-separated values (CSV) file format, select **Download**.
+
+## Save a query
+
+1. After you complete your query selections from the **New Query** section, select **Save**.
+
+2. In the **Query Name** box, enter a name for your query, and then select **Save**.
+
+3. To save a query with a different name, select the ellipses (**...**) next to **Save**, and then select **Save As**.
+
+4. Make your query selections from the **New Query** section, select the ellipses (**...**), and then select **Save As**.
+
+5. To save a new query, in the **Save Query** box, enter the name for the query, and then select **Save**.
+
+6. To save an existing query you've modified, select the ellipses (**...**).
+
+ - To save a modified query under the same name, select **Save**.
+ - To save a modified query under a different name, select **Save As**.
+
+### View a saved query
+
+1. Select **Saved Queries**, and then select a query from the **Load Queries** list.
+
+ A message box opens with the following options: **Load with the saved authorization system** or **Load with the currently selected authorization system**.
+
+1. Select the appropriate option, and then select **Load Queries**.
+
+1. View the query information:
+
+ - **Query Name**: Displays the name of the saved query.
+ - **Query Type**: Displays whether the query is a *System* query or a *Custom* query.
+ - **Schedule**: Displays how often a report will be generated. You can schedule a one-time report or a monthly report.
+ - **Next On**: Displays the date and time the next report will be generated.
+ - **Format**: Displays the output format for the report, for example, CSV.
+ - **Last Modified On**: Displays the date in which the query was last modified on.
+
+1. To view or set schedule details, select the gear icon, select **Create Schedule**, and then set the details.
+
+ If a schedule has already been created, select the gear icon to open the **Edit Schedule** box.
+
+ - **Repeat**: Sets how often the report should repeat.
+ - **Start On**: Sets the date when you want to receive the report.
+ - **At**: Sets the specific time when you want to receive the report.
+ - **Report Format**: Select the output type for the file, for example, CSV.
+ - **Share Report With**: The email address of the user who is creating the schedule is displayed in this field. You can add other email addresses.
+
+1. After selecting your options, select **Schedule**.
+
+
+### Save a query under a different name
+
+- Select the ellipses (**...**).
+
+ System queries have only one option:
+
+ - **Duplicate**: Creates a duplicate of the query and names the file *Copy of XXX*.
+
+ Custom queries have the following options:
+
+ - **Rename**: Enter the new name of the query and select **Save**.
+ - **Delete**: Delete the saved query.
+
+ The **Delete Query** box opens, asking you to confirm that you want to delete the query. Select **Yes** or **No**.
+
+ - **Duplicate**: Creates a duplicate of the query and names it *Copy of XXX*.
+ - **Delete Schedule**: Deletes the schedule details for this query.
+
+ This option isn't available if you haven't yet saved a schedule.
+
+ The **Delete Schedule** box opens, asking you to confirm that you want to delete the schedule. Select **Yes** or **No**.
+
+
+## Export the results of a query as a report
+
+- To export the results of the query, select **Export**.
+
+ Permissions Management exports the results in comma-separated values (**CSV**) format, portable document format (**PDF**), or Microsoft Excel Open XML Spreadsheet (**XLSX**) format.
+
+
+## Next steps
+
+- For information on how to view how users access information, see [Use queries to see how users access information](ui-audit-trail.md).
+- For information on how to create a query, see [Create a custom query](how-to-create-custom-queries.md).
+- For information on how to generate an on-demand report from a query, see [Generate an on-demand report from a query](how-to-audit-trail-results.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/product-dashboard.md b/articles/active-directory/cloud-infrastructure-entitlement-management/product-dashboard.md
new file mode 100644
index 0000000000000..7822f837ca117
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/product-dashboard.md
@@ -0,0 +1,82 @@
+---
+title: View data about the activity in your authorization system in Permissions Management
+description: How to view data about the activity in your authorization system in the Permissions Management Dashboard in Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+
+
+# View data about the activity in your authorization system
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+The Permissions Management **Dashboard** provides an overview of the authorization system and account activity being monitored. You can use this dashboard to view data collected from your Amazon Web Services (AWS), Microsoft Azure, and Google Cloud Platform (GCP) authorization systems.
+
+## View data about your authorization system
+
+1. In the Permissions Management home page, select **Dashboard**.
+1. From the **Authorization systems type** dropdown, select **AWS**, **Azure**, or **GCP**.
+1. Select the **Authorization System** box to display a **List** of accounts and **Folders** available to you.
+1. Select the accounts and folders you want, and then select **Apply**.
+
+ The **Permission Creep Index (PCI)** chart updates to display information about the accounts and folders you selected. The number of days since the information was last updated displays in the upper right corner.
+
+1. In the Permission Creep Index (PCI) graph, select a bubble.
+
+ The bubble displays the number of identities that are considered high-risk.
+
+ *High-risk* refers to the number of users who have permissions that exceed their normal or required usage.
+
+1. Select the box to display detailed information about the identities contributing to the **Low PCI**, **Medium PCI**, and **High PCI**.
+
+1. The **Highest PCI change** displays the authorization system name with the PCI number and the change number for the last seven days, if applicable.
+
+ - To view all the changes and PCI ratings in your authorization system, select **View all**.
+
+1. To return to the PCI graph, select the **Graph** icon in the upper right of the list box.
+
+For more information about the Permissions Management **Dashboard**, see [View key statistics and data about your authorization system](ui-dashboard.md).
+
+## View user data on the PCI heat map
+
+The **Permission Creep Index (PCI)** heat map shows the incurred risk of users with access to high-risk privileges. The distribution graph displays all the users who contribute to the privilege creep. It displays how many users contribute to a particular score. For example, if the score from the PCI chart is 14, the graph shows how many users have a score of 14.
+
+- To view detailed data about a user, select the number.
+
+ The PCI trend graph shows you the historical trend of the PCI score over the last 90 days.
+
+- To download the **PCI History** report, select **Download** (the down arrow icon).
+
+
+## View information about users, roles, resources, and PCI trends
+
+To view specific information about the following, select the number displayed on the heat map.
+
+- **Users**: Displays the total number of users and how many fall into the high, medium, and low categories.
+- **Roles**: Displays the total number of roles and how many fall into the high, medium, and low categories.
+- **Resources**: Displays the total number of resources and how many fall into the high, medium, and low categories.
+- **PCI trend**: Displays a line graph of the PCI trend over the last several weeks.
+
+## View identity findings
+
+The **Identity** section below the heat map on the left side of the page shows all the relevant findings about identities, including roles that can access secret information, roles that are inactive, over provisioned active roles, and so on.
+
+- To expand the full list of identity findings, select **All findings**.
+
+## View resource findings
+
+The **Resource** section below the heat map on the right side of the page shows all the relevant findings about your resources. It includes unencrypted S3 buckets, open security groups, managed keys, and so on.
+
+## Next steps
+
+- For more information about how to view key statistics and data in the Dashboard, see [View key statistics and data about your authorization system](ui-dashboard.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/product-data-inventory.md b/articles/active-directory/cloud-infrastructure-entitlement-management/product-data-inventory.md
new file mode 100644
index 0000000000000..50ad92ce49182
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/product-data-inventory.md
@@ -0,0 +1,56 @@
+---
+title: Display an inventory of created resources and licenses for your authorization system
+description: How to display an inventory of created resources and licenses for your authorization system in Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# Display an inventory of created resources and licenses for your authorization system
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+You can use the **Inventory** dashboard in Permissions Management to display an inventory of created resources and licensing information for your authorization system and its associated accounts.
+
+## View resources created for your authorization system
+
+1. To access your inventory information, in the Permissions Management home page, select **Settings** (the gear icon).
+1. Select the **Inventory** tab, select the **Inventory** subtab, and then select your authorization system type:
+
+ - **AWS** for Amazon Web Services.
+ - **Azure** for Microsoft Azure.
+ - **GCP** for Google Cloud Platform.
+
+ The **Inventory** tab displays information pertinent to your authorization system type.
+
+1. To change the columns displayed in the table, select **Columns**, and then select the information you want to display.
+
+ - To discard your changes, select **Reset to default**.
+
+## View the number of licenses associated with your authorization system
+
+1. To access licensing information about your data sources, in the Permissions Management home page, select **Settings** (the gear icon).
+
+1. Select the **Inventory** tab, select the **Licensing** subtab, and then select your authorization system type.
+
+ The **Licensing** table displays the following information pertinent to your authorization system type:
+
+ - The names of your accounts in the **Authorization system** column.
+ - The number of **Compute** licenses.
+ - The number of **Serverless** licenses.
+ - The number of **Compute containers**.
+ - The number of **Databases**.
+ - The **Total number of licenses**.
+
+
+## Next steps
+
+- For information about viewing and configuring settings for collecting data from your authorization system and its associated accounts, see [View and configure settings for data collection](product-data-sources.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/product-data-sources.md b/articles/active-directory/cloud-infrastructure-entitlement-management/product-data-sources.md
new file mode 100644
index 0000000000000..35fc4609c1268
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/product-data-sources.md
@@ -0,0 +1,107 @@
+---
+title: View and configure settings for data collection from your authorization system in Permissions Management
+description: How to view and configure settings for collecting data from your authorization system in Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# View and configure settings for data collection
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+
+You can use the **Data Collectors** dashboard in Permissions Management to view and configure settings for collecting data from your authorization systems. It also provides information about the status of the data collection.
+
+## Access and view data sources
+
+1. To access your data sources, in the Permissions Management home page, select **Settings** (the gear icon). Then select the **Data Collectors** tab.
+
+1. On the **Data Collectors** dashboard, select your authorization system type:
+
+ - **AWS** for Amazon Web Services.
+ - **Azure** for Microsoft Azure.
+ - **GCP** for Google Cloud Platform.
+
+1. To display specific information about an account:
+
+ 1. Enter the following information:
+
+ - **Uploaded on**: Select **All** accounts, **Online** accounts, or **Offline** accounts.
+ - **Transformed on**: Select **All** accounts, **Online** accounts, or **Offline** accounts.
+ - **Search**: Enter an ID or Internet Protocol (IP) address to find a specific account.
+
+ 1. Select **Apply** to display the results.
+
+ Select **Reset Filter** to discard your settings.
+
+1. The following information displays:
+
+ - **ID**: The unique identification number for the data collector.
+ - **Data types**: Displays the data types that are collected:
+ - **Entitlements**: The permissions of all identities and resources for all the configured authorization systems.
+ - **Recently uploaded on**: Displays whether the entitlement data is being collected.
+
+ The status displays *ONLINE* if the data collection has no errors and *OFFLINE* if there are errors.
+ - **Recently transformed on**: Displays whether the entitlement data is being processed.
+
+ The status displays *ONLINE* if the data processing has no errors and *OFFLINE* if there are errors.
+ - The **Tenant ID**.
+ - The **Tenant name**.
+
+## Modify a data collector
+
+1. Select the ellipses **(...)** at the end of the row in the table.
+1. Select **Edit Configuration**.
+
+ The **Permissions Management Onboarding - Summary** box displays.
+
+1. Select **Edit** (the pencil icon) for each field you want to change.
+1. Select **Verify now & save**.
+
+ To verify your changes later, select **Save & verify later**.
+
+ When your changes are saved, the following message displays: **Successfully updated configuration.**
+
+## Delete a data collector
+
+1. Select the ellipses **(...)** at the end of the row in the table.
+1. Select **Delete Configuration**.
+
+ The **Permissions Management Onboarding - Summary** box displays.
+1. Select **Delete**.
+1. Check your email for a one time password (OTP) code, and enter it in **Enter OTP**.
+
+ If you don't receive an OTP, select **Resend OTP**.
+
+ The following message displays: **Successfully deleted configuration.**
+
+## Start collecting data from an authorization system
+
+1. Select the **Authorization Systems** tab, and then select your authorization system type.
+1. Select the ellipses **(...)** at the end of the row in the table.
+1. Select **Collect Data**.
+
+ A message displays to confirm data collection has started.
+
+## Stop collecting data from an authorization system
+
+1. Select the ellipses **(...)** at the end of the row in the table.
+1. To delete your authorization system, select **Delete**.
+
+ The **Validate OTP To Delete Authorization System** box displays.
+
+1. Enter the OTP code
+1. Select **Verify**.
+
+## Next steps
+
+- For information about viewing an inventory of created resources and licensing information for your authorization system, see [Display an inventory of created resources and licenses for your authorization system](product-data-inventory.md)
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/product-define-permission-levels.md b/articles/active-directory/cloud-infrastructure-entitlement-management/product-define-permission-levels.md
new file mode 100644
index 0000000000000..9aeb4875d5ccb
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/product-define-permission-levels.md
@@ -0,0 +1,276 @@
+---
+title: Define and manage users, roles, and access levels in Permissions Management
+description: How to define and manage users, roles, and access levels in Permissions Management User management dashboard.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# Define and manage users, roles, and access levels
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+In Permissions Management, a key component of the interface is the User management dashboard. This topic describes how system administrators can define and manage users, their roles, and their access levels in the system.
+
+## The User management dashboard
+
+The Permissions Management User management dashboard provides a high-level overview of:
+
+- Registered and invited users.
+- Permissions allowed for each user within a given system.
+- Recent user activity.
+
+It also provides the functionality to invite or delete a user, edit, view, and customize permissions settings.
+
+
+## Manage users for customers without SAML integration
+
+Follow this process to invite users if the customer hasn't enabled SAML integration with the Permissions Management application.
+
+### Invite a user to Permissions Management
+
+Inviting a user to Permissions Management adds the user to the system and allows system administrators to assign permissions to those users. Follow the steps below to invite a user to Permissions Management.
+
+1. To invite a user to Permissions Management, select the down caret icon next to the **User** icon on the right of the screen, and then select **User Management**.
+2. From the **Users** tab, select **Invite User**.
+3. From the **Set User Permission** window, in the **User** text box, enter the user's email address.
+4. Under **Permission**, select the applicable option.
+
+ - **Admin for All Authorization System Types**: **View**, **Control**, and **Approve** permissions for all Authorization System Types.
+
+ 1. Select **Next**.
+ 2. Select **Requestor for User** for each authorization system, if applicable.
+
+ A user must have an account with a valid email address in the authorization system to select **Requestor for User**. If a user doesn't exist in the authorization system, **Requestor for User** is grayed out.
+ 3. Optional: To request access for multiple other identities, under **Requestor for Other Users**, select **Add**, and then select **Users**.
+
+ For example, a user may have various roles in different authorization systems, so they can select the **Add** icon and the **Users** icon to request access for all their accounts.
+ 4. On the **Add Users** screen, enter the user's name or ID in the **User Search** box and select all applicable users. Then select **Add**.
+
+ - **Admin for Selected Authorization System Types**: **View**, **Control**, and **Approve** permissions for selected Authorization System Types.
+
+ 1. Select **Viewer**, **Controller**, or **Approver** for the appropriate authorization system(s).
+ 2. Select **Next**.
+ 3. Select **Requestor for User** for each authorization system, if applicable.
+
+ A user must have an account with a valid email address in the authorization system to select **Requestor for User**. If a user doesn't exist in the authorization system, **Requestor for User** is grayed out.
+ 4. Optional: To request access for multiple other identities, under **Requestor for Other Users**, select **Add**, and then select **Users**.
+
+ For example, a user may have various roles in different authorization systems, so they can select **Add**, and then select **Users** to request access for all their accounts.
+ 5. On the **Add Users** screen, enter the user's name or ID in the **User Search** box and select all applicable users. Then select **Add**.
+
+ - **Custom**: **View**, **Control**, and **Approve** permissions for specific accounts in **Auth System Types**.
+
+ 1. Select **Next**.
+
+ The default view displays the **List** section.
+ 2. Select the appropriate boxes for **Viewer**, **Controller**, or **Approver**.
+
+ For access to all authorization system types, select **All (Current and Future)**.
+ 1. Select **Next**.
+ 1. Select **Requestor for User** for each authorization system, if applicable.
+
+ A user must have an account with a valid email address in the authorization system to select **Requestor for User**. If a user doesn't exist in the authorization system, **Requestor for User** is grayed out.
+ 5. Optional: To request access for multiple other identities, under **Requestor for Other Users**, select **Add**, and then select **Users**.
+
+ For example, a user may have various roles in different authorization systems, so they can select **Add**, and then select **Users** to request access for all their accounts.
+ 6. On the **Add Users** screen, enter the user's name or ID in the **User Search** box and select all applicable users. Then select **Add**.
+
+5. Select **Save**.
+
+ The following message displays in green at the top of the screen: **New User Has Been Invited Successfully**.
+
+
+
+## Manage users for customers with SAML integration
+
+Follow this process to invite users if the customer has enabled SAML integration with the Permissions Management application.
+
+### Create a permission in Permissions Management
+
+Creating a permission directly in Permissions Management allows system administrators to assign permissions to specific users. The following steps help you to create a permission.
+
+- On the right side of the screen, select the down caret icon next to **User**, and then select **User management**.
+
+- For **Users**:
+ 1. To create permissions for a specific user, select the **Users** tab, and then select **Permission.**
+ 2. From the **Set User Permission** window, enter the user's email address in the **User** text box.
+ 3. Under **Permission**, select the applicable button. Then expand menu to view instructions for each option.
+ - **Admin for All Authorization System Types**: **View**, **Control**, and **Approve** permissions for all Authorization System Types.
+ 1. Select **Next**.
+ 2. Check **Requestor for User** for each authorization system, if applicable.
+
+ A user must have an account with a valid email address in the authorization system to select **Requestor for User**. If a user doesn't exist in the authorization system, **Requestor for User** is grayed out.
+
+ 3. Optional: To request access for multiple other identities, under **Requestor for Other Users**, select **Add**, and then select **Users**.
+
+ For example, a user may have various roles in different authorization systems, so they can select **Add**, and then select **Users** to request access for all their accounts.
+
+ 4. On the **Add Users** screen, enter the user's name or ID in the **User Search** box and select all applicable users. Then select **Add**.
+
+ - **Admin for Selected Authorization System Types**: **View**, **Control**, and **Approve** permissions for selected Authorization System Types.
+ 1. Check **Viewer**, **Controller**, or **Approver** for the appropriate authorization system(s).
+ 2. Select **Next**.
+ 3. Check **Requestor for User** for each authorization system, if applicable.
+
+ A user must have an account with a valid email address in the authorization system to select **Requestor for User**. If a user doesn't exist in the authorization system, **Requestor for User** is grayed out.
+
+ 4. Optional: To request access for multiple other identities, under **Requestor for Other Users**, select **Add**, and then select **Users**.
+
+ For example, a user may have various roles in different authorization systems, so they can select **Add**, and then select **Users** to request access for all their accounts.
+ 5. On the **Add Users** screen, enter the user's name or ID in the **User Search** box and select all applicable users. Then select **Add**.
+ - **Custom**: **View**, **Control**, and **Approve** permissions for specific accounts in **Auth System Types**.
+
+ 1. Select **Next**.
+
+ The default view displays the **List** tab, which displays individual authorization systems.
+ - To view groups of authorization systems organized into folder, select the **Folder** tab.
+ 2. Check the appropriate boxes for **Viewer**, **Controller**, or **Approver**.
+
+ For access to all authorization system types, select **All (Current and Future)**.
+ 3. Select **Next**.
+ 4. Check **Requestor for User** for each authorization system, if applicable.
+
+ A user must have an account with a valid email address in the authorization system to select **Requestor for User**. If a user doesn't exist in the authorization system, **Requestor for User** is grayed out.
+ 5. Optional: To request access for multiple other identities, under **Requestor for Other Users**, select **Add**, and then select **Users**.
+
+ For example, a user can have various roles in different authorization systems, so they can select **Add**, and then select **Users** to request access for all their accounts.
+
+ 6. On the **Add Users** screen, enter the user's name or ID in the **User Search** box and select all applicable users. Then select **Add**.
+
+ 4. Select **Save**.
+
+ The following message displays in green at the top of the screen:
+ **New User Has Been Created Successfully**.
+ 5. The new user receives an email invitation to log in to Permissions Management.
+
+### The Pending tab
+
+1. To view the created permission, select the **Pending** tab. The system administrator can view the following details:
+ - **Email Address**: Displays the email address of the invited user.
+ - **Permissions**: Displays each service account and if the user has permissions as a **Viewer**, **Controller**, **Approver**, or **Requestor**.
+ - **Invited By**: Displays the email address of the person who sent the invitation.
+ - **Sent**: Displays the date the invitation was sent to the user.
+2. To make changes to the following, select the ellipses **(...)** in the far right column.
+ - **View Permissions**: Displays a list of accounts for which the user has permissions.
+ - **Edit Permissions**: System administrators can edit a user's permissions.
+ - **Delete**: System administrators can delete a permission
+ - **Reinvite**: System administrator can reinvite the permission if the user didn't receive the email invite
+
+ When a user registers with Permissions Management, they move from the **Pending** tab to the **Registered** tab.
+
+### The Registered tab
+
+- For **Users**:
+
+ 1. The **Registered** tab provides a high-level overview of user details to system administrators:
+ - The **Name/Email Address** column lists the name and email address of the user.
+ - The **Permissions** column lists each authorization system, and each type of permission.
+
+ If a user has all permissions for all authorization systems, **Admin for All Authorization Types** display across all columns. If a user only has some permissions, numbers display in each column they have permissions for. For example, if the number "3" is listed in the **Viewer** column, the user has viewer permission for three accounts within that authorization system.
+ - The **Joined On** column records when the user registered for Permissions Management.
+ - The **Recent Activity** column displays the date when a user last performed an activity.
+ - The **Search** button allows a system administrator to search for a user by name and all users who match the criteria displays.
+ - The **Filters** option allows a system administrator to filter by specific details. When the filter option is selected, the **Authorization System** box displays.
+
+ To display all authorization system accounts,Select **All**. Then select the appropriate boxes for the accounts that need to be viewed.
+ 2. To make the changes to the following changes, select the ellipses **(...)** in the far right column:
+ - **View Permissions**: Displays a list of accounts for which the user has permissions.
+ - **Edit Permissions**: System administrators can edit the accounts for which a user has permissions.
+ - **Remove Permissions**: System administrators can remove permissions from a user.
+
+- For **Groups**:
+ 1. To create permissions for a specific user, select the **Groups** tab, and then select **Permission**.
+ 2. From the **Set Group Permission** window, enter the name of the group in the **Group Name** box.
+
+ The identity provider creates groups.
+
+ Some users may be part of multiple groups. In this case, the user's overall permissions is a union of the permissions assigned the various groups the user is a member of.
+ 3. Under **Permission**, select the applicable button and expand the menu to view instructions for each option.
+
+ - **Admin for All Authorization System Types**: **View**, **Control**, and **Approve** permissions for all Authorization System Types.
+ 1. Select **Next**.
+ 2. Check **Requestor for User** for each authorization system, if applicable.
+
+ A user must have an account with a valid email address in the authorization system to select **Requestor for User**. If a user doesn't exist in the authorization system, **Requestor for User** is grayed out.
+ 3. Optional: To request access for multiple other identities, under **Requestor for Other Users**, select **Add**, and then select **Users**.
+
+ For example, a user may have various roles in different authorization systems, so they can select **Add**, and then select **Users** to request access for all their accounts.
+
+ 4. On the **Add Users** screen, enter the user's name or ID in the **User Search** box and select all applicable users. Then select **Add**.
+
+ - **Admin for Selected Authorization System Types**: **View**, **Control**, and **Approve** permissions for selected Authorization System Types.
+ 1. Check **Viewer**, **Controller**, or **Approver** for the appropriate authorization system(s).
+ 2. Select **Next**.
+ 3. Check **Requestor for User** for each authorization system, if applicable.
+
+ A user must have an account with a valid email address in the authorization system to select **Requestor for User**. If a user doesn't exist in the authorization system, **Requestor for User** is grayed out.
+ 4. Optional: To request access for multiple other identities, under **Requestor for Other Users**, select **Add**, and then select **Users**.
+
+ For example, a user may have various roles in different authorization systems, so they can select **Add**, and then select **Users** to request access for all their accounts.
+
+ 5. On the **Add Users** screen, enter the user's name or ID in the **User Search** box and select all applicable users. Then select **Add**.
+
+ - **Custom**: **View**, **Control**, and **Approve** permissions for specific accounts in Auth System Types.
+ 1. Select **Next**.
+
+ The default view displays the **List** section.
+
+ 2. Check the appropriate boxes for **Viewer**, **Controller**, or **Approver.
+
+ For access to all authorization system types, select **All (Current and Future)**.
+
+ 3. Select **Next**.
+
+ 4. Check **Requestor for User** for each authorization system, if applicable.
+
+ A user must have an account with a valid email address in the authorization system to select **Requestor for User**. If a user doesn't exist in the authorization system, **Requestor for User** is grayed out.
+
+ 5. Optional: To request access for multiple other identities, under **Requestor for Other Users**, select **Add**, and then select **Users**.
+
+ For example, a user may have various roles in different authorization systems, so they can select **Add**, and then select **Users** to request access for all their accounts.
+
+ 6. On the **Add Users** screen, enter the user's name or ID in the **User Search** box and select all applicable users. Then select **Add**.
+
+ 4. Select **Save**.
+
+ The following message displays in green at the top of the screen: **New Group Has Been Created Successfully**.
+
+### The Groups tab
+
+1. The **Groups** tab provides a high-level overview of user details to system administrators:
+
+ - The **Name** column lists the name of the group.
+ - The **Permissions** column lists each authorization system, and each type of permission.
+
+ If a group has all permissions for all authorization systems, **Admin for All Authorization Types** displays across all columns.
+
+ If a group only has some permissions, the corresponding columns display numbers for the groups.
+
+ For example, if the number "3" is listed in the **Viewer** column, then the group has viewer permission for three accounts within that authorization system.
+ - The **Modified By** column records the email address of the person who created the group.
+ - The **Modified On** column records the date the group was last modified on.
+ - The **Search** button allows a system administrator to search for a group by name and all groups who match the criteria displays.
+ - The **Filters** option allows a system administrator to filter by specific details. When the filter option is selected, the **Authorization System** box displays.
+
+ To display all authorization system accounts, select **All**. Then select the appropriate boxes for the accounts that need to be viewed.
+
+2. To make changes to the following, select the ellipses **(...)** in the far right column:
+ - **View Permissions**: Displays a list of the accounts for which the group has permissions.
+ - **Edit Permissions**: System administrators can edit a group's permissions.
+ - **Duplicate**: System administrators can duplicate permissions from one group to another.
+ - **Delete**: System administrators can delete permissions from a group.
+
+
+## Next steps
+
+- For information about how to view user management information, see [Manage users with the User management dashboard](ui-user-management.md).
+- For information about how to create group-based permissions, see [Create group-based permissions](how-to-create-group-based-permissions.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/product-integrations.md b/articles/active-directory/cloud-infrastructure-entitlement-management/product-integrations.md
new file mode 100644
index 0000000000000..b20516154c2bc
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/product-integrations.md
@@ -0,0 +1,51 @@
+---
+title: View integration information about an authorization system in Permissions Management
+description: View integration information about an authorization system in Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# View integration information about an authorization system
+
+> [!IMPORTANT]
+> Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+The **Integrations** dashboard in Permissions Management allows you to view all your authorization systems in one place, and to ensure all applications are functioning as one. This information helps improve quality and performance as a whole.
+
+## Display integration information about an authorization system
+
+Refer to the **Integration** subpages in Permissions Management for information about available authorization systems for integration.
+
+1. To display the **Integrations** dashboard, select **User** (your initials) in the upper right of the screen, and then select **Integrations.**
+
+ The **Integrations** dashboard displays a tile for each available authorization system.
+
+1. Select an authorization system tile to view its integration information.
+
+## Available integrated authorization systems
+
+The following authorization systems may be listed in the **Integrations** dashboard, depending on which systems are integrated into the Permissions Management application.
+
+- **ServiceNow**: Manages digital workflows for enterprise operations, and the Permissions Management integration allows you to request and approve permissions through the ServiceNow ticketing workflow.
+- **Splunk**: Searches, monitors, and analyzes machine-generated data, and the Permissions Management integration enables exporting usage analytics data, alerts, and logs.
+- **HashiCorp Terraform**: Permissions Management enables the generation of least-privilege policies through the Hashi Terraform provider.
+- **Permissions Management API**: The Permissions Management application programming interface (API) provides access to Permissions Management features.
+- **Saviynt**: Enables you to view Identity entitlements and usage inside the Saviynt console.
+- **Securonix**: Enables exporting usage analytics data, alerts, and logs.
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/product-permission-analytics.md b/articles/active-directory/cloud-infrastructure-entitlement-management/product-permission-analytics.md
new file mode 100644
index 0000000000000..6c51f7ca8c575
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/product-permission-analytics.md
@@ -0,0 +1,102 @@
+---
+title: Create and view permission analytics triggers in Permissions Management
+description: How to create and view permission analytics triggers in the Permission analytics tab in Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# Create and view permission analytics triggers
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+This article describes how you can create and view permission analytics triggers in Permissions Management.
+
+## View permission analytics triggers
+
+1. In the Permissions Management home page, select **Activity triggers** (the bell icon).
+1. Select **Permission Analytics**, and then select the **Alerts** subtab.
+
+ The **Alerts** subtab displays the following information:
+
+ - **Alert Name**: Lists the name of the alert.
+ - To view the name, ID, role, domain, authorization system, statistical condition, anomaly date, and observance period, select **Alert name**.
+ - To expand the top information found with a graph of when the anomaly occurred, select **Details**.
+ - **Anomaly Alert Rule**: Displays the name of the rule select when creating the alert.
+ - **# of Occurrences**: Displays how many times the alert trigger has occurred.
+ - **Task**: Displays how many tasks are affected by the alert
+ - **Resources**: Displays how many resources are affected by the alert
+ - **Identity**: Displays how many identities are affected by the alert
+ - **Authorization System**: Displays which authorization systems the alert applies to
+ - **Date/Time**: Displays the date and time of the alert.
+ - **Date/Time (UTC)**: Lists the date and time of the alert in Coordinated Universal Time (UTC).
+
+1. To filter the alerts, select the appropriate alert name or, from the **Alert Name** menu,select **All**.
+
+ - From the **Date** dropdown menu, select **Last 24 Hours**, **Last 2 Days**, **Last Week**, or **Custom Range**, and then select **Apply**.
+
+ If you select **Custom range**, select date and time settings, and then select **Apply**. - **View Trigger**: Displays the current trigger settings and applicable authorization system details.
+
+1. To view the following details, select the ellipses (**...**):
+
+ - **Details**: Displays **Authorization System Type**, **Authorization Systems**, **Resources**, **Tasks**, and **Identities** that matched the alert criteria.
+1. To view specific matches, select **Resources**, **Tasks**, or **Identities**.
+
+ The **Activity** section displays details about the **Identity Name**, **Resource Name**, **Task Name**, **Date**, and **IP Address**.
+
+## Create a permission analytics trigger
+
+1. In the Permissions Management home page, select **Activity triggers** (the bell icon).
+1. Select **Permission Analytics**, select the **Alerts** subtab, and then select **Create Permission Analytics Trigger**.
+1. In the **Alert Name** box, enter a name for the alert.
+1. Select the **Authorization System**.
+1. Select **Identity performed high number of tasks**, and then select **Next**.
+1. On the **Authorization Systems** tab, select the appropriate accounts and folders, or select **All**.
+
+ This screen defaults to the **List** view but can also be changed to the **Folder** view, and the applicable folder can be selected instead of individually by system.
+
+ - The **Status** column displays if the authorization system is online or offline
+ - The **Controller** column displays if the controller is enabled or disabled.
+
+1. On the **Configuration** tab, to update the **Time Interval**, select **90 Days**, **60 Days**, or **30 Days** from the **Time range** dropdown.
+1. Select **Save**.
+
+## View permission analytics alert triggers
+
+1. In the Permissions Management home page, select **Activity triggers** (the bell icon).
+1. Select **Permission Analytics**, and then select the **Alert Triggers** subtab.
+
+ The **Alert triggers** subtab displays the following information:
+
+ - **Alert**: Lists the name of the alert.
+ - **Anomaly Alert Rule**: Displays the name of the rule select when creating the alert.
+ - **# of users subscribed**: Displays the number of users subscribed to the alert.
+ - **Created By**: Displays the email address of the user who created the alert.
+ - **Last modified By**: Displays the email address of the user who last modified the alert.
+ - **Last Modified On**: Displays the date and time the trigger was last modified.
+ - **Subscription**: Toggle the button to **On** or **Off**.
+ - **View Trigger**: Displays the current trigger settings and applicable authorization system details.
+
+1. To view other options available to you, select the ellipses (**...**), and then make a selection from the available options:
+
+ - **Details** displays **Authorization System Type**, **Authorization Systems**, **Resources**, **Tasks**, and **Identities** that matched the alert criteria.
+ - To view the specific matches, select **Resources**, **Tasks**, or **Identities**.
+ - The **Activity** section displays details about the **Identity Name**, **Resource Name**, **Task Name**, **Date**, and **IP Address**.
+
+1. To filter by **Activated** or **Deactivated**, in the **Status** section, select **All**, **Activated**, or **Deactivated**, and then select **Apply**.
+
+
+## Next steps
+
+- For an overview on activity triggers, see [View information about activity triggers](ui-triggers.md).
+- For information on activity alerts and alert triggers, see [Create and view activity alerts and alert triggers](how-to-create-alert-trigger.md).
+- For information on rule-based anomalies and anomaly triggers, see [Create and view rule-based anomalies and anomaly triggers](product-rule-based-anomalies.md).
+- For information on finding outliers in identity's behavior, see [Create and view statistical anomalies and anomaly triggers](product-statistical-anomalies.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/product-permissions-analytics-reports.md b/articles/active-directory/cloud-infrastructure-entitlement-management/product-permissions-analytics-reports.md
new file mode 100644
index 0000000000000..523b70421c076
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/product-permissions-analytics-reports.md
@@ -0,0 +1,126 @@
+---
+title: Generate and download the Permissions analytics report in Permissions Management
+description: How to generate and download the Permissions analytics report in Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# Generate and download the Permissions analytics report
+
+> [!IMPORTANT]
+> Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+This article describes how to generate and download the **Permissions analytics report** in Permissions Management.
+
+> [!NOTE]
+> This topic applies only to Amazon Web Services (AWS) users.
+
+## Generate the Permissions analytics report
+
+1. In the Permissions Management home page, select the **Reports** tab, and then select the **Systems Reports** subtab.
+
+ The **Systems Reports** subtab displays a list of reports the **Reports** table.
+1. Find **Permissions Analytics Report** in the list, and to download the report, select the down arrow to the right of the report name, or from the ellipses **(...)** menu, select **Download**.
+
+ The following message displays: **Successfully Started To Generate On Demand Report.**
+
+1. For detailed information in the report, select the right arrow next to one of the following categories. Or, select the required category under the **Findings** column.
+
+ - **AWS**
+ - Inactive Identities
+ - Users
+ - Roles
+ - Resources
+ - Serverless Functions
+ - Inactive Groups
+ - Super Identities
+ - Users
+ - Roles
+ - Resources
+ - Serverless Functions
+ - Over-Provisioned Active Identities
+ - Users
+ - Roles
+ - Resources
+ - Serverless Functions
+ - PCI Distribution
+ - Privilege Escalation
+ - Users
+ - Roles
+ - Resources
+ - S3 Bucket Encryption
+ - Unencrypted Buckets
+ - SSE-S3 Buckets
+ - S3 Buckets Accessible Externally
+ - EC2 S3 Buckets Accessibility
+ - Open Security Groups
+ - Identities That Can Administer Security Tools
+ - Users
+ - Roles
+ - Resources
+ - Serverless Functions
+ - Identities That Can Access Secret Information
+ - Users
+ - Roles
+ - Resources
+ - Serverless Functions
+ - Cross-Account Access
+ - External Accounts
+ - Roles That Allow All Identities
+ - Hygiene: MFA Enforcement
+ - Hygiene: IAM Access Key Age
+ - Hygiene: Unused IAM Access Keys
+ - Exclude From Reports
+ - Users
+ - Roles
+ - Resources
+ - Serverless Functions
+ - Groups
+ - Security Groups
+ - S3 Buckets
+
+
+1. Select a category and view the following columns of information:
+
+ - **User**, **Role**, **Resource**, **Serverless Function Name**: Displays the name of the identity.
+ - **Authorization System**: Displays the authorization system to which the identity belongs.
+ - **Domain**: Displays the domain name to which the identity belongs.
+ - **Permissions**: Displays the maximum number of permissions that the identity can be granted.
+ - **Used**: Displays how many permissions that the identity has used.
+ - **Granted**: Displays how many permissions that the identity has been granted.
+ - **PCI**: Displays the permission creep index (PCI) score of the identity.
+ - **Date Last Active On**: Displays the date that the identity was last active.
+ - **Date Created On**: Displays the date when the identity was created.
+
+
+
+
+
+## Next steps
+
+- For information on how to view system reports in the **Reports** dashboard, see [View system reports in the Reports dashboard](product-reports.md).
+- For a detailed overview of available system reports, see [View a list and description of system reports](all-reports.md).
+- For information about how to generate and view a system report, see [Generate and view a system report](report-view-system-report.md).
+- For information about how to create, view, and share a system report, see [Create, view, and share a custom report](report-view-system-report.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/product-reports.md b/articles/active-directory/cloud-infrastructure-entitlement-management/product-reports.md
new file mode 100644
index 0000000000000..2872e36f1dcbb
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/product-reports.md
@@ -0,0 +1,141 @@
+---
+title: View system reports in the Reports dashboard in Permissions Management
+description: How to view system reports in the Reports dashboard in Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# View system reports in the Reports dashboard
+
+> [!IMPORTANT]
+> Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+Permissions Management has various types of system report types available that capture specific sets of data. These reports allow management to:
+
+- Make timely decisions.
+- Analyze trends and system/user performance.
+- Identify trends in data and high risk areas so that management can address issues more quickly and improve their efficiency.
+
+## Explore the Reports dashboard
+
+The **Reports** dashboard provides a table of information with both system reports and custom reports. The **Reports** dashboard defaults to the **System Reports** tab, which has the following details:
+
+- **Report Name**: The name of the report.
+- **Category**: The type of report. For example, **Permission**.
+- **Authorization Systems**: Displays which authorizations the custom report applies to.
+- **Format**: Displays the output format the report can be generated in. For example, comma-separated values (CSV) format, portable document format (PDF), or Microsoft Excel Open XML Spreadsheet (XLSX) format.
+
+ - To download a report, select the down arrow to the right of the report name, or from the ellipses **(...)** menu, select **Download**.
+
+ The following message displays across the top of the screen in green if the download is successful: **Successfully Started To Generate On Demand Report**.
+
+## Available system reports
+
+Permissions Management offers the following reports for management associated with the authorization systems noted in parenthesis:
+
+- **Access Key Entitlements And Usage**:
+ - **Summary of report**: Provides information about access key, for example, permissions, usage, and rotation date.
+ - **Applies to**: Amazon Web Services (AWS) and Microsoft Azure
+ - **Report output type**: CSV
+ - **Ability to collate report**: Yes
+ - **Type of report**: **Summary** or **Detailed**
+ - **Use cases**:
+ - The access key age, last rotation date, and last usage date is available in the summary report to help with key rotation.
+ - The granted task and Permissions creep index (PCI) score to take action on the keys.
+
+- **User Entitlements And Usage**:
+ - **Summary of report**: Provides information about the identities' permissions, for example, entitlement, usage, and PCI.
+ - **Applies to**: AWS, Azure, and Google Cloud Platform (GCP)
+ - **Report output type**: CSV
+ - **Ability to collate report**: Yes
+ - **Type of report**: **Summary** or **Detailed**
+ - **Use cases**:
+ - The data displayed on the **Usage Analytics** screen is downloaded as part of the **Summary** report. The user's detailed permissions usage is listed in the **Detailed** report.
+
+- **Group Entitlements And Usage**:
+ - **Summary of report**: Provides information about the group's permissions, for example, entitlement, usage, and PCI.
+ - **Applies to**: AWS, Azure, and GCP
+ - **Report output type**: CSV
+ - **Ability to collate report**: Yes
+ - **Type of report**: **Summary**
+ - **Use cases**:
+ - All group level entitlements and permission assignments, PCIs, and the number of members are listed as part of this report.
+
+- **Identity Permissions**:
+ - **Summary of report**: Report on identities that have specific permissions, for example, identities that have permission to delete any S3 buckets.
+ - **Applies to**: AWS, Azure, and GCP
+ - **Report output type**: CSV
+ - **Ability to collate report**: No
+ - **Type of report**: **Summary**
+ - **Use cases**:
+ - Any task usage or specific task usage via User/Group/Role/App can be tracked with this report.
+
+- **Identity privilege activity report**
+ - **Summary of report**: Provides information about permission changes that have occurred in the selected duration.
+ - **Applies to**: AWS, Azure, and GCP
+ - **Report output type**: PDF
+ - **Ability to collate report**: No
+ - **Type of report**: **Summary**
+ - **Use cases**:
+ - Any identity permission change can be captured using this report.
+ - The **Identity Privilege Activity** report has the following main sections: **User Summary**, **Group Summary**, **Role Summary**, and **Delete Task Summary**.
+ - The **User** summary lists the current granted permissions and high-risk permissions and resources accessed in 1 day, 7 days, or 30 days. There are subsections for newly added or deleted users, users with PCI change, and High-risk active/inactive users.
+ - The **Group** summary lists the administrator level groups with the current granted permissions and high-risk permissions and resources accessed in 1 day, 7 days, or 30 days. There are subsections for newly added or deleted groups, groups with PCI change, and High-risk active/inactive groups.
+ - The **Role summary** lists similar details as **Group Summary**.
+ - The **Delete Task summary** section lists the number of times the **Delete task** has been executed in the given time period.
+
+- **Permissions Analytics Report**
+ - **Summary of report**: Provides information about the violation of key security best practices.
+ - **Applies to**: AWS, Azure, and GCP
+ - **Report output type**: CSV
+ - **Ability to collate report**: Yes
+ - **Type of report**: **Detailed**
+ - **Use cases**:
+ - This report lists the different key findings in the selected auth systems. The key findings include super identities, inactive identities, over provisioned active identities, storage bucket hygiene, and access key age (for AWS only). The report helps administrators to visualize the findings across the organization.
+
+ For more information about this report, see [Permissions analytics report](product-permissions-analytics-reports.md).
+
+- **Role/Policy Details**
+ - **Summary of report**: Provides information about roles and policies.
+ - **Applies to**: AWS, Azure, GCP
+ - **Report output type**: CSV
+ - **Ability to collate report**: No
+ - **Type of report**: **Summary**
+ - **Use cases**:
+ - Assigned/Unassigned, custom/system policy, and the used/unused condition is captured in this report for any specific, or all, AWS accounts. Similar data can be captured for Azure/GCP for the assigned/unassigned roles.
+
+- **PCI History**
+ - **Summary of report**: Provides a report of privilege creep index (PCI) history.
+ - **Applies to**: AWS, Azure, GCP
+ - **Report output type**: CSV
+ - **Ability to collate report**: Yes
+ - **Type of report**: **Summary**
+ - **Use cases**:
+ - This report plots the trend of the PCI by displaying the monthly PCI history for each authorization system.
+
+- **All Permissions for Identity**
+ - **Summary of report**: Provides results of all permissions for identities.
+ - **Applies to**: AWS, Azure, GCP
+ - **Report output type**: CSV
+ - **Ability to collate report**: Yes
+ - **Type of report**: **Detailed**
+ - **Use cases**:
+ - This report lists all the assigned permissions for the selected identities.
+
+
+
+
+## Next steps
+
+- For a detailed overview of available system reports, see [View a list and description of system reports](all-reports.md).
+- For information about how to create, view, and share a system report, see [Create, view, and share a custom report](report-view-system-report.md).
+- For information about how to create and view a custom report, see [Generate and view a custom report](report-create-custom-report.md).
+- For information about how to create and view the Permissions analytics report, see [Generate and download the Permissions analytics report](product-permissions-analytics-reports.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/product-rule-based-anomalies.md b/articles/active-directory/cloud-infrastructure-entitlement-management/product-rule-based-anomalies.md
new file mode 100644
index 0000000000000..2d014ae108e06
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/product-rule-based-anomalies.md
@@ -0,0 +1,123 @@
+---
+title: Create and view rule-based anomalies and anomaly triggers in Permissions Management
+description: How to create and view rule-based anomalies and anomaly triggers in Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# Create and view rule-based anomaly alerts and anomaly triggers
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+Rule-based anomalies identify recent activity in Permissions Management that is determined to be unusual based on explicit rules defined in the activity trigger. The goal of rule-based anomaly is high precision detection.
+
+## View rule-based anomaly alerts
+
+1. In the Permissions Management home page, select **Activity triggers** (the bell icon).
+1. Select **Rule-Based Anomaly**, and then select the **Alerts** subtab.
+
+ The **Alerts** subtab displays the following information:
+
+ - **Alert Name**: Lists the name of the alert.
+
+ - To view the specific identity, resource, and task names that occurred during the alert collection period, select the **Alert Name**.
+
+ - **Anomaly Alert Rule**: Displays the name of the rule select when creating the alert.
+ - **# of Occurrences**: How many times the alert trigger has occurred.
+ - **Task**: How many tasks performed are triggered by the alert.
+ - **Resources**: How many resources accessed are triggered by the alert.
+ - **Identity**: How many identities performing unusual behavior are triggered by the alert.
+ - **Authorization System**: Displays which authorization systems the alert applies to, Amazon Web Services (**AWS**), Microsoft **Azure**, or Google Cloud Platform (**GCP**).
+ - **Date/Time**: Lists the date and time of the alert.
+ - **Date/Time (UTC)**: Lists the date and time of the alert in Coordinated Universal Time (UTC).
+
+
+1. To filter alerts:
+
+ - From the **Alert Name** dropdown, select **All** or the appropriate alert name.
+ - From the **Date** dropdown menu, select **Last 24 Hours**, **Last 2 Days**, **Last Week**, or **Custom Range**, and select **Apply**.
+
+ - If you select **Custom Range**, also enter **From** and **To** duration settings.
+1. To view details that match the alert criteria, select the ellipses (**...**).
+
+ - **View Trigger**: Displays the current trigger settings and applicable authorization system details
+ - **Details**: Displays details about **Authorization System Type**, **Authorization Systems**, **Resources**, **Tasks**, **Identities**, and **Activity**
+ - **Activity**: Displays details about the **Identity Name**, **Resource Name**, **Task Name**, **Date/Time**, **Inactive For**, and **IP Address**. Selecting the "eye" icon displays the **Raw Events Summary**
+
+## Create a rule-based anomaly trigger
+
+1. In the Permissions Management home page, select **Activity triggers** (the bell icon).
+1. Select **Rule-Based Anomaly**, and then select the **Alerts** subtab.
+1. Select **Create Anomaly Trigger**.
+
+1. In the **Alert Name** box, enter a name for the alert.
+1. Select the **Authorization System**, **AWS**, **Azure**, or **GCP**.
+1. Select one of the following conditions:
+ - **Any Resource Accessed for the First Time**: The identity accesses a resource for the first time during the specified time interval.
+ - **Identity Performs a Particular Task for the First Time**: The identity does a specific task for the first time during the specified time interval.
+ - **Identity Performs a Task for the First Time**: The identity performs any task for the first time during the specified time interval
+1. Select **Next**.
+1. On the **Authorization Systems** tab, select the available authorization systems and folders, or select **All**.
+
+ This screen defaults to **List** view, but you can change it to **Folders** view. You can select the applicable folder instead of individually selecting by authorization system.
+
+ - The **Status** column displays if the authorization system is online or offline.
+ - The **Controller** column displays if the controller is enabled or disabled.
+
+1. On the **Configuration** tab, to update the **Time Interval**, select **90 Days**, **60 Days**, or **30 Days** from the **Time range** dropdown.
+1. Select **Save**.
+
+## View a rule-based anomaly trigger
+
+1. In the Permissions Management home page, select **Activity triggers** (the bell icon).
+1. Select **Rule-Based Anomaly**, and then select the **Alert Triggers** subtab.
+
+ The **Alert Triggers** subtab displays the following information:
+
+ - **Alerts**: Displays the name of the alert.
+ - **Anomaly Alert Rule**: Displays the name of the selected rule when creating the alert.
+ - **# of Users Subscribed**: Displays the number of users subscribed to the alert.
+ - **Created By**: Displays the email address of the user who created the alert.
+ - **Last Modified By**: Displays the email address of the user who last modified the alert.
+ - **Last Modified On**: Displays the date and time the trigger was last modified.
+ - **Subscription**: Subscribes you to receive alert emails. Switches between **On** and **Off**.
+
+1. To view other options available to you, select the ellipses (**...**), and then select from the available options:
+
+ If the **Subscription** is **On**, the following options are available:
+
+ - **Edit**: Enables you to modify alert parameters.
+
+ Only the user who created the alert can edit the trigger screen, rename an alert, deactivate an alert, and delete an alert. Changes made by other users aren't saved.
+
+ - **Duplicate**: Create a duplicate copy of the selected alert trigger.
+ - **Rename**: Enter the new name of the query, and then select **Save.**
+ - **Deactivate**: The alert will still be listed, but will no longer send emails to subscribed users.
+ - **Activate**: Activate the alert trigger and start sending emails to subscribed users.
+ - **Notification Settings**: View the **Email** of users who are subscribed to the alert trigger.
+ - **Delete**: Delete the alert.
+
+ If the **Subscription** is **Off**, the following options are available:
+ - **View**: View details of the alert trigger.
+ - **Notification Settings**: View the **Email** of users who are subscribed to the alert trigger.
+ - **Duplicate**: Create a duplicate copy of the selected alert trigger.
+
+1. To filter by **Activated** or **Deactivated**, in the **Status** section, select **All**, **Activated**, or **Deactivated**, and then select **Apply**.
+
+
+
+## Next steps
+
+- For an overview on activity triggers, see [View information about activity triggers](ui-triggers.md).
+- For information on activity alerts and alert triggers, see [Create and view activity alerts and alert triggers](how-to-create-alert-trigger.md).
+- For information on finding outliers in identity's behavior, see [Create and view statistical anomalies and anomaly triggers](product-statistical-anomalies.md).
+- For information on permission analytics triggers, see [Create and view permission analytics triggers](product-permission-analytics.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/product-statistical-anomalies.md b/articles/active-directory/cloud-infrastructure-entitlement-management/product-statistical-anomalies.md
new file mode 100644
index 0000000000000..bcef698e31a8c
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/product-statistical-anomalies.md
@@ -0,0 +1,125 @@
+---
+title: Create and view statistical anomalies and anomaly triggers in Permissions Management
+description: How to create and view statistical anomalies and anomaly triggers in the Statistical Anomaly tab in Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# Create and view statistical anomalies and anomaly triggers
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+Statistical anomalies can detect outliers in an identity's behavior if recent activity is determined to be unusual based on models defined in an activity trigger. The goal of this anomaly trigger is a high recall rate.
+
+## View statistical anomalies in an identity's behavior
+
+1. In the Permissions Management home page, select **Activity triggers** (the bell icon).
+1. Select **Statistical Anomaly**, and then select the **Alerts** subtab.
+
+ The **Alerts** subtab displays the following information:
+
+ - **Alert Name**: Lists the name of the alert.
+ - **Anomaly Alert Rule**: Displays the name of the rule select when creating the alert.
+ - **# of Occurrences**: Displays how many times the alert trigger has occurred.
+ - **Authorization System**: Displays which authorization systems the alert applies to.
+ - **Date/Time**: Lists the day of the outlier occurring.
+ - **Date/Time (UTC)**: Lists the day of the outlier occurring in Coordinated Universal Time (UTC).
+
+
+1. To filter the alerts based on name, select the appropriate alert name or choose **All** from the **Alert Name** dropdown menu, and select **Apply**.
+1. To filter the alerts based on alert time, select **Last 24 Hours**, **Last 2 Days**, **Last Week**, or **Custom Range** from the **Date** dropdown menu, and select **Apply**.
+1. If you select the ellipses (**...**) and select:
+ - **Details**, this brings you to an Alert Summary view with **Authorization System**, **Statistical Model** and **Observance Period** displayed along with a table with a row per identity triggering this alert. From here you can click:
+ - **Details**: Displays graph(s) highlighting the anomaly with context, and up to the top 3 actions performed on the day of the anomaly
+ - **View Trigger**: Displays the current trigger settings and applicable authorization system details
+ - **View Trigger**: Displays the current trigger settings and applicable authorization system details
+
+## Create a statistical anomaly trigger
+
+1. In the Permissions Management home page, select **Activity triggers** (the bell icon).
+1. Select **Statistical Anomaly**, select the **Alerts** subtab, and then select **Create Alert Trigger**.
+1. Enter a name for the alert in the **Alert Name** box.
+1. Select the **Authorization System**, Amazon Web Services (**AWS**), Microsoft **Azure**, or Google Cloud Platform (**GCP**).
+1. Select one of the following conditions:
+
+ - **Identity Performed High Number of Tasks**: The identity performs higher than their usual volume of tasks. For example, an identity typically performs 25 tasks per day, and now it is performing 100 tasks per day.
+ - **Identity Performed Low Number of Tasks**: The identity performs lower than their usual volume of tasks. For example, an identity typically performs 100 tasks per day, and now it is performing 25 tasks per day.
+ - **Identity Performed Tasks with Unusual Results**: The identity performing an action gets a different result than usual, such as most tasks end in a successful result and are now ending in a failed result or vice versa.
+ - **Identity Performed Tasks with Unusual Timing**: The identity does tasks at unusual times as established by their baseline in the observance period. Times are grouped by the following UTC 4 hour windows.
+ - 12AM-4AM UTC
+ - 4AM-8AM UTC
+ - 8AM-12PM UTC
+ - 12PM-4PM UTC
+ - 4PM-8PM UTC
+ - 8PM-12AM UTC
+ - **Identity Performed Tasks with Unusual Types**: The identity performs unusual types of tasks as established by their baseline in the observance period. For example, an identity performs read, write, or delete tasks they wouldn't ordinarily perform.
+ - **Identity Performed Tasks with Multiple Unusual Patterns**: The identity has several unusual patterns in the tasks performed by the identity as established by their baseline in the observance period.
+1. Select **Next**.
+
+1. On the **Authorization Systems** tab, select the appropriate systems, or, to select all systems, select **All**.
+
+ The screen defaults to the **List** view but you can switch to **Folder** view using the menu, and then select the applicable folder instead of individually by system.
+
+ - The **Status** column displays if the authorization system is online or offline.
+
+ - The **Controller** column displays if the controller is enabled or disabled.
+
+
+1. On the **Configuration** tab, to update the **Time Interval**, from the **Time Range** dropdown, select **90 Days**, **60 Days**, or **30 Days**, and then select **Save**.
+
+## View statistical anomaly triggers
+
+1. In the Permissions Management home page, select **Activity triggers** (the bell icon).
+1. Select **Statistical Anomaly**, and then select the **Alert Triggers** subtab.
+
+ The **Alert Triggers** subtab displays the following information:
+
+ - **Alert**: Displays the name of the alert.
+ - **Anomaly Alert Rule**: Displays the name of the rule select when creating the alert.
+ - **# of users subscribed**: Displays the number of users subscribed to the alert.
+ - **Created By**: Displays the email address of the user who created the alert.
+ - **Last Modified By**: Displays the email address of the user who last modified the alert.
+ - **Last Modified On**: Displays the date and time the trigger was last modified.
+ - **Subscription**: Subscribes you to receive alert emails. Toggle the button to **On** or **Off**.
+
+1. To filter by **Activated** or **Deactivated**, in the **Status** section, select **All**, **Activated**, or **Deactivated**, and then select **Apply**.
+
+1. To view other options available to you, select the ellipses (**...**), and then select from the available options:
+
+ If the **Subscription** is **On**, the following options are available:
+ - **Edit**: Enables you to modify alert parameters
+
+ > [!NOTE]
+ > Only the user who created the alert can perform the following actions: edit the trigger screen, rename an alert, deactivate an alert, and delete an alert. Changes made by other users aren't saved.
+ - **Duplicate**: Create a duplicate copy of the selected alert trigger.
+ - **Rename**: Enter the new name of the query, and then select **Save.**
+ - **Deactivate**: The alert will still be listed, but will no longer send emails to subscribed users.
+ - **Activate**: Activate the alert trigger and start sending emails to subscribed users.
+ - **Notification Settings**: View the **Email** of users who are subscribed to the alert trigger.
+ - **Delete**: Delete the alert.
+
+ If the **Subscription** is **Off**, the following options are available:
+ - **View**: View details of the alert trigger.
+ - **Notification settings**: View the **Email** of users who are subscribed to the alert trigger.
+ - **Duplicate**: Create a duplicate copy of the selected alert trigger.
+
+
+1. Select **Apply**.
+
+
+
+## Next steps
+
+- For an overview on activity triggers, see [View information about activity triggers](ui-triggers.md).
+- For information on activity alerts and alert triggers, see [Create and view activity alerts and alert triggers](how-to-create-alert-trigger.md).
+- For information on rule-based anomalies and anomaly triggers, see [Create and view rule-based anomalies and anomaly triggers](product-rule-based-anomalies.md).
+- For information on permission analytics triggers, see [Create and view permission analytics triggers](product-permission-analytics.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/report-create-custom-report.md b/articles/active-directory/cloud-infrastructure-entitlement-management/report-create-custom-report.md
new file mode 100644
index 0000000000000..203365d8a8840
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/report-create-custom-report.md
@@ -0,0 +1,128 @@
+---
+title: Create, view, and share a custom report a custom report in Permissions Management
+description: How to create, view, and share a custom report in the Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# Create, view, and share a custom report
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+This article describes how to create, view, and share a custom report in Permissions Management.
+
+## Create a custom report
+
+1. In the Permissions Management home page, select the **Reports** tab, and then select the **Custom Reports** subtab.
+1. Select **New Custom Report**.
+1. In the **Report Name** box, enter a name for your report.
+1. From the **Report Based on** list:
+ 1. To view which authorization systems the report applies to, hover over each report name.
+ 1. To view a description of a report, select the report.
+1. Select a report you want to use as the base for your custom report, and then select **Next**.
+1. In the **MyReport** box, select the **Authorization System** you want: Amazon Web Services (**AWS**), Microsoft Azure (**Azure**), or Google Cloud Platform (**GCP**).
+
+1. To add specific accounts, select the **List** subtab, and then select **All** or the account names.
+1. To add specific folders, select the **Folders** subtab, and then select **All** or the folder names.
+
+1. Select the **Report Format** subtab, and then select the format for your report: comma-separated values (**CSV**) file, portable document format (**PDF**), or Microsoft Excel Open XML Spreadsheet (**XLSX**) file.
+1. Select the **Schedule** tab, and then select the frequency for your report, from **None** up to **Monthly**.
+
+ - For **Hourly** and **Daily** options, set the start date by choosing from the **Calendar** dropdown, and can input a specific time of the day they want to receive the report.
+
+ In addition to date and time, the **Weekly** and **Biweekly** provide options for you to select on which day(s)of the week the report should repeat.
+
+1. Select **Save**.
+
+ The following message displays across the top of the screen in green if the download is successful: **Report has been created**.
+The report name appears in the **Reports** table.
+
+## View a custom report
+
+1. In the Permissions Management home page, select the **Reports** tab, and then select the **Custom Reports** subtab.
+
+ The **Custom Reports** tab displays the following information in the **Reports** table:
+
+ - **Report Name**: The name of the report.
+ - **Category**: The type of report: **Permission**.
+ - **Authorization System**: The authorization system in which you can view the report: AWS, Azure, and GCP.
+ - **Format**: The format of the report, **CSV**, **PDF**, or **XLSX** format.
+
+1. To view a report, from the **Report Name** column, select the report you want.
+1. To download a report, select the down arrow to the right of the report name, or from the ellipses **(...)** menu, select **Download**.
+1. To refresh the list of reports, select **Reload**.
+
+## Share a custom report
+
+1. In the Permissions Management home page, select the **Reports** tab, and then select the **Custom Reports** subtab.
+1. In the **Reports** table, select a report and then select the ellipses (**...**) icon.
+1. In the **Report Settings** box, select **Share with**.
+1. In the **Search Email to add** box, enter the name of other Permissions Management user(s).
+
+ You can only share reports with other Permissions Management users.
+1. Select **Save**.
+
+## Search for a custom report
+
+1. In the Permissions Management home page, select the **Reports** tab, and then select the **Custom Reports** subtab.
+1. On the **Custom Reports** tab, select **Search**.
+1. In the **Search** box, enter the name of the report you want.
+
+ The **Custom Reports** tab displays a list of reports that match your search criteria.
+1. Select the report you want.
+1. To download a report, select the down arrow to the right of the report name, or from the ellipses **(...)** menu, select **Download**.
+1. To refresh the list of reports, select **Reload**.
+
+
+## Modify a saved or scheduled custom report
+
+1. In the Permissions Management home page, select the **Reports** tab, and then select the **Custom Reports** subtab.
+1. Hover over the report name on the **Custom Reports** tab.
+
+ - To rename the report, select **Edit** (the pencil icon), and enter a new name.
+ - To change the settings for your report, select **Settings** (the gear icon). Make your changes, and then select **Save**.
+
+ - To download a copy of the report, select the **Down arrow** icon.
+
+1. To perform other actions to the report, select the ellipses (**...**) icon:
+
+ - **Download**: Downloads a copy of the report.
+
+ - **Report Settings**: Displays the settings for the report, including scheduling, sharing the report, and so on.
+
+ - **Duplicate**: Creates a duplicate of the report called **"Copy of XXX"**. Any reports not created by the current user are listed as **Duplicate**.
+
+ When you select **Duplicate**, a box appears asking if you're sure you want to create a duplicate. Select **Confirm**.
+
+ When the report is successfully duplicated, the following message displays: **Report generated successfully**.
+
+ - **API Settings**: Download the report using your Application Programming Interface (API) settings.
+
+ When this option is selected, the **API Settings** window opens and displays the **Report ID** and **Secret Key**. Select **Generate New Key**.
+
+ - **Delete**: Select this option to delete the report.
+
+ After selecting **Delete**, a pop-up box appears asking if the user is sure they want to delete the report. Select **Confirm**.
+
+ **Report is deleted successfully** appears across the top of the screen in green if successfully deleted.
+
+ - **Unsubscribe**: Unsubscribe the user from receiving scheduled reports and notifications.
+
+ This option is only available after a report has been scheduled.
+
+
+## Next steps
+
+- For information on how to view system reports in the **Reports** dashboard, see [View system reports in the Reports dashboard](product-reports.md).
+- For a detailed overview of available system reports, see [View a list and description of system reports](all-reports.md).
+- For information about how to generate and view a system report, see [Generate and view a system report](report-view-system-report.md).
+- For information about how to create and view the Permissions analytics report, see [Generate and download the Permissions analytics report](product-permissions-analytics-reports.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/report-view-system-report.md b/articles/active-directory/cloud-infrastructure-entitlement-management/report-view-system-report.md
new file mode 100644
index 0000000000000..d93af027fb2f9
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/report-view-system-report.md
@@ -0,0 +1,60 @@
+---
+title: Generate and view a system report in Permissions Management
+description: How to generate and view a system report in the Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# Generate and view a system report
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+This article describes how to generate and view a system report in Permissions Management.
+
+## Generate a system report
+
+1. In the Permissions Management home page, select the **Reports** tab, and then select the **Systems Reports** subtab.
+ The **Systems Reports** subtab displays the following options in the **Reports** table:
+
+ - **Report Name**: The name of the report.
+ - **Category**: The type of report: **Permission**.
+ - **Authorization System**: The authorization system activity in the report: Amazon Web Services (AWS), Microsoft Azure (Azure), and Google Cloud Platform (GCP).
+ - **Format**: The format in which the report is available: comma-separated values (**CSV**) format, portable document format (**PDF**), or Microsoft Excel Open XML Spreadsheet (**XLSX**) format.
+
+1. In the **Report Name** column, find the report you want, and then select the down arrow to the right of the report name to download the report.
+
+ Or, from the ellipses **(...)** menu, select **Download**.
+
+ The following message displays: **Successfully Started To Generate On Demand Report.**
+
+ > [!NOTE]
+ > If you select one authorization system, the report includes a summary. If you select more than one authorization system, the report does not include a summary.
+
+1. To refresh the list of reports, select **Reload**.
+
+## Search for a system report
+
+1. On the **Systems Reports** subtab, select **Search**.
+1. In the **Search** box, enter the name of the report you want.
+
+ The **Systems Reports** subtab displays a list of reports that match your search criteria.
+1. Select a report from the **Report Name** column.
+1. To download a report, select the down arrow to the right of the report name, or from the ellipses **(...)** menu, select **Download**.
+1. To refresh the list of reports, select **Reload**.
+
+
+## Next steps
+
+- For information on how to view system reports in the **Reports** dashboard, see [View system reports in the Reports dashboard](product-reports.md).
+- For a detailed overview of available system reports, see [View a list and description of system reports](all-reports.md).
+- For information about how to create, view, and share a system report, see [Create, view, and share a custom report](report-view-system-report.md).
+- For information about how to create and view the Permissions analytics report, see [Generate and download the Permissions analytics report](product-permissions-analytics-reports.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/training-videos.md b/articles/active-directory/cloud-infrastructure-entitlement-management/training-videos.md
new file mode 100644
index 0000000000000..f80eac0ac3941
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/training-videos.md
@@ -0,0 +1,41 @@
+---
+title: Permissions Management training videos
+description: Permissions Management training videos.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 04/20/2022
+ms.author: kenwith
+---
+
+# Entra Permissions Management training videos
+
+To view step-by-step training videos on how to use Permissions Management features, select a link below.
+
+## Onboard Permissions Management in your organization
+
+
+### Enable Permissions Management in your Azure Active Directory (Azure AD) tenant
+
+To view a video on how to enable Permissions Management in your Azure AD tenant, select [Enable Permissions Management in your Azure AD tenant](https://www.youtube.com/watch?v=-fkfeZyevoo).
+
+### Configure and onboard Amazon Web Services (AWS) accounts
+
+To view a video on how to configure and onboard Amazon Web Services (AWS) accounts in Permissions Management, select [Configure and onboard AWS accounts](https://www.youtube.com/watch?v=R6K21wiWYmE).
+
+### Configure and onboard Google Cloud Platform (GCP) accounts
+
+To view a video on how to configure and onboard Google Cloud Platform (GCP) accounts in Permissions Management, select [Configure and onboard GCP accounts](https://www.youtube.com/watch?app=desktop&v=W3epcOaec28).
+
+
+
+
+## Next steps
+
+- For an overview of Permissions Management, see [What's Permissions Management?](overview.md)
+- For a list of frequently asked questions (FAQs) about Permissions Management, see [FAQs](faqs.md).
+- For information on how to start viewing information about your authorization system in Permissions Management, see [View key statistics and data about your authorization system](ui-dashboard.md).
\ No newline at end of file
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/troubleshoot.md b/articles/active-directory/cloud-infrastructure-entitlement-management/troubleshoot.md
new file mode 100644
index 0000000000000..fe392e6558e77
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/troubleshoot.md
@@ -0,0 +1,42 @@
+---
+title: Troubleshoot issues with Permissions Management
+description: Troubleshoot issues with Permissions Management
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: troubleshooting
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# Troubleshoot issues with Permissions Management
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+This section answers troubleshoot issues with Permissions Management.
+
+## One time passcode (OTP) email
+
+### The user didn't receive the OTP email.
+
+- Check your junk or Spam mail folder for the email.
+
+## Reports
+
+### The individual files are generated according to the authorization system (subscription/account/project).
+
+- Select the **Collate** option in the **Custom Report** screen in the Permissions Management **Reports** tab.
+
+## Data collection in AWS
+
+### Data collection > AWS Authorization system data collection status is offline. Upload and transform is also offline.
+
+- Check the Permissions Management-related role that exists in these accounts.
+- Validate the trust relationship with the OpenID Connect (OIDC) role.
+
+
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/ui-audit-trail.md b/articles/active-directory/cloud-infrastructure-entitlement-management/ui-audit-trail.md
new file mode 100644
index 0000000000000..43ee6f14eec9f
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/ui-audit-trail.md
@@ -0,0 +1,75 @@
+---
+title: Use queries to see how users access information in an authorization system in Permissions Management
+description: How to use queries to see how users access information in an authorization system in Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: overview
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# Use queries to see how users access information
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+The **Audit** dashboard in Permissions Management provides an overview of queries a Permissions Management user has created to review how users access their authorization systems and accounts.
+
+This article provides an overview of the components of the **Audit** dashboard.
+
+## View information in the Audit dashboard
+
+
+1. In Permissions Management, select the **Audit** tab.
+
+ Permissions Management displays the query options available to you.
+
+1. The following options display at the top of the **Audit** dashboard:
+
+ - A tab for each existing query. Select the tab to see details about the query.
+ - **New Query**: Select the tab to create a new query.
+ - **New tab (+)**: Select the tab to add a **New Query** tab.
+ - **Saved Queries**: Select to view a list of saved queries.
+
+1. To return to the main page, select **Back to Audit Trail**.
+
+
+## Use a query to view information
+
+1. In Permissions Management, select the **Audit** tab.
+1. The **New query** tab displays the following options:
+
+ - **Authorization Systems Type**: A list of your authorization systems: Amazon Web Services (**AWS**), Microsoft Azure (**Azure**), Google Cloud Platform (**GCP**), or Platform (**Platform**).
+
+ - **Authorization System**: A **List** of accounts and **Folders** in the authorization system.
+
+ - To display a **List** of accounts and **Folders** in the authorization system, select the down arrow, and then select **Apply**.
+
+1. To add an **Audit Trail Condition**, select **Conditions** (the eye icon), select the conditions you want to add, and then select **Close**.
+
+1. To edit existing parameters, select **Edit** (the pencil icon).
+
+1. To add the parameter that you created to the query, select **Add**.
+
+1. To search for activity data that you can add to the query, select **Search** .
+
+1. To save your query, select **Save**.
+
+1. To save your query under a different name, select **Save As** (the ellipses **(...)** icon).
+
+1. To discard your work and start creating a query again, select **Reset Query**.
+
+1. To delete a query, select the **X** to the right of the query tab.
+
+
+
+## Next steps
+
+- For information on how to filter and view user activity, see [Filter and query user activity](product-audit-trail.md).
+- For information on how to create a query,see [Create a custom query](how-to-create-custom-queries.md).
+- For information on how to generate an on-demand report from a query, see [Generate an on-demand report from a query](how-to-audit-trail-results.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/ui-autopilot.md b/articles/active-directory/cloud-infrastructure-entitlement-management/ui-autopilot.md
new file mode 100644
index 0000000000000..0d4f53e45ee7b
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/ui-autopilot.md
@@ -0,0 +1,71 @@
+---
+title: View rules in the Autopilot dashboard in Permissions Management
+description: How to view rules in the Autopilot dashboard in Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: overview
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# View rules in the Autopilot dashboard
+
+> [!IMPORTANT]
+> Micorosft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+The **Autopilot** dashboard in Permissions Management provides a table of information about **Autopilot rules** for administrators.
+
+
+> [!NOTE]
+> Only users with the **Administrator** role can view and make changes on this tab.
+
+## View a list of rules
+
+1. In the Permissions Management home page, select the **Autopilot** tab.
+1. In the **Autopilot** dashboard, from the **Authorization system types** dropdown, select the authorization system types you want: Amazon Web Services (**AWS**), Microsoft **Azure**, or Google Cloud Platform (**GCP**).
+1. From the **Authorization System** dropdown, in the **List** and **Folders** box, select the account and folder names that you want.
+1. Select **Apply**.
+
+ The following information displays in the **Autopilot Rules** table:
+
+ - **Rule Name**: The name of the rule.
+ - **State**: The status of the rule: idle (not being use) or active (being used).
+ - **Rule Type**: The type of rule being applied.
+ - **Mode**: The status of the mode: on-demand or not.
+ - **Last Generated**: The date and time the rule was last generated.
+ - **Created By**: The email address of the user who created the rule.
+ - **Last Modified**: The date and time the rule was last modified.
+ - **Subscription**: Provides an **On** or **Off** subscription that allows you to receive email notifications when recommendations have been generated, applied, or unapplied.
+
+## View other available options for rules
+
+- Select the ellipses **(...)**
+
+ The following options are available:
+
+ - **View Rule**: Select to view details of the rule.
+ - **Delete Rule**: Select to delete the rule. Only the user who created the selected rule can delete the rule.
+ - **Generate Recommendations**: Creates recommendations for each user and the authorization system. Only the user who created the selected rule can create recommendations.
+ - **View Recommendations**: Displays the recommendations for each user and authorization system.
+ - **Notification Settings**: Displays the users subscribed to this rule. Only the user who created the selected rule can add other users to be notified.
+
+You can also select:
+
+- **Reload**: Select to refresh the displayed list of roles/policies.
+- **Search**: Select to search for a specific role/policy.
+- **Columns**: From the dropdown list, select the columns you want to display.
+ - Select **Reset to default** to return to the system defaults.
+- **New Rule**: Select to create a new rule. For more information, see [Create a rule](how-to-create-rule.md).
+
+
+
+## Next steps
+
+- For information about creating rules, see [Create a rule](how-to-create-rule.md).
+- For information about generating, viewing, and applying rule recommendations for rules, see [Generate, view, and apply rule recommendations for rules](how-to-recommendations-rule.md).
+- For information about notification settings for rules, see [View notification settings for a rule](how-to-notifications-rule.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/ui-dashboard.md b/articles/active-directory/cloud-infrastructure-entitlement-management/ui-dashboard.md
new file mode 100644
index 0000000000000..23e1ce1b147b4
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/ui-dashboard.md
@@ -0,0 +1,138 @@
+---
+title: View key statistics and data about your authorization system in Permissions Management
+description: How to view statistics and data about your authorization system in the Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: overview
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+
+# View key statistics and data about your authorization system
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+Permissions Management provides a summary of key statistics and data about your authorization system regularly. This information is available for Amazon Web Services (AWS), Microsoft Azure, and Google Cloud Platform (GCP).
+
+## View metrics related to avoidable risk
+
+The data provided by Permissions Management includes metrics related to avoidable risk. These metrics allow the Permissions Management administrator to identify areas where they can reduce risks related to the principle of least permissions.
+
+You can view the following information in Entra:
+
+- The **Permission Creep Index (PCI)** heat map on the Permissions Management **Dashboard** identifies:
+ - The number of users who have been granted high-risk permissions but aren't using them.
+ - The number of users who contribute to the permission creep index (PCI) and where they are on the scale.
+
+- The [**Analytics** dashboard](usage-analytics-home.md) provides a snapshot of permission metrics within the last 90 days.
+
+
+## Components of the Permissions Management Dashboard
+
+The Permissions Management **Dashboard** displays the following information:
+
+- **Authorization system types**: A dropdown list of authorization system types you can access: AWS, Azure, and GCP.
+
+- **Authorization System**: Displays a **List** of accounts and **Folders** in the selected authorization system you can access.
+
+ - To add or remove accounts and folders, from the **Name** list, select or deselect accounts and folders, and then select **Apply**.
+
+- **Permission Creep Index (PCI)**: The graph displays the **# of identities contributing to PCI**.
+
+ The PCI graph may display one or more bubbles. Each bubble displays the number of identities that are considered high risk. *High-risk* refers to the number of users who have permissions that exceed their normal or required usage.
+ - To display a list of the number of identities contributing to the **Low PCI**, **Medium PCI**, and **High PCI**, select the **List** icon in the upper right of the graph.
+ - To display the PCI graph again, select the **Graph** icon in the upper right of the list box.
+
+- **Highest PCI change**: Displays a list of your accounts and information about the **PCI** and **Change** in the index over the past 7 days.
+ - To download the list, select the down arrow in the upper right of the list box.
+
+ The following message displays: **We'll email you a link to download the file.**
+ - Check your email for the message from the Permissions Management Customer Success Team. The email contains a link to the **PCI history** report in Microsoft Excel format.
+ - The email also includes a link to the **Reports** dashboard, where you can configure how and when you want to receive reports automatically.
+ - To view all the PCI changes, select **View all**.
+
+- **Identity**: A summary of the **Findings** that includes:
+ - The number of **Inactive** identities that haven't been accessed in over 90 days.
+ - The number of **Super** identities that access data regularly.
+ - The number of identities that can **Access secret information**: A list of roles that can access sensitive or secret information.
+ - **Over-provisioned active** identities that have more permissions than they currently access.
+ - The number of identities **With permission escalation**: A list of roles that can increase permissions.
+
+ To view the list of all identities, select **All findings**.
+
+- **Resources**: A summary of the **Findings** that includes the number of resources that are:
+ - **Open security groups**
+ - **Microsoft managed keys**
+ - **Instances with access to S3 buckets**
+ - **Unencrypted S3 buckets**
+ - **SSE-S3 Encrypted buckets**
+ - **S3 Bucket accessible externally**
+
+
+
+## The PCI heat map
+
+The **Permission Creep Index** heat map shows the incurred risk of users with access to high-risk permissions, and provides information about:
+
+- Users who were given access to high-risk permissions but aren't actively using them. *High-risk permissions* include the ability to modify or delete information in the authorization system.
+
+- The number of resources a user has access to, otherwise known as resource reach.
+
+- The high-risk permissions coupled with the number of resources a user has access to produce the score seen on the chart.
+
+ Permissions are classified as *high*, *medium*, and *low*.
+
+ - **High** (displayed in red) - The score is between 68 and 100. The user has access to many high-risk permissions they aren't using, and has high resource reach.
+ - **Medium** (displayed in yellow) - The score is between 34 and 67. The user has access to some high-risk permissions that they use, or have medium resource reach.
+ - **Low** (displayed in green) - The score is between 0 and 33. The user has access to few high-risk permissions. They use all their permissions and have low resource reach.
+
+- The number displayed on the graph shows how many users contribute to a particular score. To view detailed data about a user, hover over the number.
+
+ The distribution graph displays all the users who contribute to the permission creep. It displays how many users contribute to a particular score. For example, if the score from the PCI chart is 14, the graph shows how many users have a score of 14.
+
+- The **PCI Trend** graph shows you the historical trend of the PCI score over the last 90 days.
+ - To download the **PCI history report**, select **Download**.
+
+### View information on the heat map
+
+1. Select the number on the heat map bubble to display:
+
+ - The total number of **Identities** and how many of them are in the high, medium, and low categories.
+ - The **PCI trend** over the last several weeks.
+
+1. The **Identity** section below the heat map on the left side of the page shows all the relevant findings about identities, including roles that can access secret information, roles that are inactive, over provisioned active roles, and so on.
+
+ - To expand the full list of identities, select **All findings**.
+
+1. The **Resource** section below the heat map on the right side of the page shows all the relevant findings about resources. It includes unencrypted S3 buckets, open security groups, and so on.
+
+
+## The Analytics summary
+
+You can also view a summary of users and activities section on the [Analytics dashboard](usage-analytics-home.md). This dashboard provides a snapshot of the following high-risk tasks or actions users have accessed, and displays the total number of users with the high-risk access, how many users are inactive or have unexecuted tasks, and how many users are active or have executed tasks:
+
+- **Users with access to high-risk tasks**: Displays the total number of users with access to a high risk task (**Total**), how many users have access but haven't used the task (**Inactive**), and how many users are actively using the task (**Active**).
+
+- **Users with access to delete tasks**: A subset of high-risk tasks, which displays the number of users with access to delete tasks (**Total**), how many users have the delete permissions but haven't used the permissions (**Inactive**), and how many users are actively executing the delete capability (**Active**).
+
+- **High-risk tasks accessible by users**: Displays all available high-risk tasks in the authorization system (**Granted**), how many high-risk tasks aren't used (**Unexecuted**), and how many high-risk tasks are used (**Executed**).
+
+- **Delete tasks accessible by users**: Displays all available delete tasks in the authorization system (**Granted**), how many delete tasks aren't used (**Unexecuted**), and how many delete tasks are used (**Executed**).
+
+- **Resources that permit high-risk tasks**: Displays the total number of resources a user has access to (**Total**), how many resources are available but not used (**Inactive**), and how many resources are used (**Active**).
+
+- **Resources that permit delete tasks**: Displays the total number of resources that permit delete tasks (**Total**), how many resources with delete tasks aren't used (**Inactive**), and how many resources with delete tasks are used (**Active**).
+
+
+
+## Next steps
+
+- For information on how to view authorization system and account activity data on the Permissions ManagementDashboard, see [View data about the activity in your authorization system](product-dashboard.md).
+- For an overview of the Analytics dashboard, see [An overview of the Analytics dashboard](usage-analytics-home.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/ui-remediation.md b/articles/active-directory/cloud-infrastructure-entitlement-management/ui-remediation.md
new file mode 100644
index 0000000000000..4d8ae893d6358
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/ui-remediation.md
@@ -0,0 +1,240 @@
+---
+title: View existing roles/policies and requests for permission in the Remediation dashboard in Permissions Management
+description: How to view existing roles/policies and requests for permission in the Remediation dashboard in Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: overview
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# View roles/policies and requests for permission in the Remediation dashboard
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+The **Remediation** dashboard in Permissions Management provides an overview of roles/policies, permissions, a list of existing requests for permissions, and requests for permissions you have made.
+
+This article provides an overview of the components of the **Remediation** dashboard.
+
+> [!NOTE]
+> To view the **Remediation** dashboard, your must have **Viewer**, **Controller**, or **Administrator** permissions. To make changes on this dashboard, you must have **Controller** or **Administrator** permissions. If you don't have these permissions, contact your system administrator.
+
+> [!NOTE]
+> Microsoft Azure uses the term *role* for what other cloud providers call *policy*. Permissions Management automatically makes this terminology change when you select the authorization system type. In the user documentation, we use *role/policy* to refer to both.
+
+## Display the Remediation dashboard
+
+1. On the Permissions Management home page, select the **Remediation** tab.
+
+ The **Remediation** dashboard includes six subtabs:
+
+ - **Roles/Policies**: Use this subtab to perform Create Read Update Delete (CRUD) operations on roles/policies.
+ - **Permissions**: Use this subtab to perform Read Update Delete (RUD) on granted permissions.
+ - **Role/Policy Template**: Use this subtab to create a template for roles/policies template.
+ - **Requests**: Use this subtab to view approved, pending, and processed Permission on Demand (POD) requests.
+ - **My Requests**: Use this tab to manage lifecycle of the POD request either created by you or needs your approval.
+ - **Settings**: Use this subtab to select **Request Role/Policy Filters**, **Request Settings**, and **Auto-Approve** settings.
+
+1. Use the dropdown to select the **Authorization System Type** and **Authorization System**, and then select **Apply**.
+
+## View and create roles/policies
+
+The **Role/Policies** subtab provides the following settings that you can use to view and create a role/policy.
+
+- **Authorization System Type**: Displays a dropdown with authorization system types you can access, Amazon Web Services (AWS), Microsoft Azure, and Google Cloud Platform (GCP).
+- **Authorization System**: Displays a list of authorization systems accounts you can access.
+- **Policy Type**: A dropdown with available role/policy types. You can select **All**, **Custom**, **System**, or **Permissions Management Only**.
+- **Policy Status**: A dropdown with available role/policy statuses. You can select **All**, **Assigned**, or **Unassigned**.
+- **Policy Usage**: A dropdown with **All** or **Unused** roles/policies.
+- **Apply**: Select this option to save the changes you've made.
+- **Reset Filter**: Select this option to discard the changes you've made.
+
+The **Policy list** displays a list of existing roles/policies and the following information about each role/policy.
+
+- **Policy Name**: The name of the roles/policies available to you.
+- **Policy Type**: **Custom**, **System**, or **Permissions Management Only**
+- **Actions**
+ - Select **Clone** to create a duplicate copy of the role/policy.
+ - Select **Modify** to change the existing role/policy.
+ - Select **Delete** to delete the role/policy.
+
+Other options available to you:
+- **Search**: Select this option to search for a specific role/policy.
+- **Reload**: Select this option to refresh the displayed list of roles/policies.
+- **Export CSV**: Select this option to export the displayed list of roles/policies as a comma-separated values (CSV) file.
+
+ When the file is successfully exported, a message appears: **Exported Successfully.**
+
+ - Check your email for a message from the Permissions Management Customer Success Team. This email contains a link to:
+ - The **Role Policy Details** report in CSV format.
+ - The **Reports** dashboard where you can configure how and when you can automatically receive reports.
+- **Create Role/Policy**: Select this option to create a new role/policy. For more information, see [Create a role/policy](how-to-create-role-policy.md).
+
+
+## Add filters to permissions
+
+The **Permissions** subtab provides the following settings that you can use to add filters to your permissions.
+
+- **Authorization System Type**: Displays a dropdown with authorization system types you can access, AWS, Azure, and GCP.
+- **Authorization System**: Displays a list of authorization systems accounts you can access.
+- **Search For**: A dropdown from which you can select **Group**, **User**, or **Role**.
+- **User Status**: A dropdown from which you can select **Any**, **Active**, or **Inactive**.
+- **Privilege Creep Index** (PCI): A dropdown from which you can select a PCI rating of **Any**, **High**, **Medium**, or **Low**.
+- **Task Usage**: A dropdown from which you can select **Any**, **Granted**, **Used**, or **Unused**.
+- **Enter a Username**: A dropdown from which you can select a username.
+- **Enter a Group Name**: A dropdown from which you can select a group name.
+- **Apply**: Select this option to save the changes you've made and run the filter.
+- **Reset Filter**: Select this option to discard the changes you've made.
+- **Export CSV**: Select this option to export the displayed list of roles/policies as a comma-separated values (CSV) file.
+
+ When the file is successfully exported, a message appears: **Exported Successfully.**
+
+ - Check your email for a message from the Permissions Management Customer Success Team. This email contains a link to:
+ - The **Role Policy Details** report in CSV format.
+ - The **Reports** dashboard where you can configure how and when you can automatically receive reports.
+
+
+## Create templates for roles/policies
+
+Use the **Role/Policy Template** subtab to create a template for roles/policies.
+
+1. Select:
+ - **Authorization System Type**: Displays a dropdown with authorization system types you can access, WS, Azure, and GCP.
+ - **Create Template**: Select this option to create a template.
+
+1. In the **Details** page, make the required selections:
+ - **Authorization System Type**: Select the authorization system types you want, **AWS**, **Azure**, or **GCP**.
+ - **Template Name**: Enter a name for your template, and then select **Next**.
+
+1. In the **Statements** page, complete the **Tasks**, **Resources**, **Request Conditions** and **Effect** sections. Then select **Save** to save your role/policy template.
+
+Other options available to you:
+- **Search**: Select this option to search for a specific role/policy.
+- **Reload**: Select this option to refresh the displayed list of roles/policies.
+
+## View requests for permission
+
+Use the **Requests** tab to view a list of **Pending**, **Approved**, and **Processed** requests for permissions your team members have made.
+
+- Select:
+ - **Authorization System Type**: Displays a dropdown with authorization system types you can access, AWS, Azure, and GCP.
+ - **Authorization System**: Displays a list of authorization systems accounts you can access.
+
+Other options available to you:
+
+- **Reload**: Select this option to refresh the displayed list of roles/policies.
+- **Search**: Select this option to search for a specific role/policy.
+- **Columns**: Select one or more of the following to view more information about the request:
+ - **Submitted By**
+ - **On Behalf Of**
+ - **Authorization System**
+ - **Tasks/Scope/Policies**
+ - **Request Date**
+ - **Schedule**
+ - **Submitted**
+ - **Reset to Default**: Select this option to discard your settings.
+
+### View pending requests
+
+The **Pending** table displays the following information:
+
+- **Summary**: A summary of the request.
+- **Submitted By**: The name of the user who submitted the request.
+- **On Behalf Of**: The name of the user on whose behalf the request was made.
+- **Authorization System**: The authorization system the user selected.
+- **Task/Scope/Policies**: The type of task/scope/policy selected.
+- **Request Date**: The date when the request was made.
+- **Submitted**: The period since the request was made.
+- The ellipses **(...)** menu - Select the ellipses, and then select **Details**, **Approve**, or **Reject**.
+- Select an option:
+ - **Reload**: Select this option to refresh the displayed list of roles/policies.
+ - **Search**: Select this option to search for a specific role/policy.
+ - **Columns**: From the dropdown, select the columns you want to display.
+
+**To return to the previous view:**
+
+- Select the up arrow.
+
+### View approved requests
+
+The **Approved** table displays information about the requests that have been approved.
+
+### View processed requests
+
+The **Processed** table displays information about the requests that have been processed.
+
+## View requests for permission for your approval
+
+Use the **My Requests** subtab to view a list of **Pending**, **Approved**, and **Processed** requests for permissions your team members have made and you must approve or reject.
+
+- Select:
+ - **Authorization System Type**: Displays a dropdown with authorization system types you can access, AWS, Azure, and GCP.
+ - **Authorization System**: Displays a list of authorization systems accounts you can access.
+
+Other options available to you:
+
+- **Reload**: Select this option to refresh the displayed list of roles/policies.
+- **Search**: Select this option to search for a specific role/policy.
+- **Columns**: Select one or more of the following to view more information about the request:
+ - **On Behalf Of**
+ - **Authorization System**
+ - **Tasks/Scope/Policies**
+ - **Request Date**
+ - **Schedule**
+ - **Reset to Default**: Select this option to discard your settings.
+- **New Request**: Select this option to create a new request for permissions. For more information, see Create a request for permissions.
+
+### View pending requests
+
+The **Pending** table displays the following information:
+
+- **Summary**: A summary of the request.
+- **Submitted By**: The name of the user who submitted the request.
+- **On Behalf Of**: The name of the user on whose behalf the request was made.
+- **Authorization System**: The authorization system the user selected.
+- **Task/Scope/Policies**: The type of task/scope/policy selected.
+- **Request Date**: The date when the request was made.
+- **Submitted**: The period since the request was made.
+- The ellipses **(...)** menu - Select the ellipses, and then select **Details**, **Approve**, or **Reject**.
+- Select an option:
+ - **Reload**: Select this option to refresh the displayed list of roles/policies.
+ - **Search**: Select this option to search for a specific role/policy.
+ - **Columns**: From the dropdown, select the columns you want to display.
+
+
+### View approved requests
+
+The **Approved** table displays information about the requests that have been approved.
+
+### View processed requests
+
+The **Processed** table displays information about the requests that have been processed.
+
+## Make setting selections for requests and auto-approval
+
+The **Settings** subtab provides the following settings that you can use to make setting selections to **Request Role/Policy Filters**, **Request Settings**, and **Auto-Approve** requests.
+
+- **Authorization System Type**: Displays a dropdown with authorization system types you can access, AWS, Azure, and GCP.
+- **Authorization System**: Displays a list of authorization systems accounts you can access.
+- **Reload**: Select this option to refresh the displayed list of role/policy filters.
+- **Create Filter**: Select this option to create a new filter.
+
+## Next steps
+
+
+- For information on how to view existing roles/policies, requests, and permissions, see [View roles/policies, requests, and permission in the Remediation dashboard](ui-remediation.md).
+- For information on how to create a role/policy, see [Create a role/policy](how-to-create-role-policy.md).
+- For information on how to clone a role/policy, see [Clone a role/policy](how-to-clone-role-policy.md).
+- For information on how to delete a role/policy, see [Delete a role/policy](how-to-delete-role-policy.md).
+- For information on how to modify a role/policy, see Modify a role/policy](how-to-modify-role-policy.md).
+- To view information about roles/policies, see [View information about roles/policies](how-to-view-role-policy.md).
+- For information on how to attach and detach permissions for AWS identities, see [Attach and detach policies for AWS identities](how-to-attach-detach-permissions.md).
+- For information on how to revoke high-risk and unused tasks or assign read-only status for Azure and GCP identities, see [Revoke high-risk and unused tasks or assign read-only status for Azure and GCP identities](how-to-revoke-task-readonly-status.md)
+- For information on how to create or approve a request for permissions, see [Create or approve a request for permissions](how-to-create-approve-privilege-request.md).
+- For information on how to view information about roles/policies, see [View information about roles/policies](how-to-view-role-policy.md)
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/ui-tasks.md b/articles/active-directory/cloud-infrastructure-entitlement-management/ui-tasks.md
new file mode 100644
index 0000000000000..c4d6d89960a9f
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/ui-tasks.md
@@ -0,0 +1,38 @@
+---
+title: View information about active and completed tasks in Permissions Management
+description: How to view information about active and completed tasks in the Activities pane in Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: overview
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# View information about active and completed tasks
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+This article describes the usage of the **Permissions Management Tasks** pane in Permissions Management.
+
+## Display active and completed tasks
+
+1. In the Permissions Management home page, select **Tasks** (the timer icon).
+
+ The **Permissions Management Tasks** pane appears on the right of the Permissions Management home page. It has two tabs:
+ - **Active**: Displays a list of active tasks, a description of each task, and when the task was started.
+
+ If there are no active tasks, the following message displays: **There are no active tasks**.
+ - **Completed**: Displays a list of completed tasks, a description of each task, when the task was started and ended, and whether the task **Failed** or **Succeeded**.
+
+ If there are no completed activities, the following message displays: **There are no recently completed tasks**.
+1. To close the **Permissions Management Tasks** pane, click outside the pane.
+
+## Next steps
+
+- For information on how to create a role/policy in the **Remediation** dashboard, see [Create a role/policy](how-to-create-role-policy.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/ui-triggers.md b/articles/active-directory/cloud-infrastructure-entitlement-management/ui-triggers.md
new file mode 100644
index 0000000000000..01471aee6f3ac
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/ui-triggers.md
@@ -0,0 +1,87 @@
+---
+title: View information about activity triggers in Permissions Management
+description: How to view information about activity triggers in the Activity triggers dashboard in Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: overview
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# View information about activity triggers
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+This article describes how to use the **Activity triggers** dashboard in Permissions Management to view information about activity alerts and triggers.
+
+## Display the Activity triggers dashboard
+
+- In the Permissions Management home page, select **Activity triggers** (the bell icon).
+
+ The **Activity triggers** dashboard has four tabs:
+
+ - **Activity**
+ - **Rule-Based Anomaly**
+ - **Statistical Anomaly**
+ - **Permission Analytics**
+
+ Each tab has two subtabs:
+
+ - **Alerts**
+ - **Alert Triggers**
+
+## View information about alerts
+
+The **Alerts** subtab in the **Activity**, **Rule-Based Anomaly**, **Statistical Anomaly**, and **Permission Analytics** tabs display the following information:
+
+- **Alert Name**: Select **All** alert names or specific ones.
+- **Date**: Select **Last 24 hours**, **Last 2 Days**, **Last Week**, or **Custom Range.**
+
+ - If you select **Custom Range**, also enter **From** and **To** duration settings.
+- **Apply**: Select this option to activate your settings.
+- **Reset Filter**: Select this option to discard your settings.
+- **Reload**: Select this option to refresh the displayed information.
+- **Create Activity Trigger**: Select this option to [create a new alert trigger](how-to-create-alert-trigger.md).
+- The **Alerts** table displays a list of alerts with the following information:
+ - **Alerts**: The name of the alert.
+ - **# of users subscribed**: The number of users who have subscribed to the alert.
+ - **Created By**: The name of the user who created the alert.
+ - **Modified By**: The name of the user who modified the alert.
+
+The **Rule-Based Anomaly** tab and the **Statistical Anomaly** tab both have one more option:
+
+- **Columns**: Select the columns you want to display: **Task**, **Resource**, and **Identity**.
+ - To return to the system default settings, select **Reset to default**.
+
+## View information about alert triggers
+
+The **Alert Triggers** subtab in the **Activity**, **Rule-Based Anomaly**, **Statistical Anomaly**, and **Permission Analytics** tab displays the following information:
+
+- **Status**: Select the alert status you want to display: **All**, **Activated**, or **Deactivated**.
+- **Apply**: Select this option to activate your settings.
+- **Reset Filter**: Select this option to discard your settings.
+- **Reload**: Select **Reload** to refresh the displayed information.
+- **Create Activity Trigger**: Select this option to [create a new alert trigger](how-to-create-alert-trigger.md).
+- The **Triggers** table displays a list of triggers with the following information:
+ - **Alerts**: The name of the alert.
+ - **# of users subscribed**: The number of users who have subscribed to the alert.
+ - **Created By**: The name of the user who created the alert.
+ - **Modified By**: The name of the user who modified the alert.
+
+
+
+
+
+
+## Next steps
+
+- For information on activity alerts and alert triggers, see [Create and view activity alerts and alert triggers](how-to-create-alert-trigger.md).
+- For information on rule-based anomalies and anomaly triggers, see [Create and view rule-based anomalies and anomaly triggers](product-rule-based-anomalies.md).
+- For information on finding outliers in identity's behavior, see [Create and view statistical anomalies and anomaly triggers](product-statistical-anomalies.md).
+- For information on permission analytics triggers, see [Create and view permission analytics triggers](product-permission-analytics.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/ui-user-management.md b/articles/active-directory/cloud-infrastructure-entitlement-management/ui-user-management.md
new file mode 100644
index 0000000000000..0ac386906b41d
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/ui-user-management.md
@@ -0,0 +1,89 @@
+---
+title: Manage users and groups with the User management dashboard in Permissions Management
+description: How to manage users and groups in the User management dashboard in Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: overview
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# Manage users and groups with the User management dashboard
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+This article describes how to use the Permissions Management **User management** dashboard to view and manage users and groups.
+
+**To display the User management dashboard**:
+
+- In the upper right of the Permissions Management home page, select **User** (your initials) in the upper right of the screen, and then select **User management.**
+
+ The **User Management** dashboard has two tabs:
+
+ - **Users**: Displays information about registered users.
+ - **Groups**: Displays information about groups.
+
+## Manage users
+
+Use the **Users** tab to display the following information about users:
+
+- **Name** and **Email Address**: The user's name and email address.
+- **Joined On**: The date the user registered on the system.
+- **Recent Activity**: The date the user last used their permissions to access the system.
+- The ellipses **(...)** menu: Select the ellipses, and then select **View Permissions** to open the **View User Permission** box.
+
+ - To view details about the user's permissions, select one of the following options:
+ - **Admin for all Authorization System Types** provides **View**, **Control**, and **Approve** permissions for all authorization system types.
+ - **Admin for selected Authorization System Types** provides **View**, **Control**, and **Approve** permissions for selected authorization system types.
+ - **Custom** provides **View**, **Control**, and **Approve** permissions for the authorization system types you select.
+
+You can also select the following options:
+
+- **Reload**: Select this option to refresh the information displayed in the **User** table.
+- **Search**: Enter a name or email address to search for a specific user.
+
+## Manage groups
+
+Use the **Groups** tab to display the following information about groups:
+
+- **Name**: Displays the registered user's name and email address.
+- **Permissions**:
+ - The **Authorization Systems** and the type of permissions the user has been granted: **Admin for all Authorization System Types**, **Admin for selected Authorization System Types**, or **Custom**.
+ - Information about the **Viewer**, **Controller**, **Approver**, and **Requestor**.
+- **Modified By**: The email address of the user who modified the group.
+- **Modified On**: The date the user last modified the group.
+
+- The ellipses **(...)** menu: Select the ellipses to:
+
+ - **View Permissions**: Select this option to view details about the group's permissions, and then select one of the following options:
+ - **Admin for all Authorization System Types** provides **View**, **Control**, and **Approve** permissions for all authorization system types.
+ - **Admin for selected Authorization System Types** provides **View**, **Control**, and **Approve** permissions for selected authorization system types.
+ - **Custom** provides **View**, **Control**, and **Approve** permissions for specific authorization system types that you select.
+
+ - **Edit Permissions**: Select this option to modify the group's permissions.
+ - **Delete**: Select this option to delete the group's permissions.
+
+ The **Delete Permission** box asks you to confirm that you want to delete the group.
+ - Select **Delete** if you want to delete the group, **Cancel** to discard your changes.
+
+
+You can also select the following options:
+
+- **Reload**: Select this option to refresh the information displayed in the **User** table.
+- **Search**: Enter a name or email address to search for a specific user.
+- **Filters**: Select the authorization systems and accounts you want to display.
+- **Create Permission**: Create a group and set up its permissions. For more information, see [Create group-based permissions](how-to-create-group-based-permissions.md)
+
+
+
+## Next steps
+
+- For information about how to view information about active and completed tasks, see [View information about active and completed tasks](ui-tasks.md).
+- For information about how to view personal and organization information, see [View personal and organization information](product-account-settings.md).
+- For information about how to select group-based permissions settings, see [Select group-based permissions settings](how-to-create-group-based-permissions.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/usage-analytics-access-keys.md b/articles/active-directory/cloud-infrastructure-entitlement-management/usage-analytics-access-keys.md
new file mode 100644
index 0000000000000..c2677c84e9cf8
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/usage-analytics-access-keys.md
@@ -0,0 +1,139 @@
+---
+title: View analytic information about access keys in Permissions Management
+description: How to view analytic information about access keys in Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# View analytic information about access keys
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+The **Analytics** dashboard in Permissions Management provides details about identities, resources, and tasks that you can use make informed decisions about granting permissions, and reducing risk on unused permissions.
+
+- **Users**: Tracks assigned permissions and usage of various identities.
+- **Groups**: Tracks assigned permissions and usage of the group and the group members.
+- **Active Resources**: Tracks active resources (used in the last 90 days).
+- **Active Tasks**: Tracks active tasks (performed in the last 90 days).
+- **Access Keys**: Tracks the permission usage of access keys for a given user.
+- **Serverless Functions**: Tracks assigned permissions and usage of the serverless functions.
+
+This article describes how to view usage analytics about access keys.
+
+## Create a query to view access keys
+
+When you select **Access keys**, the **Analytics** dashboard provides a high-level overview of tasks used by various identities.
+
+1. On the main **Analytics** dashboard, select **Access Keys** from the drop-down list at the top of the screen.
+
+ The following components make up the **Access Keys** dashboard:
+
+ - **Authorization System Type**: Select the authorization you want to use: Amazon Web Services (AWS), Microsoft Azure, or Google Cloud Platform (GCP).
+ - **Authorization System**: Select from a **List** of accounts and **Folders***.
+ - **Key Status**: Select **All**, **Active**, or **Inactive**.
+ - **Key Activity State**: Select **All**, how long the access key has been used, or **Not Used**.
+ - **Key Age**: Select **All** or how long ago the access key was created.
+ - **Task Type**: Select **All** tasks, **High Risk Tasks** or, for a list of tasks where users have deleted data, select **Delete Tasks**.
+ - **Search**: Enter criteria to find specific tasks.
+1. Select **Apply** to display the criteria you've selected.
+
+ Select **Reset Filter** to discard your changes.
+
+
+## View the results of your query
+
+The **Access Keys** table displays the results of your query.
+
+- **Access Key ID**: Provides the ID for the access key.
+ - To view details about the access keys, select the down arrow to the left of the ID.
+- The **Owner** name.
+- The **Account** number.
+- The **Permission Creep Index (PCI)**: Provides the following information:
+ - **Index**: A numeric value assigned to the PCI.
+ - **Since**: How many days the PCI value has been at the displayed level.
+- **Tasks** Displays the number of **Granted** and **Executed** tasks.
+- **Resources**: The number of resources used.
+- **Access Key Age**: How old the access key is, in days.
+- **Last Used**: How long ago the access key was last accessed.
+
+## Apply filters to your query
+
+There are many filter options within the **Active Tasks** screen, including filters by **Authorization System**, filters by **User** and filters by **Task**.
+Filters can be applied in one, two, or all three categories depending on the type of information you're looking for.
+
+### Apply filters by authorization system type
+
+1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
+1. Select **Apply** to run your query and display the information you selected.
+
+ Select **Reset Filter** to discard your changes.
+
+
+### Apply filters by authorization system
+
+1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
+1. From the **Authorization System** dropdown, select accounts from a **List** of accounts and **Folders**.
+1. Select **Apply** to run your query and display the information you selected.
+
+ Select **Reset Filter** to discard your changes.
+
+### Apply filters by key status
+
+1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
+1. From the **Authorization System** dropdown, select from a **List** of accounts and **Folders**.
+1. From the **Key Status** dropdown, select the type of key: **All**, **Active**, or **Inactive**.
+1. Select **Apply** to run your query and display the information you selected.
+
+ Select **Reset Filter** to discard your changes.
+
+### Apply filters by key activity status
+
+1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
+1. From the **Authorization System** dropdown, select from a **List** of accounts and **Folders**.
+1. From the **Key Activity State** dropdown, select **All**, the duration for how long the access key has been used, or **Not Used**.
+
+1. Select **Apply** to run your query and display the information you selected.
+
+ Select **Reset Filter** to discard your changes.
+
+### Apply filters by key age
+
+1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
+1. From the **Authorization System** dropdown, select from a **List** of accounts and **Folders**.
+1. From the **Key Age** dropdown, select **All** or how long ago the access key was created.
+
+1. Select **Apply** to run your query and display the information you selected.
+
+ Select **Reset Filter** to discard your changes.
+
+### Apply filters by task type
+
+1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
+1. From the **Authorization System** dropdown, select from a **List** of accounts and **Folders**.
+1. From the **Task Type** dropdown, select **All** tasks, **High Risk Tasks** or, for a list of tasks where users have deleted data, select **Delete tasks**.
+1. Select **Apply** to run your query and display the information you selected.
+
+ Select **Reset Filter** to discard your changes.
+
+
+
+## Export the results of your query
+
+- To view a report of the results of your query as a comma-separated values (CSV) file, select **Export**, and then select **CSV** or **CSV (Detailed)**.
+
+## Next steps
+
+- To view active tasks, see [View usage analytics about active tasks](usage-analytics-active-tasks.md).
+- To view assigned permissions and usage by users, see [View usage analytics about users](usage-analytics-users.md).
+- To view assigned permissions and usage of the group and the group members, see [View usage analytics about groups](usage-analytics-groups.md).
+- To view active resources, see [View usage analytics about active resources](usage-analytics-active-resources.md).
+- To view assigned permissions and usage of the serverless functions, see [View usage analytics about serverless functions](usage-analytics-serverless-functions.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/usage-analytics-active-resources.md b/articles/active-directory/cloud-infrastructure-entitlement-management/usage-analytics-active-resources.md
new file mode 100644
index 0000000000000..d05b4f4b48984
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/usage-analytics-active-resources.md
@@ -0,0 +1,126 @@
+---
+title: View analytic information about active resources in Permissions Management
+description: How to view usage analytics about active resources in Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# View analytic information about active resources
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+The **Analytics** dashboard in Permissions Management collects detailed information, analyzes, reports on, and visualizes data about all identity types. System administrators can use the information to make informed decisions about granting permissions and reducing risk on unused permissions for:
+
+- **Users**: Tracks assigned permissions and usage of various identities.
+- **Groups**: Tracks assigned permissions and usage of the group and the group members.
+- **Active Resources**: Tracks active resources (used in the last 90 days).
+- **Active Tasks**: Tracks active tasks (performed in the last 90 days).
+- **Access Keys**: Tracks the permission usage of access keys for a given user.
+- **Serverless Functions**: Tracks assigned permissions and usage of the serverless functions.
+
+This article describes how to view usage analytics about active resources.
+
+## Create a query to view active resources
+
+1. On the main **Analytics** dashboard, select **Active Resources** from the drop-down list at the top of the screen.
+
+ The dashboard only lists tasks that are active. The following components make up the **Active Resources** dashboard:
+1. From the dropdowns, select:
+ - **Authorization System Type**: The authorization you want to use: Amazon Web Services (AWS), Microsoft Azure, or Google Cloud Platform (GCP).
+ - **Authorization System**: The **List** of accounts and **Folders** you want to include.
+ - **Tasks Type**: Select **All** tasks, **High Risk Tasks** or, for a list of tasks where users have deleted data, select **Delete Tasks**.
+ - **Service Resource Type**: The service resource type.
+ - **Search**: Enter criteria to find specific tasks.
+
+1. Select **Apply** to display the criteria you've selected.
+
+ Select **Reset Filter** to discard your changes.
+
+
+## View the results of your query
+
+The **Active Resources** table displays the results of your query:
+
+- **Resource Name**: Provides the name of the task.
+ - To view details about the task, select the down arrow.
+- **Account**: The name of the account.
+- **Resources Type**: The type of resources used, for example, **bucket** or **key**.
+- **Tasks**: Displays the number of **Granted** and **Executed** tasks.
+- **Number of Users**: The number of users with access and accessed.
+- Select the ellipses **(...)** and select **Tags** to add a tag.
+
+## Add a tag to an active resource
+
+1. Select the ellipses **(...)** and select **Tags**.
+1. From the **Select a Tag** dropdown, select a tag.
+1. To create a custom tag select **New Custom Tag**, add a tag name, and then select **Create**.
+1. In the **Value (Optional)** box, enter a value.
+1. Select the ellipses **(...)** to select **Advanced Save** options, and then select **Save**.
+1. To add the tag to the serverless function, select **Add Tag**.
+
+
+## Apply filters to your query
+
+There are many filter options within the **Active Resources** screen, including filters by **Authorization System**, filters by **User** and filters by **Task**.
+Filters can be applied in one, two, or all three categories depending on the type of information you're looking for.
+
+### Apply filters by authorization system
+
+1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
+1. Select **Apply** to run your query and display the information you selected.
+
+ Select **Reset Filter** to discard your changes.
+
+
+### Apply filters by authorization system type
+
+1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
+1. From the **Authorization System** dropdown, select from a **List** of accounts and **Folders**.
+1. Select **Apply** to run your query and display the information you selected.
+
+ Select **Reset Filter** to discard your changes.
+
+### Apply filters by task type
+
+You can filter user details by type of user, user role, app, or service used, or by resource.
+
+1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
+1. From the **Authorization System** dropdown, select from a **List** of accounts and **Folders**.
+1. From the **Task Type**, select the type of user: **All**, **User**, **Role/App/Service a/c**, or **Resource**.
+1. Select **Apply** to run your query and display the information you selected.
+
+ Select **Reset Filter** to discard your changes.
+
+
+### Apply filters by service resource type
+
+You can filter user details by type of user, user role, app, or service used, or by resource.
+
+1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
+1. From the **Authorization System** dropdown, select from a **List** of accounts and **Folders**.
+1. From the **Service Resource Type**, select the type of service resource.
+1. Select **Apply** to run your query and display the information you selected.
+
+ Select **Reset Filter** to discard your changes.
+
+## Export the results of your query
+
+- To view a report of the results of your query as a comma-separated values (CSV) file, select **Export**, and then select **CSV**.
+
+
+## Next steps
+
+- To track active tasks, see [View usage analytics about active tasks](usage-analytics-active-tasks.md).
+- To track assigned permissions and usage of users, see [View usage analytics about users](usage-analytics-users.md).
+- To track assigned permissions and usage of the group and the group members, see [View usage analytics about groups](usage-analytics-groups.md).
+- To track the permission usage of access keys for a given user, see [View usage analytics about access keys](usage-analytics-access-keys.md).
+- To track assigned permissions and usage of the serverless functions, see [View usage analytics about serverless functions](usage-analytics-serverless-functions.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/usage-analytics-active-tasks.md b/articles/active-directory/cloud-infrastructure-entitlement-management/usage-analytics-active-tasks.md
new file mode 100644
index 0000000000000..729df078b99de
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/usage-analytics-active-tasks.md
@@ -0,0 +1,111 @@
+---
+title: View analytic information about active tasks in Permissions Management
+description: How to view analytic information about active tasks in Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# View analytic information about active tasks
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+The **Analytics** dashboard in Permissions Management collects detailed information, analyzes, reports on, and visualizes data about all identity types. System administrators can use the information to make informed decisions about granting permissions and reducing risk on unused permissions for:
+
+- **Users**: Tracks assigned permissions and usage of various identities.
+- **Groups**: Tracks assigned permissions and usage of the group and the group members.
+- **Active Resources**: Tracks active resources (used in the last 90 days).
+- **Active Tasks**: Tracks active tasks (performed in the last 90 days).
+- **Access Keys**: Tracks the permission usage of access keys for a given user.
+- **Serverless Functions**: Tracks assigned permissions and usage of the serverless functions.
+
+This article describes how to view usage analytics about active tasks.
+
+## Create a query to view active tasks
+
+When you select **Active Tasks**, the **Analytics** dashboard provides a high-level overview of tasks used by various identities.
+
+1. On the main **Analytics** dashboard, select **Active Tasks** from the drop-down list at the top of the screen.
+
+ The dashboard only lists tasks that are active. The following components make up the **Active Tasks** dashboard:
+
+ - **Authorization System Type**: Select the authorization you want to use: Amazon Web Services (AWS), Microsoft Azure, or Google Cloud Platform (GCP).
+ - **Authorization System**: Select from a **List** of accounts and **Folders***.
+ - **Tasks Type**: Select **All** tasks, **High Risk tasks** or, for a list of tasks where users have deleted data, select **Delete Tasks**.
+ - **Search**: Enter criteria to find specific tasks.
+
+1. Select **Apply** to display the criteria you've selected.
+
+ Select **Reset Filter** to discard your changes.
+
+
+## View the results of your query
+
+The **Active Tasks** table displays the results of your query.
+
+- **Task Name**: Provides the name of the task.
+ - To view details about the task, select the down arrow in the table.
+
+ - A **Normal Task** icon displays to the left of the task name if the task is normal (that is, not risky).
+ - A **Deleted Task** icon displays to the left of the task name if the task involved deleting data.
+ - A **High-Risk Task** icon displays to the left of the task name if the task is high-risk.
+
+- **Performed on (resources)**: The number of resources on which the task was used.
+
+- **Number of Users**: Displays how many users performed tasks. The tasks are organized into the following columns:
+ - **With Access**: Displays the number of users that have access to the task but haven't accessed it.
+ - **Accessed**: Displays the number of users that have accessed the task.
+
+
+## Apply filters to your query
+
+There are many filter options within the **Active Tasks** screen, including **Authorization System**, **User**, and **Task**.
+Filters can be applied in one, two, or all three categories depending on the type of information you're looking for.
+
+### Apply filters by authorization system type
+
+1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
+1. Select **Apply** to run your query and display the information you selected.
+
+ Select **Reset Filter** to discard your changes.
+
+### Apply filters by authorization system
+
+1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
+1. From the **Authorization System** dropdown, select accounts from a **List** of accounts and **Folders**.
+1. Select **Apply** to run your query and display the information you selected.
+
+ Select **Reset Filter** to discard your changes.
+
+
+### Apply filters by task type
+
+You can filter user details by type of user, user role, app, or service used, or by resource.
+
+1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
+1. From the **Authorization System** dropdown, select from a **List** of accounts and **Folders**.
+1. From the **Task Type** dropdown, select the type of tasks: **All**, **High Risk Tasks**, or **Delete Tasks**.
+1. Select **Apply** to run your query and display the information you selected.
+
+ Select **Reset Filter** to discard your changes.
+
+
+## Export the results of your query
+
+- To view a report of the results of your query as a comma-separated values (CSV) file, select **Export**, and then select **CSV**.
+
+## Next steps
+
+- To view assigned permissions and usage by users, see [View analytic information about users](usage-analytics-users.md).
+- To view assigned permissions and usage of the group and the group members, see [View analytic information about groups](usage-analytics-groups.md).
+- To view active resources, see [View analytic information about active resources](usage-analytics-active-resources.md).
+- To view the permission usage of access keys for a given user, see [View analytic information about access keys](usage-analytics-access-keys.md).
+- To view assigned permissions and usage of the serverless functions, see [View analytic information about serverless functions](usage-analytics-serverless-functions.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/usage-analytics-groups.md b/articles/active-directory/cloud-infrastructure-entitlement-management/usage-analytics-groups.md
new file mode 100644
index 0000000000000..11894bc662e38
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/usage-analytics-groups.md
@@ -0,0 +1,154 @@
+---
+title: View analytic information about groups in Permissions Management
+description: How to view analytic information about groups in Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# View analytic information about groups
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+The **Analytics** dashboard in Permissions Management collects detailed information, analyzes, reports on, and visualizes data about all identity types. System administrators can use the information to make informed decisions about granting permissions and reducing risk on unused permissions for:
+
+- **Users**: Tracks assigned permissions and usage of various identities.
+- **Groups**: Tracks assigned permissions and usage of the group and the group members.
+- **Active Resources**: Tracks active resources (used in the last 90 days).
+- **Active Tasks**: Tracks active tasks (performed in the last 90 days).
+- **Access Keys**: Tracks the permission usage of access keys for a given user.
+- **Serverless Functions**: Tracks assigned permissions and usage of the serverless functions.
+
+This article describes how to view usage analytics about groups.
+
+## Create a query to view groups
+
+When you select **Groups**, the **Usage Analytics** dashboard provides a high-level overview of groups.
+
+1. On the main **Analytics** dashboard, select **Groups** from the drop-down list at the top of the screen.
+
+ The following components make up the **Groups** dashboard:
+
+ - **Authorization System Type**: Select the authorization you want to use: Amazon Web Services (AWS), Microsoft Azure, or Google Cloud Platform (GCP).
+ - **Authorization System**: Select from a **List** of accounts and **Folders**.
+ - **Group Type**: Select **All**, **ED**, or **Local**.
+ - **Group Activity Status**: Select **All**, **Active**, or **Inactive**.
+ - **Tasks Type**: Select **All**, **High Risk Tasks**, or **Delete Tasks**
+ - **Search**: Enter group name to find specific group.
+1. To display the criteria you've selected, select **Apply**.
+ - **Reset Filter**: Select to discard your changes.
+
+
+## View the results of your query
+
+The **Groups** table displays the results of your query:
+
+- **Group Name**: Provides the name of the group.
+ - To view details about the group, select the down arrow.
+- A **Group Type** icon displays to the left of the group name to describe the type of group (**ED** or **Local**).
+- The **Domain/Account** name.
+- The **Permission Creep Index (PCI)**: Provides the following information:
+ - **Index**: A numeric value assigned to the PCI.
+ - **Since**: How many days the PCI value has been at the displayed level.
+- **Tasks**: Displays the number of **Granted** and **Executed** tasks.
+- **Resources**: The number of resources used.
+- **Users**: The number of users who accessed the group.
+- Select the ellipses **(...)** and select **Tags** to add a tag.
+
+## Add a tag to a group
+
+1. Select the ellipses **(...)** and select **Tags**.
+1. From the **Select a Tag** dropdown, select a tag.
+1. To create a custom tag select **New Custom Tag**, add a tag name, and then select **Create**.
+1. In the **Value (Optional)** box, enter a value.
+1. Select the ellipses **(...)** to select **Advanced Save** options, and then select **Save**.
+1. To add the tag to the serverless function, select **Add Tag**.
+
+## View detailed information about a group
+
+1. Select the down arrow to the left of the **Group Name**.
+
+ The list of **Tasks** organized by **Unused** and **Used** displays.
+
+1. Select the arrow to the left of the group name to view details about the task.
+1. Select **Information** (**i**) to view when the task was last used.
+1. From the **Tasks** dropdown, select **All Tasks**, **High Risk Tasks**, and **Delete Tasks**.
+1. The pane on the right displays a list of **Users**, **Policies** for **AWS** and **Roles** for **GCP or AZURE**, and **Tags**.
+
+## Apply filters to your query
+
+There are many filter options within the **Groups** screen, including filters by **Authorization System Type**, **Authorization System**, **Group Type**, **Group Activity Status**, and **Tasks Type**.
+Filters can be applied in one, two, or all three categories depending on the type of information you're looking for.
+
+### Apply filters by authorization system type
+
+1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
+1. Select **Apply** to run your query and display the information you selected.
+
+ Select **Reset Filter** to discard your changes.
+
+### Apply filters by authorization system
+
+1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
+1. From the **Authorization System** dropdown, select accounts from a **List** of accounts and **Folders**.
+1. Select **Apply** to run your query and display the information you selected.
+
+ Select **Reset Filter** to discard your changes.
+
+
+### Apply filters by group type
+
+You can filter user details by type of user, user role, app, or service used, or by resource.
+
+1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
+1. From the **Authorization System** dropdown, select from a **List** of accounts and **Folders**.
+1. From the **Group Type** dropdown, select the type of user: **All**, **ED**, or **Local**.
+1. Select **Apply** to run your query and display the information you selected.
+
+ Select **Reset Filter** to discard your changes.
+
+### Apply filters by group activity status
+
+You can filter user details by type of user, user role, app, or service used, or by resource.
+
+1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
+1. From the **Authorization System** dropdown, select from a **List** of accounts and **Folders**.
+1. From the **Group Activity Status** dropdown, select the type of user: **All**, **Active**, or **Inactive**.
+1. Select **Apply** to run your query and display the information you selected.
+
+ Select **Reset Filter** to discard your changes.
+
+### Apply filters by tasks type
+
+You can filter user details by type of user, user role, app, or service used, or by resource.
+
+1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
+1. From the **Authorization System** dropdown, select from a **List** of accounts and **Folders**.
+1. From the **Tasks Type** dropdown, select the type of user: **All**, **High Risk Tasks**, or **Delete Tasks**.
+1. Select **Apply** to run your query and display the information you selected.
+
+ Select **Reset Filter** to discard your changes.
+
+
+## Export the results of your query
+
+- To view a report of the results of your query as a comma-separated values (CSV) file, select **Export**, and then select **CSV**.
+- To view a list of members of the groups in your query, select **Export**, and then select **Memberships**.
+
+
+
+## Next steps
+
+- To view active tasks, see [View analytic information about active tasks](usage-analytics-active-tasks.md).
+- To view assigned permissions and usage by users, see [View analytic information about users](usage-analytics-users.md).
+- To view active resources, see [View analytic information about active resources](usage-analytics-active-resources.md).
+- To view the permission usage of access keys for a given user, see [View analytic information about access keys](usage-analytics-access-keys.md).
+- To view assigned permissions and usage of the serverless functions, see [View analytic information about serverless functions](usage-analytics-serverless-functions.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/usage-analytics-home.md b/articles/active-directory/cloud-infrastructure-entitlement-management/usage-analytics-home.md
new file mode 100644
index 0000000000000..e0933b95f7a19
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/usage-analytics-home.md
@@ -0,0 +1,52 @@
+---
+title: View analytic information with the Analytics dashboard in Permissions Management
+description: How to use the Analytics dashboard in Permissions Management to view details about users, groups, active resources, active tasks, access keys, and serverless functions.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# View analytic information with the Analytics dashboard
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+This article provides a brief overview of the Analytics dashboard in Permissions Management, and the type of analytic information it provides for Amazon Web Services (AWS), Microsoft Azure, or Google Cloud Platform (GCP).
+
+## Display the Analytics dashboard
+
+- From the Permissions Management home page, select the **Analytics** tab.
+
+ The **Analytics** dashboard displays detailed information about:
+
+ - **Users**: Tracks assigned permissions and usage by users. For more information, see [View analytic information about users](usage-analytics-users.md).
+
+ - **Groups**: Tracks assigned permissions and usage of the group and the group members. For more information, see [View analytic information about groups](usage-analytics-groups.md).
+
+ - **Active Resources**: Tracks resources that have been used in the last 90 days. For more information, see [View analytic information about active resources](usage-analytics-active-resources.md).
+
+ - **Active Tasks**: Tracks tasks that have been performed in the last 90 days. For more information, see [View analytic information about active tasks](usage-analytics-active-tasks.md).
+
+ - **Access Keys**: Tracks the permission usage of access keys for a given user. For more information, see [View analytic information about access keys](usage-analytics-access-keys.md).
+
+ - **Serverless Functions**: Tracks assigned permissions and usage of the serverless functions for AWS only. For more information, see [View analytic information about serverless functions](usage-analytics-serverless-functions.md).
+
+ System administrators can use this information to make decisions about granting permissions and reducing risk on unused permissions.
+
+
+
+## Next steps
+
+- To view active tasks, see [View analytic information about active tasks](usage-analytics-active-tasks.md).
+- To view assigned permissions and usage by users, see [View analytic information about users](usage-analytics-users.md).
+- To view assigned permissions and usage of the group and the group members, see [View analytic information about groups](usage-analytics-groups.md).
+- To view active resources, see [View analytic information about active resources](usage-analytics-active-resources.md).
+- To view the permission usage of access keys for a given user, see [View analytic information about access keys](usage-analytics-access-keys.md).
+- To view assigned permissions and usage of the serverless functions, see [View analytic information about serverless functions](usage-analytics-serverless-functions.md).
\ No newline at end of file
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/usage-analytics-serverless-functions.md b/articles/active-directory/cloud-infrastructure-entitlement-management/usage-analytics-serverless-functions.md
new file mode 100644
index 0000000000000..e9d93ed26b0a6
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/usage-analytics-serverless-functions.md
@@ -0,0 +1,112 @@
+---
+title: View analytic information about serverless functions in Permissions Management
+description: How to view analytic information about serverless functions in Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# View analytic information about serverless functions
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+The **Analytics** dashboard in Permissions Management collects detailed information, analyzes, reports on, and visualizes data about all identity types. System administrators can use the information to make informed decisions about granting permissions and reducing risk on unused permissions for:
+
+- **Users**: Tracks assigned permissions and usage of various identities.
+- **Groups**: Tracks assigned permissions and usage of the group and the group members.
+- **Active Resources**: Tracks active resources (used in the last 90 days).
+- **Active Tasks**: Tracks active tasks (performed in the last 90 days).
+- **Access Keys**: Tracks the permission usage of access keys for a given user.
+- **Serverless Functions**: Tracks assigned permissions and usage of the serverless functions.
+
+This article describes how to view usage analytics about serverless functions.
+
+## Create a query to view serverless functions
+
+When you select **Serverless Functions**, the **Analytics** dashboard provides a high-level overview of tasks used by various identities.
+
+1. On the main **Analytics** dashboard, select **Serverless Functions** from the dropdown list at the top of the screen.
+
+ The following components make up the **Serverless Functions** dashboard:
+
+ - **Authorization System Type**: Select the authorization you want to use: Amazon Web Services (AWS), Microsoft Azure, or Google Cloud Platform (GCP).
+ - **Authorization System**: Select from a **List** of accounts and **Folders**.
+ - **Search**: Enter criteria to find specific tasks.
+1. Select **Apply** to display the criteria you've selected.
+
+ Select **Reset Filter** to discard your changes.
+
+
+## View the results of your query
+
+The **Serverless Functions** table displays the results of your query.
+
+- **Function Name**: Provides the name of the serverless function.
+ - To view details about a serverless function, select the down arrow to the left of the function name.
+- A **Function Type** icon displays to the left of the function name to describe the type of serverless function, for example **Lambda function**.
+- The **Permission Creep Index (PCI)**: Provides the following information:
+ - **Index**: A numeric value assigned to the PCI.
+ - **Since**: How many days the PCI value has been at the displayed level.
+- **Tasks**: Displays the number of **Granted** and **Executed** tasks.
+- **Resources**: The number of resources used.
+- **Last Activity On**: The date the function was last accessed.
+- Select the ellipses **(...)**, and then select **Tags** to add a tag.
+
+## Add a tag to a serverless function
+
+1. Select the ellipses **(...)** and select **Tags**.
+1. From the **Select a Tag** dropdown, select a tag.
+1. To create a custom tag select **New Custom Tag**, add a tag name, and then select **Create**.
+1. In the **Value (Optional)** box, enter a value.
+1. Select the ellipses **(...)** to select **Advanced Save** options, and then select **Save**.
+1. To add the tag to the serverless function, select **Add Tag**.
+
+## View detailed information about a serverless function
+
+1. Select the down arrow to the left of the function name to display the following:
+
+ - A list of **Tasks** organized by **Used** and **Unused**.
+ - **Versions**, if a version is available.
+
+1. Select the arrow to the left of the task name to view details about the task.
+1. Select **Information** (**i**) to view when the task was last used.
+1. From the **Tasks** dropdown, select **All Tasks**, **High Risk Tasks**, and **Delete Tasks**.
+
+
+## Apply filters to your query
+
+You can filter the **Serverless Functions** results by **Authorization System Type** and **Authorization System**.
+
+### Apply filters by authorization system type
+
+1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
+1. Select **Apply** to run your query and display the information you selected.
+
+ Select **Reset Filter** to discard your changes.
+
+
+### Apply filters by authorization system
+
+1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
+1. From the **Authorization System** dropdown, select accounts from a **List** of accounts and **Folders**.
+1. Select **Apply** to run your query and display the information you selected.
+
+ Select **Reset Filter** to discard your changes.
+
+
+
+## Next steps
+
+- To view active tasks, see [View usage analytics about active tasks](usage-analytics-active-tasks.md).
+- To view assigned permissions and usage by users, see [View analytic information about users](usage-analytics-users.md).
+- To view assigned permissions and usage of the group and the group members, see [View analytic information about groups](usage-analytics-groups.md).
+- To view active resources, see [View analytic information about active resources](usage-analytics-active-resources.md).
+- To view the permission usage of access keys for a given user, see [View analytic information about access keys](usage-analytics-access-keys.md).
diff --git a/articles/active-directory/cloud-infrastructure-entitlement-management/usage-analytics-users.md b/articles/active-directory/cloud-infrastructure-entitlement-management/usage-analytics-users.md
new file mode 100644
index 0000000000000..51779608d21ca
--- /dev/null
+++ b/articles/active-directory/cloud-infrastructure-entitlement-management/usage-analytics-users.md
@@ -0,0 +1,166 @@
+---
+title: View analytic information about users in Permissions Management
+description: How to view analytic information about users in Permissions Management.
+services: active-directory
+author: kenwith
+manager: rkarlin
+ms.service: active-directory
+ms.subservice: ciem
+ms.workload: identity
+ms.topic: how-to
+ms.date: 02/23/2022
+ms.author: kenwith
+---
+
+# View analytic information about users
+
+> [!IMPORTANT]
+> Microsoft Entra Permissions Management is currently in PREVIEW.
+> Some information relates to a prerelease product that may be substantially modified before it's released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
+
+The **Analytics** dashboard in Permissions Management collects detailed information, analyzes, reports on, and visualizes data about all identity types. System administrators can use the information to make informed decisions about granting permissions and reducing risk on unused permissions for:
+
+- **Users**: Tracks assigned permissions and usage of various identities.
+- **Groups**: Tracks assigned permissions and usage of the group and the group members.
+- **Active Resources**: Tracks active resources (used in the last 90 days).
+- **Active Tasks**: Tracks active tasks (performed in the last 90 days).
+- **Access Keys**: Tracks the permission usage of access keys for a given user.
+- **Serverless Functions**: Tracks assigned permissions and usage of the serverless functions.
+
+This article describes how to view usage analytics about users.
+
+## Create a query to view users
+
+When you select **Users**, the **Analytics** dashboard provides a high-level overview of tasks used by various identities.
+
+1. On the main **Analytics** dashboard, select **Users** from the drop-down list at the top of the screen.
+
+ The following components make up the **Users** dashboard:
+
+ - **Authorization System Type**: Select the authorization you want to use: Amazon Web Services (AWS), Microsoft Azure, or Google Cloud Platform (GCP).
+ - **Authorization System**: Select from a **List** of accounts and **Folders***.
+ - **Identity Type**: Select **All** identity types, **User**, **Role/App/Service a/c** or **Resource**.
+ - **Search**: Enter criteria to find specific tasks.
+1. Select **Apply** to display the criteria you've selected.
+
+ Select **Reset filter** to discard your changes.
+
+
+## View the results of your query
+
+The **Identities** table displays the results of your query.
+
+- **Name**: Provides the name of the group.
+ - To view details about the group, select the down arrow.
+- The **Domain/Account** name.
+- The **Permission Creep Index (PCI)**: Provides the following information:
+ - **Index**: A numeric value assigned to the PCI.
+ - **Since**: How many days the PCI value has been at the displayed level.
+- **Tasks**: Displays the number of **Granted** and **Executed** tasks.
+- **Resources**: The number of resources used.
+- **User Groups**: The number of users who accessed the group.
+- **Last Activity On**: The date the function was last accessed.
+- The ellipses **(...)**: Select **Tags** to add a tag.
+
+ If you're using AWS, another selection is available from the ellipses menu: **Auto Remediate**. You can use this option to remediate your results automatically.
+
+## Add a tag to a user
+
+1. Select the ellipses **(...)** and select **Tags**.
+1. From the **Select a Tag** dropdown, select a tag.
+1. To create a custom tag select **New Custom Tag**, add a tag name, and then select **Create**.
+1. In the **Value (Optional)** box, enter a value.
+1. Select the ellipses **(...)** to select **Advanced Save** options, and then select **Save**.
+1. To add the tag to the serverless function, select **Add Tag**.
+
+## Set the auto-remediate option (AWS only)
+
+- Select the ellipses **(...)** and select **Auto Remediate**.
+
+ A message displays to confirm that your remediation settings are automatically updated.
+
+## Apply filters to your query
+
+There are many filter options within the **Users** screen, including filters by **Authorization System**, **Identity Type**, and **Identity State**.
+Filters can be applied in one, two, or all three categories depending on the type of information you're looking for.
+
+### Apply filters by authorization system type
+
+1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
+1. Select **Apply** to run your query and display the information you selected.
+
+ Select **Reset Filter** to discard your changes.
+
+
+### Apply filters by authorization system
+
+1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
+1. From the **Authorization System** dropdown, select accounts from a **List** of accounts and **Folders**.
+1. Select **Apply** to run your query and display the information you selected.
+
+ Select **Reset filter** to discard your changes.
+
+### Apply filters by identity type
+
+1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
+1. From the **Authorization System** dropdown, select from a **List** of accounts and **Folders**.
+1. From the **Identity Type**, select the type of user: **All**, **User**, **Role/App/Service a/c**, or **Resource**.
+1. Select **Apply** to run your query and display the information you selected.
+
+ Select **Reset Filter** to discard your changes.
+
+### Apply filters by identity subtype
+
+1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
+1. From the **Authorization System** dropdown, select from a **List** of accounts and **Folders**.
+1. From the **Identity Subtype**, select the type of user: **All**, **ED**, **Local**, or **Cross Account**.
+1. Select **Apply** to run your query and display the information you selected.
+
+ Select **Reset filter** to discard your changes.
+
+### Apply filters by identity state
+
+1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
+1. From the **Authorization System** dropdown, select from a **List** of accounts and **Folders**.
+1. From the **Identity State**, select the type of user: **All**, **Active**, or **Inactive**.
+1. Select **Apply** to run your query and display the information you selected.
+
+ Select **Reset Filter** to discard your changes.
+
+
+### Apply filters by identity filters
+
+1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
+1. From the **Authorization System** dropdown, select from a **List** of accounts and **Folders**.
+1. From the **Identity Type**, select: **Risky** or **Incl. in PCI Calculation Only**.
+1. Select **Apply** to run your query and display the information you selected.
+
+ Select **Reset Filter** to discard your changes.
+
+
+### Apply filters by task type
+
+You can filter user details by type of user, user role, app, or service used, or by resource.
+
+1. From the **Authorization System Type** dropdown, select the authorization system you want to use: **AWS**, **Azure**, or **GCP**.
+1. From the **Authorization System** dropdown, select from a **List** of accounts and **Folders**.
+1. From the **Task Type**, select the type of user: **All** or **High Risk Tasks**.
+1. Select **Apply** to run your query and display the information you selected.
+
+ Select **Reset Filter** to discard your changes.
+
+
+## Export the results of your query
+
+- To export a report of the results of your query as a comma-separated values (CSV) file, select **Export**, and then select **CSV**.
+- To export the data in a detailed comma-separated values (CSV) file format, select **Export** and then select **CSV (Detailed)**.
+- To export a report of user permissions, select **Export** and then select **Permissions**.
+
+
+## Next steps
+
+- To view active tasks, see [View analytic information about active tasks](usage-analytics-active-tasks.md).
+- To view assigned permissions and usage of the group and the group members, see [View analytic information about groups](usage-analytics-groups.md).
+- To view active resources, see [View analytic information about active resources](usage-analytics-active-resources.md).
+- To view the permission usage of access keys for a given user, see [View analytic information about access keys](usage-analytics-access-keys.md).
+- To view assigned permissions and usage of the serverless functions, see [View analytic information about serverless functions](usage-analytics-serverless-functions.md).
\ No newline at end of file
diff --git a/articles/active-directory/conditional-access/TOC.yml b/articles/active-directory/conditional-access/TOC.yml
index be1e8d4bbe3bb..189303227a579 100644
--- a/articles/active-directory/conditional-access/TOC.yml
+++ b/articles/active-directory/conditional-access/TOC.yml
@@ -115,13 +115,13 @@
- name: Beta Graph APIs
items:
- name: conditionalAccessPolicy API
- href: /graph/api/resources/conditionalaccesspolicy?view=graph-rest-beta
+ href: /graph/api/resources/conditionalaccesspolicy
- name: namedLocation API
- href: /graph/api/resources/namedlocation?view=graph-rest-beta
+ href: /graph/api/resources/namedlocation
- name: countryNamedLocation API
- href: /graph/api/resources/countrynamedlocation?view=graph-rest-beta
+ href: /graph/api/resources/countrynamedlocation
- name: ipNamedLocation API
- href: /graph/api/resources/ipnamedlocation?view=graph-rest-beta
+ href: /graph/api/resources/ipnamedlocation
- name: Resources
items:
- name: Azure feedback forum
diff --git a/articles/active-directory/conditional-access/block-legacy-authentication.md b/articles/active-directory/conditional-access/block-legacy-authentication.md
index 1424f91a24ea3..324b94af47432 100644
--- a/articles/active-directory/conditional-access/block-legacy-authentication.md
+++ b/articles/active-directory/conditional-access/block-legacy-authentication.md
@@ -11,7 +11,7 @@ manager: karenhoran
ms.reviewer: calebb, dawoo, jebeckha, grtaylor
ms.collection: M365-identity-device-management
---
-# How to: Block legacy authentication to Azure AD with Conditional Access
+# How to: Block legacy authentication access to Azure AD with Conditional Access
To give your users easy access to your cloud apps, Azure Active Directory (Azure AD) supports a broad variety of authentication protocols including legacy authentication. However, legacy authentication doesn't support multifactor authentication (MFA). MFA is in many environments a common requirement to address identity theft.
@@ -85,7 +85,7 @@ For more information about these authentication protocols and services, see [Sig
Before you can block legacy authentication in your directory, you need to first understand if your users have apps that use legacy authentication and how it affects your overall directory. Azure AD sign-in logs can be used to understand if you're using legacy authentication.
-1. Navigate to the **Azure portal** > **Azure Active Directory** > **Sign-ins**.
+1. Navigate to the **Azure portal** > **Azure Active Directory** > **Sign-in logs**.
1. Add the Client App column if it isn't shown by clicking on **Columns** > **Client App**.
1. **Add filters** > **Client App** > select all of the legacy authentication protocols. Select outside the filtering dialog box to apply your selections and close the dialog box.
1. If you've activated the [new sign-in activity reports preview](../reports-monitoring/concept-all-sign-ins.md), repeat the above steps also on the **User sign-ins (non-interactive)** tab.
diff --git a/articles/active-directory/conditional-access/concept-condition-filters-for-devices.md b/articles/active-directory/conditional-access/concept-condition-filters-for-devices.md
index 31dc70544f969..de0fdca9aef12 100644
--- a/articles/active-directory/conditional-access/concept-condition-filters-for-devices.md
+++ b/articles/active-directory/conditional-access/concept-condition-filters-for-devices.md
@@ -23,7 +23,7 @@ There are multiple scenarios that organizations can now enable using filter for
- **Restrict access to privileged resources**. For this example, lets say you want to allow access to Microsoft Azure Management from a user who is assigned a privilged role Global Admin, has satisfied multifactor authentication and accessing from a device that is [privileged or secure admin workstations](/security/compass/privileged-access-devices) and attested as compliant. For this scenario, organizations would create two Conditional Access policies:
- Policy 1: All users with the directory role of Global administrator, accessing the Microsoft Azure Management cloud app, and for Access controls, Grant access, but require multifactor authentication and require device to be marked as compliant.
- - Policy 2: All users with the directory role of Global administrator, accessing the Microsoft Azure Management cloud app, excluding a filter for devices using rule expression device.extensionAttribute1 equals SAW and for Access controls, Block. Learn how to [update extensionAttributes on an Azure AD device object](https://docs.microsoft.com/graph/api/device-update?view=graph-rest-1.0&tabs=http).
+ - Policy 2: All users with the directory role of Global administrator, accessing the Microsoft Azure Management cloud app, excluding a filter for devices using rule expression device.extensionAttribute1 equals SAW and for Access controls, Block. Learn how to [update extensionAttributes on an Azure AD device object](/graph/api/device-update?view=graph-rest-1.0&tabs=http&preserve-view=true).
- **Block access to organization resources from devices running an unsupported Operating System**. For this example, lets say you want to block access to resources from Windows OS version older than Windows 10. For this scenario, organizations would create the following Conditional Access policy:
- All users, accessing all cloud apps, excluding a filter for devices using rule expression device.operatingSystem equals Windows and device.operatingSystemVersion startsWith "10.0" and for Access controls, Block.
- **Do not require multifactor authentication for specific accounts on specific devices**. For this example, lets say you want to not require multifactor authentication when using service accounts on specific devices like Teams phones or Surface Hub devices. For this scenario, organizations would create the following two Conditional Access policies:
@@ -145,6 +145,7 @@ The filter for devices condition in Conditional Access evaluates policy based on
## Next steps
+- [Back to school – Using Boolean algebra correctly in complex filters](https://techcommunity.microsoft.com/t5/intune-customer-success/back-to-school-using-boolean-algebra-correctly-in-complex/ba-p/3422765)
- [Update device Graph API](/graph/api/device-update?tabs=http)
- [Conditional Access: Conditions](concept-conditional-access-conditions.md)
- [Common Conditional Access policies](concept-conditional-access-policy-common.md)
diff --git a/articles/active-directory/conditional-access/concept-conditional-access-session.md b/articles/active-directory/conditional-access/concept-conditional-access-session.md
index 3155a26f175b6..56d068aef84fd 100644
--- a/articles/active-directory/conditional-access/concept-conditional-access-session.md
+++ b/articles/active-directory/conditional-access/concept-conditional-access-session.md
@@ -28,7 +28,7 @@ Organizations can use this control to require Azure AD to pass device informatio
For more information on the use and configuration of app-enforced restrictions, see the following articles:
- [Enabling limited access with SharePoint Online](/sharepoint/control-access-from-unmanaged-devices)
-- [Enabling limited access with Exchange Online](/microsoft-365/security/office-365-security/secure-email-recommended-policies?view=o365-worldwide#limit-access-to-exchange-online-from-outlook-on-the-web)
+- [Enabling limited access with Exchange Online](/microsoft-365/security/office-365-security/secure-email-recommended-policies?view=o365-worldwide#limit-access-to-exchange-online-from-outlook-on-the-web&preserve-view=true)
## Conditional Access application control
diff --git a/articles/active-directory/conditional-access/concept-conditional-access-users-groups.md b/articles/active-directory/conditional-access/concept-conditional-access-users-groups.md
index 03e5a2e35ecf1..4cb779d52a844 100644
--- a/articles/active-directory/conditional-access/concept-conditional-access-users-groups.md
+++ b/articles/active-directory/conditional-access/concept-conditional-access-users-groups.md
@@ -6,7 +6,7 @@ services: active-directory
ms.service: active-directory
ms.subservice: conditional-access
ms.topic: conceptual
-ms.date: 03/17/2021
+ms.date: 06/01/2022
ms.author: joflore
author: MicrosoftGuyJFlo
@@ -35,7 +35,7 @@ The following options are available to include when creating a Conditional Acces
- All guest and external users
- This selection includes any B2B guests and external users including any user with the `user type` attribute set to `guest`. This selection also applies to any external user signed-in from a different organization like a Cloud Solution Provider (CSP).
- Directory roles
- - Allows administrators to select specific built-in Azure AD directory roles used to determine policy assignment. For example, organizations may create a more restrictive policy on users assigned the global administrator role. Other role types are not supported, including administrative unit-scoped roles and custom roles.
+ - Allows administrators to select specific built-in Azure AD directory roles used to determine policy assignment. For example, organizations may create a more restrictive policy on users assigned the global administrator role. Other role types aren't supported, including administrative unit-scoped roles and custom roles.
- Users and groups
- Allows targeting of specific sets of users. For example, organizations can select a group that contains all members of the HR department when an HR app is selected as the cloud app. A group can be any type of user group in Azure AD, including dynamic or assigned security and distribution groups. Policy will be applied to nested users and groups.
@@ -50,7 +50,7 @@ The following options are available to include when creating a Conditional Acces
## Exclude users
-When organizations both include and exclude a user or group the user or group is excluded from the policy, as an exclude action overrides an include in policy. Exclusions are commonly used for emergency access or break-glass accounts. More information about emergency access accounts and why they are important can be found in the following articles:
+When organizations both include and exclude a user or group the user or group is excluded from the policy, as an exclude action overrides an include in policy. Exclusions are commonly used for emergency access or break-glass accounts. More information about emergency access accounts and why they're important can be found in the following articles:
* [Manage emergency access accounts in Azure AD](../roles/security-emergency-access.md)
* [Create a resilient access control management strategy with Azure Active Directory](../authentication/concept-resilient-controls.md)
@@ -66,7 +66,7 @@ The following options are available to exclude when creating a Conditional Acces
### Preventing administrator lockout
-To prevent an administrator from locking themselves out of their directory when creating a policy applied to **All users** and **All apps**, they will see the following warning.
+To prevent an administrator from locking themselves out of their directory when creating a policy applied to **All users** and **All apps**, they'll see the following warning.
> Don't lock yourself out! We recommend applying a policy to a small set of users first to verify it behaves as expected. We also recommend excluding at least one administrator from this policy. This ensures that you still have access and can update a policy if a change is required. Please review the affected users and apps.
@@ -74,7 +74,11 @@ By default the policy will provide an option to exclude the current user from th
![Warning, don't lock yourself out!](./media/concept-conditional-access-users-groups/conditional-access-users-and-groups-lockout-warning.png)
-If you do find yourself locked out, see [What to do if you are locked out of the Azure portal?](troubleshoot-conditional-access.md#what-to-do-if-youre-locked-out-of-the-azure-portal)
+If you do find yourself locked out, see [What to do if you're locked out of the Azure portal?](troubleshoot-conditional-access.md#what-to-do-if-youre-locked-out-of-the-azure-portal)
+
+### External partner access
+
+Conditional Access policies that target external users may interfere with service provider access, for example granular delegated admin privileges [Introduction to granular delegated admin privileges (GDAP)](/partner-center/gdap-introduction).
## Next steps
diff --git a/articles/active-directory/conditional-access/howto-conditional-access-session-lifetime.md b/articles/active-directory/conditional-access/howto-conditional-access-session-lifetime.md
index a872bc0a6cbab..a535d5653edee 100644
--- a/articles/active-directory/conditional-access/howto-conditional-access-session-lifetime.md
+++ b/articles/active-directory/conditional-access/howto-conditional-access-session-lifetime.md
@@ -36,7 +36,7 @@ The Azure Active Directory (Azure AD) default configuration for user sign-in fre
It might sound alarming to not ask for a user to sign back in, in reality any violation of IT policies will revoke the session. Some examples include (but aren't limited to) a password change, an incompliant device, or account disable. You can also explicitly [revoke users’ sessions using PowerShell](/powershell/module/azuread/revoke-azureaduserallrefreshtoken). The Azure AD default configuration comes down to “don’t ask users to provide their credentials if security posture of their sessions hasn't changed”.
-The sign-in frequency setting works with apps that have implemented OAUTH2 or OIDC protocols according to the standards. Most Microsoft native apps for Windows, Mac, and Mobile including the following web applications comply with the setting.
+The sign-in frequency setting works with apps that have implemented OAuth2 or OIDC protocols according to the standards. Most Microsoft native apps for Windows, Mac, and Mobile including the following web applications comply with the setting.
- Word, Excel, PowerPoint Online
- OneNote Online
@@ -48,7 +48,7 @@ The sign-in frequency setting works with apps that have implemented OAUTH2 or OI
- Dynamics CRM Online
- Azure portal
-The sign-in frequency setting works with SAML applications as well, as long as they don't drop their own cookies and are redirected back to Azure AD for authentication on regular basis.
+The sign-in frequency setting works with 3rd party SAML applications and apps that have implemented OAuth2 or OIDC protocols, as long as they don't drop their own cookies and are redirected back to Azure AD for authentication on regular basis.
### User sign-in frequency and multi-factor authentication
diff --git a/articles/active-directory/conditional-access/media/terms-of-use/edit-terms-use.png b/articles/active-directory/conditional-access/media/terms-of-use/edit-terms-use.png
index b13be2e3756a6..fbd9621d23126 100644
Binary files a/articles/active-directory/conditional-access/media/terms-of-use/edit-terms-use.png and b/articles/active-directory/conditional-access/media/terms-of-use/edit-terms-use.png differ
diff --git a/articles/active-directory/conditional-access/media/terms-of-use/expire-consents.png b/articles/active-directory/conditional-access/media/terms-of-use/expire-consents.png
index 36583155aaddd..552c8d9b4b1b4 100644
Binary files a/articles/active-directory/conditional-access/media/terms-of-use/expire-consents.png and b/articles/active-directory/conditional-access/media/terms-of-use/expire-consents.png differ
diff --git a/articles/active-directory/conditional-access/media/terms-of-use/new-tou.png b/articles/active-directory/conditional-access/media/terms-of-use/new-tou.png
index ec421d9c144cd..98593e1d6770c 100644
Binary files a/articles/active-directory/conditional-access/media/terms-of-use/new-tou.png and b/articles/active-directory/conditional-access/media/terms-of-use/new-tou.png differ
diff --git a/articles/active-directory/conditional-access/media/terms-of-use/view-tou.png b/articles/active-directory/conditional-access/media/terms-of-use/view-tou.png
index 14ee7c1299b44..c2fad540454ec 100644
Binary files a/articles/active-directory/conditional-access/media/terms-of-use/view-tou.png and b/articles/active-directory/conditional-access/media/terms-of-use/view-tou.png differ
diff --git a/articles/active-directory/conditional-access/terms-of-use.md b/articles/active-directory/conditional-access/terms-of-use.md
index ab332166fa5bb..269b2ac08e682 100644
--- a/articles/active-directory/conditional-access/terms-of-use.md
+++ b/articles/active-directory/conditional-access/terms-of-use.md
@@ -1,17 +1,17 @@
---
-title: Terms of use - Azure Active Directory | Microsoft Docs
+title: Terms of use in Azure Active Directory
description: Get started using Azure Active Directory terms of use to present information to employees or guests before getting access.
services: active-directory
ms.service: active-directory
ms.subservice: compliance
ms.topic: how-to
-ms.date: 01/12/2022
+ms.date: 05/26/2022
ms.author: joflore
author: MicrosoftGuyJFlo
manager: karenhoran
-ms.reviewer: jocastel
+ms.reviewer: siz
ms.collection: M365-identity-device-management
---
@@ -53,7 +53,7 @@ Azure AD terms of use policies have the following capabilities:
To use and configure Azure AD terms of use policies, you must have:
-- Azure AD Premium P1, P2, EMS E3, or EMS E5 subscription.
+- Azure AD Premium P1, P2, EMS E3, or EMS E5 licenses.
- If you don't have one of these subscriptions, you can [get Azure AD Premium](../fundamentals/active-directory-get-started-premium.md) or [enable Azure AD Premium trial](https://azure.microsoft.com/trial/get-started-active-directory/).
- One of the following administrator accounts for the directory you want to configure:
- Global Administrator
@@ -68,19 +68,16 @@ Azure AD terms of use policies use the PDF format to present content. The PDF fi
Once you've completed your terms of use policy document, use the following procedure to add it.
-1. Sign in to Azure as a Global Administrator, Security Administrator, or Conditional Access Administrator.
-1. Navigate to **Terms of use** at [https://aka.ms/catou](https://aka.ms/catou).
-
- ![Conditional Access - Terms of use blade](./media/terms-of-use/tou-blade.png)
-
-1. Click **New terms**.
-
+1. Sign in to the **Azure portal** as a global administrator, security administrator, or Conditional Access administrator.
+1. Browse to **Azure Active Directory** > **Security** > **Conditional Access** > **Terms of use**.
+1. Select, **New terms**.
+
![New term of use pane to specify your terms of use settings](./media/terms-of-use/new-tou.png)
1. In the **Name** box, enter a name for the terms of use policy that will be used in the Azure portal.
-1. In the **Display name** box, enter a title that users see when they sign in.
1. For **Terms of use document**, browse to your finalized terms of use policy PDF and select it.
1. Select the language for your terms of use policy document. The language option allows you to upload multiple terms of use policies, each with a different language. The version of the terms of use policy that an end user will see will be based on their browser preferences.
+1. In the **Display name** box, enter a title that users see when they sign in.
1. To require end users to view the terms of use policy before accepting them, set **Require users to expand the terms of use** to **On**.
1. To require end users to accept your terms of use policy on every device they're accessing from, set **Require users to consent on every device** to **On**. Users may be required to install other applications if this option is enabled. For more information, see [Per-device terms of use](#per-device-terms-of-use).
1. If you want to expire terms of use policy consents on a schedule, set **Expire consents** to **On**. When set to On, two more schedule settings are displayed.
@@ -108,25 +105,21 @@ Once you've completed your terms of use policy document, use the following proce
| Alice | Jan 1 | Jan 31 | Mar 2 | Apr 1 |
| Bob | Jan 15 | Feb 14 | Mar 16 | Apr 15 |
- It is possible to use the **Expire consents** and **Duration before re-acceptance required (days)** settings together, but typically you use one or the other.
+ It's possible to use the **Expire consents** and **Duration before re-acceptance required (days)** settings together, but typically you use one or the other.
1. Under **Conditional Access**, use the **Enforce with Conditional Access policy template** list to select the template to enforce the terms of use policy.
- ![Conditional Access drop-down list to select a policy template](./media/terms-of-use/conditional-access-templates.png)
-
| Template | Description |
| --- | --- |
- | **Access to cloud apps for all guests** | A Conditional Access policy will be created for all guests and all cloud apps. This policy impacts the Azure portal. Once this is created, you might be required to sign out and sign in. |
- | **Access to cloud apps for all users** | A Conditional Access policy will be created for all users and all cloud apps. This policy impacts the Azure portal. Once this is created, you'll be required to sign out and sign in. |
| **Custom policy** | Select the users, groups, and apps that this terms of use policy will be applied to. |
| **Create Conditional Access policy later** | This terms of use policy will appear in the grant control list when creating a Conditional Access policy. |
- >[!IMPORTANT]
- >Conditional Access policy controls (including terms of use policies) do not support enforcement on service accounts. We recommend excluding all service accounts from the Conditional Access policy.
+ > [!IMPORTANT]
+ > Conditional Access policy controls (including terms of use policies) do not support enforcement on service accounts. We recommend excluding all service accounts from the Conditional Access policy.
Custom Conditional Access policies enable granular terms of use policies, down to a specific cloud application or group of users. For more information, see [Quickstart: Require terms of use to be accepted before accessing cloud apps](require-tou.md).
-1. Click **Create**.
+1. Select **Create**.
If you selected a custom Conditional Access template, then a new screen appears that allows you to create the custom Conditional Access policy.
@@ -134,8 +127,6 @@ Once you've completed your terms of use policy document, use the following proce
You should now see your new terms of use policies.
- ![New terms of use listed in the terms of use blade](./media/terms-of-use/create-tou.png)
-
## View report of who has accepted and declined
The Terms of use blade shows a count of the users who have accepted and declined. These counts and who accepted/declined are stored for the life of the terms of use policy.
@@ -144,11 +135,11 @@ The Terms of use blade shows a count of the users who have accepted and declined
![Terms of use blade listing the number of user show have accepted and declined](./media/terms-of-use/view-tou.png)
-1. For a terms of use policy, click the numbers under **Accepted** or **Declined** to view the current state for users.
+1. For a terms of use policy, select the numbers under **Accepted** or **Declined** to view the current state for users.
![Terms of use consents pane listing the users that have accepted](./media/terms-of-use/accepted-tou.png)
-1. To view the history for an individual user, click the ellipsis (**...**) and then **View History**.
+1. To view the history for an individual user, select the ellipsis (**...**) and then **View History**.
![View History context menu for a user](./media/terms-of-use/view-history-menu.png)
@@ -162,19 +153,17 @@ If you want to view more activity, Azure AD terms of use policies include audit
To get started with Azure AD audit logs, use the following procedure:
-1. Sign in to Azure and navigate to **Terms of use** at [https://aka.ms/catou](https://aka.ms/catou).
+1. Sign in to the **Azure portal** as a global administrator, security administrator, or Conditional Access administrator.
+1. Browse to **Azure Active Directory** > **Security** > **Conditional Access** > **Terms of use**.
1. Select a terms of use policy.
-1. Click **View audit logs**.
-
- ![Terms of use blade with the View audit logs option highlighted](./media/terms-of-use/audit-tou.png)
-
+1. Select **View audit logs**.
1. On the Azure AD audit logs screen, you can filter the information using the provided lists to target specific audit log information.
- You can also click **Download** to download the information in a .csv file for use locally.
+ You can also select **Download** to download the information in a .csv file for use locally.
![Azure AD audit logs screen listing date, target policy, initiated by, and activity](./media/terms-of-use/audit-logs-tou.png)
- If you click a log, a pane appears with more activity details.
+ If you select a log, a pane appears with more activity details.
![Activity details for a log showing activity, activity status, initiated by, target policy](./media/terms-of-use/audit-log-activity-details.png)
@@ -207,13 +196,14 @@ Users can review and see the terms of use policies that they've accepted by usin
You can edit some details of terms of use policies, but you can't modify an existing document. The following procedure describes how to edit the details.
-1. Sign in to Azure and navigate to **Terms of use** at [https://aka.ms/catou](https://aka.ms/catou).
+1. Sign in to the **Azure portal** as a global administrator, security administrator, or Conditional Access administrator.
+1. Browse to **Azure Active Directory** > **Security** > **Conditional Access** > **Terms of use**.
1. Select the terms of use policy you want to edit.
-1. Click **Edit terms**.
-1. In the Edit terms of use pane, you can change the following:
- - **Name** – this is the internal name of the ToU that isn't shared with end users
- - **Display name** – this is the name that end users can see when viewing the ToU
- - **Require users to expand the terms of use** – Setting this to **On** will force the end user to expand the terms of use policy document before accepting it.
+1. Select **Edit terms**.
+1. In the Edit terms of use pane, you can change the following options:
+ - **Name** – the internal name of the ToU that isn't shared with end users
+ - **Display name** – the name that end users can see when viewing the ToU
+ - **Require users to expand the terms of use** – Setting this option to **On** will force the end user to expand the terms of use policy document before accepting it.
- (Preview) You can **update an existing terms of use** document
- You can add a language to an existing ToU
@@ -221,61 +211,65 @@ You can edit some details of terms of use policies, but you can't modify an exis
![Edit showing different language options ](./media/terms-of-use/edit-terms-use.png)
-1. Once you're done, click **Save** to save your changes.
+1. Once you're done, select **Save** to save your changes.
## Update the version or pdf of an existing terms of use
-1. Sign in to Azure and navigate to [Terms of use](https://aka.ms/catou)
-2. Select the terms of use policy you want to edit.
-3. Click **Edit terms**.
-4. For the language that you would like to update a new version, click **Update** under the action column
+1. Sign in to the **Azure portal** as a global administrator, security administrator, or Conditional Access administrator.
+1. Browse to **Azure Active Directory** > **Security** > **Conditional Access** > **Terms of use**.
+1. Select the terms of use policy you want to edit.
+1. Select **Edit terms**.
+1. For the language that you would like to update a new version, select **Update** under the action column
![Edit terms of use pane showing name and expand options](./media/terms-of-use/edit-terms-use.png)
-5. In the pane on the right, upload the pdf for the new version
-6. There's also a toggle option here **Require reaccept** if you want to require your users to accept this new version the next time they sign in. If you require your users to reaccept, next time they try to access the resource defined in your conditional access policy they'll be prompted to accept this new version. If you don’t require your users to reaccept, their previous consent will stay current and only new users who haven't consented before or whose consent expires will see the new version. Until the session expires, **Require reaccept** not require users to accept the new TOU. If you want to ensure reaccept, delete and recreate or create a new TOU for this case.
+1. In the pane on the right, upload the pdf for the new version
+1. There's also a toggle option here **Require reaccept** if you want to require your users to accept this new version the next time they sign in. If you require your users to reaccept, next time they try to access the resource defined in your conditional access policy they'll be prompted to accept this new version. If you don’t require your users to reaccept, their previous consent will stay current and only new users who haven't consented before or whose consent expires will see the new version. Until the session expires, **Require reaccept** not require users to accept the new TOU. If you want to ensure reaccept, delete and recreate or create a new TOU for this case.
![Edit terms of use re-accept option highlighted](./media/terms-of-use/re-accept.png)
-7. Once you've uploaded your new pdf and decided on reaccept, click Add at the bottom of the pane.
-8. You'll now see the most recent version under the Document column.
+1. Once you've uploaded your new pdf and decided on reaccept, select Add at the bottom of the pane.
+1. You'll now see the most recent version under the Document column.
## View previous versions of a ToU
-1. Sign in to Azure and navigate to **Terms of use** at https://aka.ms/catou.
-2. Select the terms of use policy for which you want to view a version history.
-3. Click on **Languages and version history**
-4. Click on **See previous versions.**
+1. Sign in to the **Azure portal** as a global administrator, security administrator, or Conditional Access administrator.
+1. Browse to **Azure Active Directory** > **Security** > **Conditional Access** > **Terms of use**.
+1. Select the terms of use policy for which you want to view a version history.
+1. Select **Languages and version history**
+1. Select **See previous versions.**
![document details including language versions](./media/terms-of-use/document-details.png)
-5. You can click on the name of the document to download that version
+1. You can select the name of the document to download that version
## See who has accepted each version
-1. Sign in to Azure and navigate to **Terms of use** at https://aka.ms/catou.
-2. To see who has currently accepted the ToU, click on the number under the **Accepted** column for the ToU you want.
-3. By default, the next page will show you the current state of each users acceptance to the ToU
-4. If you would like to see the previous consent events, you can select **All** from the **Current State** drop-down. Now you can see each users events in details about each version and what happened.
-5. Alternatively, you can select a specific version from the **Version** drop-down to see who has accepted that specific version.
+1. Sign in to the **Azure portal** as a global administrator, security administrator, or Conditional Access administrator.
+1. Browse to **Azure Active Directory** > **Security** > **Conditional Access** > **Terms of use**.
+1. To see who has currently accepted the ToU, select the number under the **Accepted** column for the ToU you want.
+1. By default, the next page will show you the current state of each user's acceptance to the ToU
+1. If you would like to see the previous consent events, you can select **All** from the **Current State** drop-down. Now you can see each users events in details about each version and what happened.
+1. Alternatively, you can select a specific version from the **Version** drop-down to see who has accepted that specific version.
## Add a ToU language
The following procedure describes how to add a ToU language.
-1. Sign in to Azure and navigate to **Terms of use** at [https://aka.ms/catou](https://aka.ms/catou).
+1. Sign in to the **Azure portal** as a global administrator, security administrator, or Conditional Access administrator.
+1. Browse to **Azure Active Directory** > **Security** > **Conditional Access** > **Terms of use**.
1. Select the terms of use policy you want to edit.
-1. Click **Edit Terms**
-1. Click **Add language** at the bottom of the page.
+1. Select **Edit Terms**
+1. Select **Add language** at the bottom of the page.
1. In the Add terms of use language pane, upload your localized PDF, and select the language.
![Terms of use selected and showing the Languages tab in the details pane](./media/terms-of-use/select-language.png)
-1. Click **Add language**.
-1. Click **Save**
+1. Select **Add language**.
+1. Select **Save**
-1. Click **Add** to add the language.
+1. Select **Add** to add the language.
## Per-device terms of use
@@ -326,10 +320,11 @@ If a user is using browser that isn't supported, they'll be asked to use a diffe
You can delete old terms of use policies using the following procedure.
-1. Sign in to Azure and navigate to **Terms of use** at [https://aka.ms/catou](https://aka.ms/catou).
+1. Sign in to the **Azure portal** as a global administrator, security administrator, or Conditional Access administrator.
+1. Browse to **Azure Active Directory** > **Security** > **Conditional Access** > **Terms of use**.
1. Select the terms of use policy you want to remove.
-1. Click **Delete terms**.
-1. In the message that appears asking if you want to continue, click **Yes**.
+1. Select **Delete terms**.
+1. In the message that appears asking if you want to continue, select **Yes**.
![Message asking for confirmation to delete terms of use](./media/terms-of-use/delete-tou.png)
@@ -386,7 +381,7 @@ You can configure a Conditional Access policy for the Microsoft Intune Enrollmen
A: Terms of use can only be accepted when authenticating interactively.
**Q: How do I see when/if a user has accepted a terms of use?**
-A: On the Terms of use blade, click the number under **Accepted**. You can also view or search the accept activity in the Azure AD audit logs. For more information, see View report of who has accepted and declined and [View Azure AD audit logs](#view-azure-ad-audit-logs).
+A: On the Terms of use blade, select the number under **Accepted**. You can also view or search the accept activity in the Azure AD audit logs. For more information, see View report of who has accepted and declined and [View Azure AD audit logs](#view-azure-ad-audit-logs).
**Q: How long is information stored?**
A: The user counts in the terms of use report and who accepted/declined are stored for the life of the terms of use. The Azure AD audit logs are stored for 30 days.
@@ -395,7 +390,7 @@ A: The user counts in the terms of use report and who accepted/declined are stor
A: The terms of use report is stored for the lifetime of that terms of use policy, while the Azure AD audit logs are stored for 30 days. Also, the terms of use report only displays the users current consent state. For example, if a user declines and then accepts, the terms of use report will only show that user's accept. If you need to see the history, you can use the Azure AD audit logs.
**Q: If hyperlinks are in the terms of use policy PDF document, will end users be able to click them?**
-A: Yes, end users are able to select hyperlinks to other pages but links to sections within the document are not supported. Also, hyperlinks in terms of use policy PDFs do not work when accessed from the Azure AD MyApps/MyAccount portal.
+A: Yes, end users are able to select hyperlinks to other pages but links to sections within the document aren't supported. Also, hyperlinks in terms of use policy PDFs don't work when accessed from the Azure AD MyApps/MyAccount portal.
**Q: Can a terms of use policy support multiple languages?**
A: Yes. Currently there are 108 different languages an administrator can configure for a single terms of use policy. An administrator can upload multiple PDF documents and tag those documents with a corresponding language (up to 108). When end users sign in, we look at their browser language preference and display the matching document. If there's no match, we display the default document, which is the first document that is uploaded.
@@ -419,7 +414,7 @@ A: You can [review previously accepted terms of use policies](#how-users-can-rev
A: If you've configured both Azure AD terms of use and [Intune terms and conditions](/intune/terms-and-conditions-create), the user will be required to accept both. For more information, see the [Choosing the right Terms solution for your organization blog post](https://go.microsoft.com/fwlink/?linkid=2010506&clcid=0x409).
**Q: What endpoints does the terms of use service use for authentication?**
-A: Terms of use utilize the following endpoints for authentication: https://tokenprovider.termsofuse.identitygovernance.azure.com and https://account.activedirectory.windowsazure.com. If your organization has an allowlist of URLs for enrollment, you will need to add these endpoints to your allowlist, along with the Azure AD endpoints for sign-in.
+A: Terms of use utilize the following endpoints for authentication: https://tokenprovider.termsofuse.identitygovernance.azure.com and https://account.activedirectory.windowsazure.com. If your organization has an allowlist of URLs for enrollment, you'll need to add these endpoints to your allowlist, along with the Azure AD endpoints for sign-in.
## Next steps
diff --git a/articles/active-directory/develop/access-tokens.md b/articles/active-directory/develop/access-tokens.md
index d36564a82a228..c92f87a8dcda1 100644
--- a/articles/active-directory/develop/access-tokens.md
+++ b/articles/active-directory/develop/access-tokens.md
@@ -1,6 +1,5 @@
---
-title: Microsoft identity platform access tokens | Azure
-titleSuffix: Microsoft identity platform
+title: Microsoft identity platform access tokens
description: Learn about access tokens emitted by the Azure AD v1.0 and Microsoft identity platform (v2.0) endpoints.
services: active-directory
author: nickludwig
diff --git a/articles/active-directory/develop/accounts-overview.md b/articles/active-directory/develop/accounts-overview.md
index 533ca7863a693..6684dc2629ca0 100644
--- a/articles/active-directory/develop/accounts-overview.md
+++ b/articles/active-directory/develop/accounts-overview.md
@@ -1,5 +1,5 @@
---
-title: Microsoft identity platform accounts & tenant profiles on Android | Azure
+title: Microsoft identity platform accounts & tenant profiles on Android
description: An overview of the Microsoft identity platform accounts for Android
services: active-directory
author: shoatman
diff --git a/articles/active-directory/develop/active-directory-certificate-credentials.md b/articles/active-directory/develop/active-directory-certificate-credentials.md
index 872ccbf3b38a8..b2550ba59efb7 100644
--- a/articles/active-directory/develop/active-directory-certificate-credentials.md
+++ b/articles/active-directory/develop/active-directory-certificate-credentials.md
@@ -1,6 +1,5 @@
---
title: Microsoft identity platform certificate credentials
-titleSuffix: Microsoft identity platform
description: This article discusses the registration and use of certificate credentials for application authentication.
services: active-directory
author: nickludwig
diff --git a/articles/active-directory/develop/active-directory-claims-mapping.md b/articles/active-directory/develop/active-directory-claims-mapping.md
index e4f949582a208..9a0f58e3c8e36 100644
--- a/articles/active-directory/develop/active-directory-claims-mapping.md
+++ b/articles/active-directory/develop/active-directory-claims-mapping.md
@@ -1,6 +1,5 @@
---
title: Customize Azure AD tenant app claims (PowerShell)
-titleSuffix: Microsoft identity platform
description: Learn how to customize claims emitted in tokens for an application in a specific Azure Active Directory tenant.
author: rwike77
manager: CelesteDG
diff --git a/articles/active-directory/develop/active-directory-configurable-token-lifetimes.md b/articles/active-directory/develop/active-directory-configurable-token-lifetimes.md
index 4a8182e4776fa..b055b6adfe788 100644
--- a/articles/active-directory/develop/active-directory-configurable-token-lifetimes.md
+++ b/articles/active-directory/develop/active-directory-configurable-token-lifetimes.md
@@ -1,6 +1,5 @@
---
title: Configurable token lifetimes
-titleSuffix: Microsoft identity platform
description: Learn how to set lifetimes for access, SAML, and ID tokens issued by the Microsoft identity platform.
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/active-directory-enterprise-app-role-management.md b/articles/active-directory/develop/active-directory-enterprise-app-role-management.md
index 14cc5a1bb549c..aef90ee006814 100644
--- a/articles/active-directory/develop/active-directory-enterprise-app-role-management.md
+++ b/articles/active-directory/develop/active-directory-enterprise-app-role-management.md
@@ -1,6 +1,5 @@
---
-title: Configure role claim for enterprise Azure AD apps | Azure
-titleSuffix: Microsoft identity platform
+title: Configure role claim for enterprise Azure AD apps
description: Learn how to configure the role claim issued in the SAML token for enterprise applications in Azure Active Directory
services: active-directory
author: jeevansd
diff --git a/articles/active-directory/develop/active-directory-how-applications-are-added.md b/articles/active-directory/develop/active-directory-how-applications-are-added.md
index 39a7e8af3a187..33754695716bb 100644
--- a/articles/active-directory/develop/active-directory-how-applications-are-added.md
+++ b/articles/active-directory/develop/active-directory-how-applications-are-added.md
@@ -1,6 +1,5 @@
---
title: How and why apps are added to Azure AD
-titleSuffix: Microsoft identity platform
description: What does it mean for an application to be added to Azure AD and how do they get there?
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/active-directory-how-to-integrate.md b/articles/active-directory/develop/active-directory-how-to-integrate.md
index 735f63df4613f..db2d961b2f6b7 100644
--- a/articles/active-directory/develop/active-directory-how-to-integrate.md
+++ b/articles/active-directory/develop/active-directory-how-to-integrate.md
@@ -1,6 +1,5 @@
---
-title: How to integrate with the Microsoft identity platform | Azure
-titleSuffix: Microsoft identity platform
+title: How to integrate with the Microsoft identity platform
description: Learn the benefits of integrating your application with the Microsoft identity platform, and get resources for features like simplified sign-in, identity management, multi-factor authentication, and access control.
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/active-directory-optional-claims.md b/articles/active-directory/develop/active-directory-optional-claims.md
index b3973b1015201..abec4223bb4c7 100644
--- a/articles/active-directory/develop/active-directory-optional-claims.md
+++ b/articles/active-directory/develop/active-directory-optional-claims.md
@@ -1,6 +1,5 @@
---
title: Provide optional claims to Azure AD apps
-titleSuffix: Microsoft identity platform
description: How to add custom or additional claims to the SAML 2.0 and JSON Web Tokens (JWT) tokens issued by Microsoft identity platform.
author: rwike77
manager: CelesteDG
diff --git a/articles/active-directory/develop/active-directory-saml-claims-customization.md b/articles/active-directory/develop/active-directory-saml-claims-customization.md
index 28dd964714b93..a57f858d8e27c 100644
--- a/articles/active-directory/develop/active-directory-saml-claims-customization.md
+++ b/articles/active-directory/develop/active-directory-saml-claims-customization.md
@@ -1,6 +1,5 @@
---
title: Customize app SAML token claims
-titleSuffix: Microsoft identity platform
description: Learn how to customize the claims issued by Microsoft identity platform in the SAML token for enterprise applications.
services: active-directory
author: kenwith
diff --git a/articles/active-directory/develop/active-directory-schema-extensions.md b/articles/active-directory/develop/active-directory-schema-extensions.md
index 5588aeb3cd293..542a1691e0207 100644
--- a/articles/active-directory/develop/active-directory-schema-extensions.md
+++ b/articles/active-directory/develop/active-directory-schema-extensions.md
@@ -1,6 +1,5 @@
---
title: Use Azure AD schema extension attributes in claims
-titleSuffix: Microsoft identity platform
description: Describes how to use directory schema extension attributes for sending user data to applications in token claims.
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/active-directory-v2-protocols.md b/articles/active-directory/develop/active-directory-v2-protocols.md
index 5aa299a0a156d..ffb3cfec10a11 100644
--- a/articles/active-directory/develop/active-directory-v2-protocols.md
+++ b/articles/active-directory/develop/active-directory-v2-protocols.md
@@ -1,6 +1,5 @@
---
-title: OAuth 2.0 and OpenID Connect protocols on the Microsoft identity platform | Azure
-titleSuffix: Microsoft identity platform
+title: OAuth 2.0 and OpenID Connect protocols on the Microsoft identity platform
description: A guide to OAuth 2.0 and OpenID Connect protocols as supported by the Microsoft identity platform.
services: active-directory
author: nickludwig
@@ -77,6 +76,11 @@ https://login.microsoftonline.com//oauth2/v2.0/token
# NOTE: These are examples. Endpoint URI format may vary based on application type,
# sign-in audience, and Azure cloud instance (global or national cloud).
+
+# The {issuer} value in the path of the request can be used to control who can sign into the application.
+# The allowed values are **common** for both Microsoft accounts and work or school accounts,
+# **organizations** for work or school accounts only, **consumers** for Microsoft accounts only,
+# and **tenant identifiers** such as the tenant ID or domain name.
```
To find the endpoints for an application you've registered, in the [Azure portal](https://portal.azure.com) navigate to:
diff --git a/articles/active-directory/develop/api-find-an-api-how-to.md b/articles/active-directory/develop/api-find-an-api-how-to.md
index 05ee90c4a6d9c..eaff1c458dc85 100644
--- a/articles/active-directory/develop/api-find-an-api-how-to.md
+++ b/articles/active-directory/develop/api-find-an-api-how-to.md
@@ -1,5 +1,5 @@
---
-title: Find an API for a custom-developed app | Azure
+title: Find an API for a custom-developed app
description: How to configure the permissions you need to access a particular API in your custom developed Azure AD application
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/app-objects-and-service-principals.md b/articles/active-directory/develop/app-objects-and-service-principals.md
index a3f1bb392c0da..68f9f49a38ac3 100644
--- a/articles/active-directory/develop/app-objects-and-service-principals.md
+++ b/articles/active-directory/develop/app-objects-and-service-principals.md
@@ -1,6 +1,5 @@
---
title: Apps & service principals in Azure AD
-titleSuffix: Microsoft identity platform
description: Learn about the relationship between application and service principal objects in Azure Active Directory.
author: rwike77
manager: CelesteDG
diff --git a/articles/active-directory/develop/app-resilience-continuous-access-evaluation.md b/articles/active-directory/develop/app-resilience-continuous-access-evaluation.md
index 049448bd85b47..c01ff48b4a732 100644
--- a/articles/active-directory/develop/app-resilience-continuous-access-evaluation.md
+++ b/articles/active-directory/develop/app-resilience-continuous-access-evaluation.md
@@ -1,6 +1,5 @@
---
-title: "How to use Continuous Access Evaluation enabled APIs in your applications | Azure"
-titleSuffix: Microsoft identity platform
+title: "How to use Continuous Access Evaluation enabled APIs in your applications"
description: How to increase app security and resilience by adding support for Continuous Access Evaluation, enabling long-lived access tokens that can be revoked based on critical events and policy evaluation.
services: active-directory
author: knicholasa
diff --git a/articles/active-directory/develop/app-sign-in-flow.md b/articles/active-directory/develop/app-sign-in-flow.md
index fc91bcdafd0dd..ddcd2d6f750b8 100644
--- a/articles/active-directory/develop/app-sign-in-flow.md
+++ b/articles/active-directory/develop/app-sign-in-flow.md
@@ -1,6 +1,5 @@
---
-title: App sign-in flow with the Microsoft identity platform | Azure
-titleSuffix: Microsoft identity platform
+title: App sign-in flow with the Microsoft identity platform
description: Learn about the sign-in flow of web, desktop, and mobile apps in Microsoft identity platform.
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/apple-sso-plugin.md b/articles/active-directory/develop/apple-sso-plugin.md
index 8309f4e94d95b..e6509d8e94534 100644
--- a/articles/active-directory/develop/apple-sso-plugin.md
+++ b/articles/active-directory/develop/apple-sso-plugin.md
@@ -1,6 +1,5 @@
---
title: Microsoft Enterprise SSO plug-in for Apple devices
-titleSuffix: Microsoft identity platform | Azure
description: Learn about the Azure Active Directory SSO plug-in for iOS, iPadOS, and macOS devices.
services: active-directory
author: brandwe
diff --git a/articles/active-directory/develop/application-consent-experience.md b/articles/active-directory/develop/application-consent-experience.md
index 0268acf7225c0..2c68bb9b30d15 100644
--- a/articles/active-directory/develop/application-consent-experience.md
+++ b/articles/active-directory/develop/application-consent-experience.md
@@ -1,6 +1,5 @@
---
title: Azure AD app consent experiences
-titleSuffix: Microsoft identity platform
description: Learn more about the Azure AD consent experiences to see how you can use it when managing and developing applications on Azure AD
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/application-model.md b/articles/active-directory/develop/application-model.md
index 17c8215a16d65..08dc1e80a239e 100644
--- a/articles/active-directory/develop/application-model.md
+++ b/articles/active-directory/develop/application-model.md
@@ -1,6 +1,5 @@
---
-title: Application model | Azure
-titleSuffix: Microsoft identity platform
+title: Application model
description: Learn about the process of registering your application so it can integrate with the Microsoft identity platform.
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/authentication-flows-app-scenarios.md b/articles/active-directory/develop/authentication-flows-app-scenarios.md
index fb47e39443155..ab9cc8a850ef1 100644
--- a/articles/active-directory/develop/authentication-flows-app-scenarios.md
+++ b/articles/active-directory/develop/authentication-flows-app-scenarios.md
@@ -1,5 +1,5 @@
---
-title: Microsoft identity platform authentication flows & app scenarios | Azure
+title: Microsoft identity platform authentication flows & app scenarios
description: Learn about application scenarios for the Microsoft identity platform, including authenticating identities, acquiring tokens, and calling protected APIs.
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/authentication-national-cloud.md b/articles/active-directory/develop/authentication-national-cloud.md
index 94b6adff03deb..cefba606c4e90 100644
--- a/articles/active-directory/develop/authentication-national-cloud.md
+++ b/articles/active-directory/develop/authentication-national-cloud.md
@@ -1,6 +1,5 @@
---
-title: Azure AD authentication & national clouds | Azure
-titleSuffix: Microsoft identity platform
+title: Azure AD authentication & national clouds
description: Learn about app registration and authentication endpoints for national clouds.
services: active-directory
author: negoe
diff --git a/articles/active-directory/develop/authentication-vs-authorization.md b/articles/active-directory/develop/authentication-vs-authorization.md
index 8431c8750d2d8..a311d4a712e69 100644
--- a/articles/active-directory/develop/authentication-vs-authorization.md
+++ b/articles/active-directory/develop/authentication-vs-authorization.md
@@ -1,6 +1,5 @@
---
-title: Authentication vs. authorization | Azure
-titleSuffix: Microsoft identity platform
+title: Authentication vs. authorization
description: Learn about the basics of authentication and authorization in the Microsoft identity platform.
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/authorization-basics.md b/articles/active-directory/develop/authorization-basics.md
index 66a8a93e393d7..b612f1feda9ee 100644
--- a/articles/active-directory/develop/authorization-basics.md
+++ b/articles/active-directory/develop/authorization-basics.md
@@ -1,6 +1,5 @@
---
-title: Authorization basics | Azure
-titleSuffix: Microsoft identity platform
+title: Authorization basics
description: Learn about the basics of authorization in the Microsoft identity platform.
services: active-directory
author: Chrispine-Chiedo
diff --git a/articles/active-directory/develop/claims-challenge.md b/articles/active-directory/develop/claims-challenge.md
index 09b3af59c3ffc..c394ee40ec336 100644
--- a/articles/active-directory/develop/claims-challenge.md
+++ b/articles/active-directory/develop/claims-challenge.md
@@ -1,6 +1,5 @@
---
title: Claims challenges, claims requests, and client capabilities
-titleSuffix: Microsoft identity platform
description: Explanation of claims challenges, claims requests, and client capabilities in the Microsoft identity platform.
services: active-directory
author: knicholasa
diff --git a/articles/active-directory/develop/config-authority.md b/articles/active-directory/develop/config-authority.md
index 302bcfb04c19f..9822abe65a8c7 100644
--- a/articles/active-directory/develop/config-authority.md
+++ b/articles/active-directory/develop/config-authority.md
@@ -1,6 +1,5 @@
---
-title: Configure identity providers (MSAL iOS/macOS) | Azure
-titleSuffix: Microsoft identity platform
+title: Configure identity providers (MSAL iOS/macOS)
description: Learn how to use different authorities such as B2C, sovereign clouds, and guest users, with MSAL for iOS and macOS.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/configure-token-lifetimes.md b/articles/active-directory/develop/configure-token-lifetimes.md
index 61de98fa80158..d2d603b4fa83c 100644
--- a/articles/active-directory/develop/configure-token-lifetimes.md
+++ b/articles/active-directory/develop/configure-token-lifetimes.md
@@ -1,6 +1,5 @@
---
title: Set lifetimes for tokens
-titleSuffix: Microsoft identity platform
description: Learn how to set lifetimes for tokens issued by Microsoft identity platform. Learn how to learn how to manage an organization's default policy, create a policy for web sign-in, create a policy for a native app that calls a web API, and manage an advanced policy.
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/consent-framework.md b/articles/active-directory/develop/consent-framework.md
index 851871158c33e..453cc2828c063 100644
--- a/articles/active-directory/develop/consent-framework.md
+++ b/articles/active-directory/develop/consent-framework.md
@@ -1,6 +1,5 @@
---
title: Microsoft identity platform consent framework
-titleSuffix: Microsoft identity platform
description: Learn about the consent framework in the Microsoft identity platform and how it applies to multi-tenant applications.
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/console-app-quickstart.md b/articles/active-directory/develop/console-app-quickstart.md
index 2db83178487b4..86a4ee1d2b891 100644
--- a/articles/active-directory/develop/console-app-quickstart.md
+++ b/articles/active-directory/develop/console-app-quickstart.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Call Microsoft Graph from a console application | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Call Microsoft Graph from a console application"
description: In this quickstart, you learn how a console application can get an access token and call an API protected by Microsoft identity platform, using the app's own identity
services: active-directory
author: Dickson-Mwendia
diff --git a/articles/active-directory/develop/customize-webviews.md b/articles/active-directory/develop/customize-webviews.md
index 639ef44e82272..6c07fdb9b7cef 100644
--- a/articles/active-directory/develop/customize-webviews.md
+++ b/articles/active-directory/develop/customize-webviews.md
@@ -1,6 +1,5 @@
---
-title: Customize browsers & WebViews (MSAL iOS/macOS) | Azure
-titleSuffix: Microsoft identity platform
+title: Customize browsers & WebViews (MSAL iOS/macOS)
description: Learn how to customize the MSAL iOS/macOS browser experience to sign in users.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/delegated-and-app-perms.md b/articles/active-directory/develop/delegated-and-app-perms.md
index 43ea104fb0b51..585e0ccb06928 100644
--- a/articles/active-directory/develop/delegated-and-app-perms.md
+++ b/articles/active-directory/develop/delegated-and-app-perms.md
@@ -1,5 +1,5 @@
---
-title: Differences between delegated and app permissions | Azure
+title: Differences between delegated and app permissions
description: Learn about delegated and application permissions, how they are used by clients and exposed by resources for applications you are developing with Azure AD
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/desktop-app-quickstart.md b/articles/active-directory/develop/desktop-app-quickstart.md
index 45141923fff46..7ea69c6329b5b 100644
--- a/articles/active-directory/develop/desktop-app-quickstart.md
+++ b/articles/active-directory/develop/desktop-app-quickstart.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Sign in users and call Microsoft Graph in a desktop app | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Sign in users and call Microsoft Graph in a desktop app"
description: In this quickstart, learn how a desktop application can get an access token and call an API protected by the Microsoft identity platform.
services: active-directory
author: Dickson-Mwendia
diff --git a/articles/active-directory/develop/developer-glossary.md b/articles/active-directory/develop/developer-glossary.md
index ac417d44e0c9a..8a670becc1217 100644
--- a/articles/active-directory/develop/developer-glossary.md
+++ b/articles/active-directory/develop/developer-glossary.md
@@ -1,44 +1,42 @@
---
-title: Microsoft identity platform developer glossary | Azure
-description: A list of terms for commonly used Microsoft identity platform developer concepts and features.
+title: Glossary of terms in the Microsoft identity platform
+description: Definitions of terms commonly found in Microsoft identity platform documentation, Azure portal, and authentication SDKs like the Microsoft Authentication Library (MSAL).
services: active-directory
author: rwike77
manager: CelesteDG
ms.service: active-directory
ms.subservice: develop
-ms.topic: conceptual
-ms.workload: identity
-ms.date: 12/14/2021
+ms.topic: reference
+ms.date: 05/28/2022
ms.author: ryanwi
-ms.custom: aaddev
-ms.reviewer: jmprieur, saeeda, jesakowi, nacanuma
+ms.reviewer: mmacy
---
-# Microsoft identity platform developer glossary
+# Glossary: Microsoft identity platform
-This article contains definitions for some of the core developer concepts and terminology, which are helpful when learning about application development using Microsoft identity platform.
+You'll see these terms when you use our documentation, the Azure portal, our authentication libraries, and the Microsoft Graph API. Some terms are Microsoft-specific while others are related to protocols like OAuth or other technologies you use with the Microsoft identity platform.
## Access token
-A type of [security token](#security-token) issued by an [authorization server](#authorization-server), and used by a [client application](#client-application) in order to access a [protected resource server](#resource-server). Typically in the form of a [JSON Web Token (JWT)][JWT], the token embodies the authorization granted to the client by the [resource owner](#resource-owner), for a requested level of access. The token contains all applicable [claims](#claim) about the subject, enabling the client application to use it as a form of credential when accessing a given resource. This also eliminates the need for the resource owner to expose credentials to the client.
+A type of [security token](#security-token) issued by an [authorization server](#authorization-server) and used by a [client application](#client-application) to access a [protected resource server](#resource-server). Typically in the form of a [JSON Web Token (JWT)][JWT], the token embodies the authorization granted to the client by the [resource owner](#resource-owner), for a requested level of access. The token contains all applicable [claims](#claim) about the subject, enabling the client application to use it as a form of credential when accessing a given resource. This also eliminates the need for the resource owner to expose credentials to the client.
-Access tokens are only valid for a short period of time and cannot be revoked. An authorization server may also issue a [refresh token](#refresh-token) when the access token is issued. Refresh tokens are typically provided only to confidential client applications.
+Access tokens are only valid for a short period of time and can't be revoked. An authorization server may also issue a [refresh token](#refresh-token) when the access token is issued. Refresh tokens are typically provided only to confidential client applications.
Access tokens are sometimes referred to as "User+App" or "App-Only", depending on the credentials being represented. For example, when a client application uses the:
-* ["Authorization code" authorization grant](#authorization-grant), the end user authenticates first as the resource owner, delegating authorization to the client to access the resource. The client authenticates afterward when obtaining the access token. The token can sometimes be referred to more specifically as a "User+App" token, as it represents both the user that authorized the client application, and the application.
-* ["Client credentials" authorization grant](#authorization-grant), the client provides the sole authentication, functioning without the resource-owner's authentication/authorization, so the token can sometimes be referred to as an "App-Only" token.
+- ["Authorization code" authorization grant](#authorization-grant), the end user authenticates first as the resource owner, delegating authorization to the client to access the resource. The client authenticates afterward when obtaining the access token. The token can sometimes be referred to more specifically as a "User+App" token, as it represents both the user that authorized the client application, and the application.
+- ["Client credentials" authorization grant](#authorization-grant), the client provides the sole authentication, functioning without the resource-owner's authentication/authorization, so the token can sometimes be referred to as an "App-Only" token.
See the [access tokens reference][AAD-Tokens-Claims] for more details.
## Actor
-Another term for the [client application](#client-application) - this is the party acting on behalf of the subject, or [resource owner](#resource-owner).
+Another term for the [client application](#client-application). The actor is the party acting on behalf of a subject ([resource owner](#resource-owner)).
-## Application ID (client ID)
+## Application (client) ID
-The unique identifier Azure AD issues to an application registration that identifies a specific application and the associated configurations. This application ID ([client ID](https://tools.ietf.org/html/rfc6749#page-15)) is used when performing authentication requests and is provided to the authentication libraries in development time. The application ID (client ID) is not a secret.
+The application ID, or _[client ID](https://datatracker.ietf.org/doc/html/rfc6749#section-2.2)_, is a value the Microsoft identity platform assigns to your application when you register it in Azure AD. The application ID is a GUID value that uniquely identifies the application and its configuration within the identity platform. You add the app ID to your application's code, and authentication libraries include the value in their requests to the identity platform at application runtime. The application (client) ID isn't a secret - don't use it as a password or other credential.
## Application manifest
@@ -46,62 +44,62 @@ A feature provided by the [Azure portal][AZURE-portal], which produces a JSON re
## Application object
-When you register/update an application in the [Azure portal][AZURE-portal], the portal creates/updates both an application object and a corresponding [service principal object](#service-principal-object) for that tenant. The application object *defines* the application's identity configuration globally (across all tenants where it has access), providing a template from which its corresponding service principal object(s) are *derived* for use locally at run-time (in a specific tenant).
+When you register/update an application in the [Azure portal][AZURE-portal], the portal creates/updates both an application object and a corresponding [service principal object](#service-principal-object) for that tenant. The application object _defines_ the application's identity configuration globally (across all tenants where it has access), providing a template from which its corresponding service principal object(s) are _derived_ for use locally at run-time (in a specific tenant).
For more information, see [Application and Service Principal Objects][AAD-App-SP-Objects].
## Application registration
-In order to allow an application to integrate with and delegate Identity and Access Management functions to Azure AD, it must be registered with an Azure AD [tenant](#tenant). When you register your application with Azure AD, you are providing an identity configuration for your application, allowing it to integrate with Azure AD and use features such as:
+In order to allow an application to integrate with and delegate Identity and Access Management functions to Azure AD, it must be registered with an Azure AD [tenant](#tenant). When you register your application with Azure AD, you're providing an identity configuration for your application, allowing it to integrate with Azure AD and use features like:
-* Robust management of Single Sign-On using Azure AD Identity Management and [OpenID Connect][OpenIDConnect] protocol implementation
-* Brokered access to [protected resources](#resource-server) by [client applications](#client-application), via OAuth 2.0 [authorization server](#authorization-server)
-* [Consent framework](#consent) for managing client access to protected resources, based on resource owner authorization.
+- Robust management of Single Sign-On using Azure AD Identity Management and [OpenID Connect][OpenIDConnect] protocol implementation
+- Brokered access to [protected resources](#resource-server) by [client applications](#client-application), via OAuth 2.0 [authorization server](#authorization-server)
+- [Consent framework](#consent) for managing client access to protected resources, based on resource owner authorization.
See [Integrating applications with Azure Active Directory][AAD-Integrating-Apps] for more details.
## Authentication
-The act of challenging a party for legitimate credentials, providing the basis for creation of a security principal to be used for identity and access control. During an [OAuth2 authorization grant](#authorization-grant) for example, the party authenticating is filling the role of either [resource owner](#resource-owner) or [client application](#client-application), depending on the grant used.
+The act of challenging a party for legitimate credentials, providing the basis for creation of a security principal to be used for identity and access control. During an [OAuth 2.0 authorization grant](#authorization-grant) for example, the party authenticating is filling the role of either [resource owner](#resource-owner) or [client application](#client-application), depending on the grant used.
## Authorization
The act of granting an authenticated security principal permission to do something. There are two primary use cases in the Azure AD programming model:
-* During an [OAuth2 authorization grant](#authorization-grant) flow: when the [resource owner](#resource-owner) grants authorization to the [client application](#client-application), allowing the client to access the resource owner's resources.
-* During resource access by the client: as implemented by the [resource server](#resource-server), using the [claim](#claim) values present in the [access token](#access-token) to make access control decisions based upon them.
+- During an [OAuth 2.0 authorization grant](#authorization-grant) flow: when the [resource owner](#resource-owner) grants authorization to the [client application](#client-application), allowing the client to access the resource owner's resources.
+- During resource access by the client: as implemented by the [resource server](#resource-server), using the [claim](#claim) values present in the [access token](#access-token) to make access control decisions based upon them.
## Authorization code
-A short lived "token" provided to a [client application](#client-application) by the [authorization endpoint](#authorization-endpoint), as part of the "authorization code" flow, one of the four OAuth2 [authorization grants](#authorization-grant). The code is returned to the client application in response to authentication of a [resource owner](#resource-owner), indicating the resource owner has delegated authorization to access the requested resources. As part of the flow, the code is later redeemed for an [access token](#access-token).
+A short-lived value provided by the [authorization endpoint](#authorization-endpoint) to a [client application](#client-application) during the OAuth 2.0 _authorization code grant flow_, one of the four OAuth 2.0 [authorization grants](#authorization-grant). Also called an _auth code_, the authorization code is returned to the client application in response to the authentication of a [resource owner](#resource-owner). The auth code indicates the resource owner has delegated authorization to the client application to access their resources. As part of the flow, the auth code is later redeemed for an [access token](#access-token).
## Authorization endpoint
-One of the endpoints implemented by the [authorization server](#authorization-server), used to interact with the [resource owner](#resource-owner) in order to provide an [authorization grant](#authorization-grant) during an OAuth2 authorization grant flow. Depending on the authorization grant flow used, the actual grant provided can vary, including an [authorization code](#authorization-code) or [security token](#security-token).
+One of the endpoints implemented by the [authorization server](#authorization-server), used to interact with the [resource owner](#resource-owner) to provide an [authorization grant](#authorization-grant) during an OAuth 2.0 authorization grant flow. Depending on the authorization grant flow used, the actual grant provided can vary, including an [authorization code](#authorization-code) or [security token](#security-token).
-See the OAuth2 specification's [authorization grant types][OAuth2-AuthZ-Grant-Types] and [authorization endpoint][OAuth2-AuthZ-Endpoint] sections, and the [OpenIDConnect specification][OpenIDConnect-AuthZ-Endpoint] for more details.
+See the OAuth 2.0 specification's [authorization grant types][OAuth2-AuthZ-Grant-Types] and [authorization endpoint][OAuth2-AuthZ-Endpoint] sections, and the [OpenIDConnect specification][OpenIDConnect-AuthZ-Endpoint] for more details.
## Authorization grant
-A credential representing the [resource owner's](#resource-owner) [authorization](#authorization) to access its protected resources, granted to a [client application](#client-application). A client application can use one of the [four grant types defined by the OAuth2 Authorization Framework][OAuth2-AuthZ-Grant-Types] to obtain a grant, depending on client type/requirements: "authorization code grant", "client credentials grant", "implicit grant", and "resource owner password credentials grant". The credential returned to the client is either an [access token](#access-token), or an [authorization code](#authorization-code) (exchanged later for an access token), depending on the type of authorization grant used.
+A credential representing the [resource owner's](#resource-owner) [authorization](#authorization) to access its protected resources, granted to a [client application](#client-application). A client application can use one of the [four grant types defined by the OAuth 2.0 Authorization Framework][OAuth2-AuthZ-Grant-Types] to obtain a grant, depending on client type/requirements: "authorization code grant", "client credentials grant", "implicit grant", and "resource owner password credentials grant". The credential returned to the client is either an [access token](#access-token), or an [authorization code](#authorization-code) (exchanged later for an access token), depending on the type of authorization grant used.
## Authorization server
-As defined by the [OAuth2 Authorization Framework][OAuth2-Role-Def], the server responsible for issuing access tokens to the [client](#client-application) after successfully authenticating the [resource owner](#resource-owner) and obtaining its authorization. A [client application](#client-application) interacts with the authorization server at runtime via its [authorization](#authorization-endpoint) and [token](#token-endpoint) endpoints, in accordance with the OAuth2 defined [authorization grants](#authorization-grant).
+As defined by the [OAuth 2.0 Authorization Framework][OAuth2-Role-Def], the server responsible for issuing access tokens to the [client](#client-application) after successfully authenticating the [resource owner](#resource-owner) and obtaining its authorization. A [client application](#client-application) interacts with the authorization server at runtime via its [authorization](#authorization-endpoint) and [token](#token-endpoint) endpoints, in accordance with the OAuth 2.0 defined [authorization grants](#authorization-grant).
In the case of the Microsoft identity platform application integration, the Microsoft identity platform implements the authorization server role for Azure AD applications and Microsoft service APIs, for example [Microsoft Graph APIs][Microsoft-Graph].
## Claim
-A [security token](#security-token) contains claims, which provide assertions about one entity (such as a [client application](#client-application) or [resource owner](#resource-owner)) to another entity (such as the [resource server](#resource-server)). Claims are name/value pairs that relay facts about the token subject (for example, the security principal that was authenticated by the [authorization server](#authorization-server)). The claims present in a given token are dependent upon several variables, including the type of token, the type of credential used to authenticate the subject, the application configuration, etc.
+Claims are name/values pairs in a [security token](#security-token) that provide assertions made by one entity to another. These entities are typically the [client application](#client-application) or a [resource owner](#resource-owner) providing assertions to a [resource server](#resource-server). Claims relay facts about the token subject like the ID of the security principal that was authenticated by the [authorization server](#authorization-server). The claims present in a token can vary and depend on several factors like the type of token, type of credential used for authenticating the subject, the application configuration, and others.
See the [Microsoft identity platform token reference][AAD-Tokens-Claims] for more details.
## Client application
-Also known as the "[actor](#actor)". As defined by the [OAuth2 Authorization Framework][OAuth2-Role-Def], an application that makes protected resource requests on behalf of the [resource owner](#resource-owner). They receive permissions from the resource owner in the form of scopes. The term "client" does not imply any particular hardware implementation characteristics (for instance, whether the application executes on a server, a desktop, or other devices).
+Also known as the "[actor](#actor)". As defined by the [OAuth 2.0 Authorization Framework][OAuth2-Role-Def], an application that makes protected resource requests on behalf of the [resource owner](#resource-owner). They receive permissions from the resource owner in the form of scopes. The term "client" doesn't imply any particular hardware implementation characteristics (for instance, whether the application executes on a server, a desktop, or other devices).
-A client application requests [authorization](#authorization) from a resource owner to participate in an [OAuth2 authorization grant](#authorization-grant) flow, and may access APIs/data on the resource owner's behalf. The OAuth2 Authorization Framework [defines two types of clients][OAuth2-Client-Types], "confidential" and "public", based on the client's ability to maintain the confidentiality of its credentials. Applications can implement a [web client (confidential)](#web-client) which runs on a web server, a [native client (public)](#native-client) installed on a device, or a [user-agent-based client (public)](#user-agent-based-client) which runs in a device's browser.
+A client application requests [authorization](#authorization) from a resource owner to participate in an [OAuth 2.0 authorization grant](#authorization-grant) flow, and may access APIs/data on the resource owner's behalf. The OAuth 2.0 Authorization Framework [defines two types of clients][OAuth2-Client-Types], "confidential" and "public", based on the client's ability to maintain the confidentiality of its credentials. Applications can implement a [web client (confidential)](#web-client) which runs on a web server, a [native client (public)](#native-client) installed on a device, or a [user-agent-based client (public)](#user-agent-based-client) which runs in a device's browser.
## Consent
@@ -111,7 +109,7 @@ See [consent framework](consent-framework.md) for more information.
## ID token
-An [OpenID Connect][OpenIDConnect-ID-Token] [security token](#security-token) provided by an [authorization server's](#authorization-server) [authorization endpoint](#authorization-endpoint), which contains [claims](#claim) pertaining to the authentication of an end user [resource owner](#resource-owner). Like an access token, ID tokens are also represented as a digitally signed [JSON Web Token (JWT)][JWT]. Unlike an access token though, an ID token's claims are not used for purposes related to resource access and specifically access control.
+An [OpenID Connect][OpenIDConnect-ID-Token] [security token](#security-token) provided by an [authorization server's](#authorization-server) [authorization endpoint](#authorization-endpoint), which contains [claims](#claim) pertaining to the authentication of an end user [resource owner](#resource-owner). Like an access token, ID tokens are also represented as a digitally signed [JSON Web Token (JWT)][JWT]. Unlike an access token though, an ID token's claims aren't used for purposes related to resource access and specifically access control.
See the [ID token reference](id-tokens.md) for more details.
@@ -121,7 +119,7 @@ Eliminate the need for developers to manage credentials. Managed identities prov
## Microsoft identity platform
-The Microsoft identity platform is an evolution of the Azure Active Directory (Azure AD) identity service and developer platform. It allows developers to build applications that sign in all Microsoft identities, get tokens to call Microsoft Graph, other Microsoft APIs, or APIs that developers have built. It’s a full-featured platform that consists of an authentication service, libraries, application registration and configuration, full developer documentation, code samples, and other developer content. The Microsoft identity platform supports industry standard protocols such as OAuth 2.0 and OpenID Connect.
+The Microsoft identity platform is an evolution of the Azure Active Directory (Azure AD) identity service and developer platform. It allows developers to build applications that sign in all Microsoft identities, get tokens to call Microsoft Graph, other Microsoft APIs, or APIs that developers have built. It's a full-featured platform that consists of an authentication service, libraries, application registration and configuration, full developer documentation, code samples, and other developer content. The Microsoft identity platform supports industry standard protocols such as OAuth 2.0 and OpenID Connect.
## Multi-tenant application
@@ -131,14 +129,14 @@ See [How to sign in any Azure AD user using the multi-tenant application pattern
## Native client
-A type of [client application](#client-application) that is installed natively on a device. Since all code is executed on a device, it is considered a "public" client due to its inability to store credentials privately/confidentially. See [OAuth2 client types and profiles][OAuth2-Client-Types] for more details.
+A type of [client application](#client-application) that is installed natively on a device. Since all code is executed on a device, it's considered a "public" client due to its inability to store credentials privately/confidentially. See [OAuth 2.0 client types and profiles][OAuth2-Client-Types] for more details.
## Permissions
A [client application](#client-application) gains access to a [resource server](#resource-server) by declaring permission requests. Two types are available:
-* "Delegated" permissions, which specify [scope-based](#scopes) access using delegated authorization from the signed-in [resource owner](#resource-owner), are presented to the resource at run-time as ["scp" claims](#claim) in the client's [access token](#access-token). These indicate the permission granted to the [actor](#actor) by the [subject](#subject).
-* "Application" permissions, which specify [role-based](#roles) access using the client application's credentials/identity, are presented to the resource at run-time as ["roles" claims](#claim) in the client's access token. These indicate permissions granted to the [subject](#subject) by the tenant.
+- "Delegated" permissions, which specify [scope-based](#scopes) access using delegated authorization from the signed-in [resource owner](#resource-owner), are presented to the resource at run-time as ["scp" claims](#claim) in the client's [access token](#access-token). These indicate the permission granted to the [actor](#actor) by the [subject](#subject).
+- "Application" permissions, which specify [role-based](#roles) access using the client application's credentials/identity, are presented to the resource at run-time as ["roles" claims](#claim) in the client's access token. These indicate permissions granted to the [subject](#subject) by the tenant.
They also surface during the [consent](#consent) process, giving the administrator or resource owner the opportunity to grant/deny the client access to resources in their tenant.
@@ -146,21 +144,21 @@ Permission requests are configured on the **API permissions** page for an applic
## Refresh token
-A type of [security token](#security-token) issued by an [authorization server](#authorization-server), and used by a [client application](#client-application) in order to request a new [access token](#access-token) before the access token expires. Typically in the form of a [JSON Web Token (JWT)][JWT].
+A type of [security token](#security-token) issued by an [authorization server](#authorization-server). Before an access token expires, a [client application](#client-application) includes its associated refresh token when it requests a new [access token](#access-token) from the authorization server. Refresh tokens are typically formatted as a [JSON Web Token (JWT)][JWT].
-Unlike access tokens, refresh tokens can be revoked. If a client application attempts to request a new access token using a refresh token that has been revoked, the authorization server will deny the request, and the client application will no longer have permission to access the [resource server](#resource-server) on behalf of the [resource owner](#resource-owner).
+Unlike access tokens, refresh tokens can be revoked. An authorization server denies any request from a client application that includes a refresh token that has been revoked. When the authorization server denies a request that includes a revoked refresh token, the client application loses the permission to access the [resource server](#resource-server) on behalf of the [resource owner](#resource-owner).
See the [refresh tokens](refresh-tokens.md) for more details.
## Resource owner
-As defined by the [OAuth2 Authorization Framework][OAuth2-Role-Def], an entity capable of granting access to a protected resource. When the resource owner is a person, it is referred to as an end user. For example, when a [client application](#client-application) wants to access a user's mailbox through the [Microsoft Graph API][Microsoft-Graph], it requires permission from the resource owner of the mailbox. The "resource owner" is also sometimes called the [subject](#subject).
+As defined by the [OAuth 2.0 Authorization Framework][OAuth2-Role-Def], an entity capable of granting access to a protected resource. When the resource owner is a person, it's referred to as an end user. For example, when a [client application](#client-application) wants to access a user's mailbox through the [Microsoft Graph API][Microsoft-Graph], it requires permission from the resource owner of the mailbox. The "resource owner" is also sometimes called the [subject](#subject).
-Every [security token](#security-token) represents a resource owner. The resource owner is what the subject [claim](#claim), object ID claim, and personal data in the token represent. Resource owners are the party that grants delegated permissions to a client application, in the form of scopes. Resource owners are also the recipients of [roles](#roles) that indicate expanded permissions within a tenant or on an application.
+Every [security token](#security-token) represents a resource owner. The resource owner is what the subject [claim](#claim), object ID claim, and personal data in the token represent. Resource owners are the party that grants delegated permissions to a client application, in the form of scopes. Resource owners are also the recipients of [roles](#roles) that indicate expanded permissions within a tenant or on an application.
## Resource server
-As defined by the [OAuth2 Authorization Framework][OAuth2-Role-Def], a server that hosts protected resources, capable of accepting and responding to protected resource requests by [client applications](#client-application) that present an [access token](#access-token). Also known as a protected resource server, or resource application.
+As defined by the [OAuth 2.0 Authorization Framework][OAuth2-Role-Def], a server that hosts protected resources, capable of accepting and responding to protected resource requests by [client applications](#client-application) that present an [access token](#access-token). Also known as a protected resource server, or resource application.
A resource server exposes APIs and enforces access to its protected resources through [scopes](#scopes) and [roles](#roles), using the OAuth 2.0 Authorization Framework. Examples include the [Microsoft Graph API][Microsoft-Graph], which provides access to Azure AD tenant data, and the Microsoft 365 APIs that provide access to data such as mail and calendar.
@@ -168,9 +166,9 @@ Just like a client application, resource application's identity configuration is
## Roles
-Like [scopes](#scopes), app roles provide a way for a [resource server](#resource-server) to govern access to its protected resources. Unlike scopes, roles represent privileges that the [subject](#subject) has been granted beyond the baseline - this is why reading your own email is a scope, while being an email administrator that can read everyone's email is a role.
+Like [scopes](#scopes), app roles provide a way for a [resource server](#resource-server) to govern access to its protected resources. Unlike scopes, roles represent privileges that the [subject](#subject) has been granted beyond the baseline - this is why reading your own email is a scope, while being an email administrator that can read everyone's email is a role.
-App roles can support two assignment types: "user" assignment implements role-based access control for users/groups that require access to the resource, while "application" assignment implements the same for [client applications](#client-application) that require access. An app role can be defined as user-assignable, app-assignabnle, or both.
+App roles can support two assignment types: "user" assignment implements role-based access control for users/groups that require access to the resource, while "application" assignment implements the same for [client applications](#client-application) that require access. An app role can be defined as user-assignable, app-assignabnle, or both.
Roles are resource-defined strings (for example "Expense approver", "Read-only", "Directory.ReadWrite.All"), managed in the [Azure portal][AZURE-portal] via the resource's [application manifest](#application-manifest), and stored in the resource's [appRoles property][Graph-Sp-Resource]. The Azure portal is also used to assign users to "user" assignable roles, and configure client [application permissions](#permissions) to request "application" assignable roles.
@@ -186,17 +184,17 @@ A best practice naming convention, is to use a "resource.operation.constraint" f
## Security token
-A signed document containing claims, such as an OAuth2 token or SAML 2.0 assertion. For an OAuth2 [authorization grant](#authorization-grant), an [access token](#access-token) (OAuth2), [refresh token](#refresh-token), and an [ID Token](https://openid.net/specs/openid-connect-core-1_0.html#IDToken) are types of security tokens, all of which are implemented as a [JSON Web Token (JWT)][JWT].
+A signed document containing claims, such as an OAuth 2.0 token or SAML 2.0 assertion. For an OAuth 2.0 [authorization grant](#authorization-grant), an [access token](#access-token) (OAuth2), [refresh token](#refresh-token), and an [ID Token](https://openid.net/specs/openid-connect-core-1_0.html#IDToken) are types of security tokens, all of which are implemented as a [JSON Web Token (JWT)][JWT].
## Service principal object
-When you register/update an application in the [Azure portal][AZURE-portal], the portal creates/updates both an [application object](#application-object) and a corresponding service principal object for that tenant. The application object *defines* the application's identity configuration globally (across all tenants where the associated application has been granted access), and is the template from which its corresponding service principal object(s) are *derived* for use locally at run-time (in a specific tenant).
+When you register/update an application in the [Azure portal][AZURE-portal], the portal creates/updates both an [application object](#application-object) and a corresponding service principal object for that tenant. The application object _defines_ the application's identity configuration globally (across all tenants where the associated application has been granted access), and is the template from which its corresponding service principal object(s) are _derived_ for use locally at run-time (in a specific tenant).
For more information, see [Application and Service Principal Objects][AAD-App-SP-Objects].
## Sign-in
-The process of a [client application](#client-application) initiating end-user authentication and capturing related state, for the purpose of acquiring a [security token](#security-token) and scoping the application session to that state. State can include artifacts such as user profile information, and information derived from token claims.
+The process of a [client application](#client-application) initiating end-user authentication and capturing related state for requesting a [security token](#security-token) and scoping the application session to that state. State can include artifacts like user profile information, and information derived from token claims.
The sign-in function of an application is typically used to implement single-sign-on (SSO). It may also be preceded by a "sign-up" function, as the entry point for an end user to gain access to an application (upon first sign-in). The sign-up function is used to gather and persist additional state specific to the user, and may require [user consent](#consent).
@@ -206,37 +204,37 @@ The process of unauthenticating an end user, detaching the user state associated
## Subject
-Also known as the [resource owner](#resource-owner).
+Also known as the [resource owner](#resource-owner).
## Tenant
An instance of an Azure AD directory is referred to as an Azure AD tenant. It provides several features, including:
-* a registry service for integrated applications
-* authentication of user accounts and registered applications
-* REST endpoints required to support various protocols including OAuth2 and SAML, including the [authorization endpoint](#authorization-endpoint), [token endpoint](#token-endpoint) and the "common" endpoint used by [multi-tenant applications](#multi-tenant-application).
+- a registry service for integrated applications
+- authentication of user accounts and registered applications
+- REST endpoints required to support various protocols including OAuth 2.0 and SAML, including the [authorization endpoint](#authorization-endpoint), [token endpoint](#token-endpoint) and the "common" endpoint used by [multi-tenant applications](#multi-tenant-application).
Azure AD tenants are created/associated with Azure and Microsoft 365 subscriptions during sign-up, providing Identity & Access Management features for the subscription. Azure subscription administrators can also create additional Azure AD tenants via the Azure portal. See [How to get an Azure Active Directory tenant][AAD-How-To-Tenant] for details on the various ways you can get access to a tenant. See [Associate or add an Azure subscription to your Azure Active Directory tenant][AAD-How-Subscriptions-Assoc] for details on the relationship between subscriptions and an Azure AD tenant, and for instructions on how to associate or add a subscription to an Azure AD tenant.
## Token endpoint
-One of the endpoints implemented by the [authorization server](#authorization-server) to support OAuth2 [authorization grants](#authorization-grant). Depending on the grant, it can be used to acquire an [access token](#access-token) (and related "refresh" token) to a [client](#client-application), or [ID token](#id-token) when used with the [OpenID Connect][OpenIDConnect] protocol.
+One of the endpoints implemented by the [authorization server](#authorization-server) to support OAuth 2.0 [authorization grants](#authorization-grant). Depending on the grant, it can be used to acquire an [access token](#access-token) (and related "refresh" token) to a [client](#client-application), or [ID token](#id-token) when used with the [OpenID Connect][OpenIDConnect] protocol.
## User-agent-based client
-A type of [client application](#client-application) that downloads code from a web server and executes within a user-agent (for instance, a web browser), such as a single-page application (SPA). Since all code is executed on a device, it is considered a "public" client due to its inability to store credentials privately/confidentially. For more information, see [OAuth2 client types and profiles][OAuth2-Client-Types].
+A type of [client application](#client-application) that downloads code from a web server and executes within a user-agent (for instance, a web browser), such as a single-page application (SPA). Since all code is executed on a device, it is considered a "public" client due to its inability to store credentials privately/confidentially. For more information, see [OAuth 2.0 client types and profiles][OAuth2-Client-Types].
## User principal
-Similar to the way a service principal object is used to represent an application instance, a user principal object is another type of security principal, which represents a user. The Microsoft Graph [User resource type][Graph-User-Resource] defines the schema for a user object, including user-related properties such as first and last name, user principal name, directory role membership, etc. This provides the user identity configuration for Azure AD to establish a user principal at run-time. The user principal is used to represent an authenticated user for Single Sign-On, recording [consent](#consent) delegation, making access control decisions, etc.
+Similar to the way a service principal object is used to represent an application instance, a user principal object is another type of security principal, which represents a user. The Microsoft Graph [User resource type][Graph-User-Resource] defines the schema for a user object, including user-related properties like first and last name, user principal name, directory role membership, etc. This provides the user identity configuration for Azure AD to establish a user principal at run-time. The user principal is used to represent an authenticated user for Single Sign-On, recording [consent](#consent) delegation, making access control decisions, etc.
## Web client
-A type of [client application](#client-application) that executes all code on a web server, and able to function as a "confidential" client by securely storing its credentials on the server. For more information, see [OAuth2 client types and profiles][OAuth2-Client-Types].
+A type of [client application](#client-application) that executes all code on a web server, functioning as a _confidential client_ because it can securely store its credentials on the server. For more information, see [OAuth 2.0 client types and profiles][OAuth2-Client-Types].
## Workload identity
-An identity used by a software workload (such as an application, service, script, or container) to authenticate and access other services and resources. In Azure AD, workload identities are apps, service principals, and managed identities. For more information, see [workload identity overview](workload-identities-overview.md).
+An identity used by a software workload like an application, service, script, or container to authenticate and access other services and resources. In Azure AD, workload identities are apps, service principals, and managed identities. For more information, see [workload identity overview](workload-identities-overview.md).
## Workload identity federation
@@ -244,9 +242,9 @@ Allows you to securely access Azure AD protected resources from external apps an
## Next steps
-The [Microsoft identity platform Developer's Guide][AAD-Dev-Guide] is the landing page to use for all the Microsoft identity platform development-related topics, including an overview of [application integration][AAD-How-To-Integrate] and the basics of the [Microsoft identity platform authentication and supported authentication scenarios][AAD-Auth-Scenarios]. You can also find code samples & tutorials on how to get up and running quickly on [GitHub](https://github.com/azure-samples?utf8=%E2%9C%93&q=active%20directory&type=&language=).
+Many of the terms in this glossary are related to the OAuth 2.0 and OpenID Connect protocols. Though you don't need to know how the protocols work "on the wire" to use the identity platform, knowing some protocol basics can help you more easily build and debug authentication and authorization in your apps:
-Use the following comments section to provide feedback and help to refine and shape this content, including requests for new definitions or updating existing ones!
+- [OAuth 2.0 and OpenID Connect (OIDC) in the Microsoft identity platform](active-directory-v2-protocols.md)
@@ -278,4 +276,4 @@ Use the following comments section to provide feedback and help to refine and sh
[OAuth2-Role-Def]: https://tools.ietf.org/html/rfc6749#page-6
[OpenIDConnect]: https://openid.net/specs/openid-connect-core-1_0.html
[OpenIDConnect-AuthZ-Endpoint]: https://openid.net/specs/openid-connect-core-1_0.html#AuthorizationEndpoint
-[OpenIDConnect-ID-Token]: https://openid.net/specs/openid-connect-core-1_0.html#IDToken
\ No newline at end of file
+[OpenIDConnect-ID-Token]: https://openid.net/specs/openid-connect-core-1_0.html#IDToken
diff --git a/articles/active-directory/develop/developer-guide-conditional-access-authentication-context.md b/articles/active-directory/develop/developer-guide-conditional-access-authentication-context.md
index c6d32e8191ce8..208132934127c 100644
--- a/articles/active-directory/develop/developer-guide-conditional-access-authentication-context.md
+++ b/articles/active-directory/develop/developer-guide-conditional-access-authentication-context.md
@@ -224,5 +224,5 @@ Do not use auth context where the app itself is going to be a target of Conditio
- [Conditional Access authentication context](../conditional-access/concept-conditional-access-cloud-apps.md#authentication-context-preview)
- [authenticationContextClassReference resource type - MS Graph](/graph/api/conditionalaccessroot-list-authenticationcontextclassreferences)
- [Claims challenge, claims request, and client capabilities in the Microsoft identity platform](claims-challenge.md)
-- [Using authentication context with Microsoft Information Protection and SharePoint](/microsoft-365/compliance/sensitivity-labels-teams-groups-sites#more-information-about-the-dependencies-for-the-authentication-context-option)
+- [Using authentication context with Microsoft Purview Information Protection and SharePoint](/microsoft-365/compliance/sensitivity-labels-teams-groups-sites#more-information-about-the-dependencies-for-the-authentication-context-option)
- [How to use Continuous Access Evaluation enabled APIs in your applications](app-resilience-continuous-access-evaluation.md)
diff --git a/articles/active-directory/develop/developer-support-help-options.md b/articles/active-directory/develop/developer-support-help-options.md
index 76078c9af8cac..5cb59be6bc880 100644
--- a/articles/active-directory/develop/developer-support-help-options.md
+++ b/articles/active-directory/develop/developer-support-help-options.md
@@ -1,5 +1,5 @@
---
-title: Support and help options for Microsoft identity platform developers | Azure
+title: Support and help options for Microsoft identity platform developers
description: Learn where to get help and find answers to your questions as you build identity and access management (IAM) solutions that integrate with Azure Active Directory (Azure AD) and other components of the Microsoft identity platform.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/howto-add-app-roles-in-azure-ad-apps.md b/articles/active-directory/develop/howto-add-app-roles-in-azure-ad-apps.md
index 35cd4a60c918c..d1bee6b8cb3a1 100644
--- a/articles/active-directory/develop/howto-add-app-roles-in-azure-ad-apps.md
+++ b/articles/active-directory/develop/howto-add-app-roles-in-azure-ad-apps.md
@@ -1,6 +1,5 @@
---
-title: Add app roles and get them from a token | Azure
-titleSuffix: Microsoft identity platform
+title: Add app roles and get them from a token
description: Learn how to add app roles to an application registered in Azure Active Directory, assign users and groups to these roles, and receive them in the 'roles' claim in the token.
services: active-directory
author: kalyankrishna1
diff --git a/articles/active-directory/develop/howto-add-branding-in-azure-ad-apps.md b/articles/active-directory/develop/howto-add-branding-in-azure-ad-apps.md
index b26b62f9740a4..dcab75d651fce 100644
--- a/articles/active-directory/develop/howto-add-branding-in-azure-ad-apps.md
+++ b/articles/active-directory/develop/howto-add-branding-in-azure-ad-apps.md
@@ -1,6 +1,5 @@
---
title: Sign in with Microsoft branding guidelines | Azure AD
-titleSuffix: Microsoft identity platform
description: Learn about application branding guidelines for Microsoft identity platform.
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/howto-add-terms-of-service-privacy-statement.md b/articles/active-directory/develop/howto-add-terms-of-service-privacy-statement.md
index cca41c2208f18..ec4306fa2f058 100644
--- a/articles/active-directory/develop/howto-add-terms-of-service-privacy-statement.md
+++ b/articles/active-directory/develop/howto-add-terms-of-service-privacy-statement.md
@@ -1,5 +1,5 @@
---
-title: Terms of Service and privacy statement for apps | Azure
+title: Terms of Service and privacy statement for apps
description: Learn how you can configure the terms of service and privacy statement for apps registered to use Azure AD.
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/howto-authenticate-service-principal-powershell.md b/articles/active-directory/develop/howto-authenticate-service-principal-powershell.md
index de308f7ca244c..41ccac7c2212d 100644
--- a/articles/active-directory/develop/howto-authenticate-service-principal-powershell.md
+++ b/articles/active-directory/develop/howto-authenticate-service-principal-powershell.md
@@ -1,6 +1,5 @@
---
-title: Create an Azure app identity (PowerShell) | Azure
-titleSuffix: Microsoft identity platform
+title: Create an Azure app identity (PowerShell)
description: Describes how to use Azure PowerShell to create an Azure Active Directory application and service principal, and grant it access to resources through role-based access control. It shows how to authenticate application with a certificate.
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/howto-build-services-resilient-to-metadata-refresh.md b/articles/active-directory/develop/howto-build-services-resilient-to-metadata-refresh.md
index a1b33618c202d..2bc6a8129bb7a 100644
--- a/articles/active-directory/develop/howto-build-services-resilient-to-metadata-refresh.md
+++ b/articles/active-directory/develop/howto-build-services-resilient-to-metadata-refresh.md
@@ -1,6 +1,5 @@
---
-title: "How to: Build services that are resilient to Azure AD's OpenID Connect metadata refresh | Azure"
-titleSuffix: Microsoft identity platform
+title: "How to: Build services that are resilient to Azure AD's OpenID Connect metadata refresh"
description: Learn how to ensure that your web app or web api is resilient to Azure AD's OpenID Connect metadata refresh.
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/howto-configure-publisher-domain.md b/articles/active-directory/develop/howto-configure-publisher-domain.md
index e90ebbb9db40a..4030d4dc48bcd 100644
--- a/articles/active-directory/develop/howto-configure-publisher-domain.md
+++ b/articles/active-directory/develop/howto-configure-publisher-domain.md
@@ -1,6 +1,5 @@
---
-title: Configure an app's publisher domain | Azure
-titleSuffix: Microsoft identity platform
+title: Configure an app's publisher domain
description: Learn how to configure an application's publisher domain to let users know where their information is being sent.
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/howto-convert-app-to-be-multi-tenant.md b/articles/active-directory/develop/howto-convert-app-to-be-multi-tenant.md
index 2d406e21fc5d5..1a7ed22565640 100644
--- a/articles/active-directory/develop/howto-convert-app-to-be-multi-tenant.md
+++ b/articles/active-directory/develop/howto-convert-app-to-be-multi-tenant.md
@@ -1,6 +1,5 @@
---
title: Build apps that sign in Azure AD users
-titleSuffix: Microsoft identity platform
description: Shows how to build a multi-tenant application that can sign in a user from any Azure Active Directory tenant.
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/howto-create-self-signed-certificate.md b/articles/active-directory/develop/howto-create-self-signed-certificate.md
index fff9bb4bcbeee..76968921fbd35 100644
--- a/articles/active-directory/develop/howto-create-self-signed-certificate.md
+++ b/articles/active-directory/develop/howto-create-self-signed-certificate.md
@@ -1,6 +1,5 @@
---
-title: Create a self-signed public certificate to authenticate your application | Azure
-titleSuffix: Microsoft identity platform
+title: Create a self-signed public certificate to authenticate your application
description: Create a self-signed public certificate to authenticate your application.
services: active-directory
author: FaithOmbongi
diff --git a/articles/active-directory/develop/howto-create-service-principal-portal.md b/articles/active-directory/develop/howto-create-service-principal-portal.md
index 5a0d4c3c8d7ec..0086eab616392 100644
--- a/articles/active-directory/develop/howto-create-service-principal-portal.md
+++ b/articles/active-directory/develop/howto-create-service-principal-portal.md
@@ -1,6 +1,5 @@
---
title: Create an Azure AD app and service principal in the portal
-titleSuffix: Microsoft identity platform
description: Create a new Azure Active Directory app and service principal to manage access to resources with role-based access control in Azure Resource Manager.
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/howto-get-list-of-all-active-directory-auth-library-apps.md b/articles/active-directory/develop/howto-get-list-of-all-active-directory-auth-library-apps.md
index 60b067382871e..f2bfecccc3815 100644
--- a/articles/active-directory/develop/howto-get-list-of-all-active-directory-auth-library-apps.md
+++ b/articles/active-directory/develop/howto-get-list-of-all-active-directory-auth-library-apps.md
@@ -1,6 +1,5 @@
---
-title: "How to: Get a complete list of all apps using Active Directory Authentication Library (ADAL) in your tenant | Azure"
-titleSuffix: Microsoft identity platform
+title: "How to: Get a complete list of all apps using Active Directory Authentication Library (ADAL) in your tenant"
description: In this how-to guide, you get a complete list of all apps that are using ADAL in your tenant.
services: active-directory
author: SHERMANOUKO
diff --git a/articles/active-directory/develop/howto-handle-samesite-cookie-changes-chrome-browser.md b/articles/active-directory/develop/howto-handle-samesite-cookie-changes-chrome-browser.md
index 371bc2c3740a8..467e07f73a2af 100644
--- a/articles/active-directory/develop/howto-handle-samesite-cookie-changes-chrome-browser.md
+++ b/articles/active-directory/develop/howto-handle-samesite-cookie-changes-chrome-browser.md
@@ -1,6 +1,5 @@
---
-title: How to handle SameSite cookie changes in Chrome browser | Azure
-titleSuffix: Microsoft identity platform
+title: How to handle SameSite cookie changes in Chrome browser
description: Learn how to handle SameSite cookie changes in Chrome browser.
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/howto-implement-rbac-for-apps.md b/articles/active-directory/develop/howto-implement-rbac-for-apps.md
index 3535628fb5671..eaef0b0149705 100644
--- a/articles/active-directory/develop/howto-implement-rbac-for-apps.md
+++ b/articles/active-directory/develop/howto-implement-rbac-for-apps.md
@@ -1,6 +1,5 @@
---
title: Implement role-based access control in apps
-titleSuffix: Microsoft identity platform
description: Learn how to implement role-based access control in your applications.
services: active-directory
author: Chrispine-Chiedo
diff --git a/articles/active-directory/develop/howto-modify-supported-accounts.md b/articles/active-directory/develop/howto-modify-supported-accounts.md
index 1fc634db70c49..475de4b52f5c1 100644
--- a/articles/active-directory/develop/howto-modify-supported-accounts.md
+++ b/articles/active-directory/develop/howto-modify-supported-accounts.md
@@ -1,6 +1,5 @@
---
-title: "How to: Change the account types supported by an application | Azure"
-titleSuffix: Microsoft identity platform
+title: "How to: Change the account types supported by an application"
description: In this how-to, you configure an application registered with the Microsoft identity platform to change who, or what accounts, can access the application.
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/howto-remove-app.md b/articles/active-directory/develop/howto-remove-app.md
index 62780a24ed302..f93dfc8143a7a 100644
--- a/articles/active-directory/develop/howto-remove-app.md
+++ b/articles/active-directory/develop/howto-remove-app.md
@@ -1,6 +1,5 @@
---
-title: "How to: Remove a registered app from the Microsoft identity platform | Azure"
-titleSuffix: Microsoft identity platform
+title: "How to: Remove a registered app from the Microsoft identity platform"
description: In this how-to, you learn how to remove an application registered with the Microsoft identity platform.
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/howto-restore-app.md b/articles/active-directory/develop/howto-restore-app.md
index 543216ece2501..a970ab0ac2d7b 100644
--- a/articles/active-directory/develop/howto-restore-app.md
+++ b/articles/active-directory/develop/howto-restore-app.md
@@ -1,6 +1,5 @@
---
-title: "How to: Restore or remove a recently deleted application with the Microsoft identity platform | Azure"
-titleSuffix: Microsoft identity platform
+title: "How to: Restore or remove a recently deleted application with the Microsoft identity platform"
description: In this how-to, you learn how to restore or permanently delete a recently deleted application registered with the Microsoft identity platform.
services: active-directory
author: arcrowe
diff --git a/articles/active-directory/develop/howto-restrict-your-app-to-a-set-of-users.md b/articles/active-directory/develop/howto-restrict-your-app-to-a-set-of-users.md
index a5c71f738cfda..a27ab482ed777 100644
--- a/articles/active-directory/develop/howto-restrict-your-app-to-a-set-of-users.md
+++ b/articles/active-directory/develop/howto-restrict-your-app-to-a-set-of-users.md
@@ -1,6 +1,5 @@
---
-title: Restrict Azure AD app to a set of users | Azure
-titleSuffix: Microsoft identity platform
+title: Restrict Azure AD app to a set of users
description: Learn how to restrict access to your apps registered in Azure AD to a selected set of users.
services: active-directory
author: kalyankrishna1
diff --git a/articles/active-directory/develop/howto-v2-keychain-objc.md b/articles/active-directory/develop/howto-v2-keychain-objc.md
index b96a1d812901d..a9a6cd6920751 100644
--- a/articles/active-directory/develop/howto-v2-keychain-objc.md
+++ b/articles/active-directory/develop/howto-v2-keychain-objc.md
@@ -1,6 +1,5 @@
---
title: Configure keychain
-titleSuffix: Microsoft identity platform
description: Learn how to configure keychain so that your app can cache tokens in the keychain.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/id-tokens.md b/articles/active-directory/develop/id-tokens.md
index 642ce686655ab..f742ee209f717 100644
--- a/articles/active-directory/develop/id-tokens.md
+++ b/articles/active-directory/develop/id-tokens.md
@@ -1,6 +1,5 @@
---
-title: Microsoft identity platform ID tokens | Azure
-titleSuffix: Microsoft identity platform
+title: Microsoft identity platform ID tokens
description: Learn how to use id_tokens emitted by the Azure AD v1.0 and Microsoft identity platform (v2.0) endpoints.
services: active-directory
author: nickludwig
diff --git a/articles/active-directory/develop/identity-platform-integration-checklist.md b/articles/active-directory/develop/identity-platform-integration-checklist.md
index d216812d35348..e52ec3673f25f 100644
--- a/articles/active-directory/develop/identity-platform-integration-checklist.md
+++ b/articles/active-directory/develop/identity-platform-integration-checklist.md
@@ -1,5 +1,5 @@
---
-title: Best practices for the Microsoft identity platform | Azure
+title: Best practices for the Microsoft identity platform
description: Learn about best practices, recommendations, and common oversights when integrating with the Microsoft identity platform.
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/identity-videos.md b/articles/active-directory/develop/identity-videos.md
index 80fbd63342188..7ed3ceffc7910 100644
--- a/articles/active-directory/develop/identity-videos.md
+++ b/articles/active-directory/develop/identity-videos.md
@@ -1,5 +1,5 @@
---
-title: Microsoft identity platform videos | Azure
+title: Microsoft identity platform videos
description: A list of videos about modern authentication and the Microsoft identity platform
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/includes/console-app/quickstart-java.md b/articles/active-directory/develop/includes/console-app/quickstart-java.md
index 06d4df639244c..14a4367f3611a 100644
--- a/articles/active-directory/develop/includes/console-app/quickstart-java.md
+++ b/articles/active-directory/develop/includes/console-app/quickstart-java.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Call Microsoft Graph from a Java daemon | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Call Microsoft Graph from a Java daemon"
description: In this quickstart, you learn how a Java app can get an access token and call an API protected by Microsoft identity platform endpoint, using the app's own identity
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/includes/console-app/quickstart-netcore.md b/articles/active-directory/develop/includes/console-app/quickstart-netcore.md
index faf7a37384d6e..f1f501b0cf8f8 100644
--- a/articles/active-directory/develop/includes/console-app/quickstart-netcore.md
+++ b/articles/active-directory/develop/includes/console-app/quickstart-netcore.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Get token & call Microsoft Graph in a console app | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Get token & call Microsoft Graph in a console app"
description: In this quickstart, you learn how a .NET Core sample app can use the client credentials flow to get a token and call Microsoft Graph.
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/includes/console-app/quickstart-nodejs.md b/articles/active-directory/develop/includes/console-app/quickstart-nodejs.md
index 182a61f351684..4a990ae84b2ee 100644
--- a/articles/active-directory/develop/includes/console-app/quickstart-nodejs.md
+++ b/articles/active-directory/develop/includes/console-app/quickstart-nodejs.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Call Microsoft Graph from a Node.js console app | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Call Microsoft Graph from a Node.js console app"
description: In this quickstart, you download and run a code sample that shows how a Node.js console application can get an access token and call an API protected by a Microsoft identity platform endpoint, using the app's own identity
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/includes/console-app/quickstart-python.md b/articles/active-directory/develop/includes/console-app/quickstart-python.md
index 896b71e253932..74b73e8a9026b 100644
--- a/articles/active-directory/develop/includes/console-app/quickstart-python.md
+++ b/articles/active-directory/develop/includes/console-app/quickstart-python.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Call Microsoft Graph from a Python daemon | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Call Microsoft Graph from a Python daemon"
description: In this quickstart, you learn how a Python process can get an access token and call an API protected by Microsoft identity platform, using the app's own identity
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/includes/desktop-app/quickstart-nodejs-electron.md b/articles/active-directory/develop/includes/desktop-app/quickstart-nodejs-electron.md
index aecbb91404d8b..c0b0cd9bfea7b 100644
--- a/articles/active-directory/develop/includes/desktop-app/quickstart-nodejs-electron.md
+++ b/articles/active-directory/develop/includes/desktop-app/quickstart-nodejs-electron.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Call Microsoft Graph from a Node.js desktop app | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Call Microsoft Graph from a Node.js desktop app"
description: In this quickstart, you learn how a Node.js Electron desktop application can sign-in users and get an access token to call an API protected by a Microsoft identity platform endpoint
services: active-directory
author: mmacy
@@ -39,7 +38,7 @@ To register your application and add the app's registration information to your
1. Select **Register** to create the application.
1. Under **Manage**, select **Authentication**.
1. Select **Add a platform** > **Mobile and desktop applications**.
-1. In the **Redirect URIs** section, enter `msal://redirect`.
+1. In the **Redirect URIs** section, enter the redirect URI suggested by the app registration portal, e.g. `msalfa29b4c9-7675-4b61-8a0a-bf7b2b4fda91://auth`.
1. Select **Configure**.
#### Step 2: Download the Electron sample project
@@ -49,39 +48,80 @@ To register your application and add the app's registration information to your
#### Step 3: Configure the Electron sample project
-1. Extract the zip file to a local folder close to the root of the disk, for example, *C:/Azure-Samples*.
-1. Edit *.env* and replace the values of the fields `TENANT_ID` and `CLIENT_ID` with the following snippet:
+*Extract the project, open the *ms-identity-JavaScript-nodejs-desktop-main* folder, and then open *.authConfig.js* file. Replace the value as follows:
+
+| Variable | Description | Example(s) |
+|-----------|--------------|------------|
+| `Enter_the_Cloud_Instance_Id_Here` | The Azure cloud instance in which your application is registered | `https://login.microsoftonline.com/` (include the trailing forward-slash)|
+| `Enter_the_Tenant_Id_Here` | Tenant ID or Primary domain | `contoso.microsoft.com` or `cbe899ec-5f5c-4efe-b7a0-599505d3d54f` |
+| `Enter_the_Application_Id_Here` | Client ID of the application you registered | `fa29b4c9-7675-4b61-8a0a-bf7b2b4fda91` |
+| `Enter_the_Redirect_Uri_Here` | Redirect Uri of the application you registered | `msalfa29b4c9-7675-4b61-8a0a-bf7b2b4fda91://auth` |
+| `Enter_the_Graph_Endpoint_Here` | The Microsoft Graph API cloud instance that your app will call | `https://graph.microsoft.com/` (include the trailing forward-slash)|
+
+Your file should look similar to below:
+
+ ```javascript
+ const AAD_ENDPOINT_HOST = "https://login.microsoftonline.com/"; // include the trailing slash
+ const REDIRECT_URI = "msalfa29b4c9-7675-4b61-8a0a-bf7b2b4fda91://auth";
+ const msalConfig = {
+ auth: {
+ clientId: "fa29b4c9-7675-4b61-8a0a-bf7b2b4fda91",
+ authority: `${AAD_ENDPOINT_HOST}/cbe899ec-5f5c-4efe-b7a0-599505d3d54f`,
+ },
+ system: {
+ loggerOptions: {
+ loggerCallback(loglevel, message, containsPii) {
+ console.log(message);
+ },
+ piiLoggingEnabled: false,
+ logLevel: LogLevel.Verbose,
+ }
+ }
+ }
+
+ const GRAPH_ENDPOINT_HOST = "https://graph.microsoft.com/"; // include the trailing slash
+ const protectedResources = {
+ graphMe: {
+ endpoint: `${GRAPH_ENDPOINT_HOST}v1.0/me`,
+ scopes: ["User.Read"],
+ },
+ graphMessages: {
+ endpoint: `${GRAPH_ENDPOINT_HOST}v1.0/me/messages`,
+ scopes: ["Mail.Read"],
+ }
+ };
+
+ module.exports = {
+ msalConfig: msalConfig,
+ protectedResources: protectedResources,
+ };
```
- "TENANT_ID": "Enter_the_Tenant_Id_Here",
- "CLIENT_ID": "Enter_the_Application_Id_Here"
- ```
- Where:
- - `Enter_the_Application_Id_Here` - is the **Application (client) ID** for the application you registered.
- - `Enter_the_Tenant_Id_Here` - replace this value with the **Tenant Id** or **Tenant name** (for example, contoso.microsoft.com)
-
-> [!TIP]
-> To find the values of **Application (client) ID**, **Directory (tenant) ID**, go to the app's **Overview** page in the Azure portal.
#### Step 4: Run the application
-You'll need to install the dependencies of this sample once:
+1. You'll need to install the dependencies of this sample once:
-```console
-npm install
-```
+ ```console
+ cd ms-identity-javascript-nodejs-desktop-main
+ npm install
+ ```
-Then, run the application via command prompt or console:
+1. Then, run the application via command prompt or console:
-```console
-npm start
-```
+ ```console
+ npm start
+ ```
+
+1. Select **Sign in** to start the sign-in process.
+
+ The first time you sign in, you're prompted to provide your consent to allow the application to sign you in and access your profile. After you're signed in successfully, you'll be redirected back to the application.
-You should see application's UI with a **Sign in** button.
+## More information
-## About the code
+### How the sample works
-Below, some of the important aspects of the sample application are discussed.
+When a user selects the **Sign In** button for the first time, get `getTokenInteractive` method of *AuthProvider.js* is called. This method redirects the user to sign-in with the *Microsoft identity platform endpoint* and validate the user's credentials, and then obtains an **authorization code**. This code is then exchanged for an access token using the `acquireTokenByCode` method of MSAL Node.
### MSAL Node
@@ -92,124 +132,6 @@ You can install MSAL Node by running the following npm command.
```console
npm install @azure/msal-node --save
```
-
-### MSAL initialization
-
-You can add the reference for MSAL Node by adding the following code:
-
-```javascript
-const { PublicClientApplication } = require('@azure/msal-node');
-```
-
-Then, initialize MSAL using the following code:
-
-```javascript
-const MSAL_CONFIG = {
- auth: {
- clientId: "Enter_the_Application_Id_Here",
- authority: "https://login.microsoftonline.com/Enter_the_Tenant_Id_Here",
- },
-};
-
-const pca = new PublicClientApplication(MSAL_CONFIG);
-```
-
-> | Where: |Description |
-> |---------|---------|
-> | `clientId` | Is the **Application (client) ID** for the application registered in the Azure portal. You can find this value in the app's **Overview** page in the Azure portal. |
-> | `authority` | The STS endpoint for user to authenticate. Usually `https://login.microsoftonline.com/{tenant}` for public cloud, where {tenant} is the name of your tenant or your tenant Id.|
-
-### Requesting tokens
-
-In the first leg of authorization code flow with PKCE, prepare and send an authorization code request with the appropriate parameters. Then, in the second leg of the flow, listen for the authorization code response. Once the code is obtained, exchange it to obtain a token.
-
-```javascript
-// The redirect URI you setup during app registration with a custom file protocol "msal"
-const redirectUri = "msal://redirect";
-
-const cryptoProvider = new CryptoProvider();
-
-const pkceCodes = {
- challengeMethod: "S256", // Use SHA256 Algorithm
- verifier: "", // Generate a code verifier for the Auth Code Request first
- challenge: "" // Generate a code challenge from the previously generated code verifier
-};
-
-/**
- * Starts an interactive token request
- * @param {object} authWindow: Electron window object
- * @param {object} tokenRequest: token request object with scopes
- */
-async function getTokenInteractive(authWindow, tokenRequest) {
-
- /**
- * Proof Key for Code Exchange (PKCE) Setup
- *
- * MSAL enables PKCE in the Authorization Code Grant Flow by including the codeChallenge and codeChallengeMethod
- * parameters in the request passed into getAuthCodeUrl() API, as well as the codeVerifier parameter in the
- * second leg (acquireTokenByCode() API).
- */
-
- const {verifier, challenge} = await cryptoProvider.generatePkceCodes();
-
- pkceCodes.verifier = verifier;
- pkceCodes.challenge = challenge;
-
- const authCodeUrlParams = {
- redirectUri: redirectUri
- scopes: tokenRequest.scopes,
- codeChallenge: pkceCodes.challenge, // PKCE Code Challenge
- codeChallengeMethod: pkceCodes.challengeMethod // PKCE Code Challenge Method
- };
-
- const authCodeUrl = await pca.getAuthCodeUrl(authCodeUrlParams);
-
- // register the custom file protocol in redirect URI
- protocol.registerFileProtocol(redirectUri.split(":")[0], (req, callback) => {
- const requestUrl = url.parse(req.url, true);
- callback(path.normalize(`${__dirname}/${requestUrl.path}`));
- });
-
- const authCode = await listenForAuthCode(authCodeUrl, authWindow); // see below
-
- const authResponse = await pca.acquireTokenByCode({
- redirectUri: redirectUri,
- scopes: tokenRequest.scopes,
- code: authCode,
- codeVerifier: pkceCodes.verifier // PKCE Code Verifier
- });
-
- return authResponse;
-}
-
-/**
- * Listens for auth code response from Azure AD
- * @param {string} navigateUrl: URL where auth code response is parsed
- * @param {object} authWindow: Electron window object
- */
-async function listenForAuthCode(navigateUrl, authWindow) {
-
- authWindow.loadURL(navigateUrl);
-
- return new Promise((resolve, reject) => {
- authWindow.webContents.on('will-redirect', (event, responseUrl) => {
- try {
- const parsedUrl = new URL(responseUrl);
- const authCode = parsedUrl.searchParams.get('code');
- resolve(authCode);
- } catch (err) {
- reject(err);
- }
- });
- });
-}
-```
-
-> |Where:| Description |
-> |---------|---------|
-> | `authWindow` | Current Electron window in process. |
-> | `tokenRequest` | Contains the scopes being requested, such as `"User.Read"` for Microsoft Graph or `"api:///access_as_user"` for custom web APIs. |
-
## Next steps
To learn more about Electron desktop app development with MSAL Node, see the tutorial:
diff --git a/articles/active-directory/develop/includes/desktop-app/quickstart-uwp.md b/articles/active-directory/develop/includes/desktop-app/quickstart-uwp.md
index 93d43e5640d9e..a80a52b6ae5db 100644
--- a/articles/active-directory/develop/includes/desktop-app/quickstart-uwp.md
+++ b/articles/active-directory/develop/includes/desktop-app/quickstart-uwp.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Sign in users and call Microsoft Graph in a Universal Windows Platform app | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Sign in users and call Microsoft Graph in a Universal Windows Platform app"
description: In this quickstart, learn how a Universal Windows Platform (UWP) application can get an access token and call an API protected by Microsoft identity platform.
services: active-directory
author: jmprieur
@@ -9,7 +8,7 @@ ms.service: active-directory
ms.subservice: develop
ms.topic: include
ms.workload: identity
-ms.date: 03/04/2022
+ms.date: 05/19/2022
ms.author: jmprieur
ms.custom: aaddev, identityplatformtop40, "scenarios:getting-started", "languages:UWP", mode-api
#Customer intent: As an application developer, I want to learn how my Universal Windows Platform (UWP) application can get an access token and call an API that's protected by the Microsoft identity platform.
@@ -134,7 +133,7 @@ Some situations require forcing users to interact with the Microsoft identity pl
- When two factor authentication is required
```csharp
-authResult = await App.PublicClientApp.AcquireTokenInteractive(scopes)
+authResult = await PublicClientApp.AcquireTokenInteractive(scopes)
.ExecuteAsync();
```
@@ -145,9 +144,9 @@ The `scopes` parameter contains the scopes being requested, such as `{ "user.rea
Use the `AcquireTokenSilent` method to obtain tokens to access protected resources after the initial `AcquireTokenInteractive` method. You don’t want to require the user to validate their credentials every time they need to access a resource. Most of the time you want token acquisitions and renewal without any user interaction
```csharp
-var accounts = await App.PublicClientApp.GetAccountsAsync();
+var accounts = await PublicClientApp.GetAccountsAsync();
var firstAccount = accounts.FirstOrDefault();
-authResult = await App.PublicClientApp.AcquireTokenSilent(scopes, firstAccount)
+authResult = await PublicClientApp.AcquireTokenSilent(scopes, firstAccount)
.ExecuteAsync();
```
diff --git a/articles/active-directory/develop/includes/desktop-app/quickstart-windows-desktop.md b/articles/active-directory/develop/includes/desktop-app/quickstart-windows-desktop.md
index a6e406c3f0b0c..592e9feab9091 100644
--- a/articles/active-directory/develop/includes/desktop-app/quickstart-windows-desktop.md
+++ b/articles/active-directory/develop/includes/desktop-app/quickstart-windows-desktop.md
@@ -1,5 +1,5 @@
---
-title: "Quickstart: Sign in users and call Microsoft Graph in a Windows desktop app | Azure"
+title: "Quickstart: Sign in users and call Microsoft Graph in a Windows desktop app"
description: Learn how a Windows Presentation Foundation (WPF) application can get an access token and call an API protected by the Microsoft identity platform.
services: active-directory
author: jmprieur
@@ -8,7 +8,7 @@ ms.service: active-directory
ms.subservice: develop
ms.topic: include
ms.workload: identity
-ms.date: 03/04/2022
+ms.date: 05/19/2022
ms.author: jmprieur
ms.custom: aaddev, identityplatformtop40, mode-api
#Customer intent: As an application developer, I want to learn how my Windows Presentation Foundation (WPF) application can get an access token and call an API that's protected by the Microsoft identity platform.
@@ -134,7 +134,7 @@ Some situations require forcing users interact with the Microsoft identity platf
- When two factor authentication is required
```csharp
-authResult = await App.PublicClientApp.AcquireTokenInteractive(_scopes)
+authResult = await app.AcquireTokenInteractive(_scopes)
.ExecuteAsync();
```
@@ -147,9 +147,9 @@ authResult = await App.PublicClientApp.AcquireTokenInteractive(_scopes)
You don't want to require the user to validate their credentials every time they need to access a resource. Most of the time you want token acquisitions and renewal without any user interaction. You can use the `AcquireTokenSilent` method to obtain tokens to access protected resources after the initial `AcquireTokenInteractive` method:
```csharp
-var accounts = await App.PublicClientApp.GetAccountsAsync();
+var accounts = await app.GetAccountsAsync();
var firstAccount = accounts.FirstOrDefault();
-authResult = await App.PublicClientApp.AcquireTokenSilent(scopes, firstAccount)
+authResult = await app.AcquireTokenSilent(scopes, firstAccount)
.ExecuteAsync();
```
diff --git a/articles/active-directory/develop/includes/mobile-app/quickstart-android.md b/articles/active-directory/develop/includes/mobile-app/quickstart-android.md
index 167767eba00b9..b446e8905dcdd 100644
--- a/articles/active-directory/develop/includes/mobile-app/quickstart-android.md
+++ b/articles/active-directory/develop/includes/mobile-app/quickstart-android.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Add sign in with Microsoft to an Android app | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Add sign in with Microsoft to an Android app"
description: In this quickstart, learn how Android applications can call an API that requires access tokens issued by the Microsoft identity platform.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/includes/mobile-app/quickstart-ios.md b/articles/active-directory/develop/includes/mobile-app/quickstart-ios.md
index bf90794551262..332b4d42e6e66 100644
--- a/articles/active-directory/develop/includes/mobile-app/quickstart-ios.md
+++ b/articles/active-directory/develop/includes/mobile-app/quickstart-ios.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Add sign in with Microsoft to an iOS or macOS app | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Add sign in with Microsoft to an iOS or macOS app"
description: In this quickstart, learn how an iOS or macOS app can sign in users, get an access token from the Microsoft identity platform, and call the Microsoft Graph API.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/includes/single-page-app/quickstart-angular.md b/articles/active-directory/develop/includes/single-page-app/quickstart-angular.md
index e56794febaed9..319c5f098b027 100644
--- a/articles/active-directory/develop/includes/single-page-app/quickstart-angular.md
+++ b/articles/active-directory/develop/includes/single-page-app/quickstart-angular.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Sign in users in JavaScript Angular single-page apps (SPA) with auth code and call Microsoft Graph | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Sign in users in JavaScript Angular single-page apps (SPA) with auth code and call Microsoft Graph"
description: In this quickstart, learn how a JavaScript Angular single-page application (SPA) can sign in users of personal accounts, work accounts, and school accounts by using the authorization code flow and call Microsoft Graph.
services: active-directory
author: j-mantu
diff --git a/articles/active-directory/develop/includes/single-page-app/quickstart-javascript.md b/articles/active-directory/develop/includes/single-page-app/quickstart-javascript.md
index dd0a910dd59a5..ef9c5f546b348 100644
--- a/articles/active-directory/develop/includes/single-page-app/quickstart-javascript.md
+++ b/articles/active-directory/develop/includes/single-page-app/quickstart-javascript.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Sign in users in JavaScript single-page apps (SPA) with auth code | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Sign in users in JavaScript single-page apps (SPA) with auth code"
description: In this quickstart, learn how a JavaScript single-page application (SPA) can sign in users of personal accounts, work accounts, and school accounts by using the authorization code flow.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/includes/single-page-app/quickstart-react.md b/articles/active-directory/develop/includes/single-page-app/quickstart-react.md
index 25bf1bea8de1f..6af4df2fde295 100644
--- a/articles/active-directory/develop/includes/single-page-app/quickstart-react.md
+++ b/articles/active-directory/develop/includes/single-page-app/quickstart-react.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Sign in users in JavaScript React single-page apps (SPA) with auth code and call Microsoft Graph | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Sign in users in JavaScript React single-page apps (SPA) with auth code and call Microsoft Graph"
description: In this quickstart, learn how a JavaScript React single-page application (SPA) can sign in users of personal accounts, work accounts, and school accounts by using the authorization code flow and call Microsoft Graph.
services: active-directory
author: j-mantu
diff --git a/articles/active-directory/develop/includes/suggest-msal-from-protocols.md b/articles/active-directory/develop/includes/suggest-msal-from-protocols.md
index a493fec534602..e2e74d2f90d52 100644
--- a/articles/active-directory/develop/includes/suggest-msal-from-protocols.md
+++ b/articles/active-directory/develop/includes/suggest-msal-from-protocols.md
@@ -1,5 +1,5 @@
---
-title: Prefer MSAL | Azure
+title: Prefer MSAL
description: Include file indicating that it's best to use MSAL.
services: active-directory
author: nickludwig
diff --git a/articles/active-directory/develop/includes/try-in-postman-link.md b/articles/active-directory/develop/includes/try-in-postman-link.md
index 912a09dee9968..98e92677e35ba 100644
--- a/articles/active-directory/develop/includes/try-in-postman-link.md
+++ b/articles/active-directory/develop/includes/try-in-postman-link.md
@@ -1,5 +1,5 @@
---
-title: Try the protocols in Postman | Azure
+title: Try the protocols in Postman
description: Standard link to use the Postman files
services: active-directory
author: nickludwig
diff --git a/articles/active-directory/develop/includes/web-api/quickstart-aspnet-core.md b/articles/active-directory/develop/includes/web-api/quickstart-aspnet-core.md
index 3ea1e36e32f85..88a19bbbbbe34 100644
--- a/articles/active-directory/develop/includes/web-api/quickstart-aspnet-core.md
+++ b/articles/active-directory/develop/includes/web-api/quickstart-aspnet-core.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Protect an ASP.NET Core web API with the Microsoft identity platform | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Protect an ASP.NET Core web API with the Microsoft identity platform"
description: In this quickstart, you download and modify a code sample that demonstrates how to protect an ASP.NET Core web API by using the Microsoft identity platform for authorization.
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/includes/web-api/quickstart-dotnet-native-aspnet.md b/articles/active-directory/develop/includes/web-api/quickstart-dotnet-native-aspnet.md
index 122a39f2e57a8..78929d853106c 100644
--- a/articles/active-directory/develop/includes/web-api/quickstart-dotnet-native-aspnet.md
+++ b/articles/active-directory/develop/includes/web-api/quickstart-dotnet-native-aspnet.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Call an ASP.NET web API that is protected by the Microsoft identity platform | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Call an ASP.NET web API that is protected by the Microsoft identity platform"
description: In this quickstart, learn how to call an ASP.NET web API that's protected by the Microsoft identity platform from a Windows Desktop (WPF) application.
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/includes/web-app/quickstart-aspnet-core.md b/articles/active-directory/develop/includes/web-app/quickstart-aspnet-core.md
index b76296caeef24..5c9f4bdb6ab29 100644
--- a/articles/active-directory/develop/includes/web-app/quickstart-aspnet-core.md
+++ b/articles/active-directory/develop/includes/web-app/quickstart-aspnet-core.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: ASP.NET Core web app that signs in users and calls Microsoft Graph | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: ASP.NET Core web app that signs in users and calls Microsoft Graph"
description: Learn how an ASP.NET Core web app leverages Microsoft.Identity.Web to implement Microsoft sign-in using OpenID Connect and call Microsoft Graph
services: active-directory
author: jmprieur
@@ -33,7 +32,7 @@ See [How the sample works](#how-the-sample-works) for an illustration.
1. Search for and select **Azure Active Directory**.
1. Under **Manage**, select **App registrations** > **New registration**.
1. For **Name**, enter a name for your application. For example, enter **AspNetCore-Quickstart**. Users of your app will see this name, and you can change it later.
-1. For **Redirect URI**, enter **https://localhost:44321/signin-oidc**.
+1. Set the **Redirect URI** type to **Web** and value to `https://localhost:44321/signin-oidc`.
1. Select **Register**.
1. Under **Manage**, select **Authentication**.
1. For **Front-channel logout URL**, enter **https://localhost:44321/signout-oidc**.
diff --git a/articles/active-directory/develop/includes/web-app/quickstart-aspnet.md b/articles/active-directory/develop/includes/web-app/quickstart-aspnet.md
index 00dd1d7eb14ef..a7c7a0fd8c55a 100644
--- a/articles/active-directory/develop/includes/web-app/quickstart-aspnet.md
+++ b/articles/active-directory/develop/includes/web-app/quickstart-aspnet.md
@@ -1,6 +1,5 @@
---
title: "Quickstart: ASP.NET web app that signs in users"
-titleSuffix: Microsoft identity platform
description: Download and run a code sample that shows how an ASP.NET web app can sign in Azure AD users.
services: active-directory
author: jmprieur
@@ -46,7 +45,8 @@ If you want to manually configure your application and code sample, use the foll
1. Search for and select **Azure Active Directory**.
1. Under **Manage**, select **App registrations** > **New registration**.
1. For **Name**, enter a name for your application. For example, enter **ASPNET-Quickstart**. Users of your app will see this name, and you can change it later.
-1. Add **https://localhost:44368/** in **Redirect URI**, and select **Register**.
+1. Set the **Redirect URI** type to **Web** and value to `https://localhost:44368/`.
+1. Select **Register**.
1. Under **Manage**, select **Authentication**.
1. In the **Implicit grant and hybrid flows** section, select **ID tokens**.
1. Select **Save**.
diff --git a/articles/active-directory/develop/includes/web-app/quickstart-java.md b/articles/active-directory/develop/includes/web-app/quickstart-java.md
index 50991e52e0362..a87acd087003b 100644
--- a/articles/active-directory/develop/includes/web-app/quickstart-java.md
+++ b/articles/active-directory/develop/includes/web-app/quickstart-java.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Add sign-in with Microsoft to a Java web app | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Add sign-in with Microsoft to a Java web app"
description: In this quickstart, you'll learn how to add sign-in with Microsoft to a Java web application by using OpenID Connect.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/includes/web-app/quickstart-nodejs-msal.md b/articles/active-directory/develop/includes/web-app/quickstart-nodejs-msal.md
index 6ccdb4ffd9831..c5ded10b6f603 100644
--- a/articles/active-directory/develop/includes/web-app/quickstart-nodejs-msal.md
+++ b/articles/active-directory/develop/includes/web-app/quickstart-nodejs-msal.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Add authentication to a Node.js web app with MSAL Node | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Add authentication to a Node.js web app with MSAL Node"
description: In this quickstart, you learn how to implement authentication with a Node.js web app and the Microsoft Authentication Library (MSAL) for Node.js.
services: active-directory
author: mmacy
@@ -16,7 +15,7 @@ ms.custom: aaddev, scenarios:getting-started, languages:js, devx-track-js
# Customer intent: As an application developer, I want to know how to set up authentication in a web application built using Node.js and MSAL Node.
---
-In this quickstart, you download and run a code sample that demonstrates how a Node.js web app can sign in users by using the authorization code flow. The code sample also demonstrates how to get an access token to call Microsoft Graph API.
+In this quickstart, you download and run a code sample that demonstrates how a Node.js web app can sign in users by using the authorization code flow. The code sample also demonstrates how to get an access token to call the Microsoft Graph API.
See [How the sample works](#how-the-sample-works) for an illustration.
@@ -37,8 +36,8 @@ This quickstart uses the Microsoft Authentication Library for Node.js (MSAL Node
1. If you have access to multiple tenants, use the **Directories + subscriptions** filter :::image type="icon" source="../../media/common/portal-directory-subscription-filter.png" border="false"::: in the top menu to switch to the tenant in which you want to register the application.
1. Under **Manage**, select **App registrations** > **New registration**.
1. Enter a **Name** for your application. Users of your app might see this name, and you can change it later.
-1. Under **Supported account types**, select **Accounts in any organizational directory and personal Microsoft accounts**.
-1. Set the **Redirect URI** value to `http://localhost:3000/redirect`.
+1. Under **Supported account types**, select **Accounts in this organizational directory only**.
+1. Set the **Redirect URI** type to **Web** and value to `http://localhost:3000/auth/redirect`.
1. Select **Register**.
1. On the app **Overview** page, note the **Application (client) ID** value for later use.
1. Under **Manage**, select **Certificates & secrets** > **Client secrets** > **New client secret**. Leave the description blank and default expiration, and then select **Add**.
@@ -51,45 +50,34 @@ To run the project with a web server by using Node.js, [download the core projec
#### Step 3: Configure your Node app
-Extract the project, open the *ms-identity-node-main* folder, and then open the *index.js* file.
-
-Set the `clientID` value with the application (client) ID, and then set the `clientSecret` value with the client secret.
-
-```javascript
-const config = {
- auth: {
- clientId: "Enter_the_Application_Id_Here",
- authority: "https://login.microsoftonline.com/common",
- clientSecret: "Enter_the_Client_Secret_Here"
- },
- system: {
- loggerOptions: {
- loggerCallback(loglevel, message, containsPii) {
- console.log(message);
- },
- piiLoggingEnabled: false,
- logLevel: msal.LogLevel.Verbose,
- }
- }
-};
-```
-
+Extract the project, open the *ms-identity-node-main* folder, and then open the *.env* file under the *App* folder. Replace the values above as follows:
-Modify the values in the `config` section:
+| Variable | Description | Example(s) |
+|-----------|--------------|------------|
+| `Enter_the_Cloud_Instance_Id_Here` | The Azure cloud instance in which your application is registered | `https://login.microsoftonline.com/` (include the trailing forward-slash) |
+| `Enter_the_Tenant_Info_here` | Tenant ID or Primary domain | `contoso.microsoft.com` or `cbe899ec-5f5c-4efe-b7a0-599505d3d54f` |
+| `Enter_the_Application_Id_Here` | Client ID of the application you registered | `cbe899ec-5f5c-4efe-b7a0-599505d3d54f` |
+| `Enter_the_Client_Secret_Here` | Client secret of the application you registered | `WxvhStRfDXoEiZQj1qCy` |
+| `Enter_the_Graph_Endpoint_Here` | The Microsoft Graph API cloud instance that your app will call | `https://graph.microsoft.com/` (include the trailing forward-slash) |
+| `Enter_the_Express_Session_Secret_Here` | A random string of characters used to sign the Express session cookie | `WxvhStRfDXoEiZQj1qCy` |
-- `Enter_the_Application_Id_Here` is the application (client) ID for the application you registered.
+Your file should look similar to below:
- To find the application (client) ID, go to the app registration's **Overview** page in the Azure portal.
-- `Enter_the_Client_Secret_Here` is the client secret for the application you registered.
+```text
+CLOUD_INSTANCE=https://login.microsoftonline.com/
+TENANT_ID=cbe899ec-5f5c-4efe-b7a0-599505d3d54f
+CLIENT_ID=fa29b4c9-7675-4b61-8a0a-bf7b2b4fda91
+CLIENT_SECRET=WxvhStRfDXoEiZQj1qCy
- To retrieve or generate a new client secret, under **Manage**, select **Certificates & secrets**.
+REDIRECT_URI=http://localhost:3000/auth/redirect
+POST_LOGOUT_REDIRECT_URI=http://localhost:3000
-The default `authority` value represents the main (global) Azure cloud:
+GRAPH_API_ENDPOINT=https://graph.microsoft.com/
-```javascript
-authority: "https://login.microsoftonline.com/common",
+EXPRESS_SESSION_SECRET=6DP6v09eLiW7f1E65B8k
```
+
#### Step 4: Run the project
Run the project by using Node.js.
@@ -97,21 +85,22 @@ Run the project by using Node.js.
1. To start the server, run the following commands from within the project directory:
```console
+ cd App
npm install
npm start
```
1. Go to `http://localhost:3000/`.
-1. Select **Sign In** to start the sign-in process.
+1. Select **Sign in** to start the sign-in process.
- The first time you sign in, you're prompted to provide your consent to allow the application to access your profile and sign you in. After you're signed in successfully, you will see a log message in the command line.
+ The first time you sign in, you're prompted to provide your consent to allow the application to sign you in and access your profile. After you're signed in successfully, you'll be redirected back to the application home page.
## More information
### How the sample works
-The sample hosts a web server on localhost, port 3000. When a web browser accesses this site, the sample immediately redirects the user to a Microsoft authentication page. Because of this, the sample does not contain any HTML or display elements. Authentication success displays the message "OK".
+The sample hosts a web server on localhost, port 3000. When a web browser accesses this address, the app renders the home page. Once the user selects **Sign in**, the app redirects the browser to Azure AD sign-in screen, via the URL generated by the MSAL Node library. After user consents, the browser redirects the user back to the application home page, along with an ID and access token.
### MSAL Node
@@ -123,5 +112,6 @@ npm install @azure/msal-node
## Next steps
+Learn more about the web app scenario that the Microsoft identity platform supports:
> [!div class="nextstepaction"]
-> [Adding Auth to an existing web app - GitHub code sample >](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/samples/msal-node-samples/auth-code)
+> [Web app that signs in users scenario](../../scenario-web-app-sign-user-overview.md)
diff --git a/articles/active-directory/develop/includes/web-app/quickstart-nodejs.md b/articles/active-directory/develop/includes/web-app/quickstart-nodejs.md
index 1a9fc72d7160e..f03303d429f25 100644
--- a/articles/active-directory/develop/includes/web-app/quickstart-nodejs.md
+++ b/articles/active-directory/develop/includes/web-app/quickstart-nodejs.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Add user sign-in to a Node.js web app | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Add user sign-in to a Node.js web app"
description: In this quickstart, you learn how to implement authentication in a Node.js web application using OpenID Connect.
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/includes/web-app/quickstart-python.md b/articles/active-directory/develop/includes/web-app/quickstart-python.md
index d32dde22f6c5d..7a7b0aa639861 100644
--- a/articles/active-directory/develop/includes/web-app/quickstart-python.md
+++ b/articles/active-directory/develop/includes/web-app/quickstart-python.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Add sign-in with Microsoft to a Python web app | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Add sign-in with Microsoft to a Python web app"
description: In this quickstart, learn how a Python web app can sign in users, get an access token from the Microsoft identity platform, and call the Microsoft Graph API.
services: active-directory
author: abhidnya13
diff --git a/articles/active-directory/develop/mark-app-as-publisher-verified.md b/articles/active-directory/develop/mark-app-as-publisher-verified.md
index 2bd2c4939f05f..b8a7e09000d69 100644
--- a/articles/active-directory/develop/mark-app-as-publisher-verified.md
+++ b/articles/active-directory/develop/mark-app-as-publisher-verified.md
@@ -1,5 +1,5 @@
---
-title: Mark an app as publisher verified - Microsoft identity platform | Azure
+title: Mark an app as publisher verified
description: Describes how to mark an app as publisher verified. When an application is marked as publisher verified, it means that the publisher has verified their identity using a Microsoft Partner Network account that has completed the verification process and has associated this MPN account with their application registration.
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/media/tutorial-v2-nodejs-webapp-msal/graph-call-screen.png b/articles/active-directory/develop/media/tutorial-v2-nodejs-webapp-msal/graph-call-screen.png
new file mode 100644
index 0000000000000..366d9f849001d
Binary files /dev/null and b/articles/active-directory/develop/media/tutorial-v2-nodejs-webapp-msal/graph-call-screen.png differ
diff --git a/articles/active-directory/develop/media/tutorial-v2-nodejs-webapp-msal/id-token-screen.png b/articles/active-directory/develop/media/tutorial-v2-nodejs-webapp-msal/id-token-screen.png
new file mode 100644
index 0000000000000..7b101c7d24bf3
Binary files /dev/null and b/articles/active-directory/develop/media/tutorial-v2-nodejs-webapp-msal/id-token-screen.png differ
diff --git a/articles/active-directory/develop/media/tutorial-v2-nodejs-webapp-msal/post-sign-in-screen.png b/articles/active-directory/develop/media/tutorial-v2-nodejs-webapp-msal/post-sign-in-screen.png
new file mode 100644
index 0000000000000..278d3c2a6b8d9
Binary files /dev/null and b/articles/active-directory/develop/media/tutorial-v2-nodejs-webapp-msal/post-sign-in-screen.png differ
diff --git a/articles/active-directory/develop/media/tutorial-v2-nodejs-webapp-msal/sign-out-screen.png b/articles/active-directory/develop/media/tutorial-v2-nodejs-webapp-msal/sign-out-screen.png
new file mode 100644
index 0000000000000..fc47e78a9ab3c
Binary files /dev/null and b/articles/active-directory/develop/media/tutorial-v2-nodejs-webapp-msal/sign-out-screen.png differ
diff --git a/articles/active-directory/develop/media/tutorial-v2-nodejs-webapp-msal/welcome-screen.png b/articles/active-directory/develop/media/tutorial-v2-nodejs-webapp-msal/welcome-screen.png
new file mode 100644
index 0000000000000..f7a25c5d8aa19
Binary files /dev/null and b/articles/active-directory/develop/media/tutorial-v2-nodejs-webapp-msal/welcome-screen.png differ
diff --git a/articles/active-directory/develop/microsoft-graph-intro.md b/articles/active-directory/develop/microsoft-graph-intro.md
index 4deffd4d31998..b485729658056 100644
--- a/articles/active-directory/develop/microsoft-graph-intro.md
+++ b/articles/active-directory/develop/microsoft-graph-intro.md
@@ -1,7 +1,7 @@
---
title: Microsoft Graph API
description: The Microsoft Graph API is a RESTful web API that enables you to access Microsoft Cloud service resources.
-author: davidmu1
+author: FaithOmbongi
services: active-directory
manager: CelesteDG
@@ -10,7 +10,7 @@ ms.subservice: develop
ms.topic: conceptual
ms.workload: identity
ms.date: 10/08/2021
-ms.author: davidmu
+ms.author: ombongifaith
ms.custom: aaddev
---
diff --git a/articles/active-directory/develop/microsoft-identity-web.md b/articles/active-directory/develop/microsoft-identity-web.md
index f52d9a1da79e4..38b6d58f54822 100644
--- a/articles/active-directory/develop/microsoft-identity-web.md
+++ b/articles/active-directory/develop/microsoft-identity-web.md
@@ -1,6 +1,5 @@
---
title: Microsoft Identity Web authentication library overview
-titleSuffix: Microsoft identity platform
description: Learn about Microsoft Identity Web, an authentication and authorization library for ASP.NET Core applications that integrate with Azure Active Directory, Azure AD B2C, and Microsoft Graph and other web APIs.
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/migrate-adal-msal-java.md b/articles/active-directory/develop/migrate-adal-msal-java.md
index 401a235926a76..fbc8de9b35f0d 100644
--- a/articles/active-directory/develop/migrate-adal-msal-java.md
+++ b/articles/active-directory/develop/migrate-adal-msal-java.md
@@ -1,6 +1,5 @@
---
-title: ADAL to MSAL migration guide (MSAL4j) | Azure
-titleSuffix: Microsoft identity platform
+title: ADAL to MSAL migration guide (MSAL4j)
description: Learn how to migrate your Azure Active Directory Authentication Library (ADAL) Java app to the Microsoft Authentication Library (MSAL).
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/migrate-android-adal-msal.md b/articles/active-directory/develop/migrate-android-adal-msal.md
index 84effdc70b2ee..11bc3af565f0b 100644
--- a/articles/active-directory/develop/migrate-android-adal-msal.md
+++ b/articles/active-directory/develop/migrate-android-adal-msal.md
@@ -1,6 +1,5 @@
---
-title: ADAL to MSAL migration guide for Android | Azure
-titleSuffix: Microsoft identity platform
+title: ADAL to MSAL migration guide for Android
description: Learn how to migrate your Azure Active Directory Authentication Library (ADAL) Android app to the Microsoft Authentication Library (MSAL).
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/migrate-objc-adal-msal.md b/articles/active-directory/develop/migrate-objc-adal-msal.md
index 973ab6749ebe2..088d81297f13b 100644
--- a/articles/active-directory/develop/migrate-objc-adal-msal.md
+++ b/articles/active-directory/develop/migrate-objc-adal-msal.md
@@ -1,6 +1,5 @@
---
-title: ADAL to MSAL migration guide (MSAL iOS/macOS) | Azure
-titleSuffix: Microsoft identity platform
+title: ADAL to MSAL migration guide (MSAL iOS/macOS)
description: Learn the differences between MSAL for iOS/macOS and the Azure AD Authentication Library for ObjectiveC (ADAL.ObjC) and how to migrate to MSAL for iOS/macOS.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/migrate-python-adal-msal.md b/articles/active-directory/develop/migrate-python-adal-msal.md
index ada6c68919b5c..8bb1e01125ac8 100644
--- a/articles/active-directory/develop/migrate-python-adal-msal.md
+++ b/articles/active-directory/develop/migrate-python-adal-msal.md
@@ -1,6 +1,5 @@
---
-title: Python ADAL to MSAL migration guide | Azure
-titleSuffix: Microsoft identity platform
+title: Python ADAL to MSAL migration guide
description: Learn how to migrate your Azure Active Directory Authentication Library (ADAL) Python app to the Microsoft Authentication Library (MSAL) for Python.
services: active-directory
author: rayluo
diff --git a/articles/active-directory/develop/migrate-spa-implicit-to-auth-code.md b/articles/active-directory/develop/migrate-spa-implicit-to-auth-code.md
index 7cd2e7207d188..d38bef57aabba 100644
--- a/articles/active-directory/develop/migrate-spa-implicit-to-auth-code.md
+++ b/articles/active-directory/develop/migrate-spa-implicit-to-auth-code.md
@@ -1,6 +1,5 @@
---
-title: Migrate JavaScript single-page app from implicit grant to authorization code flow | Azure
-titleSuffix: Microsoft identity platform
+title: Migrate JavaScript single-page app from implicit grant to authorization code flow
description: How to update a JavaScript SPA using MSAL.js 1.x and the implicit grant flow to MSAL.js 2.x and the authorization code flow with PKCE and CORS support.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/mobile-app-quickstart-portal-android.md b/articles/active-directory/develop/mobile-app-quickstart-portal-android.md
index edab8ca0d69b6..a6642a315edd9 100644
--- a/articles/active-directory/develop/mobile-app-quickstart-portal-android.md
+++ b/articles/active-directory/develop/mobile-app-quickstart-portal-android.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Add sign in with Microsoft to an Android app | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Add sign in with Microsoft to an Android app"
description: In this quickstart, learn how Android applications can call an API that requires access tokens issued by the Microsoft identity platform.
services: active-directory
author: mmacy
@@ -24,7 +23,7 @@ ms.custom: aaddev, identityplatformtop40, "scenarios:getting-started", "language
>
> We apologize for the inconvenience and appreciate your patience while we work to get this resolved.
-> [!div renderon="portal" class="sxs-lookup display-on-portal"]
+> [!div renderon="portal" id="display-on-portal" class="sxs-lookup"]
> # Quickstart: Sign in users and call the Microsoft Graph API from an Android app
>
> In this quickstart, you download and run a code sample that demonstrates how an Android application can sign in users and get an access token to call the Microsoft Graph API.
@@ -42,7 +41,7 @@ ms.custom: aaddev, identityplatformtop40, "scenarios:getting-started", "language
> ### Step 1: Configure your application in the Azure portal
> For the code sample in this quickstart to work, add a **Redirect URI** compatible with the Auth broker.
>
->
+>
>
> > [!div id="appconfigured" class="alert alert-info"]
> > ![Already configured](media/quickstart-v2-android/green-check.png) Your application is configured with these attributes
@@ -50,7 +49,9 @@ ms.custom: aaddev, identityplatformtop40, "scenarios:getting-started", "language
> ### Step 2: Download the project
>
> Run the project using Android Studio.
->
+>
+> > [!div class="nextstepaction"]
+> >
>
>
> ### Step 3: Your app is configured and ready to run
@@ -484,4 +485,4 @@ ms.custom: aaddev, identityplatformtop40, "scenarios:getting-started", "language
> Move on to the Android tutorial in which you build an Android app that gets an access token from the Microsoft identity platform and uses it to call the Microsoft Graph API.
>
> > [!div class="nextstepaction"]
-> > [Tutorial: Sign in users and call the Microsoft Graph from an Android application](tutorial-v2-android.md)
\ No newline at end of file
+> > [Tutorial: Sign in users and call the Microsoft Graph from an Android application](tutorial-v2-android.md)
diff --git a/articles/active-directory/develop/mobile-app-quickstart-portal-ios.md b/articles/active-directory/develop/mobile-app-quickstart-portal-ios.md
index 87e9bc2f40c53..24a5f4e718f68 100644
--- a/articles/active-directory/develop/mobile-app-quickstart-portal-ios.md
+++ b/articles/active-directory/develop/mobile-app-quickstart-portal-ios.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Add sign in with Microsoft to an iOS or macOS app | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Add sign in with Microsoft to an iOS or macOS app"
description: In this quickstart, learn how an iOS or macOS app can sign in users, get an access token from the Microsoft identity platform, and call the Microsoft Graph API.
services: active-directory
author: mmacy
@@ -26,7 +25,7 @@ ms.custom: aaddev, identityplatformtop40, "scenarios:getting-started", "language
>
> We apologize for the inconvenience and appreciate your patience while we work to get this resolved.
-> [!div renderon="portal" class="sxs-lookup display-on-portal"]
+> [!div renderon="portal" id="display-on-portal" class="sxs-lookup"]
> # Quickstart: Sign in users and call the Microsoft Graph API from an iOS or macOS app
>
> In this quickstart, you download and run a code sample that demonstrates how a native iOS or macOS application can sign in users and get an access token to call the Microsoft Graph API.
@@ -47,16 +46,18 @@ ms.custom: aaddev, identityplatformtop40, "scenarios:getting-started", "language
> #### Step 1: Configure your application
> For the code sample in this quickstart to work, add a **Redirect URI** compatible with the Auth broker.
>
->
+>
>
> > [!div id="appconfigured" class="alert alert-info"]
> > ![Already configured](media/quickstart-v2-ios/green-check.png) Your application is configured with these attributes
>
> #### Step 2: Download the sample project
>
->
->
->
+> > [!div class="nextstepaction"]
+> >
+>
+> > [!div class="nextstepaction"]
+> >
>
> #### Step 3: Install dependencies
>
@@ -238,4 +239,4 @@ ms.custom: aaddev, identityplatformtop40, "scenarios:getting-started", "language
> Move on to the step-by-step tutorial in which you build an iOS or macOS app that gets an access token from the Microsoft identity platform and uses it to call the Microsoft Graph API.
>
> > [!div class="nextstepaction"]
-> > [Tutorial: Sign in users and call Microsoft Graph from an iOS or macOS app](tutorial-v2-ios.md)
\ No newline at end of file
+> > [Tutorial: Sign in users and call Microsoft Graph from an iOS or macOS app](tutorial-v2-ios.md)
diff --git a/articles/active-directory/develop/mobile-app-quickstart.md b/articles/active-directory/develop/mobile-app-quickstart.md
index 25073a37c7bb2..739a3432ed7ff 100644
--- a/articles/active-directory/develop/mobile-app-quickstart.md
+++ b/articles/active-directory/develop/mobile-app-quickstart.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Add sign in with Microsoft to a mobile app | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Add sign in with Microsoft to a mobile app"
description: In this quickstart, learn how a mobile app can sign in users, get an access token from the Microsoft identity platform, and call the Microsoft Graph API.
services: active-directory
author: Dickson-Mwendia
diff --git a/articles/active-directory/develop/mobile-sso-support-overview.md b/articles/active-directory/develop/mobile-sso-support-overview.md
index f27091d00cef2..7fbea6ae683b9 100644
--- a/articles/active-directory/develop/mobile-sso-support-overview.md
+++ b/articles/active-directory/develop/mobile-sso-support-overview.md
@@ -1,6 +1,5 @@
---
-title: Support single sign-on and app protection policies in mobile apps you develop | Azure
-titleSuffix: Microsoft identity platform
+title: Support single sign-on and app protection policies in mobile apps you develop
description: Explanation and overview of building mobile applications that support single sign-on and app protection policies using the Microsoft identity platform and integrating with Azure Active Directory.
services: active-directory
author: knicholasa
diff --git a/articles/active-directory/develop/msal-acquire-cache-tokens.md b/articles/active-directory/develop/msal-acquire-cache-tokens.md
index 02fc388122079..c102d029077dd 100644
--- a/articles/active-directory/develop/msal-acquire-cache-tokens.md
+++ b/articles/active-directory/develop/msal-acquire-cache-tokens.md
@@ -1,6 +1,5 @@
---
-title: Acquire and cache tokens with Microsoft Authentication Library (MSAL) | Azure
-titleSuffix: Microsoft identity platform
+title: Acquire and cache tokens with Microsoft Authentication Library (MSAL)
description: Learn about acquiring and caching tokens using MSAL.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-android-b2c.md b/articles/active-directory/develop/msal-android-b2c.md
index c6fa91e10f199..4be52c906cfc0 100644
--- a/articles/active-directory/develop/msal-android-b2c.md
+++ b/articles/active-directory/develop/msal-android-b2c.md
@@ -1,6 +1,5 @@
---
-title: Azure AD B2C (MSAL Android) | Azure
-titleSuffix: Microsoft identity platform
+title: Azure AD B2C (MSAL Android)
description: Learn about specific considerations when using Azure AD B2C with the Microsoft Authentication Library for Android (MSAL.Android)
services: active-directory
author: iambmelt
diff --git a/articles/active-directory/develop/msal-android-handling-exceptions.md b/articles/active-directory/develop/msal-android-handling-exceptions.md
index 116c0a77d3d95..dd1b08cb3974a 100644
--- a/articles/active-directory/develop/msal-android-handling-exceptions.md
+++ b/articles/active-directory/develop/msal-android-handling-exceptions.md
@@ -1,6 +1,5 @@
---
-title: Errors and exceptions (MSAL Android) | Azure
-titleSuffix: Microsoft identity platform
+title: Errors and exceptions (MSAL Android)
description: Learn how to handle errors and exceptions, Conditional Access, and claims challenges in MSAL Android applications.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-android-shared-devices.md b/articles/active-directory/develop/msal-android-shared-devices.md
index 8b301fe3ec423..f368ed5c765e3 100644
--- a/articles/active-directory/develop/msal-android-shared-devices.md
+++ b/articles/active-directory/develop/msal-android-shared-devices.md
@@ -1,6 +1,5 @@
---
title: Shared device mode for Android devices
-titleSuffix: Microsoft identity platform | Azure
description: Learn how to enable shared device mode to allow frontline workers to share an Android device
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-android-single-sign-on.md b/articles/active-directory/develop/msal-android-single-sign-on.md
index dac9a22556879..53c7104c9e4cb 100644
--- a/articles/active-directory/develop/msal-android-single-sign-on.md
+++ b/articles/active-directory/develop/msal-android-single-sign-on.md
@@ -1,6 +1,5 @@
---
-title: How to enable cross-app SSO on Android using MSAL | Azure
-titleSuffix: Microsoft identity platform
+title: How to enable cross-app SSO on Android using MSAL
description: How to use the Microsoft Authentication Library (MSAL) for Android to enable single sign-on across your applications.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-authentication-flows.md b/articles/active-directory/develop/msal-authentication-flows.md
index 23266605ee204..9cdd5e5c0b4d0 100644
--- a/articles/active-directory/develop/msal-authentication-flows.md
+++ b/articles/active-directory/develop/msal-authentication-flows.md
@@ -1,6 +1,5 @@
---
-title: Authentication flow support in the Microsoft Authentication Library (MSAL) | Azure
-titleSuffix: Microsoft identity platform
+title: Authentication flow support in the Microsoft Authentication Library (MSAL)
description: Learn about the authorization grants and authentication flows supported by MSAL.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-b2c-overview.md b/articles/active-directory/develop/msal-b2c-overview.md
index e0ec3b8d8fe8c..99ab9f9f40bd3 100644
--- a/articles/active-directory/develop/msal-b2c-overview.md
+++ b/articles/active-directory/develop/msal-b2c-overview.md
@@ -1,6 +1,5 @@
---
title: Use MSAL.js with Azure AD B2C
-titleSuffix: Microsoft identity platform
description: The Microsoft Authentication Library for JavaScript (MSAL.js) enables applications to work with Azure AD B2C and acquire tokens to call secured web APIs. These web APIs can be Microsoft Graph, other Microsoft APIs, web APIs from others, or your own web API.
services: active-directory
author: negoe
diff --git a/articles/active-directory/develop/msal-client-application-configuration.md b/articles/active-directory/develop/msal-client-application-configuration.md
index 5b0fbf4a786bd..7861a0522c29a 100644
--- a/articles/active-directory/develop/msal-client-application-configuration.md
+++ b/articles/active-directory/develop/msal-client-application-configuration.md
@@ -1,6 +1,5 @@
---
-title: Client application configuration (MSAL) | Azure
-titleSuffix: Microsoft identity platform
+title: Client application configuration (MSAL)
description: Learn about configuration options for public client and confidential client applications using the Microsoft Authentication Library (MSAL).
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-client-applications.md b/articles/active-directory/develop/msal-client-applications.md
index f0b5b5fb1760c..1fe87af8400f6 100644
--- a/articles/active-directory/develop/msal-client-applications.md
+++ b/articles/active-directory/develop/msal-client-applications.md
@@ -1,6 +1,5 @@
---
-title: Public and confidential client apps (MSAL) | Azure
-titleSuffix: Microsoft identity platform
+title: Public and confidential client apps (MSAL)
description: Learn about public client and confidential client applications in the Microsoft Authentication Library (MSAL).
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-compare-msal-js-and-adal-js.md b/articles/active-directory/develop/msal-compare-msal-js-and-adal-js.md
index 3853165322312..365a4511f47eb 100644
--- a/articles/active-directory/develop/msal-compare-msal-js-and-adal-js.md
+++ b/articles/active-directory/develop/msal-compare-msal-js-and-adal-js.md
@@ -1,6 +1,5 @@
---
-title: "Migrate your JavaScript application from ADAL.js to MSAL.js | Azure"
-titleSuffix: Microsoft identity platform
+title: "Migrate your JavaScript application from ADAL.js to MSAL.js"
description: How to update your existing JavaScript application to use the Microsoft Authentication Library (MSAL) for authentication and authorization instead of the Active Directory Authentication Library (ADAL).
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-configuration.md b/articles/active-directory/develop/msal-configuration.md
index 1480cf626713c..306cd2335b226 100644
--- a/articles/active-directory/develop/msal-configuration.md
+++ b/articles/active-directory/develop/msal-configuration.md
@@ -1,6 +1,5 @@
---
-title: Android MSAL configuration file | Azure
-titleSuffix: Microsoft identity platform
+title: Android MSAL configuration file
description: An overview of the Android Microsoft Authentication Library (MSAL) configuration file, which represents an application's configuration in Azure Active Directory.
services: active-directory
author: shoatman
diff --git a/articles/active-directory/develop/msal-differences-ios-macos.md b/articles/active-directory/develop/msal-differences-ios-macos.md
index e349aae040c05..18af77312825e 100644
--- a/articles/active-directory/develop/msal-differences-ios-macos.md
+++ b/articles/active-directory/develop/msal-differences-ios-macos.md
@@ -1,6 +1,5 @@
---
-title: MSAL for iOS & macOS differences | Azure
-titleSuffix: Microsoft identity platform
+title: MSAL for iOS & macOS differences
description: Describes the Microsoft Authentication Library (MSAL) usage differences between iOS and macOS.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-error-handling-dotnet.md b/articles/active-directory/develop/msal-error-handling-dotnet.md
index 59eb215ba2a3b..219184d01c78f 100644
--- a/articles/active-directory/develop/msal-error-handling-dotnet.md
+++ b/articles/active-directory/develop/msal-error-handling-dotnet.md
@@ -1,6 +1,5 @@
---
title: Handle errors and exceptions in MSAL.NET
-titleSuffix: Microsoft identity platform
description: Learn how to handle errors and exceptions, Conditional Access claims challenges, and retries in MSAL.NET.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-error-handling-ios.md b/articles/active-directory/develop/msal-error-handling-ios.md
index 09c8db32f7704..192cc8f59f084 100644
--- a/articles/active-directory/develop/msal-error-handling-ios.md
+++ b/articles/active-directory/develop/msal-error-handling-ios.md
@@ -1,6 +1,5 @@
---
title: Handle errors and exceptions in MSAL for iOS/macOS
-titleSuffix: Microsoft identity platform
description: Learn how to handle errors and exceptions, Conditional Access claims challenges, and retries in MSAL for iOS/macOS applications.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-error-handling-java.md b/articles/active-directory/develop/msal-error-handling-java.md
index f866d03bd3642..56476a017a7e4 100644
--- a/articles/active-directory/develop/msal-error-handling-java.md
+++ b/articles/active-directory/develop/msal-error-handling-java.md
@@ -1,6 +1,5 @@
---
title: Handle errors and exceptions in MSAL4J
-titleSuffix: Microsoft identity platform
description: Learn how to handle errors and exceptions, Conditional Access claims challenges, and retries in MSAL4J applications.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-error-handling-js.md b/articles/active-directory/develop/msal-error-handling-js.md
index c3f320b1533d0..ae92640221232 100644
--- a/articles/active-directory/develop/msal-error-handling-js.md
+++ b/articles/active-directory/develop/msal-error-handling-js.md
@@ -1,6 +1,5 @@
---
title: Handle errors and exceptions in MSAL.js
-titleSuffix: Microsoft identity platform
description: Learn how to handle errors and exceptions, Conditional Access claims challenges, and retries in MSAL.js applications.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-error-handling-python.md b/articles/active-directory/develop/msal-error-handling-python.md
index 5a6d84fe50a14..520ddd12b6ca3 100644
--- a/articles/active-directory/develop/msal-error-handling-python.md
+++ b/articles/active-directory/develop/msal-error-handling-python.md
@@ -1,6 +1,5 @@
---
title: Handle errors and exceptions in MSAL for Python
-titleSuffix: Microsoft identity platform
description: Learn how to handle errors and exceptions, Conditional Access claims challenges, and retries in MSAL for Python applications.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-ios-shared-devices.md b/articles/active-directory/develop/msal-ios-shared-devices.md
index 7a40fb3bb550f..3b4e14cef517d 100644
--- a/articles/active-directory/develop/msal-ios-shared-devices.md
+++ b/articles/active-directory/develop/msal-ios-shared-devices.md
@@ -1,6 +1,5 @@
---
title: Shared device mode for iOS devices
-titleSuffix: Microsoft identity platform | Azure
description: Learn how to enable shared device mode to allow frontline workers to share an iOS device
services: active-directory
author: brandwe
diff --git a/articles/active-directory/develop/msal-java-adfs-support.md b/articles/active-directory/develop/msal-java-adfs-support.md
index 01bc576b5007d..6e3e599981747 100644
--- a/articles/active-directory/develop/msal-java-adfs-support.md
+++ b/articles/active-directory/develop/msal-java-adfs-support.md
@@ -1,6 +1,5 @@
---
title: AD FS support (MSAL for Java)
-titleSuffix: Microsoft identity platform
description: Learn about Active Directory Federation Services (AD FS) support in the Microsoft Authentication Library for Java (MSAL4j).
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-java-get-remove-accounts-token-cache.md b/articles/active-directory/develop/msal-java-get-remove-accounts-token-cache.md
index 182f6062199a5..546f42321b67d 100644
--- a/articles/active-directory/develop/msal-java-get-remove-accounts-token-cache.md
+++ b/articles/active-directory/develop/msal-java-get-remove-accounts-token-cache.md
@@ -1,6 +1,5 @@
---
-title: Get & remove accounts from the token cache (MSAL4j) | Azure
-titleSuffix: Microsoft identity platform
+title: Get & remove accounts from the token cache (MSAL4j)
description: Learn how to view and remove accounts from the token cache using the Microsoft Authentication Library for Java.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-java-token-cache-serialization.md b/articles/active-directory/develop/msal-java-token-cache-serialization.md
index e73902780334e..12158f3b1cdc0 100644
--- a/articles/active-directory/develop/msal-java-token-cache-serialization.md
+++ b/articles/active-directory/develop/msal-java-token-cache-serialization.md
@@ -1,6 +1,5 @@
---
title: Custom token cache serialization (MSAL4j)
-titleSuffix: Microsoft identity platform
description: Learn how to serialize the token cache for MSAL for Java
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-js-avoid-page-reloads.md b/articles/active-directory/develop/msal-js-avoid-page-reloads.md
index 786ded358e9c0..8b3a5729f9cec 100644
--- a/articles/active-directory/develop/msal-js-avoid-page-reloads.md
+++ b/articles/active-directory/develop/msal-js-avoid-page-reloads.md
@@ -1,6 +1,5 @@
---
-title: Avoid page reloads (MSAL.js) | Azure
-titleSuffix: Microsoft identity platform
+title: Avoid page reloads (MSAL.js)
description: Learn how to avoid page reloads when acquiring and renewing tokens silently using the Microsoft Authentication Library for JavaScript (MSAL.js).
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-js-initializing-client-applications.md b/articles/active-directory/develop/msal-js-initializing-client-applications.md
index 7bd6aa6c48368..d30a2dceb2a75 100644
--- a/articles/active-directory/develop/msal-js-initializing-client-applications.md
+++ b/articles/active-directory/develop/msal-js-initializing-client-applications.md
@@ -1,6 +1,5 @@
---
-title: Initialize MSAL.js client apps | Azure
-titleSuffix: Microsoft identity platform
+title: Initialize MSAL.js client apps
description: Learn about initializing client applications using the Microsoft Authentication Library for JavaScript (MSAL.js).
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-js-known-issues-ie-edge-browsers.md b/articles/active-directory/develop/msal-js-known-issues-ie-edge-browsers.md
index cf0a752e880ac..d11ffcd6f2abb 100644
--- a/articles/active-directory/develop/msal-js-known-issues-ie-edge-browsers.md
+++ b/articles/active-directory/develop/msal-js-known-issues-ie-edge-browsers.md
@@ -1,6 +1,5 @@
---
-title: Issues on Internet Explorer & Microsoft Edge (MSAL.js) | Azure
-titleSuffix: Microsoft identity platform
+title: Issues on Internet Explorer & Microsoft Edge (MSAL.js)
description: Learn about know issues when using the Microsoft Authentication Library for JavaScript (MSAL.js) with Internet Explorer and Microsoft Edge browsers.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-js-pass-custom-state-authentication-request.md b/articles/active-directory/develop/msal-js-pass-custom-state-authentication-request.md
index 1241660c0dd50..6e01937743269 100644
--- a/articles/active-directory/develop/msal-js-pass-custom-state-authentication-request.md
+++ b/articles/active-directory/develop/msal-js-pass-custom-state-authentication-request.md
@@ -1,6 +1,5 @@
---
-title: Pass custom state in authentication requests (MSAL.js) | Azure
-titleSuffix: Microsoft identity platform
+title: Pass custom state in authentication requests (MSAL.js)
description: Learn how to pass a custom state parameter value in authentication request using the Microsoft Authentication Library for JavaScript (MSAL.js).
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-js-prompt-behavior.md b/articles/active-directory/develop/msal-js-prompt-behavior.md
index 0825c5d90ad48..614ac7a1ce3b7 100644
--- a/articles/active-directory/develop/msal-js-prompt-behavior.md
+++ b/articles/active-directory/develop/msal-js-prompt-behavior.md
@@ -1,6 +1,5 @@
---
-title: Interactive request prompt behavior (MSAL.js) | Azure
-titleSuffix: Microsoft identity platform
+title: Interactive request prompt behavior (MSAL.js)
description: Learn to customize prompt behavior in interactive calls using the Microsoft Authentication Library for JavaScript (MSAL.js).
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-js-sso.md b/articles/active-directory/develop/msal-js-sso.md
index 8ba97653b94ca..7dc4363516c62 100644
--- a/articles/active-directory/develop/msal-js-sso.md
+++ b/articles/active-directory/develop/msal-js-sso.md
@@ -1,6 +1,5 @@
---
-title: Single sign-on (MSAL.js) | Azure
-titleSuffix: Microsoft identity platform
+title: Single sign-on (MSAL.js)
description: Learn about building single sign-on experiences using the Microsoft Authentication Library for JavaScript (MSAL.js).
services: active-directory
author: mmacy
@@ -19,20 +18,18 @@ ms.custom: aaddev, has-adal-ref
# Single sign-on with MSAL.js
-Single sign-on (SSO) provides a more seamless experience by reducing the number of times your users are asked for their credentials. Users enter their credentials once, and the established session can be reused by other applications on the device without further prompting.
+Single sign-on (SSO) provides a more seamless experience by reducing the number of times your users are asked for their credentials. Users enter their credentials once, and the established session can be reused by other applications on the device without further prompting.
-Azure Active Directory (Azure AD) enables SSO by setting a session cookie when a user first authenticates. MSAL.js allows use of the session cookie for SSO between the browser tabs opened for one or several applications.
+Azure Active Directory (Azure AD) enables SSO by setting a session cookie when a user authenticates for the first time. MSAL.js allows the usage of the session cookie for SSO between the browser tabs opened for one or several applications.
-## SSO between browser tabs
+## SSO between browser tabs for the same app
-When a user has your application open in several tabs and signs in on one of them, they're signed into the same app open on the other tabs without being prompted. MSAL.js caches the ID token for the user in the browser `localStorage` and will sign the user in to the application on the other open tabs.
-
-By default, MSAL.js uses `sessionStorage`, which doesn't allow the session to be shared between tabs. To get SSO between tabs, make sure to set the `cacheLocation` in MSAL.js to `localStorage` as shown below.
+When a user has your application open in several tabs and signs in on one of them, they can be signed into the same app open on the other tabs without being prompted. To do so, you'll need to set the *cacheLocation* in MSAL.js configuration object to `localStorage` as shown below.
```javascript
const config = {
auth: {
- clientId: "abcd-ef12-gh34-ikkl-ashdjhlhsdg",
+ clientId: "1111-2222-3333-4444-55555555",
},
cache: {
cacheLocation: "localStorage",
@@ -42,61 +39,65 @@ const config = {
const msalInstance = new msal.PublicClientApplication(config);
```
-## SSO between apps
-
-When a user authenticates, a session cookie is set on the Azure AD domain in the browser. MSAL.js relies on this session cookie to provide SSO for the user between different applications. MSAL.js also caches the ID tokens and access tokens of the user in the browser storage per application domain. As a result, the SSO behavior varies for different cases:
-
-### Applications on the same domain
-
-When applications are hosted on the same domain, the user can sign into an app once and then get authenticated to the other apps without a prompt. MSAL.js uses the tokens cached for the user on the domain to provide SSO.
-
-### Applications on different domain
-
-When applications are hosted on different domains, the tokens cached on domain A cannot be accessed by MSAL.js in domain B.
-
-When a user signed in on domain A navigates to an application on domain B, they're typically redirected or prompted to sign in. Because Azure AD still has the user's session cookie, it signs in the user without prompting for credentials.
+## SSO between different apps
-If the user has multiple user accounts in a session with Azure AD, the user is prompted to pick an account to sign in with.
+When a user authenticates, a session cookie is set on the Azure AD domain in the browser. MSAL.js relies on this session cookie to provide SSO for the user between different applications. MSAL.js also caches the ID tokens and access tokens of the user in the browser storage per application domain.
-### Automatic account selection
+MSAL.js offers the `ssoSilent` method to sign-in the user and obtain tokens without an interaction. However, if the user has multiple user accounts in a session with Azure AD, then the user is prompted to pick an account to sign in with. As such, there are two ways to achieve SSO using `ssoSilent` method.
-When a user is signed in concurrently to multiple Azure AD accounts on the same device, you might find you have the need to bypass the account selection prompt.
+### With user hint
-**Using a session ID**
+To improve performance and ensure that the authorization server will look for the correct account session. You can pass one of the following options in the request object of the `ssoSilent` method to obtain the token silently.
-Use the session ID (SID) in silent authentication requests you make with `acquireTokenSilent` in MSAL.js.
+- Session ID `sid` (which can be retrieved from `idTokenClaims` of an `account` object)
+- `login_hint` (which can be retrieved from the `account` object username property or the `upn` claim in the ID token)
+- `account` (which can be retrieved from using one the [account methods](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/login-user.md#account-apis))
-To use a SID, add `sid` as an [optional claim](active-directory-optional-claims.md) to your app's ID tokens. The `sid` claim allows an application to identify a user's Azure AD session independent of their account name or username. To learn how to add optional claims like `sid`, see [Provide optional claims to your app](active-directory-optional-claims.md).
+#### Using a session ID
-The SID is bound to the session cookie and won't cross browser contexts. You can use the SID only with `acquireTokenSilent`.
+To use a session ID, add `sid` as an [optional claim](active-directory-optional-claims.md) to your app's ID tokens. The `sid` claim allows an application to identify a user's Azure AD session independent of their account name or username. To learn how to add optional claims like `sid`, see [Provide optional claims to your app](active-directory-optional-claims.md). Use the session ID (SID) in silent authentication requests you make with `ssoSilent` in MSAL.js.
```javascript
-var request = {
+const request = {
scopes: ["user.read"],
sid: sid,
};
- msalInstance.acquireTokenSilent(request)
- .then(function (response) {
- const token = response.accessToken;
- })
- .catch(function (error) {
- //handle error
- });
+ try {
+ const loginResponse = await msalInstance.ssoSilent(request);
+} catch (err) {
+ if (err instanceof InteractionRequiredAuthError) {
+ const loginResponse = await msalInstance.loginPopup(request).catch(error => {
+ // handle error
+ });
+ } else {
+ // handle error
+ }
+}
```
-**Using a login hint**
+#### Using a login hint
To bypass the account selection prompt typically shown during interactive authentication requests (or for silent requests when you haven't configured the `sid` optional claim), provide a `loginHint`. In multi-tenant applications, also include a `domain_hint`.
```javascript
-var request = {
+const request = {
scopes: ["user.read"],
loginHint: preferred_username,
extraQueryParameters: { domain_hint: "organizations" },
};
- msalInstance.loginRedirect(request);
+try {
+ const loginResponse = await msalInstance.ssoSilent(request);
+} catch (err) {
+ if (err instanceof InteractionRequiredAuthError) {
+ const loginResponse = await msalInstance.loginPopup(request).catch(error => {
+ // handle error
+ });
+ } else {
+ // handle error
+ }
+}
```
Get the values for `loginHint` and `domain_hint` from the user's **ID token**:
@@ -107,34 +108,83 @@ Get the values for `loginHint` and `domain_hint` from the user's **ID token**:
For more information about login hint and domain hint, see [Microsoft identity platform and OAuth 2.0 authorization code flow](v2-oauth2-auth-code-flow.md).
-## SSO without MSAL.js login
+#### Using an account object
-By design, MSAL.js requires that a login method is called to establish a user context before getting tokens for APIs. Since login methods are interactive, the user sees a prompt.
+If you know the user account information, you can also retrieve the user account by using the `getAccountByUsername()` or `getAccountByHomeId()` methods:
-There are certain cases in which applications have access to the authenticated user's context or ID token through authentication initiated in another application and want to use SSO to acquire tokens without first signing in through MSAL.js.
+```javascript
+const username = "test@contoso.com";
+const myAccount = msalInstance.getAccountByUsername(username);
+
+const request = {
+ scopes: ["User.Read"],
+ account: myAccount
+};
-An example: A user is signed in to Microsoft account in a browser that hosts another JavaScript application running as an add-on or plugin, which requires a Microsoft account sign-in.
+try {
+ const loginResponse = await msalInstance.ssoSilent(request);
+} catch (err) {
+ if (err instanceof InteractionRequiredAuthError) {
+ const loginResponse = await msalInstance.loginPopup(request).catch(error => {
+ // handle error
+ });
+ } else {
+ // handle error
+ }
+}
+```
-The SSO experience in this scenario can be achieved as follows:
+### Without user hint
-Pass the `sid` if available (or `login_hint` and optionally `domain_hint`) as request parameters to the MSAL.js `acquireTokenSilent` call as follows:
+You can attempt to use the `ssoSilent` method without passing any `account`, `sid` or `login_hint` as shown in the code below:
```javascript
-var request = {
- scopes: ["user.read"],
- loginHint: preferred_username,
- extraQueryParameters: { domain_hint: "organizations" },
+const request = {
+ scopes: ["User.Read"]
};
-msalInstance.acquireTokenSilent(request)
- .then(function (response) {
- const token = response.accessToken;
- })
- .catch(function (error) {
- //handle error
- });
+try {
+ const loginResponse = await msalInstance.ssoSilent(request);
+} catch (err) {
+ if (err instanceof InteractionRequiredAuthError) {
+ const loginResponse = await msalInstance.loginPopup(request).catch(error => {
+ // handle error
+ });
+ } else {
+ // handle error
+ }
+}
```
+However, there's a likelihood of silent sign-in errors if the application has multiple users in a single browser session or if the user has multiple accounts for that single browser session. You may see the following error in the case of multiple accounts:
+
+```txt
+InteractionRequiredAuthError: interaction_required: AADSTS16000: Either multiple user identities are available for the current request or selected account is not supported for the scenario.
+```
+
+The error indicates that the server couldn't determine which account to sign into, and will require either one of the parameters above (`account`, `login_hint`, `sid`) or an interactive sign-in to choose the account.
+
+## Considerations when using `ssoSilent`
+
+### Redirect URI (reply URL)
+
+For better performance and to help avoid issues, set the `redirectUri` to a blank page or other page that doesn't use MSAL.
+
+- If your application users only popup and silent methods, set the `redirectUri` on the `PublicClientApplication` configuration object.
+- If your application also uses redirect methods, set the `redirectUri` on a per-request basis.
+
+### Third-party cookies
+
+`ssoSilent` attempts to open a hidden iframe and reuse an existing session with Azure AD. This won't work in browsers that block third-party cookies such as safari, and will lead to an interaction error:
+
+```txt
+InteractionRequiredAuthError: login_required: AADSTS50058: A silent sign-in request was sent but no user is signed in. The cookies used to represent the user's session were not sent in the request to Azure AD
+```
+
+To resolve the error, the user must create an interactive authentication request using the `loginPopup()` or `loginRedirect()`.
+
+Additionally, the request object is required when using the **silent** methods. If you already have the user's sign-in information, you can pass either the `loginHint` or `sid` optional parameters to sign-in a specific account.
+
## SSO in ADAL.js to MSAL.js update
MSAL.js brings feature parity with ADAL.js for Azure AD authentication scenarios. To make the migration from ADAL.js to MSAL.js easy and to avoid prompting your users to sign in again, the library reads the ID token representing user’s session in ADAL.js cache, and seamlessly signs in the user in MSAL.js.
@@ -145,7 +195,7 @@ To take advantage of the SSO behavior when updating from ADAL.js, you'll need to
// In ADAL.js
window.config = {
- clientId: "g075edef-0efa-453b-997b-de1337c29185",
+ clientId: "1111-2222-3333-4444-55555555",
cacheLocation: "localStorage",
};
@@ -154,7 +204,7 @@ var authContext = new AuthenticationContext(config);
// In latest MSAL.js version
const config = {
auth: {
- clientId: "abcd-ef12-gh34-ikkl-ashdjhlhsdg",
+ clientId: "1111-2222-3333-4444-55555555",
},
cache: {
cacheLocation: "localStorage",
@@ -170,5 +220,6 @@ Once the `cacheLocation` is configured, MSAL.js can read the cached state of the
For more information about SSO, see:
-- [Single Sign-On SAML protocol](single-sign-on-saml-protocol.md)
+- [Single Sign-on SAML protocol](single-sign-on-saml-protocol.md)
+- [Optional token claims](active-directory-optional-claims.md)
- [Configurable token lifetimes](active-directory-configurable-token-lifetimes.md)
diff --git a/articles/active-directory/develop/msal-js-use-ie-browser.md b/articles/active-directory/develop/msal-js-use-ie-browser.md
index c59a998c4ce4c..1203cecbc6966 100644
--- a/articles/active-directory/develop/msal-js-use-ie-browser.md
+++ b/articles/active-directory/develop/msal-js-use-ie-browser.md
@@ -1,6 +1,5 @@
---
-title: Issues on Internet Explorer (MSAL.js) | Azure
-titleSuffix: Microsoft identity platform
+title: Issues on Internet Explorer (MSAL.js)
description: Use the Microsoft Authentication Library for JavaScript (MSAL.js) with Internet Explorer browser.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-logging-android.md b/articles/active-directory/develop/msal-logging-android.md
index 5b94cc351608a..8329df9bae997 100644
--- a/articles/active-directory/develop/msal-logging-android.md
+++ b/articles/active-directory/develop/msal-logging-android.md
@@ -1,6 +1,5 @@
---
title: Logging errors and exceptions in MSAL for Android.
-titleSuffix: Microsoft identity platform
description: Learn how to log errors and exceptions in MSAL for Android.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-logging-dotnet.md b/articles/active-directory/develop/msal-logging-dotnet.md
index a2e1bd53fb6e6..10e8dd5b368d1 100644
--- a/articles/active-directory/develop/msal-logging-dotnet.md
+++ b/articles/active-directory/develop/msal-logging-dotnet.md
@@ -1,6 +1,5 @@
---
title: Logging errors and exceptions in MSAL.NET
-titleSuffix: Microsoft identity platform
description: Learn how to log errors and exceptions in MSAL.NET
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-logging-ios.md b/articles/active-directory/develop/msal-logging-ios.md
index 0796a8d276162..dc5ed047c7ffd 100644
--- a/articles/active-directory/develop/msal-logging-ios.md
+++ b/articles/active-directory/develop/msal-logging-ios.md
@@ -1,6 +1,5 @@
---
title: Logging errors and exceptions in MSAL for iOS/macOS
-titleSuffix: Microsoft identity platform
description: Learn how to log errors and exceptions in MSAL for iOS/macOS
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-logging-java.md b/articles/active-directory/develop/msal-logging-java.md
index 7ceb5cd3d266d..6ce9daf3641b1 100644
--- a/articles/active-directory/develop/msal-logging-java.md
+++ b/articles/active-directory/develop/msal-logging-java.md
@@ -1,6 +1,5 @@
---
title: Logging errors and exceptions in MSAL for Java
-titleSuffix: Microsoft identity platform
description: Learn how to log errors and exceptions in MSAL for Java
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-logging-js.md b/articles/active-directory/develop/msal-logging-js.md
index 96fd7d095dd89..6315b9ddb26c3 100644
--- a/articles/active-directory/develop/msal-logging-js.md
+++ b/articles/active-directory/develop/msal-logging-js.md
@@ -1,6 +1,5 @@
---
title: Logging errors and exceptions in MSAL.js
-titleSuffix: Microsoft identity platform
description: Learn how to log errors and exceptions in MSAL.js
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-logging-python.md b/articles/active-directory/develop/msal-logging-python.md
index fd1d74f7aacfe..5d76e416dc934 100644
--- a/articles/active-directory/develop/msal-logging-python.md
+++ b/articles/active-directory/develop/msal-logging-python.md
@@ -1,6 +1,5 @@
---
title: Logging errors and exceptions in MSAL for Python
-titleSuffix: Microsoft identity platform
description: Learn how to log errors and exceptions in MSAL for Python
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-migration.md b/articles/active-directory/develop/msal-migration.md
index 16f87af9211df..c1b477bcf9219 100644
--- a/articles/active-directory/develop/msal-migration.md
+++ b/articles/active-directory/develop/msal-migration.md
@@ -1,6 +1,5 @@
---
title: Migrate to the Microsoft Authentication Library (MSAL)
-titleSuffix: Microsoft identity platform
description: Learn about the differences between the Microsoft Authentication Library (MSAL) and Azure AD Authentication Library (ADAL) and how to migrate to MSAL.
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/msal-national-cloud.md b/articles/active-directory/develop/msal-national-cloud.md
index acab5cd7a30b9..5a81df8bc5144 100644
--- a/articles/active-directory/develop/msal-national-cloud.md
+++ b/articles/active-directory/develop/msal-national-cloud.md
@@ -1,6 +1,5 @@
---
-title: Use MSAL in a national cloud app | Azure
-titleSuffix: Microsoft identity platform
+title: Use MSAL in a national cloud app
description: The Microsoft Authentication Library (MSAL) enables application developers to acquire tokens in order to call secured web APIs. These web APIs can be Microsoft Graph, other Microsoft APIs, partner web APIs, or your own web API. MSAL supports multiple application architectures and platforms.
services: active-directory
author: negoe
diff --git a/articles/active-directory/develop/msal-net-aad-b2c-considerations.md b/articles/active-directory/develop/msal-net-aad-b2c-considerations.md
index b3a43be364f60..82307a6a9f767 100644
--- a/articles/active-directory/develop/msal-net-aad-b2c-considerations.md
+++ b/articles/active-directory/develop/msal-net-aad-b2c-considerations.md
@@ -1,6 +1,5 @@
---
title: Azure AD B2C and MSAL.NET
-titleSuffix: Microsoft identity platform
description: Considerations when using Azure AD B2C with the Microsoft Authentication Library for .NET (MSAL.NET).
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-net-acquire-token-silently.md b/articles/active-directory/develop/msal-net-acquire-token-silently.md
index 253950cb71b94..3e58392886b8b 100644
--- a/articles/active-directory/develop/msal-net-acquire-token-silently.md
+++ b/articles/active-directory/develop/msal-net-acquire-token-silently.md
@@ -1,6 +1,5 @@
---
title: Acquire a token from the cache (MSAL.NET)
-titleSuffix: Microsoft identity platform
description: Learn how to acquire an access token silently (from the token cache) using the Microsoft Authentication Library for .NET (MSAL.NET).
services: active-directory
author: mmacy
@@ -13,7 +12,7 @@ ms.workload: identity
ms.date: 07/16/2019
ms.author: marsma
ms.reviewer: saeeda
-ms.custom: "devx-track-csharp, aaddev"
+ms.custom: devx-track-csharp, aaddev
#Customer intent: As an application developer, I want to learn how how to use the AcquireTokenSilent method so I can acquire tokens from the cache.
---
@@ -21,7 +20,7 @@ ms.custom: "devx-track-csharp, aaddev"
When you acquire an access token using the Microsoft Authentication Library for .NET (MSAL.NET), the token is cached. When the application needs a token, it should first call the `AcquireTokenSilent` method to verify if an acceptable token is in the cache. In many cases, it's possible to acquire another token with more scopes based on a token in the cache. It's also possible to refresh a token when it's getting close to expiration (as the token cache also contains a refresh token).
-For authentication flows that require a user interaction, MSAL caches the access, refresh, and ID tokens, as well as the `IAccount` object, which represents information about a single account. Learn more about [IAccount](/dotnet/api/microsoft.identity.client.iaccount?view=azure-dotnet). For application flows, such as [client credentials](msal-authentication-flows.md#client-credentials), only access tokens are cached, because the `IAccount` object and ID token require a user, and the refresh token is not applicable.
+For authentication flows that require a user interaction, MSAL caches the access, refresh, and ID tokens, as well as the `IAccount` object, which represents information about a single account. Learn more about [IAccount](/dotnet/api/microsoft.identity.client.iaccount?view=azure-dotnet&preserve-view=true). For application flows, such as [client credentials](msal-authentication-flows.md#client-credentials), only access tokens are cached, because the `IAccount` object and ID token require a user, and the refresh token is not applicable.
The recommended pattern is to call the `AcquireTokenSilent` method first. If `AcquireTokenSilent` fails, then acquire a token using other methods.
diff --git a/articles/active-directory/develop/msal-net-adfs-support.md b/articles/active-directory/develop/msal-net-adfs-support.md
index a3576bd6eceae..8326c43499397 100644
--- a/articles/active-directory/develop/msal-net-adfs-support.md
+++ b/articles/active-directory/develop/msal-net-adfs-support.md
@@ -1,6 +1,5 @@
---
-title: AD FS support in MSAL.NET | Azure
-titleSuffix: Microsoft identity platform
+title: AD FS support in MSAL.NET
description: Learn about Active Directory Federation Services (AD FS) support in the Microsoft Authentication Library for .NET (MSAL.NET).
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-net-clear-token-cache.md b/articles/active-directory/develop/msal-net-clear-token-cache.md
index f6094a7f3f36f..2f2af49b7de1a 100644
--- a/articles/active-directory/develop/msal-net-clear-token-cache.md
+++ b/articles/active-directory/develop/msal-net-clear-token-cache.md
@@ -1,6 +1,5 @@
---
-title: Clear the token cache (MSAL.NET) | Azure
-titleSuffix: Microsoft identity platform
+title: Clear the token cache (MSAL.NET)
description: Learn how to clear the token cache using the Microsoft Authentication Library for .NET (MSAL.NET).
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-net-client-assertions.md b/articles/active-directory/develop/msal-net-client-assertions.md
index 7f7ab24c31ab0..ecd6a8e60f9ea 100644
--- a/articles/active-directory/develop/msal-net-client-assertions.md
+++ b/articles/active-directory/develop/msal-net-client-assertions.md
@@ -1,6 +1,5 @@
---
-title: Client assertions (MSAL.NET) | Azure
-titleSuffix: Microsoft identity platform
+title: Client assertions (MSAL.NET)
description: Learn about signed client assertions support for confidential client applications in the Microsoft Authentication Library for .NET (MSAL.NET).
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/msal-net-differences-adal-net.md b/articles/active-directory/develop/msal-net-differences-adal-net.md
index 25b7577b2bfd7..5896775f5334f 100644
--- a/articles/active-directory/develop/msal-net-differences-adal-net.md
+++ b/articles/active-directory/develop/msal-net-differences-adal-net.md
@@ -1,6 +1,5 @@
---
-title: Differences between ADAL.NET and MSAL.NET apps | Azure
-titleSuffix: Microsoft identity platform
+title: Differences between ADAL.NET and MSAL.NET apps
description: Learn about the differences between the Microsoft Authentication Library for .NET (MSAL.NET) and Azure AD Authentication Library for .NET (ADAL.NET).
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/msal-net-initializing-client-applications.md b/articles/active-directory/develop/msal-net-initializing-client-applications.md
index 82ff49a4e0aec..947e7b76ddd28 100644
--- a/articles/active-directory/develop/msal-net-initializing-client-applications.md
+++ b/articles/active-directory/develop/msal-net-initializing-client-applications.md
@@ -1,6 +1,5 @@
---
-title: Initialize MSAL.NET client applications | Azure
-titleSuffix: Microsoft identity platform
+title: Initialize MSAL.NET client applications
description: Learn about initializing public client and confidential client applications using the Microsoft Authentication Library for .NET (MSAL.NET).
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-net-instantiate-confidential-client-config-options.md b/articles/active-directory/develop/msal-net-instantiate-confidential-client-config-options.md
index 234ddda0db196..98752a0111586 100644
--- a/articles/active-directory/develop/msal-net-instantiate-confidential-client-config-options.md
+++ b/articles/active-directory/develop/msal-net-instantiate-confidential-client-config-options.md
@@ -1,6 +1,5 @@
---
-title: Instantiate a confidential client app (MSAL.NET) | Azure
-titleSuffix: Microsoft identity platform
+title: Instantiate a confidential client app (MSAL.NET)
description: Learn how to instantiate a confidential client application with configuration options using the Microsoft Authentication Library for .NET (MSAL.NET).
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-net-instantiate-public-client-config-options.md b/articles/active-directory/develop/msal-net-instantiate-public-client-config-options.md
index a597811428019..65092f6555c8d 100644
--- a/articles/active-directory/develop/msal-net-instantiate-public-client-config-options.md
+++ b/articles/active-directory/develop/msal-net-instantiate-public-client-config-options.md
@@ -1,6 +1,5 @@
---
-title: Instantiate a public client app (MSAL.NET) | Azure
-titleSuffix: Microsoft identity platform
+title: Instantiate a public client app (MSAL.NET)
description: Learn how to instantiate a public client application with configuration options using the Microsoft Authentication Library for .NET (MSAL.NET).
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-net-migration-android-broker.md b/articles/active-directory/develop/msal-net-migration-android-broker.md
index 0400a2e015011..3efc564bcb4f7 100644
--- a/articles/active-directory/develop/msal-net-migration-android-broker.md
+++ b/articles/active-directory/develop/msal-net-migration-android-broker.md
@@ -1,6 +1,5 @@
---
title: Migrate Xamarin Android apps using brokers to MSAL.NET
-titleSuffix: Microsoft identity platform
description: Learn how to migrate Xamarin Android apps that use the Microsoft Authenticator or Intune Company Portal from ADAL.NET to MSAL.NET.
author: mmacy
manager: CelesteDG
diff --git a/articles/active-directory/develop/msal-net-migration-confidential-client.md b/articles/active-directory/develop/msal-net-migration-confidential-client.md
index 1a806c67f8e6c..d40d80b5f26e0 100644
--- a/articles/active-directory/develop/msal-net-migration-confidential-client.md
+++ b/articles/active-directory/develop/msal-net-migration-confidential-client.md
@@ -1,11 +1,9 @@
---
title: Migrate confidential client applications to MSAL.NET
-titleSuffix: Microsoft identity platform
description: Learn how to migrate a confidential client application from Azure Active Directory Authentication Library for .NET to Microsoft Authentication Library for .NET.
services: active-directory
author: jmprieur
manager: CelesteDG
-
ms.service: active-directory
ms.subservice: develop
ms.topic: how-to
@@ -13,13 +11,13 @@ ms.workload: identity
ms.date: 06/08/2021
ms.author: jmprieur
ms.reviewer: saeeda, shermanouko
-ms.custom: "devx-track-csharp, aaddev, has-adal-ref"
+ms.custom: "devx-track-csharp, aaddev, has-adal-ref, kr2b-contr-experiment"
#Customer intent: As an application developer, I want to migrate my confidential client app from ADAL.NET to MSAL.NET.
---
# Migrate confidential client applications from ADAL.NET to MSAL.NET
-This article describes how to migrate a confidential client application from Azure Active Directory Authentication Library for .NET (ADAL.NET) to Microsoft Authentication Library for .NET (MSAL.NET). Confidential client applications are web apps, web APIs, and daemon applications that call another service on their own behalf. For more information about confidential applications, see [Authentication flows and application scenarios](authentication-flows-app-scenarios.md). If your app is based on ASP.NET Core, use [Microsoft.Identity.Web](microsoft-identity-web.md).
+In this how-to guide you'll migrate a confidential client application from Azure Active Directory Authentication Library for .NET (ADAL.NET) to Microsoft Authentication Library for .NET (MSAL.NET). Confidential client applications include web apps, web APIs, and daemon applications that call another service on their own behalf. For more information about confidential apps, see [Authentication flows and application scenarios](authentication-flows-app-scenarios.md). If your app is based on ASP.NET Core, see [Microsoft.Identity.Web](microsoft-identity-web.md).
For app registrations:
@@ -28,24 +26,24 @@ For app registrations:
## Migration steps
-1. Find the code by using ADAL.NET in your app.
+1. Find the code that uses ADAL.NET in your app.
- The code that uses ADAL in a confidential client application instantiates `AuthenticationContext` and calls either `AcquireTokenByAuthorizationCode` or one override of `AcquireTokenAsync` with the following parameters:
+ The code that uses ADAL in a confidential client app instantiates `AuthenticationContext` and calls either `AcquireTokenByAuthorizationCode` or one override of `AcquireTokenAsync` with the following parameters:
- A `resourceId` string. This variable is the app ID URI of the web API that you want to call.
- An instance of `IClientAssertionCertificate` or `ClientAssertion`. This instance provides the client credentials for your app to prove the identity of your app.
-1. After you've identified that you have apps that are using ADAL.NET, install the MSAL.NET NuGet package [Microsoft.Identity.Client](https://www.nuget.org/packages/Microsoft.Identity.Client) and update your project library references. For more information, see [Install a NuGet package](https://www.bing.com/search?q=install+nuget+package). If you want to use token cache serializers, also install [Microsoft.Identity.Web.TokenCache](https://www.nuget.org/packages/Microsoft.Identity.Web.TokenCache).
+1. After you've identified that you have apps that are using ADAL.NET, install the MSAL.NET NuGet package [Microsoft.Identity.Client](https://www.nuget.org/packages/Microsoft.Identity.Client) and update your project library references. For more information, see [Install a NuGet package](https://www.bing.com/search?q=install+nuget+package). To use token cache serializers, install [Microsoft.Identity.Web.TokenCache](https://www.nuget.org/packages/Microsoft.Identity.Web.TokenCache).
1. Update the code according to the confidential client scenario. Some steps are common and apply across all the confidential client scenarios. Other steps are unique to each scenario.
- The confidential client scenarios are:
+ Confidential client scenarios:
- [Daemon scenarios](?tabs=daemon#migrate-daemon-apps) supported by web apps, web APIs, and daemon console applications.
- [Web API calling downstream web APIs](?tabs=obo#migrate-a-web-api-that-calls-downstream-web-apis) supported by web APIs calling downstream web APIs on behalf of the user.
- [Web app calling web APIs](?tabs=authcode#migrate-a-web-api-that-calls-downstream-web-apis) supported by web apps that sign in users and call a downstream web API.
-You might have provided a wrapper around ADAL.NET to handle certificates and caching. This article uses the same approach to illustrate the process of migrating from ADAL.NET to MSAL.NET. However, this code is only for demonstration purposes. Don't copy/paste these wrappers or integrate them in your code as they are.
+You might have provided a wrapper around ADAL.NET to handle certificates and caching. This guide uses the same approach to illustrate the process of migrating from ADAL.NET to MSAL.NET. However, this code is only for demonstration purposes. Don't copy/paste these wrappers or integrate them in your code as they are.
## [Daemon](#tab/daemon)
@@ -60,13 +58,13 @@ The ADAL code for your app uses daemon scenarios if it contains a call to `Authe
- A resource (app ID URI) as a first parameter
- `IClientAssertionCertificate` or `ClientAssertion` as the second parameter
-`AuthenticationContext.AcquireTokenAsync` doesn't have a parameter of type `UserAssertion`. If it does, then your app is a web API, and it's using the [web API calling downstream web APIs](?tabs=obo#migrate-a-web-api-that-calls-downstream-web-apis) scenario.
+`AuthenticationContext.AcquireTokenAsync` doesn't have a parameter of type `UserAssertion`. If it does, then your app is a web API, and it uses the [web API calling downstream web APIs](?tabs=obo#migrate-a-web-api-that-calls-downstream-web-apis) scenario.
#### Update the code of daemon scenarios
[!INCLUDE [Common steps](includes/msal-net-adoption-steps-confidential-clients.md)]
-In this case, we replace the call to `AuthenticationContext.AcquireTokenAsync` with a call to `IConfidentialClientApplication.AcquireTokenClient`.
+In this case, replace the call to `AuthenticationContext.AcquireTokenAsync` with a call to `IConfidentialClientApplication.AcquireTokenClient`.
Here's a comparison of ADAL.NET and MSAL.NET code for daemon scenarios:
@@ -160,9 +158,9 @@ public partial class AuthWrapper
#### Benefit from token caching
-To benefit from the in-memory cache, the instance of `IConfidentialClientApplication` needs to be kept in a member variable. If you re-create the confidential client application each time you request a token, you won't benefit from the token cache.
+To benefit from the in-memory cache, the instance of `IConfidentialClientApplication` must be kept in a member variable. If you re-create the confidential client app each time you request a token, you won't benefit from the token cache.
-You'll need to serialize `AppTokenCache` if you choose not to use the default in-memory app token cache. Similarly, If you want to implement a distributed token cache, you'll need to serialize `AppTokenCache`. For details, see [Token cache for a web app or web API (confidential client application)](msal-net-token-cache-serialization.md?tabs=aspnet) and the sample [active-directory-dotnet-v1-to-v2/ConfidentialClientTokenCache](https://github.com/Azure-Samples/active-directory-dotnet-v1-to-v2/tree/master/ConfidentialClientTokenCache).
+You'll need to serialize `AppTokenCache` if you don't use the default in-memory app token cache. Similarly, If you want to implement a distributed token cache, serialize `AppTokenCache`. For details, see [Token cache for a web app or web API (confidential client application)](msal-net-token-cache-serialization.md?tabs=aspnet) and the sample [active-directory-dotnet-v1-to-v2/ConfidentialClientTokenCache](https://github.com/Azure-Samples/active-directory-dotnet-v1-to-v2/tree/master/ConfidentialClientTokenCache).
[Learn more about the daemon scenario](scenario-daemon-overview.md) and how it's implemented with MSAL.NET or Microsoft.Identity.Web in new applications.
@@ -285,25 +283,25 @@ public partial class AuthWrapper
#### Benefit from token caching
-For token caching in OBOs, you need to use a distributed token cache. For details, see [Token cache for a web app or web API (confidential client application)](msal-net-token-cache-serialization.md?tabs=aspnet) and read through [sample code](https://github.com/Azure-Samples/active-directory-dotnet-v1-to-v2/tree/master/ConfidentialClientTokenCache).
+For token caching in OBOs, use a distributed token cache. For details, see [Token cache for a web app or web API (confidential client app)](msal-net-token-cache-serialization.md?tabs=aspnet) and read through [sample code](https://github.com/Azure-Samples/active-directory-dotnet-v1-to-v2/tree/master/ConfidentialClientTokenCache).
```CSharp
app.UseInMemoryTokenCaches(); // or a distributed token cache.
```
-[Learn more about web APIs calling downstream web APIs](scenario-web-api-call-api-overview.md) and how they're implemented with MSAL.NET or Microsoft.Identity.Web in new applications.
+[Learn more about web APIs calling downstream web APIs](scenario-web-api-call-api-overview.md) and how they're implemented with MSAL.NET or Microsoft.Identity.Web in new apps.
## [Web app calling web APIs](#tab/authcode)
### Migrate a web app that calls web APIs
-If your app uses ASP.NET Core, we strongly recommend that you update to Microsoft.Identity.Web, which processes everything for you. For a quick presentation, see the [Microsoft.Identity.Web announcement of general availability](https://github.com/AzureAD/microsoft-identity-web/wiki/1.0.0). For details about how to use it in a web app, see [Why use Microsoft.Identity.Web in web apps?](https://aka.ms/ms-id-web/webapp).
+If your app uses ASP.NET Core, we strongly recommend that you update to Microsoft.Identity.Web because it processes everything for you. For a quick presentation, see the [Microsoft.Identity.Web announcement of general availability](https://github.com/AzureAD/microsoft-identity-web/wiki/1.0.0). For details about how to use it in a web app, see [Why use Microsoft.Identity.Web in web apps?](https://aka.ms/ms-id-web/webapp).
-Web apps that sign in users and call web APIs on behalf of users use the OAuth2.0 [authorization code flow](v2-oauth2-auth-code-flow.md). Typically:
+Web apps that sign in users and call web APIs on behalf of users employ the OAuth2.0 [authorization code flow](v2-oauth2-auth-code-flow.md). Typically:
-1. The web app signs in a user by executing a first leg of the authorization code flow. It does this by going to the Microosft identity platform authorize endpoint. The user signs in and performs multifactor authentications if needed. As an outcome of this operation, the app receives the authorization code. The authentication library is not used at this stage.
+1. The app signs in a user by executing a first leg of the authorization code flow by going to the Microsoft identity platform authorize endpoint. The user signs in and performs multi-factor authentications if needed. As an outcome of this operation, the app receives the authorization code. The authentication library isn't used at this stage.
1. The app executes the second leg of the authorization code flow. It uses the authorization code to get an access token, an ID token, and a refresh token. Your application needs to provide the `redirectUri` value, which is the URI where the Microsoft identity platform endpoint will provide the security tokens. After the app receives that URI, it typically calls `AcquireTokenByAuthorizationCode` for ADAL or MSAL to redeem the code and to get a token that will be stored in the token cache.
-1. The app uses ADAL or MSAL to call `AcquireTokenSilent` so that it can get tokens for calling the necessary web APIs. This is done from the web app controllers.
+1. The app uses ADAL or MSAL to call `AcquireTokenSilent` to get tokens for calling the necessary web APIs from the web app controllers.
#### Find out if your code uses the auth code flow
@@ -313,7 +311,7 @@ The ADAL code for your app uses auth code flow if it contains a call to `Authent
[!INCLUDE [Common steps](includes/msal-net-adoption-steps-confidential-clients.md)]
-In this case, we replace the call to `AuthenticationContext.AcquireTokenAsync` with a call to `IConfidentialClientApplication.AcquireTokenByAuthorizationCode`.
+In this case, replace the call to `AuthenticationContext.AcquireTokenAsync` with a call to `IConfidentialClientApplication.AcquireTokenByAuthorizationCode`.
Here's a comparison of sample authorization code flows for ADAL.NET and MSAL.NET:
@@ -460,7 +458,7 @@ public partial class AuthWrapper
#### Benefit from token caching
-Because your web app uses `AcquireTokenByAuthorizationCode`, your app needs to use a distributed token cache for token caching. For details, see [Token cache for a web app or web API](msal-net-token-cache-serialization.md?tabs=aspnet) and read through [sample code](https://github.com/Azure-Samples/active-directory-dotnet-v1-to-v2/tree/master/ConfidentialClientTokenCache).
+Because your web app uses `AcquireTokenByAuthorizationCode`, it needs to use a distributed token cache for token caching. For details, see [Token cache for a web app or web API](msal-net-token-cache-serialization.md?tabs=aspnet) and read through [sample code](https://github.com/Azure-Samples/active-directory-dotnet-v1-to-v2/tree/master/ConfidentialClientTokenCache).
```CSharp
@@ -470,9 +468,9 @@ app.UseInMemoryTokenCaches(); // or a distributed token cache.
#### Handling MsalUiRequiredException
When your controller attempts to acquire a token silently for different
-scopes/resources, MSAL.NET might throw an `MsalUiRequiredException`. This is expected if, for instance, the user needs to re-sign-in, or if the
+scopes/resources, MSAL.NET might throw an `MsalUiRequiredException` as expected if the user needs to re-sign-in, or if the
access to the resource requires more claims (because of a conditional access
-policy for instance). For details on mitigation see how to [Handle errors and exceptions in MSAL.NET](msal-error-handling-dotnet.md).
+policy). For details on mitigation see how to [Handle errors and exceptions in MSAL.NET](msal-error-handling-dotnet.md).
[Learn more about web apps calling web APIs](scenario-web-app-call-api-overview.md) and how they're implemented with MSAL.NET or Microsoft.Identity.Web in new applications.
@@ -482,14 +480,14 @@ policy for instance). For details on mitigation see how to [Handle errors and ex
Key benefits of MSAL.NET for your app include:
-- **Resilience**. MSAL.NET helps make your app resilient through the following:
+- **Resilience**. MSAL.NET helps make your app resilient through:
- - Azure AD Cached Credential Service (CCS) benefits. CCS operates as an Azure AD backup.
- - Proactive renewal of tokens if the API that you call enables long-lived tokens through [continuous access evaluation](app-resilience-continuous-access-evaluation.md).
+ - Azure AD Cached Credential Service (CCS) benefits. CCS operates as an Azure AD backup.
+ - Proactive renewal of tokens if the API that you call enables long-lived tokens through [continuous access evaluation](app-resilience-continuous-access-evaluation.md).
- **Security**. You can acquire Proof of Possession (PoP) tokens if the web API that you want to call requires it. For details, see [Proof Of Possession tokens in MSAL.NET](https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/wiki/Proof-Of-Possession-(PoP)-tokens)
-- **Performance and scalability**. If you don't need to share your cache with ADAL.NET, disable the legacy cache compatibility when you're creating the confidential client application (`.WithLegacyCacheCompatibility(false)`). This increases the performance significantly.
+- **Performance and scalability**. If you don't need to share your cache with ADAL.NET, disable the legacy cache compatibility when you're creating the confidential client application (`.WithLegacyCacheCompatibility(false)`) to significantly increase performance.
```csharp
app = ConfidentialClientApplicationBuilder.Create(ClientId)
@@ -516,14 +514,14 @@ If you get an exception with either of the following messages:
> `subscriptions for the tenant. Check to make sure you have the correct tenant ID. Check with your subscription`
> `administrator.`
-You can troubleshoot the exception by using these steps:
+Troubleshoot the exception using these steps:
1. Confirm that you're using the latest version of [MSAL.NET](https://www.nuget.org/packages/Microsoft.Identity.Client/).
-1. Confirm that the authority host that you set when building the confidential client application and the authority host that you used with ADAL are similar. In particular, is it the same [cloud](msal-national-cloud.md) (Azure Government, Azure China 21Vianet, or Azure Germany)?
+1. Confirm that the authority host that you set when building the confidential client app and the authority host that you used with ADAL are similar. In particular, is it the same [cloud](msal-national-cloud.md) (Azure Government, Azure China 21Vianet, or Azure Germany)?
### MsalClientException
-In multi-tenant applications, you can have scenarios where you specify a common authority when building the application, but then want to target a specific tenant (for instance the tenant of the user) when calling a web API. Since MSAL.NET 4.37.0, when you specify `.WithAzureRegion` at the application creation, you can no longer specify the Authority using `.WithAuthority` during the token requests. If you do, you'll get the following error when updating from previous versions of MSAL.NET:
+In multi-tenant apps, specify a common authority when building the app to target a specific tenant such as, the tenant of the user when calling a web API. Since MSAL.NET 4.37.0, when you specify `.WithAzureRegion` at the app creation, you can no longer specify the Authority using `.WithAuthority` during the token requests. If you do, you'll get the following error when updating from previous versions of MSAL.NET:
`MsalClientException - "You configured WithAuthority at the request level, and also WithAzureRegion. This is not supported when the environment changes from application to request. Use WithTenantId at the request level instead."`
diff --git a/articles/active-directory/develop/msal-net-migration-ios-broker.md b/articles/active-directory/develop/msal-net-migration-ios-broker.md
index 3b578e614f3bf..ec7006514e2cb 100644
--- a/articles/active-directory/develop/msal-net-migration-ios-broker.md
+++ b/articles/active-directory/develop/msal-net-migration-ios-broker.md
@@ -1,6 +1,5 @@
---
title: Migrate Xamarin apps using brokers to MSAL.NET
-titleSuffix: Microsoft identity platform
description: Learn how to migrate Xamarin iOS apps that use Microsoft Authenticator from ADAL.NET to MSAL.NET.
author: jmprieur
manager: CelesteDG
diff --git a/articles/active-directory/develop/msal-net-migration-public-client.md b/articles/active-directory/develop/msal-net-migration-public-client.md
index 90e0443c43d4d..5f0d123729227 100644
--- a/articles/active-directory/develop/msal-net-migration-public-client.md
+++ b/articles/active-directory/develop/msal-net-migration-public-client.md
@@ -1,6 +1,5 @@
---
title: Migrate public client applications to MSAL.NET
-titleSuffix: Microsoft identity platform
description: Learn how to migrate a public client application from Azure Active Directory Authentication Library for .NET to Microsoft Authentication Library for .NET.
services: active-directory
author: CelesteDG
diff --git a/articles/active-directory/develop/msal-net-migration.md b/articles/active-directory/develop/msal-net-migration.md
index 3200a09a41ebd..c8ad29a752da9 100644
--- a/articles/active-directory/develop/msal-net-migration.md
+++ b/articles/active-directory/develop/msal-net-migration.md
@@ -1,6 +1,5 @@
---
title: Migrating to MSAL.NET and Microsoft.Identity.Web
-titleSuffix: Microsoft identity platform
description: Learn why and how to migrate from Azure AD Authentication Library for .NET (ADAL.NET) to Microsoft Authentication Library for .NET (MSAL.NET) or Microsoft.Identity.Web
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/msal-net-provide-httpclient.md b/articles/active-directory/develop/msal-net-provide-httpclient.md
index 673b799c7d6df..94146e155e682 100644
--- a/articles/active-directory/develop/msal-net-provide-httpclient.md
+++ b/articles/active-directory/develop/msal-net-provide-httpclient.md
@@ -1,6 +1,5 @@
---
-title: Provide an HttpClient & proxy (MSAL.NET) | Azure
-titleSuffix: Microsoft identity platform
+title: Provide an HttpClient & proxy (MSAL.NET)
description: Learn about providing your own HttpClient and proxy to connect to Azure AD using the Microsoft Authentication Library for .NET (MSAL.NET).
author: jmprieur
manager: CelesteDG
diff --git a/articles/active-directory/develop/msal-net-system-browser-android-considerations.md b/articles/active-directory/develop/msal-net-system-browser-android-considerations.md
index d2098cf690e40..d4e2c0ae84926 100644
--- a/articles/active-directory/develop/msal-net-system-browser-android-considerations.md
+++ b/articles/active-directory/develop/msal-net-system-browser-android-considerations.md
@@ -1,6 +1,5 @@
---
-title: Xamarin Android system browser considerations (MSAL.NET) | Azure
-titleSuffix: Microsoft identity platform
+title: Xamarin Android system browser considerations (MSAL.NET)
description: Learn about considerations for using system browsers on Xamarin Android with the Microsoft Authentication Library for .NET (MSAL.NET).
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-net-token-cache-serialization.md b/articles/active-directory/develop/msal-net-token-cache-serialization.md
index d844e6b6eabe3..832029f8b97bc 100644
--- a/articles/active-directory/develop/msal-net-token-cache-serialization.md
+++ b/articles/active-directory/develop/msal-net-token-cache-serialization.md
@@ -1,6 +1,5 @@
---
-title: Token cache serialization (MSAL.NET) | Azure
-titleSuffix: Microsoft identity platform
+title: Token cache serialization (MSAL.NET)
description: Learn about serialization and custom serialization of the token cache using the Microsoft Authentication Library for .NET (MSAL.NET).
services: active-directory
author: jmprieur
@@ -278,7 +277,7 @@ You can also specify options to limit the size of the in-memory token cache:
#### Distributed caches
-If you use `app.AddDistributedTokenCache`, the token cache is an adapter against the .NET `IDistributedCache` implementation. So you can choose between a SQL Server cache, a Redis cache, an Azure Cosmos DB cache, or any other cache implementing the [IDistributedCache](https://docs.microsoft.com/dotnet/api/microsoft.extensions.caching.distributed.idistributedcache?view=dotnet-plat-ext-6.0) interface.
+If you use `app.AddDistributedTokenCache`, the token cache is an adapter against the .NET `IDistributedCache` implementation. So you can choose between a SQL Server cache, a Redis cache, an Azure Cosmos DB cache, or any other cache implementing the [IDistributedCache](/dotnet/api/microsoft.extensions.caching.distributed.idistributedcache?view=dotnet-plat-ext-6.0) interface.
For testing purposes only, you may want to use `services.AddDistributedMemoryCache()`, an in-memory implementation of `IDistributedCache`.
@@ -709,4 +708,4 @@ The following samples illustrate token cache serialization.
| ------ | -------- | ----------- |
|[active-directory-dotnet-desktop-msgraph-v2](https://github.com/azure-samples/active-directory-dotnet-desktop-msgraph-v2) | Desktop (WPF) | Windows Desktop .NET (WPF) application that calls the Microsoft Graph API. ![Diagram that shows a topology with a desktop app client flowing to Azure Active Directory by acquiring a token interactively and to Microsoft Graph.](media/msal-net-token-cache-serialization/topology.png)|
|[active-directory-dotnet-v1-to-v2](https://github.com/Azure-Samples/active-directory-dotnet-v1-to-v2) | Desktop (console) | Set of Visual Studio solutions that illustrate the migration of Azure AD v1.0 applications (using ADAL.NET) to Microsoft identity platform applications (using MSAL.NET). In particular, see [Token cache migration](https://github.com/Azure-Samples/active-directory-dotnet-v1-to-v2/blob/master/TokenCacheMigration/README.md) and [Confidential client token cache](https://github.com/Azure-Samples/active-directory-dotnet-v1-to-v2/tree/master/ConfidentialClientTokenCache). |
-[ms-identity-aspnet-webapp-openidconnect](https://github.com/Azure-Samples/ms-identity-aspnet-webapp-openidconnect) | ASP.NET (net472) | Example of token cache serialization in an ASP.NET MVC application (using MSAL.NET). In particular, see [MsalAppBuilder](https://github.com/Azure-Samples/ms-identity-aspnet-webapp-openidconnect/blob/master/WebApp/Utils/MsalAppBuilder.cs).
+[ms-identity-aspnet-webapp-openidconnect](https://github.com/Azure-Samples/ms-identity-aspnet-webapp-openidconnect) | ASP.NET (net472) | Example of token cache serialization in an ASP.NET MVC application (using MSAL.NET). In particular, see [MsalAppBuilder](https://github.com/Azure-Samples/ms-identity-aspnet-webapp-openidconnect/blob/master/WebApp/Utils/MsalAppBuilder.cs).
\ No newline at end of file
diff --git a/articles/active-directory/develop/msal-net-use-brokers-with-xamarin-apps.md b/articles/active-directory/develop/msal-net-use-brokers-with-xamarin-apps.md
index 03e672495b905..c2c8da5364abd 100644
--- a/articles/active-directory/develop/msal-net-use-brokers-with-xamarin-apps.md
+++ b/articles/active-directory/develop/msal-net-use-brokers-with-xamarin-apps.md
@@ -1,6 +1,5 @@
---
-title: Use brokers with Xamarin iOS & Android | Azure
-titleSuffix: Microsoft identity platform
+title: Use brokers with Xamarin iOS & Android
description: Learn how to setup Xamarin iOS applications that can use the Microsoft Authenticator and the Microsoft Authentication Library for .NET (MSAL.NET). Also learn how to migrate from Azure AD Authentication Library for .NET (ADAL.NET) to the Microsoft Authentication Library for .NET (MSAL.NET).
author: jmprieur
manager: CelesteDG
diff --git a/articles/active-directory/develop/msal-net-user-gets-consent-for-multiple-resources.md b/articles/active-directory/develop/msal-net-user-gets-consent-for-multiple-resources.md
index 5b9a9d2ba3313..7f94022932127 100644
--- a/articles/active-directory/develop/msal-net-user-gets-consent-for-multiple-resources.md
+++ b/articles/active-directory/develop/msal-net-user-gets-consent-for-multiple-resources.md
@@ -1,6 +1,5 @@
---
-title: Get consent for several resources (MSAL.NET) | Azure
-titleSuffix: Microsoft identity platform
+title: Get consent for several resources (MSAL.NET)
description: Learn how a user can get pre-consent for several resources using the Microsoft Authentication Library for .NET (MSAL.NET).
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-net-uwp-considerations.md b/articles/active-directory/develop/msal-net-uwp-considerations.md
index 35b3de72136f9..add85d70423f1 100644
--- a/articles/active-directory/develop/msal-net-uwp-considerations.md
+++ b/articles/active-directory/develop/msal-net-uwp-considerations.md
@@ -1,6 +1,5 @@
---
-title: UWP considerations (MSAL.NET) | Azure
-titleSuffix: Microsoft identity platform
+title: UWP considerations (MSAL.NET)
description: Learn about considerations for using Universal Windows Platform (UWP) with the Microsoft Authentication Library for .NET (MSAL.NET).
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-net-web-browsers.md b/articles/active-directory/develop/msal-net-web-browsers.md
index c99d143c9290c..3d0603846df86 100644
--- a/articles/active-directory/develop/msal-net-web-browsers.md
+++ b/articles/active-directory/develop/msal-net-web-browsers.md
@@ -1,6 +1,5 @@
---
-title: Using web browsers (MSAL.NET) | Azure
-titleSuffix: Microsoft identity platform
+title: Using web browsers (MSAL.NET)
description: Learn about specific considerations when using Xamarin Android with the Microsoft Authentication Library for .NET (MSAL.NET).
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-net-xamarin-android-considerations.md b/articles/active-directory/develop/msal-net-xamarin-android-considerations.md
index 1224eaaae07e9..924328f12caa3 100644
--- a/articles/active-directory/develop/msal-net-xamarin-android-considerations.md
+++ b/articles/active-directory/develop/msal-net-xamarin-android-considerations.md
@@ -1,6 +1,5 @@
---
-title: Xamarin Android code configuration and troubleshooting (MSAL.NET) | Azure
-titleSuffix: Microsoft identity platform
+title: Xamarin Android code configuration and troubleshooting (MSAL.NET)
description: Learn about considerations for using Xamarin Android with the Microsoft Authentication Library for .NET (MSAL.NET).
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/msal-net-xamarin-ios-considerations.md b/articles/active-directory/develop/msal-net-xamarin-ios-considerations.md
index ce998b7d4f617..8868b38f3ec73 100644
--- a/articles/active-directory/develop/msal-net-xamarin-ios-considerations.md
+++ b/articles/active-directory/develop/msal-net-xamarin-ios-considerations.md
@@ -1,6 +1,5 @@
---
-title: Xamarin iOS considerations (MSAL.NET) | Azure
-titleSuffix: Microsoft identity platform
+title: Xamarin iOS considerations (MSAL.NET)
description: Learn about considerations for using Xamarin iOS with the Microsoft Authentication Library for .NET (MSAL.NET).
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/msal-node-extensions.md b/articles/active-directory/develop/msal-node-extensions.md
index a97d4532d9533..d756f72cd1ff5 100644
--- a/articles/active-directory/develop/msal-node-extensions.md
+++ b/articles/active-directory/develop/msal-node-extensions.md
@@ -1,6 +1,5 @@
---
-title: "Learn about Microsoft Authentication Extensions for Node | Azure"
-titleSuffix: Microsoft identity platform
+title: "Learn about Microsoft Authentication Extensions for Node"
description: The Microsoft Authentication Extensions for Node enables application developers to perform cross-platform token cache serialization and persistence. It gives extra support to the Microsoft Authentication Library for Node (MSAL Node).
services: active-directory
author: henrymbuguakiarie
diff --git a/articles/active-directory/develop/msal-node-migration.md b/articles/active-directory/develop/msal-node-migration.md
index 9f80f47992d75..c8dc4dd369ec7 100644
--- a/articles/active-directory/develop/msal-node-migration.md
+++ b/articles/active-directory/develop/msal-node-migration.md
@@ -1,6 +1,5 @@
---
-title: "Migrate your Node.js application from ADAL to MSAL | Azure"
-titleSuffix: Microsoft identity platform
+title: "Migrate your Node.js application from ADAL to MSAL"
description: How to update your existing Node.js application to use the Microsoft Authentication Library (MSAL) for authentication and authorization instead of the Active Directory Authentication Library (ADAL).
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-overview.md b/articles/active-directory/develop/msal-overview.md
index 2140848c5b3dc..f5e0029b46b6f 100644
--- a/articles/active-directory/develop/msal-overview.md
+++ b/articles/active-directory/develop/msal-overview.md
@@ -1,6 +1,5 @@
---
-title: Learn about MSAL | Azure
-titleSuffix: Microsoft identity platform
+title: Learn about MSAL
description: The Microsoft Authentication Library (MSAL) enables application developers to acquire tokens in order to call secured web APIs. These web APIs can be the Microsoft Graph, other Microsoft APIs, third-party web APIs, or your own web API. MSAL supports multiple application architectures and platforms.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/msal-python-adfs-support.md b/articles/active-directory/develop/msal-python-adfs-support.md
index 86ec0face4f71..560e1be417a16 100644
--- a/articles/active-directory/develop/msal-python-adfs-support.md
+++ b/articles/active-directory/develop/msal-python-adfs-support.md
@@ -1,6 +1,5 @@
---
title: Azure AD FS support (MSAL Python)
-titleSuffix: Microsoft identity platform
description: Learn about Active Directory Federation Services (AD FS) support in the Microsoft Authentication Library for Python
services: active-directory
author: CelesteDG
diff --git a/articles/active-directory/develop/msal-python-token-cache-serialization.md b/articles/active-directory/develop/msal-python-token-cache-serialization.md
index 84ec7783563c1..b495399f98873 100644
--- a/articles/active-directory/develop/msal-python-token-cache-serialization.md
+++ b/articles/active-directory/develop/msal-python-token-cache-serialization.md
@@ -1,6 +1,5 @@
---
-title: Custom token cache serialization (MSAL Python) | Azure
-titleSuffix: Microsoft identity platform
+title: Custom token cache serialization (MSAL Python)
description: Learn how to serializing the token cache for MSAL for Python
services: active-directory
author: rayluo
diff --git a/articles/active-directory/develop/msal-shared-devices.md b/articles/active-directory/develop/msal-shared-devices.md
index 80cc3a51767af..fbd379021ed69 100644
--- a/articles/active-directory/develop/msal-shared-devices.md
+++ b/articles/active-directory/develop/msal-shared-devices.md
@@ -1,6 +1,5 @@
---
title: Shared device mode overview
-titleSuffix: Microsoft identity platform | Azure
description: Learn about shared device mode to enable device sharing for your frontline workers.
services: active-directory
author: brandwe
diff --git a/articles/active-directory/develop/msal-v1-app-scopes.md b/articles/active-directory/develop/msal-v1-app-scopes.md
index 02222661c87f0..213e925508f30 100644
--- a/articles/active-directory/develop/msal-v1-app-scopes.md
+++ b/articles/active-directory/develop/msal-v1-app-scopes.md
@@ -1,5 +1,5 @@
---
-title: Scopes for v1.0 apps (MSAL) | Azure
+title: Scopes for v1.0 apps (MSAL)
description: Learn about the scopes for a v1.0 application using the Microsoft Authentication Library (MSAL).
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/multi-service-web-app-access-microsoft-graph-as-app.md b/articles/active-directory/develop/multi-service-web-app-access-microsoft-graph-as-app.md
index bdf868f6e793b..9a60a4d194c96 100644
--- a/articles/active-directory/develop/multi-service-web-app-access-microsoft-graph-as-app.md
+++ b/articles/active-directory/develop/multi-service-web-app-access-microsoft-graph-as-app.md
@@ -1,5 +1,5 @@
---
-title: Tutorial - Web app accesses Microsoft Graph as the app| Azure
+title: Tutorial - Web app accesses Microsoft Graph as the app
description: In this tutorial, you learn how to access data in Microsoft Graph by using managed identities.
services: microsoft-graph, app-service-web
author: rwike77
diff --git a/articles/active-directory/develop/multi-service-web-app-access-microsoft-graph-as-user.md b/articles/active-directory/develop/multi-service-web-app-access-microsoft-graph-as-user.md
index 6102c64a30892..9607f4f196c49 100644
--- a/articles/active-directory/develop/multi-service-web-app-access-microsoft-graph-as-user.md
+++ b/articles/active-directory/develop/multi-service-web-app-access-microsoft-graph-as-user.md
@@ -1,5 +1,5 @@
---
-title: Tutorial - Web app accesses Microsoft Graph as the user | Azure
+title: Tutorial - Web app accesses Microsoft Graph as the user
description: In this tutorial, you learn how to access data in Microsoft Graph from a web app for a signed-in user.
services: microsoft-graph, app-service-web
author: rwike77
@@ -130,7 +130,7 @@ Using the [Microsoft.Identity.Web library](https://github.com/AzureAD/microsoft-
To see this code as part of a sample application, see the [sample on GitHub](https://github.com/Azure-Samples/ms-identity-easyauth-dotnet-storage-graphapi/tree/main/2-WebApp-graphapi-on-behalf).
> [!NOTE]
-> The Microsoft.Identity.Web library isn't required in your web app for basic authentication/authorization or to authenticate requests with Microsoft Graph. It's possible to [securely call downstream APIs](/azure/app-service/tutorial-auth-aad#call-api-securely-from-server-code) with only the App Service authentication/authorization module enabled.
+> The Microsoft.Identity.Web library isn't required in your web app for basic authentication/authorization or to authenticate requests with Microsoft Graph. It's possible to [securely call downstream APIs](../../app-service/tutorial-auth-aad.md#call-api-securely-from-server-code) with only the App Service authentication/authorization module enabled.
>
> However, the App Service authentication/authorization is designed for more basic authentication scenarios. For more complex scenarios (handling custom claims, for example), you need the Microsoft.Identity.Web library or [Microsoft Authentication Library](msal-overview.md). There's a little more setup and configuration work in the beginning, but the Microsoft.Identity.Web library can run alongside the App Service authentication/authorization module. Later, when your web app needs to handle more complex scenarios, you can disable the App Service authentication/authorization module and Microsoft.Identity.Web will already be a part of your app.
diff --git a/articles/active-directory/develop/multi-service-web-app-access-storage.md b/articles/active-directory/develop/multi-service-web-app-access-storage.md
index 8e85cea4a0edf..48830d1656530 100644
--- a/articles/active-directory/develop/multi-service-web-app-access-storage.md
+++ b/articles/active-directory/develop/multi-service-web-app-access-storage.md
@@ -1,5 +1,5 @@
---
-title: Tutorial - Web app accesses storage by using managed identities | Azure
+title: Tutorial - Web app accesses storage by using managed identities
description: In this tutorial, you learn how to access Azure Storage for an app by using managed identities.
services: storage, app-service-web
author: rwike77
diff --git a/articles/active-directory/develop/multi-service-web-app-authentication-app-service.md b/articles/active-directory/develop/multi-service-web-app-authentication-app-service.md
index ce52b322df7f0..a3d202ed4db4f 100644
--- a/articles/active-directory/develop/multi-service-web-app-authentication-app-service.md
+++ b/articles/active-directory/develop/multi-service-web-app-authentication-app-service.md
@@ -1,5 +1,5 @@
---
-title: Tutorial - Add authentication to a web app on Azure App Service | Azure
+title: Tutorial - Add authentication to a web app on Azure App Service
description: In this tutorial, you learn how to enable authentication and authorization for a web app running on Azure App Service. Limit access to the web app to users in your organization.
services: active-directory, app-service-web
author: rwike77
@@ -23,7 +23,7 @@ Learn how to enable authentication for your web app running on Azure App Service
App Service provides built-in authentication and authorization support, so you can sign in users and access data by writing minimal or no code in your web app. Using the App Service authentication/authorization module isn't required, but helps simplify authentication and authorization for your app. This article shows how to secure your web app with the App Service authentication/authorization module by using Azure Active Directory (Azure AD) as the identity provider.
-The authentication/authorization module is enabled and configured through the Azure portal and app settings. No SDKs, specific languages, or changes to application code are required. A variety of identity providers are supported, which includes Azure AD, Microsoft Account, Facebook, Google, and Twitter. When the authentication/authorization module is enabled, every incoming HTTP request passes through it before being handled by app code. To learn more, see [Authentication and authorization in Azure App Service](/azure/app-service/overview-authentication-authorization.md).
+The authentication/authorization module is enabled and configured through the Azure portal and app settings. No SDKs, specific languages, or changes to application code are required. A variety of identity providers are supported, which includes Azure AD, Microsoft Account, Facebook, Google, and Twitter. When the authentication/authorization module is enabled, every incoming HTTP request passes through it before being handled by app code. To learn more, see [Authentication and authorization in Azure App Service](../../app-service/overview-authentication-authorization.md).
In this tutorial, you learn how to:
@@ -38,7 +38,7 @@ In this tutorial, you learn how to:
## Create and publish a web app on App Service
-For this tutorial, you need a web app deployed to App Service. You can use an existing web app, or you can follow one of the [ASP.NET Core](/azure/app-service/quickstart-dotnetcore), [Node.js](/azure/app-service/quickstart-nodejs), [Python](/azure/app-service/quickstart-python), or [Java](/azure/app-service/quickstart-java) quickstarts to create and publish a new web app to App Service.
+For this tutorial, you need a web app deployed to App Service. You can use an existing web app, or you can follow one of the [ASP.NET Core](../../app-service/quickstart-dotnetcore.md), [Node.js](../../app-service/quickstart-nodejs.md), [Python](../../app-service/quickstart-python.md), or [Java](../../app-service/quickstart-java.md) quickstarts to create and publish a new web app to App Service.
Whether you use an existing web app or create a new one, take note of the following:
@@ -49,7 +49,7 @@ You need these names throughout this tutorial.
## Configure authentication and authorization
-You now have a web app running on App Service. Next, you enable authentication and authorization for the web app. You use Azure AD as the identity provider. For more information, see [Configure Azure AD authentication for your App Service application](/azure/app-service/configure-authentication-provider-aad.md).
+You now have a web app running on App Service. Next, you enable authentication and authorization for the web app. You use Azure AD as the identity provider. For more information, see [Configure Azure AD authentication for your App Service application](../../app-service/configure-authentication-provider-aad.md).
In the [Azure portal](https://portal.azure.com) menu, select **Resource groups**, or search for and select **Resource groups** from any page.
diff --git a/articles/active-directory/develop/multi-service-web-app-clean-up-resources.md b/articles/active-directory/develop/multi-service-web-app-clean-up-resources.md
index c5430ea555ff3..9ae6800fe2c49 100644
--- a/articles/active-directory/develop/multi-service-web-app-clean-up-resources.md
+++ b/articles/active-directory/develop/multi-service-web-app-clean-up-resources.md
@@ -1,5 +1,5 @@
---
-title: Tutorial - Clean up resources | Azure
+title: Tutorial - Clean up resources
description: In this tutorial, you learn how to clean up the Azure resources allocated while creating the web app.
services: storage, app-service-web
author: rwike77
diff --git a/articles/active-directory/develop/multi-service-web-app-overview.md b/articles/active-directory/develop/multi-service-web-app-overview.md
index 247fc626d5d2a..f5d99fc86b19b 100644
--- a/articles/active-directory/develop/multi-service-web-app-overview.md
+++ b/articles/active-directory/develop/multi-service-web-app-overview.md
@@ -1,5 +1,5 @@
---
-title: Tutorial - Build a secure web app on Azure App Service | Azure
+title: Tutorial - Build a secure web app on Azure App Service
description: In this tutorial, you learn how to build a web app by using Azure App Service, sign in users to the web app, call Azure Storage, and call Microsoft Graph.
services: active-directory, app-service-web, storage, microsoft-graph
author: rwike77
diff --git a/articles/active-directory/develop/publisher-verification-overview.md b/articles/active-directory/develop/publisher-verification-overview.md
index 873affa7af8eb..c85d581e0c354 100644
--- a/articles/active-directory/develop/publisher-verification-overview.md
+++ b/articles/active-directory/develop/publisher-verification-overview.md
@@ -1,5 +1,5 @@
---
-title: Publisher verification overview - Microsoft identity platform | Azure
+title: Publisher verification overview
description: Provides an overview of the publisher verification program for the Microsoft identity platform. Lists the benefits, program requirements, and frequently asked questions. When an application is marked as publisher verified, it means that the publisher has verified their identity using a Microsoft Partner Network account that has completed the verification process and has associated this MPN account with their application registration.
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/quickstart-configure-app-access-web-apis.md b/articles/active-directory/develop/quickstart-configure-app-access-web-apis.md
index eb4d4a9fc9dec..b20b5671dc36b 100644
--- a/articles/active-directory/develop/quickstart-configure-app-access-web-apis.md
+++ b/articles/active-directory/develop/quickstart-configure-app-access-web-apis.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Configure an app to access a web API | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Configure an app to access a web API"
description: In this quickstart, you configure an app registration representing a web API in the Microsoft identity platform to enable scoped resource access (permissions) to client applications.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/quickstart-configure-app-expose-web-apis.md b/articles/active-directory/develop/quickstart-configure-app-expose-web-apis.md
index 079239c5d920a..55ee2dd6437f4 100644
--- a/articles/active-directory/develop/quickstart-configure-app-expose-web-apis.md
+++ b/articles/active-directory/develop/quickstart-configure-app-expose-web-apis.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Register and expose a web API | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Register and expose a web API"
description: In this quickstart, your register a web API with the Microsoft identity platform and configure its scopes, exposing it to clients for permissions-based access to the API's resources.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/quickstart-create-new-tenant.md b/articles/active-directory/develop/quickstart-create-new-tenant.md
index 989c5ae2c29d6..ec6c882c71056 100644
--- a/articles/active-directory/develop/quickstart-create-new-tenant.md
+++ b/articles/active-directory/develop/quickstart-create-new-tenant.md
@@ -1,6 +1,5 @@
---
title: "Quickstart: Create an Azure Active Directory tenant"
-titleSuffix: Microsoft identity platform
description: In this quickstart, you learn how to create an Azure Active Directory tenant for use in developing applications that use the Microsoft identity platform for authentication and authorization.
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/quickstart-register-app.md b/articles/active-directory/develop/quickstart-register-app.md
index a3438ec1a8f96..da561b27f188b 100644
--- a/articles/active-directory/develop/quickstart-register-app.md
+++ b/articles/active-directory/develop/quickstart-register-app.md
@@ -1,5 +1,5 @@
---
-title: "Quickstart: Register an app in the Microsoft identity platform | Azure"
+title: "Quickstart: Register an app in the Microsoft identity platform"
description: In this quickstart, you learn how to register an application with the Microsoft identity platform.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/quickstart-v2-android.md b/articles/active-directory/develop/quickstart-v2-android.md
index 2e99c792c01d0..39b4aa04ff02d 100644
--- a/articles/active-directory/develop/quickstart-v2-android.md
+++ b/articles/active-directory/develop/quickstart-v2-android.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Add sign in with Microsoft to an Android app | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Add sign in with Microsoft to an Android app"
description: In this quickstart, learn how Android applications can call an API that requires access tokens issued by the Microsoft identity platform.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/quickstart-v2-aspnet-core-web-api.md b/articles/active-directory/develop/quickstart-v2-aspnet-core-web-api.md
index 3a32e60784c74..e9a6a20a1e637 100644
--- a/articles/active-directory/develop/quickstart-v2-aspnet-core-web-api.md
+++ b/articles/active-directory/develop/quickstart-v2-aspnet-core-web-api.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Protect an ASP.NET Core web API with the Microsoft identity platform | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Protect an ASP.NET Core web API with the Microsoft identity platform"
description: In this quickstart, you download and modify a code sample that demonstrates how to protect an ASP.NET Core web API by using the Microsoft identity platform for authorization.
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/quickstart-v2-aspnet-core-webapp-calls-graph.md b/articles/active-directory/develop/quickstart-v2-aspnet-core-webapp-calls-graph.md
index a28f300cca315..f28abb7d717b0 100644
--- a/articles/active-directory/develop/quickstart-v2-aspnet-core-webapp-calls-graph.md
+++ b/articles/active-directory/develop/quickstart-v2-aspnet-core-webapp-calls-graph.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: ASP.NET Core web app that signs in users and calls Microsoft Graph | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: ASP.NET Core web app that signs in users and calls Microsoft Graph"
description: In this quickstart, you learn how an app uses Microsoft.Identity.Web to implement Microsoft sign-in in an ASP.NET Core web app using OpenID Connect and calls Microsoft Graph.
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/quickstart-v2-aspnet-core-webapp.md b/articles/active-directory/develop/quickstart-v2-aspnet-core-webapp.md
index 74e9664749bcb..ca6363d79ebb6 100644
--- a/articles/active-directory/develop/quickstart-v2-aspnet-core-webapp.md
+++ b/articles/active-directory/develop/quickstart-v2-aspnet-core-webapp.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Add sign-in with Microsoft Identity to an ASP.NET Core web app | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Add sign-in with Microsoft Identity to an ASP.NET Core web app"
description: In this quickstart, you learn how an app implements Microsoft sign-in on an ASP.NET Core web app by using OpenID Connect
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/quickstart-v2-aspnet-webapp.md b/articles/active-directory/develop/quickstart-v2-aspnet-webapp.md
index 4e2d7970ae65b..202256cd4b435 100644
--- a/articles/active-directory/develop/quickstart-v2-aspnet-webapp.md
+++ b/articles/active-directory/develop/quickstart-v2-aspnet-webapp.md
@@ -1,6 +1,5 @@
---
title: "Quickstart: ASP.NET web app that signs in users"
-titleSuffix: Microsoft identity platform
description: Download and run a code sample that shows how an ASP.NET web app can sign in Azure AD users.
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/quickstart-v2-dotnet-native-aspnet.md b/articles/active-directory/develop/quickstart-v2-dotnet-native-aspnet.md
index 8c73733dd6f2b..97245f9695a14 100644
--- a/articles/active-directory/develop/quickstart-v2-dotnet-native-aspnet.md
+++ b/articles/active-directory/develop/quickstart-v2-dotnet-native-aspnet.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Call an ASP.NET web API that is protected by the Microsoft identity platform | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Call an ASP.NET web API that is protected by the Microsoft identity platform"
description: In this quickstart, learn how to call an ASP.NET web API that's protected by the Microsoft identity platform from a Windows Desktop (WPF) application.
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/quickstart-v2-ios.md b/articles/active-directory/develop/quickstart-v2-ios.md
index 17b838b7a3af1..de49d1e510ceb 100644
--- a/articles/active-directory/develop/quickstart-v2-ios.md
+++ b/articles/active-directory/develop/quickstart-v2-ios.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Add sign in with Microsoft to an iOS or macOS app | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Add sign in with Microsoft to an iOS or macOS app"
description: In this quickstart, learn how an iOS or macOS app can sign in users, get an access token from the Microsoft identity platform, and call the Microsoft Graph API.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/quickstart-v2-java-daemon.md b/articles/active-directory/develop/quickstart-v2-java-daemon.md
index dcedc80e213f7..79d3d25455985 100644
--- a/articles/active-directory/develop/quickstart-v2-java-daemon.md
+++ b/articles/active-directory/develop/quickstart-v2-java-daemon.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Call Microsoft Graph from a Java daemon | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Call Microsoft Graph from a Java daemon"
description: In this quickstart, you learn how a Java app can get an access token and call an API protected by Microsoft identity platform endpoint, using the app's own identity
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/quickstart-v2-java-webapp.md b/articles/active-directory/develop/quickstart-v2-java-webapp.md
index c45d885e00490..5d65f778436bf 100644
--- a/articles/active-directory/develop/quickstart-v2-java-webapp.md
+++ b/articles/active-directory/develop/quickstart-v2-java-webapp.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Add sign-in with Microsoft to a Java web app | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Add sign-in with Microsoft to a Java web app"
description: In this quickstart, you'll learn how to add sign-in with Microsoft to a Java web application by using OpenID Connect.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/quickstart-v2-javascript-auth-code-angular.md b/articles/active-directory/develop/quickstart-v2-javascript-auth-code-angular.md
index 1fcd19a82778b..b1416e7a25ace 100644
--- a/articles/active-directory/develop/quickstart-v2-javascript-auth-code-angular.md
+++ b/articles/active-directory/develop/quickstart-v2-javascript-auth-code-angular.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Sign in users in JavaScript Angular single-page apps (SPA) with auth code and call Microsoft Graph | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Sign in users in JavaScript Angular single-page apps (SPA) with auth code and call Microsoft Graph"
description: In this quickstart, learn how a JavaScript Angular single-page application (SPA) can sign in users of personal accounts, work accounts, and school accounts by using the authorization code flow and call Microsoft Graph.
services: active-directory
author: j-mantu
diff --git a/articles/active-directory/develop/quickstart-v2-javascript-auth-code-react.md b/articles/active-directory/develop/quickstart-v2-javascript-auth-code-react.md
index 47323e7b6c445..adb0b0d0a8b28 100644
--- a/articles/active-directory/develop/quickstart-v2-javascript-auth-code-react.md
+++ b/articles/active-directory/develop/quickstart-v2-javascript-auth-code-react.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Sign in users in JavaScript React single-page apps (SPA) with auth code and call Microsoft Graph | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Sign in users in JavaScript React single-page apps (SPA) with auth code and call Microsoft Graph"
description: In this quickstart, learn how a JavaScript React single-page application (SPA) can sign in users of personal accounts, work accounts, and school accounts by using the authorization code flow and call Microsoft Graph.
services: active-directory
author: j-mantu
diff --git a/articles/active-directory/develop/quickstart-v2-javascript-auth-code.md b/articles/active-directory/develop/quickstart-v2-javascript-auth-code.md
index 1e8fc7fd59929..b91eff359c9b9 100644
--- a/articles/active-directory/develop/quickstart-v2-javascript-auth-code.md
+++ b/articles/active-directory/develop/quickstart-v2-javascript-auth-code.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Sign in users in JavaScript single-page apps (SPA) with auth code | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Sign in users in JavaScript single-page apps (SPA) with auth code"
description: In this quickstart, learn how a JavaScript single-page application (SPA) can sign in users of personal accounts, work accounts, and school accounts by using the authorization code flow.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/quickstart-v2-javascript.md b/articles/active-directory/develop/quickstart-v2-javascript.md
index 428e63f3b19de..b4a27830ac4f1 100644
--- a/articles/active-directory/develop/quickstart-v2-javascript.md
+++ b/articles/active-directory/develop/quickstart-v2-javascript.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Sign in users in JavaScript single-page apps | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Sign in users in JavaScript single-page apps"
description: In this quickstart, you learn how a JavaScript app can call an API that requires access tokens issued by the Microsoft identity platform.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/quickstart-v2-netcore-daemon.md b/articles/active-directory/develop/quickstart-v2-netcore-daemon.md
index f5f89ee2ed60a..a1de62c6b8d4d 100644
--- a/articles/active-directory/develop/quickstart-v2-netcore-daemon.md
+++ b/articles/active-directory/develop/quickstart-v2-netcore-daemon.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Get token & call Microsoft Graph in a console app | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Get token & call Microsoft Graph in a console app"
description: In this quickstart, you learn how a .NET Core sample app can use the client credentials flow to get a token and call Microsoft Graph.
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/quickstart-v2-nodejs-console.md b/articles/active-directory/develop/quickstart-v2-nodejs-console.md
index 012f69c48e6c3..938added5e0c6 100644
--- a/articles/active-directory/develop/quickstart-v2-nodejs-console.md
+++ b/articles/active-directory/develop/quickstart-v2-nodejs-console.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Call Microsoft Graph from a Node.js console app | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Call Microsoft Graph from a Node.js console app"
description: In this quickstart, you download and run a code sample that shows how a Node.js console application can get an access token and call an API protected by a Microsoft identity platform endpoint, using the app's own identity
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/quickstart-v2-nodejs-desktop.md b/articles/active-directory/develop/quickstart-v2-nodejs-desktop.md
index 07dae37711a8c..07725f16e3872 100644
--- a/articles/active-directory/develop/quickstart-v2-nodejs-desktop.md
+++ b/articles/active-directory/develop/quickstart-v2-nodejs-desktop.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Call Microsoft Graph from a Node.js desktop app | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Call Microsoft Graph from a Node.js desktop app"
description: In this quickstart, you learn how a Node.js Electron desktop application can sign-in users and get an access token to call an API protected by a Microsoft identity platform endpoint
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/quickstart-v2-nodejs-webapp-msal.md b/articles/active-directory/develop/quickstart-v2-nodejs-webapp-msal.md
index bf9c4c3ba8cd5..7c1b4c83382e6 100644
--- a/articles/active-directory/develop/quickstart-v2-nodejs-webapp-msal.md
+++ b/articles/active-directory/develop/quickstart-v2-nodejs-webapp-msal.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Add authentication to a Node.js web app with MSAL Node | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Add authentication to a Node.js web app with MSAL Node"
description: In this quickstart, you learn how to implement authentication with a Node.js web app and the Microsoft Authentication Library (MSAL) for Node.js.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/quickstart-v2-nodejs-webapp.md b/articles/active-directory/develop/quickstart-v2-nodejs-webapp.md
index 7d30606fdc9d0..ea921ff8db993 100644
--- a/articles/active-directory/develop/quickstart-v2-nodejs-webapp.md
+++ b/articles/active-directory/develop/quickstart-v2-nodejs-webapp.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Add user sign-in to a Node.js web app | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Add user sign-in to a Node.js web app"
description: In this quickstart, you learn how to implement authentication in a Node.js web application using OpenID Connect.
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/quickstart-v2-python-daemon.md b/articles/active-directory/develop/quickstart-v2-python-daemon.md
index 2810b40685164..dafd9b999a1cc 100644
--- a/articles/active-directory/develop/quickstart-v2-python-daemon.md
+++ b/articles/active-directory/develop/quickstart-v2-python-daemon.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Call Microsoft Graph from a Python daemon | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Call Microsoft Graph from a Python daemon"
description: In this quickstart, you learn how a Python process can get an access token and call an API protected by Microsoft identity platform, using the app's own identity
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/quickstart-v2-python-webapp.md b/articles/active-directory/develop/quickstart-v2-python-webapp.md
index 97ea891f25cbd..57063d2adc873 100644
--- a/articles/active-directory/develop/quickstart-v2-python-webapp.md
+++ b/articles/active-directory/develop/quickstart-v2-python-webapp.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Add sign-in with Microsoft to a Python web app | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Add sign-in with Microsoft to a Python web app"
description: In this quickstart, learn how a Python web app can sign in users, get an access token from the Microsoft identity platform, and call the Microsoft Graph API.
services: active-directory
author: CelesteDG
diff --git a/articles/active-directory/develop/quickstart-v2-uwp.md b/articles/active-directory/develop/quickstart-v2-uwp.md
index d7c7493b7d2de..8b25bca5247cb 100644
--- a/articles/active-directory/develop/quickstart-v2-uwp.md
+++ b/articles/active-directory/develop/quickstart-v2-uwp.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Sign in users and call Microsoft Graph in a Universal Windows Platform app | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Sign in users and call Microsoft Graph in a Universal Windows Platform app"
description: In this quickstart, learn how a Universal Windows Platform (UWP) application can get an access token and call an API protected by Microsoft identity platform.
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/quickstart-v2-windows-desktop.md b/articles/active-directory/develop/quickstart-v2-windows-desktop.md
index a228c6dff6714..41ab2a04e65b5 100644
--- a/articles/active-directory/develop/quickstart-v2-windows-desktop.md
+++ b/articles/active-directory/develop/quickstart-v2-windows-desktop.md
@@ -1,5 +1,5 @@
---
-title: "Quickstart: Sign in users and call Microsoft Graph in a Windows desktop app | Azure"
+title: "Quickstart: Sign in users and call Microsoft Graph in a Windows desktop app"
description: In this quickstart, learn how a Windows Presentation Foundation (WPF) application can get an access token and call an API protected by the Microsoft identity platform.
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/redirect-uris-ios.md b/articles/active-directory/develop/redirect-uris-ios.md
index 2067ad904f536..34fcd9e02a75e 100644
--- a/articles/active-directory/develop/redirect-uris-ios.md
+++ b/articles/active-directory/develop/redirect-uris-ios.md
@@ -1,6 +1,5 @@
---
-title: Use redirect URIs with MSAL (iOS/macOS) | Azure
-titleSuffix: Microsoft identity platform
+title: Use redirect URIs with MSAL (iOS/macOS)
description: Learn about the differences between the Microsoft Authentication Library for ObjectiveC (MSAL for iOS and macOS) and Azure AD Authentication Library for ObjectiveC (ADAL.ObjC) and how to migrate between them.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/reference-app-manifest.md b/articles/active-directory/develop/reference-app-manifest.md
index 4cc4d0d2d7671..35e9d656ebddf 100644
--- a/articles/active-directory/develop/reference-app-manifest.md
+++ b/articles/active-directory/develop/reference-app-manifest.md
@@ -1,6 +1,5 @@
---
title: Understanding the Azure Active Directory app manifest
-titleSuffix: Microsoft identity platform
description: Detailed coverage of the Azure Active Directory app manifest, which represents an application's identity configuration in an Azure AD tenant, and is used to facilitate OAuth authorization, consent experience, and more.
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/reference-claims-mapping-policy-type.md b/articles/active-directory/develop/reference-claims-mapping-policy-type.md
index 55e638a1ee942..4276f59f7641a 100644
--- a/articles/active-directory/develop/reference-claims-mapping-policy-type.md
+++ b/articles/active-directory/develop/reference-claims-mapping-policy-type.md
@@ -1,6 +1,5 @@
---
title: Claims mapping policy
-titleSuffix: Microsoft identity platform
description: Learn about the claims mapping policy type, which is used to modify the claims emitted in tokens issued for specific applications.
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/reference-saml-tokens.md b/articles/active-directory/develop/reference-saml-tokens.md
index c792c12e99774..2e01ae2122bcf 100644
--- a/articles/active-directory/develop/reference-saml-tokens.md
+++ b/articles/active-directory/develop/reference-saml-tokens.md
@@ -1,6 +1,5 @@
---
-title: SAML 2.0 token claims reference | Azure
-titleSuffix: Microsoft identity platform
+title: SAML 2.0 token claims reference
description: Claims reference with details on the claims included in SAML 2.0 tokens issued by the Microsoft identity platform, including their JWT equivalents.
author: kenwith
services: active-directory
diff --git a/articles/active-directory/develop/reference-third-party-cookies-spas.md b/articles/active-directory/develop/reference-third-party-cookies-spas.md
index 71d1fac442ef0..94c5d57837153 100644
--- a/articles/active-directory/develop/reference-third-party-cookies-spas.md
+++ b/articles/active-directory/develop/reference-third-party-cookies-spas.md
@@ -1,6 +1,5 @@
---
-title: How to handle Intelligent Tracking Protection (ITP) in Safari | Azure
-titleSuffix: Microsoft identity platform
+title: How to handle Intelligent Tracking Protection (ITP) in Safari
description: Single-page app (SPA) authentication when third-party cookies are no longer allowed.
services: active-directory
author: nickludwig
diff --git a/articles/active-directory/develop/reference-v2-libraries.md b/articles/active-directory/develop/reference-v2-libraries.md
index 833f48c2518f4..aeeeb4415eba6 100644
--- a/articles/active-directory/develop/reference-v2-libraries.md
+++ b/articles/active-directory/develop/reference-v2-libraries.md
@@ -1,5 +1,5 @@
---
-title: Microsoft identity platform authentication libraries | Azure
+title: Microsoft identity platform authentication libraries
description: List of client libraries and middleware compatible with the Microsoft identity platform. Use these libraries to add support for user sign-in (authentication) and protected web API access (authorization) to your applications.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/refresh-tokens.md b/articles/active-directory/develop/refresh-tokens.md
index 22a7ca457ba9d..42bc9e3dcc2be 100644
--- a/articles/active-directory/develop/refresh-tokens.md
+++ b/articles/active-directory/develop/refresh-tokens.md
@@ -1,6 +1,5 @@
---
-title: Microsoft identity platform refresh tokens | Azure
-titleSuffix: Microsoft identity platform
+title: Microsoft identity platform refresh tokens
description: Learn about refresh tokens emitted by the Azure AD.
services: active-directory
author: SHERMANOUKO
@@ -29,7 +28,10 @@ Before reading through this article, it's recommended that you go through the fo
## Refresh token lifetime
-Refresh tokens have a longer lifetime than access tokens. The default lifetime for the tokens is 90 days and they replace themselves with a fresh token upon every use. As such, whenever a refresh token is used to acquire a new access token, a new refresh token is also issued. The Microsoft identity platform doesn't revoke old refresh tokens when used to fetch new access tokens. Securely delete the old refresh token after acquiring a new one. Refresh tokens need to be stored safely like access tokens or application credentials.
+Refresh tokens have a longer lifetime than access tokens. The default lifetime for the refresh tokens is 24 hours for [single page apps](reference-third-party-cookies-spas.md) and 90 days for all other scenarios. Refresh tokens replace themselves with a fresh token upon every use. The Microsoft identity platform doesn't revoke old refresh tokens when used to fetch new access tokens. Securely delete the old refresh token after acquiring a new one. Refresh tokens need to be stored safely like access tokens or application credentials.
+
+>[!IMPORTANT]
+> Refresh tokens sent to a redirect URI registered as `spa` expire after 24 hours. Additional refresh tokens acquired using the initial refresh token carry over that expiration time, so apps must be prepared to rerun the authorization code flow using an interactive authentication to get a new refresh token every 24 hours. Users do not have to enter their credentials and usually don't even see any related user experience, just a reload of your application. The browser must visit the log-in page in a top-level frame to show the login session. This is due to [privacy features in browsers that block third party cookies](reference-third-party-cookies-spas.md).
## Refresh token expiration
diff --git a/articles/active-directory/develop/registration-config-how-to.md b/articles/active-directory/develop/registration-config-how-to.md
index 48ff3235a5178..b5815d2101fa3 100644
--- a/articles/active-directory/develop/registration-config-how-to.md
+++ b/articles/active-directory/develop/registration-config-how-to.md
@@ -1,6 +1,5 @@
---
title: Get the endpoints for an Azure AD app registration
-titleSuffix: Microsoft identity platform
description: How to find the authentication endpoints for a custom application you're developing or registering with Azure AD.
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/reply-url.md b/articles/active-directory/develop/reply-url.md
index ca8256c05dec2..f7329f05b3b34 100644
--- a/articles/active-directory/develop/reply-url.md
+++ b/articles/active-directory/develop/reply-url.md
@@ -1,6 +1,5 @@
---
title: Redirect URI (reply URL) restrictions | Azure AD
-titleSuffix: Microsoft identity platform
description: A description of the restrictions and limitations on redirect URI (reply URL) format enforced by the Microsoft identity platform.
author: madansr7
ms.author: saumadan
diff --git a/articles/active-directory/develop/request-custom-claims.md b/articles/active-directory/develop/request-custom-claims.md
index c0c22dc0011bc..49e517d91d2c2 100644
--- a/articles/active-directory/develop/request-custom-claims.md
+++ b/articles/active-directory/develop/request-custom-claims.md
@@ -1,6 +1,5 @@
---
-title: Request custom claims (MSAL iOS/macOS) | Azure
-titleSuffix: Microsoft identity platform
+title: Request custom claims (MSAL iOS/macOS)
description: Learn how to request custom claims.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/sample-v2-code.md b/articles/active-directory/develop/sample-v2-code.md
index 448d6b01a40f0..8935ca3701016 100644
--- a/articles/active-directory/develop/sample-v2-code.md
+++ b/articles/active-directory/develop/sample-v2-code.md
@@ -108,7 +108,7 @@ The following samples show an application that accesses the Microsoft Graph API
> |.NET Core| • [Call Microsoft Graph](https://github.com/Azure-Samples/active-directory-dotnetcore-daemon-v2/tree/master/1-Call-MSGraph) • [Call web API](https://github.com/Azure-Samples/active-directory-dotnetcore-daemon-v2/tree/master/2-Call-OwnApi) • [Call own web API](https://github.com/Azure-Samples/active-directory-dotnetcore-daemon-v2/tree/master/4-Call-OwnApi-Pop) • [Using managed identity and Azure key vault](https://github.com/Azure-Samples/active-directory-dotnetcore-daemon-v2/tree/master/3-Using-KeyVault)| MSAL.NET | Client credentials grant|
> | ASP.NET|[Multi-tenant with Microsoft identity platform endpoint](https://github.com/Azure-Samples/ms-identity-aspnet-daemon-webapp) | MSAL.NET | Client credentials grant|
> | Java | • [Call Microsoft Graph with Secret](https://github.com/Azure-Samples/ms-identity-msal-java-samples/tree/main/1.%20Server-Side%20Scenarios/msal-client-credential-secret) • [Call Microsoft Graph with Certificate](https://github.com/Azure-Samples/ms-identity-msal-java-samples/tree/main/1.%20Server-Side%20Scenarios/msal-client-credential-certificate)| MSAL Java | Client credentials grant|
-> | Node.js | [Sign in users and call web API](https://github.com/Azure-Samples/ms-identity-javascript-nodejs-console) | MSAL Node | Client credentials grant |
+> | Node.js | [Call Microsoft Graph with secret](https://github.com/Azure-Samples/ms-identity-javascript-nodejs-console) | MSAL Node | Client credentials grant |
> | Python | • [Call Microsoft Graph with secret](https://github.com/Azure-Samples/ms-identity-python-daemon/tree/master/1-Call-MsGraph-WithSecret) • [Call Microsoft Graph with certificate](https://github.com/Azure-Samples/ms-identity-python-daemon/tree/master/2-Call-MsGraph-WithCertificate) | MSAL Python| Client credentials grant|
## Azure Functions as web APIs
diff --git a/articles/active-directory/develop/scenario-daemon-app-configuration.md b/articles/active-directory/develop/scenario-daemon-app-configuration.md
index 94d6e6b3c2d2a..1e33e3023fa60 100644
--- a/articles/active-directory/develop/scenario-daemon-app-configuration.md
+++ b/articles/active-directory/develop/scenario-daemon-app-configuration.md
@@ -1,5 +1,5 @@
---
-title: Configure daemon apps that call web APIs - Microsoft identity platform | Azure
+title: Configure daemon apps that call web APIs
description: Learn how to configure the code for your daemon application that calls web APIs (app configuration)
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/scenario-daemon-app-registration.md b/articles/active-directory/develop/scenario-daemon-app-registration.md
index 55356c27ef926..6ba695086a434 100644
--- a/articles/active-directory/develop/scenario-daemon-app-registration.md
+++ b/articles/active-directory/develop/scenario-daemon-app-registration.md
@@ -1,5 +1,5 @@
---
-title: Register daemon apps that call web APIs - Microsoft identity platform | Azure
+title: Register daemon apps that call web APIs
description: Learn how to build a daemon app that calls web APIs - app registration
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/scenario-daemon-call-api.md b/articles/active-directory/develop/scenario-daemon-call-api.md
index 62e131cdd75cf..4d816d6dc9a40 100644
--- a/articles/active-directory/develop/scenario-daemon-call-api.md
+++ b/articles/active-directory/develop/scenario-daemon-call-api.md
@@ -1,6 +1,5 @@
---
-title: Call a web API from a daemon app | Azure
-titleSuffix: Microsoft identity platform
+title: Call a web API from a daemon app
description: Learn how to build a daemon app that calls a web API.
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/scenario-daemon-overview.md b/articles/active-directory/develop/scenario-daemon-overview.md
index a4c3f173fc62b..46926e5b763ae 100644
--- a/articles/active-directory/develop/scenario-daemon-overview.md
+++ b/articles/active-directory/develop/scenario-daemon-overview.md
@@ -1,6 +1,5 @@
---
-title: Build a daemon app that calls web APIs | Azure
-titleSuffix: Microsoft identity platform
+title: Build a daemon app that calls web APIs
description: Learn how to build a daemon app that calls web APIs
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/scenario-daemon-production.md b/articles/active-directory/develop/scenario-daemon-production.md
index b8bffe0f11bf9..74d7aa17f06e6 100644
--- a/articles/active-directory/develop/scenario-daemon-production.md
+++ b/articles/active-directory/develop/scenario-daemon-production.md
@@ -1,6 +1,5 @@
---
-title: Move a daemon app that calls web APIs to production | Azure
-titleSuffix: Microsoft identity platform
+title: Move a daemon app that calls web APIs to production
description: Learn how to move a daemon app that calls web APIs to production
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/scenario-desktop-acquire-token-device-code-flow.md b/articles/active-directory/develop/scenario-desktop-acquire-token-device-code-flow.md
index 57b2d715f0d16..bd250f56c2cd0 100644
--- a/articles/active-directory/develop/scenario-desktop-acquire-token-device-code-flow.md
+++ b/articles/active-directory/develop/scenario-desktop-acquire-token-device-code-flow.md
@@ -1,9 +1,8 @@
---
-title: Acquire a token to call a web API using device code flow (desktop app) | Azure
-titleSuffix: Microsoft identity platform
+title: Acquire a token to call a web API using device code flow (desktop app)
description: Learn how to build a desktop app that calls web APIs to acquire a token for the app using device code flow
services: active-directory
-author: CelesteDG
+author: Dickson-Mwendia
manager: CelesteDG
ms.service: active-directory
@@ -11,7 +10,7 @@ ms.subservice: develop
ms.topic: conceptual
ms.workload: identity
ms.date: 08/25/2021
-ms.author: celested
+ms.author: dmwendia
ms.custom: aaddev, devx-track-python
#Customer intent: As an application developer, I want to know how to write a desktop app that calls web APIs by using the Microsoft identity platform.
---
diff --git a/articles/active-directory/develop/scenario-desktop-acquire-token-integrated-windows-authentication.md b/articles/active-directory/develop/scenario-desktop-acquire-token-integrated-windows-authentication.md
index 2c3689416bb02..830f5d2cd336b 100644
--- a/articles/active-directory/develop/scenario-desktop-acquire-token-integrated-windows-authentication.md
+++ b/articles/active-directory/develop/scenario-desktop-acquire-token-integrated-windows-authentication.md
@@ -1,9 +1,8 @@
---
-title: Acquire a token to call a web API using integrated Windows authentication (desktop app) | Azure
-titleSuffix: Microsoft identity platform
+title: Acquire a token to call a web API using integrated Windows authentication (desktop app)
description: Learn how to build a desktop app that calls web APIs to acquire a token for the app using integrated Windows authentication
services: active-directory
-author: CelesteDG
+author: Dickson-Mwendia
manager: CelesteDG
ms.service: active-directory
@@ -11,7 +10,7 @@ ms.subservice: develop
ms.topic: conceptual
ms.workload: identity
ms.date: 08/25/2021
-ms.author: celested
+ms.author: dmwendia
ms.custom: aaddev, devx-track-python
#Customer intent: As an application developer, I want to know how to write a desktop app that calls web APIs by using the Microsoft identity platform.
---
diff --git a/articles/active-directory/develop/scenario-desktop-acquire-token-interactive.md b/articles/active-directory/develop/scenario-desktop-acquire-token-interactive.md
index 012b5ed8fb2b5..e0c423137d79a 100644
--- a/articles/active-directory/develop/scenario-desktop-acquire-token-interactive.md
+++ b/articles/active-directory/develop/scenario-desktop-acquire-token-interactive.md
@@ -1,9 +1,8 @@
---
-title: Acquire a token to call a web API interactively (desktop app) | Azure
-titleSuffix: Microsoft identity platform
+title: Acquire a token to call a web API interactively (desktop app)
description: Learn how to build a desktop app that calls web APIs to acquire a token for the app interactively
services: active-directory
-author: CelesteDG
+author: Dickson-Mwendia
manager: CelesteDG
ms.service: active-directory
@@ -11,7 +10,7 @@ ms.subservice: develop
ms.topic: conceptual
ms.workload: identity
ms.date: 08/25/2021
-ms.author: celested
+ms.author: dmwendia
ms.custom: aaddev, devx-track-python, has-adal-ref
#Customer intent: As an application developer, I want to know how to write a desktop app that calls web APIs by using the Microsoft identity platform.
---
diff --git a/articles/active-directory/develop/scenario-desktop-acquire-token-username-password.md b/articles/active-directory/develop/scenario-desktop-acquire-token-username-password.md
index fafb414f36de5..2604fbc2bb0bb 100644
--- a/articles/active-directory/develop/scenario-desktop-acquire-token-username-password.md
+++ b/articles/active-directory/develop/scenario-desktop-acquire-token-username-password.md
@@ -1,9 +1,8 @@
---
-title: Acquire a token to call a web API using username and password (desktop app) | Azure
-titleSuffix: Microsoft identity platform
+title: Acquire a token to call a web API using username and password (desktop app)
description: Learn how to build a desktop app that calls web APIs to acquire a token for the app using username and password.
services: active-directory
-author: CelesteDG
+author: Dickson-Mwendia
manager: CelesteDG
ms.service: active-directory
@@ -11,7 +10,7 @@ ms.subservice: develop
ms.topic: conceptual
ms.workload: identity
ms.date: 08/25/2021
-ms.author: celested
+ms.author: dmwendia
ms.custom: aaddev, devx-track-python
#Customer intent: As an application developer, I want to know how to write a desktop app that calls web APIs by using the Microsoft identity platform.
---
diff --git a/articles/active-directory/develop/scenario-desktop-acquire-token-wam.md b/articles/active-directory/develop/scenario-desktop-acquire-token-wam.md
index 0a9ee4307c923..c1fcbd358a09f 100644
--- a/articles/active-directory/develop/scenario-desktop-acquire-token-wam.md
+++ b/articles/active-directory/develop/scenario-desktop-acquire-token-wam.md
@@ -1,17 +1,16 @@
---
-title: Acquire a token to call a web API using web account manager (desktop app) | Azure
-titleSuffix: Microsoft identity platform
+title: Acquire a token to call a web API using web account manager (desktop app)
description: Learn how to build a desktop app that calls web APIs to acquire a token for the app using web account manager
services: active-directory
-author: CelesteDG
+author: Dickson-Mwendia
manager: CelesteDG
ms.service: active-directory
ms.subservice: develop
ms.topic: conceptual
ms.workload: identity
-ms.date: 08/25/2021
-ms.author: celested
+ms.date: 06/07/2022
+ms.author: dmwendia
ms.custom: aaddev, devx-track-python
#Customer intent: As an application developer, I want to know how to write a desktop app that calls web APIs by using the Microsoft identity platform.
---
@@ -26,13 +25,13 @@ MSAL 4.25+ supports WAM on UWP, .NET Classic, .NET Core 3.1, and .NET 5.
For .NET Classic and .NET Core 3.1, WAM functionality is fully supported but you have to add a reference to [Microsoft.Identity.Client.Desktop](https://www.nuget.org/packages/Microsoft.Identity.Client.Desktop/) package, alongside MSAL, and instead of `WithBroker()`, call `.WithWindowsBroker()`.
-For .NET 5, target `net5.0-windows10.0.17763.0` (or higher) and not just `net5.0`. Your app will still run on older versions of Windows if you add `7` in the csproj. MSAL will use a browser when WAM is not available.
+For .NET 5, target `net5.0-windows10.0.17763.0` (or higher) and not just `net5.0`. Your app will still run on older versions of Windows if you add `7` in the csproj. MSAL will use a browser when WAM isn't available.
## WAM value proposition
Using an authentication broker such as WAM has numerous benefits.
-- Enhanced security (your app does not have to manage the powerful refresh token)
+- Enhanced security (your app doesn't have to manage the powerful refresh token)
- Better support for Windows Hello, Conditional Access and FIDO keys
- Integration with Windows' "Email and Accounts" view
- Better Single Sign-On (users don't have to reenter passwords)
@@ -40,8 +39,8 @@ Using an authentication broker such as WAM has numerous benefits.
## WAM limitations
-- B2C and ADFS authorities are not supported. MSAL will fallback to a browser.
-- Available on Win10+ and Win Server 2019+. On Mac, Linux and earlier Windows MSAL will fallback to a browser.
+- B2C and ADFS authorities aren't supported. MSAL will fall back to a browser.
+- Available on Win10+ and Win Server 2019+. On Mac, Linux, and earlier versions of Windows, MSAL will fall back to a browser.
- Not available on Xbox.
## WAM calling pattern
@@ -79,11 +78,11 @@ catch (MsalUiRequiredException) // no change in the pattern
}
```
-Call `.WithBroker(true)`. If a broker is not present (e.g. Win8.1, Mac, or Linux), then MSAL will fallback to a browser! Redirect URI rules apply to the browser.
+Call `.WithBroker(true)`. If a broker isn't present (for example, Win8.1, Mac, or Linux), then MSAL will fall back to a browser. Redirect URI rules apply to the browser.
## Redirect URI
-WAM redirect URIs do not need to be configured in MSAL, but they must be configured in the app registration.
+WAM redirect URIs don't need to be configured in MSAL, but they must be configured in the app registration.
### Win32 (.NET framework / .NET 5)
@@ -102,13 +101,13 @@ ms-appx-web://microsoft.aad.brokerplugin/{client_id}
## Token cache persistence
-It's important to persist MSAL's token cache because MSAL needs to save internal WAM account IDs there. Without it, restarting the app means that `GetAccounts` API will miss some of the accounts. Note that on UWP, MSAL knows where to save the token cache.
+It's important to persist MSAL's token cache because MSAL needs to save internal WAM account IDs there. Without it, restarting the app means that `GetAccounts` API will miss some of the accounts. On UWP, MSAL knows where to save the token cache.
## GetAccounts
`GetAccounts` returns accounts of users who have previously logged in interactively into the app.
-In addition to this, WAM can list the OS-wide Work and School accounts configured in Windows (for Win32 apps but not for UWP apps). To opt-into this feature, set `ListWindowsWorkAndSchoolAccounts` in `WindowsBrokerOptions` to **true**. You can enable it as below.
+In addition, WAM can list the OS-wide Work and School accounts configured in Windows (for Win32 apps but not for UWP apps). To opt-into this feature, set `ListWindowsWorkAndSchoolAccounts` in `WindowsBrokerOptions` to **true**. You can enable it as below.
```csharp
.WithWindowsBrokerOptions(new WindowsBrokerOptions()
@@ -122,13 +121,13 @@ In addition to this, WAM can list the OS-wide Work and School accounts configure
```
>[!NOTE]
-> Microsoft (i.e. outlook.com etc.) accounts will not be listed in Win32 nor UWP for privacy reasons.
+> Microsoft (outlook.com etc.) accounts will not be listed in Win32 nor UWP for privacy reasons.
Applications cannot remove accounts from Windows!
## RemoveAsync
-- Removes all account information from MSAL's token cache (this includes MSA - i.e. personal accounts - account info and other account information copied by MSAL into its cache).
+- Removes all account information from MSAL's token cache (this includes MSA, that is, personal accounts information copied by MSAL into its cache).
- Removes app-only (not OS-wide) accounts.
>[!NOTE]
@@ -136,22 +135,22 @@ Applications cannot remove accounts from Windows!
## Other considerations
-- WAM's interactive operations require being on the UI thread. MSAL throws a meaningful exception when not on UI thread. This does NOT apply to console apps.
+- WAM's interactive operations require being on the UI thread. MSAL throws a meaningful exception when not on UI thread. This doesn't apply to console apps.
- `WithAccount` provides an accelerated authentication experience if the MSAL account was originally obtained via WAM, or, WAM can find a work and school account in Windows.
-- WAM is not able to pre-populate the username field with a login hint, unless a Work and School account with the same username is found in Windows.
+- WAM isn't able to pre-populate the username field with a login hint, unless a Work and School account with the same username is found in Windows.
- If WAM is unable to offer an accelerated authentication experience, it will show an account picker. Users can add new accounts.
!["WAM account picker"](media/scenario-desktop-acquire-token-wam/wam-account-picker.png)
-- New accounts are automatically remembered by Windows. Work and School have the option of joining the organization's directory or opting out completely, in which case the account will not appear under "Email & Accounts". Microsoft accounts are automatically added to Windows. Apps cannot list these accounts programmatically (but only through the Account Picker).
+- New accounts are automatically remembered by Windows. Work and School have the option of joining the organization's directory or opting out completely, in which case the account won't appear under "Email & Accounts". Microsoft accounts are automatically added to Windows. Apps can't list these accounts programmatically (but only through the Account Picker).
## Troubleshooting
-### "Either the user cancelled the authentication or the WAM Account Picker crashed because the app is running in an elevated process" error message
+### "Either the user canceled the authentication or the WAM Account Picker crashed because the app is running in an elevated process" error message
When an app that uses MSAL is run as an elevated process, some of these calls within WAM may fail due to different process security levels. Internally MSAL.NET uses native Windows methods ([COM](/windows/win32/com/the-component-object-model)) to integrate with WAM. Starting with version 4.32.0, MSAL will display a descriptive error message when it detects that the app process is elevated and WAM returned no accounts.
-One solution is to not run the app as elevated, if possible. Another solution is for the app developer to call `WindowsNativeUtils.InitializeProcessSecurity` method when the app starts up. This will set the security of the processes used by WAM to the same levels. See [this sample app](https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/blob/master/tests/devapps/WAM/NetCoreWinFormsWam/Program.cs#L18-L21) for an example. However, note, that this solution is not guaranteed to succeed to due external factors like the underlying CLR behavior. In that case, an `MsalClientException` will be thrown. See issue [#2560](https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/issues/2560) for additional information.
+One solution is to not run the app as elevated, if possible. Another solution is for the app developer to call `WindowsNativeUtils.InitializeProcessSecurity` method when the app starts up. This will set the security of the processes used by WAM to the same levels. See [this sample app](https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/blob/master/tests/devapps/WAM/NetCoreWinFormsWam/Program.cs#L18-L21) for an example. However, note, that this solution isn't guaranteed to succeed to due external factors like the underlying CLR behavior. In that case, an `MsalClientException` will be thrown. For more information, see issue [#2560](https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/issues/2560).
### "WAM Account Picker did not return an account" error message
diff --git a/articles/active-directory/develop/scenario-desktop-acquire-token.md b/articles/active-directory/develop/scenario-desktop-acquire-token.md
index 043b1cb3caa8f..80155c315bbab 100644
--- a/articles/active-directory/develop/scenario-desktop-acquire-token.md
+++ b/articles/active-directory/develop/scenario-desktop-acquire-token.md
@@ -1,9 +1,8 @@
---
-title: Acquire a token to call a web API (desktop app) | Azure
-titleSuffix: Microsoft identity platform
+title: Acquire a token to call a web API (desktop app)
description: Learn how to build a desktop app that calls web APIs to acquire a token for the app
services: active-directory
-author: CelesteDG
+author: Dickson-Mwendia
manager: CelesteDG
ms.service: active-directory
@@ -11,7 +10,7 @@ ms.subservice: develop
ms.topic: conceptual
ms.workload: identity
ms.date: 08/25/2021
-ms.author: celested
+ms.author: dmwendia
ms.custom: aaddev, devx-track-python, has-adal-ref
#Customer intent: As an application developer, I want to know how to write a desktop app that calls web APIs by using the Microsoft identity platform.
---
@@ -176,7 +175,7 @@ let accounts = await msalTokenCache.getAllAccounts();
const tokenRequest = {
code: response["authorization_code"],
- codeVerifier: verifier // PKCE Code Verifier
+ codeVerifier: verifier, // PKCE Code Verifier
redirectUri: "your_redirect_uri",
scopes: ["User.Read"],
};
diff --git a/articles/active-directory/develop/scenario-desktop-app-configuration.md b/articles/active-directory/develop/scenario-desktop-app-configuration.md
index a16007776342b..1a6c8b7dd2e21 100644
--- a/articles/active-directory/develop/scenario-desktop-app-configuration.md
+++ b/articles/active-directory/develop/scenario-desktop-app-configuration.md
@@ -1,6 +1,5 @@
---
-title: Configure desktop apps that call web APIs | Azure
-titleSuffix: Microsoft identity platform
+title: Configure desktop apps that call web APIs
description: Learn how to configure the code of a desktop app that calls web APIs
services: active-directory
author: jmprieur
@@ -240,51 +239,21 @@ if let application = try? MSALPublicClientApplication(configuration: config) { /
# [Node.js](#tab/nodejs)
-Configuration parameters can be loaded from many sources, like a JSON file or from environment variables. Below, an *.env* file is used.
+Configuration parameters can be loaded from many sources, like a JavaScript file or from environment variables. Below, an *authConfig.js* file is used.
-```Text
-# Credentials
-CLIENT_ID=Enter_the_Application_Id_Here
-TENANT_ID=Enter_the_Tenant_Info_Here
+:::code language="js" source="~/ms-identity-JavaScript-nodejs-desktop/App/authConfig.js":::
-# Configuration
-REDIRECT_URI=msal://redirect
-
-# Endpoints
-AAD_ENDPOINT_HOST=Enter_the_Cloud_Instance_Id_Here
-GRAPH_ENDPOINT_HOST=Enter_the_Graph_Endpoint_Here
-
-# RESOURCES
-GRAPH_ME_ENDPOINT=v1.0/me
-GRAPH_MAIL_ENDPOINT=v1.0/me/messages
-
-# SCOPES
-GRAPH_SCOPES=User.Read Mail.Read
-```
-
-Load the *.env* file to environment variables. MSAL Node can be initialized minimally as below. See the available [configuration options](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-node/docs/configuration.md).
+Import the configuration object from *authConfig.js* file. MSAL Node can be initialized minimally as below. See the available [configuration options](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-node/docs/configuration.md).
```JavaScript
const { PublicClientApplication } = require('@azure/msal-node');
+const { msalConfig } = require('./authConfig')
-const MSAL_CONFIG = {
- auth: {
- clientId: process.env.CLIENT_ID,
- authority: `${process.env.AAD_ENDPOINT_HOST}${process.env.TENANT_ID}`,
- redirectUri: process.env.REDIRECT_URI,
- },
- system: {
- loggerOptions: {
- loggerCallback(loglevel, message, containsPii) {
- console.log(message);
- },
- piiLoggingEnabled: false,
- logLevel: LogLevel.Verbose,
- }
- }
-};
-
-clientApplication = new PublicClientApplication(MSAL_CONFIG);
+/**
+* Initialize a public client application. For more information, visit:
+* https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-node/docs/initialize-public-client-application.md
+*/
+clientApplication = new PublicClientApplication(msalConfig);
```
# [Python](#tab/python)
diff --git a/articles/active-directory/develop/scenario-desktop-app-registration.md b/articles/active-directory/develop/scenario-desktop-app-registration.md
index 2fff477c02b6a..f04089267b154 100644
--- a/articles/active-directory/develop/scenario-desktop-app-registration.md
+++ b/articles/active-directory/develop/scenario-desktop-app-registration.md
@@ -1,6 +1,5 @@
---
-title: Register desktop apps that call web APIs | Azure
-titleSuffix: Microsoft identity platform
+title: Register desktop apps that call web APIs
description: Learn how to build a desktop app that calls web APIs (app registration)
services: active-directory
author: jmprieur
@@ -52,7 +51,7 @@ Specify the redirect URI for your app by [configuring the platform settings](qui
> As a security best practice, we recommend explicitly setting `https://login.microsoftonline.com/common/oauth2/nativeclient` or `http://localhost` as the redirect URI. Some authentication libraries like MSAL.NET use a default value of `urn:ietf:wg:oauth:2.0:oob` when no other redirect URI is specified, which is not recommended. This default will be updated as a breaking change in the next major release.
- If you build a native Objective-C or Swift app for macOS, register the redirect URI based on your application's bundle identifier in the following format: `msauth.://auth`. Replace `` with your application's bundle identifier.
-- If you build a Node.js Electron app, use a custom file protocol instead of a regular web (https://) redirect URI in order to handle the redirection step of the authorization flow, for instance `msal://redirect`. The custom file protocol name shouldn't be obvious to guess and should follow the suggestions in the [OAuth2.0 specification for Native Apps](https://tools.ietf.org/html/rfc8252#section-7.1).
+- If you build a Node.js Electron app, use a custom string protocol instead of a regular web (https://) redirect URI in order to handle the redirection step of the authorization flow, for instance `msal{Your_Application/Client_Id}://auth` (e.g. *msalfa29b4c9-7675-4b61-8a0a-bf7b2b4fda91://auth*). The custom string protocol name shouldn't be obvious to guess and should follow the suggestions in the [OAuth2.0 specification for Native Apps](https://tools.ietf.org/html/rfc8252#section-7.1).
- If your app uses only integrated Windows authentication or a username and a password, you don't need to register a redirect URI for your application. These flows do a round trip to the Microsoft identity platform v2.0 endpoint. Your application won't be called back on any specific URI.
- To distinguish [device code flow](scenario-desktop-acquire-token-device-code-flow.md), [integrated Windows authentication](scenario-desktop-acquire-token-integrated-windows-authentication.md), and a [username and a password](scenario-desktop-acquire-token-username-password.md) from a confidential client application using a client credential flow used in [daemon applications](scenario-daemon-overview.md), none of which requires a redirect URI, configure it as a public client application. To achieve this configuration:
diff --git a/articles/active-directory/develop/scenario-desktop-call-api.md b/articles/active-directory/develop/scenario-desktop-call-api.md
index 80571ffdce460..b9f92c62552b1 100644
--- a/articles/active-directory/develop/scenario-desktop-call-api.md
+++ b/articles/active-directory/develop/scenario-desktop-call-api.md
@@ -1,6 +1,5 @@
---
-title: Call web APIs from a desktop app | Azure
-titleSuffix: Microsoft identity platform
+title: Call web APIs from a desktop app
description: Learn how to build a desktop app that calls web APIs
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/scenario-desktop-overview.md b/articles/active-directory/develop/scenario-desktop-overview.md
index 26b34410db114..69cfc7631a763 100644
--- a/articles/active-directory/develop/scenario-desktop-overview.md
+++ b/articles/active-directory/develop/scenario-desktop-overview.md
@@ -1,6 +1,5 @@
---
-title: Build a desktop app that calls web APIs | Azure
-titleSuffix: Microsoft identity platform
+title: Build a desktop app that calls web APIs
description: Learn how to build a desktop app that calls web APIs (overview)
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/scenario-desktop-production.md b/articles/active-directory/develop/scenario-desktop-production.md
index 713097e7fd6e3..912e53954d1e5 100644
--- a/articles/active-directory/develop/scenario-desktop-production.md
+++ b/articles/active-directory/develop/scenario-desktop-production.md
@@ -1,6 +1,5 @@
---
-title: Move desktop app calling web APIs to production | Azure
-titleSuffix: Microsoft identity platform
+title: Move desktop app calling web APIs to production
description: Learn how to move a desktop app that calls web APIs to production
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/scenario-mobile-acquire-token.md b/articles/active-directory/develop/scenario-mobile-acquire-token.md
index 0bf8d14e23ad7..9928a1fec46d8 100644
--- a/articles/active-directory/develop/scenario-mobile-acquire-token.md
+++ b/articles/active-directory/develop/scenario-mobile-acquire-token.md
@@ -1,6 +1,5 @@
---
-title: Acquire a token to call a web API (mobile apps) | Azure
-titleSuffix: Microsoft identity platform
+title: Acquire a token to call a web API (mobile apps)
description: Learn how to build a mobile app that calls web APIs. (Get a token for the app.)
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/scenario-mobile-app-configuration.md b/articles/active-directory/develop/scenario-mobile-app-configuration.md
index 82ca9f06abab3..55616d1973da7 100644
--- a/articles/active-directory/develop/scenario-mobile-app-configuration.md
+++ b/articles/active-directory/develop/scenario-mobile-app-configuration.md
@@ -1,6 +1,5 @@
---
-title: Configure mobile apps that call web APIs | Azure
-titleSuffix: Microsoft identity platform
+title: Configure mobile apps that call web APIs
description: Learn how to configure your mobile app's code to call a web API
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/scenario-mobile-app-registration.md b/articles/active-directory/develop/scenario-mobile-app-registration.md
index d816c0cacbceb..d5c7797aef7d0 100644
--- a/articles/active-directory/develop/scenario-mobile-app-registration.md
+++ b/articles/active-directory/develop/scenario-mobile-app-registration.md
@@ -1,6 +1,5 @@
---
-title: Register mobile apps that call web APIs | Azure
-titleSuffix: Microsoft identity platform
+title: Register mobile apps that call web APIs
description: Learn how to build a mobile app that calls web APIs (app's registration)
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/scenario-mobile-call-api.md b/articles/active-directory/develop/scenario-mobile-call-api.md
index a40c6cbe820ff..8759d006553a3 100644
--- a/articles/active-directory/develop/scenario-mobile-call-api.md
+++ b/articles/active-directory/develop/scenario-mobile-call-api.md
@@ -1,6 +1,5 @@
---
-title: Call a web API from a mobile app | Azure
-titleSuffix: Microsoft identity platform
+title: Call a web API from a mobile app
description: Learn how to build a mobile app that calls web APIs. (Call a web API.)
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/scenario-mobile-overview.md b/articles/active-directory/develop/scenario-mobile-overview.md
index 3a7e97593a324..074db9ee17027 100644
--- a/articles/active-directory/develop/scenario-mobile-overview.md
+++ b/articles/active-directory/develop/scenario-mobile-overview.md
@@ -1,6 +1,5 @@
---
-title: Build a mobile app that calls web APIs | Azure
-titleSuffix: Microsoft identity platform | Azure
+title: Build a mobile app that calls web APIs
description: Learn how to build a mobile app that calls web APIs (overview)
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/scenario-mobile-production.md b/articles/active-directory/develop/scenario-mobile-production.md
index 616b1ad8ceb5a..2a24704d3c1fd 100644
--- a/articles/active-directory/develop/scenario-mobile-production.md
+++ b/articles/active-directory/develop/scenario-mobile-production.md
@@ -1,6 +1,5 @@
---
-title: Prepare mobile app-calling web APIs for production | Azure
-titleSuffix: Microsoft identity platform
+title: Prepare mobile app-calling web APIs for production
description: Learn how to build a mobile app that calls web APIs. (Prepare apps for production.)
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/scenario-protected-web-api-app-configuration.md b/articles/active-directory/develop/scenario-protected-web-api-app-configuration.md
index 7493b06bcbcdb..3e5fdcd4855b3 100644
--- a/articles/active-directory/develop/scenario-protected-web-api-app-configuration.md
+++ b/articles/active-directory/develop/scenario-protected-web-api-app-configuration.md
@@ -117,7 +117,7 @@ You can create a web API from scratch by using Microsoft.Identity.Web project te
#### Starting from an existing ASP.NET Core 3.1 application
-ASP.NET Core 3.1 uses the Microsoft.AspNetCore.AzureAD.UI library. The middleware is initialized in the Startup.cs file.
+ASP.NET Core 3.1 uses the Microsoft.AspNetCore.Authentication.JwtBearer library. The middleware is initialized in the Startup.cs file.
```csharp
using Microsoft.AspNetCore.Authentication.JwtBearer;
diff --git a/articles/active-directory/develop/scenario-protected-web-api-app-registration.md b/articles/active-directory/develop/scenario-protected-web-api-app-registration.md
index 58fc2c6a5201d..c9524452874e0 100644
--- a/articles/active-directory/develop/scenario-protected-web-api-app-registration.md
+++ b/articles/active-directory/develop/scenario-protected-web-api-app-registration.md
@@ -1,6 +1,5 @@
---
-title: Protected web API app registration | Azure
-titleSuffix: Microsoft identity platform
+title: Protected web API app registration
description: Learn how to build a protected web API and the information you need to register the app.
author: jmprieur
manager: CelesteDG
diff --git a/articles/active-directory/develop/scenario-protected-web-api-overview.md b/articles/active-directory/develop/scenario-protected-web-api-overview.md
index b8672d043d39b..a3a7fe284792d 100644
--- a/articles/active-directory/develop/scenario-protected-web-api-overview.md
+++ b/articles/active-directory/develop/scenario-protected-web-api-overview.md
@@ -1,6 +1,5 @@
---
title: Protected web API - overview
-titleSuffix: Microsoft identity platform
description: Learn how to build a protected web API (overview).
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/scenario-protected-web-api-production.md b/articles/active-directory/develop/scenario-protected-web-api-production.md
index feee2340de35c..32623abf5ac93 100644
--- a/articles/active-directory/develop/scenario-protected-web-api-production.md
+++ b/articles/active-directory/develop/scenario-protected-web-api-production.md
@@ -1,6 +1,5 @@
---
-title: Move a protected web API to production | Azure
-titleSuffix: Microsoft identity platform
+title: Move a protected web API to production
description: Learn how to build a protected web API (move to production).
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/scenario-spa-acquire-token.md b/articles/active-directory/develop/scenario-spa-acquire-token.md
index 87cc6370f7091..2427bb313c635 100644
--- a/articles/active-directory/develop/scenario-spa-acquire-token.md
+++ b/articles/active-directory/develop/scenario-spa-acquire-token.md
@@ -1,6 +1,5 @@
---
-title: Acquire a token to call a web API (single-page apps) | Azure
-titleSuffix: Microsoft identity platform
+title: Acquire a token to call a web API (single-page apps)
description: Learn how to build a single-page application (acquire a token to call an API)
services: active-directory
author: negoe
@@ -154,6 +153,8 @@ For success and failure of the silent token acquisition, MSAL Angular provides e
import { MsalBroadcastService } from '@azure/msal-angular';
import { EventMessage, EventType } from '@azure/msal-browser';
+import { filter, Subject, takeUntil } from 'rxjs';
+
// In app.component.ts
export class AppComponent implements OnInit {
private readonly _destroying$ = new Subject();
@@ -226,7 +227,7 @@ For success and failure of the silent token acquisition, MSAL Angular provides c
```javascript
// In app.component.ts
ngOnInit() {
- this.subscription= this.broadcastService.subscribe("msal:acquireTokenFailure", (payload) => {
+ this.subscription = this.broadcastService.subscribe("msal:acquireTokenFailure", (payload) => {
});
}
ngOnDestroy() {
@@ -394,15 +395,18 @@ You can use optional claims for the following purposes:
To request optional claims in `IdToken`, you can send a stringified claims object to the `claimsRequest` field of the `AuthenticationParameters.ts` class.
```javascript
-"optionalClaims":
- {
- "idToken": [
- {
- "name": "auth_time",
- "essential": true
- }
- ],
-
+var claims = {
+ optionalClaims:
+ {
+ idToken: [
+ {
+ name: "auth_time",
+ essential: true
+ }
+ ],
+ }
+};
+
var request = {
scopes: ["user.read"],
claimsRequest: JSON.stringify(claims)
diff --git a/articles/active-directory/develop/scenario-spa-app-configuration.md b/articles/active-directory/develop/scenario-spa-app-configuration.md
index 7f0eeb9c23dbf..c4cf6239587a3 100644
--- a/articles/active-directory/develop/scenario-spa-app-configuration.md
+++ b/articles/active-directory/develop/scenario-spa-app-configuration.md
@@ -1,6 +1,5 @@
---
-title: Configure single-page app | Azure
-titleSuffix: Microsoft identity platform
+title: Configure single-page app
description: Learn how to build a single-page application (app's code configuration)
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/scenario-spa-app-registration.md b/articles/active-directory/develop/scenario-spa-app-registration.md
index bd6b5bef1e6d0..530b20f746ac5 100644
--- a/articles/active-directory/develop/scenario-spa-app-registration.md
+++ b/articles/active-directory/develop/scenario-spa-app-registration.md
@@ -1,6 +1,5 @@
---
-title: Register single-page applications (SPA) | Azure
-titleSuffix: Microsoft identity platform
+title: Register single-page applications (SPA)
description: Learn how to build a single-page application (app registration)
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/scenario-spa-call-api.md b/articles/active-directory/develop/scenario-spa-call-api.md
index 38ae1bfc64014..48cd2bc2775e9 100644
--- a/articles/active-directory/develop/scenario-spa-call-api.md
+++ b/articles/active-directory/develop/scenario-spa-call-api.md
@@ -1,6 +1,5 @@
---
title: Build single-page app calling a web API
-titleSuffix: Microsoft identity platform
description: Learn how to build a single-page application that calls a web API
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/scenario-spa-overview.md b/articles/active-directory/develop/scenario-spa-overview.md
index 9e4405c519499..94b8152631877 100644
--- a/articles/active-directory/develop/scenario-spa-overview.md
+++ b/articles/active-directory/develop/scenario-spa-overview.md
@@ -1,6 +1,5 @@
---
title: JavaScript single-page app scenario
-titleSuffix: Microsoft identity platform
description: Learn how to build a single-page application (scenario overview) by using the Microsoft identity platform.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/scenario-spa-production.md b/articles/active-directory/develop/scenario-spa-production.md
index c8f2c1f243590..0991dc4634576 100644
--- a/articles/active-directory/develop/scenario-spa-production.md
+++ b/articles/active-directory/develop/scenario-spa-production.md
@@ -1,6 +1,5 @@
---
title: Move single-page app to production
-titleSuffix: Microsoft identity platform
description: Learn how to build a single-page application (move to production)
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/scenario-spa-sign-in.md b/articles/active-directory/develop/scenario-spa-sign-in.md
index 41406d638a487..c4c360064e928 100644
--- a/articles/active-directory/develop/scenario-spa-sign-in.md
+++ b/articles/active-directory/develop/scenario-spa-sign-in.md
@@ -1,6 +1,5 @@
---
title: Single-page app sign-in & sign-out
-titleSuffix: Microsoft identity platform
description: Learn how to build a single-page application (sign-in)
services: active-directory
author: mmacy
@@ -28,7 +27,7 @@ Before you can get tokens to access APIs in your application, you need an authen
You can also optionally pass the scopes of the APIs for which you need the user to consent at the time of sign-in.
> [!NOTE]
-> If your application already has access to an authenticated user context or ID token, you can skip the login step and directly acquire tokens. For details, see [SSO without MSAL.js login](msal-js-sso.md#sso-without-msaljs-login).
+> If your application already has access to an authenticated user context or ID token, you can skip the login step and directly acquire tokens. For details, see [SSO with user hint](msal-js-sso.md#with-user-hint).
## Choosing between a pop-up or redirect experience
diff --git a/articles/active-directory/develop/scenario-web-api-call-api-acquire-token.md b/articles/active-directory/develop/scenario-web-api-call-api-acquire-token.md
index 42d6f3dbf9f2c..24610c0ca643f 100644
--- a/articles/active-directory/develop/scenario-web-api-call-api-acquire-token.md
+++ b/articles/active-directory/develop/scenario-web-api-call-api-acquire-token.md
@@ -1,6 +1,5 @@
---
-title: Get a token for a web API that calls web APIs | Azure
-titleSuffix: Microsoft identity platform
+title: Get a token for a web API that calls web APIs
description: Learn how to build a web API that calls web APIs that require acquiring a token for the app.
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/scenario-web-api-call-api-app-configuration.md b/articles/active-directory/develop/scenario-web-api-call-api-app-configuration.md
index c8ec084eadb25..1f5a3e4e20d88 100644
--- a/articles/active-directory/develop/scenario-web-api-call-api-app-configuration.md
+++ b/articles/active-directory/develop/scenario-web-api-call-api-app-configuration.md
@@ -1,6 +1,5 @@
---
-title: Configure a web API that calls web APIs | Azure
-titleSuffix: Microsoft identity platform
+title: Configure a web API that calls web APIs
description: Learn how to build a web API that calls web APIs (app's code configuration)
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/scenario-web-api-call-api-app-registration.md b/articles/active-directory/develop/scenario-web-api-call-api-app-registration.md
index 0256bb2989c9b..09b55e20c597a 100644
--- a/articles/active-directory/develop/scenario-web-api-call-api-app-registration.md
+++ b/articles/active-directory/develop/scenario-web-api-call-api-app-registration.md
@@ -1,6 +1,5 @@
---
-title: Register a web API that calls web APIs | Azure
-titleSuffix: Microsoft identity platform
+title: Register a web API that calls web APIs
description: Learn how to build a web API that calls downstream web APIs (app registration).
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/scenario-web-api-call-api-call-api.md b/articles/active-directory/develop/scenario-web-api-call-api-call-api.md
index edd16f04647a0..bdf8e89babb8a 100644
--- a/articles/active-directory/develop/scenario-web-api-call-api-call-api.md
+++ b/articles/active-directory/develop/scenario-web-api-call-api-call-api.md
@@ -1,6 +1,5 @@
---
-title: Web API that calls web APIs | Azure
-titleSuffix: Microsoft identity platform
+title: Web API that calls web APIs
description: Learn how to build a web API that calls web APIs.
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/scenario-web-api-call-api-overview.md b/articles/active-directory/develop/scenario-web-api-call-api-overview.md
index 6128388f34991..f71ed5e85f045 100644
--- a/articles/active-directory/develop/scenario-web-api-call-api-overview.md
+++ b/articles/active-directory/develop/scenario-web-api-call-api-overview.md
@@ -1,6 +1,5 @@
---
-title: Build a web API that calls web APIs | Azure
-titleSuffix: Microsoft identity platform
+title: Build a web API that calls web APIs
description: Learn how to build a web API that calls downstream web APIs (overview).
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/scenario-web-api-call-api-production.md b/articles/active-directory/develop/scenario-web-api-call-api-production.md
index 39e29b439dcb0..fe89a359848d5 100644
--- a/articles/active-directory/develop/scenario-web-api-call-api-production.md
+++ b/articles/active-directory/develop/scenario-web-api-call-api-production.md
@@ -1,6 +1,5 @@
---
-title: Move web API calling web APIs to production | Azure
-titleSuffix: Microsoft identity platform
+title: Move web API calling web APIs to production
description: Learn how to move a web API that calls web APIs to production.
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/scenario-web-app-call-api-acquire-token.md b/articles/active-directory/develop/scenario-web-app-call-api-acquire-token.md
index f1e3e0501ade4..2cfc69ae7af05 100644
--- a/articles/active-directory/develop/scenario-web-app-call-api-acquire-token.md
+++ b/articles/active-directory/develop/scenario-web-app-call-api-acquire-token.md
@@ -1,6 +1,5 @@
---
-title: Get a token in a web app that calls web APIs | Azure
-titleSuffix: Microsoft identity platform
+title: Get a token in a web app that calls web APIs
description: Learn how to acquire a token for a web app that calls web APIs
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/scenario-web-app-call-api-app-configuration.md b/articles/active-directory/develop/scenario-web-app-call-api-app-configuration.md
index ed9b7c319ee07..fa25cb72c1da1 100644
--- a/articles/active-directory/develop/scenario-web-app-call-api-app-configuration.md
+++ b/articles/active-directory/develop/scenario-web-app-call-api-app-configuration.md
@@ -1,6 +1,5 @@
---
-title: Configure a web app that calls web APIs | Azure
-titleSuffix: Microsoft identity platform
+title: Configure a web app that calls web APIs
description: Learn how to configure the code of a web app that calls web APIs
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/scenario-web-app-call-api-app-registration.md b/articles/active-directory/develop/scenario-web-app-call-api-app-registration.md
index e206175741f7d..733d87599f534 100644
--- a/articles/active-directory/develop/scenario-web-app-call-api-app-registration.md
+++ b/articles/active-directory/develop/scenario-web-app-call-api-app-registration.md
@@ -1,6 +1,5 @@
---
-title: Register a web app that calls web APIs | Azure
-titleSuffix: Microsoft identity platform
+title: Register a web app that calls web APIs
description: Learn how to register a web app that calls web APIs
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/scenario-web-app-call-api-call-api.md b/articles/active-directory/develop/scenario-web-app-call-api-call-api.md
index 6caa7be1bc296..587fadc795154 100644
--- a/articles/active-directory/develop/scenario-web-app-call-api-call-api.md
+++ b/articles/active-directory/develop/scenario-web-app-call-api-call-api.md
@@ -1,6 +1,5 @@
---
-title: Call a web api from a web app | Azure
-titleSuffix: Microsoft identity platform
+title: Call a web api from a web app
description: Learn how to build a web app that calls web APIs (calling a protected web API)
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/scenario-web-app-call-api-overview.md b/articles/active-directory/develop/scenario-web-app-call-api-overview.md
index 60102d5655995..2d7eacf1c6f68 100644
--- a/articles/active-directory/develop/scenario-web-app-call-api-overview.md
+++ b/articles/active-directory/develop/scenario-web-app-call-api-overview.md
@@ -1,6 +1,5 @@
---
-title: Build a web app that authenticates users and calls web APIs | Azure
-titleSuffix: Microsoft identity platform
+title: Build a web app that authenticates users and calls web APIs
description: Learn how to build a web app that authenticates users and calls web APIs (overview)
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/scenario-web-app-call-api-production.md b/articles/active-directory/develop/scenario-web-app-call-api-production.md
index 7d90bfa977c58..a61457305ccf2 100644
--- a/articles/active-directory/develop/scenario-web-app-call-api-production.md
+++ b/articles/active-directory/develop/scenario-web-app-call-api-production.md
@@ -1,6 +1,5 @@
---
-title: Move to production a web app that calls web APIs | Azure
-titleSuffix: Microsoft identity platform
+title: Move to production a web app that calls web APIs
description: Learn how to move to production a web app that calls web APIs.
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/scenario-web-app-call-api-sign-in.md b/articles/active-directory/develop/scenario-web-app-call-api-sign-in.md
index a307096168bcc..b7b729bd536f8 100644
--- a/articles/active-directory/develop/scenario-web-app-call-api-sign-in.md
+++ b/articles/active-directory/develop/scenario-web-app-call-api-sign-in.md
@@ -1,6 +1,5 @@
---
-title: Remove accounts from the token cache on sign-out | Azure
-titleSuffix: Microsoft identity platform
+title: Remove accounts from the token cache on sign-out
description: Learn how to remove an account from the token cache on sign-out
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/scenario-web-app-sign-user-app-configuration.md b/articles/active-directory/develop/scenario-web-app-sign-user-app-configuration.md
index b9a59a676984a..cf903ee7b3887 100644
--- a/articles/active-directory/develop/scenario-web-app-sign-user-app-configuration.md
+++ b/articles/active-directory/develop/scenario-web-app-sign-user-app-configuration.md
@@ -1,6 +1,5 @@
---
-title: Configure a web app that signs in users | Azure
-titleSuffix: Microsoft identity platform
+title: Configure a web app that signs in users
description: Learn how to build a web app that signs in users (code configuration)
services: active-directory
author: jmprieur
@@ -180,31 +179,15 @@ In the Azure portal, the reply URIs that you register on the **Authentication**
# [Node.js](#tab/nodejs)
-Here, the configuration parameters reside in `index.js`
+Here, the configuration parameters reside in *.env* as environment variables:
-```javascript
+:::code language="text" source="~/ms-identity-node/App/.env":::
-const REDIRECT_URI = "http://localhost:3000/redirect";
+These parameters are used to create a configuration object in *authConfig.js* file, which will eventually be used to initialize MSAL Node:
-const config = {
- auth: {
- clientId: "Enter_the_Application_Id_Here",
- authority: "https://login.microsoftonline.com/Enter_the_Tenant_Info_Here/",
- clientSecret: "Enter_the_Client_Secret_Here"
- },
- system: {
- loggerOptions: {
- loggerCallback(loglevel, message, containsPii) {
- console.log(message);
- },
- piiLoggingEnabled: false,
- logLevel: msal.LogLevel.Verbose,
- }
- }
-};
-```
+:::code language="js" source="~/ms-identity-node/App/authConfig.js":::
-In the Azure portal, the reply URIs that you register on the Authentication page for your application need to match the redirectUri instances that the application defines (`http://localhost:3000/redirect`).
+In the Azure portal, the reply URIs that you register on the Authentication page for your application need to match the redirectUri instances that the application defines (`http://localhost:3000/auth/redirect`).
> [!NOTE]
> This quickstart proposes to store the client secret in the configuration file for simplicity. In your production app, you'd want to use other ways to store your secret, such as a key vault or an environment variable.
@@ -350,12 +333,9 @@ For details about the authorization code flow that this method triggers, see the
# [Node.js](#tab/nodejs)
-```javascript
-const msal = require('@azure/msal-node');
+Node sample the Express framework. MSAL is initialized in *auth* route handler:
-// Create msal application object
-const cca = new msal.ConfidentialClientApplication(config);
-```
+:::code language="js" source="~/ms-identity-node/App/routes/auth.js" range="6-16":::
# [Python](#tab/python)
diff --git a/articles/active-directory/develop/scenario-web-app-sign-user-app-registration.md b/articles/active-directory/develop/scenario-web-app-sign-user-app-registration.md
index 2e7f4999fc082..a8966172ab92c 100644
--- a/articles/active-directory/develop/scenario-web-app-sign-user-app-registration.md
+++ b/articles/active-directory/develop/scenario-web-app-sign-user-app-registration.md
@@ -1,6 +1,5 @@
---
-title: Register a web app that signs in users | Azure
-titleSuffix: Microsoft identity platform
+title: Register a web app that signs in users
description: Learn how to register a web app that signs in users
services: active-directory
author: jmprieur
@@ -96,8 +95,8 @@ By default, the sample uses:
1. When the **Register an application page** appears, enter your application's registration information:
1. Enter a **Name** for your application, for example `node-webapp`. Users of your app might see this name, and you can change it later.
- 1. Change **Supported account types** to **Accounts in any organizational directory and personal Microsoft accounts (e.g. Skype, Xbox, Outlook.com)**.
- 1. In the **Redirect URI (optional)** section, select **Web** in the combo box and enter the following redirect URI: `http://localhost:3000/redirect`.
+ 1. Change **Supported account types** to **Accounts in this organizational directory only**.
+ 1. In the **Redirect URI (optional)** section, select **Web** in the combo box and enter the following redirect URI: `http://localhost:3000/auth/redirect`.
1. Select **Register** to create the application.
1. On the app's **Overview** page, find the **Application (client) ID** value and record it for later. You'll need it to configure the configuration file for this project.
1. Under **Manage**, select **Certificates & secrets**.
diff --git a/articles/active-directory/develop/scenario-web-app-sign-user-overview.md b/articles/active-directory/develop/scenario-web-app-sign-user-overview.md
index fd7700143ebf4..5f25eb4c08871 100644
--- a/articles/active-directory/develop/scenario-web-app-sign-user-overview.md
+++ b/articles/active-directory/develop/scenario-web-app-sign-user-overview.md
@@ -1,6 +1,5 @@
---
-title: Sign in users from a Web app | Azure
-titleSuffix: Microsoft identity platform
+title: Sign in users from a Web app
description: Learn how to build a web app that signs in users (overview)
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/scenario-web-app-sign-user-production.md b/articles/active-directory/develop/scenario-web-app-sign-user-production.md
index 4c58c6e963eb0..2776555c01dda 100644
--- a/articles/active-directory/develop/scenario-web-app-sign-user-production.md
+++ b/articles/active-directory/develop/scenario-web-app-sign-user-production.md
@@ -1,6 +1,5 @@
---
-title: Move web app that signs in users to production | Azure
-titleSuffix: Microsoft identity platform
+title: Move web app that signs in users to production
description: Learn how to build a web app that signs in users (move to production)
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/scenario-web-app-sign-user-sign-in.md b/articles/active-directory/develop/scenario-web-app-sign-user-sign-in.md
index 9e70e56361a44..c53d1de74057d 100644
--- a/articles/active-directory/develop/scenario-web-app-sign-user-sign-in.md
+++ b/articles/active-directory/develop/scenario-web-app-sign-user-sign-in.md
@@ -1,6 +1,5 @@
---
-title: Write a web app that signs in/out users | Azure
-titleSuffix: Microsoft identity platform
+title: Write a web app that signs in/out users
description: Learn how to build a web app that signs in/out users
services: active-directory
author: jmprieur
@@ -72,7 +71,7 @@ else
# [Java](#tab/java)
-In our Java quickstart, the sign-in button is located in the [main/resources/templates/index.html](https://github.com/Azure-Samples/ms-identity-java-webapp/blob/master/msal-java-webapp-sample/src/main/resources/templates/index.html) file.
+In the Java quickstart, the sign-in button is located in the [main/resources/templates/index.html](https://github.com/Azure-Samples/ms-identity-java-webapp/blob/master/msal-java-webapp-sample/src/main/resources/templates/index.html) file.
```html
@@ -94,13 +93,13 @@ In our Java quickstart, the sign-in button is located in the [main/resources/tem
# [Node.js](#tab/nodejs)
-In the Node.js quickstart, there's no sign-in button. The code-behind automatically prompts the user for sign-in when it's reaching the root of the web app.
+In the Node.js quickstart, the code for the sign-in button is located in *index.hbs* template file.
-```javascript
-app.get('/', (req, res) => {
- // authentication logic
-});
-```
+:::code language="hbs" source="~/ms-identity-node/App/views/index.hbs" range="10-11":::
+
+This template is served via the main (index) route of the app:
+
+:::code language="js" source="~/ms-identity-node/App/routes/index.js" range="6-15":::
# [Python](#tab/python)
@@ -169,40 +168,9 @@ public class AuthPageController {
# [Node.js](#tab/nodejs)
-Unlike other platforms, here the MSAL Node takes care of letting the user sign in from the login page.
-
-```javascript
-
-// 1st leg of auth code flow: acquire a code
-app.get('/', (req, res) => {
- const authCodeUrlParameters = {
- scopes: ["user.read"],
- redirectUri: REDIRECT_URI,
- };
-
- // get url to sign user in and consent to scopes needed for application
- pca.getAuthCodeUrl(authCodeUrlParameters).then((response) => {
- res.redirect(response);
- }).catch((error) => console.log(JSON.stringify(error)));
-});
-
-// 2nd leg of auth code flow: exchange code for token
-app.get('/redirect', (req, res) => {
- const tokenRequest = {
- code: req.query.code,
- scopes: ["user.read"],
- redirectUri: REDIRECT_URI,
- };
-
- pca.acquireTokenByCode(tokenRequest).then((response) => {
- console.log("\nResponse: \n:", response);
- res.sendStatus(200);
- }).catch((error) => {
- console.log(error);
- res.status(500).send(error);
- });
-});
-```
+When the user selects the **Sign in** link, which triggers the `/auth/signin` route, the sign-in controller takes over to authenticate the user with Microsoft identity platform.
+
+:::code language="js" source="~/ms-identity-node/App/routes/auth.js" range="27-107, 135-161":::
# [Python](#tab/python)
@@ -355,7 +323,7 @@ In our Java quickstart, the sign-out button is located in the main/resources/tem
# [Node.js](#tab/nodejs)
-This sample application does not implement sign-out.
+:::code language="hbs" source="~/ms-identity-node/App/views/index.hbs" range="2, 8":::
# [Python](#tab/python)
@@ -431,7 +399,9 @@ In Java, sign-out is handled by calling the Microsoft identity platform `logout`
# [Node.js](#tab/nodejs)
-This sample application does not implement sign-out.
+When the user selects the **Sign out** button, the app triggers the `/signout` route, which destroys the session and redirects the browser to Microsoft identity platform sign-out endpoint.
+
+:::code language="js" source="~/ms-identity-node/App/routes/auth.js" range="163-174":::
# [Python](#tab/python)
@@ -479,7 +449,7 @@ In the Java quickstart, the post-logout redirect URI just displays the index.htm
# [Node.js](#tab/nodejs)
-This sample application does not implement sign-out.
+In the Node quickstart, the post-logout redirect URI is used to redirect the browser back to sample home page after the user completes the logout process with the Microsoft identity platform.
# [Python](#tab/python)
@@ -494,4 +464,4 @@ If you want to learn more about sign-out, read the protocol documentation that's
## Next steps
Move on to the next article in this scenario,
-[Move to production](scenario-web-app-sign-user-production.md).
\ No newline at end of file
+[Move to production](scenario-web-app-sign-user-production.md).
diff --git a/articles/active-directory/develop/secure-group-access-control.md b/articles/active-directory/develop/secure-group-access-control.md
index ef8053e29c3fa..d26b1a79cf3a2 100644
--- a/articles/active-directory/develop/secure-group-access-control.md
+++ b/articles/active-directory/develop/secure-group-access-control.md
@@ -1,5 +1,5 @@
---
-title: Secure access control using groups in Azure AD - Microsoft identity platform
+title: Secure access control using groups in Azure AD
description: Learn about how groups are used to securely control access to resources in Azure AD.
services: active-directory
author: chrischiedo
diff --git a/articles/active-directory/develop/secure-least-privileged-access.md b/articles/active-directory/develop/secure-least-privileged-access.md
index 8228300a5af1a..fa98d4186d339 100644
--- a/articles/active-directory/develop/secure-least-privileged-access.md
+++ b/articles/active-directory/develop/secure-least-privileged-access.md
@@ -1,6 +1,5 @@
---
title: "Increase app security with the principle of least privilege"
-titleSuffix: Microsoft identity platform
description: Learn how the principle of least privilege can help increase the security of your application, its data, and which features of the Microsoft identity platform you can use to implement least privileged access.
services: active-directory
author: Chrispine-Chiedo
diff --git a/articles/active-directory/develop/security-best-practices-for-app-registration.md b/articles/active-directory/develop/security-best-practices-for-app-registration.md
index d1be63024f8cb..05808cdf99be5 100644
--- a/articles/active-directory/develop/security-best-practices-for-app-registration.md
+++ b/articles/active-directory/develop/security-best-practices-for-app-registration.md
@@ -1,5 +1,5 @@
---
-title: Best practices for Azure AD application registration configuration - Microsoft identity platform
+title: Best practices for Azure AD application registration configuration
description: Learn about a set of best practices and general guidance on Azure AD application registration configuration.
services: active-directory
author: Chrispine-Chiedo
diff --git a/articles/active-directory/develop/security-tokens.md b/articles/active-directory/develop/security-tokens.md
index 1ddb6269ef2b7..a16d1a944b334 100644
--- a/articles/active-directory/develop/security-tokens.md
+++ b/articles/active-directory/develop/security-tokens.md
@@ -1,6 +1,5 @@
---
-title: Security tokens | Azure
-titleSuffix: Microsoft identity platform
+title: Security tokens
description: Learn about the basics of security tokens in the Microsoft identity platform.
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/single-and-multi-tenant-apps.md b/articles/active-directory/develop/single-and-multi-tenant-apps.md
index 09a80213bf1e8..716ec1a823242 100644
--- a/articles/active-directory/develop/single-and-multi-tenant-apps.md
+++ b/articles/active-directory/develop/single-and-multi-tenant-apps.md
@@ -1,6 +1,5 @@
---
title: Single and multi-tenant apps in Azure AD
-titleSuffix: Microsoft identity platform
description: Learn about the features and differences between single-tenant and multi-tenant apps in Azure AD.
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/single-multi-account.md b/articles/active-directory/develop/single-multi-account.md
index 4133e7b09dfc5..6b4544e7be7f8 100644
--- a/articles/active-directory/develop/single-multi-account.md
+++ b/articles/active-directory/develop/single-multi-account.md
@@ -1,5 +1,5 @@
---
-title: Single and multiple account public client apps | Azure
+title: Single and multiple account public client apps
description: An overview of single and multiple account public client apps.
services: active-directory
author: shoatman
diff --git a/articles/active-directory/develop/single-page-app-quickstart.md b/articles/active-directory/develop/single-page-app-quickstart.md
index ac6a837a28f51..d5d57010ce02f 100644
--- a/articles/active-directory/develop/single-page-app-quickstart.md
+++ b/articles/active-directory/develop/single-page-app-quickstart.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Sign in users in single-page apps (SPA) with auth code | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Sign in users in single-page apps (SPA) with auth code"
description: In this quickstart, learn how a JavaScript single-page application (SPA) can sign in users of personal accounts, work accounts, and school accounts by using the authorization code flow.
services: active-directory
author: Dickson-Mwendia
diff --git a/articles/active-directory/develop/single-sign-on-macos-ios.md b/articles/active-directory/develop/single-sign-on-macos-ios.md
index f2fcce9891c87..34ad1e937f83d 100644
--- a/articles/active-directory/develop/single-sign-on-macos-ios.md
+++ b/articles/active-directory/develop/single-sign-on-macos-ios.md
@@ -1,6 +1,5 @@
---
title: Configure SSO on macOS and iOS
-titleSuffix: Microsoft identity platform
description: Learn how to configure single sign on (SSO) on macOS and iOS.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/single-sign-on-saml-protocol.md b/articles/active-directory/develop/single-sign-on-saml-protocol.md
index ab4b57acce478..a83322ec260c4 100644
--- a/articles/active-directory/develop/single-sign-on-saml-protocol.md
+++ b/articles/active-directory/develop/single-sign-on-saml-protocol.md
@@ -1,6 +1,5 @@
---
title: Azure Single Sign On SAML Protocol
-titleSuffix: Microsoft identity platform
description: This article describes the Single Sign-On (SSO) SAML protocol in Azure Active Directory
services: active-directory
documentationcenter: .net
diff --git a/articles/active-directory/develop/ssl-issues.md b/articles/active-directory/develop/ssl-issues.md
index f1f3251dcbcf3..2b3e5f983d20f 100644
--- a/articles/active-directory/develop/ssl-issues.md
+++ b/articles/active-directory/develop/ssl-issues.md
@@ -1,6 +1,5 @@
---
-title: Troubleshoot TLS/SSL issues (MSAL iOS/macOS) | Azure
-titleSuffix: Microsoft identity platform
+title: Troubleshoot TLS/SSL issues (MSAL iOS/macOS)
description: Learn what to do about various problems using TLS/SSL certificates with the MSAL.Objective-C library.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/sso-between-adal-msal-apps-macos-ios.md b/articles/active-directory/develop/sso-between-adal-msal-apps-macos-ios.md
index 12cd9fd44b9cc..50cfb0fbfe9f3 100644
--- a/articles/active-directory/develop/sso-between-adal-msal-apps-macos-ios.md
+++ b/articles/active-directory/develop/sso-between-adal-msal-apps-macos-ios.md
@@ -1,6 +1,5 @@
---
-title: SSO between ADAL & MSAL apps (iOS/macOS) | Azure
-titleSuffix: Microsoft identity platform
+title: SSO between ADAL & MSAL apps (iOS/macOS)
description: Learn how to share SSO between ADAL and MSAL apps
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/support-fido2-authentication.md b/articles/active-directory/develop/support-fido2-authentication.md
index c83bd5d036d40..23224de47cadb 100644
--- a/articles/active-directory/develop/support-fido2-authentication.md
+++ b/articles/active-directory/develop/support-fido2-authentication.md
@@ -1,6 +1,5 @@
---
-title: Support passwordless authentication with FIDO2 keys in apps you develop | Azure
-titleSuffix: Microsoft identity platform
+title: Support passwordless authentication with FIDO2 keys in apps you develop
description: This deployment guide explains how to support passwordless authentication with FIDO2 security keys in the applications you develop
services: active-directory
author: knicholasa
diff --git a/articles/active-directory/develop/supported-accounts-validation.md b/articles/active-directory/develop/supported-accounts-validation.md
index c09d4ff0e434e..b75d2f20fc062 100644
--- a/articles/active-directory/develop/supported-accounts-validation.md
+++ b/articles/active-directory/develop/supported-accounts-validation.md
@@ -1,7 +1,6 @@
---
# required metadata
-title: Validation differences by supported account types | Azure
-titleSuffix: Microsoft identity platform
+title: Validation differences by supported account types
description: Learn about the validation differences of various properties for different supported account types when registering your app with the Microsoft identity platform.
author: SureshJa
ms.author: sureshja
diff --git a/articles/active-directory/develop/test-automate-integration-testing.md b/articles/active-directory/develop/test-automate-integration-testing.md
index 4588492912612..71cfcf9ab1bef 100644
--- a/articles/active-directory/develop/test-automate-integration-testing.md
+++ b/articles/active-directory/develop/test-automate-integration-testing.md
@@ -1,6 +1,5 @@
---
title: Run automated integration tests
-titleSuffix: Microsoft identity platform
description: Learn how to run automated integration tests as a user against APIs protected by the Microsoft identity platform. Use the Resource Owner Password Credential Grant (ROPC) auth flow to sign in as a user instead of automating the interactive sign-in prompt UI.
services: active-directory
author: arcrowe
diff --git a/articles/active-directory/develop/test-setup-environment.md b/articles/active-directory/develop/test-setup-environment.md
index c3beb3e8f678a..b660cf4c08f52 100644
--- a/articles/active-directory/develop/test-setup-environment.md
+++ b/articles/active-directory/develop/test-setup-environment.md
@@ -1,6 +1,5 @@
---
title: Set up a test environment for your app
-titleSuffix: Microsoft identity platform
description: Learn how to set up an Azure Active Directory test environment so you can test your application integrated with Microsoft identity platform. Evaluate whether you need a separate tenant for testing or if you can use your production tenant.
services: active-directory
author: arcrowe
diff --git a/articles/active-directory/develop/test-throttle-service-limits.md b/articles/active-directory/develop/test-throttle-service-limits.md
index e3f4158c91c3c..53f085d0d3d95 100644
--- a/articles/active-directory/develop/test-throttle-service-limits.md
+++ b/articles/active-directory/develop/test-throttle-service-limits.md
@@ -1,6 +1,5 @@
---
title: Test environments, throttling, and service limits
-titleSuffix: Microsoft identity platform
description: Learn about the throttling and service limits to consider while deploying an Azure Active Directory test environment and testing an app integrated with the Microsoft identity platform.
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/troubleshoot-publisher-verification.md b/articles/active-directory/develop/troubleshoot-publisher-verification.md
index fbe1a575b416f..3c52a18e9da7a 100644
--- a/articles/active-directory/develop/troubleshoot-publisher-verification.md
+++ b/articles/active-directory/develop/troubleshoot-publisher-verification.md
@@ -1,6 +1,5 @@
---
-title: Troubleshoot publisher verification | Azure
-titleSuffix: Microsoft identity platform
+title: Troubleshoot publisher verification
description: Describes how to troubleshoot publisher verification for the Microsoft identity platform by calling Microsoft Graph APIs.
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/tutorial-blazor-server.md b/articles/active-directory/develop/tutorial-blazor-server.md
index 95b134259c809..a3ef9452bae6e 100644
--- a/articles/active-directory/develop/tutorial-blazor-server.md
+++ b/articles/active-directory/develop/tutorial-blazor-server.md
@@ -1,6 +1,5 @@
---
-title: Tutorial - Create a Blazor Server app that uses the Microsoft identity platform for authentication | Azure
-titleSuffix: Microsoft identity platform
+title: Tutorial - Create a Blazor Server app that uses the Microsoft identity platform for authentication
description: In this tutorial, you set up authentication using the Microsoft identity platform in a Blazor Server app.
author: knicholasa
diff --git a/articles/active-directory/develop/tutorial-blazor-webassembly.md b/articles/active-directory/develop/tutorial-blazor-webassembly.md
index 162254945acf5..f48e1e6e8dc51 100644
--- a/articles/active-directory/develop/tutorial-blazor-webassembly.md
+++ b/articles/active-directory/develop/tutorial-blazor-webassembly.md
@@ -1,6 +1,5 @@
---
title: Tutorial - Sign in users and call a protected API from a Blazor WebAssembly app
-titleSuffix: Microsoft identity platform
description: In this tutorial, sign in users and call a protected API using the Microsoft identity platform in a Blazor WebAssembly (WASM) app.
author: knicholasa
diff --git a/articles/active-directory/develop/tutorial-v2-android.md b/articles/active-directory/develop/tutorial-v2-android.md
index 4c83d481af3f7..16195bddb900b 100644
--- a/articles/active-directory/develop/tutorial-v2-android.md
+++ b/articles/active-directory/develop/tutorial-v2-android.md
@@ -1,6 +1,5 @@
---
-title: "Tutorial: Create an Android app that uses the Microsoft identity platform for authentication | Azure"
-titleSuffix: Microsoft identity platform
+title: "Tutorial: Create an Android app that uses the Microsoft identity platform for authentication"
description: In this tutorial, you build an Android app that uses the Microsoft identity platform to sign in users and get an access token to call the Microsoft Graph API on their behalf.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/tutorial-v2-angular-auth-code.md b/articles/active-directory/develop/tutorial-v2-angular-auth-code.md
index dba7cbf209e73..1cd3ca6015703 100644
--- a/articles/active-directory/develop/tutorial-v2-angular-auth-code.md
+++ b/articles/active-directory/develop/tutorial-v2-angular-auth-code.md
@@ -1,6 +1,5 @@
---
-title: "Tutorial: Create an Angular app that uses the Microsoft identity platform for authentication using auth code flow | Azure"
-titleSuffix: Microsoft identity platform
+title: "Tutorial: Create an Angular app that uses the Microsoft identity platform for authentication using auth code flow"
description: In this tutorial, you build an Angular single-page app (SPA) using auth code flow that uses the Microsoft identity platform to sign in users and get an access token to call the Microsoft Graph API on their behalf.
services: active-directory
author: jo-arroyo
diff --git a/articles/active-directory/develop/tutorial-v2-asp-webapp.md b/articles/active-directory/develop/tutorial-v2-asp-webapp.md
index d7d9fb8237dcb..10fb995a5ada8 100644
--- a/articles/active-directory/develop/tutorial-v2-asp-webapp.md
+++ b/articles/active-directory/develop/tutorial-v2-asp-webapp.md
@@ -1,6 +1,5 @@
---
-title: "Tutorial: Create an ASP.NET web app that uses the Microsoft identity platform for authentication | Azure"
-titleSuffix: Microsoft identity platform
+title: "Tutorial: Create an ASP.NET web app that uses the Microsoft identity platform for authentication"
description: In this tutorial, you build an ASP.NET web application that uses the Microsoft identity platform and OWIN middleware to enable user login.
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/tutorial-v2-aspnet-daemon-web-app.md b/articles/active-directory/develop/tutorial-v2-aspnet-daemon-web-app.md
index 235bddb9d58da..2eb57175f051c 100644
--- a/articles/active-directory/develop/tutorial-v2-aspnet-daemon-web-app.md
+++ b/articles/active-directory/develop/tutorial-v2-aspnet-daemon-web-app.md
@@ -1,6 +1,5 @@
---
-title: "Tutorial: Build a multi-tenant daemon that accesses Microsoft Graph business data | Azure"
-titleSuffix: Microsoft identity platform
+title: "Tutorial: Build a multi-tenant daemon that accesses Microsoft Graph business data"
description: In this tutorial, learn how to call an ASP.NET web API protected by Azure Active Directory from a Windows desktop (WPF) application. The WPF client authenticates a user, requests an access token, and calls the web API.
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/tutorial-v2-ios.md b/articles/active-directory/develop/tutorial-v2-ios.md
index 657e5b2399bdc..e8f6b1bf542d8 100644
--- a/articles/active-directory/develop/tutorial-v2-ios.md
+++ b/articles/active-directory/develop/tutorial-v2-ios.md
@@ -1,16 +1,13 @@
---
-title: "Tutorial: Create an iOS or macOS app that uses the Microsoft identity platform for authentication | Azure"
-titleSuffix: Microsoft identity platform
-description: In this tutorial, you build an iOS or macOS app that uses the Microsoft identity platform to sign in users and get an access token to call the Microsoft Graph API on their behalf.
-services: active-directory
+title: "Tutorial: Create an iOS or macOS app that uses the Microsoft identity platform for authentication"
+description: Build an iOS or macOS app that uses the Microsoft identity platform to sign in users and get an access token to call the Microsoft Graph API on their behalf.
author: mmacy
manager: CelesteDG
ms.service: active-directory
ms.subservice: develop
ms.topic: tutorial
-ms.workload: identity
-ms.date: 09/18/2020
+ms.date: 05/28/2022
ms.author: marsma
ms.reviewer: oldalton
ms.custom: aaddev, identityplatformtop40, has-adal-ref
@@ -20,7 +17,7 @@ ms.custom: aaddev, identityplatformtop40, has-adal-ref
In this tutorial, you build an iOS or macOS app that integrates with the Microsoft identity platform to sign users and get an access token to call the Microsoft Graph API.
-When you've completed the guide, your application will accept sign-ins of personal Microsoft accounts (including outlook.com, live.com, and others) and work or school accounts from any company or organization that uses Azure Active Directory. This tutorial is applicable to both iOS and macOS apps. Some steps are different between the two platforms.
+When you've completed the tutorial, your application will accept sign-ins of personal Microsoft accounts (including outlook.com, live.com, and others) and work or school accounts from any company or organization that uses Azure Active Directory. This tutorial is applicable to both iOS and macOS apps. Some steps are different between the two platforms.
In this tutorial:
@@ -75,8 +72,8 @@ If you'd like to download a completed version of the app you build in this tutor
1. Select **Accounts in any organizational directory (Any Azure AD directory - Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox)** under **Supported account types**.
1. Select **Register**.
1. Under **Manage**, select **Authentication** > **Add a platform** > **iOS/macOS**.
-1. Enter your project's Bundle ID. If you downloaded the code, this is `com.microsoft.identitysample.MSALiOS`. If you're creating your own project, select your project in Xcode and open the **General** tab. The bundle identifier appears in the **Identity** section.
-1. Select **Configure** and save the **MSAL Configuration** that appears in the **MSAL configuration** page so you can enter it when you configure your app later.
+1. Enter your project's Bundle ID. If downloaded the code sample, the Bundle ID is `com.microsoft.identitysample.MSALiOS`. If you're creating your own project, select your project in Xcode and open the **General** tab. The bundle identifier appears in the **Identity** section.
+1. Select **Configure** and save the **MSAL Configuration** that appears in the **MSAL configuration** page so you can enter it when you configure your app later.
1. Select **Done**.
## Add MSAL
@@ -85,7 +82,7 @@ Choose one of the following ways to install the MSAL library in your app:
### CocoaPods
-1. If you're using [CocoaPods](https://cocoapods.org/), install `MSAL` by first creating an empty file called `podfile` in the same folder as your project's `.xcodeproj` file. Add the following to `podfile`:
+1. If you're using [CocoaPods](https://cocoapods.org/), install `MSAL` by first creating an empty file called _podfile_ in the same folder as your project's _.xcodeproj_ file. Add the following to _podfile_:
```
use_frameworks!
@@ -96,18 +93,18 @@ Choose one of the following ways to install the MSAL library in your app:
```
2. Replace `` with the name of your project.
-3. In a terminal window, navigate to the folder that contains the `podfile` you created and run `pod install` to install the MSAL library.
+3. In a terminal window, navigate to the folder that contains the _podfile_ you created and run `pod install` to install the MSAL library.
4. Close Xcode and open `.xcworkspace` to reload the project in Xcode.
### Carthage
-If you're using [Carthage](https://github.com/Carthage/Carthage), install `MSAL` by adding it to your `Cartfile`:
+If you're using [Carthage](https://github.com/Carthage/Carthage), install `MSAL` by adding it to your _Cartfile_:
```
github "AzureAD/microsoft-authentication-library-for-objc" "master"
```
-From a terminal window, in the same directory as the updated `Cartfile`, run the following command to have Carthage update the dependencies in your project.
+From a terminal window, in the same directory as the updated _Cartfile_, run the following command to have Carthage update the dependencies in your project.
iOS:
@@ -129,13 +126,13 @@ You can also use Git Submodule, or check out the latest release to use as a fram
Next, we'll add your app registration to your code.
-First, add the following import statement to the top of the `ViewController.swift`, as well as `AppDelegate.swift` or `SceneDelegate.swift` files:
+First, add the following import statement to the top of the _ViewController.swift_ file and either _AppDelegate.swift_ or _SceneDelegate.swift_:
```swift
import MSAL
```
-Then Add the following code to `ViewController.swift` prior to `viewDidLoad()`:
+Next, add the following code to _ViewController.swift_ before to `viewDidLoad()`:
```swift
// Update the below to your client ID you received in the portal. The below is for running the demo only
@@ -151,7 +148,7 @@ var webViewParameters : MSALWebviewParameters?
var currentAccount: MSALAccount?
```
-The only value you modify above is the value assigned to `kClientID`to be your [Application ID](./developer-glossary.md#application-id-client-id). This value is part of the MSAL Configuration data that you saved during the step at the beginning of this tutorial to register the application in the Azure portal.
+The only value you modify above is the value assigned to `kClientID` to be your [Application ID](./developer-glossary.md#application-client-id). This value is part of the MSAL Configuration data that you saved during the step at the beginning of this tutorial to register the application in the Azure portal.
## Configure Xcode project settings
@@ -161,9 +158,9 @@ Add a new keychain group to your project **Signing & Capabilities**. The keychai
## For iOS only, configure URL schemes
-In this step, you will register `CFBundleURLSchemes` so that the user can be redirected back to the app after sign in. By the way, `LSApplicationQueriesSchemes` also allows your app to make use of Microsoft Authenticator.
+In this step, you'll register `CFBundleURLSchemes` so that the user can be redirected back to the app after sign in. By the way, `LSApplicationQueriesSchemes` also allows your app to make use of Microsoft Authenticator.
-In Xcode, open `Info.plist` as a source code file, and add the following inside of the `` section. Replace `[BUNDLE_ID]` with the value you used in the Azure portal. If you downloaded the code, the bundle identifier is `com.microsoft.identitysample.MSALiOS`. If you're creating your own project, select your project in Xcode and open the **General** tab. The bundle identifier appears in the **Identity** section.
+In Xcode, open _Info.plist_ as a source code file, and add the following inside of the `` section. Replace `[BUNDLE_ID]` with the value you used in the Azure portal. If you downloaded the code, the bundle identifier is `com.microsoft.identitysample.MSALiOS`. If you're creating your own project, select your project in Xcode and open the **General** tab. The bundle identifier appears in the **Identity** section.
```xml
CFBundleURLTypes
@@ -189,7 +186,7 @@ In Xcode, open `Info.plist` as a source code file, and add the following inside
## Create your app's UI
-Now create a UI that includes a button to call the Microsoft Graph API, another to sign out, and a text view to see some output by adding the following code to the `ViewController`class:
+Now create a UI that includes a button to call the Microsoft Graph API, another to sign out, and a text view to see some output by adding the following code to the `ViewController` class:
### iOS UI
@@ -372,7 +369,7 @@ Next, also inside the `ViewController` class, replace the `viewDidLoad()` method
### Initialize MSAL
-Add the following `initMSAL` method to the `ViewController` class:
+To the `ViewController` class, add the `initMSAL` method:
```swift
func initMSAL() throws {
@@ -390,7 +387,7 @@ Add the following `initMSAL` method to the `ViewController` class:
}
```
-Add the following after `initMSAL` method to the `ViewController` class.
+Still in the `ViewController` class and after the `initMSAL` method, add the `initWebViewParams` method:
### iOS code:
@@ -408,9 +405,9 @@ func initWebViewParams() {
}
```
-### For iOS only, handle the sign-in callback
+### Handle the sign-in callback (iOS only)
-Open the `AppDelegate.swift` file. To handle the callback after sign-in, add `MSALPublicClientApplication.handleMSALResponse` to the `appDelegate` class like this:
+Open the _AppDelegate.swift_ file. To handle the callback after sign-in, add `MSALPublicClientApplication.handleMSALResponse` to the `appDelegate` class like this:
```swift
// Inside AppDelegate...
@@ -421,7 +418,7 @@ func application(_ app: UIApplication, open url: URL, options: [UIApplication.Op
```
-**If you are using Xcode 11**, you should place MSAL callback into the `SceneDelegate.swift` instead.
+**If you are using Xcode 11**, you should place MSAL callback into the _SceneDelegate.swift_ instead.
If you support both UISceneDelegate and UIApplicationDelegate for compatibility with older iOS, MSAL callback would need to be placed into both files.
```swift
@@ -442,9 +439,9 @@ func scene(_ scene: UIScene, openURLContexts URLContexts: Set)
Now, we can implement the application's UI processing logic and get tokens interactively through MSAL.
-MSAL exposes two primary methods for getting tokens: `acquireTokenSilently()` and `acquireTokenInteractively()`:
+MSAL exposes two primary methods for getting tokens: `acquireTokenSilently()` and `acquireTokenInteractively()`.
-- `acquireTokenSilently()` attempts to sign in a user and get tokens without any user interaction as long as an account is present. `acquireTokenSilently()` requires providing a valid `MSALAccount` which can be retrieved by using one of MSAL account enumeration APIs. This sample uses `applicationContext.getCurrentAccount(with: msalParameters, completionBlock: {})` to retrieve current account.
+- `acquireTokenSilently()` attempts to sign in a user and get tokens without user interaction as long as an account is present. `acquireTokenSilently()` require a valid `MSALAccount` which can be retrieved by using one of MSAL's account enumeration APIs. This tutorial uses `applicationContext.getCurrentAccount(with: msalParameters, completionBlock: {})` to retrieve the current account.
- `acquireTokenInteractively()` always shows UI when attempting to sign in the user. It may use session cookies in the browser or an account in the Microsoft authenticator to provide an interactive-SSO experience.
@@ -513,7 +510,7 @@ Add the following code to the `ViewController` class:
#### Get a token interactively
-The following code snippet gets a token for the first time by creating an `MSALInteractiveTokenParameters` object and calling `acquireToken`. Next you will add code that:
+The following code snippet gets a token for the first time by creating an `MSALInteractiveTokenParameters` object and calling `acquireToken`. Next you'll add code that:
1. Creates `MSALInteractiveTokenParameters` with scopes.
2. Calls `acquireToken()` with the created parameters.
@@ -812,7 +809,7 @@ Add the following helper methods to the `ViewController` class to complete the s
}
```
-### For iOS only, get additional device information
+### iOS only: get additional device information
Use following code to read current device configuration, including whether device is configured as shared:
@@ -839,13 +836,13 @@ Use following code to read current device configuration, including whether devic
### Multi-account applications
-This app is built for a single account scenario. MSAL also supports multi-account scenarios, but it requires some additional work from apps. You will need to create UI to help users select which account they want to use for each action that requires tokens. Alternatively, your app can implement a heuristic to select which account to use by querying all accounts from MSAL. For example, see `accountsFromDeviceForParameters:completionBlock:` [API](https://azuread.github.io/microsoft-authentication-library-for-objc/Classes/MSALPublicClientApplication.html#/c:objc(cs)MSALPublicClientApplication(im)accountsFromDeviceForParameters:completionBlock:)
+This app is built for a single account scenario. MSAL also supports multi-account scenarios, but it requires more application work. You'll need to create UI to help users select which account they want to use for each action that requires tokens. Alternatively, your app can implement a heuristic to select which account to use by querying all accounts from MSAL. For example, see `accountsFromDeviceForParameters:completionBlock:` [API](https://azuread.github.io/microsoft-authentication-library-for-objc/Classes/MSALPublicClientApplication.html#/c:objc(cs)MSALPublicClientApplication(im)accountsFromDeviceForParameters:completionBlock:)
## Test your app
Build and deploy the app to a test device or simulator. You should be able to sign in and get tokens for Azure AD or personal Microsoft accounts.
-The first time a user signs into your app, they will be prompted by Microsoft identity to consent to the permissions requested. While most users are capable of consenting, some Azure AD tenants have disabled user consent, which requires admins to consent on behalf of all users. To support this scenario, register your app's scopes in the Azure portal.
+The first time a user signs into your app, they'll be prompted by Microsoft identity to consent to the permissions requested. While most users are capable of consenting, some Azure AD tenants have disabled user consent, which requires admins to consent on behalf of all users. To support this scenario, register your app's scopes in the Azure portal.
After you sign in, the app will display the data returned from the Microsoft Graph `/me` endpoint.
diff --git a/articles/active-directory/develop/tutorial-v2-javascript-auth-code.md b/articles/active-directory/develop/tutorial-v2-javascript-auth-code.md
index c03d1cb1d604a..95da6f495da34 100644
--- a/articles/active-directory/develop/tutorial-v2-javascript-auth-code.md
+++ b/articles/active-directory/develop/tutorial-v2-javascript-auth-code.md
@@ -1,6 +1,5 @@
---
-title: "Tutorial: Create a JavaScript single-page app that uses auth code flow | Azure"
-titleSuffix: Microsoft identity platform
+title: "Tutorial: Create a JavaScript single-page app that uses auth code flow"
description: In this tutorial, you create a JavaScript SPA that can sign in users and use the auth code flow to obtain an access token from the Microsoft identity platform and call the Microsoft Graph API.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/tutorial-v2-javascript-spa.md b/articles/active-directory/develop/tutorial-v2-javascript-spa.md
index 1f85b0420750e..17bbc62b75711 100644
--- a/articles/active-directory/develop/tutorial-v2-javascript-spa.md
+++ b/articles/active-directory/develop/tutorial-v2-javascript-spa.md
@@ -1,6 +1,5 @@
---
-title: "Tutorial: Create a JavaScript single-page app that uses the Microsoft identity platform for authentication | Azure"
-titleSuffix: Microsoft identity platform
+title: "Tutorial: Create a JavaScript single-page app that uses the Microsoft identity platform for authentication"
description: In this tutorial, you build a JavaScript single-page app (SPA) that uses the Microsoft identity platform to sign in users and get an access token to call the Microsoft Graph API on their behalf.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/tutorial-v2-nodejs-console.md b/articles/active-directory/develop/tutorial-v2-nodejs-console.md
index 90fee01f9f6c0..c87331c75f54d 100644
--- a/articles/active-directory/develop/tutorial-v2-nodejs-console.md
+++ b/articles/active-directory/develop/tutorial-v2-nodejs-console.md
@@ -1,6 +1,5 @@
---
-title: "Tutorial: Call Microsoft Graph in a Node.js console app | Azure"
-titleSuffix: Microsoft identity platform
+title: "Tutorial: Call Microsoft Graph in a Node.js console app"
description: In this tutorial, you build a console app for calling Microsoft Graph to a Node.js console app.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/tutorial-v2-nodejs-desktop.md b/articles/active-directory/develop/tutorial-v2-nodejs-desktop.md
index 0ccfb39b22d13..7920f4abc56f7 100644
--- a/articles/active-directory/develop/tutorial-v2-nodejs-desktop.md
+++ b/articles/active-directory/develop/tutorial-v2-nodejs-desktop.md
@@ -1,6 +1,5 @@
---
-title: "Tutorial: Sign in users and call the Microsoft Graph API in an Electron desktop app | Azure"
-titleSuffix: Microsoft identity platform
+title: "Tutorial: Sign in users and call the Microsoft Graph API in an Electron desktop app"
description: In this tutorial, you build an Electron desktop app that can sign in users and use the auth code flow to obtain an access token from the Microsoft identity platform and call the Microsoft Graph API.
services: active-directory
author: mmacy
@@ -20,6 +19,7 @@ In this tutorial, you build an Electron desktop application that signs in users
Follow the steps in this tutorial to:
> [!div class="checklist"]
+>
> - Register the application in the Azure portal
> - Create an Electron desktop app project
> - Add authentication logic to your app
@@ -42,7 +42,7 @@ Use the following settings for your app registration:
- Name: `ElectronDesktopApp` (suggested)
- Supported account types: **Accounts in any organizational directory (Any Azure AD directory - Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox)**
- Platform type: **Mobile and desktop applications**
-- Redirect URI: `msal://redirect`
+- Redirect URI: `msal{Your_Application/Client_Id}://auth`
## Create the project
@@ -53,548 +53,68 @@ Create a folder to host your application, for example *ElectronDesktopApp*.
```console
npm init -y
npm install --save @azure/msal-node axios bootstrap dotenv jquery popper.js
- npm install --save-dev babel electron@10.1.6 webpack
+ npm install --save-dev babel electron@18.2.3 webpack
```
2. Then, create a folder named *App*. Inside this folder, create a file named *index.html* that will serve as UI. Add the following code there:
- ```html
-
-
-
-
-
-
-
- MSAL Node Electron Sample App
-
-
-
-
-
-
-
-
-
-
-
Electron sample app calling MS Graph API using MSAL Node
-
-
-
-
-
-
Please sign-in to see your profile and read your mails
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ```
+ :::code language="html" source="~/ms-identity-JavaScript-nodejs-desktop/App/index.html":::
3. Next, create file named *main.js* and add the following code:
- ```JavaScript
- require('dotenv').config()
-
- const path = require('path');
- const { app, ipcMain, BrowserWindow } = require('electron');
- const { IPC_MESSAGES } = require('./constants');
-
- const { callEndpointWithToken } = require('./fetch');
- const AuthProvider = require('./AuthProvider');
-
- const authProvider = new AuthProvider();
- let mainWindow;
-
- function createWindow () {
- mainWindow = new BrowserWindow({
- width: 800,
- height: 600,
- webPreferences: {
- nodeIntegration: true,
- contextIsolation: false
- }
- });
-
- mainWindow.loadFile(path.join(__dirname, './index.html'));
- };
-
- app.on('ready', () => {
- createWindow();
- });
-
- app.on('window-all-closed', () => {
- app.quit();
- });
-
+ :::code language="js" source="~/ms-identity-JavaScript-nodejs-desktop/App/main.js":::
- // Event handlers
- ipcMain.on(IPC_MESSAGES.LOGIN, async() => {
- const account = await authProvider.login(mainWindow);
-
- await mainWindow.loadFile(path.join(__dirname, './index.html'));
-
- mainWindow.webContents.send(IPC_MESSAGES.SHOW_WELCOME_MESSAGE, account);
- });
-
- ipcMain.on(IPC_MESSAGES.LOGOUT, async() => {
- await authProvider.logout();
- await mainWindow.loadFile(path.join(__dirname, './index.html'));
- });
-
- ipcMain.on(IPC_MESSAGES.GET_PROFILE, async() => {
-
- const tokenRequest = {
- scopes: ['User.Read'],
- };
-
- const token = await authProvider.getToken(mainWindow, tokenRequest);
- const account = authProvider.account
+In the code snippet above, we initialize an Electron main window object and create some event handlers for interactions with the Electron window. We also import configuration parameters, instantiate *authProvider* class for handling sign-in, sign-out and token acquisition, and call the Microsoft Graph API.
- await mainWindow.loadFile(path.join(__dirname, './index.html'));
+4. In the same folder (*App*), create another file named *renderer.js* and add the following code:
- const graphResponse = await callEndpointWithToken(`${process.env.GRAPH_ENDPOINT_HOST}${process.env.GRAPH_ME_ENDPOINT}`, token);
+ :::code language="js" source="~/ms-identity-JavaScript-nodejs-desktop/App/renderer.js":::
- mainWindow.webContents.send(IPC_MESSAGES.SHOW_WELCOME_MESSAGE, account);
- mainWindow.webContents.send(IPC_MESSAGES.SET_PROFILE, graphResponse);
- });
+The renderer methods are exposed by the preload script found in the *preload.js* file in order to give the renderer access to the `Node API` in a secure and controlled way
- ipcMain.on(IPC_MESSAGES.GET_MAIL, async() => {
+5. Then, create a new file *preload.js* and add the following code:
- const tokenRequest = {
- scopes: ['Mail.Read'],
- };
+ :::code language="js" source="~/ms-identity-JavaScript-nodejs-desktop/App/preload.js":::
- const token = await authProvider.getToken(mainWindow, tokenRequest);
- const account = authProvider.account;
+This preload script exposes a renderer methods to give the renderer process controlled access to some `Node APIs` by applying IPC channels that have been configured for communication between the main and renderer processes.
- await mainWindow.loadFile(path.join(__dirname, './index.html'));
+6. Next, create *UIManager.js* class inside the *App* folder and add the following code:
- const graphResponse = await callEndpointWithToken(`${process.env.GRAPH_ENDPOINT_HOST}${process.env.GRAPH_MAIL_ENDPOINT}`, token);
+ :::code language="js" source="~/ms-identity-JavaScript-nodejs-desktop/App/UIManager.js":::
- mainWindow.webContents.send(IPC_MESSAGES.SHOW_WELCOME_MESSAGE, account);
- mainWindow.webContents.send(IPC_MESSAGES.SET_MAIL, graphResponse);
- });
- ```
+7. After that, create *CustomProtocolListener.js* class and add the following code there:
-In the code snippet above, we initialize an Electron main window object and create some event handlers for interactions with the Electron window. We also import configuration parameters, instantiate *authProvider* class for handling sign-in, sign-out and token acquisition, and call the Microsoft Graph API.
+ :::code language="js" source="~/ms-identity-JavaScript-nodejs-desktop/App/CustomProtocolListener.js":::
-4. In the same folder (*App*), create another file named *renderer.js* and add the following code:
+*CustomProtocolListener* class can be instantiated in order to register and unregister a custom typed protocol on which MSAL Node can listen for Auth Code responses.
- ```JavaScript
- const { ipcRenderer } = require('electron');
- const { IPC_MESSAGES } = require('./constants');
-
- // UI event handlers
- document.querySelector('#signIn').addEventListener('click', () => {
- ipcRenderer.send(IPC_MESSAGES.LOGIN);
- });
-
- document.querySelector('#signOut').addEventListener('click', () => {
- ipcRenderer.send(IPC_MESSAGES.LOGOUT);
- });
-
- document.querySelector('#seeProfile').addEventListener('click', () => {
- ipcRenderer.send(IPC_MESSAGES.GET_PROFILE);
- });
-
- document.querySelector('#readMail').addEventListener('click', () => {
- ipcRenderer.send(IPC_MESSAGES.GET_MAIL);
- });
-
- // Main process message subscribers
- ipcRenderer.on(IPC_MESSAGES.SHOW_WELCOME_MESSAGE, (event, account) => {
- showWelcomeMessage(account);
- });
-
- ipcRenderer.on(IPC_MESSAGES.SET_PROFILE, (event, graphResponse) => {
- updateUI(graphResponse, `${process.env.GRAPH_ENDPOINT_HOST}${process.env.GRAPH_ME_ENDPOINT}`);
- });
-
- ipcRenderer.on(IPC_MESSAGES.SET_MAIL, (event, graphResponse) => {
- updateUI(graphResponse, `${process.env.GRAPH_ENDPOINT_HOST}${process.env.GRAPH_MAIL_ENDPOINT}`);
- });
-
- // DOM elements to work with
- const welcomeDiv = document.getElementById("WelcomeMessage");
- const signInButton = document.getElementById("signIn");
- const signOutButton = document.getElementById("signOut");
- const cardDiv = document.getElementById("cardDiv");
- const profileDiv = document.getElementById("profileDiv");
- const tabList = document.getElementById("list-tab");
- const tabContent = document.getElementById("nav-tabContent");
-
- function showWelcomeMessage(account) {
- cardDiv.style.display = "initial";
- welcomeDiv.innerHTML = `Welcome ${account.name}`;
- signInButton.hidden = true;
- signOutButton.hidden = false;
- }
-
- function clearTabs() {
- tabList.innerHTML = "";
- tabContent.innerHTML = "";
- }
-
- function updateUI(data, endpoint) {
-
- console.log(`Graph API responded at: ${new Date().toString()}`);
-
- if (endpoint === `${process.env.GRAPH_ENDPOINT_HOST}${process.env.GRAPH_ME_ENDPOINT}`) {
- setProfile(data);
- } else if (endpoint === `${process.env.GRAPH_ENDPOINT_HOST}${process.env.GRAPH_MAIL_ENDPOINT}`) {
- setMail(data);
- }
- }
-
- function setProfile(data) {
- profileDiv.innerHTML = ''
-
- const title = document.createElement('p');
- const email = document.createElement('p');
- const phone = document.createElement('p');
- const address = document.createElement('p');
-
- title.innerHTML = "Title: " + data.jobTitle;
- email.innerHTML = "Mail: " + data.mail;
- phone.innerHTML = "Phone: " + data.businessPhones[0];
- address.innerHTML = "Location: " + data.officeLocation;
-
- profileDiv.appendChild(title);
- profileDiv.appendChild(email);
- profileDiv.appendChild(phone);
- profileDiv.appendChild(address);
- }
-
- function setMail(data) {
- const mailInfo = data;
- if (mailInfo.value.length < 1) {
- alert("Your mailbox is empty!")
- } else {
- clearTabs();
- mailInfo.value.slice(0, 10).forEach((d, i) => {
- createAndAppendListItem(d, i);
- createAndAppendContentItem(d, i);
- });
- }
- }
-
- function createAndAppendListItem(d, i) {
- const listItem = document.createElement("a");
- listItem.setAttribute("class", "list-group-item list-group-item-action")
- listItem.setAttribute("id", "list" + i + "list")
- listItem.setAttribute("data-toggle", "list")
- listItem.setAttribute("href", "#list" + i)
- listItem.setAttribute("role", "tab")
- listItem.setAttribute("aria-controls", i)
- listItem.innerHTML = d.subject;
- tabList.appendChild(listItem);
- }
-
- function createAndAppendContentItem(d, i) {
- const contentItem = document.createElement("div");
- contentItem.setAttribute("class", "tab-pane fade")
- contentItem.setAttribute("id", "list" + i)
- contentItem.setAttribute("role", "tabpanel")
- contentItem.setAttribute("aria-labelledby", "list" + i + "list")
-
- if (d.from) {
- contentItem.innerHTML = " from: " + d.from.emailAddress.address + "
" + d.bodyPreview + "...";
- tabContent.appendChild(contentItem);
- }
- }
- ```
+8. Finally, create a file named *constants.js* that will store the strings constants for describing the application **events**:
-5. Finally, create a file named *constants.js* that will store the strings constants for describing the application **events**:
-
- ```JavaScript
- const IPC_MESSAGES = {
- SHOW_WELCOME_MESSAGE: 'SHOW_WELCOME_MESSAGE',
- LOGIN: 'LOGIN',
- LOGOUT: 'LOGOUT',
- GET_PROFILE: 'GET_PROFILE',
- SET_PROFILE: 'SET_PROFILE',
- GET_MAIL: 'GET_MAIL',
- SET_MAIL: 'SET_MAIL'
- }
-
- module.exports = {
- IPC_MESSAGES: IPC_MESSAGES,
- }
- ```
+ :::code language="js" source="~/ms-identity-JavaScript-nodejs-desktop/App/constants.js":::
You now have a simple GUI and interactions for your Electron app. After completing the rest of the tutorial, the file and folder structure of your project should look similar to the following:
```
ElectronDesktopApp/
├── App
-│ ├── authProvider.js
+│ ├── AuthProvider.js
│ ├── constants.js
+│ ├── CustomProtocolListener.js
│ ├── fetch.js
-│ ├── main.js
-│ ├── renderer.js
│ ├── index.html
+| ├── main.js
+| ├── preload.js
+| ├── renderer.js
+│ ├── UIManager.js
+│ ├── authConfig.js
├── package.json
-└── .env
```
## Add authentication logic to your app
-In *App* folder, create a file named *AuthProvider.js*. This will contain an authentication provider class that will handle login, logout, token acquisition, account selection and related authentication tasks using MSAL Node. Add the following code there:
-
-```JavaScript
-const { PublicClientApplication, LogLevel, CryptoProvider } = require('@azure/msal-node');
-const { protocol } = require('electron');
-const path = require('path');
-const url = require('url');
-
-/**
- * To demonstrate best security practices, this Electron sample application makes use of
- * a custom file protocol instead of a regular web (https://) redirect URI in order to
- * handle the redirection step of the authorization flow, as suggested in the OAuth2.0 specification for Native Apps.
- */
-const CUSTOM_FILE_PROTOCOL_NAME = process.env.REDIRECT_URI.split(':')[0]; // e.g. msal://redirect
-
-/**
- * Configuration object to be passed to MSAL instance on creation.
- * For a full list of MSAL Node configuration parameters, visit:
- * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-node/docs/configuration.md
- */
-const MSAL_CONFIG = {
- auth: {
- clientId: process.env.CLIENT_ID,
- authority: `${process.env.AAD_ENDPOINT_HOST}${process.env.TENANT_ID}`,
- redirectUri: process.env.REDIRECT_URI,
- },
- system: {
- loggerOptions: {
- loggerCallback(loglevel, message, containsPii) {
- console.log(message);
- },
- piiLoggingEnabled: false,
- logLevel: LogLevel.Verbose,
- }
- }
-};
-
-class AuthProvider {
-
- clientApplication;
- cryptoProvider;
- authCodeUrlParams;
- authCodeRequest;
- pkceCodes;
- account;
-
- constructor() {
- /**
- * Initialize a public client application. For more information, visit:
- * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-node/docs/initialize-public-client-application.md
- */
- this.clientApplication = new PublicClientApplication(MSAL_CONFIG);
- this.account = null;
-
- // Initialize CryptoProvider instance
- this.cryptoProvider = new CryptoProvider();
-
- this.setRequestObjects();
- }
-
- /**
- * Initialize request objects used by this AuthModule.
- */
- setRequestObjects() {
- const requestScopes = ['openid', 'profile', 'User.Read'];
- const redirectUri = process.env.REDIRECT_URI;
-
- this.authCodeUrlParams = {
- scopes: requestScopes,
- redirectUri: redirectUri
- };
-
- this.authCodeRequest = {
- scopes: requestScopes,
- redirectUri: redirectUri,
- code: null
- }
-
- this.pkceCodes = {
- challengeMethod: "S256", // Use SHA256 Algorithm
- verifier: "", // Generate a code verifier for the Auth Code Request first
- challenge: "" // Generate a code challenge from the previously generated code verifier
- };
- }
-
- async login(authWindow) {
- const authResult = await this.getTokenInteractive(authWindow, this.authCodeUrlParams);
- return this.handleResponse(authResult);
- }
-
- async logout() {
- if (this.account) {
- await this.clientApplication.getTokenCache().removeAccount(this.account);
- this.account = null;
- }
- }
-
- async getToken(authWindow, tokenRequest) {
- let authResponse;
-
- authResponse = await this.getTokenInteractive(authWindow, tokenRequest);
-
- return authResponse.accessToken || null;
- }
-
- // This method contains an implementation of access token acquisition in authorization code flow
- async getTokenInteractive(authWindow, tokenRequest) {
-
- /**
- * Proof Key for Code Exchange (PKCE) Setup
- *
- * MSAL enables PKCE in the Authorization Code Grant Flow by including the codeChallenge and codeChallengeMethod parameters
- * in the request passed into getAuthCodeUrl() API, as well as the codeVerifier parameter in the
- * second leg (acquireTokenByCode() API).
- *
- * MSAL Node provides PKCE Generation tools through the CryptoProvider class, which exposes
- * the generatePkceCodes() asynchronous API. As illustrated in the example below, the verifier
- * and challenge values should be generated previous to the authorization flow initiation.
- *
- * For details on PKCE code generation logic, consult the
- * PKCE specification https://tools.ietf.org/html/rfc7636#section-4
- */
-
- const {verifier, challenge} = await this.cryptoProvider.generatePkceCodes();
-
- this.pkceCodes.verifier = verifier;
- this.pkceCodes.challenge = challenge;
-
- const authCodeUrlParams = {
- ...this.authCodeUrlParams,
- scopes: tokenRequest.scopes,
- codeChallenge: this.pkceCodes.challenge, // PKCE Code Challenge
- codeChallengeMethod: this.pkceCodes.challengeMethod // PKCE Code Challenge Method
- };
-
- const authCodeUrl = await this.clientApplication.getAuthCodeUrl(authCodeUrlParams);
-
- protocol.registerFileProtocol(CUSTOM_FILE_PROTOCOL_NAME, (req, callback) => {
- const requestUrl = url.parse(req.url, true);
- callback(path.normalize(`${__dirname}/${requestUrl.path}`));
- });
-
- const authCode = await this.listenForAuthCode(authCodeUrl, authWindow);
-
- const authResponse = await this.clientApplication.acquireTokenByCode({
- ...this.authCodeRequest,
- scopes: tokenRequest.scopes,
- code: authCode,
- codeVerifier: this.pkceCodes.verifier // PKCE Code Verifier
- });
-
- return authResponse;
- }
-
- // Listen for authorization code response from Azure AD
- async listenForAuthCode(navigateUrl, authWindow) {
-
- authWindow.loadURL(navigateUrl);
-
- return new Promise((resolve, reject) => {
- authWindow.webContents.on('will-redirect', (event, responseUrl) => {
- try {
- const parsedUrl = new URL(responseUrl);
- const authCode = parsedUrl.searchParams.get('code');
- resolve(authCode);
- } catch (err) {
- reject(err);
- }
- });
- });
- }
-
- /**
- * Handles the response from a popup or redirect. If response is null, will check if we have any accounts and attempt to sign in.
- * @param response
- */
- async handleResponse(response) {
- if (response !== null) {
- this.account = response.account;
- } else {
- this.account = await this.getAccount();
- }
-
- return this.account;
- }
-
- /**
- * Calls getAllAccounts and determines the correct account to sign into, currently defaults to first account found in cache.
- * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-common/docs/Accounts.md
- */
- async getAccount() {
- const cache = this.clientApplication.getTokenCache();
- const currentAccounts = await cache.getAllAccounts();
-
- if (currentAccounts === null) {
- console.log('No accounts detected');
- return null;
- }
-
- if (currentAccounts.length > 1) {
- // Add choose account code here
- console.log('Multiple accounts detected, need to add choose account code.');
- return currentAccounts[0];
- } else if (currentAccounts.length === 1) {
- return currentAccounts[0];
- } else {
- return null;
- }
- }
-}
-
-module.exports = AuthProvider;
-```
+In *App* folder, create a file named *AuthProvider.js*. The *AuthProvider.js* file will contain an authentication provider class that will handle login, logout, token acquisition, account selection and related authentication tasks using MSAL Node. Add the following code there:
+
+:::code language="js" source="~/ms-identity-JavaScript-nodejs-desktop/App/AuthProvider.js":::
In the code snippet above, we first initialized MSAL Node `PublicClientApplication` by passing a configuration object (`msalConfig`). We then exposed `login`, `logout` and `getToken` methods to be called by main module (*main.js*). In `login` and `getToken`, we acquire ID and access tokens, respectively, by first requesting an authorization code and then exchanging this with a token using MSAL Node `acquireTokenByCode` public API.
@@ -602,56 +122,13 @@ In the code snippet above, we first initialized MSAL Node `PublicClientApplicati
Create another file named *fetch.js*. This file will contain an Axios HTTP client for making REST calls to the Microsoft Graph API.
-```JavaScript
-const axios = require('axios');
-
-/**
- * Makes an Authorization 'Bearer' request with the given accessToken to the given endpoint.
- * @param endpoint
- * @param accessToken
- */
-async function callEndpointWithToken(endpoint, accessToken) {
- const options = {
- headers: {
- Authorization: `Bearer ${accessToken}`
- }
- };
-
- console.log('Request made at: ' + new Date().toString());
-
- const response = await axios.default.get(endpoint, options);
-
- return response.data;
-}
-
-module.exports = {
- callEndpointWithToken: callEndpointWithToken,
-};
-```
+:::code language="js" source="~/ms-identity-JavaScript-nodejs-desktop/App/fetch.js":::
## Add app registration details
-Finally, create an environment file to store the app registration details that will be used when acquiring tokens. To do so, create a file named *.env* inside the root folder of the sample (*ElectronDesktopApp*), and add the following code:
-
-```
-# Credentials
-CLIENT_ID=Enter_the_Application_Id_Here
-TENANT_ID=Enter_the_Tenant_Id_Here
+Finally, create an environment file to store the app registration details that will be used when acquiring tokens. To do so, create a file named *authConfig.js* inside the root folder of the sample (*ElectronDesktopApp*), and add the following code:
-# Configuration
-REDIRECT_URI=msal://redirect
-
-# Endpoints
-AAD_ENDPOINT_HOST=Enter_the_Cloud_Instance_Id_Here
-GRAPH_ENDPOINT_HOST=Enter_the_Graph_Endpoint_Here
-
-# RESOURCES
-GRAPH_ME_ENDPOINT=v1.0/me
-GRAPH_MAIL_ENDPOINT=v1.0/me/messages
-
-# SCOPES
-GRAPH_SCOPES=User.Read Mail.Read
-```
+:::code language="js" source="~/ms-identity-JavaScript-nodejs-desktop/App/authConfig.js":::
Fill in these details with the values you obtain from Azure app registration portal:
@@ -664,6 +141,7 @@ Fill in these details with the values you obtain from Azure app registration por
- `Enter_the_Cloud_Instance_Id_Here`: The Azure cloud instance in which your application is registered.
- For the main (or *global*) Azure cloud, enter `https://login.microsoftonline.com/`.
- For **national** clouds (for example, China), you can find appropriate values in [National clouds](authentication-national-cloud.md).
+- `Enter_the_Redirect_Uri_Here`: The Redirect Uri of the application you registered `msal{Your_Application/Client_Id}:///auth`.
- `Enter_the_Graph_Endpoint_Here` is the instance of the Microsoft Graph API the application should communicate with.
- For the **global** Microsoft Graph API endpoint, replace both instances of this string with `https://graph.microsoft.com/`.
- For endpoints in **national** cloud deployments, see [National cloud deployments](/graph/deployments) in the Microsoft Graph documentation.
@@ -700,13 +178,13 @@ Select **Read Mails** to view the messages in user's account. You'll be presente
:::image type="content" source="media/tutorial-v2-nodejs-desktop/desktop-05-consent-mail.png" alt-text="consent screen for read.mail permission":::
-After consent, you will view the messages returned in the response from the call to the Microsoft Graph API:
+After consent, you'll view the messages returned in the response from the call to the Microsoft Graph API:
:::image type="content" source="media/tutorial-v2-nodejs-desktop/desktop-06-mails.png" alt-text="mail information from Microsoft Graph":::
## How the application works
-When a user selects the **Sign In** button for the first time, get `getTokenInteractive` method of *AuthProvider.js* is called. This method redirects the user to sign-in with the *Microsoft identity platform endpoint* and validate the user's credentials, and then obtains an **authorization code**. This code is then exchanged for an access token using `acquireTokenByCode` public API of MSAL Node.
+When a user selects the **Sign In** button for the first time, get `getTokenInteractive` method of *AuthProvider.js* is called. This method redirects the user to sign-in with the Microsoft identity platform endpoint and validates the user's credentials, and then obtains an **authorization code**. This code is then exchanged for an access token using `acquireTokenByCode` public API of MSAL Node.
At this point, a PKCE-protected authorization code is sent to the CORS-protected token endpoint and is exchanged for tokens. An ID token, access token, and refresh token are received by your application and processed by MSAL Node, and the information contained in the tokens is cached.
@@ -714,9 +192,9 @@ The ID token contains basic information about the user, like their display name.
The desktop app you've created in this tutorial makes a REST call to the Microsoft Graph API using an access token as bearer token in request header ([RFC 6750](https://tools.ietf.org/html/rfc6750)).
-The Microsoft Graph API requires the *user.read* scope to read a user's profile. By default, this scope is automatically added in every application that's registered in the Azure portal. Other APIs for Microsoft Graph, as well as custom APIs for your back-end server, might require additional scopes. For example, the Microsoft Graph API requires the *Mail.Read* scope in order to list the user's email.
+The Microsoft Graph API requires the *user.read* scope to read a user's profile. By default, this scope is automatically added in every application that's registered in the Azure portal. Other APIs for Microsoft Graph, and custom APIs for your back-end server, might require extra scopes. For example, the Microsoft Graph API requires the *Mail.Read* scope in order to list the user's email.
-As you add scopes, your users might be prompted to provide additional consent for the added scopes.
+As you add scopes, your users might be prompted to provide another consent for the added scopes.
[!INCLUDE [Help and support](../../../includes/active-directory-develop-help-support-include.md)]
diff --git a/articles/active-directory/develop/tutorial-v2-nodejs-webapp-msal.md b/articles/active-directory/develop/tutorial-v2-nodejs-webapp-msal.md
index 757a04d178465..191ebe4f1498e 100644
--- a/articles/active-directory/develop/tutorial-v2-nodejs-webapp-msal.md
+++ b/articles/active-directory/develop/tutorial-v2-nodejs-webapp-msal.md
@@ -1,6 +1,5 @@
---
-title: "Tutorial: Sign in users in a Node.js & Express web app | Azure"
-titleSuffix: Microsoft identity platform
+title: "Tutorial: Sign in users in a Node.js & Express web app"
description: In this tutorial, you add support for signing-in users in a web app.
services: active-directory
author: mmacy
@@ -13,9 +12,9 @@ ms.date: 02/17/2021
ms.author: marsma
---
-# Tutorial: Sign in users in a Node.js & Express web app
+# Tutorial: Sign in users and acquire a token for Microsoft Graph in a Node.js & Express web app
-In this tutorial, you build a web app that signs-in users. The web app you build uses the [Microsoft Authentication Library (MSAL) for Node](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-node).
+In this tutorial, you build a web app that signs-in users and acquires access tokens for calling Microsoft Graph. The web app you build uses the [Microsoft Authentication Library (MSAL) for Node](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-node).
Follow the steps in this tutorial to:
@@ -39,151 +38,177 @@ First, complete the steps in [Register an application with the Microsoft identit
Use the following settings for your app registration:
- Name: `ExpressWebApp` (suggested)
-- Supported account types: **Accounts in any organizational directory (Any Azure AD directory - Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox)**
+- Supported account types: **Accounts in this organizational directory only**
- Platform type: **Web**
-- Redirect URI: `http://localhost:3000/redirect`
+- Redirect URI: `http://localhost:3000/auth/redirect`
- Client secret: `*********` (record this value for use in a later step - it's shown only once)
## Create the project
-Create a folder to host your application, for example *ExpressWebApp*.
+Use the [Express application generator tool](https://expressjs.com/en/starter/generator.html) to create an application skeleton.
-1. First, change to your project directory in your terminal and then run the following `npm` commands:
+1. First, install the [express-generator](https://www.npmjs.com/package/express-generator) package:
```console
- npm init -y
- npm install --save express
+ npm install -g express-generator
```
-2. Next, create file named *index.js* and add the following code:
-
-```JavaScript
- const express = require("express");
- const msal = require('@azure/msal-node');
-
- const SERVER_PORT = process.env.PORT || 3000;
-
- // Create Express App and Routes
- const app = express();
-
- app.listen(SERVER_PORT, () => console.log(`Msal Node Auth Code Sample app listening on port ${SERVER_PORT}!`))
+2. Then, create an application skeleton as follows:
+
+```console
+ express --view=hbs /ExpressWebApp && cd /ExpressWebApp
+ npm install
```
-You now have a simple web server running on port 3000. The file and folder structure of your project should look similar to the following:
+You now have a simple Express web app. The file and folder structure of your project should look similar to the following:
```
ExpressWebApp/
-├── index.js
+├── bin/
+| └── wwww
+├── public/
+| ├── images/
+| ├── javascript/
+| └── stylesheets/
+| └── style.css
+├── routes/
+| ├── index.js
+| └── users.js
+├── views/
+| ├── error.hbs
+| ├── index.hbs
+| └── layout.hbs
+├── app.js
└── package.json
```
## Install the auth library
-Locate the root of your project directory in a terminal and install the MSAL Node package via NPM.
+Locate the root of your project directory in a terminal and install the MSAL Node package via npm.
```console
npm install --save @azure/msal-node
```
-## Add app registration details
+## Install other dependencies
+
+The web app sample in this tutorial uses the [express-session](https://www.npmjs.com/package/express-session) package for session management, [dotenv](https://www.npmjs.com/package/dotenv) package for reading environment parameters during development, and [axios](https://www.npmjs.com/package/axios) for making network calls to the Microsoft Graph API. Install these via npm:
-In the *index.js* file you've created earlier, add the following code:
-
-```JavaScript
- // Before running the sample, you will need to replace the values in the config,
- // including the clientSecret
- const config = {
- auth: {
- clientId: "Enter_the_Application_Id",
- authority: "Enter_the_Cloud_Instance_Id_Here/Enter_the_Tenant_Id_here",
- clientSecret: "Enter_the_Client_secret"
- },
- system: {
- loggerOptions: {
- loggerCallback(loglevel, message, containsPii) {
- console.log(message);
- },
- piiLoggingEnabled: false,
- logLevel: msal.LogLevel.Verbose,
- }
- }
- };
+```console
+ npm install --save express-session dotenv axios
```
+## Add app registration details
+
+1. Create a *.env* file in the root of your project folder. Then add the following code:
+
+:::code language="text" source="~/ms-identity-node/App/.env":::
+
Fill in these details with the values you obtain from Azure app registration portal:
-- `Enter_the_Tenant_Id_here` should be one of the following:
+- `Enter_the_Cloud_Instance_Id_Here`: The Azure cloud instance in which your application is registered.
+ - For the main (or *global*) Azure cloud, enter `https://login.microsoftonline.com/` (include the trailing forward-slash).
+ - For **national** clouds (for example, China), you can find appropriate values in [National clouds](authentication-national-cloud.md).
+- `Enter_the_Tenant_Info_here` should be one of the following:
- If your application supports *accounts in this organizational directory*, replace this value with the **Tenant ID** or **Tenant name**. For example, `contoso.microsoft.com`.
- If your application supports *accounts in any organizational directory*, replace this value with `organizations`.
- If your application supports *accounts in any organizational directory and personal Microsoft accounts*, replace this value with `common`.
- To restrict support to *personal Microsoft accounts only*, replace this value with `consumers`.
- `Enter_the_Application_Id_Here`: The **Application (client) ID** of the application you registered.
-- `Enter_the_Cloud_Instance_Id_Here`: The Azure cloud instance in which your application is registered.
- - For the main (or *global*) Azure cloud, enter `https://login.microsoftonline.com`.
- - For **national** clouds (for example, China), you can find appropriate values in [National clouds](authentication-national-cloud.md).
- `Enter_the_Client_secret`: Replace this value with the client secret you created earlier. To generate a new key, use **Certificates & secrets** in the app registration settings in the Azure portal.
> [!WARNING]
> Any plaintext secret in source code poses an increased security risk. This article uses a plaintext client secret for simplicity only. Use [certificate credentials](active-directory-certificate-credentials.md) instead of client secrets in your confidential client applications, especially those apps you intend to deploy to production.
-## Add code for user login
-
-In the *index.js* file you've created earlier, add the following code:
-
-```JavaScript
- // Create msal application object
- const cca = new msal.ConfidentialClientApplication(config);
-
- app.get('/', (req, res) => {
- const authCodeUrlParameters = {
- scopes: ["user.read"],
- redirectUri: "http://localhost:3000/redirect",
- };
-
- // get url to sign user in and consent to scopes needed for application
- cca.getAuthCodeUrl(authCodeUrlParameters).then((response) => {
- res.redirect(response);
- }).catch((error) => console.log(JSON.stringify(error)));
- });
-
- app.get('/redirect', (req, res) => {
- const tokenRequest = {
- code: req.query.code,
- scopes: ["user.read"],
- redirectUri: "http://localhost:3000/redirect",
- };
-
- cca.acquireTokenByCode(tokenRequest).then((response) => {
- console.log("\nResponse: \n:", response);
- res.sendStatus(200);
- }).catch((error) => {
- console.log(error);
- res.status(500).send(error);
- });
- });
-```
+- `Enter_the_Graph_Endpoint_Here`: The Microsoft Graph API cloud instance that your app will call. For the main (global) Microsoft Graph API service, enter `https://graph.microsoft.com/` (include the trailing forward-slash).
+- `Enter_the_Express_Session_Secret_Here` the secret used to sign the Express session cookie. Choose a random string of characters to replace this string with, such as your client secret.
+
+
+2. Next, create a file named *authConfig.js* in the root of your project for reading in these parameters. Once created, add the following code there:
+
+:::code language="js" source="~/ms-identity-node/App/authConfig.js":::
+
+## Add code for user login and token acquisition
+
+1. Create a new file named *auth.js* under the *router* folder and add the following code there:
+
+:::code language="js" source="~/ms-identity-node/App/routes/auth.js":::
+
+2. Next, update the *index.js* route by replacing the existing code with the following:
+
+:::code language="js" source="~/ms-identity-node/App/routes/index.js":::
-## Test sign in
+3. Finally, update the *users.js* route by replacing the existing code with the following:
+
+:::code language="js" source="~/ms-identity-node/App/routes/users.js":::
+
+## Add code for calling the Microsoft Graph API
+
+Create a file named *fetch.js* in the root of your project and add the following code:
+
+:::code language="js" source="~/ms-identity-node/App/fetch.js":::
+
+## Add views for displaying data
+
+1. In the *views* folder, update the *index.hbs* file by replacing the existing code with the following:
+
+:::code language="hbs" source="~/ms-identity-node/App/views/index.hbs":::
+
+2. Still in the same folder, create another file named *id.hbs* for displaying the contents of user's ID token:
+
+:::code language="hbs" source="~/ms-identity-node/App/views/id.hbs":::
+
+3. Finally, create another file named *profile.hbs* for displaying the result of the call made to Microsoft Graph:
+
+:::code language="hbs" source="~/ms-identity-node/App/views/profile.hbs":::
+
+## Register routers and add state management
+
+In the *app.js* file in the root of the project folder, register the routes you have created earlier and add session support for tracking authentication state using the **express-session** package. Replace the existing code there with the following:
+
+:::code language="js" source="~/ms-identity-node/App/app.js":::
+
+## Test sign in and call Microsoft Graph
You've completed creation of the application and are now ready to test the app's functionality.
1. Start the Node.js console app by running the following command from within the root of your project folder:
```console
- node index.js
+ npm start
```
-2. Open a browser window and navigate to `http://localhost:3000`. You should see a sign-in screen:
+2. Open a browser window and navigate to `http://localhost:3000`. You should see a welcome page:
+
+:::image type="content" source="media/tutorial-v2-nodejs-webapp-msal/welcome-screen.png" alt-text="Web app welcome page displaying":::
+
+3. Select **Sign in** link. You should see the Azure AD sign-in screen:
:::image type="content" source="media/tutorial-v2-nodejs-webapp-msal/sign-in-screen.png" alt-text="Azure AD sign-in screen displaying":::
-3. Once you enter your credentials, you should see a consent screen asking you to approve the permissions for the app.
+4. Once you enter your credentials, you should see a consent screen asking you to approve the permissions for the app.
:::image type="content" source="media/tutorial-v2-nodejs-webapp-msal/consent-screen.png" alt-text="Azure AD consent screen displaying":::
+5. Once you consent, you should be redirected back to application home page.
+
+:::image type="content" source="media/tutorial-v2-nodejs-webapp-msal/post-sign-in-screen.png" alt-text="Web app welcome page after sign-in displaying":::
+
+6. Select the **View ID Token** link for displaying the contents of the signed-in user's ID token.
+
+:::image type="content" source="media/tutorial-v2-nodejs-webapp-msal/id-token-screen.png" alt-text="User ID token screen displaying":::
+
+7. Go back to the home page, and select the **Acquire an access token and call the Microsoft Graph API** link. Once you do, you should see the response from Microsoft Graph /me endpoint for the signed-in user.
+
+:::image type="content" source="media/tutorial-v2-nodejs-webapp-msal/graph-call-screen.png" alt-text="Graph call screen displaying":::
+
+8. Go back to the home page, and select the **Sign out** link. You should see the Azure AD sign-out screen.
+
+:::image type="content" source="media/tutorial-v2-nodejs-webapp-msal/sign-out-screen.png" alt-text="Azure AD sign-out screen displaying":::
+
## How the application works
-In this tutorial, you initialized an MSAL Node [ConfidentialClientApplication](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-node/docs/initialize-confidential-client-application.md) object by passing it a configuration object (*msalConfig*) that contains parameters obtained from your Azure AD app registration on Azure portal. The web app you created uses the [OAuth 2.0 Authorization code grant flow](./v2-oauth2-auth-code-flow.md) to sign-in users and obtain ID and access tokens.
+In this tutorial, you instantiated an MSAL Node [ConfidentialClientApplication](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-node/docs/initialize-confidential-client-application.md) object by passing it a configuration object (*msalConfig*) that contains parameters obtained from your Azure AD app registration on Azure portal. The web app you created uses the [OpenID Connect protocol](./v2-protocols-oidc.md) to sign-in users and the [OAuth 2.0 Authorization code grant flow](./v2-oauth2-auth-code-flow.md) obtain access tokens.
## Next steps
diff --git a/articles/active-directory/develop/tutorial-v2-react.md b/articles/active-directory/develop/tutorial-v2-react.md
index 7d1fe6b4408ac..417de1fb47936 100644
--- a/articles/active-directory/develop/tutorial-v2-react.md
+++ b/articles/active-directory/develop/tutorial-v2-react.md
@@ -1,6 +1,5 @@
---
-title: "Tutorial: Create a React single-page app that uses auth code flow | Azure"
-titleSuffix: Microsoft identity platform
+title: "Tutorial: Create a React single-page app that uses auth code flow"
description: In this tutorial, you create a React SPA that can sign in users and use the auth code flow to obtain an access token from the Microsoft identity platform and call the Microsoft Graph API.
services: active-directory
author: j-mantu
diff --git a/articles/active-directory/develop/tutorial-v2-shared-device-mode.md b/articles/active-directory/develop/tutorial-v2-shared-device-mode.md
index 72d21f4310051..8e971b2a4364c 100644
--- a/articles/active-directory/develop/tutorial-v2-shared-device-mode.md
+++ b/articles/active-directory/develop/tutorial-v2-shared-device-mode.md
@@ -1,6 +1,5 @@
---
-title: "Tutorial: Use shared-device mode with the Microsoft Authentication Library (MSAL) for Android | Azure"
-titleSuffix: Microsoft identity platform
+title: "Tutorial: Use shared-device mode with the Microsoft Authentication Library (MSAL) for Android"
description: In this tutorial, you learn how to prepare an Android device to run in shared mode and run a first-line worker app.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/tutorial-v2-windows-desktop.md b/articles/active-directory/develop/tutorial-v2-windows-desktop.md
index 54e98b73c3bdb..6240069796e19 100644
--- a/articles/active-directory/develop/tutorial-v2-windows-desktop.md
+++ b/articles/active-directory/develop/tutorial-v2-windows-desktop.md
@@ -1,6 +1,5 @@
---
-title: "Tutorial: Create a Windows Presentation Foundation (WPF) app that uses the Microsoft identity platform for authentication | Azure"
-titleSuffix: Microsoft identity platform
+title: "Tutorial: Create a Windows Presentation Foundation (WPF) app that uses the Microsoft identity platform for authentication"
description: In this tutorial, you build a WPF application that uses the Microsoft identity platform to sign in users and get an access token to call the Microsoft Graph API on their behalf.
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/tutorial-v2-windows-uwp.md b/articles/active-directory/develop/tutorial-v2-windows-uwp.md
index 0281a97ddd40c..d6e611c4efe0c 100644
--- a/articles/active-directory/develop/tutorial-v2-windows-uwp.md
+++ b/articles/active-directory/develop/tutorial-v2-windows-uwp.md
@@ -1,6 +1,5 @@
---
-title: "Tutorial: Create a Universal Windows Platform (UWP) app that uses the Microsoft identity platform for authentication | Azure"
-titleSuffix: Microsoft identity platform
+title: "Tutorial: Create a Universal Windows Platform (UWP) app that uses the Microsoft identity platform for authentication"
description: In this tutorial, you build a UWP application that uses the Microsoft identity platform to sign in users and get an access token to call the Microsoft Graph API on their behalf.
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/userinfo.md b/articles/active-directory/develop/userinfo.md
index ac7e2c2f1d40a..5ca0be4a8cad2 100644
--- a/articles/active-directory/develop/userinfo.md
+++ b/articles/active-directory/develop/userinfo.md
@@ -1,6 +1,5 @@
---
-title: Microsoft identity platform UserInfo endpoint | Azure
-titleSuffix: Microsoft identity platform
+title: Microsoft identity platform UserInfo endpoint
description: Learn about the UserInfo endpoint on the Microsoft identity platform.
services: active-directory
author: nickludwig
diff --git a/articles/active-directory/develop/v2-app-types.md b/articles/active-directory/develop/v2-app-types.md
index abdcc56a7884a..bb9a26dd821b8 100644
--- a/articles/active-directory/develop/v2-app-types.md
+++ b/articles/active-directory/develop/v2-app-types.md
@@ -1,5 +1,5 @@
---
-title: Application types for the Microsoft identity platform | Azure
+title: Application types for the Microsoft identity platform
description: The types of apps and scenarios supported by the Microsoft identity platform.
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/v2-conditional-access-dev-guide.md b/articles/active-directory/develop/v2-conditional-access-dev-guide.md
index 33b0dbe401d88..2cc37f1153aae 100644
--- a/articles/active-directory/develop/v2-conditional-access-dev-guide.md
+++ b/articles/active-directory/develop/v2-conditional-access-dev-guide.md
@@ -1,6 +1,5 @@
---
title: Developer guidance for Azure Active Directory Conditional Access
-titleSuffix: Microsoft identity platform
description: Developer guidance and scenarios for Azure AD Conditional Access and Microsoft identity platform.
services: active-directory
keywords:
diff --git a/articles/active-directory/develop/v2-oauth-ropc.md b/articles/active-directory/develop/v2-oauth-ropc.md
index e640d73b0644c..6892f9c4ba473 100644
--- a/articles/active-directory/develop/v2-oauth-ropc.md
+++ b/articles/active-directory/develop/v2-oauth-ropc.md
@@ -1,6 +1,5 @@
---
-title: Sign in with resource owner password credentials grant | Azure
-titleSuffix: Microsoft identity platform
+title: Sign in with resource owner password credentials grant
description: Support browser-less authentication flows using the resource owner password credential (ROPC) grant.
services: active-directory
author: nickludwig
diff --git a/articles/active-directory/develop/v2-oauth2-auth-code-flow.md b/articles/active-directory/develop/v2-oauth2-auth-code-flow.md
index b4b4f2f920f2d..c968237660c78 100644
--- a/articles/active-directory/develop/v2-oauth2-auth-code-flow.md
+++ b/articles/active-directory/develop/v2-oauth2-auth-code-flow.md
@@ -1,6 +1,5 @@
---
-title: Microsoft identity platform and OAuth 2.0 authorization code flow | Azure
-titleSuffix: Microsoft identity platform
+title: Microsoft identity platform and OAuth 2.0 authorization code flow
description: Build web applications using the Microsoft identity platform implementation of the OAuth 2.0 authentication protocol.
services: active-directory
author: nickludwig
diff --git a/articles/active-directory/develop/v2-oauth2-client-creds-grant-flow.md b/articles/active-directory/develop/v2-oauth2-client-creds-grant-flow.md
index 85d04b57f6ca2..660b3048024c2 100644
--- a/articles/active-directory/develop/v2-oauth2-client-creds-grant-flow.md
+++ b/articles/active-directory/develop/v2-oauth2-client-creds-grant-flow.md
@@ -1,5 +1,5 @@
---
-title: OAuth 2.0 client credentials flow on the Microsoft identity platform | Azure
+title: OAuth 2.0 client credentials flow on the Microsoft identity platform
description: Build web applications by using the Microsoft identity platform implementation of the OAuth 2.0 authentication protocol.
services: active-directory
author: nickludwig
diff --git a/articles/active-directory/develop/v2-oauth2-device-code.md b/articles/active-directory/develop/v2-oauth2-device-code.md
index 21001b0668cdf..46965ed0c1f12 100644
--- a/articles/active-directory/develop/v2-oauth2-device-code.md
+++ b/articles/active-directory/develop/v2-oauth2-device-code.md
@@ -1,6 +1,5 @@
---
-title: OAuth 2.0 device code flow | Azure
-titleSuffix: Microsoft identity platform
+title: OAuth 2.0 device code flow
description: Sign in users without a browser. Build embedded and browser-less authentication flows using the device authorization grant.
services: active-directory
author: nickludwig
diff --git a/articles/active-directory/develop/v2-oauth2-implicit-grant-flow.md b/articles/active-directory/develop/v2-oauth2-implicit-grant-flow.md
index d03cb9cfe85c8..d955287a0286e 100644
--- a/articles/active-directory/develop/v2-oauth2-implicit-grant-flow.md
+++ b/articles/active-directory/develop/v2-oauth2-implicit-grant-flow.md
@@ -1,5 +1,5 @@
---
-title: OAuth 2.0 implicit grant flow - The Microsoft identity platform | Azure
+title: OAuth 2.0 implicit grant flow - The Microsoft identity platform
description: Secure single-page apps using Microsoft identity platform implicit flow.
services: active-directory
author: nickludwig
diff --git a/articles/active-directory/develop/v2-oauth2-on-behalf-of-flow.md b/articles/active-directory/develop/v2-oauth2-on-behalf-of-flow.md
index 195c162022a18..615eed7e48eb2 100644
--- a/articles/active-directory/develop/v2-oauth2-on-behalf-of-flow.md
+++ b/articles/active-directory/develop/v2-oauth2-on-behalf-of-flow.md
@@ -1,6 +1,5 @@
---
-title: Microsoft identity platform and OAuth2.0 On-Behalf-Of flow | Azure
-titleSuffix: Microsoft identity platform
+title: Microsoft identity platform and OAuth2.0 On-Behalf-Of flow
description: This article describes how to use HTTP messages to implement service to service authentication using the OAuth2.0 On-Behalf-Of flow.
services: active-directory
author: nickludwig
diff --git a/articles/active-directory/develop/v2-overview.md b/articles/active-directory/develop/v2-overview.md
index b99c92bfedb12..f3c5b2ae292e2 100644
--- a/articles/active-directory/develop/v2-overview.md
+++ b/articles/active-directory/develop/v2-overview.md
@@ -1,6 +1,5 @@
---
-title: Microsoft identity platform overview - Azure
-titleSuffix: Microsoft identity platform
+title: Microsoft identity platform overview
description: Learn about the components of the Microsoft identity platform and how they can help you build identity and access management (IAM) support into your applications.
services: active-directory
author: rwike77
@@ -32,7 +31,7 @@ There are several components that make up the Microsoft identity platform:
- **Application configuration API and PowerShell**: Programmatic configuration of your applications through the Microsoft Graph API and PowerShell so you can automate your DevOps tasks.
- **Developer content**: Technical documentation including quickstarts, tutorials, how-to guides, and code samples.
-For developers, the Microsoft identity platform offers integration of modern innovations in the identity and security space like passwordless authentication, step-up authentication, and Conditional Access. You don’t need to implement such functionality yourself: applications integrated with the Microsoft identity platform natively take advantage of such innovations.
+For developers, the Microsoft identity platform offers integration of modern innovations in the identity and security space like passwordless authentication, step-up authentication, and Conditional Access. You don't need to implement such functionality yourself: applications integrated with the Microsoft identity platform natively take advantage of such innovations.
With the Microsoft identity platform, you can write code once and reach any user. You can build an app once and have it work across many platforms, or build an app that functions as a client as well as a resource application (API).
diff --git a/articles/active-directory/develop/v2-protocols-oidc.md b/articles/active-directory/develop/v2-protocols-oidc.md
index 734d813cd3ecb..a1a7d0d1124b3 100644
--- a/articles/active-directory/develop/v2-protocols-oidc.md
+++ b/articles/active-directory/develop/v2-protocols-oidc.md
@@ -1,6 +1,5 @@
---
-title: Microsoft identity platform and OpenID Connect protocol | Azure
-titleSuffix: Microsoft identity platform
+title: Microsoft identity platform and OpenID Connect protocol
description: Build web applications by using the Microsoft identity platform implementation of the OpenID Connect authentication protocol.
services: active-directory
author: nickludwig
diff --git a/articles/active-directory/develop/v2-saml-bearer-assertion.md b/articles/active-directory/develop/v2-saml-bearer-assertion.md
index 1636318973d88..5b985a968f65b 100644
--- a/articles/active-directory/develop/v2-saml-bearer-assertion.md
+++ b/articles/active-directory/develop/v2-saml-bearer-assertion.md
@@ -1,6 +1,5 @@
---
title: Exchange a SAML token issued by Active Directory Federation Services (AD FS) for a Microsoft Graph access token
-titleSuffix: Microsoft identity platform
description: Learn how to fetch data from Microsoft Graph without prompting an AD FS-federated user for credentials by using the SAML bearer assertion flow.
services: active-directory
author: mmacy
diff --git a/articles/active-directory/develop/v2-supported-account-types.md b/articles/active-directory/develop/v2-supported-account-types.md
index 28377f28e06b4..5fc571eec3ae1 100644
--- a/articles/active-directory/develop/v2-supported-account-types.md
+++ b/articles/active-directory/develop/v2-supported-account-types.md
@@ -1,6 +1,5 @@
---
-title: Supported account types | Azure
-titleSuffix: Microsoft identity platform
+title: Supported account types
description: Conceptual documentation about audiences and supported account types in applications
services: active-directory
author: jmprieur
diff --git a/articles/active-directory/develop/web-api-quickstart.md b/articles/active-directory/develop/web-api-quickstart.md
index 24c544a8a7d65..3319bcfb9b96f 100644
--- a/articles/active-directory/develop/web-api-quickstart.md
+++ b/articles/active-directory/develop/web-api-quickstart.md
@@ -1,6 +1,5 @@
---
-title: "Quickstart: Protect a web API with the Microsoft identity platform | Azure"
-titleSuffix: Microsoft identity platform
+title: "Quickstart: Protect a web API with the Microsoft identity platform"
description: In this quickstart, you download and modify a code sample that demonstrates how to protect a web API by using the Microsoft identity platform for authorization.
services: active-directory
author: Dickson-Mwendia
diff --git a/articles/active-directory/develop/web-app-quickstart.md b/articles/active-directory/develop/web-app-quickstart.md
index ef6fa69406be8..66dcc0a0e07d2 100644
--- a/articles/active-directory/develop/web-app-quickstart.md
+++ b/articles/active-directory/develop/web-app-quickstart.md
@@ -1,6 +1,5 @@
---
title: "Quickstart: Sign in users in web apps using the auth code flow"
-titleSuffix: Microsoft identity platform
description: In this quickstart, learn how a web app can sign in users of personal accounts, work accounts, and school accounts by using the authorization code flow.
services: active-directory
author: Dickson-Mwendia
diff --git a/articles/active-directory/develop/whats-new-docs.md b/articles/active-directory/develop/whats-new-docs.md
index c4438313797b7..3b25e7239259a 100644
--- a/articles/active-directory/develop/whats-new-docs.md
+++ b/articles/active-directory/develop/whats-new-docs.md
@@ -1,12 +1,11 @@
---
title: "What's new in the Microsoft identity platform docs"
-titleSuffix: Microsoft identity platform
description: "New and updated documentation for the Microsoft identity platform."
services: active-directory
author: mmacy
manager: CelesteDG
-ms.date: 04/04/2022
+ms.date: 06/02/2022
ms.service: active-directory
ms.subservice: develop
ms.topic: reference
@@ -19,6 +18,21 @@ ms.custom: has-adal-ref
Welcome to what's new in the Microsoft identity platform documentation. This article lists new docs that have been added and those that have had significant updates in the last three months.
+## May 2022
+
+### Updated articles
+
+- [Developer guide to Conditional Access authentication context](developer-guide-conditional-access-authentication-context.md)
+- [Migrate confidential client applications from ADAL.NET to MSAL.NET](msal-net-migration-confidential-client.md)
+- [Protected web API: App registration](scenario-protected-web-api-app-registration.md)
+- [Quickstart: Sign in users and call the Microsoft Graph API from an Android app](mobile-app-quickstart-portal-android.md)
+- [Quickstart: Sign in users and call the Microsoft Graph API from an iOS or macOS app](mobile-app-quickstart-portal-ios.md)
+- [Set up your application's Azure AD test environment](test-setup-environment.md)
+- [Single Sign-On SAML protocol](single-sign-on-saml-protocol.md)
+- [Single sign-on with MSAL.js](msal-js-sso.md)
+- [Tutorial: Sign in users and acquire a token for Microsoft Graph in a Node.js & Express web app](tutorial-v2-nodejs-webapp-msal.md)
+- [What's new for authentication?](reference-breaking-changes.md)
+
## March 2022
### New articles
@@ -39,24 +53,3 @@ Welcome to what's new in the Microsoft identity platform documentation. This art
### Updated articles
- [Desktop app that calls web APIs: Acquire a token using WAM](scenario-desktop-acquire-token-wam.md)
-
-## January 2022
-
-### New articles
-
-- [Access Azure AD protected resources from an app in Google Cloud (preview)](workload-identity-federation-create-trust-gcp.md)
-
-### Updated articles
-
-- [Confidential client assertions](msal-net-client-assertions.md)
-- [Claims mapping policy type](reference-claims-mapping-policy-type.md)
-- [Configure an app to trust a GitHub repo (preview)](workload-identity-federation-create-trust-github.md)
-- [Configure an app to trust an external identity provider (preview)](workload-identity-federation-create-trust.md)
-- [Exchange a SAML token issued by AD FS for a Microsoft Graph access token](v2-saml-bearer-assertion.md)
-- [Logging in MSAL.js](msal-logging-js.md)
-- [Permissions and consent in the Microsoft identity platform](v2-permissions-and-consent.md)
-- [Quickstart: Acquire a token and call the Microsoft Graph API by using a console app's identity](console-app-quickstart.md)
-- [Quickstart: Acquire a token and call Microsoft Graph API from a desktop application](desktop-app-quickstart.md)
-- [Quickstart: Add sign-in with Microsoft to a web app](web-app-quickstart.md)
-- [Quickstart: Protect a web API with the Microsoft identity platform](web-api-quickstart.md)
-- [Quickstart: Sign in users and call the Microsoft Graph API from a mobile application](mobile-app-quickstart.md)
diff --git a/articles/active-directory/develop/workload-identities-overview.md b/articles/active-directory/develop/workload-identities-overview.md
index d0dc0d1f727c7..4969901bb4973 100644
--- a/articles/active-directory/develop/workload-identities-overview.md
+++ b/articles/active-directory/develop/workload-identities-overview.md
@@ -1,6 +1,5 @@
---
title: Workload identities
-titleSuffix: Microsoft identity platform
description: Understand the concepts and supported scenarios for using workload identity in Azure Active Directory.
author: rwike77
manager: CelesteDG
diff --git a/articles/active-directory/develop/workload-identity-federation-create-trust-gcp.md b/articles/active-directory/develop/workload-identity-federation-create-trust-gcp.md
index 250d0f37f84a2..7c0afddaa733c 100644
--- a/articles/active-directory/develop/workload-identity-federation-create-trust-gcp.md
+++ b/articles/active-directory/develop/workload-identity-federation-create-trust-gcp.md
@@ -1,6 +1,5 @@
---
title: Access Azure resources from Google Cloud without credentials
-titleSuffix: Microsoft identity platform
description: Access Azure AD protected resources from a service running in Google Cloud without using secrets or certificates. Use workload identity federation to set up a trust relationship between an app in Azure AD and an identity in Google Cloud. The workload running in Google Cloud can get an access token from Microsoft identity platform and access Azure AD protected resources.
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/workload-identity-federation-create-trust-github.md b/articles/active-directory/develop/workload-identity-federation-create-trust-github.md
index dc73382f8f9fe..67b2e8d11ebae 100644
--- a/articles/active-directory/develop/workload-identity-federation-create-trust-github.md
+++ b/articles/active-directory/develop/workload-identity-federation-create-trust-github.md
@@ -1,6 +1,5 @@
---
title: Create a trust relationship between an app and GitHub
-titleSuffix: Microsoft identity platform
description: Set up a trust relationship between an app in Azure AD and a GitHub repo. This allows a GitHub Actions workflow to access Azure AD protected resources without using secrets or certificates.
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/workload-identity-federation-create-trust.md b/articles/active-directory/develop/workload-identity-federation-create-trust.md
index e85e35f4add05..6c861c702b65b 100644
--- a/articles/active-directory/develop/workload-identity-federation-create-trust.md
+++ b/articles/active-directory/develop/workload-identity-federation-create-trust.md
@@ -1,6 +1,5 @@
---
title: Create a trust relationship between an app and an external identity provider
-titleSuffix: Microsoft identity platform
description: Set up a trust relationship between an app in Azure AD and an external identity provider. This allows a software workload outside of Azure to access Azure AD protected resources without using secrets or certificates.
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/workload-identity-federation.md b/articles/active-directory/develop/workload-identity-federation.md
index 50d25ad903dd8..c8965287fd768 100644
--- a/articles/active-directory/develop/workload-identity-federation.md
+++ b/articles/active-directory/develop/workload-identity-federation.md
@@ -1,6 +1,5 @@
---
title: Workload identity federation
-titleSuffix: Microsoft identity platform
description: Use workload identity federation to grant workloads running outside of Azure access to Azure AD protected resources without using secrets or certificates. This eliminates the need for developers to store and maintain long-lived secrets or certificates outside of Azure.
services: active-directory
author: rwike77
diff --git a/articles/active-directory/develop/zero-trust-for-developers.md b/articles/active-directory/develop/zero-trust-for-developers.md
index dc011909e3f73..7029ee26b23ad 100644
--- a/articles/active-directory/develop/zero-trust-for-developers.md
+++ b/articles/active-directory/develop/zero-trust-for-developers.md
@@ -1,6 +1,5 @@
---
title: "Increase app security by following Zero Trust principles"
-titleSuffix: Microsoft identity platform
description: Learn how following the Zero Trust principles can help increase the security of your application, its data, and which features of the Microsoft identity platform you can use to build Zero Trust-ready apps.
services: active-directory
author: chrischiedo
diff --git a/articles/active-directory/devices/azureadjoin-plan.md b/articles/active-directory/devices/azureadjoin-plan.md
index 8448e00584085..83d4c2429df7d 100644
--- a/articles/active-directory/devices/azureadjoin-plan.md
+++ b/articles/active-directory/devices/azureadjoin-plan.md
@@ -17,7 +17,7 @@ ms.collection: M365-identity-device-management
---
# How to: Plan your Azure AD join implementation
-Azure AD join allows you to join devices directly to Azure AD without the need to join to on-premises Active Directory while keeping your users productive and secure. Azure AD join is enterprise-ready for both at-scale and scoped deployments. SSO access to on-premises resources is also available to devices that are Azure AD joined. For more information, see [How SSO to on-premises resources works on Azure AD joined devices](azuread-join-sso.md).
+You can join devices directly to Azure Active Directory (Azure AD) without the need to join to on-premises Active Directory while keeping your users productive and secure. Azure AD join is enterprise-ready for both at-scale and scoped deployments. Single sign-on (SSO) access to on-premises resources is also available to devices that are Azure AD joined. For more information, see [How SSO to on-premises resources works on Azure AD joined devices](azuread-join-sso.md).
This article provides you with the information you need to plan your Azure AD join implementation.
@@ -40,7 +40,7 @@ To plan your Azure AD join implementation, you should familiarize yourself with:
## Review your scenarios
-While hybrid Azure AD join may be preferred for certain scenarios, Azure AD join enables you to transition towards a cloud-first model with Windows. If you're planning to modernize your devices management and reduce device-related IT costs, Azure AD join provides a great foundation towards achieving those goals.
+Azure AD join enables you to transition towards a cloud-first model with Windows. If you're planning to modernize your devices management and reduce device-related IT costs, Azure AD join provides a great foundation towards achieving those goals.
Consider Azure AD join if your goals align with the following criteria:
@@ -51,7 +51,7 @@ Consider Azure AD join if your goals align with the following criteria:
## Review your identity infrastructure
-Azure AD join works in managed and federated environments. We think most organizations will deploy hybrid Azure AD join with managed domains. Managed domain scenarios don't require configuring a federation server.
+Azure AD join works in managed and federated environments. We think most organizations will deploy with managed domains. Managed domain scenarios don't require configuring and managing a federation server like Active Directory Federation Services (AD FS).
### Managed environment
@@ -75,12 +75,6 @@ If your identity provider doesn't support these protocols, Azure AD join doesn't
> [!NOTE]
> Currently, Azure AD join does not work with [AD FS 2019 configured with external authentication providers as the primary authentication method](/windows-server/identity/ad-fs/operations/additional-authentication-methods-ad-fs#enable-external-authentication-methods-as-primary). Azure AD join defaults to password authentication as the primary method, which results in authentication failures in this scenario
-### Smartcards and certificate-based authentication
-
-You can't use smartcards or certificate-based authentication to join devices to Azure AD. However, smartcards can be used to sign in to Azure AD joined devices if you have AD FS configured.
-
-**Recommendation:** Implement Windows Hello for Business for strong, password-less authentication to Windows 10 or newer.
-
### User configuration
If you create users in your:
@@ -88,7 +82,7 @@ If you create users in your:
- **On-premises Active Directory**, you need to synchronize them to Azure AD using [Azure AD Connect](../hybrid/how-to-connect-sync-whatis.md).
- **Azure AD**, no extra setup is required.
-On-premises UPNs that are different from Azure AD UPNs aren't supported on Azure AD joined devices. If your users use an on-premises UPN, you should plan to switch to using their primary UPN in Azure AD.
+On-premises user principal names (UPNs) that are different from Azure AD UPNs aren't supported on Azure AD joined devices. If your users use an on-premises UPN, you should plan to switch to using their primary UPN in Azure AD.
UPN changes are only supported starting Windows 10 2004 update. Users on devices with this update won't have any issues after changing their UPNs. For devices before the Windows 10 2004 update, users would have SSO and Conditional Access issues on their devices. They need to sign in to Windows through the "Other user" tile using their new UPN to resolve this issue.
@@ -106,7 +100,7 @@ Azure AD join:
### Management platform
-Device management for Azure AD joined devices is based on an MDM platform such as Intune, and MDM CSPs. Starting in Windows 10 there is a built-in MDM agent that works with all compatible MDM solutions.
+Device management for Azure AD joined devices is based on a mobile device management (MDM) platform such as Intune, and MDM CSPs. Starting in Windows 10 there's a built-in MDM agent that works with all compatible MDM solutions.
> [!NOTE]
> Group policies are not supported in Azure AD joined devices as they are not connected to on-premises Active Directory. Management of Azure AD joined devices is only possible through MDM
@@ -114,7 +108,7 @@ Device management for Azure AD joined devices is based on an MDM platform such a
There are two approaches for managing Azure AD joined devices:
- **MDM-only** - A device is exclusively managed by an MDM provider like Intune. All policies are delivered as part of the MDM enrollment process. For Azure AD Premium or EMS customers, MDM enrollment is an automated step that is part of an Azure AD join.
-- **Co-management** - A device is managed by an MDM provider and SCCM. In this approach, the SCCM agent is installed on an MDM-managed device to administer certain aspects.
+- **Co-management** - A device is managed by an MDM provider and Microsoft Endpoint Configuration Manager. In this approach, the Microsoft Endpoint Configuration Manager agent is installed on an MDM-managed device to administer certain aspects.
If you're using Group Policies, evaluate your GPO and MDM policy parity by using [Group Policy analytics](/mem/intune/configuration/group-policy-analytics) in Microsoft Endpoint Manager.
@@ -126,7 +120,7 @@ Review supported and unsupported policies to determine whether you can use an MD
If your MDM solution isn't available through the Azure AD app gallery, you can add it following the process
outlined in [Azure Active Directory integration with MDM](/windows/client-management/mdm/azure-active-directory-integration-with-mdm).
-Through co-management, you can use SCCM to manage certain aspects of your devices while policies are delivered through your MDM platform. Microsoft Intune enables co-management with SCCM. For more information on co-management for Windows 10 or newer devices, see [What is co-management?](/configmgr/core/clients/manage/co-management-overview). If you use an MDM product other than Intune, check with your MDM provider on applicable co-management scenarios.
+Through co-management, you can use Microsoft Endpoint Configuration Manager to manage certain aspects of your devices while policies are delivered through your MDM platform. Microsoft Intune enables co-management with Microsoft Endpoint Configuration Manager. For more information on co-management for Windows 10 or newer devices, see [What is co-management?](/configmgr/core/clients/manage/co-management-overview). If you use an MDM product other than Intune, check with your MDM provider on applicable co-management scenarios.
**Recommendation:** Consider MDM only management for Azure AD joined devices.
@@ -250,8 +244,8 @@ Before you can configure your mobility settings, you may have to add an MDM prov
**To add an MDM provider**:
-1. On the **Azure Active Directory page**, in the **Manage** section, click `Mobility (MDM and MAM)`.
-1. Click **Add application**.
+1. On the **Azure Active Directory page**, in the **Manage** section, select `Mobility (MDM and MAM)`.
+1. Select **Add application**.
1. Select your MDM provider from the list.
:::image type="content" source="./media/azureadjoin-plan/04.png" alt-text="Screenshot of the Azure Active Directory Add an application page. Several M D M providers are listed." border="false":::
diff --git a/articles/active-directory/devices/device-management-azure-portal.md b/articles/active-directory/devices/device-management-azure-portal.md
index 236e3023847fc..b724976dc6724 100644
--- a/articles/active-directory/devices/device-management-azure-portal.md
+++ b/articles/active-directory/devices/device-management-azure-portal.md
@@ -157,7 +157,7 @@ You must be assigned one of the following roles to view or manage device setting
- **Additional local administrators on Azure AD joined devices**: This setting allows you to select the users who are granted local administrator rights on a device. These users are added to the Device Administrators role in Azure AD. Global Administrators in Azure AD and device owners are granted local administrator rights by default.
This option is a premium edition capability available through products like Azure AD Premium and Enterprise Mobility + Security.
- **Users may register their devices with Azure AD**: You need to configure this setting to allow users to register Windows 10 or newer personal, iOS, Android, and macOS devices with Azure AD. If you select **None**, devices aren't allowed to register with Azure AD. Enrollment with Microsoft Intune or mobile device management for Microsoft 365 requires registration. If you've configured either of these services, **ALL** is selected and **NONE** is unavailable.
-- **Require Multi-Factor Authentication to register or join devices with Azure AD**: This setting allows you to specify whether users are required to provide another authentication factor to join or register their devices to Azure AD. The default is **No**. We recommend that you require multifactor authentication when a device is registered or joined. Before you enable multifactor authentication for this service, you must ensure that multifactor authentication is configured for users that register their devices. For more information on Azure AD Multi-Factor Authentication services, see [getting started with Azure AD Multi-Factor Authentication](../authentication/concept-mfa-howitworks.md).
+- **Require Multi-Factor Authentication to register or join devices with Azure AD**: This setting allows you to specify whether users are required to provide another authentication factor to join or register their devices to Azure AD. The default is **No**. We recommend that you require multifactor authentication when a device is registered or joined. Before you enable multifactor authentication for this service, you must ensure that multifactor authentication is configured for users that register their devices. For more information on Azure AD Multi-Factor Authentication services, see [getting started with Azure AD Multi-Factor Authentication](../authentication/concept-mfa-howitworks.md). This setting may not work with third-party identity providers.
> [!NOTE]
> The **Require Multi-Factor Authentication to register or join devices with Azure AD** setting applies to devices that are either Azure AD joined (with some exceptions) or Azure AD registered. This setting doesn't apply to hybrid Azure AD joined devices, [Azure AD joined VMs in Azure](./howto-vm-sign-in-azure-ad-windows.md#enabling-azure-ad-login-for-windows-vm-in-azure), or Azure AD joined devices that use [Windows Autopilot self-deployment mode](/mem/autopilot/self-deploying).
diff --git a/articles/active-directory/devices/howto-vm-sign-in-azure-ad-windows.md b/articles/active-directory/devices/howto-vm-sign-in-azure-ad-windows.md
index 3f5e7b45bb7ef..66f435cf619ae 100644
--- a/articles/active-directory/devices/howto-vm-sign-in-azure-ad-windows.md
+++ b/articles/active-directory/devices/howto-vm-sign-in-azure-ad-windows.md
@@ -274,14 +274,14 @@ The AADLoginForWindows extension must install successfully in order for the VM t
1. Ensure the required endpoints are accessible from the VM using PowerShell:
- - `curl https://login.microsoftonline.com/ -D -`
- - `curl https://login.microsoftonline.com// -D -`
- - `curl https://enterpriseregistration.windows.net/ -D -`
- - `curl https://device.login.microsoftonline.com/ -D -`
- - `curl https://pas.windows.net/ -D -`
+ - `curl.exe https://login.microsoftonline.com/ -D -`
+ - `curl.exe https://login.microsoftonline.com// -D -`
+ - `curl.exe https://enterpriseregistration.windows.net/ -D -`
+ - `curl.exe https://device.login.microsoftonline.com/ -D -`
+ - `curl.exe https://pas.windows.net/ -D -`
> [!NOTE]
- > Replace `` with the Azure AD Tenant ID that is associated with the Azure subscription. `enterpriseregistration.windows.net` and `pas.windows.net` should return 404 Not Found, which is expected behavior.
+ > Replace `` with the Azure AD Tenant ID that is associated with the Azure subscription. `login.microsoftonline.com/`, `enterpriseregistration.windows.net`, and `pas.windows.net` should return 404 Not Found, which is expected behavior.
1. The Device State can be viewed by running `dsregcmd /status`. The goal is for Device State to show as `AzureAdJoined : YES`.
@@ -398,12 +398,12 @@ If you've configured a Conditional Access policy that requires multi-factor auth
- Your credentials did not work.
-![Your credentials did not work](./media/howto-vm-sign-in-azure-ad-windows/your-credentials-did-not-work.png)
-
> [!WARNING]
-> Per-user Enabled/Enforced Azure AD Multi-Factor Authentication is not supported for VM Sign-In. This setting causes Sign-in to fail with “Your credentials do not work.” error message.
+> Legacy per-user Enabled/Enforced Azure AD Multi-Factor Authentication is not supported for VM Sign-In. This setting causes Sign-in to fail with “Your credentials do not work.” error message.
+
+![Your credentials did not work](./media/howto-vm-sign-in-azure-ad-windows/your-credentials-did-not-work.png)
-You can resolve the above issue by removing the per user MFA setting, by following these steps:
+You can resolve the above issue by removing the per-user MFA setting, by following these steps:
```
diff --git a/articles/active-directory/devices/hybrid-azuread-join-control.md b/articles/active-directory/devices/hybrid-azuread-join-control.md
index ff95afc45afab..4aa7bd9117400 100644
--- a/articles/active-directory/devices/hybrid-azuread-join-control.md
+++ b/articles/active-directory/devices/hybrid-azuread-join-control.md
@@ -72,10 +72,10 @@ Use the following example to create a Group Policy Object (GPO) to deploy a regi
### Configure AD FS settings
-If you're using AD FS, you first need to configure client-side SCP using the instructions mentioned earlier by linking the GPO to your AD FS servers. The SCP object defines the source of authority for device objects. It can be on-premises or Azure AD. When client-side SCP is configured for AD FS, the source for device objects is established as Azure AD.
+If your Azure AD is federated with AD FS, you first need to configure client-side SCP using the instructions mentioned earlier by linking the GPO to your AD FS servers. The SCP object defines the source of authority for device objects. It can be on-premises or Azure AD. When client-side SCP is configured for AD FS, the source for device objects is established as Azure AD.
> [!NOTE]
-> If you failed to configure client-side SCP on your AD FS servers, the source for device identities would be considered as on-premises. ADFS will then start deleting device objects from on-premises directory after the stipulated period defined in the ADFS Device Registration's attribute "MaximumInactiveDays". ADFS Device Registration objects can be found using the [Get-AdfsDeviceRegistration cmdlet](/powershell/module/adfs/get-adfsdeviceregistration).
+> If you failed to configure client-side SCP on your AD FS servers, the source for device identities would be considered as on-premises. AD FS will then start deleting device objects from on-premises directory after the stipulated period defined in the AD FS Device Registration's attribute "MaximumInactiveDays". AD FS Device Registration objects can be found using the [Get-AdfsDeviceRegistration cmdlet](/powershell/module/adfs/get-adfsdeviceregistration).
## Supporting down-level devices
diff --git a/articles/active-directory/devices/manage-stale-devices.md b/articles/active-directory/devices/manage-stale-devices.md
index 9490d3a4e50b0..3b3e3880e7be0 100644
--- a/articles/active-directory/devices/manage-stale-devices.md
+++ b/articles/active-directory/devices/manage-stale-devices.md
@@ -6,7 +6,7 @@ services: active-directory
ms.service: active-directory
ms.subservice: devices
ms.topic: how-to
-ms.date: 02/15/2022
+ms.date: 06/01/2022
ms.author: joflore
author: MicrosoftGuyJFlo
@@ -83,7 +83,7 @@ It isn't advisable to immediately delete a device that appears to be stale becau
### MDM-controlled devices
-If your device is under control of Intune or any other MDM solution, retire the device in the management system before disabling or deleting it.
+If your device is under control of Intune or any other MDM solution, retire the device in the management system before disabling or deleting it. For more information see the article [Remove devices by using wipe, retire, or manually unenrolling the device](/mem/intune/remote-actions/devices-wipe).
### System-managed devices
@@ -208,4 +208,6 @@ Any authentication where a device is being used to authenticate to Azure AD are
## Next steps
+Devices managed with Intune can be retired or wiped, for more information see the article [Remove devices by using wipe, retire, or manually unenrolling the device](/mem/intune/remote-actions/devices-wipe).
+
To get an overview of how to manage device in the Azure portal, see [managing devices using the Azure portal](device-management-azure-portal.md)
diff --git a/articles/active-directory/enterprise-users/TOC.yml b/articles/active-directory/enterprise-users/TOC.yml
index a4a1db4174451..0918ea7cfd08a 100644
--- a/articles/active-directory/enterprise-users/TOC.yml
+++ b/articles/active-directory/enterprise-users/TOC.yml
@@ -110,6 +110,8 @@
href: groups-dynamic-rule-more-efficient.md
- name: Change group membership type
href: groups-change-type.md
+ - name: Group as memberOf a dynamic group
+ href: groups-dynamic-rule-member-of.md
- name: Add members in bulk
href: groups-bulk-import-members.md
- name: Remove members in bulk
diff --git a/articles/active-directory/enterprise-users/directory-delete-howto.md b/articles/active-directory/enterprise-users/directory-delete-howto.md
index 6be13ba83a46b..820cefe157bbf 100644
--- a/articles/active-directory/enterprise-users/directory-delete-howto.md
+++ b/articles/active-directory/enterprise-users/directory-delete-howto.md
@@ -93,7 +93,7 @@ You can put a subscription into the **Deprovisioned** state to be deleted in thr
If you have an Active or Cancelled Azure Subscription associated to your Azure AD Tenant then you would not be able to delete Azure AD Tenant. After you cancel, billing is stopped immediately. However, Microsoft waits 30 - 90 days before permanently deleting your data in case you need to access it or you change your mind. We don't charge you for keeping the data.
-- If you have a free trial or pay-as-you-go subscription, you don't have to wait 90 days for the subscription to automatically delete. You can delete your subscription three days after you cancel it. The Delete subscription option isn't available until three days after you cancel your subscription. For more details please read through [Delete free trial or pay-as-you-go subscriptions](../../cost-management-billing/manage/cancel-azure-subscription.md#delete-free-trial-or-pay-as-you-go-subscriptions).
+- If you have a free trial or pay-as-you-go subscription, you don't have to wait 90 days for the subscription to automatically delete. You can delete your subscription three days after you cancel it. The Delete subscription option isn't available until three days after you cancel your subscription. For more details please read through [Delete free trial or pay-as-you-go subscriptions](../../cost-management-billing/manage/cancel-azure-subscription.md#delete-subscriptions).
- All other subscription types are deleted only through the [subscription cancellation](../../cost-management-billing/manage/cancel-azure-subscription.md#cancel-subscription-in-the-azure-portal) process. In other words, you can't delete a subscription directly unless it's a free trial or pay-as-you-go subscription. However, after you cancel a subscription, you can create an [Azure support request](https://go.microsoft.com/fwlink/?linkid=2083458) to ask to have the subscription deleted immediately.
- Alternatively, you can also move/transfer the Azure subscription to another Azure AD tenant account. When you transfer billing ownership of your subscription to an account in another Azure AD tenant, you can move the subscription to the new account's tenant. Additionally, perfoming Switch Directory on the subscription would not help as the billing would still be aligned with Azure AD Tenant which was used to sign up for the subscription. For more information review [Transfer a subscription to another Azure AD tenant account](../../cost-management-billing/manage/billing-subscription-transfer.md#transfer-a-subscription-to-another-azure-ad-tenant-account)
@@ -156,4 +156,4 @@ You can put a self-service sign-up product like Microsoft Power BI or Azure Righ
## Next steps
-[Azure Active Directory documentation](../index.yml)
\ No newline at end of file
+[Azure Active Directory documentation](../index.yml)
diff --git a/articles/active-directory/enterprise-users/domains-verify-custom-subdomain.md b/articles/active-directory/enterprise-users/domains-verify-custom-subdomain.md
index 854cf047b679d..5565e144df4b2 100644
--- a/articles/active-directory/enterprise-users/domains-verify-custom-subdomain.md
+++ b/articles/active-directory/enterprise-users/domains-verify-custom-subdomain.md
@@ -64,7 +64,7 @@ Because subdomains inherit the authentication type of the root domain by default
Use the following command to promote the subdomain:
```http
-POST https://graph.microsoft.com/v1.0/domains/foo.contoso.com/promote
+POST https://graph.windows.net/{tenant-id}/domains/foo.contoso.com/promote
```
### Promote command error conditions
@@ -114,4 +114,4 @@ Invoking API with a federated verified subdomain with user references | POST | 4
- [Add custom domain names](../fundamentals/add-custom-domain.md?context=azure%2factive-directory%2fusers-groups-roles%2fcontext%2fugr-context)
- [Manage domain names](domains-manage.md)
-- [ForceDelete a custom domain name with Microsoft Graph API](/graph/api/domain-forcedelete)
\ No newline at end of file
+- [ForceDelete a custom domain name with Microsoft Graph API](/graph/api/domain-forcedelete)
diff --git a/articles/active-directory/enterprise-users/groups-dynamic-membership.md b/articles/active-directory/enterprise-users/groups-dynamic-membership.md
index 31a0f4fae8192..b479f6aed1257 100644
--- a/articles/active-directory/enterprise-users/groups-dynamic-membership.md
+++ b/articles/active-directory/enterprise-users/groups-dynamic-membership.md
@@ -9,7 +9,7 @@ ms.service: active-directory
ms.subservice: enterprise-users
ms.workload: identity
ms.topic: overview
-ms.date: 09/24/2021
+ms.date: 06/03/2022
ms.author: curtand
ms.reviewer: krbain
ms.custom: it-pro
@@ -18,12 +18,12 @@ ms.collection: M365-identity-device-management
# Dynamic membership rules for groups in Azure Active Directory
-In Azure Active Directory (Azure AD), you can create complex attribute-based rules to enable dynamic memberships for groups. Dynamic group membership reduces the administrative overhead of adding and removing users. This article details the properties and syntax to create dynamic membership rules for users or devices. You can set up a rule for dynamic membership on security groups or Microsoft 365 groups.
+In Azure Active Directory (Azure AD), you can create attribute-based rules to enable dynamic membership for a group. Dynamic group membership adds and removes group members automatically using membership rules based on member attributes. This article details the properties and syntax to create dynamic membership rules for users or devices. You can set up a rule for dynamic membership on security groups or Microsoft 365 groups.
When any attributes of a user or device change, the system evaluates all dynamic group rules in a directory to see if the change would trigger any group adds or removes. If a user or device satisfies a rule on a group, they are added as a member of that group. If they no longer satisfy the rule, they are removed. You can't manually add or remove a member of a dynamic group.
- You can create a dynamic group for devices or for users, but you can't create a rule that contains both users and devices.
-- You can't create a device group based on the device owners' attributes. Device membership rules can only reference device attributes.
+- You can't create a device group based on the user attributes of the device owner. Device membership rules can reference only device attributes.
> [!NOTE]
> This feature requires an Azure AD Premium P1 license or Intune for Education for each unique user that is a member of one or more dynamic groups. You don't have to assign licenses to users for them to be members of dynamic groups, but you must have the minimum number of licenses in the Azure AD organization to cover all such users. For example, if you had a total of 1,000 unique users in all dynamic groups in your organization, you would need at least 1,000 licenses for Azure AD Premium P1 to meet the license requirement.
@@ -81,10 +81,10 @@ The following are the user properties that you can use to create a single expres
### Properties of type boolean
-| Properties | Allowed values | Usage |
-| --- | --- | --- |
-| accountEnabled |true false |user.accountEnabled -eq true |
-| dirSyncEnabled |true false |user.dirSyncEnabled -eq true |
+Properties | Allowed values | Usage
+--- | --- | ---
+accountEnabled |true false |user.accountEnabled -eq true
+dirSyncEnabled |true false |user.dirSyncEnabled -eq true
### Properties of type string
@@ -101,6 +101,7 @@ The following are the user properties that you can use to create a single expres
| jobTitle |Any string value or *null* |(user.jobTitle -eq "value") |
| mail |Any string value or *null* (SMTP address of the user) |(user.mail -eq "value") |
| mailNickName |Any string value (mail alias of the user) |(user.mailNickName -eq "value") |
+| memberOf | Any string value (valid group object ID) | (device.memberof -any (group.objectId -in ['value'])) |
| mobile |Any string value or *null* |(user.mobile -eq "value") |
| objectId |GUID of the user object |(user.objectId -eq "11111111-1111-1111-1111-111111111111") |
| onPremisesDistinguishedName (preview)| Any string value or *null* |(user.onPremisesDistinguishedName -eq "value") |
@@ -265,7 +266,7 @@ assignedPlans is a multi-value property that lists all service plans assigned to
user.assignedPlans -any (assignedPlan.servicePlanId -eq "efb87545-963c-4e0d-99df-69c6916d9eb0" -and assignedPlan.capabilityStatus -eq "Enabled")
```
-A rule such as this one can be used to group all users for whom a Microsoft 365 (or other Microsoft Online Service) capability is enabled. You could then apply with a set of policies to the group.
+A rule such as this one can be used to group all users for whom a Microsoft 365 or other Microsoft Online Service capability is enabled. You could then apply with a set of policies to the group.
#### Example 2
@@ -345,13 +346,13 @@ device.objectId -ne null
## Extension properties and custom extension properties
-Extension attributes and custom extension properties are supported as string properties in dynamic membership rules. [Extension attributes](/graph/api/resources/onpremisesextensionattributes) are synced from on-premises Window Server AD and take the format of "ExtensionAttributeX", where X equals 1 - 15. Here's an example of a rule that uses an extension attribute as a property:
+Extension attributes and custom extension properties are supported as string properties in dynamic membership rules. [Extension attributes](/graph/api/resources/onpremisesextensionattributes) are synced from on-premises Window Server Active Directory and take the format of "ExtensionAttributeX", where X equals 1 - 15. Here's an example of a rule that uses an extension attribute as a property:
```
(user.extensionAttribute15 -eq "Marketing")
```
-[Custom extension properties](../hybrid/how-to-connect-sync-feature-directory-extensions.md) are synced from on-premises Windows Server AD or from a connected SaaS application and are of the format of `user.extension_[GUID]_[Attribute]`, where:
+[Custom extension properties](../hybrid/how-to-connect-sync-feature-directory-extensions.md) are synced from on-premises Windows Server Active Directory or from a connected SaaS application and are of the format of `user.extension_[GUID]_[Attribute]`, where:
- [GUID] is the unique identifier in Azure AD for the application that created the property in Azure AD
- [Attribute] is the name of the property as it was created
@@ -393,12 +394,13 @@ The following device attributes can be used.
enrollmentProfileName | Apple Device Enrollment Profile name, Android Enterprise Corporate-owned dedicated device Enrollment Profile name, or Windows Autopilot profile name | (device.enrollmentProfileName -eq "DEP iPhones")
isRooted | true false | (device.isRooted -eq true)
managementType | MDM (for mobile devices) | (device.managementType -eq "MDM")
+ memberOf | Any string value (valid group object ID) | (user.memberof -any (group.objectId -in ['value']))
deviceId | a valid Azure AD device ID | (device.deviceId -eq "d4fe7726-5966-431c-b3b8-cddc8fdb717d")
objectId | a valid Azure AD object ID | (device.objectId -eq "76ad43c9-32c5-45e8-a272-7b58b58f596d")
devicePhysicalIds | any string value used by Autopilot, such as all Autopilot devices, OrderID, or PurchaseOrderID | (device.devicePhysicalIDs -any _ -contains "[ZTDId]") (device.devicePhysicalIds -any _ -eq "[OrderID]:179887111881") (device.devicePhysicalIds -any _ -eq "[PurchaseOrderId]:76222342342")
systemLabels | any string matching the Intune device property for tagging Modern Workplace devices | (device.systemLabels -contains "M365Managed")
-> [!Note]
+> [!NOTE]
> For the deviceOwnership when creating Dynamic Groups for devices you need to set the value equal to "Company". On Intune the device ownership is represented instead as Corporate. Refer to [OwnerTypes](/intune/reports-ref-devices#ownertypes) for more details.
## Next steps
diff --git a/articles/active-directory/enterprise-users/groups-dynamic-rule-member-of.md b/articles/active-directory/enterprise-users/groups-dynamic-rule-member-of.md
new file mode 100644
index 0000000000000..7afd278316885
--- /dev/null
+++ b/articles/active-directory/enterprise-users/groups-dynamic-rule-member-of.md
@@ -0,0 +1,59 @@
+---
+title: Group membership for Azure AD dynamic groups with memberOf - Azure AD | Microsoft Docs
+description: How to create a dynamic membership group that can contain members of other groups in Azure Active Directory.
+services: active-directory
+documentationcenter: ''
+author: curtand
+manager: karenhoran
+ms.service: active-directory
+ms.subservice: enterprise-users
+ms.workload: identity
+ms.topic: overview
+ms.date: 06/02/2022
+ms.author: curtand
+ms.reviewer: krbain
+ms.custom: it-pro
+ms.collection: M365-identity-device-management
+---
+
+# Group membership in a dynamic group (preview) in Azure Active Directory
+
+This feature preview enables admins to create dynamic groups in Azure Active Directory (Azure AD) that populate by adding members of other groups using the memberOf attribute. Apps that couldn't read group-based membership previously in Azure AD can now read the entire membership of these new memberOf groups. Not only can these groups be used for apps, they can also be used for licensing assignment and role-based access control. The following diagram illustrates how you could create Dynamic-Group-A with members of Security-Group-X and Security-Group-Y. Members of the groups inside of Security-Group-X and Security-Group-Y don't become members of Dynamic-Group-A.
+
+:::image type="content" source="./media/groups-dynamic-rule-member-of/member-of-diagram.png" alt-text="Diagram showing how the memberOf attribute works.":::
+
+With this preview, admins can configure dynamic groups with the memberOf attribute in the Azure portal, Microsoft Graph, and PowerShell. Security groups, Microsoft 365 groups, groups that are synced from on-premises Active Directory can all be added as members of these dynamic groups, and can all be added to a single group. For example, the dynamic group could be a security group, but you can use Microsoft 365 groups, security groups, and groups that are synced from on-premises to define its membership.
+
+## Prerequisites
+
+Only administrators in the Global Administrator, Intune Administrator, or User Administrator role can use the memberOf attribute to create an Azure AD dynamic group. You must have an Azure AD Premium license for the Azure AD tenant.
+
+## Preview limitations
+
+- Each Azure AD tenant is limited to 500 dynamic groups using the memberOf attribute. memberOf groups do count towards the total dynamic group member quota of 5,000.
+- Each dynamic group can have up to 50 member groups.
+- When adding members of security groups to memberOf dynamic groups, only direct members of the security group become members of the dynamic group.
+- You can't use one memberOf dynamic group to define the membership of another memberOf dynamic groups. For example, Dynamic Group A, with members of group B and C in it, can't be a member of Dynamic Group D).
+- MemberOf can't be used with other rules. For example, a rule that states dynamic group A should contain members of group B and also should contain only users located in Redmond will fail.
+- Dynamic group rule builder and validate feature can't be used for memberOf at this time.
+- MemberOf can't be used with other operators. For example, you can't create a rule that states “Members Of group A can't be in Dynamic group B.”
+
+## Getting started
+
+This feature can be used in the Azure AD portal, Microsoft Graph, and in PowerShell. Because memberOf isn't yet supported in the rule builder, you must enter your rule in the rule editor.
+
+### Steps to create a memberOf dynamic group
+
+1. Sign in to the Azure portal with an account that has Global Administrator, Intune Administrator, or User Administrator role permissions.
+1. Select **Azure Active Directory** > **Groups**, and then select **New group**.
+1. Fill in group details. The group type can be Security or Microsoft 365, and the membership type can be set to **Dynamic User** or **Dynamic Device**.
+1. Select **Add dynamic query**.
+1. MemberOf isn't yet supported in the rule builder. Select **Edit** to write the rule in the **Rule syntax** box.
+ 1. Example user rule: `user.memberof -any (group.objectId -in ['groupId', 'groupId'])`
+ 1. Example device rule: `device.memberof -any (group.objectId -in ['groupId', 'groupId'])`
+1. Select **OK**.
+1. Select **Create group**.
+
+## Next steps
+
+To report an issue, contact us in the [Teams channel](https://teams.microsoft.com/l/channel/19%3a39Q7HFuexXXE3Vh90woJRNQQBbZl1YyesJHIEquuQCw1%40thread.tacv2/General?groupId=bfd3bfb8-e0db-4e9e-9008-5d7ba8c996b0&tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47).
\ No newline at end of file
diff --git a/articles/active-directory/enterprise-users/groups-dynamic-rule-more-efficient.md b/articles/active-directory/enterprise-users/groups-dynamic-rule-more-efficient.md
index 775666d869c14..be7d28d3d7df6 100644
--- a/articles/active-directory/enterprise-users/groups-dynamic-rule-more-efficient.md
+++ b/articles/active-directory/enterprise-users/groups-dynamic-rule-more-efficient.md
@@ -31,8 +31,8 @@ Minimize the usage of the 'match' operator in rules as much as possible. Instead
It's better to use rules like:
-- `user.city -contains "ago,"`
-- `user.city -startswith "Lag,"`
+- `user.city -contains "ago"`
+- `user.city -startswith "Lag"`
Or, best of all:
diff --git a/articles/active-directory/enterprise-users/groups-settings-cmdlets.md b/articles/active-directory/enterprise-users/groups-settings-cmdlets.md
index 3697e01459222..74d4ed21fe1d0 100644
--- a/articles/active-directory/enterprise-users/groups-settings-cmdlets.md
+++ b/articles/active-directory/enterprise-users/groups-settings-cmdlets.md
@@ -160,7 +160,7 @@ Here are the settings defined in the Group.Unified SettingsTemplate. Unless othe
|
GuestUsageGuidelinesUrl
Type: String
Default: "" | The URL of a link to the guest usage guidelines. |
|
AllowToAddGuests
Type: Boolean
Default: True | A boolean indicating whether or not is allowed to add guests to this directory. This setting may be overridden and become read-only if *EnableMIPLabels* is set to *True* and a guest policy is associated with the sensitivity label assigned to the group. If the AllowToAddGuests setting is set to False at the organization level, any AllowToAddGuests setting at the group level is ignored. If you want to enable guest access for only a few groups, you must set AllowToAddGuests to be true at the organization level, and then selectively disable it for specific groups. |
|
ClassificationList
Type: String
Default: "" | A comma-delimited list of valid classification values that can be applied to Microsoft 365 groups. This setting does not apply when EnableMIPLabels == True.|
-|
EnableMIPLabels
Type: Boolean
Default: "False" |The flag indicating whether sensitivity labels published in Microsoft 365 Compliance Center can be applied to Microsoft 365 groups. For more information, see [Assign Sensitivity Labels for Microsoft 365 groups](groups-assign-sensitivity-labels.md). |
+|
EnableMIPLabels
Type: Boolean
Default: "False" |The flag indicating whether sensitivity labels published in Microsoft Purview compliance portal can be applied to Microsoft 365 groups. For more information, see [Assign Sensitivity Labels for Microsoft 365 groups](groups-assign-sensitivity-labels.md). |
## Example: Configure Guest policy for groups at the directory level
1. Get all the setting templates:
diff --git a/articles/active-directory/enterprise-users/licensing-groups-assign.md b/articles/active-directory/enterprise-users/licensing-groups-assign.md
index 856aeb69c227f..ca79e54bbd04e 100644
--- a/articles/active-directory/enterprise-users/licensing-groups-assign.md
+++ b/articles/active-directory/enterprise-users/licensing-groups-assign.md
@@ -11,7 +11,7 @@ ms.service: active-directory
ms.subservice: enterprise-users
ms.topic: how-to
ms.workload: identity
-ms.date: 12/02/2020
+ms.date: 05/26/2022
ms.author: curtand
ms.reviewer: sumitp
ms.custom: it-pro
@@ -27,7 +27,7 @@ In this example, the Azure AD organization contains a security group called **HR
> [!NOTE]
> Some Microsoft services are not available in all locations. Before a license can be assigned to a user, the administrator has to specify the Usage location property on the user.
>
-> For group license assignment, any users without a usage location specified inherit the location of the directory. If you have users in multiple locations, we recommend that you always set usage location as part of your user creation flow in Azure AD (e.g. via AAD Connect configuration) - that ensures the result of license assignment is always correct and users do not receive services in locations that are not allowed.
+> For group license assignment, any users without a usage location specified inherit the location of the directory. If you have users in multiple locations, we recommend that you always set usage location as part of your user creation flow in Azure AD. For example, configure Azure AD Connect configuration to set usage location. This recommendation makes sure the result of license assignment is always correct and users do not receive services in locations that are not allowed.
## Step 1: Assign the required licenses
@@ -43,6 +43,9 @@ In this example, the Azure AD organization contains a security group called **HR
1. Select a user or group, and then use the **Select** button at the bottom of the page to confirm your selection.
+ >[!NOTE]
+ >When assigning licenses to a group with service plans that have dependencies on other service plans, they must both be assigned together in the same group, otherwise the service plan with the dependency will be disabled.
+
1. On the **Assign license** page, click **Assignment options**, which displays all service plans included in the two products that we selected previously. Find **Yammer Enterprise** and turn it **Off** to disable that service from the product license. Confirm by clicking **OK** at the bottom of **License options**.
![select service plans for licenses](./media/licensing-groups-assign/assignment-options.png)
diff --git a/articles/active-directory/enterprise-users/media/groups-dynamic-rule-member-of/member-of-diagram.png b/articles/active-directory/enterprise-users/media/groups-dynamic-rule-member-of/member-of-diagram.png
new file mode 100644
index 0000000000000..6575c2e9a77bf
Binary files /dev/null and b/articles/active-directory/enterprise-users/media/groups-dynamic-rule-member-of/member-of-diagram.png differ
diff --git a/articles/active-directory/external-identities/b2b-direct-connect-overview.md b/articles/active-directory/external-identities/b2b-direct-connect-overview.md
index d7afbed466087..4413fbdd8a81e 100644
--- a/articles/active-directory/external-identities/b2b-direct-connect-overview.md
+++ b/articles/active-directory/external-identities/b2b-direct-connect-overview.md
@@ -24,7 +24,7 @@ B2B direct connect requires a mutual trust relationship between two Azure AD org
Currently, B2B direct connect capabilities work with Teams shared channels. When B2B direct connect is established between two organizations, users in one organization can create a shared channel in Teams and invite an external B2B direct connect user to it. Then from within Teams, the B2B direct connect user can seamlessly access the shared channel in their home tenant Teams instance, without having to manually sign in to the organization hosting the shared channel.
-For licensing and pricing information related to B2B direct connect users, refer to [Azure Active Directory pricing](https://azure.microsoft.com/pricing/details/active-directory/).
+For licensing and pricing information related to B2B direct connect users, refer to [Azure Active Directory External Identities pricing](https://azure.microsoft.com/pricing/details/active-directory/external-identities/).
## Managing cross-tenant access for B2B direct connect
diff --git a/articles/active-directory/external-identities/b2b-quickstart-invite-powershell.md b/articles/active-directory/external-identities/b2b-quickstart-invite-powershell.md
index f0c8bb72db7c4..043517b173191 100644
--- a/articles/active-directory/external-identities/b2b-quickstart-invite-powershell.md
+++ b/articles/active-directory/external-identities/b2b-quickstart-invite-powershell.md
@@ -23,7 +23,7 @@ If you don’t have an Azure subscription, create a [free account](https://azure
## Prerequisites
### PowerShell Module
-Install the [Microsoft Graph Identity Sign-ins module](/powershell/module/microsoft.graph.identity.signins/?view=graph-powershell-beta) (Microsoft.Graph.Identity.SignIns) and the [Microsoft Graph Users module](/powershell/module/microsoft.graph.users/?view=graph-powershell-beta) (Microsoft.Graph.Users).
+Install the [Microsoft Graph Identity Sign-ins module](/powershell/module/microsoft.graph.identity.signins/?view=graph-powershell-beta&preserve-view=true) (Microsoft.Graph.Identity.SignIns) and the [Microsoft Graph Users module](/powershell/module/microsoft.graph.users/?view=graph-powershell-beta&preserve-view=true) (Microsoft.Graph.Users).
### Get a test email account
diff --git a/articles/active-directory/external-identities/cross-cloud-settings.md b/articles/active-directory/external-identities/cross-cloud-settings.md
index 907b1bd5c59c0..66b5a7623d549 100644
--- a/articles/active-directory/external-identities/cross-cloud-settings.md
+++ b/articles/active-directory/external-identities/cross-cloud-settings.md
@@ -44,9 +44,16 @@ After each organization has completed these steps, Azure AD B2B collaboration be
In your Microsoft cloud settings, enable the Microsoft Azure cloud you want to collaborate with.
+> [!NOTE]
+> The admin experience is currently still deploying to national clouds. To access the admin experience in Microsoft Azure Government or Microsoft Azure China, you can use these links:
+>
+>Microsoft Azure Government - https://aka.ms/cloudsettingsusgov
+>
+>Microsoft Azure China - https://aka.ms/cloudsettingschina
+
1. Sign in to the [Azure portal](https://portal.azure.com) using a Global administrator or Security administrator account. Then open the **Azure Active Directory** service.
1. Select **External Identities**, and then select **Cross-tenant access settings (Preview)**.
-1. Select **Cross cloud settings**.
+1. Select **Microsoft cloud settings (Preview)**.
1. Select the checkboxes next to the external Microsoft Azure clouds you want to enable.
![Screenshot showing Microsoft cloud settings.](media/cross-cloud-settings/cross-cloud-settings.png)
diff --git a/articles/active-directory/external-identities/cross-tenant-access-overview.md b/articles/active-directory/external-identities/cross-tenant-access-overview.md
index 79006efa5192e..309af5bfd30a6 100644
--- a/articles/active-directory/external-identities/cross-tenant-access-overview.md
+++ b/articles/active-directory/external-identities/cross-tenant-access-overview.md
@@ -71,6 +71,13 @@ To set up B2B collaboration, both organizations configure their Microsoft cloud
For configuration steps, see [Configure Microsoft cloud settings for B2B collaboration (Preview)](cross-cloud-settings.md).
+> [!NOTE]
+> The admin experience is currently still deploying to national clouds. To access the admin experience in Microsoft Azure Government or Microsoft Azure China, you can use these links:
+>
+>Microsoft Azure Government - https://aka.ms/cloudsettingsusgov
+>
+>Microsoft Azure China - https://aka.ms/cloudsettingschina
+
### Default settings in cross-cloud scenarios
To collaborate with a partner tenant in a different Microsoft Azure cloud, both organizations need to mutually enable B2B collaboration with each other. The first step is to enable the partner's cloud in your cross-tenant settings. When you first enable another cloud, B2B collaboration is blocked for all tenants in that cloud. You need to add the tenant you want to collaborate with to your Organizational settings, and at that point your default settings go into effect for that tenant only. You can allow the default settings to remain in effect, or you can modify the organizational settings for the tenant.
diff --git a/articles/active-directory/external-identities/leave-the-organization.md b/articles/active-directory/external-identities/leave-the-organization.md
index 6bde3a4c74768..e6aefdbc3733b 100644
--- a/articles/active-directory/external-identities/leave-the-organization.md
+++ b/articles/active-directory/external-identities/leave-the-organization.md
@@ -15,6 +15,7 @@ manager: celestedg
ms.reviewer: mal
ms.collection: M365-identity-device-management
+adobe-target: true
---
# Leave an organization as a B2B collaboration user
diff --git a/articles/active-directory/external-identities/whats-new-docs.md b/articles/active-directory/external-identities/whats-new-docs.md
index f4732de075cbd..4dd155126e238 100644
--- a/articles/active-directory/external-identities/whats-new-docs.md
+++ b/articles/active-directory/external-identities/whats-new-docs.md
@@ -1,7 +1,7 @@
---
title: "What's new in Azure Active Directory External Identities"
description: "New and updated documentation for the Azure Active Directory External Identities."
-ms.date: 05/02/2022
+ms.date: 06/01/2022
ms.service: active-directory
ms.subservice: B2B
ms.topic: reference
@@ -15,6 +15,32 @@ manager: CelesteDG
Welcome to what's new in Azure Active Directory External Identities documentation. This article lists new docs that have been added and those that have had significant updates in the last three months. To learn what's new with the External Identities service, see [What's new in Azure Active Directory](../fundamentals/whats-new.md).
+
+## May 2022
+
+### New articles
+
+- [Configure Microsoft cloud settings for B2B collaboration (Preview)](cross-cloud-settings.md)
+
+### Updated articles
+
+- [Configure Microsoft cloud settings for B2B collaboration (Preview)](cross-cloud-settings.md)
+- [Overview: Cross-tenant access with Azure AD External Identities (Preview)](cross-tenant-access-overview.md)
+- [Example: Configure SAML/WS-Fed based identity provider federation with AD FS](direct-federation-adfs.md)
+- [Federation with SAML/WS-Fed identity providers for guest users](direct-federation.md)
+- [External Identities documentation](index.yml)
+- [Quickstart: Add a guest user and send an invitation](b2b-quickstart-add-guest-users-portal.md)
+- [B2B collaboration overview](what-is-b2b.md)
+- [Leave an organization as a B2B collaboration user](leave-the-organization.md)
+- [Configure external collaboration settings](external-collaboration-settings-configure.md)
+- [B2B direct connect overview (Preview)](b2b-direct-connect-overview.md)
+- [Azure Active Directory External Identities: What's new](whats-new-docs.md)
+- [Configure cross-tenant access settings for B2B collaboration (Preview)](cross-tenant-access-settings-b2b-collaboration.md)
+- [Configure cross-tenant access settings for B2B direct connect (Preview)](cross-tenant-access-settings-b2b-direct-connect.md)
+- [Azure AD B2B in government and national clouds](b2b-government-national-clouds.md)
+- [External Identities in Azure Active Directory](external-identities-overview.md)
+- [Troubleshooting Azure Active Directory B2B collaboration](troubleshoot.md)
+
## April 2022
### Updated articles
@@ -58,22 +84,3 @@ Welcome to what's new in Azure Active Directory External Identities documentatio
- [Leave an organization as a B2B collaboration user](leave-the-organization.md)
- [Configure external collaboration settings](external-collaboration-settings-configure.md)
- [Reset redemption status for a guest user (Preview)](reset-redemption-status.md)
-
-## February 2022
-
-### Updated articles
-
-- [Add Google as an identity provider for B2B guest users](google-federation.md)
-- [External Identities in Azure Active Directory](external-identities-overview.md)
-- [Overview: Cross-tenant access with Azure AD External Identities (Preview)](cross-tenant-access-overview.md)
-- [B2B collaboration overview](what-is-b2b.md)
-- [Federation with SAML/WS-Fed identity providers for guest users (preview)](direct-federation.md)
-- [Quickstart: Add a guest user with PowerShell](b2b-quickstart-invite-powershell.md)
-- [Tutorial: Bulk invite Azure AD B2B collaboration users](tutorial-bulk-invite.md)
-- [Azure Active Directory B2B best practices](b2b-fundamentals.md)
-- [Azure Active Directory B2B collaboration FAQs](faq.yml)
-- [Email one-time passcode authentication](one-time-passcode.md)
-- [Azure Active Directory B2B collaboration invitation redemption](redemption-experience.md)
-- [Troubleshooting Azure Active Directory B2B collaboration](troubleshoot.md)
-- [Properties of an Azure Active Directory B2B collaboration user](user-properties.md)
-- [Authentication and Conditional Access for External Identities](authentication-conditional-access.md)
diff --git a/articles/active-directory/fundamentals/5-secure-access-b2b.md b/articles/active-directory/fundamentals/5-secure-access-b2b.md
index dd24d16b2494c..c7a9bdc740dc3 100644
--- a/articles/active-directory/fundamentals/5-secure-access-b2b.md
+++ b/articles/active-directory/fundamentals/5-secure-access-b2b.md
@@ -76,7 +76,7 @@ You can use an allowlist or blocklist to [restrict invitations to B2B users](../
> Limiting to a predefined domain may inadvertently prevent authorized collaboration with organizations, which have other domains for their users. For example, if doing business with an organization Contoso, the initial point of contact with Contoso might be one of their US-based employees who has an email with a ".com" domain. However, if you only allow the ".com" domain you may inadvertently omit their Canadian employees who have ".ca" domain.
> [!IMPORTANT]
-> These lists do not apply to users who are already in your directory. By default, they also do not apply to OneDrive for Business and SharePoint allow/blocklists which are separate unless you enable the [SharePoint/OneDrive B2B integration](https://docs.microsoft.com/sharepoint/sharepoint-azureb2b-integration).
+> These lists do not apply to users who are already in your directory. By default, they also do not apply to OneDrive for Business and SharePoint allow/blocklists which are separate unless you enable the [SharePoint/OneDrive B2B integration](/sharepoint/sharepoint-azureb2b-integration).
Some organizations use a list of known ‘bad actor’ domains provided by their managed security provider for their blocklist. For example, if the organization is legitimately doing business with Contoso and using a .com domain, there may be an unrelated organization that has been using the Contoso .org domain and attempting a phishing attack to impersonate Contoso employees.
@@ -254,4 +254,4 @@ See the following articles on securing external access to resources. We recommen
8. [Secure access with Sensitivity labels](8-secure-access-sensitivity-labels.md)
-9. [Secure access to Microsoft Teams, OneDrive, and SharePoint](9-secure-access-teams-sharepoint.md)
+9. [Secure access to Microsoft Teams, OneDrive, and SharePoint](9-secure-access-teams-sharepoint.md)
\ No newline at end of file
diff --git a/articles/active-directory/fundamentals/7-secure-access-conditional-access.md b/articles/active-directory/fundamentals/7-secure-access-conditional-access.md
index de48d28cad045..ff6a7bc159df2 100644
--- a/articles/active-directory/fundamentals/7-secure-access-conditional-access.md
+++ b/articles/active-directory/fundamentals/7-secure-access-conditional-access.md
@@ -89,6 +89,10 @@ There may be times you want to block external users except a specific group. For
After confirming your settings using [report-only mode](../conditional-access/howto-conditional-access-insights-reporting.md), an administrator can move the **Enable policy** toggle from **Report-only** to **On**.
+### External partner access
+
+Conditional Access policies that target external users may interfere with service provider access, for example granular delegated admin privileges [Introduction to granular delegated admin privileges (GDAP)](/partner-center/gdap-introduction).
+
## Implement Conditional Access
Many common Conditional Access policies are documented. See the article [Common Conditional Access policies](../conditional-access/concept-conditional-access-policy-common.md) for other common policies you may want to adapt for external users.
diff --git a/articles/active-directory/fundamentals/8-secure-access-sensitivity-labels.md b/articles/active-directory/fundamentals/8-secure-access-sensitivity-labels.md
index 804f7d1bcaa6f..afbafdfd65dad 100644
--- a/articles/active-directory/fundamentals/8-secure-access-sensitivity-labels.md
+++ b/articles/active-directory/fundamentals/8-secure-access-sensitivity-labels.md
@@ -32,7 +32,7 @@ Sensitivity labels on email and other content travel with the content. Sensitivi
## Permissions necessary to create and manage sensitivity levels
-Members of your compliance team who will create sensitivity labels need permissions to the Microsoft 365 Defender portal, Microsoft 365 Compliance Center, or Office 365 Security & Compliance Center.
+Members of your compliance team who will create sensitivity labels need permissions to the Microsoft 365 Defender portal, Microsoft Purview compliance portal, or Office 365 Security & Compliance Center.
By default, global administrators for your tenant have access to these admin centers and can give compliance officers and other people access, without giving them all the permissions of a tenant admin. For this delegated limited admin access, add users to the Compliance Data Administrator, Compliance Administrator, or Security Administrator role group.
diff --git a/articles/active-directory/fundamentals/active-directory-access-create-new-tenant.md b/articles/active-directory/fundamentals/active-directory-access-create-new-tenant.md
index 9b40f921e87b7..16a9c614b5e46 100644
--- a/articles/active-directory/fundamentals/active-directory-access-create-new-tenant.md
+++ b/articles/active-directory/fundamentals/active-directory-access-create-new-tenant.md
@@ -41,10 +41,10 @@ After you sign in to the Azure portal, you can create a new tenant for your orga
1. Select **Next: Configuration** to move on to the Configuration tab.
+1. On the Configuration tab, enter the following information:
+
![Azure Active Directory - Create a tenant page - configuration tab ](media/active-directory-access-create-new-tenant/azure-ad-create-new-tenant.png)
-1. On the Configuration tab, enter the following information:
-
- Type _Contoso Organization_ into the **Organization name** box.
- Type _Contosoorg_ into the **Initial domain name** box.
diff --git a/articles/active-directory/fundamentals/active-directory-groups-membership-azure-portal.md b/articles/active-directory/fundamentals/active-directory-groups-membership-azure-portal.md
index adbb74d9644e5..13657022a17fb 100644
--- a/articles/active-directory/fundamentals/active-directory-groups-membership-azure-portal.md
+++ b/articles/active-directory/fundamentals/active-directory-groups-membership-azure-portal.md
@@ -26,7 +26,7 @@ This article helps you to add and remove a group from another group using Azure
You can add an existing Security group to another existing Security group (also known as nested groups), creating a member group (subgroup) and a parent group. The member group inherits the attributes and properties of the parent group, saving you configuration time.
>[!Important]
->We don't currently support:
Adding groups to a group synced with on-premises Active Directory.
Adding Security groups to Microsoft 365 groups.
Adding Microsoft 365 groups to Security groups or other Microsoft 365 groups.
Assigning apps to nested groups.
Applying licenses to nested groups.
Adding distribution groups in nesting scenarios.
Adding security groups as members of mail-enabled security groups
+>We don't currently support:
Adding groups to a group synced with on-premises Active Directory.
Adding Security groups to Microsoft 365 groups.
Adding Microsoft 365 groups to Security groups or other Microsoft 365 groups.
Assigning apps to nested groups.
Applying licenses to nested groups.
Adding distribution groups in nesting scenarios.
Adding security groups as members of mail-enabled security groups
Adding groups as members of a role-assignable group.
### To add a group as a member of another group
diff --git a/articles/active-directory/fundamentals/add-custom-domain.md b/articles/active-directory/fundamentals/add-custom-domain.md
index 8cf9ad9925ad6..bd12103153c58 100644
--- a/articles/active-directory/fundamentals/add-custom-domain.md
+++ b/articles/active-directory/fundamentals/add-custom-domain.md
@@ -56,6 +56,8 @@ After you create your directory, you can add your custom domain name.
>[!IMPORTANT]
>You must include *.com*, *.net*, or any other top-level extension for this to work properly.
+ >
+ >When adding a custom domain, the Password Policy values will be inherited from the initial domain.
The unverified domain is added. The **contoso.com** page appears showing your DNS information. Save this information. You need it later to create a TXT record to configure DNS.
@@ -114,4 +116,4 @@ If Azure AD can't verify a custom domain name, try the following suggestions:
- Manage your domain name information in Azure AD. For more information, see [Managing custom domain names](../enterprise-users/domains-manage.md).
-- If you have on-premises versions of Windows Server that you want to use alongside Azure Active Directory, see [Integrate your on-premises directories with Azure Active Directory](../hybrid/whatis-hybrid-identity.md).
\ No newline at end of file
+- If you have on-premises versions of Windows Server that you want to use alongside Azure Active Directory, see [Integrate your on-premises directories with Azure Active Directory](../hybrid/whatis-hybrid-identity.md).
diff --git a/articles/active-directory/fundamentals/concept-fundamentals-block-legacy-authentication.md b/articles/active-directory/fundamentals/concept-fundamentals-block-legacy-authentication.md
index f2e93526824f5..e338cd6a135c9 100644
--- a/articles/active-directory/fundamentals/concept-fundamentals-block-legacy-authentication.md
+++ b/articles/active-directory/fundamentals/concept-fundamentals-block-legacy-authentication.md
@@ -29,7 +29,7 @@ Today, the majority of all compromising sign-in attempts come from legacy authen
Before you can block legacy authentication in your directory, you need to first understand if your users have apps that use legacy authentication and how it affects your overall directory. Azure AD sign-in logs can be used to understand if you're using legacy authentication.
-1. Navigate to the **Azure portal** > **Azure Active Directory** > **Sign-ins**.
+1. Navigate to the **Azure portal** > **Azure Active Directory** > **Sign-in logs**.
1. Add the **Client App** column if it is not shown by clicking on **Columns** > **Client App**.
1. Filter by **Client App** > check all the **Legacy Authentication Clients** options presented.
1. Filter by **Status** > **Success**.
diff --git a/articles/active-directory/fundamentals/protect-m365-from-on-premises-attacks.md b/articles/active-directory/fundamentals/protect-m365-from-on-premises-attacks.md
index 212c09fc89ac7..1a73bb9c00ad4 100644
--- a/articles/active-directory/fundamentals/protect-m365-from-on-premises-attacks.md
+++ b/articles/active-directory/fundamentals/protect-m365-from-on-premises-attacks.md
@@ -1,138 +1,139 @@
---
title: Protecting Microsoft 365 from on-premises attacks
-description: Guidance about how to ensure an on-premises attack doesn't affect Microsoft 365.
+description: Learn how to configure your systems to help protect your Microsoft 365 cloud environment from on-premises compromise.
services: active-directory
author: BarbaraSelden
manager: martinco
ms.service: active-directory
ms.workload: identity
ms.subservice: fundamentals
-ms.topic: conceptual
-ms.date: 12/22/2020
+ms.topic: how-to
+ms.date: 04/29/2022
ms.author: baselden
ms.reviewer: ajburnle
-ms.custom: "it-pro, seodec18"
+ms.custom:
+ - it-pro
+ - seodec18
+ - kr2b-contr-experiment
ms.collection: M365-identity-device-management
---
# Protecting Microsoft 365 from on-premises attacks
-Many customers connect their private corporate networks to Microsoft 365 to benefit their users, devices, and applications. However, these private networks can be compromised in many well-documented ways. Because Microsoft 365 acts as a sort of nervous system for many organizations, it's critical to protect it from compromised on-premises infrastructure.
+Many customers connect their private corporate networks to Microsoft 365 to benefit their users, devices, and applications. However, these private networks can be compromised in many well-documented ways. Microsoft 365 acts as a sort of nervous system for many organizations. It's critical to protect it from compromised on-premises infrastructure.
-This article shows you how to configure your systems to protect your Microsoft 365 cloud environment from on-premises compromise. We focus primarily on:
+This article shows you how to configure your systems to help protect your Microsoft 365 cloud environment from on-premises compromise, including the following elements:
-- Azure Active Directory (Azure AD) tenant configuration settings.
-- How Azure AD tenants can be safely connected to on-premises systems.
-- The tradeoffs required to operate your systems in ways that protect your cloud systems from on-premises compromise.
+- Azure Active Directory (Azure AD) tenant configuration settings
+- How Azure AD tenants can be safely connected to on-premises systems
+- The tradeoffs required to operate your systems in ways that protect your cloud systems from on-premises compromise
-We strongly recommend you implement this guidance to secure your Microsoft 365 cloud environment.
+Microsoft strongly recommends that you implement this guidance.
-> [!NOTE]
-> This article was initially published as a blog post. It has been moved to its current location for longevity and maintenance.
->
-> To create an offline version of this article, use your browser's print-to-PDF functionality. Check back here frequently for updates.
+## Threat sources in on-premises environments
-## Primary threat vectors from compromised on-premises environments
+Your Microsoft 365 cloud environment benefits from an extensive monitoring and security infrastructure. Microsoft 365 uses machine learning and human intelligence to look across worldwide traffic. It can rapidly detect attacks and allow you to reconfigure nearly in real time.
-Your Microsoft 365 cloud environment benefits from an extensive monitoring and security infrastructure. Using machine learning and human intelligence, Microsoft 365 looks across worldwide traffic. It can rapidly detect attacks and allow you to reconfigure nearly in real time.
-
-In hybrid deployments that connect on-premises infrastructure to Microsoft 365, many organizations delegate trust to on-premises components for critical authentication and directory object state management decisions. Unfortunately, if the on-premises environment is compromised, these trust relationships become an attacker's opportunities to compromise your Microsoft 365 environment.
+Hybrid deployments can connect on-premises infrastructure to Microsoft 365. In such deployments, many organizations delegate trust to on-premises components for critical authentication and directory object state management decisions. If the on-premises environment is compromised, these trust relationships become an attacker's opportunities to compromise your Microsoft 365 environment.
The two primary threat vectors are *federation trust relationships* and *account synchronization.* Both vectors can grant an attacker administrative access to your cloud.
-* **Federated trust relationships**, such as SAML authentication, are used to authenticate to Microsoft 365 through your on-premises identity infrastructure. If a SAML token-signing certificate is compromised, federation allows anyone who has that certificate to impersonate any user in your cloud. *We recommend you disable federation trust relationships for authentication to Microsoft 365 when possible.*
-
-* **Account synchronization** can be used to modify privileged users (including their credentials) or groups that have administrative privileges in Microsoft 365. *We recommend you ensure that synchronized objects hold no privileges beyond a user in Microsoft 365,* either directly or through inclusion in trusted roles or groups. Ensure these objects have no direct or nested assignment in trusted cloud roles or groups.
+- **Federated trust relationships**, such as Security Assertions Markup Language (SAML) authentication, are used to authenticate to Microsoft 365 through your on-premises identity infrastructure. If a SAML token-signing certificate is compromised, federation allows anyone who has that certificate to impersonate any user in your cloud.
-## Protecting Microsoft 365 from on-premises compromise
+ We recommend that you disable federation trust relationships for authentication to Microsoft 365 when possible.
-To address the threat vectors outlined earlier, we recommend you adhere to the principles illustrated in the following diagram:
+- **Account synchronization** can be used to modify privileged users, including their credentials, or groups that have administrative privileges in Microsoft 365.
-![Reference architecture for protecting Microsoft 365.](media/protect-m365/protect-m365-principles.png)
+ We recommend that you ensure that synchronized objects hold no privileges beyond a user in Microsoft 365. You can control privileges either directly or through inclusion in trusted roles or groups. Ensure these objects have no direct or nested assignment in trusted cloud roles or groups.
-1. **Fully isolate your Microsoft 365 administrator accounts.** They should be:
+## Protecting Microsoft 365 from on-premises compromise
- * Mastered in Azure AD.
+To address the threats described above, we recommend you adhere to the principles illustrated in the following diagram:
- * Authenticated by using multifactor authentication.
+![Reference architecture for protecting Microsoft 365, as described in the following list.](media/protect-m365/protect-m365-principles.png)
- * Secured by Azure AD Conditional Access.
+1. **Fully isolate your Microsoft 365 administrator accounts.** They should be:
- * Accessed only by using Azure-managed workstations.
+ - Mastered in Azure AD.
+ - Authenticated by using multifactor authentication.
+ - Secured by Azure AD Conditional Access.
+ - Accessed only by using Azure-managed workstations.
- These administrator accounts are restricted-use accounts. *No on-premises accounts should have administrative privileges in Microsoft 365.*
+ These administrator accounts are restricted-use accounts. No on-premises accounts should have administrative privileges in Microsoft 365.
- For more information, see the [overview of Microsoft 365 administrator roles](/microsoft-365/admin/add-users/about-admin-roles). Also see [Roles for Microsoft 365 in Azure AD](../roles/m365-workload-docs.md).
+ For more information, see [About admin roles](/microsoft-365/admin/add-users/about-admin-roles). Also, see [Roles for Microsoft 365 in Azure AD](../roles/m365-workload-docs.md).
1. **Manage devices from Microsoft 365.** Use Azure AD join and cloud-based mobile device management (MDM) to eliminate dependencies on your on-premises device management infrastructure. These dependencies can compromise device and security controls.
1. **Ensure no on-premises account has elevated privileges to Microsoft 365.** Some accounts access on-premises applications that require NTLM, LDAP, or Kerberos authentication. These accounts must be in the organization's on-premises identity infrastructure. Ensure that these accounts, including service accounts, aren't included in privileged cloud roles or groups. Also ensure that changes to these accounts can't affect the integrity of your cloud environment. Privileged on-premises software must not be capable of affecting Microsoft 365 privileged accounts or roles.
-1. **Use Azure AD cloud authentication** to eliminate dependencies on your on-premises credentials. Always use strong authentication, such as Windows Hello, FIDO, Microsoft Authenticator, or Azure AD multifactor authentication.
+1. **Use Azure AD cloud authentication to eliminate dependencies on your on-premises credentials.** Always use strong authentication, such as Windows Hello, FIDO, Microsoft Authenticator, or Azure AD multifactor authentication.
## Specific security recommendations
-The following sections provide specific guidance about how to implement the principles described earlier.
+The following sections provide guidance about how to implement the principles described above.
### Isolate privileged identities
In Azure AD, users who have privileged roles, such as administrators, are the root of trust to build and manage the rest of the environment. Implement the following practices to minimize the effects of a compromise.
-* Use cloud-only accounts for Azure AD and Microsoft 365 privileged roles.
+- Use cloud-only accounts for Azure AD and Microsoft 365 privileged roles.
-* Deploy [privileged access devices](/security/compass/privileged-access-devices#device-roles-and-profiles) for privileged access to manage Microsoft 365 and Azure AD.
+- Deploy privileged access devices for privileged access to manage Microsoft 365 and Azure AD. See [Device roles and profiles](/security/compass/privileged-access-devices#device-roles-and-profiles).
-* Deploy [Azure AD Privileged Identity Management](../privileged-identity-management/pim-configure.md) (PIM) for just-in-time (JIT) access to all human accounts that have privileged roles. Require strong authentication to activate roles.
+ Deploy Azure AD Privileged Identity Management (PIM) for just-in-time access to all human accounts that have privileged roles. Require strong authentication to activate roles. See [What is Azure AD Privileged Identity Management](../privileged-identity-management/pim-configure.md).
-* Provide administrative roles that allow the [least privilege necessary to do required tasks](../roles/delegate-by-task.md).
+- Provide administrative roles that allow the least privilege necessary to do required tasks. See [Least privileged roles by task in Azure Active Directory](../roles/delegate-by-task.md).
-* To enable a rich role assignment experience that includes delegation and multiple roles at the same time, consider using Azure AD security groups or Microsoft 365 Groups. These groups are collectively called *cloud groups*. Also [enable role-based access control](../roles/groups-assign-role.md). You can use [administrative units](../roles/administrative-units.md) to restrict the scope of roles to a portion of the organization.
+- To enable a rich role assignment experience that includes delegation and multiple roles at the same time, consider using Azure AD security groups or Microsoft 365 Groups. These groups are collectively called *cloud groups*.
-* Deploy [emergency access accounts](../roles/security-emergency-access.md). Do *not* use on-premises password vaults to store credentials.
+ Also, enable role-based access control. See [Assign Azure AD roles to groups](../roles/groups-assign-role.md). You can use administrative units to restrict the scope of roles to a portion of the organization. See [Administrative units in Azure Active Directory](../roles/administrative-units.md).
-For more information, see [Securing privileged access](/security/compass/overview). Also see [Secure access practices for administrators in Azure AD](../roles/security-planning.md).
+- Deploy emergency access accounts. Do *not* use on-premises password vaults to store credentials. See [Manage emergency access accounts in Azure AD](../roles/security-emergency-access.md).
-### Use cloud authentication
+For more information, see [Securing privileged access](/security/compass/overview). Also, see [Secure access practices for administrators in Azure AD](../roles/security-planning.md).
+
+### Use cloud authentication
Credentials are a primary attack vector. Implement the following practices to make credentials more secure:
-* [Deploy passwordless authentication](../authentication/howto-authentication-passwordless-deployment.md). Reduce the use of passwords as much as possible by deploying passwordless credentials. These credentials are managed and validated natively in the cloud. Choose from these authentication methods:
+- **Deploy passwordless authentication**. Reduce the use of passwords as much as possible by deploying passwordless credentials. These credentials are managed and validated natively in the cloud. For more information, see [Plan a passwordless authentication deployment in Azure Active Directory](../authentication/howto-authentication-passwordless-deployment.md).
- * [Windows Hello for business](/windows/security/identity-protection/hello-for-business/passwordless-strategy)
+ Choose from these authentication methods:
- * [The Microsoft Authenticator app](../authentication/howto-authentication-passwordless-phone.md)
+ - [Windows Hello for business](/windows/security/identity-protection/hello-for-business/passwordless-strategy)
+ - [The Microsoft Authenticator app](../authentication/howto-authentication-passwordless-phone.md)
+ - [FIDO2 security keys](../authentication/howto-authentication-passwordless-security-key-windows.md)
- * [FIDO2 security keys](../authentication/howto-authentication-passwordless-security-key-windows.md)
+- **Deploy multifactor authentication**. For more information, see [Plan an Azure Active Directory Multi-Factor Authentication deployment](../authentication/howto-mfa-getstarted.md).
-* [Deploy multifactor authentication](../authentication/howto-mfa-getstarted.md). Provision
- [multiple strong credentials by using Azure AD multifactor authentication](../fundamentals/resilience-in-credentials.md). That way, access to cloud resources will require a credential that's managed in Azure AD in addition to an on-premises password that can be manipulated. For more information, see [Create a resilient access control management strategy by using Azure AD](./resilience-overview.md).
+ Provision multiple strong credentials by using Azure AD multifactor authentication. That way, access to cloud resources requires an Azure AD managed credential in addition to an on-premises password. For more information, see [Build resilience with credential management](../fundamentals/resilience-in-credentials.md) and [Create a resilient access control management strategy by using Azure AD](./resilience-overview.md).
### Limitations and tradeoffs
-* Hybrid account password management requires hybrid components such as password protection agents and password writeback agents. If your on-premises infrastructure is compromised, attackers can control the machines on which these agents reside. This vulnerability won't compromise your cloud infrastructure. But your cloud accounts won't protect these components from on-premises compromise.
+Hybrid account password management requires hybrid components such as password protection agents and password writeback agents. If your on-premises infrastructure is compromised, attackers can control the machines on which these agents reside. This vulnerability won't compromise your cloud infrastructure. But your cloud accounts won't protect these components from on-premises compromise.
-* On-premises accounts synced from Active Directory are marked to never expire in Azure AD. This setting is usually mitigated by on-premises Active Directory password settings. However, if your on-premises instance of Active Directory is compromised and synchronization is disabled, you must set the [EnforceCloudPasswordPolicyForPasswordSyncedUsers](../hybrid/how-to-connect-password-hash-synchronization.md) option to force password changes.
+On-premises accounts synced from Active Directory are marked to never expire in Azure AD. This setting is usually mitigated by on-premises Active Directory password settings. If your instance of Active Directory is compromised and synchronization is disabled, set the [EnforceCloudPasswordPolicyForPasswordSyncedUsers](../hybrid/how-to-connect-password-hash-synchronization.md) option to force password changes.
## Provision user access from the cloud
*Provisioning* refers to the creation of user accounts and groups in applications or identity providers.
-![Diagram of provisioning architecture.](media/protect-m365/protect-m365-provision.png)
+![Diagram of provisioning architecture shows the interaction of Azure A D with Cloud HR, Azure A D B 2 B, Azure app provisioning, and group-based licensing.](media/protect-m365/protect-m365-provision.png)
We recommend the following provisioning methods:
-* **Provision from cloud HR apps to Azure AD**: This provisioning enables an on-premises compromise to be isolated, without disrupting your joiner-mover-leaver cycle from your cloud HR apps to Azure AD.
-
-* **Cloud applications**: Where possible, deploy [Azure AD app provisioning](../app-provisioning/user-provisioning.md) as opposed to on-premises provisioning solutions. This method protects some of your software-as-a-service (SaaS) apps from being affected by malicious hacker profiles in on-premises breaches.
+- **Provision from cloud HR apps to Azure AD.** This provisioning enables an on-premises compromise to be isolated. This isolation doesn't disrupt your joiner-mover-leaver cycle from your cloud HR apps to Azure AD.
+- **Cloud applications.** Where possible, deploy Azure AD app provisioning as opposed to on-premises provisioning solutions. This method protects some of your software as a service (SaaS) apps from malicious hacker profiles in on-premises breaches. For more information, see [What is app provisioning in Azure Active Directory](../app-provisioning/user-provisioning.md).
+- **External identities.** Use Azure AD B2B collaboration to reduce the dependency on on-premises accounts for external collaboration with partners, customers, and suppliers. Carefully evaluate any direct federation with other identity providers. For more information, see [B2B collaboration overview](../external-identities/what-is-b2b.md).
-* **External identities**: Use [Azure AD B2B collaboration](../external-identities/what-is-b2b.md) This method reduces the dependency on on-premises accounts for external collaboration with partners, customers, and suppliers. Carefully evaluate any direct federation with other identity providers. We recommend limiting B2B guest accounts in the following ways:
+ We recommend limiting B2B guest accounts in the following ways:
- * Limit guest access to browsing groups and other properties in the directory. Use the external collaboration settings to restrict guests' ability to read groups they're not members of.
+ - Limit guest access to browsing groups and other properties in the directory. Use the external collaboration settings to restrict guests' ability to read groups they're not members of.
+ - Block access to the Azure portal. You can make rare necessary exceptions. Create a Conditional Access policy that includes all guests and external users. Then implement a policy to block access. See [Conditional Access](../conditional-access/concept-conditional-access-cloud-apps.md).
- * Block access to the Azure portal. You can make rare necessary exceptions. Create a Conditional Access policy that includes all guests and external users. Then [implement a policy to block access](../conditional-access/concept-conditional-access-cloud-apps.md).
+- **Disconnected forests.** Use Azure AD cloud provisioning to connect to disconnected forests. This approach eliminates the need to establish cross-forest connectivity or trusts, which can broaden the effect of an on-premises breach. For more information, see [What is Azure AD Connect cloud sync](../cloud-sync/what-is-cloud-sync.md).
-* **Disconnected forests**: Use [Azure AD cloud provisioning](../cloud-sync/what-is-cloud-sync.md). This method enables you to connect to disconnected forests, eliminating the need to establish cross-forest connectivity or trusts, which can broaden the effect of an on-premises breach.
-
### Limitations and tradeoffs
When used to provision hybrid accounts, the Azure-AD-from-cloud-HR system relies on on-premises synchronization to complete the data flow from Active Directory to Azure AD. If synchronization is interrupted, new employee records won't be available in Azure AD.
@@ -141,11 +142,9 @@ When used to provision hybrid accounts, the Azure-AD-from-cloud-HR system relies
Cloud groups allow you to decouple your collaboration and access from your on-premises infrastructure.
-* **Collaboration**: Use Microsoft 365 Groups and Microsoft Teams for modern collaboration. Decommission on-premises distribution lists, and [upgrade distribution lists to Microsoft 365 Groups in Outlook](/office365/admin/manage/upgrade-distribution-lists).
-
-* **Access**: Use Azure AD security groups or Microsoft 365 Groups to authorize access to applications in Azure AD.
-
-* **Office 365 licensing**: Use group-based licensing to provision to Office 365 by using cloud-only groups. This method decouples control of group membership from on-premises infrastructure.
+- **Collaboration**. Use Microsoft 365 Groups and Microsoft Teams for modern collaboration. Decommission on-premises distribution lists, and [upgrade distribution lists to Microsoft 365 Groups in Outlook](/office365/admin/manage/upgrade-distribution-lists).
+- **Access**. Use Azure AD security groups or Microsoft 365 Groups to authorize access to applications in Azure AD.
+- **Office 365 licensing**. Use group-based licensing to provision to Office 365 by using cloud-only groups. This method decouples control of group membership from on-premises infrastructure.
Owners of groups that are used for access should be considered privileged identities to avoid membership takeover in an on-premises compromise. A takeover would include direct manipulation of group membership on-premises or manipulation of on-premises attributes that can affect dynamic group membership in Microsoft 365.
@@ -153,146 +152,133 @@ Owners of groups that are used for access should be considered privileged identi
Use Azure AD capabilities to securely manage devices.
-- **Use Windows 10 workstations**: [Deploy Azure AD joined](../devices/azureadjoin-plan.md) devices with MDM policies. Enable [Windows Autopilot](/mem/autopilot/windows-autopilot) for a fully automated provisioning experience.
-
- - Deprecate machines that run Windows 8.1 and earlier.
-
- - Don't deploy server OS machines as workstations.
+Deploy Azure AD joined Windows 10 workstations with mobile device management policies. Enable Windows Autopilot for a fully automated provisioning experience. See [Plan your Azure AD join implementation](../devices/azureadjoin-plan.md) and [Windows Autopilot](/mem/autopilot/windows-autopilot).
- - Use [Microsoft Intune](https://www.microsoft.com/microsoft-365/enterprise-mobility-security/microsoft-intune) as the source of authority for all device management workloads.
+- **Use Windows 10 workstations**.
+ - Deprecate machines that run Windows 8.1 and earlier.
+ - Don't deploy computers that have server operating systems as workstations.
+- **Use Microsoft Endpoint Manager as the authority for all device management workloads.** See [Microsoft Endpoint Manager](https://www.microsoft.com/security/business/microsoft-endpoint-manager).
+- **Deploy privileged access devices.** For more information, see [Device roles and profiles](/security/compass/privileged-access-devices#device-roles-and-profiles).
-- [**Deploy privileged access devices**](/security/compass/privileged-access-devices#device-roles-and-profiles):
- Use privileged access to manage Microsoft 365 and Azure AD as part of a complete approach to [Securing privileged access](/security/compass/overview).
+### Workloads, applications, and resources
-## Workloads, applications, and resources
+- **On-premises single-sign-on (SSO) systems**
-- **On-premises single-sign-on (SSO) systems**
+ Deprecate any on-premises federation and web access management infrastructure. Configure applications to use Azure AD.
- Deprecate any on-premises federation and web access management infrastructure. Configure applications to use Azure AD.
+- **SaaS and line-of-business (LOB) applications that support modern authentication protocols**
-- **SaaS and line-of-business (LOB) applications that support modern authentication protocols**
+ Use Azure AD for SSO. The more apps you configure to use Azure AD for authentication, the less risk in an on-premises compromise. For more information, see [What is single sign-on in Azure Active Directory](../manage-apps/what-is-single-sign-on.md).
- [Use Azure AD for SSO](../manage-apps/what-is-single-sign-on.md). The more apps you configure to use Azure AD for authentication, the less risk in an on-premises compromise.
+- **Legacy applications**
+ You can enable authentication, authorization, and remote access to legacy applications that don't support modern authentication. Use [Azure AD Application Proxy](../app-proxy/application-proxy.md). Or, enable them through a network or application delivery controller solution by using secure hybrid access partner integrations. See [Secure legacy apps with Azure Active Directory](../manage-apps/secure-hybrid-access.md).
-* **Legacy applications**
+ Choose a VPN vendor that supports modern authentication. Integrate its authentication with Azure AD. In an on-premises compromise, you can use Azure AD to disable or block access by disabling the VPN.
- * You can enable authentication, authorization, and remote access to legacy applications that don't support modern authentication. Use [Azure AD Application Proxy](../app-proxy/application-proxy.md). You can also enable them through a network or application delivery controller solution by using [secure hybrid access partner integrations](../manage-apps/secure-hybrid-access.md).
+- **Application and workload servers**
- * Choose a VPN vendor that supports modern authentication. Integrate its authentication with Azure AD. In an on-premises compromise, you can use Azure AD to disable or block access by disabling the VPN.
+ Applications or resources that required servers can be migrated to Azure infrastructure as a service (IaaS). Use Azure AD Domain Services (Azure AD DS) to decouple trust and dependency on on-premises instances of Active Directory. To achieve this decoupling, make sure virtual networks used for Azure AD DS don't have a connection to corporate networks. See [Azure AD Domain Services](../../active-directory-domain-services/overview.md).
-* **Application and workload servers**
-
- * Applications or resources that required servers can be migrated to Azure infrastructure as a service (IaaS). Use [Azure AD Domain Services](../../active-directory-domain-services/overview.md) (Azure AD DS) to decouple trust and dependency on on-premises instances of Active Directory. To achieve this decoupling, make sure virtual networks used for Azure AD DS don't have a connection to corporate networks.
-
- * Follow the guidance for [credential tiering](/security/compass/privileged-access-access-model#ADATM_BM). Application servers are typically considered tier-1 assets.
+ Use credential tiering. Application servers are typically considered tier-1 assets. For more information, see [Enterprise access model](/security/compass/privileged-access-access-model#ADATM_BM).
## Conditional Access policies
Use Azure AD Conditional Access to interpret signals and use them to make authentication decisions. For more information, see the [Conditional Access deployment plan](../conditional-access/plan-conditional-access.md).
-* Use Conditional Access to [block legacy authentication protocols](../conditional-access/howto-conditional-access-policy-block-legacy.md) whenever possible. Additionally, disable legacy authentication protocols at the application level by using an application-specific configuration.
+- Use Conditional Access to block legacy authentication protocols whenever possible. Additionally, disable legacy authentication protocols at the application level by using an application-specific configuration. See [Block legacy authentication](../conditional-access/howto-conditional-access-policy-block-legacy.md).
+
+ For more information, see [Legacy authentication protocols](../fundamentals/auth-sync-overview.md#legacy-authentication-protocols). Or see specific details for [Exchange Online](/exchange/clients-and-mobile-in-exchange-online/disable-basic-authentication-in-exchange-online#how-basic-authentication-works-in-exchange-online) and [SharePoint Online](/powershell/module/sharepoint-online/set-spotenant).
- For more information, see [Legacy authentication protocols](../fundamentals/auth-sync-overview.md). Or see specific details for [Exchange Online](/exchange/clients-and-mobile-in-exchange-online/disable-basic-authentication-in-exchange-online#how-basic-authentication-works-in-exchange-online) and [SharePoint Online](/powershell/module/sharepoint-online/set-spotenant).
+- Implement the recommended identity and device access configurations. See [Common Zero Trust identity and device access policies](/microsoft-365/security/office-365-security/identity-access-policies).
-* Implement the recommended [identity and device access configurations](/microsoft-365/security/office-365-security/identity-access-policies).
+- If you're using a version of Azure AD that doesn't include Conditional Access, use [Security defaults in Azure AD](../fundamentals/concept-fundamentals-security-defaults.md).
-* If you're using a version of Azure AD that doesn't include Conditional Access, ensure that you're using the [Azure AD security defaults](../fundamentals/concept-fundamentals-security-defaults.md).
+ For more information about Azure AD feature licensing, see the [Azure AD pricing guide](https://www.microsoft.com/security/business/identity-access-management/azure-ad-pricing).
- For more information about Azure AD feature licensing, see the [Azure AD pricing guide](https://www.microsoft.com/security/business/identity-access-management/azure-ad-pricing).
+## Monitor
-## Monitor
+After you configure your environment to protect your Microsoft 365 from an on-premises compromise, proactively monitor the environment. For more information, see [What is Azure Active Directory monitoring](../reports-monitoring/overview-monitoring.md).
-After you configure your environment to protect your Microsoft 365
-from an on-premises compromise, [proactively monitor](../reports-monitoring/overview-monitoring.md)
-the environment.
### Scenarios to monitor
Monitor the following key scenarios, in addition to any scenarios specific to your organization. For example, you should proactively monitor access to your business-critical applications and resources.
-* **Suspicious activity**
-
- Monitor all [Azure AD risk events](../identity-protection/overview-identity-protection.md#risk-detection-and-remediation) for suspicious activity. [Azure AD Identity Protection](../identity-protection/overview-identity-protection.md) is natively integrated with Microsoft Defender for Cloud.
-
- Define the network [named locations](../conditional-access/location-condition.md) to avoid noisy detections on location-based signals.
-* **User and Entity Behavioral Analytics (UEBA) alerts**
-
- Use UEBA to get insights on anomaly detection.
+- **Suspicious activity**
- * Microsoft Defender for Cloud Apps provides [UEBA in the cloud](/cloud-app-security/tutorial-ueba).
+ Monitor all Azure AD risk events for suspicious activity. See [Risk detection and remediation](../identity-protection/overview-identity-protection.md#risk-detection-and-remediation). Azure AD Identity Protection is natively integrated with Microsoft Defender for Cloud. See [What is Identity Protection](../identity-protection/overview-identity-protection.md).
- * You can [integrate on-premises UEBA from Azure Advanced Threat Protection (ATP)](/defender-for-identity/install-step2). Defender for Cloud Apps reads signals from Azure AD Identity Protection.
+ Define the network named locations to avoid noisy detections on location-based signals. See [Using the location condition in a Conditional Access policy](../conditional-access/location-condition.md).
-* **Emergency access accounts activity**
+- **User and Entity Behavioral Analytics (UEBA) alerts**
- Monitor any access that uses [emergency access accounts](../roles/security-emergency-access.md). Create alerts for investigations. This monitoring must include:
+ Use UEBA to get insights on anomaly detection. Microsoft Defender for Cloud Apps provides UEBA in the cloud. See [Investigate risky users](/cloud-app-security/tutorial-ueba).
- * Sign-ins.
+ You can integrate on-premises UEBA from Azure Advanced Threat Protection (ATP). Microsoft Defender for Cloud Apps reads signals from Azure AD Identity Protection. See [Connect to your Active Directory Forest](/defender-for-identity/install-step2).
- * Credential management.
+- **Emergency access accounts activity**
- * Any updates on group memberships.
+ Monitor any access that uses emergency access accounts. See [Manage emergency access accounts in Azure AD](../roles/security-emergency-access.md). Create alerts for investigations. This monitoring must include the following actions:
- * Application assignments.
+ - Sign-ins
+ - Credential management
+ - Any updates on group memberships
+ - Application assignments
-* **Privileged role activity**
+- **Privileged role activity**
- Configure and review security [alerts generated by Azure AD Privileged Identity Management (PIM)](../privileged-identity-management/pim-how-to-configure-security-alerts.md?tabs=new#security-alerts). Monitor direct assignment of privileged roles outside PIM by generating alerts whenever a user is assigned directly.
+ Configure and review security alerts generated by Azure AD Privileged Identity Management (PIM). Monitor direct assignment of privileged roles outside PIM by generating alerts whenever a user is assigned directly. See [Security alerts](../privileged-identity-management/pim-how-to-configure-security-alerts.md?tabs=new#security-alerts).
-* **Azure AD tenant-wide configurations**
+- **Azure AD tenant-wide configurations**
- Any change to tenant-wide configurations should generate alerts in the system. These changes include but aren't limited to:
+ Any change to tenant-wide configurations should generate alerts in the system. These changes include but aren't limited to the following changes:
- * Updated custom domains.
+ - Updated custom domains
+ - Azure AD B2B changes to allowlists and blocklists
+ - Azure AD B2B changes to allowed identity providers, such as SAML identity providers through direct federation or social sign-ins
+ - Conditional Access or Risk policy changes
- * Azure AD B2B changes to allowlists and blocklists.
+- **Application and service principal objects**
- * Azure AD B2B changes to allowed identity providers (SAML identity providers through direct federation or social sign-ins).
+ - New applications or service principals that might require Conditional Access policies
+ - Credentials added to service principals
+ - Application consent activity
- * Conditional Access or Risk policy changes.
+- **Custom roles**
-* **Application and service principal objects**
-
- * New applications or service principals that might require Conditional Access policies.
-
- * Credentials added to service principals.
- * Application consent activity.
-
-* **Custom roles**
- * Updates to the custom role definitions.
-
- * Newly created custom roles.
+ - Updates to the custom role definitions
+ - Newly created custom roles
### Log management
Define a log storage and retention strategy, design, and implementation to facilitate a consistent tool set. For example, you could consider security information and event management (SIEM) systems like Microsoft Sentinel, common queries, and investigation and forensics playbooks.
-* **Azure AD logs**: Ingest generated logs and signals by consistently following best practices for settings such as diagnostics, log retention, and SIEM ingestion.
-
- The log strategy must include the following Azure AD logs:
- * Sign-in activity
-
- * Audit logs
-
- * Risk events
+- **Azure AD logs**. Ingest generated logs and signals by consistently following best practices for settings such as diagnostics, log retention, and SIEM ingestion.
- Azure AD provides [Azure Monitor integration](../reports-monitoring/concept-activity-logs-azure-monitor.md) for the sign-in activity log and audit logs. Risk events can be ingested through the [Microsoft Graph API](/graph/api/resources/identityprotection-root). You can [stream Azure AD logs to Azure Monitor logs](../reports-monitoring/howto-integrate-activity-logs-with-log-analytics.md).
+ The log strategy must include the following Azure AD logs:
-* **Hybrid infrastructure OS security logs**: All hybrid identity infrastructure OS logs should be archived and carefully monitored as a tier-0 system, because of the surface-area implications. Include the following elements:
+ - Sign-in activity
+ - Audit logs
+ - Risk events
- * Azure AD Connect. [Azure AD Connect Health](../hybrid/whatis-azure-ad-connect.md) must be deployed to monitor identity synchronization.
+ Azure AD provides Azure Monitor integration for the sign-in activity log and audit logs. See [Azure AD activity logs in Azure Monitor](../reports-monitoring/concept-activity-logs-azure-monitor.md).
- * Application Proxy agents
+ Use the Microsoft Graph API to ingest risk events. See [Use the Microsoft Graph identity protection APIs](/graph/api/resources/identityprotection-root).
+ You can stream Azure AD logs to Azure Monitor logs. See [Integrate Azure AD logs with Azure Monitor logs](../reports-monitoring/howto-integrate-activity-logs-with-log-analytics.md).
- * Password writeback agents
+- **Hybrid infrastructure operating system security logs**. All hybrid identity infrastructure operating system logs should be archived and carefully monitored as a tier-0 system, because of the surface-area implications. Include the following elements:
- * Password Protection Gateway machines
+ - Application Proxy agents
+ - Password writeback agents
+ - Password Protection Gateway machines
+ - Network policy servers (NPSs) that have the Azure AD multifactor authentication RADIUS extension
+ - Azure AD Connect
- * Network policy servers (NPSs) that have the Azure AD multifactor authentication RADIUS extension
+ You must deploy Azure AD Connect Health to monitor identity synchronization. See [What is Azure AD Connect](../hybrid/whatis-azure-ad-connect.md).
## Next steps
-* [Build resilience into identity and access management by using Azure AD](resilience-overview.md)
-* [Secure external access to resources](secure-external-access-resources.md)
-* [Integrate all your apps with Azure AD](five-steps-to-full-application-integration-with-azure-ad.md)
+- [Build resilience into identity and access management by using Azure AD](resilience-overview.md)
+- [Secure external access to resources](secure-external-access-resources.md)
+- [Integrate all your apps with Azure AD](five-steps-to-full-application-integration-with-azure-ad.md)
diff --git a/articles/active-directory/fundamentals/recover-from-deletions.md b/articles/active-directory/fundamentals/recover-from-deletions.md
index 3c927ac2725e8..a767544b8e0d1 100644
--- a/articles/active-directory/fundamentals/recover-from-deletions.md
+++ b/articles/active-directory/fundamentals/recover-from-deletions.md
@@ -17,22 +17,21 @@ ms.collection: M365-identity-device-management
# Recover from deletions
-This article addresses recovering from soft and hard deletions in your Azure AD tenant. If you haven’t already done so, we recommend first reading the [Recoverability best practices article](recoverability-overview.md) for foundational knowledge.
+This article addresses recovering from soft and hard deletions in your Azure Active Directory (Azure AD) tenant. If you haven't already done so, read [Recoverability best practices](recoverability-overview.md) for foundational knowledge.
## Monitor for deletions
-The [Azure AD Audit Log](../reports-monitoring/concept-audit-logs.md) contains information on all delete operations performed in your tenant. We recommend that you export these logs to a security information and event management (SIEM) tool such as [Microsoft Sentinel](../../sentinel/overview.md). You can also use Microsoft Graph to audit changes and build a custom solution to monitor differences over time. For more information on finding deleted items using Microsoft Graph, see [List deleted items - Microsoft Graph v1.0. ](/graph/api/directory-deleteditems-list?tabs=http)
+The [Azure AD Audit log](../reports-monitoring/concept-audit-logs.md) contains information on all delete operations performed in your tenant. Export these logs to a security information and event management tool such as [Microsoft Sentinel](../../sentinel/overview.md).
-### Audit log
+You can also use Microsoft Graph to audit changes and build a custom solution to monitor differences over time. For more information on how to find deleted items by using Microsoft Graph, see [List deleted items - Microsoft Graph v1.0](/graph/api/directory-deleteditems-list?tabs=http).
-The Audit Log always records a "Delete \
|
+| `issuers`| array |Returns an array of verifiable credentials requested. For each verifiable credential, it provides:
The verifiable credential type(s).
The issuer's DID
The claims retrieved.
The verifiable credential issuer's domain.
The verifiable credential issuer's domain validation status.
|
| `receipt`| string | Optional. The receipt contains the original payload sent from the wallet to the Verifiable Credentials service. The receipt should be used for troubleshooting/debugging only. The format in the receipt is not fix and can change based on the wallet and version used.|
The following example demonstrates a callback payload when the authenticator app starts the presentation request:
```json
-{
- "requestId":"aef2133ba45886ce2c38974339ba1057",
- "code":"request_retrieved",
+{
+ "requestId":"aef2133ba45886ce2c38974339ba1057",
+ "code":"request_retrieved",
"state":"Wy0ThUz1gSasAjS1"
-}
+}
```
The following example demonstrates a callback payload after the verifiable credential presentation has successfully completed:
diff --git a/articles/active-directory/verifiable-credentials/verifiable-credentials-configure-issuer.md b/articles/active-directory/verifiable-credentials/verifiable-credentials-configure-issuer.md
index 5b6fa0221229d..b7b326011cedc 100644
--- a/articles/active-directory/verifiable-credentials/verifiable-credentials-configure-issuer.md
+++ b/articles/active-directory/verifiable-credentials/verifiable-credentials-configure-issuer.md
@@ -12,8 +12,11 @@ ms.date: 05/03/2022
---
+
# Issue Azure AD Verifiable Credentials from an application (preview)
+[!INCLUDE [Verifiable Credentials announcement](../../../includes/verifiable-credentials-brand.md)]
+
In this tutorial, you run a sample application from your local computer that connects to your Azure Active Directory (Azure AD) tenant. Using the application, you're going to issue and verify a verified credential expert card.
In this article, you learn how to:
diff --git a/articles/active-directory/verifiable-credentials/verifiable-credentials-configure-tenant.md b/articles/active-directory/verifiable-credentials/verifiable-credentials-configure-tenant.md
index da56a83c22832..4650bf09e5fe4 100644
--- a/articles/active-directory/verifiable-credentials/verifiable-credentials-configure-tenant.md
+++ b/articles/active-directory/verifiable-credentials/verifiable-credentials-configure-tenant.md
@@ -14,6 +14,8 @@ ms.date: 05/06/2022
# Configure your tenant for Azure AD Verifiable Credentials (preview)
+[!INCLUDE [Verifiable Credentials announcement](../../../includes/verifiable-credentials-brand.md)]
+
Azure Active Directory (Azure AD) Verifiable Credentials safeguards your organization with an identity solution that's seamless and decentralized. The service allows you to issue and verify credentials. For issuers, Azure AD provides a service that they can customize and use to issue their own verifiable credentials. For verifiers, the service provides a free REST API that makes it easy to request and accept verifiable credentials in your apps and services.
In this tutorial, you learn how to configure your Azure AD tenant so it can use the verifiable credentials service.
diff --git a/articles/active-directory/verifiable-credentials/verifiable-credentials-configure-verifier.md b/articles/active-directory/verifiable-credentials/verifiable-credentials-configure-verifier.md
index adee0076d4695..0bdf160451165 100644
--- a/articles/active-directory/verifiable-credentials/verifiable-credentials-configure-verifier.md
+++ b/articles/active-directory/verifiable-credentials/verifiable-credentials-configure-verifier.md
@@ -7,13 +7,15 @@ author: barclayn
manager: rkarlin
ms.author: barclayn
ms.topic: tutorial
-ms.date: 10/08/2021
+ms.date: 05/18/2022
# Customer intent: As an enterprise, we want to enable customers to manage information about themselves by using verifiable credentials.
---
# Configure Azure AD Verifiable Credentials verifier (preview)
+[!INCLUDE [Verifiable Credentials announcement](../../../includes/verifiable-credentials-brand.md)]
+
In [Issue Azure AD Verifiable Credentials from an application (preview)](verifiable-credentials-configure-issuer.md), you learn how to issue and verify credentials by using the same Azure Active Directory (Azure AD) tenant. In this tutorial, you go over the steps needed to present and verify your first verifiable credential: a verified credential expert card.
As a verifier, you unlock privileges to subjects that possess verified credential expert cards. In this tutorial, you run a sample application from your local computer that asks you to present a verified credential expert card, and then verifies it.
diff --git a/articles/active-directory/verifiable-credentials/verifiable-credentials-faq.md b/articles/active-directory/verifiable-credentials/verifiable-credentials-faq.md
index 83b69dd8f2663..d8bfe7ea11be2 100644
--- a/articles/active-directory/verifiable-credentials/verifiable-credentials-faq.md
+++ b/articles/active-directory/verifiable-credentials/verifiable-credentials-faq.md
@@ -13,6 +13,8 @@ ms.author: barclayn
# Frequently Asked Questions (FAQ) (preview)
+[!INCLUDE [Verifiable Credentials announcement](../../../includes/verifiable-credentials-brand.md)]
+
This page contains commonly asked questions about Verifiable Credentials and Decentralized Identity. Questions are organized into the following sections.
- [Vocabulary and basics](#the-basics)
diff --git a/articles/active-directory/verifiable-credentials/whats-new.md b/articles/active-directory/verifiable-credentials/whats-new.md
index 24c8d975af2bd..0ffb3b9f36b80 100644
--- a/articles/active-directory/verifiable-credentials/whats-new.md
+++ b/articles/active-directory/verifiable-credentials/whats-new.md
@@ -16,6 +16,8 @@ ms.author: barclayn
# What's new in Azure Active Directory Verifiable Credentials (preview)
+[!INCLUDE [Verifiable Credentials announcement](../../../includes/verifiable-credentials-brand.md)]
+
This article lists the latest features, improvements, and changes in the Azure Active Directory (Azure AD) Verifiable Credentials service.
## May 2022
diff --git a/articles/advisor/advisor-release-notes.md b/articles/advisor/advisor-release-notes.md
index 90461f778eaa4..749415d78443c 100644
--- a/articles/advisor/advisor-release-notes.md
+++ b/articles/advisor/advisor-release-notes.md
@@ -8,6 +8,22 @@ ms.date: 01/03/2022
Learn what's new in the service. These items may be release notes, videos, blog posts, and other types of information. Bookmark this page to stay up to date with the service.
+## May 2022
+
+### Unlimited number of subscriptions
+It is easier now to get an overview of optimization opportunities available to your organization – no need to spend time and effort to apply filters and process subscription in batches.
+
+To learn more, visit [Get started with Azure Advisor](advisor-get-started.md).
+
+### Tag filtering
+
+You can now get Advisor recommendations scoped to a business unit, workload, or team. Filter recommendations and calculate scores using tags you have already assigned to Azure resources, resource groups and subscriptions. Apply tag filters to:
+
+* Identify cost saving opportunities by business units
+* Compare scores for workloads to optimize critical ones first
+
+To learn more, visit [How to filter Advisor recommendations using tags](advisor-tag-filtering.md).
+
## January 2022
[**Shutdown/Resize your virtual machines**](advisor-cost-recommendations.md#optimize-virtual-machine-spend-by-resizing-or-shutting-down-underutilized-instances) recommendation was enhanced to increase the quality, robustness, and applicability.
diff --git a/articles/advisor/advisor-tag-filtering.md b/articles/advisor/advisor-tag-filtering.md
new file mode 100644
index 0000000000000..258aee8f21530
--- /dev/null
+++ b/articles/advisor/advisor-tag-filtering.md
@@ -0,0 +1,50 @@
+---
+title: Review optimization opportunities by workload, environment or team
+description: Review optimization opportunities by workload, environment or team
+ms.topic: article
+ms.custom: tags
+ms.date: 05/25/2022
+---
+
+# Review optimization opportunities by workload, environment or team
+
+You can now get Advisor recommendations and scores scoped to a workload, environment, or team using resource tag filters. Filter recommendations and calculate scores using tags you have already assigned to Azure resources, resource groups and subscriptions. Use tag filters to:
+
+* Identify cost saving opportunities by team
+* Compare scores for workloads to optimize the critical ones first
+
+> [!TIP]
+> For more information on how to use resource tags to organize and govern your Azure resources, please see the [Cloud Adoption Framework’s guidance](/azure/cloud-adoption-framework/ready/azure-best-practices/resource-tagging) and [Build a cloud governance strategy on Azure](/learn/modules/build-cloud-governance-strategy-azure/).
+
+## How to filter recommendations using tags
+
+1. Sign in to the [Azure portal](https://portal.azure.com/).
+1. Search for and select [Advisor](https://aka.ms/azureadvisordashboard) from any page.
+1. On the Advisor dashboard, click on the **Add Filter** button.
+1. Select the tag in the **Filter** field and value(s).
+1. Click **Apply**. Summary tiles will be updated to reflect the filter.
+1. Click on any of the categories to review recommendations.
+
+ [ ![Screenshot of the Azure Advisor dashboard that shows count of recommendations after tag filter is applied.](./media/tags/overview-tag-filters.png) ](./media/tags/overview-tag-filters.png#lightbox)
+
+
+## How to calculate scores using resource tags
+
+1. Sign in to the [Azure portal](https://portal.azure.com/).
+1. Search for and select [Advisor](https://aka.ms/azureadvisordashboard) from any page.
+1. Select **Advisor score (preview)** from the navigation menu on the left.
+1. Click on the **Add Filter** button.
+1. Select the tag in the **Filter** field and value(s).
+1. Click **Apply**. Advisor score will be updated to only include resources impacted by the filter.
+1. Click on any of the categories to review recommendations.
+
+ [ ![Screenshot of the Azure Advisor score dashboard that shows score and recommendations after tag filter is applied.](./media/tags/score-tag-filters.png) ](./media/tags/score-tag-filters.png#lightbox)
+
+> [!NOTE]
+> Not all capabilities are available when tag filters are used. For example, tag filters are not supported for security score and score history.
+
+## Next steps
+
+To learn more about tagging, see:
+- [Define your tagging strategy - Cloud Adoption Framework](/azure/cloud-adoption-framework/ready/azure-best-practices/resource-tagging)
+- [Tag resources, resource groups, and subscriptions for logical organization - Azure Resource Manager](/azure/azure-resource-manager/management/tag-resources?tabs=json)
diff --git a/articles/advisor/media/tags/overview-tag-filters.png b/articles/advisor/media/tags/overview-tag-filters.png
new file mode 100644
index 0000000000000..4caa6c029fefc
Binary files /dev/null and b/articles/advisor/media/tags/overview-tag-filters.png differ
diff --git a/articles/advisor/media/tags/score-tag-filters.png b/articles/advisor/media/tags/score-tag-filters.png
new file mode 100644
index 0000000000000..d7bdd0e5538c7
Binary files /dev/null and b/articles/advisor/media/tags/score-tag-filters.png differ
diff --git a/articles/advisor/toc.yml b/articles/advisor/toc.yml
index 5968e48f8c596..93ecdee9fa82f 100644
--- a/articles/advisor/toc.yml
+++ b/articles/advisor/toc.yml
@@ -40,10 +40,12 @@
href: ./resource-graph-samples.md
- name: How-to guides
items:
- - name: Security
- href: advisor-security-recommendations.md
- name: Optimize costs
href: advisor-cost-recommendations.md
+ - name: Improve security
+ href: advisor-security-recommendations.md
+ - name: Use tags to filter recommendations and score
+ href: advisor-tag-filtering.md
- name: Configure recommendations
href: view-recommendations.md
- name: Permissions and blocked actions
diff --git a/articles/aks/TOC.yml b/articles/aks/TOC.yml
index 4fcd70b252cf8..727e0f9846203 100644
--- a/articles/aks/TOC.yml
+++ b/articles/aks/TOC.yml
@@ -181,7 +181,7 @@
href: upgrade-cluster.md
- name: Use Uptime SLA
href: uptime-sla.md
- - name: Use Draft
+ - name: Use Draft (preview)
href: draft.md
- name: Use proximity placement groups
href: reduce-latency-ppg.md
@@ -280,6 +280,8 @@
href: manage-azure-rbac.md
- name: Use Kubernetes RBAC with Azure AD integration
href: azure-ad-rbac.md
+ - name: Use custom certificate authorities (preview)
+ href: custom-certificate-authority.md
- name: Rotate certificates
href: certificate-rotation.md
- name: Use Azure Policy
@@ -335,7 +337,7 @@
href: load-balancer-standard.md
- name: Use a static IP address and DNS label
href: static-ip.md
- - name: Use an HTTP proxy (preview)
+ - name: Use an HTTP proxy
href: http-proxy.md
- name: Ingress
items:
@@ -362,33 +364,33 @@
href: limit-egress-traffic.md
- name: Use a user defined route for egress
href: egress-outboundtype.md
- - name: Managed NAT Gateway (preview)
+ - name: Managed NAT Gateway
href: nat-gateway.md
- name: Customize CoreDNS
href: coredns-custom.md
- name: Configure data volumes
items:
- - name: Azure Disk - Dynamic
+ - name: Azure disk - dynamic
href: azure-disks-dynamic-pv.md
- - name: Azure Disk - Static
+ - name: Azure disk - static
href: azure-disk-volume.md
- - name: Azure Files - Dynamic
+ - name: Azure Files - dynamic
href: azure-files-dynamic-pv.md
- - name: Azure Files - Static
+ - name: Azure Files - static
href: azure-files-volume.md
- name: Azure HPC Cache
href: azure-hpc-cache.md
- - name: NFS Server - Static
+ - name: NFS Server - static
href: azure-nfs-volume.md
- name: Azure NetApp Files
href: azure-netapp-files.md
- name: Use Azure Ultra Disks
href: use-ultra-disks.md
- - name: CSI Storage Drivers
+ - name: CSI storage drivers
items:
- - name: Enable CSI Storage Drivers
+ - name: CSI storage driver overview
href: csi-storage-drivers.md
- - name: Azure Disk CSI drivers
+ - name: Azure disk CSI drivers
href: azure-disk-csi.md
- name: Azure Files CSI drivers
href: azure-files-csi.md
@@ -425,8 +427,6 @@
href: kubernetes-helm.md
- name: Use OpenFaaS
href: openfaas.md
- - name: Run Spark jobs
- href: spark-job.md
- name: Use GPUs
href: gpu-cluster.md
- name: Build Django app with PostgreSQL
@@ -465,9 +465,17 @@
href: open-service-mesh-troubleshoot.md
- name: Uninstall the Open Service Mesh AKS add-on
href: open-service-mesh-uninstall-add-on.md
- - name: Kubernetes Event-driven Autoscaler add-on (preview)
- href: keda.md
- - name: Web Application Routing (preview)
+ - name: Track releases and region availability
+ href: release-tracker.md
+ - name: Deploy the Kubernetes Event-driven Autoscaler (KEDA) add-on (preview)
+ items:
+ - name: About Kubernetes Event-driven Autoscaler (KEDA)
+ href: keda-about.md
+ - name: Use ARM template
+ href: keda-deploy-add-on-arm.md
+ - name: Kubernetes Event-driven Autoscaler (KEDA) integrations
+ href: keda-integrations.md
+ - name: Use Web Application Routing (preview)
href: web-app-routing.md
- name: Use cluster extensions
href: cluster-extensions.md
diff --git a/articles/aks/aks-migration.md b/articles/aks/aks-migration.md
index 3cdda34208a51..3238af52d8b3a 100644
--- a/articles/aks/aks-migration.md
+++ b/articles/aks/aks-migration.md
@@ -132,7 +132,7 @@ Stateless application migration is the most straightforward case:
Carefully plan your migration of stateful applications to avoid data loss or unexpected downtime.
* If you use Azure Files, you can mount the file share as a volume into the new cluster. See [Mount Static Azure Files as a Volume](./azure-files-volume.md#mount-file-share-as-a-persistent-volume).
-* If you use Azure Managed Disks, you can only mount the disk if unattached to any VM. See [Mount Static Azure Disk as a Volume](./azure-disk-volume.md#mount-disk-as-volume).
+* If you use Azure Managed Disks, you can only mount the disk if unattached to any VM. See [Mount Static Azure Disk as a Volume](./azure-disk-volume.md#mount-disk-as-a-volume).
* If neither of those approaches work, you can use a backup and restore options. See [Velero on Azure](https://github.com/vmware-tanzu/velero-plugin-for-microsoft-azure/blob/master/README.md).
#### Azure Files
diff --git a/articles/aks/azure-ad-integration-cli.md b/articles/aks/azure-ad-integration-cli.md
index ef2efa84c07ad..633d248fd9068 100644
--- a/articles/aks/azure-ad-integration-cli.md
+++ b/articles/aks/azure-ad-integration-cli.md
@@ -260,7 +260,6 @@ For best practices on identity and resource control, see [Best practices for aut
[kubernetes-webhook]:https://kubernetes.io/docs/reference/access-authn-authz/authentication/#webhook-token-authentication
[kubectl-apply]: https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#apply
[kubectl-get]: https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#get
-[complete-script]: https://github.com/Azure-Samples/azure-cli-samples/tree/master/aks/azure-ad-integration/azure-ad-integration.sh
[az-aks-create]: /cli/azure/aks#az_aks_create
diff --git a/articles/aks/azure-disk-csi.md b/articles/aks/azure-disk-csi.md
index edd748720e769..f96aa10b845b5 100644
--- a/articles/aks/azure-disk-csi.md
+++ b/articles/aks/azure-disk-csi.md
@@ -1,43 +1,74 @@
---
-title: Use Container Storage Interface (CSI) drivers for Azure Disks on Azure Kubernetes Service (AKS)
+title: Use Container Storage Interface (CSI) driver for Azure Disk in Azure Kubernetes Service (AKS)
description: Learn how to use the Container Storage Interface (CSI) drivers for Azure disks in an Azure Kubernetes Service (AKS) cluster.
services: container-service
ms.topic: article
-ms.date: 04/06/2022
+ms.date: 05/23/2022
author: palma21
---
-# Use the Azure disk Container Storage Interface (CSI) drivers in Azure Kubernetes Service (AKS)
+# Use the Azure disk Container Storage Interface (CSI) driver in Azure Kubernetes Service (AKS)
+
The Azure disk Container Storage Interface (CSI) driver is a [CSI specification](https://github.com/container-storage-interface/spec/blob/master/spec.md)-compliant driver used by Azure Kubernetes Service (AKS) to manage the lifecycle of Azure disks.
The CSI is a standard for exposing arbitrary block and file storage systems to containerized workloads on Kubernetes. By adopting and using CSI, AKS can write, deploy, and iterate plug-ins to expose new or improve existing storage systems in Kubernetes without having to touch the core Kubernetes code and wait for its release cycles.
-To create an AKS cluster with CSI driver support, see [Enable CSI drivers for Azure disks and Azure Files on AKS](csi-storage-drivers.md).
+To create an AKS cluster with CSI driver support, see [Enable CSI driver on AKS](csi-storage-drivers.md). This article describes how to use the Azure disk CSI driver version 1.
+
+> [!NOTE]
+> Azure disk CSI driver v2 (preview) improves scalability and reduces pod failover latency. It uses shared disks to provision attachment replicas on multiple cluster nodes and integrates with the pod scheduler to ensure a node with an attachment replica is chosen on pod failover. Azure disk CSI driver v2 (preview) also provides the ability to fine tune performance. If you're interested in participating in the preview, submit a request: [https://aka.ms/DiskCSIv2Preview](https://aka.ms/DiskCSIv2Preview). This preview version is provided without a service level agreement, and you can occasionally expect breaking changes while in preview. The preview version isn't recommended for production workloads. For more information, see [Supplemental Terms of Use for Microsoft Azure Previews](https://azure.microsoft.com/support/legal/preview-supplemental-terms/).
> [!NOTE]
> *In-tree drivers* refers to the current storage drivers that are part of the core Kubernetes code versus the new CSI drivers, which are plug-ins.
-## Azure Disk CSI driver new features
-Besides original in-tree driver features, Azure Disk CSI driver already provides following new features:
-- performance improvement when attach or detach disks in parallel
- - in-tree driver attaches or detaches disks in serial while CSI driver would attach or detach disks in batch, there would be significant improvement when there are multiple disks attaching to one node.
-- ZRS disk support
+## Azure disk CSI driver features
+
+In addition to in-tree driver features, Azure disk CSI driver supports the following features:
+
+- Performance improvements during concurrent disk attach and detach
+ - In-tree drivers attach or detach disks in serial, while CSI drivers attach or detach disks in batch. There is significant improvement when there are multiple disks attaching to one node.
+- Zone-redundant storage (ZRS) disk support
- `Premium_ZRS`, `StandardSSD_ZRS` disk types are supported, check more details about [Zone-redundant storage for managed disks](../virtual-machines/disks-redundancy.md)
- [Snapshot](#volume-snapshots)
- [Volume clone](#clone-volumes)
- [Resize disk PV without downtime](#resize-a-persistent-volume-without-downtime)
+## Storage class driver dynamic disk parameters
+
+|Name | Meaning | Available Value | Mandatory | Default value
+|--- | --- | --- | --- | ---
+|skuName | Azure disk storage account type (alias: `storageAccountType`)| `Standard_LRS`, `Premium_LRS`, `StandardSSD_LRS`, `UltraSSD_LRS`, `Premium_ZRS`, `StandardSSD_ZRS` | No | `StandardSSD_LRS`|
+|kind | Managed or unmanaged (blob based) disk | `managed` (`dedicated` and `shared` are deprecated) | No | `managed`|
+|fsType | File System Type | `ext4`, `ext3`, `ext2`, `xfs`, `btrfs` for Linux, `ntfs` for Windows | No | `ext4` for Linux, `ntfs` for Windows|
+|cachingMode | [Azure Data Disk Host Cache Setting](../virtual-machines/windows/premium-storage-performance.md#disk-caching) | `None`, `ReadOnly`, `ReadWrite` | No | `ReadOnly`|
+|location | Specify Azure region where Azure disks will be created | `eastus`, `westus`, etc. | No | If empty, driver will use the same location name as current AKS cluster|
+|resourceGroup | Specify the resource group where the Azure disk will be created | Existing resource group name | No | If empty, driver will use the same resource group name as current AKS cluster|
+|DiskIOPSReadWrite | [UltraSSD disk](../virtual-machines/linux/disks-ultra-ssd.md) IOPS Capability (minimum: 2 IOPS/GiB ) | 100~160000 | No | `500`|
+|DiskMBpsReadWrite | [UltraSSD disk](../virtual-machines/linux/disks-ultra-ssd.md) Throughput Capability(minimum: 0.032/GiB) | 1~2000 | No | `100`|
+|LogicalSectorSize | Logical sector size in bytes for Ultra disk. Supported values are 512 ad 4096. 4096 is the default. | `512`, `4096` | No | `4096`|
+|tags | Azure disk [tags](../azure-resource-manager/management/tag-resources.md) | Tag format: `key1=val1,key2=val2` | No | ""|
+|diskEncryptionSetID | ResourceId of the disk encryption set to use for [enabling encryption at rest](../virtual-machines/windows/disk-encryption.md) | format: `/subscriptions/{subs-id}/resourceGroups/{rg-name}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSet-name}` | No | ""|
+|diskEncryptionType | Encryption type of the disk encryption set | `EncryptionAtRestWithCustomerKey`(by default), `EncryptionAtRestWithPlatformAndCustomerKeys` | No | ""|
+|writeAcceleratorEnabled | [Write Accelerator on Azure Disks](../virtual-machines/windows/how-to-enable-write-accelerator.md) | `true`, `false` | No | ""|
+|networkAccessPolicy | NetworkAccessPolicy property to prevent generation of the SAS URI for a disk or a snapshot | `AllowAll`, `DenyAll`, `AllowPrivate` | No | `AllowAll`|
+|diskAccessID | ARM ID of the DiskAccess resource to use private endpoints on disks | | No | ``|
+|enableBursting | [Enable on-demand bursting](../virtual-machines/disk-bursting.md) beyond the provisioned performance target of the disk. On-demand bursting should only be applied to Premium disk and when the disk size > 512GB. Ultra and shared disk is not supported. Bursting is disabled by default. | `true`, `false` | No | `false`|
+|useragent | User agent used for [customer usage attribution](../marketplace/azure-partner-customer-usage-attribution.md)| | No | Generated Useragent formatted `driverName/driverVersion compiler/version (OS-ARCH)`|
+|enableAsyncAttach | Allow multiple disk attach operations (in batch) on one node in parallel. While this can speed up disk attachment, you may encounter Azure API throttling limit when there are large number of volume attachments. | `true`, `false` | No | `false`|
+|subscriptionID | Specify Azure subscription ID where the Azure disk will be created | Azure subscription ID | No | If not empty, `resourceGroup` must be provided.|
+
## Use CSI persistent volumes with Azure disks
-A [persistent volume](concepts-storage.md#persistent-volumes) (PV) represents a piece of storage that's provisioned for use with Kubernetes pods. A PV can be used by one or many pods and can be dynamically or statically provisioned. This article shows you how to dynamically create PVs with Azure disks for use by a single pod in an AKS cluster. For static provisioning, see [Manually create and use a volume with Azure disks](azure-disk-volume.md).
+A [persistent volume](concepts-storage.md#persistent-volumes) (PV) represents a piece of storage that's provisioned for use with Kubernetes pods. A PV can be used by one or many pods and can be dynamically or statically provisioned. This article shows you how to dynamically create PVs with Azure disks for use by a single pod in an AKS cluster. For static provisioning, see [Create a static volume with Azure disks](azure-disk-volume.md).
For more information on Kubernetes volumes, see [Storage options for applications in AKS][concepts-storage].
## Dynamically create Azure disk PVs by using the built-in storage classes
-A storage class is used to define how a unit of storage is dynamically created with a persistent volume. For more information on Kubernetes storage classes, see [Kubernetes storage classes][kubernetes-storage-classes].
-When you use storage CSI drivers on AKS, there are two additional built-in `StorageClasses` that use the Azure disk CSI storage drivers. The additional CSI storage classes are created with the cluster alongside the in-tree default storage classes.
+A storage class is used to define how a unit of storage is dynamically created with a persistent volume. For more information on Kubernetes storage classes, see [Kubernetes storage classes][kubernetes-storage-classes].
+
+When you use the Azure disk storage CSI driver on AKS, there are two additional built-in `StorageClasses` that use the Azure disk CSI storage driver. The additional CSI storage classes are created with the cluster alongside the in-tree default storage classes.
- `managed-csi`: Uses Azure Standard SSD locally redundant storage (LRS) to create a managed disk.
- `managed-csi-premium`: Uses Azure Premium LRS to create a managed disk.
@@ -46,7 +77,7 @@ The reclaim policy in both storage classes ensures that the underlying Azure dis
To leverage these storage classes, create a [PVC](concepts-storage.md#persistent-volume-claims) and respective pod that references and uses them. A PVC is used to automatically provision storage based on a storage class. A PVC can use one of the pre-created storage classes or a user-defined storage class to create an Azure-managed disk for the desired SKU and size. When you create a pod definition, the PVC is specified to request the desired storage.
-Create an example pod and respective PVC with the [kubectl apply][kubectl-apply] command:
+Create an example pod and respective PVC by running the [kubectl apply][kubectl-apply] command:
```console
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/pvc-azuredisk-csi.yaml
@@ -56,13 +87,13 @@ persistentvolumeclaim/pvc-azuredisk created
pod/nginx-azuredisk created
```
-After the pod is in the running state, create a new file called `test.txt`.
+After the pod is in the running state, run the following command to create a new file called `test.txt`.
```bash
$ kubectl exec nginx-azuredisk -- touch /mnt/azuredisk/test.txt
```
-You can now validate that the disk is correctly mounted by running the following command and verifying you see the `test.txt` file in the output:
+To validate the disk is correctly mounted, run the following command and verify you see the `test.txt` file in the output:
```console
$ kubectl exec nginx-azuredisk -- ls /mnt/azuredisk
@@ -74,14 +105,13 @@ test.txt
## Create a custom storage class
-The default storage classes suit the most common scenarios, but not all. For some cases, you might want to have your own storage class customized with your own parameters. For example, we have a scenario where you might want to change the `volumeBindingMode` class.
+The default storage classes are suitable for most common scenarios. For some cases, you might want to have your own storage class customized with your own parameters. For example, you might want to change the `volumeBindingMode` class.
-You can use a `volumeBindingMode: Immediate` class that guarantees that occurs immediately once the PVC is created. In cases where your node pools are topology constrained, for example, using availability zones, PVs would be bound or provisioned without knowledge of the pod's scheduling requirements (in this case to be in a specific zone).
+You can use a `volumeBindingMode: Immediate` class that guarantees it occurs immediately once the PVC is created. In cases where your node pools are topology constrained, for example when using availability zones, PVs would be bound or provisioned without knowledge of the pod's scheduling requirements (in this case to be in a specific zone).
-To address this scenario, you can use `volumeBindingMode: WaitForFirstConsumer`, which delays the binding and provisioning of a PV until a pod that uses the PVC is created. In this way, the PV will conform and be provisioned in the availability zone (or other topology) that's specified by the pod's scheduling constraints. The default storage classes use `volumeBindingMode: WaitForFirstConsumer` class.
+To address this scenario, you can use `volumeBindingMode: WaitForFirstConsumer`, which delays the binding and provisioning of a PV until a pod that uses the PVC is created. This way, the PV conforms and is provisioned in the availability zone (or other topology) that's specified by the pod's scheduling constraints. The default storage classes use `volumeBindingMode: WaitForFirstConsumer` class.
-Create a file named `sc-azuredisk-csi-waitforfirstconsumer.yaml`, and paste the following manifest.
-The storage class is the same as our `managed-csi` storage class but with a different `volumeBindingMode` class.
+Create a file named `sc-azuredisk-csi-waitforfirstconsumer.yaml`, and then paste the following manifest. The storage class is the same as our `managed-csi` storage class, but with a different `volumeBindingMode` class.
```yaml
kind: StorageClass
@@ -96,7 +126,7 @@ reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
```
-Create the storage class with the [kubectl apply][kubectl-apply] command, and specify your `sc-azuredisk-csi-waitforfirstconsumer.yaml` file:
+Create the storage class by running the [kubectl apply][kubectl-apply] command and specify your `sc-azuredisk-csi-waitforfirstconsumer.yaml` file:
```console
$ kubectl apply -f sc-azuredisk-csi-waitforfirstconsumer.yaml
@@ -108,7 +138,15 @@ storageclass.storage.k8s.io/azuredisk-csi-waitforfirstconsumer created
The Azure disk CSI driver supports creating [snapshots of persistent volumes](https://kubernetes-csi.github.io/docs/snapshot-restore-feature.html). As part of this capability, the driver can perform either *full* or [*incremental* snapshots](../virtual-machines/disks-incremental-snapshots.md) depending on the value set in the `incremental` parameter (by default, it's true).
-For details on all the parameters, see [volume snapshot class parameters](https://github.com/kubernetes-sigs/azuredisk-csi-driver/blob/master/docs/driver-parameters.md#volumesnapshotclass).
+The following table provides details for all of the parameters.
+
+|Name | Meaning | Available Value | Mandatory | Default value
+|--- | --- | --- | --- | ---
+|resourceGroup | Resource group for storing snapshot shots | EXISTING RESOURCE GROUP | No | If not specified, snapshot will be stored in the same resource group as source Azure disk
+|incremental | Take [full or incremental snapshot](../virtual-machines/windows/incremental-snapshots.md) | `true`, `false` | No | `true`
+|tags | azure disk [tags](../azure-resource-manager/management/tag-resources.md) | Tag format: 'key1=val1,key2=val2' | No | ""
+|userAgent | User agent used for [customer usage attribution](../marketplace/azure-partner-customer-usage-attribution.md) | | No | Generated Useragent formatted `driverName/driverVersion compiler/version (OS-ARCH)`
+|subscriptionID | Specify Azure subscription ID in which Azure disk will be created | Azure subscription ID | No | If not empty, `resourceGroup` must be provided, `incremental` must set as `false`
### Create a volume snapshot
@@ -199,7 +237,7 @@ persistentvolumeclaim/pvc-azuredisk-cloning created
pod/nginx-restored-cloning created
```
-We can now check the content of the cloned volume by running the following command and confirming we still see our `test.txt` created file.
+You can verify the content of the cloned volume by running the following command and confirming the file `test.txt` is created.
```console
$ kubectl exec nginx-restored-cloning -- ls /mnt/azuredisk
@@ -216,7 +254,7 @@ You can request a larger volume for a PVC. Edit the PVC object, and specify a la
> [!NOTE]
> A new PV is never created to satisfy the claim. Instead, an existing volume is resized.
-In AKS, the built-in `managed-csi` storage class already allows for expansion, so use the [PVC created earlier with this storage class](#dynamically-create-azure-disk-pvs-by-using-the-built-in-storage-classes). The PVC requested a 10-Gi persistent volume. We can confirm that by running:
+In AKS, the built-in `managed-csi` storage class already supports expansion, so use the [PVC created earlier with this storage class](#dynamically-create-azure-disk-pvs-by-using-the-built-in-storage-classes). The PVC requested a 10-Gi persistent volume. You can confirm by running the following command:
```console
$ kubectl exec -it nginx-azuredisk -- df -h /mnt/azuredisk
@@ -226,11 +264,11 @@ Filesystem Size Used Avail Use% Mounted on
```
> [!IMPORTANT]
-> Currently, Azure disk CSI driver supports resizing PVCs without downtime on specific regions.
+> Azure disk CSI driver supports resizing PVCs without downtime in specific regions.
> Follow this [link][expand-an-azure-managed-disk] to register the disk online resize feature.
> If your cluster is not in the supported region list, you need to delete application first to detach disk on the node before expanding PVC.
-Let's expand the PVC by increasing the `spec.resources.requests.storage` field:
+Expand the PVC by increasing the `spec.resources.requests.storage` field running the following command:
```console
$ kubectl patch pvc pvc-azuredisk --type merge --patch '{"spec": {"resources": {"requests": {"storage": "15Gi"}}}}'
@@ -238,7 +276,7 @@ $ kubectl patch pvc pvc-azuredisk --type merge --patch '{"spec": {"resources": {
persistentvolumeclaim/pvc-azuredisk patched
```
-Let's confirm the volume is now larger:
+Run the following command to confirm the volume size has increased:
```console
$ kubectl get pv
@@ -248,7 +286,7 @@ pvc-391ea1a6-0191-4022-b915-c8dc4216174a 15Gi RWO Delete
(...)
```
-And after a few minutes, confirm the size of the PVC and inside the pod:
+And after a few minutes, run the following commands to confirm the size of the PVC and inside the pod:
```console
$ kubectl get pvc pvc-azuredisk
@@ -260,11 +298,34 @@ Filesystem Size Used Avail Use% Mounted on
/dev/sdc 15G 46M 15G 1% /mnt/azuredisk
```
+## On-demand bursting
+
+On-demand disk bursting model allows disk bursts whenever its needs exceed its current capacity. This model incurs additional charges anytime the disk bursts. On-demand bursting is only available for premium SSDs larger than 512 GiB. For more information on premium SSDs provisioned IOPS and throughput per disk, see [Premium SSD size][az-premium-ssd]. Alternatively, credit-based bursting is where the disk will burst only if it has burst credits accumulated in its credit bucket. Credit-based bursting does not incur additional charges when the disk bursts. Credit-based bursting is only available for premium SSDs 512 GiB and smaller, and standard SSDs 1024 GiB and smaller. For more details on on-demand bursting, see [On-demand bursting][az-on-demand-bursting].
+
+> [!IMPORTANT]
+> The default `managed-csi-premium` storage class has on-demand bursting disabled and uses credit-based bursting. Any premium SSD dynamically created by a persistent volume claim based on the default `managed-csi-premium` storage class also has on-demand bursting disabled.
+
+To create a premium SSD persistent volume with [on-demand bursting][az-on-demand-bursting] enabled you can create a new storage class with the [enableBursting][csi-driver-parameters] parameter set to `true` as shown in the following YAML template. For more details on enabling on-demand bursting, see [On-demand bursting][az-on-demand-bursting]. For more details on building your own storage class with on-demand bursting enabled, see [Create a Burstable Managed CSI Premium Storage Class][create-burstable-storage-class].
+
+```yaml
+apiVersion: storage.k8s.io/v1
+kind: StorageClass
+metadata:
+ name: burstable-managed-csi-premium
+provisioner: disk.csi.azure.com
+parameters:
+ skuname: Premium_LRS
+ enableBursting: "true"
+reclaimPolicy: Delete
+volumeBindingMode: WaitForFirstConsumer
+allowVolumeExpansion: true
+```
+
## Windows containers
-The Azure disk CSI driver also supports Windows nodes and containers. If you want to use Windows containers, follow the [Windows containers quickstart][aks-quickstart-cli] to add a Windows node pool.
+The Azure disk CSI driver supports Windows nodes and containers. If you want to use Windows containers, follow the [Windows containers quickstart][aks-quickstart-cli] to add a Windows node pool.
-After you have a Windows node pool, you can now use the built-in storage classes like `managed-csi`. You can deploy an example [Windows-based stateful set](https://github.com/kubernetes-sigs/azuredisk-csi-driver/blob/master/deploy/example/windows/statefulset.yaml) that saves timestamps into the file `data.txt` by deploying the following command with the [kubectl apply][kubectl-apply] command:
+After you have a Windows node pool, you can now use the built-in storage classes like `managed-csi`. You can deploy an example [Windows-based stateful set](https://github.com/kubernetes-sigs/azuredisk-csi-driver/blob/master/deploy/example/windows/statefulset.yaml) that saves timestamps into the file `data.txt` by running the following [kubectl apply][kubectl-apply] command:
```console
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/windows/statefulset.yaml
@@ -272,7 +333,7 @@ $ kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-c
statefulset.apps/busybox-azuredisk created
```
-You can now validate the contents of the volume by running:
+To validate the content of the volume, run the following command:
```console
$ kubectl exec -it busybox-azuredisk-0 -- cat c:\\mnt\\azuredisk\\data.txt # on Linux/MacOS Bash
@@ -286,7 +347,7 @@ $ kubectl exec -it busybox-azuredisk-0 -- cat c:\mnt\azuredisk\data.txt # on Win
## Next steps
-- To learn how to use CSI drivers for Azure Files, see [Use Azure Files with CSI drivers](azure-files-csi.md).
+- To learn how to use CSI driver for Azure Files, see [Use Azure Files with CSI driver](azure-files-csi.md).
- For more information about storage best practices, see [Best practices for storage and backups in Azure Kubernetes Service][operator-best-practices-storage].
@@ -296,6 +357,8 @@ $ kubectl exec -it busybox-azuredisk-0 -- cat c:\mnt\azuredisk\data.txt # on Win
[kubernetes-storage-classes]: https://kubernetes.io/docs/concepts/storage/storage-classes/
[kubernetes-volumes]: https://kubernetes.io/docs/concepts/storage/persistent-volumes/
[managed-disk-pricing-performance]: https://azure.microsoft.com/pricing/details/managed-disks/
+[csi-driver-parameters]: https://github.com/kubernetes-sigs/azuredisk-csi-driver/blob/master/docs/driver-parameters.md
+[create-burstable-storage-class]: https://github.com/Azure-Samples/burstable-managed-csi-premium
[azure-disk-volume]: azure-disk-volume.md
@@ -317,3 +380,6 @@ $ kubectl exec -it busybox-azuredisk-0 -- cat c:\mnt\azuredisk\data.txt # on Win
[az-feature-register]: /cli/azure/feature#az_feature_register
[az-feature-list]: /cli/azure/feature#az_feature_list
[az-provider-register]: /cli/azure/provider#az_provider_register
+[az-on-demand-bursting]: ../virtual-machines/disk-bursting.md#on-demand-bursting
+[enable-on-demand-bursting]: ../virtual-machines/disks-enable-bursting.md?tabs=azure-cli
+[az-premium-ssd]: ../virtual-machines/disks-types.md#premium-ssds
\ No newline at end of file
diff --git a/articles/aks/azure-disk-volume.md b/articles/aks/azure-disk-volume.md
index 6eaa2145c456e..806a56edda711 100644
--- a/articles/aks/azure-disk-volume.md
+++ b/articles/aks/azure-disk-volume.md
@@ -3,13 +3,13 @@ title: Create a static volume for pods in Azure Kubernetes Service (AKS)
description: Learn how to manually create a volume with Azure disks for use with a pod in Azure Kubernetes Service (AKS)
services: container-service
ms.topic: article
-ms.date: 05/09/2019
+ms.date: 05/17/2022
#Customer intent: As a developer, I want to learn how to manually create and attach storage to a specific pod in AKS.
---
-# Manually create and use a volume with Azure disks in Azure Kubernetes Service (AKS)
+# Create a static volume with Azure disks in Azure Kubernetes Service (AKS)
Container-based applications often need to access and persist data in an external data volume. If a single pod needs access to storage, you can use Azure disks to present a native volume for application use. This article shows you how to manually create an Azure disk and attach it to a pod in AKS.
@@ -22,129 +22,145 @@ For more information on Kubernetes volumes, see [Storage options for application
This article assumes that you have an existing AKS cluster with 1.21 or later version. If you need an AKS cluster, see the AKS quickstart [using the Azure CLI][aks-quickstart-cli], [using Azure PowerShell][aks-quickstart-powershell], or [using the Azure portal][aks-quickstart-portal].
-If you want to interact with Azure Disks on an AKS cluster with 1.20 or previous version, see the [Kubernetes plugin for Azure Disks][kubernetes-disks].
+If you want to interact with Azure disks on an AKS cluster with 1.20 or previous version, see the [Kubernetes plugin for Azure disks][kubernetes-disks].
-## Create an Azure disk
-
-When you create an Azure disk for use with AKS, you can create the disk resource in the **node** resource group. This approach allows the AKS cluster to access and manage the disk resource. If you instead create the disk in a separate resource group, you must grant the Azure Kubernetes Service (AKS) managed identity for your cluster the `Contributor` role to the disk's resource group.
-
-For this article, create the disk in the node resource group. First, get the resource group name with the [az aks show][az-aks-show] command and add the `--query nodeResourceGroup` query parameter. The following example gets the node resource group for the AKS cluster name *myAKSCluster* in the resource group name *myResourceGroup*:
+## Storage class static provisioning
-```azurecli-interactive
-$ az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv
+The following table describes the Storage Class parameters for the Azure disk CSI driver static provisioning:
-MC_myResourceGroup_myAKSCluster_eastus
-```
+|Name | Meaning | Available Value | Mandatory | Default value|
+|--- | --- | --- | --- | ---|
+|volumeHandle| Azure disk URI | `/subscriptions/{sub-id}/resourcegroups/{group-name}/providers/microsoft.compute/disks/{disk-id}` | Yes | N/A|
+|volumeAttributes.fsType | File system type | `ext4`, `ext3`, `ext2`, `xfs`, `btrfs` for Linux, `ntfs` for Windows | No | `ext4` for Linux, `ntfs` for Windows |
+|volumeAttributes.partition | Partition number of the existing disk (only supported on Linux) | `1`, `2`, `3` | No | Empty (no partition) - Make sure partition format is like `-part1` |
+|volumeAttributes.cachingMode | [Disk host cache setting](../virtual-machines/windows/premium-storage-performance.md#disk-caching)| `None`, `ReadOnly`, `ReadWrite` | No | `ReadOnly`|
-Now create a disk using the [az disk create][az-disk-create] command. Specify the node resource group name obtained in the previous command, and then a name for the disk resource, such as *myAKSDisk*. The following example creates a *20*GiB disk, and outputs the ID of the disk once created. If you need to create a disk for use with Windows Server containers, add the `--os-type windows` parameter to correctly format the disk.
-
-```azurecli-interactive
-az disk create \
- --resource-group MC_myResourceGroup_myAKSCluster_eastus \
- --name myAKSDisk \
- --size-gb 20 \
- --query id --output tsv
-```
+## Create an Azure disk
-> [!NOTE]
-> Azure disks are billed by SKU for a specific size. These SKUs range from 32GiB for S4 or P4 disks to 32TiB for S80 or P80 disks (in preview). The throughput and IOPS performance of a Premium managed disk depends on both the SKU and the instance size of the nodes in the AKS cluster. See [Pricing and Performance of Managed Disks][managed-disk-pricing-performance].
-
-The disk resource ID is displayed once the command has successfully completed, as shown in the following example output. This disk ID is used to mount the disk in the next step.
-
-```console
-/subscriptions//resourceGroups/MC_myAKSCluster_myAKSCluster_eastus/providers/Microsoft.Compute/disks/myAKSDisk
-```
-
-## Mount disk as volume
-Create a *pv-azuredisk.yaml* file with a *PersistentVolume*. Update `volumeHandle` with disk resource ID. For example:
-
-```yaml
-apiVersion: v1
-kind: PersistentVolume
-metadata:
- name: pv-azuredisk
-spec:
- capacity:
- storage: 20Gi
- accessModes:
- - ReadWriteOnce
- persistentVolumeReclaimPolicy: Retain
- storageClassName: managed-csi
- csi:
- driver: disk.csi.azure.com
- readOnly: false
- volumeHandle: /subscriptions//resourceGroups/MC_myAKSCluster_myAKSCluster_eastus/providers/Microsoft.Compute/disks/myAKSDisk
- volumeAttributes:
- fsType: ext4
-```
-
-Create a *pvc-azuredisk.yaml* file with a *PersistentVolumeClaim* that uses the *PersistentVolume*. For example:
-
-```yaml
-apiVersion: v1
-kind: PersistentVolumeClaim
-metadata:
- name: pvc-azuredisk
-spec:
- accessModes:
- - ReadWriteOnce
- resources:
- requests:
- storage: 20Gi
- volumeName: pv-azuredisk
- storageClassName: managed-csi
-```
-
-Use the `kubectl` commands to create the *PersistentVolume* and *PersistentVolumeClaim*.
-
-```console
-kubectl apply -f pv-azuredisk.yaml
-kubectl apply -f pvc-azuredisk.yaml
-```
-
-Verify your *PersistentVolumeClaim* is created and bound to the *PersistentVolume*.
-
-```console
-$ kubectl get pvc pvc-azuredisk
-
-NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
-pvc-azuredisk Bound pv-azuredisk 20Gi RWO 5s
-```
-
-Create a *azure-disk-pod.yaml* file to reference your *PersistentVolumeClaim*. For example:
-
-```yaml
-apiVersion: v1
-kind: Pod
-metadata:
- name: mypod
-spec:
- containers:
- - image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
- name: mypod
- resources:
- requests:
- cpu: 100m
- memory: 128Mi
- limits:
- cpu: 250m
- memory: 256Mi
- volumeMounts:
- - name: azure
- mountPath: /mnt/azure
- volumes:
- - name: azure
- persistentVolumeClaim:
- claimName: pvc-azuredisk
-```
-
-```console
-kubectl apply -f azure-disk-pod.yaml
-```
+When you create an Azure disk for use with AKS, you can create the disk resource in the **node** resource group. This approach allows the AKS cluster to access and manage the disk resource. If instead you created the disk in a separate resource group, you must grant the Azure Kubernetes Service (AKS) managed identity for your cluster the `Contributor` role to the disk's resource group. In this exercise, you're going to create the disk in the same resource group as your cluster.
+
+1. Identify the resource group name using the [az aks show][az-aks-show] command and add the `--query nodeResourceGroup` parameter. The following example gets the node resource group for the AKS cluster name *myAKSCluster* in the resource group name *myResourceGroup*:
+
+ ```azurecli-interactive
+ $ az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv
+
+ MC_myResourceGroup_myAKSCluster_eastus
+ ```
+
+2. Create a disk using the [az disk create][az-disk-create] command. Specify the node resource group name obtained in the previous command, and then a name for the disk resource, such as *myAKSDisk*. The following example creates a *20*GiB disk, and outputs the ID of the disk after it's created. If you need to create a disk for use with Windows Server containers, add the `--os-type windows` parameter to correctly format the disk.
+
+ ```azurecli-interactive
+ az disk create \
+ --resource-group MC_myResourceGroup_myAKSCluster_eastus \
+ --name myAKSDisk \
+ --size-gb 20 \
+ --query id --output tsv
+ ```
+
+ > [!NOTE]
+ > Azure disks are billed by SKU for a specific size. These SKUs range from 32GiB for S4 or P4 disks to 32TiB for S80 or P80 disks (in preview). The throughput and IOPS performance of a Premium managed disk depends on both the SKU and the instance size of the nodes in the AKS cluster. See [Pricing and Performance of Managed Disks][managed-disk-pricing-performance].
+
+ The disk resource ID is displayed once the command has successfully completed, as shown in the following example output. This disk ID is used to mount the disk in the next section.
+
+ ```console
+ /subscriptions//resourceGroups/MC_myAKSCluster_myAKSCluster_eastus/providers/Microsoft.Compute/disks/myAKSDisk
+ ```
+
+## Mount disk as a volume
+
+1. Create a *pv-azuredisk.yaml* file with a *PersistentVolume*. Update `volumeHandle` with disk resource ID from the previous step. For example:
+
+ ```yaml
+ apiVersion: v1
+ kind: PersistentVolume
+ metadata:
+ name: pv-azuredisk
+ spec:
+ capacity:
+ storage: 20Gi
+ accessModes:
+ - ReadWriteOnce
+ persistentVolumeReclaimPolicy: Retain
+ storageClassName: managed-csi
+ csi:
+ driver: disk.csi.azure.com
+ readOnly: false
+ volumeHandle: /subscriptions//resourceGroups/MC_myAKSCluster_myAKSCluster_eastus/providers/Microsoft.Compute/disks/myAKSDisk
+ volumeAttributes:
+ fsType: ext4
+ ```
+
+2. Create a *pvc-azuredisk.yaml* file with a *PersistentVolumeClaim* that uses the *PersistentVolume*. For example:
+
+ ```yaml
+ apiVersion: v1
+ kind: PersistentVolumeClaim
+ metadata:
+ name: pvc-azuredisk
+ spec:
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 20Gi
+ volumeName: pv-azuredisk
+ storageClassName: managed-csi
+ ```
+
+3. Use the `kubectl` commands to create the *PersistentVolume* and *PersistentVolumeClaim*, referencing the two YAML files created earlier:
+
+ ```console
+ kubectl apply -f pv-azuredisk.yaml
+ kubectl apply -f pvc-azuredisk.yaml
+ ```
+
+4. To verify your *PersistentVolumeClaim* is created and bound to the *PersistentVolume*, run the
+following command:
+
+ ```console
+ $ kubectl get pvc pvc-azuredisk
+
+ NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
+ pvc-azuredisk Bound pv-azuredisk 20Gi RWO 5s
+ ```
+
+5. Create a *azure-disk-pod.yaml* file to reference your *PersistentVolumeClaim*. For example:
+
+ ```yaml
+ apiVersion: v1
+ kind: Pod
+ metadata:
+ name: mypod
+ spec:
+ containers:
+ - image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
+ name: mypod
+ resources:
+ requests:
+ cpu: 100m
+ memory: 128Mi
+ limits:
+ cpu: 250m
+ memory: 256Mi
+ volumeMounts:
+ - name: azure
+ mountPath: /mnt/azure
+ volumes:
+ - name: azure
+ persistentVolumeClaim:
+ claimName: pvc-azuredisk
+ ```
+
+6. Run the following command to apply the configuration and mount the volume, referencing the YAML
+configuration file created in the previous steps:
+
+ ```console
+ kubectl apply -f azure-disk-pod.yaml
+ ```
## Next steps
-For associated best practices, see [Best practices for storage and backups in AKS][operator-best-practices-storage].
+To learn about our recommended storage and backup practices, see [Best practices for storage and backups in AKS][operator-best-practices-storage].
[kubernetes-disks]: https://github.com/kubernetes/examples/blob/master/staging/volumes/azure_disk/README.md
diff --git a/articles/aks/cluster-container-registry-integration.md b/articles/aks/cluster-container-registry-integration.md
index 9e0ef2226baf9..3b46b82bf41f7 100644
--- a/articles/aks/cluster-container-registry-integration.md
+++ b/articles/aks/cluster-container-registry-integration.md
@@ -5,7 +5,7 @@ services: container-service
manager: gwallace
ms.topic: article
ms.date: 06/10/2021
-ms.custom: devx-track-azurepowershell, devx-track-azurecli
+ms.tool: azure-cli, azure-powershell
ms.devlang: azurecli
---
diff --git a/articles/aks/configure-azure-cni.md b/articles/aks/configure-azure-cni.md
index 76a851450e9e4..680f4861aa38e 100644
--- a/articles/aks/configure-azure-cni.md
+++ b/articles/aks/configure-azure-cni.md
@@ -59,7 +59,7 @@ The maximum number of pods per node in an AKS cluster is 250. The *default* maxi
| -- | :--: | :--: | -- |
| Azure CLI | 110 | 30 | Yes (up to 250) |
| Resource Manager template | 110 | 30 | Yes (up to 250) |
-| Portal | 110 | 110 (configured in the Node Pools tab) | No |
+| Portal | 110 | 110 (configurable in the Node Pools tab) | Yes (up to 250) |
### Configure maximum - new clusters
@@ -72,7 +72,7 @@ A minimum value for maximum pods per node is enforced to guarantee space for sys
| Networking | Minimum | Maximum |
| -- | :--: | :--: |
| Azure CNI | 10 | 250 |
-| Kubenet | 10 | 110 |
+| Kubenet | 10 | 250 |
> [!NOTE]
> The minimum value in the table above is strictly enforced by the AKS service. You can not set a maxPods value lower than the minimum shown as doing so can prevent the cluster from starting.
@@ -159,6 +159,9 @@ A drawback with the traditional CNI is the exhaustion of pod IP addresses as the
### Additional prerequisites
+> [!NOTE]
+> When using dynamic allocation of IPs, exposing an application as a Private Link Service using a Kubernetes Load Balancer Service is not supported.
+
The [prerequisites][prerequisites] already listed for Azure CNI still apply, but there are a few additional limitations:
* Only linux node clusters and node pools are supported.
@@ -175,10 +178,10 @@ The planning of IPs for Kubernetes services and Docker bridge remain unchanged.
The pods per node values when using Azure CNI with dynamic allocation of IPs have changed slightly from the traditional CNI behavior:
-|CNI|Deployment Method|Default|Configurable at deployment|
-|--|--| :--: |--|
-|Traditional Azure CNI|Azure CLI|30|Yes (up to 250)|
-|Azure CNI with dynamic allocation of IPs|Azure CLI|250|Yes (up to 250)|
+|CNI|Default|Configurable at deployment|
+|--| :--: |--|
+|Traditional Azure CNI|30|Yes (up to 250)|
+|Azure CNI with dynamic allocation of IPs|250|Yes (up to 250)|
All other guidance related to configuring the maximum nodes per pod remains the same.
@@ -285,12 +288,6 @@ The following questions and answers apply to the **Azure CNI network configurati
The entire cluster should use only one type of CNI.
-## AKS Engine
-
-[Azure Kubernetes Service Engine (AKS Engine)][aks-engine] is an open-source project that generates Azure Resource Manager templates you can use for deploying Kubernetes clusters on Azure.
-
-Kubernetes clusters created with AKS Engine support both the [kubenet][kubenet] and [Azure CNI][cni-networking] plugins. As such, both networking scenarios are supported by AKS Engine.
-
## Next steps
Learn more about networking in AKS in the following articles:
@@ -308,7 +305,6 @@ Learn more about networking in AKS in the following articles:
[portal-01-networking-advanced]: ./media/networking-overview/portal-01-networking-advanced.png
-[aks-engine]: https://github.com/Azure/aks-engine
[services]: https://kubernetes.io/docs/concepts/services-networking/service/
[portal]: https://portal.azure.com
[cni-networking]: https://github.com/Azure/azure-container-networking/blob/master/docs/cni.md
diff --git a/articles/aks/configure-kubenet.md b/articles/aks/configure-kubenet.md
index 1f9af23f1d983..fb6178de42eed 100644
--- a/articles/aks/configure-kubenet.md
+++ b/articles/aks/configure-kubenet.md
@@ -3,7 +3,7 @@ title: Configure kubenet networking in Azure Kubernetes Service (AKS)
description: Learn how to configure kubenet (basic) network in Azure Kubernetes Service (AKS) to deploy an AKS cluster into an existing virtual network and subnet.
services: container-service
ms.topic: article
-ms.date: 06/02/2020
+ms.date: 06/02/2022
ms.reviewer: nieberts, jomore
---
@@ -21,7 +21,7 @@ This article shows you how to use *kubenet* networking to create and use a virtu
* The virtual network for the AKS cluster must allow outbound internet connectivity.
* Don't create more than one AKS cluster in the same subnet.
* AKS clusters may not use `169.254.0.0/16`, `172.30.0.0/16`, `172.31.0.0/16`, or `192.0.2.0/24` for the Kubernetes service address range, pod address range or cluster virtual network address range.
-* The cluster identity used by the AKS cluster must have at least [Network Contributor](../role-based-access-control/built-in-roles.md#network-contributor) role on the subnet within your virtual network. You must also have the appropriate permissions, such as the subscription owner, to create a cluster identity and assign it permissions. If you wish to define a [custom role](../role-based-access-control/custom-roles.md) instead of using the built-in Network Contributor role, the following permissions are required:
+* The cluster identity used by the AKS cluster must have at least [Network Contributor](../role-based-access-control/built-in-roles.md#network-contributor) role on the subnet within your virtual network. CLI helps do the role assignment automatically. If you are using ARM template or other clients, the role assignment needs to be done manually. You must also have the appropriate permissions, such as the subscription owner, to create a cluster identity and assign it permissions. If you wish to define a [custom role](../role-based-access-control/custom-roles.md) instead of using the built-in Network Contributor role, the following permissions are required:
* `Microsoft.Network/virtualNetworks/subnets/join/action`
* `Microsoft.Network/virtualNetworks/subnets/read`
@@ -138,6 +138,9 @@ The following example output shows the application ID and password for your serv
To assign the correct delegations in the remaining steps, use the [az network vnet show][az-network-vnet-show] and [az network vnet subnet show][az-network-vnet-subnet-show] commands to get the required resource IDs. These resource IDs are stored as variables and referenced in the remaining steps:
+> [!NOTE]
+> If you are using CLI, you can skip this step. With ARM template or other clients, you need to do the below role assignment.
+
```azurecli-interactive
VNET_ID=$(az network vnet show --resource-group myResourceGroup --name myAKSVnet --query id -o tsv)
SUBNET_ID=$(az network vnet subnet show --resource-group myResourceGroup --vnet-name myAKSVnet --name myAKSSubnet --query id -o tsv)
@@ -266,4 +269,4 @@ With an AKS cluster deployed into your existing virtual network subnet, you can
[express-route]: ../expressroute/expressroute-introduction.md
[network-comparisons]: concepts-network.md#compare-network-models
[custom-route-table]: ../virtual-network/manage-route-table.md
-[user-assigned managed identity]: use-managed-identity.md#bring-your-own-control-plane-mi
+[user-assigned managed identity]: use-managed-identity.md#bring-your-own-control-plane-managed-identity
diff --git a/articles/aks/control-kubeconfig-access.md b/articles/aks/control-kubeconfig-access.md
index 119958571cb7f..890301f35b4a5 100644
--- a/articles/aks/control-kubeconfig-access.md
+++ b/articles/aks/control-kubeconfig-access.md
@@ -156,7 +156,7 @@ For enhanced security on access to AKS clusters, [integrate Azure Active Directo
[aks-quickstart-cli]: ./learn/quick-kubernetes-deploy-cli.md
[aks-quickstart-portal]: ./learn/quick-kubernetes-deploy-portal.md
-[aks-quickstart-powershell]: /learn/quick-kubernetes-deploy-powershell.md
+[aks-quickstart-powershell]: /azure/aks/learn/quick-kubernetes-deploy-powershell
[azure-cli-install]: /cli/azure/install-azure-cli
[az-aks-get-credentials]: /cli/azure/aks#az_aks_get_credentials
[azure-rbac]: ../role-based-access-control/overview.md
diff --git a/articles/aks/csi-secrets-store-driver.md b/articles/aks/csi-secrets-store-driver.md
index 40e720b944875..875219151f17a 100644
--- a/articles/aks/csi-secrets-store-driver.md
+++ b/articles/aks/csi-secrets-store-driver.md
@@ -164,14 +164,14 @@ az aks disable-addons --addons azure-keyvault-secrets-provider -g myResourceGrou
> When the Azure Key Vault Provider for Secrets Store CSI Driver is enabled, it updates the pod mount and the Kubernetes secret that's defined in the `secretObjects` field of `SecretProviderClass`. It does so by polling for changes periodically, based on the rotation poll interval you've defined. The default rotation poll interval is 2 minutes.
>[!NOTE]
-> When the secret/key is updated in external secrets store after the initial pod deployment, the updated secret will be periodically updated in the pod mount and the Kubernetes Secret.
+> When a secret is updated in an external secrets store after initial pod deployment, the Kubernetes Secret and the pod mount will be periodically updated depending on how the application consumes the secret data.
>
-> Depending on how the application consumes the secret data:
+> **Mount the Kubernetes Secret as a volume**: Use the auto rotation and Sync K8s secrets features of Secrets Store CSI Driver. The application will need to watch for changes from the mounted Kubernetes Secret volume. When the Kubernetes Secret is updated by the CSI Driver, the corresponding volume contents are automatically updated.
>
-> 1. Mount Kubernetes secret as a volume: Use auto rotation feature + Sync K8s secrets feature in Secrets Store CSI Driver, application will need to watch for changes from the mounted Kubernetes Secret volume. When the Kubernetes Secret is updated by the CSI Driver, the corresponding volume contents are automatically updated.
-> 2. Application reads the data from container’s filesystem: Use rotation feature in Secrets Store CSI Driver, application will need to watch for the file change from the volume mounted by the CSI driver.
-> 3. Using Kubernetes secret for environment variable: The pod needs to be restarted to get the latest secret as environment variable.
-> Use something like https://github.com/stakater/Reloader to watch for changes on the synced Kubernetes secret and do rolling upgrades on pods
+> **Application reads the data from the container’s filesystem**: Use the rotation feature of Secrets Store CSI Driver. The application will need to watch for the file change from the volume mounted by the CSI driver.
+>
+> **Use the Kubernetes Secret for an environment variable**: Restart the pod to get the latest secret as an environment variable.
+> Use a tool such as [Reloader][reloader] to watch for changes on the synced Kubernetes Secret and perform rolling upgrades on pods.
To enable autorotation of secrets, use the `enable-secret-rotation` flag when you create your cluster:
@@ -332,3 +332,5 @@ Now that you've learned how to use the Azure Key Vault Provider for Secrets Stor
[kube-csi]: https://kubernetes-csi.github.io/docs/
[key-vault-provider-install]: https://azure.github.io/secrets-store-csi-driver-provider-azure/getting-started/installation
[sample-secret-provider-class]: https://azure.github.io/secrets-store-csi-driver-provider-azure/getting-started/usage/#create-your-own-secretproviderclass-object
+[reloader]: https://github.com/stakater/Reloader
+
diff --git a/articles/aks/csi-secrets-store-nginx-tls.md b/articles/aks/csi-secrets-store-nginx-tls.md
index 4c652d9fd4c37..3ad97c8fa3426 100644
--- a/articles/aks/csi-secrets-store-nginx-tls.md
+++ b/articles/aks/csi-secrets-store-nginx-tls.md
@@ -5,7 +5,7 @@ author: nickomang
ms.author: nickoman
ms.service: container-service
ms.topic: how-to
-ms.date: 10/19/2021
+ms.date: 05/26/2022
ms.custom: template-how-to
---
@@ -15,8 +15,8 @@ This article walks you through the process of securing an NGINX Ingress Controll
Importing the ingress TLS certificate to the cluster can be accomplished using one of two methods:
-- **Application** - The application deployment manifest declares and mounts the provider volume. Only when the application is deployed is the certificate made available in the cluster, and when the application is removed the secret is removed as well. This scenario fits development teams who are responsible for the application’s security infrastructure and their integration with the cluster.
-- **Ingress Controller** - The ingress deployment is modified to declare and mount the provider volume. The secret is imported when ingress pods are created. The application’s pods have no access to the TLS certificate. This scenario fits scenarios where one team (i.e. IT) manages and provisions infrastructure and networking components (including HTTPS TLS certificates) and other teams manage application lifecycle. In this case, ingress is specific to a single namespace/workload and is deployed in the same namespace as the application.
+- **Application** - The application deployment manifest declares and mounts the provider volume. Only when the application is deployed, is the certificate made available in the cluster, and when the application is removed the secret is removed as well. This scenario fits development teams who are responsible for the application’s security infrastructure and their integration with the cluster.
+- **Ingress Controller** - The ingress deployment is modified to declare and mount the provider volume. The secret is imported when ingress pods are created. The application’s pods have no access to the TLS certificate. This scenario fits scenarios where one team (for example, IT) manages and creates infrastructure and networking components (including HTTPS TLS certificates) and other teams manage application lifecycle. In this case, ingress is specific to a single namespace/workload and is deployed in the same namespace as the application.
## Prerequisites
@@ -28,18 +28,18 @@ Importing the ingress TLS certificate to the cluster can be accomplished using o
## Generate a TLS certificate
```bash
-export CERT_NAME=ingresscert
+export CERT_NAME=aks-ingress-cert
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
- -out ingress-tls.crt \
- -keyout ingress-tls.key \
- -subj "/CN=demo.test.com/O=ingress-tls"
+ -out aks-ingress-tls.crt \
+ -keyout aks-ingress-tls.key \
+ -subj "/CN=demo.azure.com/O=aks-ingress-tls"
```
### Import the certificate to AKV
```bash
export AKV_NAME="[YOUR AKV NAME]"
-openssl pkcs12 -export -in ingress-tls.crt -inkey ingress-tls.key -out $CERT_NAME.pfx
+openssl pkcs12 -export -in aks-ingress-tls.crt -inkey aks-ingress-tls.key -out $CERT_NAME.pfx
# skip Password prompt
```
@@ -52,11 +52,11 @@ az keyvault certificate import --vault-name $AKV_NAME -n $CERT_NAME -f $CERT_NAM
First, create a new namespace:
```bash
-export NAMESPACE=ingress-test
+export NAMESPACE=ingress-basic
```
```azurecli-interactive
-kubectl create ns $NAMESPACE
+kubectl create namespace $NAMESPACE
```
Select a [method to provide an access identity][csi-ss-identity-access] and configure your SecretProviderClass YAML accordingly. Additionally:
@@ -64,7 +64,7 @@ Select a [method to provide an access identity][csi-ss-identity-access] and conf
- Be sure to use `objectType=secret`, which is the only way to obtain the private key and the certificate from AKV.
- Set `kubernetes.io/tls` as the `type` in your `secretObjects` section.
-See the following for an example of what your SecretProviderClass might look like:
+See the following example of what your SecretProviderClass might look like:
```yml
apiVersion: secrets-store.csi.x-k8s.io/v1
@@ -83,6 +83,8 @@ spec:
key: tls.crt
parameters:
usePodIdentity: "false"
+ useVMManagedIdentity: "true"
+ userAssignedIdentityID:
keyvaultName: $AKV_NAME # the name of the AKV instance
objects: |
array:
@@ -119,9 +121,9 @@ The application’s deployment will reference the Secrets Store CSI Driver's Azu
helm install ingress-nginx/ingress-nginx --generate-name \
--namespace $NAMESPACE \
--set controller.replicaCount=2 \
- --set controller.nodeSelector."beta\.kubernetes\.io/os"=linux \
+ --set controller.nodeSelector."kubernetes\.io/os"=linux \
--set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz \
- --set defaultBackend.nodeSelector."beta\.kubernetes\.io/os"=linux
+ --set defaultBackend.nodeSelector."kubernetes\.io/os"=linux
```
#### Bind certificate to ingress controller
@@ -135,8 +137,8 @@ The ingress controller’s deployment will reference the Secrets Store CSI Drive
helm install ingress-nginx/ingress-nginx --generate-name \
--namespace $NAMESPACE \
--set controller.replicaCount=2 \
- --set controller.nodeSelector."beta\.kubernetes\.io/os"=linux \
- --set defaultBackend.nodeSelector."beta\.kubernetes\.io/os"=linux \
+ --set controller.nodeSelector."kubernetes\.io/os"=linux \
+ --set defaultBackend.nodeSelector."kubernetes\.io/os"=linux \
--set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz \
--set controller.podLabels.aadpodidbinding=$AAD_POD_IDENTITY_NAME \
-f - < 80/TCP 19m
```
@@ -338,14 +438,46 @@ nginx-ingress-1588032400-default-backend ClusterIP 10.0.223.214
Use `curl` to verify your ingress has been properly configured with TLS. Be sure to use the external IP you've obtained from the previous step:
```bash
-curl -v -k --resolve demo.test.com:443:52.xx.xx.xx https://demo.test.com
+curl -v -k --resolve demo.azure.com:443:EXTERNAL_IP https://demo.azure.com
+```
-# You should see output similar to the following
-* subject: CN=demo.test.com; O=ingress-tls
-* start date: Oct 15 04:23:46 2021 GMT
-* expire date: Oct 15 04:23:46 2022 GMT
-* issuer: CN=demo.test.com; O=ingress-tls
+No additional path was provided with the address, so the ingress controller defaults to the */* route. The first demo application is returned, as shown in the following condensed example output:
+
+```console
+[...]
+
+
+
+
+ Welcome to Azure Kubernetes Service (AKS)
+[...]
+```
+
+The *-v* parameter in our `curl` command outputs verbose information, including the TLS certificate received. Half-way through your curl output, you can verify that your own TLS certificate was used. The *-k* parameter continues loading the page even though we're using a self-signed certificate. The following example shows that the *issuer: CN=demo.azure.com; O=aks-ingress-tls* certificate was used:
+
+```
+[...]
+* Server certificate:
+* subject: CN=demo.azure.com; O=aks-ingress-tls
+* start date: Oct 22 22:13:54 2021 GMT
+* expire date: Oct 22 22:13:54 2022 GMT
+* issuer: CN=demo.azure.com; O=aks-ingress-tls
* SSL certificate verify result: self signed certificate (18), continuing anyway.
+[...]
+```
+
+Now add */hello-world-two* path to the address, such as `https://demo.azure.com/hello-world-two`. The second demo application with the custom title is returned, as shown in the following condensed example output:
+
+```
+curl -v -k --resolve demo.azure.com:443:EXTERNAL_IP https://demo.azure.com/hello-world-two
+
+[...]
+
+
+
+
+ AKS Ingress Demo
+[...]
```
diff --git a/articles/aks/csi-storage-drivers.md b/articles/aks/csi-storage-drivers.md
index dbac1b4b58415..5a011bd9d4313 100644
--- a/articles/aks/csi-storage-drivers.md
+++ b/articles/aks/csi-storage-drivers.md
@@ -1,14 +1,14 @@
---
-title: Enable Container Storage Interface (CSI) drivers on Azure Kubernetes Service (AKS)
+title: Container Storage Interface (CSI) drivers in Azure Kubernetes Service (AKS)
description: Learn how to enable the Container Storage Interface (CSI) drivers for Azure disks and Azure Files in an Azure Kubernetes Service (AKS) cluster.
services: container-service
ms.topic: article
-ms.date: 05/06/2022
+ms.date: 05/23/2022
author: palma21
---
-# Enable Container Storage Interface (CSI) drivers on Azure Kubernetes Service (AKS)
+# Container Storage Interface (CSI) drivers in Azure Kubernetes Service (AKS)
The Container Storage Interface (CSI) is a standard for exposing arbitrary block and file storage systems to containerized workloads on Kubernetes. By adopting and using CSI, Azure Kubernetes Service (AKS) can write, deploy, and iterate plug-ins to expose new or improve existing storage systems in Kubernetes without having to touch the core Kubernetes code and wait for its release cycles.
@@ -22,6 +22,9 @@ The CSI storage driver support on AKS allows you to natively use:
>
> *In-tree drivers* refers to the current storage drivers that are part of the core Kubernetes code opposed to the new CSI drivers, which are plug-ins.
+> [!NOTE]
+> Azure disk CSI driver v2 (preview) improves scalability and reduces pod failover latency. It uses shared disks to provision attachment replicas on multiple cluster nodes and integrates with the pod scheduler to ensure a node with an attachment replica is chosen on pod failover. Azure disk CSI driver v2 (preview) also provides the ability to fine tune performance. If you're interested in participating in the preview, submit a request: [https://aka.ms/DiskCSIv2Preview](https://aka.ms/DiskCSIv2Preview). This preview version is provided without a service level agreement, and you can occasionally expect breaking changes while in preview. The preview version isn't recommended for production workloads. For more information, see [Supplemental Terms of Use for Microsoft Azure Previews](https://azure.microsoft.com/support/legal/preview-supplemental-terms/).
+
## Migrate custom in-tree storage classes to CSI
If you created in-tree driver storage classes, those storage classes continue to work since CSI migration is turned on after upgrading your cluster to 1.21.x. If you want to use CSI features you'll need to perform the migration.
@@ -61,7 +64,7 @@ parameters:
## Migrate in-tree persistent volumes
> [!IMPORTANT]
-> If your in-tree persistent volume `reclaimPolicy` is set to **Delete**, you need to change its policy to **Retain** to persist your data. This can be achieved using a [patch operation on the PV](https://kubernetes.io/docs/tasks/administer-cluster/change-pv-reclaim-policy/). For example:
+> If your in-tree persistent volume `reclaimPolicy` is set to **Delete**, you need to change its policy to **Retain** to persist your data. This can be achieved using a [patch operation on the PV](https://kubernetes.io/docs/tasks/administer-cluster/change-pv-reclaim-policy/). For example:
>
> ```console
> $ kubectl patch pv pv-azuredisk --type merge --patch '{"spec": {"persistentVolumeReclaimPolicy": "Retain"}}'
@@ -93,7 +96,7 @@ If you have in-tree Azure File persistent volumes, get `secretName`, `shareName`
[azure-disk-volume]: azure-disk-volume.md
-[azure-disk-static-mount]: azure-disk-volume.md#mount-disk-as-volume
+[azure-disk-static-mount]: azure-disk-volume.md#mount-disk-as-a-volume
[azure-file-static-mount]: azure-files-volume.md#mount-file-share-as-a-persistent-volume
[azure-files-pvc]: azure-files-dynamic-pv.md
[premium-storage]: ../virtual-machines/disks-types.md
diff --git a/articles/aks/custom-certificate-authority.md b/articles/aks/custom-certificate-authority.md
new file mode 100644
index 0000000000000..4387a75b15813
--- /dev/null
+++ b/articles/aks/custom-certificate-authority.md
@@ -0,0 +1,140 @@
+---
+title: Custom certificate authority (CA) in Azure Kubernetes Service (AKS) (preview)
+description: Learn how to use a custom certificate authority (CA) in an Azure Kubernetes Service (AKS) cluster.
+services: container-service
+author: erik-ha-msft
+ms.author: erikha
+ms.topic: article
+ms.date: 4/12/2022
+---
+
+# Custom certificate authority (CA) in Azure Kubernetes Service (AKS) (preview)
+
+Custom certificate authorities (CAs) allow you to establish trust between your Azure Kubernetes Service (AKS) cluster and your workloads, such as private registries, proxies, and firewalls. A Kubernetes secret is used to store the certificate authority's information, then it's passed to all nodes in the cluster.
+
+This feature is applied per nodepool, so new and existing nodepools must be configured to enable this feature.
+
+[!INCLUDE [preview features note](./includes/preview/preview-callout.md)]
+
+## Prerequisites
+
+* An Azure subscription. If you don't have an Azure subscription, you can create a [free account](https://azure.microsoft.com/free).
+* [Azure CLI installed][azure-cli-install].
+* A base64 encoded certificate string.
+
+### Limitations
+
+This feature isn't currently supported for Windows nodepools.
+
+### Install the `aks-preview` extension
+
+You also need the *aks-preview* Azure CLI extensions version 0.5.72 or later. Install the *aks-preview* extension by using the [az extension add][az-extension-add] command, or install any available updates by using the [az extension update][az-extension-update] command.
+
+```azurecli
+# Install the aks-preview extension
+az extension add --name aks-preview
+
+# Update the extension to make sure you have the latest version installed
+az extension update --name aks-preview
+```
+
+### Register the `CustomCATrustPreview` preview feature
+
+Register the `CustomCATrustPreview` feature flag by using the [az feature register][az-feature-register] command:
+
+```azurecli
+az feature register --namespace "Microsoft.ContainerService" --name "CustomCATrustPreview"
+```
+
+It takes a few minutes for the status to show *Registered*. Verify the registration status by using the [az feature list][az-feature-list] command:
+
+```azurecli
+az feature list --query "[?contains(name, 'Microsoft.ContainerService/CustomCATrustPreview')].{Name:name,State:properties.state}" -o table
+```
+
+Refresh the registration of the *Microsoft.ContainerService* resource provider by using the [az provider register][az-provider-register] command:
+
+```azurecli
+az provider register --namespace Microsoft.ContainerService
+```
+
+## Configure a new AKS cluster to use a custom CA
+
+To configure a new AKS cluster to use a custom CA, run the [az aks create][az-aks-create] command with the `--enable-custom-ca-trust` parameter.
+
+```azurecli
+az aks create \
+ --resource-group myResourceGroup \
+ --name myAKSCluster \
+ --node-count 2 \
+ --enable-custom-ca-trust
+```
+
+## Configure a new nodepool to use a custom CA
+
+To configure a new nodepool to use a custom CA, run the [az aks nodepool add][az-aks-nodepool-add] command with the `--enable-custom-ca-trust` parameter.
+
+```azurecli
+az aks nodepool add \
+ --cluster-name myAKSCluster \
+ --resource-group myResourceGroup \
+ --name myNodepool \
+ --enable-custom-ca-trust \
+ --os-type Linux
+```
+
+## Configure an existing nodepool to use a custom CA
+
+To configure an existing nodepool to use a custom CA, run the [az aks nodepool update][az-aks-nodepool-update] command with the `--enable-custom-trust-ca` parameter.
+
+```azurecli
+az aks nodepool update \
+ --resource-group myResourceGroup \
+ --cluster-name myAKSCluster \
+ --name myNodepool \
+ --enable-custom-ca-trust
+```
+
+## Create a Kubernetes secret with your CA information
+
+Create a [Kubernetes secret][kubernetes-secrets] YAML manifest with your base64 encoded certificate string in the `data` field. Data from this secret is used to update CAs on all nodes.
+
+You must ensure that:
+* The secret is named `custom-ca-trust-secret`.
+* The secret is created in the `kube-system` namespace.
+
+```yaml
+apiVersion: v1
+kind: Secret
+metadata:
+ name: custom-ca-trust-secret
+ namespace: kube-system
+type: Opaque
+data:
+ ca1.crt: |
+ {base64EncodedCertStringHere}
+ ca2.crt: |
+ {anotherBase64EncodedCertStringHere}
+```
+
+To update or remove a CA, edit and apply the YAML manifest. The cluster will poll for changes and update the nodes accordingly. This process may take a couple of minutes before changes are applied.
+
+## Next steps
+
+For more information on AKS security best practices, see [Best practices for cluster security and upgrades in Azure Kubernetes Service (AKS)][aks-best-practices-security-upgrades].
+
+
+[kubernetes-secrets]:https://kubernetes.io/docs/concepts/configuration/secret/
+
+
+[aks-best-practices-security-upgrades]: operator-best-practices-cluster-security.md
+[azure-cli-install]: /cli/azure/install-azure-cli
+[az-aks-create]: /cli/azure/aks#az-aks-create
+[az-aks-update]: /cli/azure/aks#az-aks-update
+[az-aks-nodepool-add]: /cli/azure/aks#az-aks-nodepool-add
+[az-aks-nodepool-update]: /cli/azure/aks#az-aks-update
+[az-extension-add]: /cli/azure/extension#az-extension-add
+[az-extension-update]: /cli/azure/extension#az-extension-update
+[az-feature-list]: /cli/azure/feature#az-feature-list
+[az-feature-register]: /cli/azure/feature#az-feature-register
+[az-provider-register]: /cli/azure/provider#az-provider-register
diff --git a/articles/aks/dapr.md b/articles/aks/dapr.md
index 3b349f0ddfadd..b5adbe083172f 100644
--- a/articles/aks/dapr.md
+++ b/articles/aks/dapr.md
@@ -59,7 +59,7 @@ Global Azure cloud is supported with Arc support on the regions listed by [Azure
## Prerequisites
- If you don't have an Azure subscription, create a [free account](https://azure.microsoft.com/free/?WT.mc_id=A261C142F) before you begin.
-- Install the latest version of the [Azure CLI](/cli/azure/install-azure-cli-windows).
+- Install the latest version of the [Azure CLI][install-cli].
- If you don't have one already, you need to create an [AKS cluster][deploy-cluster] or connect an [Arc-enabled Kubernetes cluster][arc-k8s-cluster].
### Set up the Azure CLI extension for cluster extensions
@@ -262,8 +262,9 @@ az k8s-extension delete --resource-group myResourceGroup --cluster-name myAKSClu
[az-provider-register]: /cli/azure/provider#az-provider-register
[sample-application]: ./quickstart-dapr.md
[k8s-version-support-policy]: ./supported-kubernetes-versions.md?tabs=azure-cli#kubernetes-version-support-policy
-[arc-k8s-cluster]: /azure-arc/kubernetes/quickstart-connect-cluster.md
+[arc-k8s-cluster]: /azure/azure-arc/kubernetes/quickstart-connect-cluster
[update-extension]: ./cluster-extensions.md#update-extension-instance
+[install-cli]: /cli/azure/install-azure-cli
[kubernetes-production]: https://docs.dapr.io/operations/hosting/kubernetes/kubernetes-production
diff --git a/articles/aks/deployment-center-launcher.md b/articles/aks/deployment-center-launcher.md
index 4bb2281ca7d33..291b97a536e7b 100644
--- a/articles/aks/deployment-center-launcher.md
+++ b/articles/aks/deployment-center-launcher.md
@@ -1,10 +1,10 @@
---
title: Deployment Center for Azure Kubernetes
description: Deployment Center in Azure DevOps simplifies setting up a robust Azure DevOps pipeline for your application
-ms.author: puagarw
+ms.author: rayoflores
ms.topic: tutorial
ms.date: 07/12/2019
-author: pulkitaggarwl
+author: rayoef
---
# Deployment Center for Azure Kubernetes
diff --git a/articles/aks/devops-pipeline.md b/articles/aks/devops-pipeline.md
index 8a25a490f820a..68c0f58fbbea1 100644
--- a/articles/aks/devops-pipeline.md
+++ b/articles/aks/devops-pipeline.md
@@ -124,7 +124,7 @@ After the pipeline run is finished, explore what happened and then go see your a
1. Select **View environment**.
-1. Select the instance if your app for the namespace you deployed to. If you stuck to the defaults we mentioned above, then it will be the **myapp** app in the **default** namespace.
+1. Select the instance of your app for the namespace you deployed to. If you stuck to the defaults we mentioned above, then it will be the **myapp** app in the **default** namespace.
1. Select the **Services** tab.
diff --git a/articles/aks/draft.md b/articles/aks/draft.md
index dd0bc5c98eb9f..940d548b8081d 100644
--- a/articles/aks/draft.md
+++ b/articles/aks/draft.md
@@ -26,32 +26,18 @@ Draft has the following commands to help ease your development on Kubernetes:
- If you don't have an Azure subscription, create a [free account](https://azure.microsoft.com/free/?WT.mc_id=A261C142F) before you begin.
- Install the latest version of the [Azure CLI](/cli/azure/install-azure-cli-windows) and the *aks-preview* extension.
-- If you don't have one already, you need to create an [AKS cluster][deploy-cluster].
+- If you don't have one already, you need to create an [AKS cluster][deploy-cluster] and an Azure Container Registry instance.
-### Install the `AKS-Draft` extension preview
+### Install the `aks-preview` Azure CLI extension
[!INCLUDE [preview features callout](./includes/preview/preview-callout.md)]
-To create an AKS cluster that can use the Draft extension, you must enable the `AKS-ExtensionManager` and `AKS-Draft` feature flags on your subscription.
-
-Register the `AKS-ExtensionManager` and `AKS-Draft` feature flags by using the [az feature register][az-feature-register] command, as shown in the following example:
-
```azurecli-interactive
-az extension add --name draft
-```
-
-### Set up the Azure CLI extension for cluster extensions
-
-You'll also need the `k8s-extension` Azure CLI extension, which can be installed by running the following command:
-
-```azurecli-interactive
-az extension add --name k8s-extension
-```
+# Install the aks-preview extension
+az extension add --name aks-preview
-If the `k8s-extension` extension is already installed, you can update it to the latest version using the following command:
-
-```azurecli-interactive
-az extension update --name k8s-extension
+# Update the extension to make sure you have the latest version installed
+az extension update --name aks-preview
```
## Create artifacts using `draft create`
@@ -120,14 +106,6 @@ You can also run the command on a specific directory using the `--destination` f
az aks draft update --destination /Workspaces/ContosoAir
```
-## Delete the extension
-
-To delete the extension and remove Draft from your AKS cluster, you can use the following command:
-
-```azure-cli-interactive
-az k8s-extension delete --resource-group myResourceGroup --cluster-name myAKSCluster --cluster-type managedClusters --name draft
-```
-
[deploy-cluster]: ./tutorial-kubernetes-deploy-cluster.md
[az-feature-register]: /cli/azure/feature#az-feature-register
@@ -136,3 +114,5 @@ az k8s-extension delete --resource-group myResourceGroup --cluster-name myAKSClu
[sample-application]: ./quickstart-dapr.md
[k8s-version-support-policy]: ./supported-kubernetes-versions.md?tabs=azure-cli#kubernetes-version-support-policy
[web-app-routing]: web-app-routing.md
+[az-extension-add]: /cli/azure/extension#az-extension-add
+[az-extension-update]: /cli/azure/extension#az-extension-update
diff --git a/articles/aks/howto-deploy-java-liberty-app-with-postgresql.md b/articles/aks/howto-deploy-java-liberty-app-with-postgresql.md
index fec268159616d..ef5c02bc74a9d 100644
--- a/articles/aks/howto-deploy-java-liberty-app-with-postgresql.md
+++ b/articles/aks/howto-deploy-java-liberty-app-with-postgresql.md
@@ -81,7 +81,7 @@ The steps in this section guide you through creating an Azure Database for Postg
Use the [az postgres server create](/cli/azure/postgres/server#az-postgres-server-create) command to create the DB server. The following example creates a DB server named *youruniquedbname*. Make sure *youruniqueacrname* is unique within Azure.
> [!TIP]
- > To help ensure a globally unique name, prepend a disambiguation string such as your intitials and the MMDD of today's date.
+ > To help ensure a globally unique name, prepend a disambiguation string such as your initials and the MMDD of today's date.
```bash
@@ -153,7 +153,7 @@ In directory *liberty/config*, the *server.xml* is used to configure the DB conn
After the offer is successfully deployed, an AKS cluster will be generated automatically. The AKS cluster is configured to connect to the ACR. Before we get started with the application, we need to extract the namespace configured for the AKS.
-1. Run following command to print the current deployment file, using the `appDeploymentTemplateYamlEncoded` you saved above. The output contains all the variables we need.
+1. Run the following command to print the current deployment file, using the `appDeploymentTemplateYamlEncoded` you saved above. The output contains all the variables we need.
```bash
echo | base64 -d
diff --git a/articles/aks/http-proxy.md b/articles/aks/http-proxy.md
index 55731f98569f3..ab6adc21511eb 100644
--- a/articles/aks/http-proxy.md
+++ b/articles/aks/http-proxy.md
@@ -4,11 +4,11 @@ description: Use the HTTP proxy configuration feature for Azure Kubernetes Servi
services: container-service
author: nickomang
ms.topic: article
-ms.date: 09/09/2021
+ms.date: 05/23/2022
ms.author: nickoman
---
-# HTTP proxy support in Azure Kubernetes Service (preview)
+# HTTP proxy support in Azure Kubernetes Service
Azure Kubernetes Service (AKS) clusters, whether deployed into a managed or custom virtual network, have certain outbound dependencies necessary to function properly. Previously, in environments requiring internet access to be routed through HTTP proxies, this was a problem. Nodes had no way of bootstrapping the configuration, environment variables, and certificates necessary to access internet services.
@@ -16,8 +16,6 @@ This feature adds HTTP proxy support to AKS clusters, exposing a straightforward
Some more complex solutions may require creating a chain of trust to establish secure communications across the network. The feature also enables installation of a trusted certificate authority onto the nodes as part of bootstrapping a cluster.
-[!INCLUDE [preview features callout](./includes/preview/preview-callout.md)]
-
## Limitations and other details
The following scenarios are **not** supported:
@@ -33,40 +31,7 @@ By default, *httpProxy*, *httpsProxy*, and *trustedCa* have no value.
## Prerequisites
* An Azure subscription. If you don't have an Azure subscription, you can create a [free account](https://azure.microsoft.com/free).
-* [Azure CLI installed](/cli/azure/install-azure-cli).
-
-### Install the `aks-preview` Azure CLI
-
-You also need the *aks-preview* Azure CLI extension version 0.5.25 or later. Install the *aks-preview* Azure CLI extension by using the [az extension add][az-extension-add] command. Or install any available updates by using the [az extension update][az-extension-update] command.
-
-```azurecli-interactive
-# Install the aks-preview extension
-az extension add --name aks-preview
-# Update the extension to make sure you have the latest version installed
-az extension update --name aks-preview
-```
-
-### Register the `HTTPProxyConfigPreview` preview feature
-
-To use the feature, you must also enable the `HTTPProxyConfigPreview` feature flag on your subscription.
-
-Register the `HTTPProxyConfigPreview` feature flag by using the [az feature register][az-feature-register] command, as shown in the following example:
-
-```azurecli-interactive
-az feature register --namespace "Microsoft.ContainerService" --name "HTTPProxyConfigPreview"
-```
-
-It takes a few minutes for the status to show *Registered*. Verify the registration status by using the [az feature list][az-feature-list] command:
-
-```azurecli-interactive
-az feature list -o table --query "[?contains(name, 'Microsoft.ContainerService/HTTPProxyConfigPreview')].{Name:name,State:properties.state}"
-```
-
-When ready, refresh the registration of the *Microsoft.ContainerService* resource provider by using the [az provider register][az-provider-register] command:
-
-```azurecli-interactive
-az provider register --namespace Microsoft.ContainerService
-```
+* Latest version of [Azure CLI installed](/cli/azure/install-azure-cli).
## Configuring an HTTP proxy using Azure CLI
diff --git a/articles/aks/includes/keda/current-version-callout.md b/articles/aks/includes/keda/current-version-callout.md
new file mode 100644
index 0000000000000..59fdc4969333b
--- /dev/null
+++ b/articles/aks/includes/keda/current-version-callout.md
@@ -0,0 +1,11 @@
+---
+author: tomkerkhove
+
+ms.service: container-service
+ms.topic: include
+ms.date: 05/24/2022
+ms.author: tomkerkhove
+---
+
+> [!IMPORTANT]
+> The KEDA add-on installs version *2.7.0* of KEDA on your cluster.
\ No newline at end of file
diff --git a/articles/aks/integrations.md b/articles/aks/integrations.md
index 0e69f1088d025..cd42ba25a8b45 100644
--- a/articles/aks/integrations.md
+++ b/articles/aks/integrations.md
@@ -27,7 +27,7 @@ The below table shows the available add-ons.
| open-service-mesh | Use Open Service Mesh with your AKS cluster. | [Open Service Mesh AKS add-on][osm] |
| azure-keyvault-secrets-provider | Use Azure Keyvault Secrets Provider addon.| [Use the Azure Key Vault Provider for Secrets Store CSI Driver in an AKS cluster][keyvault-secret-provider] |
| web_application_routing | Use a managed NGINX ingress Controller with your AKS cluster.| [Web Application Routing Overview][web-app-routing] |
-
+| keda | Event-driven autoscaling for the applications on your AKS cluster. | [Simplified application autoscaling with Kubernetes Event-driven Autoscaling (KEDA) add-on][keda]|
## Extensions
@@ -47,10 +47,10 @@ The below table shows a few examples of open-source and third-party integrations
|---|---|---|
| [Helm][helm] | An open-source packaging tool that helps you install and manage the lifecycle of Kubernetes applications. | [Quickstart: Develop on Azure Kubernetes Service (AKS) with Helm][helm-qs] |
| [Prometheus][prometheus] | An open source monitoring and alerting toolkit. | [Container insights with metrics in Prometheus format][prometheus-az-monitor], [Prometheus Helm chart][prometheus-helm-chart] |
-| [Grafana][grafana] | An open-source dashboard for observability. | [Deploy Grafana on Kubernetes][grafana-install] |
+| [Grafana][grafana] | An open-source dashboard for observability. | [Deploy Grafana on Kubernetes][grafana-install] or use [Managed Grafana][managed-grafana]|
| [Couchbase][couchdb] | A distributed NoSQL cloud database. | [Install Couchbase and the Operator on AKS][couchdb-install] |
| [OpenFaaS][open-faas]| An open-source framework for building serverless functions by using containers. | [Use OpenFaaS with AKS][open-faas-aks] |
-| [Apache Spark][apache-spark] | An open source, fast engine for large-scale data processing. | [Run an Apache Spark job with AKS][spark-job] |
+| [Apache Spark][apache-spark] | An open source, fast engine for large-scale data processing. | Running Apache Spark jobs requires a minimum node size of *Standard_D3_v2*. See [running Spark on Kubernetes][spark-kubernetes] for more details on running Spark jobs on Kubernetes. |
| [Istio][istio] | An open-source service mesh. | [Istio Installation Guides][istio-install] |
| [Linkerd][linkerd] | An open-source service mesh. | [Linkerd Getting Started][linkerd-install] |
| [Consul][consul] | An open source, identity-based networking solution. | [Getting Started with Consul Service Mesh for Kubernetes][consul-install] |
@@ -84,8 +84,10 @@ The below table shows a few examples of open-source and third-party integrations
[open-faas]: https://www.openfaas.com/
[open-faas-aks]: openfaas.md
[apache-spark]: https://spark.apache.org/
-[spark-job]: spark-job.md
[azure-ml-overview]: ../machine-learning/how-to-attach-kubernetes-anywhere.md
+[spark-kubernetes]: https://spark.apache.org/docs/latest/running-on-kubernetes.html
[dapr-overview]: ./dapr.md
[gitops-overview]: ../azure-arc/kubernetes/conceptual-gitops-flux2.md
-[web-app-routing]: web-app-routing.md
+[managed-grafana]: ../managed-grafana/overview.md
+[keda]: keda-about.md
+[web-app-routing]: web-app-routing.md
\ No newline at end of file
diff --git a/articles/aks/internal-lb.md b/articles/aks/internal-lb.md
index 68ca708437c98..767eaebd8fe95 100644
--- a/articles/aks/internal-lb.md
+++ b/articles/aks/internal-lb.md
@@ -23,7 +23,7 @@ This article assumes that you have an existing AKS cluster. If you need an AKS c
You also need the Azure CLI version 2.0.59 or later installed and configured. Run `az --version` to find the version. If you need to install or upgrade, see [Install Azure CLI][install-azure-cli].
-The AKS cluster cluster identity needs permission to manage network resources if you use an existing subnet or resource group. For information see [Use kubenet networking with your own IP address ranges in Azure Kubernetes Service (AKS)][use-kubenet] or [Configure Azure CNI networking in Azure Kubernetes Service (AKS)][advanced-networking]. If you are configuring your load balancer to use an [IP address in a different subnet][different-subnet], ensure the the AKS cluster identity also has read access to that subnet.
+The AKS cluster identity needs permission to manage network resources if you use an existing subnet or resource group. For information, see [Use kubenet networking with your own IP address ranges in Azure Kubernetes Service (AKS)][use-kubenet] or [Configure Azure CNI networking in Azure Kubernetes Service (AKS)][advanced-networking]. If you are configuring your load balancer to use an [IP address in a different subnet][different-subnet], ensure the AKS cluster identity also has read access to that subnet.
For more information on permissions, see [Delegate AKS access to other Azure resources][aks-sp].
@@ -94,6 +94,89 @@ internal-app LoadBalancer 10.0.184.168 10.240.0.25 80:30225/TCP 4m
For more information on configuring your load balancer in a different subnet, see [Specify a different subnet][different-subnet]
+## Connect Azure Private Link service to internal load balancer (Preview)
+
+### Before you begin
+
+You must have the following resource installed:
+
+* The Azure CLI
+* The `aks-preview` extension version 0.5.50 or later
+* Kubernetes version 1.22.x or above
+
+#### Install the aks-preview CLI extension
+
+```azurecli-interactive
+# Install the aks-preview extension
+az extension add --name aks-preview
+
+# Update the extension to make sure you have the latest version installed
+az extension update --name aks-preview
+```
+
+### Create a Private Link service connection
+
+To attach an Azure Private Link service to an internal load balancer, create a service manifest named `internal-lb-pls.yaml` with the service type *LoadBalancer* and the *azure-load-balancer-internal* and *azure-pls-create* annotation as shown in the example below. For more options, refer to the [Azure Private Link Service Integration](https://kubernetes-sigs.github.io/cloud-provider-azure/development/design-docs/pls-integration/) design document
+
+```yaml
+apiVersion: v1
+kind: Service
+metadata:
+ name: internal-app
+ annotations:
+ service.beta.kubernetes.io/azure-load-balancer-internal: "true"
+ service.beta.kubernetes.io/azure-pls-create: "true"
+spec:
+ type: LoadBalancer
+ ports:
+ - port: 80
+ selector:
+ app: internal-app
+```
+
+Deploy the internal load balancer using the [kubectl apply][kubectl-apply] and specify the name of your YAML manifest:
+
+```console
+kubectl apply -f internal-lb-pls.yaml
+```
+
+An Azure load balancer is created in the node resource group and connected to the same virtual network as the AKS cluster.
+
+When you view the service details, the IP address of the internal load balancer is shown in the *EXTERNAL-IP* column. In this context, *External* is in relation to the external interface of the load balancer, not that it receives a public, external IP address. It may take a minute or two for the IP address to change from *\* to an actual internal IP address, as shown in the following example:
+
+```
+$ kubectl get service internal-app
+
+NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
+internal-app LoadBalancer 10.125.17.53 10.125.0.66 80:30430/TCP 64m
+```
+
+Additionally, a Private Link Service object will also be created that connects to the Frontend IP configuration of the Load Balancer associated with the Kubernetes service. Details of the Private Link Service object can be retrieved as shown in the following example:
+```
+$ AKS_MC_RG=$(az aks show -g myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv)
+$ az network private-link-service list -g ${AKS_MC_RG} --query "[].{Name:name,Alias:alias}" -o table
+
+Name Alias
+-------- -------------------------------------------------------------------------
+pls-xyz pls-xyz.abc123-defg-4hij-56kl-789mnop.eastus2.azure.privatelinkservice
+
+```
+
+### Create a Private Endpoint to the Private Link service
+
+A Private Endpoint allows you to privately connect to your Kubernetes service object via the Private Link Service created above. To do so, follow the example shown below:
+
+```azurecli
+$ AKS_PLS_ID=$(az network private-link-service list -g ${AKS_MC_RG} --query "[].id" -o tsv)
+$ az network private-endpoint create \
+ -g myOtherResourceGroup \
+ --name myAKSServicePE \
+ --vnet-name myOtherVNET \
+ --subnet pe-subnet \
+ --private-connection-resource-id ${AKS_PLS_ID} \
+ --connection-name connectToMyK8sService
+```
+
## Use private networks
When you create your AKS cluster, you can specify advanced networking settings. This approach lets you deploy the cluster into an existing Azure virtual network and subnets. One scenario is to deploy your AKS cluster into a private network connected to your on-premises environment and run services only accessible internally. For more information, see configure your own virtual network subnets with [Kubenet][use-kubenet] or [Azure CNI][advanced-networking].
@@ -143,7 +226,6 @@ Learn more about Kubernetes services at the [Kubernetes services documentation][
[kubectl-apply]: https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#apply
[kubernetes-services]: https://kubernetes.io/docs/concepts/services-networking/service/
-[aks-engine]: https://github.com/Azure/aks-engine
[advanced-networking]: configure-azure-cni.md
diff --git a/articles/aks/intro-kubernetes.md b/articles/aks/intro-kubernetes.md
index d5600d4d26487..f40ffb5308c25 100644
--- a/articles/aks/intro-kubernetes.md
+++ b/articles/aks/intro-kubernetes.md
@@ -149,7 +149,6 @@ Learn more about deploying and managing AKS with the Azure CLI Quickstart.
> [Deploy an AKS Cluster using Azure CLI][aks-quickstart-cli]
-[aks-engine]: https://github.com/Azure/aks-engine
[kubectl-overview]: https://kubernetes.io/docs/user-guide/kubectl-overview/
[compliance-doc]: https://azure.microsoft.com/overview/trusted-cloud/compliance/
diff --git a/articles/aks/keda-about.md b/articles/aks/keda-about.md
new file mode 100644
index 0000000000000..68e36648197dc
--- /dev/null
+++ b/articles/aks/keda-about.md
@@ -0,0 +1,79 @@
+---
+title: Kubernetes Event-driven Autoscaling (KEDA) (Preview)
+description: Simplified application autoscaling with Kubernetes Event-driven Autoscaling (KEDA) add-on.
+services: container-service
+author: tomkerkhove
+ms.topic: article
+ms.date: 05/24/2022
+ms.author: tomkerkhove
+---
+
+# Simplified application autoscaling with Kubernetes Event-driven Autoscaling (KEDA) add-on (Preview)
+
+Kubernetes Event-driven Autoscaling (KEDA) is a single-purpose and lightweight component that strives to make application autoscaling simple and is a CNCF Incubation project.
+
+It applies event-driven autoscaling to scale your application to meet demand in a sustainable and cost-efficient manner with scale-to-zero.
+
+The KEDA add-on makes it even easier by deploying a managed KEDA installation, providing you with [a rich catalog of 50+ KEDA scalers][keda-scalers] that you can scale your applications with on your Azure Kubernetes Services (AKS) cluster.
+
+[!INCLUDE [preview features callout](./includes/preview/preview-callout.md)]
+
+## Architecture
+
+[KEDA][keda] provides two main components:
+
+- **KEDA operator** allows end-users to scale workloads in/out from 0 to N instances with support for Kubernetes Deployments, Jobs, StatefulSets or any custom resource that defines `/scale` subresource.
+- **Metrics server** exposes external metrics to Horizontal Pod Autoscaler (HPA) in Kubernetes for autoscaling purposes such as messages in a Kafka topic, or number of events in an Azure event hub. Due to upstream limitations, KEDA must be the only installed metric adapter.
+
+![Diagram that shows the architecture of K E D A and how it extends Kubernetes instead of re-inventing the wheel.](./media/keda/architecture.png)
+
+Learn more about how KEDA works in the [official KEDA documentation][keda-architecture].
+
+## Installation and version
+
+KEDA can be added to your Azure Kubernetes Service (AKS) cluster by enabling the KEDA add-on using an [ARM template][keda-arm].
+
+The KEDA add-on provides a fully supported installation of KEDA that is integrated with AKS.
+
+[!INCLUDE [Current version callout](./includes/keda/current-version-callout.md)]
+
+## Capabilities and features
+
+KEDA provides the following capabilities and features:
+
+- Build sustainable and cost-efficient applications with scale-to-zero
+- Scale application workloads to meet demand using [a rich catalog of 50+ KEDA scalers][keda-scalers]
+- Autoscale applications with `ScaledObjects`, such as Deployments, StatefulSets or any custom resource that defines `/scale` subresource
+- Autoscale job-like workloads with `ScaledJobs`
+- Use production-grade security by decoupling autoscaling authentication from workloads
+- Bring-your-own external scaler to use tailor-made autoscaling decisions
+
+## Add-on limitations
+
+The KEDA AKS add-on has the following limitations:
+
+* KEDA's [HTTP add-on (preview)][keda-http-add-on] to scale HTTP workloads isn't installed with the extension, but can be deployed separately.
+* KEDA's [external scaler for Azure Cosmos DB][keda-cosmos-db-scaler] to scale based on Azure Cosmos DB change feed isn't installed with the extension, but can be deployed separately.
+* Only one metric server is allowed in the Kubernetes cluster. Because of that the KEDA add-on should be the only metrics server inside the cluster.
+ * Multiple KEDA installations aren't supported
+* Managed identity isn't supported.
+
+For general KEDA questions, we recommend [visiting the FAQ overview][keda-faq].
+
+## Next steps
+
+* [Enable the KEDA add-on with an ARM template][keda-arm]
+* [Autoscale a .NET Core worker processing Azure Service Bus Queue messages][keda-sample]
+
+
+[keda-azure-cli]: keda-deploy-addon-az-cli.md
+[keda-arm]: keda-deploy-add-on-arm.md
+
+
+[keda]: https://keda.sh/
+[keda-architecture]: https://keda.sh/docs/latest/concepts/
+[keda-faq]: https://keda.sh/docs/latest/faq/
+[keda-sample]: https://github.com/kedacore/sample-dotnet-worker-servicebus-queue
+[keda-scalers]: https://keda.sh/docs/scalers/
+[keda-http-add-on]: https://github.com/kedacore/http-add-on
+[keda-cosmos-db-scaler]: https://github.com/kedacore/external-scaler-azure-cosmos-db
diff --git a/articles/aks/keda-deploy-add-on-arm.md b/articles/aks/keda-deploy-add-on-arm.md
new file mode 100644
index 0000000000000..53421176639ec
--- /dev/null
+++ b/articles/aks/keda-deploy-add-on-arm.md
@@ -0,0 +1,157 @@
+---
+title: Deploy the Kubernetes Event-driven Autoscaling (KEDA) add-on by using an ARM template
+description: Use an ARM template to deploy the Kubernetes Event-driven Autoscaling (KEDA) add-on to Azure Kubernetes Service (AKS).
+services: container-service
+author: jahabibi
+ms.topic: article
+ms.date: 05/24/2022
+ms.author: jahabibi
+---
+
+# Deploy the Kubernetes Event-driven Autoscaling (KEDA) add-on by using ARM template
+
+This article shows you how to deploy the Kubernetes Event-driven Autoscaling (KEDA) add-on to Azure Kubernetes Service (AKS) by using an [ARM](../azure-resource-manager/templates/index.yml) template.
+
+[!INCLUDE [Current version callout](./includes/keda/current-version-callout.md)]
+
+[!INCLUDE [preview features callout](./includes/preview/preview-callout.md)]
+
+## Prerequisites
+
+> [!NOTE]
+> KEDA is currently only available in the `westcentralus` region.
+
+- An Azure subscription. If you don't have an Azure subscription, you can create a [free account](https://azure.microsoft.com/free).
+- [Azure CLI installed](/cli/azure/install-azure-cli).
+
+### Register the `AKS-KedaPreview` feature flag
+
+To use the KEDA, you must enable the `AKS-KedaPreview` feature flag on your subscription.
+
+```azurecli
+az feature register --name AKS-KedaPreview --namespace Microsoft.ContainerService
+```
+
+You can check on the registration status by using the `az feature list` command:
+
+```azurecli-interactive
+az feature list -o table --query "[?contains(name, 'Microsoft.ContainerService/AKS-KedaPreview')].{Name:name,State:properties.state}"
+```
+
+When ready, refresh the registration of the *Microsoft.ContainerService* resource provider by using the `az provider register` command:
+
+```azurecli-interactive
+az provider register --namespace Microsoft.ContainerService
+```
+
+## Deploy the KEDA add-on with Azure Resource Manager (ARM) templates
+
+The KEDA add-on can be enabled by deploying an AKS cluster with an Azure Resource Manager template and specifying the `workloadAutoScalerProfile` field:
+
+```json
+ "workloadAutoScalerProfile": {
+ "keda": {
+ "enabled": true
+ }
+ }
+```
+
+## Connect to your AKS cluster
+
+To connect to the Kubernetes cluster from your local computer, you use [kubectl][kubectl], the Kubernetes command-line client.
+
+If you use the Azure Cloud Shell, `kubectl` is already installed. You can also install it locally using the [az aks install-cli][az aks install-cli] command:
+
+```azurecli
+az aks install-cli
+```
+
+To configure `kubectl` to connect to your Kubernetes cluster, use the [az aks get-credentials][az aks get-credentials] command. The following example gets credentials for the AKS cluster named *MyAKSCluster* in the *MyResourceGroup*:
+
+```azurecli
+az aks get-credentials --resource-group MyResourceGroup --name MyAKSCluster
+```
+
+## Example deployment
+
+The following snippet is a sample deployment that creates a cluster with KEDA enabled with a single node pool comprised of three `DS2_v5` nodes.
+
+```json
+{
+ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
+ "contentVersion": "1.0.0.0",
+ "resources": [
+ {
+ "apiVersion": "2022-05-02-preview",
+ "dependsOn": [],
+ "type": "Microsoft.ContainerService/managedClusters",
+ "location": "westcentralus",
+ "name": "myAKSCluster",
+ "properties": {
+ "kubernetesVersion": "1.23.5",
+ "enableRBAC": true,
+ "dnsPrefix": "myAKSCluster",
+ "agentPoolProfiles": [
+ {
+ "name": "agentpool",
+ "osDiskSizeGB": 200,
+ "count": 3,
+ "enableAutoScaling": false,
+ "vmSize": "Standard_D2S_v5",
+ "osType": "Linux",
+ "storageProfile": "ManagedDisks",
+ "type": "VirtualMachineScaleSets",
+ "mode": "System",
+ "maxPods": 110,
+ "availabilityZones": [],
+ "nodeTaints": [],
+ "enableNodePublicIP": false
+ }
+ ],
+ "networkProfile": {
+ "loadBalancerSku": "standard",
+ "networkPlugin": "kubenet"
+ },
+ "workloadAutoScalerProfile": {
+ "keda": {
+ "enabled": true
+ }
+ }
+ },
+ "identity": {
+ "type": "SystemAssigned"
+ }
+ }
+ ]
+}
+```
+
+## Start scaling apps with KEDA
+
+Now that KEDA is installed, you can start autoscaling your apps with KEDA by using its custom resource definition has been defined (CRD).
+
+To learn more about KEDA CRDs, follow the official [KEDA documentation][keda-scalers] to define your scaler.
+
+## Clean Up
+
+To remove the resource group, and all related resources, use the [az group delete][az-group-delete] command:
+
+```azurecli
+az group delete --name MyResourceGroup
+```
+## Next steps
+
+This article showed you how to install the KEDA add-on on an AKS cluster, and then verify that it's installed and running. With the KEDA add-on installed on your cluster, you can [deploy a sample application][keda-sample] to start scaling apps
+
+
+[az-aks-create]: /cli/azure/aks#az-aks-create
+[az aks install-cli]: /cli/azure/aks#az-aks-install-cli
+[az aks get-credentials]: /cli/azure/aks#az-aks-get-credentials
+[az aks update]: /cli/azure/aks#az-aks-update
+[az-group-delete]: /cli/azure/group#az-group-delete
+
+
+[kubectl]: https://kubernetes.io/docs/user-guide/kubectl
+[keda]: https://keda.sh/
+[keda-scalers]: https://keda.sh/docs/scalers/
+[keda-sample]: https://github.com/kedacore/sample-dotnet-worker-servicebus-queue
diff --git a/articles/aks/keda-integrations.md b/articles/aks/keda-integrations.md
new file mode 100644
index 0000000000000..71b8c744bbb1a
--- /dev/null
+++ b/articles/aks/keda-integrations.md
@@ -0,0 +1,60 @@
+---
+title: Integrations with Kubernetes Event-driven Autoscaling (KEDA) on Azure Kubernetes Service (AKS) (Preview)
+description: Integrations with Kubernetes Event-driven Autoscaling (KEDA) on Azure Kubernetes Service (AKS) (Preview).
+services: container-service
+author: tomkerkhove
+ms.topic: article
+ms.date: 05/24/2022
+ms.author: tomkerkhove
+---
+
+# Integrations with Kubernetes Event-driven Autoscaling (KEDA) on Azure Kubernetes Service (AKS) (Preview)
+
+The Kubernetes Event-driven Autoscaling (KEDA) add-on integrates with features provided by Azure and open source projects.
+
+[!INCLUDE [preview features callout](./includes/preview/preview-callout.md)]
+
+> [!IMPORTANT]
+> Integrations with open source projects are not covered by the [AKS support policy][aks-support-policy].
+
+## Observe your autoscaling with Kubernetes events
+
+KEDA automatically emits Kubernetes events allowing customers to operate their application autoscaling.
+
+To learn about the available metrics, we recommend reading the [KEDA documentation][keda-event-docs].
+
+## Scalers for Azure services
+
+KEDA can integrate with various tools and services through [a rich catalog of 50+ KEDA scalers][keda-scalers]. It supports leading cloud platforms (such as Azure) and open-source technologies such as Redis and Kafka.
+
+It leverages the following scalers for Azure services:
+
+- [Azure Application Insights](https://keda.sh/docs/latest/scalers/azure-app-insights/)
+- [Azure Blob Storage](https://keda.sh/docs/latest/scalers/azure-storage-blob/)
+- [Azure Data Explorer](https://keda.sh/docs/latest/scalers/azure-data-explorer/)
+- [Azure Event Hubs](https://keda.sh/docs/latest/scalers/azure-event-hub/)
+- [Azure Log Analytics](https://keda.sh/docs/latest/scalers/azure-log-analytics/)
+- [Azure Monitor](https://keda.sh/docs/latest/scalers/azure-monitor/)
+- [Azure Pipelines](https://keda.sh/docs/latest/scalers/azure-pipelines/)
+- [Azure Service Bus](https://keda.sh/docs/latest/scalers/azure-service-bus/)
+- [Azure Storage Queue](https://keda.sh/docs/latest/scalers/azure-storage-queue/)
+
+Next to the built-in scalers, you can install external scalers yourself to autoscale on other Azure services:
+
+- [Azure Cosmos DB (Change feed)](https://github.com/kedacore/external-scaler-azure-cosmos-db)
+
+However, these external scalers aren't supported as part of the add-on and rely on community support.
+
+## Next steps
+
+* [Enable the KEDA add-on with an ARM template][keda-arm]
+* [Autoscale a .NET Core worker processing Azure Service Bus Queue message][keda-sample]
+
+
+[aks-support-policy]: support-policies.md
+[keda-arm]: keda-deploy-add-on-arm.md
+
+
+[keda-scalers]: https://keda.sh/docs/latest/scalers/
+[keda-event-docs]: https://keda.sh/docs/latest/operate/events/
+[keda-sample]: https://github.com/kedacore/sample-dotnet-worker-servicebus-queue
diff --git a/articles/aks/keda.md b/articles/aks/keda.md
deleted file mode 100644
index 2aa63d24d41bb..0000000000000
--- a/articles/aks/keda.md
+++ /dev/null
@@ -1,91 +0,0 @@
----
-title: KEDA add-on on Azure Kubernetes Service (AKS) (Preview)
-description: Use the KEDA add-on to deploy a managed KEDA instance on Azure Kubernetes Service (AKS).
-services: container-service
-author: jahabibi
-ms.topic: article
-ms.custom: event-tier1-build-2022
-ms.date: 05/13/2021
-ms.author: jahabibi
----
-
-# Simplified application autoscaling with Kubernetes Event-driven Autoscaling (KEDA) add-on (Preview)
-
-Kubernetes Event-driven Autoscaling (KEDA) is a single-purpose and lightweight component that strives to make application autoscaling simple and is a CNCF Incubation project.
-
-The KEDA add-on makes it even easier by deploying a managed KEDA installation, providing you with [a rich catalog of 40+ KEDA scalers](https://keda.sh/docs/latest/scalers/) that you can scale your applications with on your Azure Kubernetes Services (AKS) cluster.
-
-[!INCLUDE [preview features callout](./includes/preview/preview-callout.md)]
-
-## KEDA add-on overview
-
-[KEDA][keda] provides two main components:
-
-- **KEDA operator** allows end-users to scale workloads in/out from 0 to N instances with support for Kubernetes Deployments, Jobs, StatefulSets or any custom resource that defines `/scale` subresource.
-- **Metrics server** exposes external metrics to HPA in Kubernetes for autoscaling purposes such as messages in a Kafka topic, or number of events in an Azure event hub. Due to upstream limitations, this must be the only installed metric adapter.
-
-## Prerequisites
-
-- An Azure subscription. If you don't have an Azure subscription, you can create a [free account](https://azure.microsoft.com/free).
-- [Azure CLI installed](/cli/azure/install-azure-cli).
-
-## Deploy the KEDA add-on with Azure CLI
-
-The KEDA add-on can be enabled with the Azure CLI when deploying an AKS cluster.
-
-To do so, use the [az aks create][az-aks-create] command with the `--enable-keda` argument.
-
-```azurecli
-az aks create --resource-group MyResourceGroup --name MyAKSCluster --enable-keda
-```
-
-Additionally, KEDA can be deployed to an existing cluster via the [az aks update][az aks update] command.
-
-```azure cli
-az aks update --resource-group MyResourceGroup --name MyAKSCluster --enable-keda
-```
-
-## Connect to your AKS cluster
-
-To connect to the Kubernetes cluster from your local computer, you use [kubectl][kubectl], the Kubernetes command-line client.
-
-If you use the Azure Cloud Shell, `kubectl` is already installed. You can also install it locally using the [az aks install-cli][az aks install-cli] command:
-
-```azurecli
-az aks install-cli
-```
-
-To configure `kubectl` to connect to your Kubernetes cluster, use the [az aks get-credentials][az aks get-credentials] command. The following example gets credentials for the AKS cluster named *MyAKSCluster* in the *MyResourceGroup*:
-
-```azurecli
-az aks get-credentials --resource-group MyResourceGroup --name MyAKSCluster
-```
-
-## Use KEDA
-KEDA scaling will only work once a custom resource definition has been defined (CRD). To learn more about KEDA CRDs, follow the official [KEDA documentation][keda-scalers] to define your scaler.
-
-## Clean Up
-To remove KEDA, utilize the `--disable-keda` flag.
-
-```azurecli
-az aks update --resource-group MyResourceGroup --name MyAKSCluster --disable-keda
-```
-
-To remove the resource group, and all related resources, use the [az group delete][az-group-delete] command:
-
-```azurecli
-az group delete --name MyResourceGroup
-```
-
-
-
-[az-aks-create]: /cli/azure/aks#az-aks-create
-[az aks install-cli]: /cli/azure/aks#az-aks-install-cli
-[az aks get-credentials]: /cli/azure/aks#az-aks-get-credentials
-[az aks update]: /cli/azure/aks#az-aks-update
-[az-group-delete]: /cli/azure/group#az-group-delete
-
-
-[kubectl]: https://kubernetes.io/docs/user-guide/kubectl
-[keda]: https://keda.sh/
-[keda-scalers]: https://keda.sh/docs/scalers/
diff --git a/articles/aks/kubernetes-service-principal.md b/articles/aks/kubernetes-service-principal.md
index 55a74da813c46..02308f193943b 100644
--- a/articles/aks/kubernetes-service-principal.md
+++ b/articles/aks/kubernetes-service-principal.md
@@ -1,62 +1,34 @@
---
-title: Service principals for Azure Kubernetes Services (AKS)
-description: Create and manage an Azure Active Directory service principal for a cluster in Azure Kubernetes Service (AKS)
+title: Use a service principal with Azure Kubernetes Services (AKS)
+description: Create and manage an Azure Active Directory service principal with a cluster in Azure Kubernetes Service (AKS)
services: container-service
ms.topic: conceptual
-ms.date: 12/06/2021
+ms.date: 06/08/2022
ms.custom: devx-track-azurepowershell, devx-track-azurecli
#Customer intent: As a cluster operator, I want to understand how to create a service principal and delegate permissions for AKS to access required resources. In large enterprise environments, the user that deploys the cluster (or CI/CD system), may not have permissions to create this service principal automatically when the cluster is created.
---
-# Service principals with Azure Kubernetes Service (AKS)
+# Use a service principal with Azure Kubernetes Service (AKS)
-To interact with Azure APIs, an AKS cluster requires either an [Azure Active Directory (AD) service principal][aad-service-principal] or a [managed identity](use-managed-identity.md). A service principal or managed identity is needed to dynamically create and manage other Azure resources such as an Azure load balancer or container registry (ACR).
+To access other Azure Active Directory (Azure AD) resources, an AKS cluster requires either an [Azure Active Directory (AD) service principal][aad-service-principal] or a [managed identity][managed-identity-resources-overview]. A service principal or managed identity is needed to dynamically create and manage other Azure resources such as an Azure load balancer or container registry (ACR).
+
+Managed identities are the recommended way to authenticate with other resources in Azure, and is the default authentication method for your AKS cluster. For more information about using a managed identity with your cluster, see [Use a system-assigned managed identity][use-managed-identity].
This article shows how to create and use a service principal for your AKS clusters.
## Before you begin
-To create an Azure AD service principal, you must have permissions to register an application with your Azure AD tenant, and to assign the application to a role in your subscription. If you don't have the necessary permissions, you might need to ask your Azure AD or subscription administrator to assign the necessary permissions, or pre-create a service principal for you to use with the AKS cluster.
-
-If you are using a service principal from a different Azure AD tenant, there are additional considerations around the permissions available when you deploy the cluster. You may not have the appropriate permissions to read and write directory information. For more information, see [What are the default user permissions in Azure Active Directory?][azure-ad-permissions]
-
-### [Azure CLI](#tab/azure-cli)
-
-You also need the Azure CLI version 2.0.59 or later installed and configured. Run `az --version` to find the version. If you need to install or upgrade, see [Install Azure CLI][install-azure-cli].
-
-### [Azure PowerShell](#tab/azure-powershell)
-
-You also need Azure PowerShell version 5.0.0 or later installed. Run `Get-InstalledModule -Name Az` to find the version. If you need to install or upgrade, see [Install the Azure Az PowerShell module][install-the-azure-az-powershell-module].
+To create an Azure AD service principal, you must have permissions to register an application with your Azure AD tenant, and to assign the application to a role in your subscription. If you don't have the necessary permissions, you need to ask your Azure AD or subscription administrator to assign the necessary permissions, or pre-create a service principal for you to use with the AKS cluster.
----
-
-## Automatically create and use a service principal
-
-### [Azure CLI](#tab/azure-cli)
+If you're using a service principal from a different Azure AD tenant, there are other considerations around the permissions available when you deploy the cluster. You may not have the appropriate permissions to read and write directory information. For more information, see [What are the default user permissions in Azure Active Directory?][azure-ad-permissions]
-When you create an AKS cluster in the Azure portal or using the [az aks create][az-aks-create] command, Azure creates a managed identity.
+## Prerequisites
-In the following Azure CLI example, a service principal is not specified. In this scenario, the Azure CLI creates a managed identity for the AKS cluster.
+Azure CLI version 2.0.59 or later. Run `az --version` to find the version. If you need to install or upgrade, see [Install Azure CLI][install-azure-cli].
-```azurecli
-az aks create --name myAKSCluster --resource-group myResourceGroup
-```
-
-### [Azure PowerShell](#tab/azure-powershell)
+Azure PowerShell version 5.0.0 or later. Run `Get-InstalledModule -Name Az` to find the version. If you need to install or upgrade, see [Install the Azure Az PowerShell module][install-the-azure-az-powershell-module].
-When you create an AKS cluster in the Azure portal or using the [New-AzAksCluster][new-azakscluster] command, Azure can generate a new managed identity .
-
-In the following Azure PowerShell example, a service principal is not specified. In this scenario, Azure PowerShell creates a managed identity for the AKS cluster.
-
-```azurepowershell-interactive
-New-AzAksCluster -Name myAKSCluster -ResourceGroupName myResourceGroup
-```
-
-> [!NOTE]
-> For error "Service principal clientID: 00000000-0000-0000-0000-000000000000 not found in Active Directory tenant 00000000-0000-0000-0000-000000000000", see [Additional considerations](#additional-considerations) to remove the `acsServicePrincipal.json` file.
-
----
## Manually create a service principal
### [Azure CLI](#tab/azure-cli)
@@ -67,7 +39,7 @@ To manually create a service principal with the Azure CLI, use the [az ad sp cre
az ad sp create-for-rbac --name myAKSClusterServicePrincipal
```
-The output is similar to the following example. Make a note of your own `appId` and `password`. These values are used when you create an AKS cluster in the next section.
+The output is similar to the following example. Copy the values for `appId` and `password`. These values are used when you create an AKS cluster in the next section.
```json
{
@@ -99,7 +71,7 @@ Id : 559513bd-0c19-4c1a-87cd-851a26afd5fc
Type :
```
-To decrypt the value stored in the **Secret** secure string, you use the following example.
+To decrypt the value stored in the **Secret** secure string, run the following command:
```azurepowershell-interactive
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($sp.Secret)
@@ -125,14 +97,7 @@ az aks create \
```
> [!NOTE]
-> If you're using an existing service principal with customized secret, ensure the secret is no longer than 190 bytes.
-
-If you deploy an AKS cluster using the Azure portal, on the *Authentication* page of the **Create Kubernetes cluster** dialog, choose to **Configure service principal**. Select **Use existing**, and specify the following values:
-
-- **Service principal client ID** is your *appId*
-- **Service principal client secret** is the *password* value
-
-![Image of browsing to Azure Vote](media/kubernetes-service-principal/portal-configure-service-principal.png)
+> If you're using an existing service principal with customized secret, ensure the secret is not longer than 190 bytes.
### [Azure PowerShell](#tab/azure-powershell)
@@ -151,13 +116,6 @@ New-AzAksCluster -ResourceGroupName myResourceGroup -Name myAKSCluster -ServiceP
> [!NOTE]
> If you're using an existing service principal with customized secret, ensure the secret is no longer than 190 bytes.
-If you deploy an AKS cluster using the Azure portal, on the *Authentication* page of the **Create Kubernetes cluster** dialog, choose to **Configure service principal**. Select **Use existing**, and specify the following values:
-
-- **Service principal client ID** is your *ApplicationId*
-- **Service principal client secret** is the decrypted *Secret* value
-
-![Image of browsing to Azure Vote](media/kubernetes-service-principal/portal-configure-service-principal.png)
-
---
## Delegate access to other Azure resources
@@ -188,9 +146,9 @@ The `Scope` for a resource needs to be a full resource ID, such as */subscriptio
> [!NOTE]
> If you have removed the Contributor role assignment from the node resource group, the operations below may fail.
-> Permission grants to clusters using System Managed Identity may take up 60 minutes to populate.
+> Permission granted to a cluster using a system-assigned managed identity may take up 60 minutes to populate.
-The following sections detail common delegations that you may need to make.
+The following sections detail common delegations that you may need to assign.
### Azure Container Registry
@@ -206,11 +164,11 @@ If you use Azure Container Registry (ACR) as your container image store, you nee
### Networking
-You may use advanced networking where the virtual network and subnet or public IP addresses are in another resource group. Assign the [Network Contributor][rbac-network-contributor] built-in role on the subnet within the virtual network. Alternatively, you can create a [custom role][rbac-custom-role] with permissions to access the network resources in that resource group. See [AKS service permissions][aks-permissions] for more details.
+You may use advanced networking where the virtual network and subnet or public IP addresses are in another resource group. Assign the [Network Contributor][rbac-network-contributor] built-in role on the subnet within the virtual network. Alternatively, you can create a [custom role][rbac-custom-role] with permissions to access the network resources in that resource group. For more information, see [AKS service permissions][aks-permissions].
### Storage
-You may need to access existing Disk resources in another resource group. Assign one of the following set of role permissions:
+If you need to access existing disk resources in another resource group, assign one of the following set of role permissions:
- Create a [custom role][rbac-custom-role] and define the following role permissions:
- *Microsoft.Compute/disks/read*
@@ -219,24 +177,24 @@ You may need to access existing Disk resources in another resource group. Assign
### Azure Container Instances
-If you use Virtual Kubelet to integrate with AKS and choose to run Azure Container Instances (ACI) in resource group separate to the AKS cluster, the AKS service principal must be granted *Contributor* permissions on the ACI resource group.
+If you use Virtual Kubelet to integrate with AKS and choose to run Azure Container Instances (ACI) in resource group separate from the AKS cluster, the AKS cluster service principal must be granted *Contributor* permissions on the ACI resource group.
-## Additional considerations
+## Other considerations
### [Azure CLI](#tab/azure-cli)
-When using AKS and Azure AD service principals, keep the following considerations in mind.
+When using AKS and an Azure AD service principal, consider the following:
-- The service principal for Kubernetes is a part of the cluster configuration. However, don't use the identity to deploy the cluster.
+- The service principal for Kubernetes is a part of the cluster configuration. However, don't use this identity to deploy the cluster.
- By default, the service principal credentials are valid for one year. You can [update or rotate the service principal credentials][update-credentials] at any time.
- Every service principal is associated with an Azure AD application. The service principal for a Kubernetes cluster can be associated with any valid Azure AD application name (for example: *https://www.contoso.org/example*). The URL for the application doesn't have to be a real endpoint.
- When you specify the service principal **Client ID**, use the value of the `appId`.
- On the agent node VMs in the Kubernetes cluster, the service principal credentials are stored in the file `/etc/kubernetes/azure.json`
- When you use the [az aks create][az-aks-create] command to generate the service principal automatically, the service principal credentials are written to the file `~/.azure/aksServicePrincipal.json` on the machine used to run the command.
-- If you do not specifically pass a service principal in additional AKS CLI commands, the default service principal located at `~/.azure/aksServicePrincipal.json` is used.
-- You can also optionally remove the aksServicePrincipal.json file, and AKS will create a new service principal.
-- When you delete an AKS cluster that was created by [az aks create][az-aks-create], the service principal that was created automatically is not deleted.
- - To delete the service principal, query for your cluster *servicePrincipalProfile.clientId* and then delete with [az ad sp delete][az-ad-sp-delete]. Replace the following resource group and cluster names with your own values:
+- If you don't specify a service principal with AKS CLI commands, the default service principal located at `~/.azure/aksServicePrincipal.json` is used.
+- You can optionally remove the `aksServicePrincipal.json` file, and AKS creates a new service principal.
+- When you delete an AKS cluster that was created by [az aks create][az-aks-create], the service principal created automatically isn't deleted.
+ - To delete the service principal, query for your clusters *servicePrincipalProfile.clientId* and then delete it using the [az ad sp delete][az-ad-sp-delete] command. Replace the values for the `-g` parameter for the resource group name, and `-n` parameter for the cluster name:
```azurecli
az ad sp delete --id $(az aks show -g myResourceGroup -n myAKSCluster --query servicePrincipalProfile.clientId -o tsv)
@@ -244,18 +202,18 @@ When using AKS and Azure AD service principals, keep the following consideration
### [Azure PowerShell](#tab/azure-powershell)
-When using AKS and Azure AD service principals, keep the following considerations in mind.
+When using AKS and an Azure AD service principal, consider the following:
-- The service principal for Kubernetes is a part of the cluster configuration. However, don't use the identity to deploy the cluster.
+- The service principal for Kubernetes is a part of the cluster configuration. However, don't use this identity to deploy the cluster.
- By default, the service principal credentials are valid for one year. You can [update or rotate the service principal credentials][update-credentials] at any time.
- Every service principal is associated with an Azure AD application. The service principal for a Kubernetes cluster can be associated with any valid Azure AD application name (for example: *https://www.contoso.org/example*). The URL for the application doesn't have to be a real endpoint.
- When you specify the service principal **Client ID**, use the value of the `ApplicationId`.
- On the agent node VMs in the Kubernetes cluster, the service principal credentials are stored in the file `/etc/kubernetes/azure.json`
- When you use the [New-AzAksCluster][new-azakscluster] command to generate the service principal automatically, the service principal credentials are written to the file `~/.azure/acsServicePrincipal.json` on the machine used to run the command.
-- If you do not specifically pass a service principal in additional AKS PowerShell commands, the default service principal located at `~/.azure/acsServicePrincipal.json` is used.
-- You can also optionally remove the acsServicePrincipal.json file, and AKS will create a new service principal.
-- When you delete an AKS cluster that was created by [New-AzAksCluster][new-azakscluster], the service principal that was created automatically is not deleted.
- - To delete the service principal, query for your cluster *ServicePrincipalProfile.ClientId* and then delete with [Remove-AzADServicePrincipal][remove-azadserviceprincipal]. Replace the following resource group and cluster names with your own values:
+- If you don't specify a service principal with AKS PowerShell commands, the default service principal located at `~/.azure/acsServicePrincipal.json` is used.
+- You can optionally remove the `acsServicePrincipal.json` file, and AKS creates a new service principal.
+- When you delete an AKS cluster that was created by [New-AzAksCluster][new-azakscluster], the service principal created automatically isn't deleted.
+ - To delete the service principal, query for your clusters *ServicePrincipalProfile.ClientId* and then delete it using the [Remove-AzADServicePrincipal][remove-azadserviceprincipal] command. Replace the values for the `-ResourceGroupName` parameter for the resource group name, and `-Name` parameter for the cluster name:
```azurepowershell-interactive
$ClientId = (Get-AzAksCluster -ResourceGroupName myResourceGroup -Name myAKSCluster ).ServicePrincipalProfile.ClientId
@@ -267,7 +225,7 @@ When using AKS and Azure AD service principals, keep the following consideration
### [Azure CLI](#tab/azure-cli)
-The service principal credentials for an AKS cluster are cached by the Azure CLI. If these credentials have expired, you encounter errors deploying AKS clusters. The following error message when running [az aks create][az-aks-create] may indicate a problem with the cached service principal credentials:
+The service principal credentials for an AKS cluster are cached by the Azure CLI. If these credentials have expired, you encounter errors during deployment of the AKS cluster. The following error message when running [az aks create][az-aks-create] may indicate a problem with the cached service principal credentials:
```console
Operation failed with status: 'Bad Request'.
@@ -275,17 +233,17 @@ Details: The credentials in ServicePrincipalProfile were invalid. Please see htt
(Details: adal: Refresh request failed. Status Code = '401'.
```
-Check the age of the credentials file using the following command:
+Check the age of the credentials file by running the following command:
```console
ls -la $HOME/.azure/aksServicePrincipal.json
```
-The default expiration time for the service principal credentials is one year. If your *aksServicePrincipal.json* file is older than one year, delete the file and try to deploy an AKS cluster again.
+The default expiration time for the service principal credentials is one year. If your *aksServicePrincipal.json* file is older than one year, delete the file and retry deploying the AKS cluster.
### [Azure PowerShell](#tab/azure-powershell)
-The service principal credentials for an AKS cluster are cached by Azure PowerShell. If these credentials have expired, you encounter errors deploying AKS clusters. The following error message when running [New-AzAksCluster][new-azakscluster] may indicate a problem with the cached service principal credentials:
+The service principal credentials for an AKS cluster are cached by Azure PowerShell. If these credentials have expired, you encounter errors during deployment of the AKS cluster. The following error message when running [New-AzAksCluster][new-azakscluster] may indicate a problem with the cached service principal credentials:
```console
Operation failed with status: 'Bad Request'.
@@ -293,13 +251,13 @@ Details: The credentials in ServicePrincipalProfile were invalid. Please see htt
(Details: adal: Refresh request failed. Status Code = '401'.
```
-Check the age of the credentials file using the following command:
+Check the age of the credentials file by running the following command:
```azurepowershell-interactive
Get-ChildItem -Path $HOME/.azure/aksServicePrincipal.json
```
-The default expiration time for the service principal credentials is one year. If your *aksServicePrincipal.json* file is older than one year, delete the file and try to deploy an AKS cluster again.
+The default expiration time for the service principal credentials is one year. If your *aksServicePrincipal.json* file is older than one year, delete the file and retry deploying the AKS cluster.
---
@@ -337,3 +295,5 @@ For information on how to update the credentials, see [Update or rotate the cred
[new-azroleassignment]: /powershell/module/az.resources/new-azroleassignment
[set-azakscluster]: /powershell/module/az.aks/set-azakscluster
[remove-azadserviceprincipal]: /powershell/module/az.resources/remove-azadserviceprincipal
+[use-managed-identity]: use-managed-identity.md
+[managed-identity-resources-overview]: ..//active-directory/managed-identities-azure-resources/overview.md
diff --git a/articles/aks/learn/quick-windows-container-deploy-cli.md b/articles/aks/learn/quick-windows-container-deploy-cli.md
index 6d9c53d57c983..fadef3afb8f44 100644
--- a/articles/aks/learn/quick-windows-container-deploy-cli.md
+++ b/articles/aks/learn/quick-windows-container-deploy-cli.md
@@ -97,7 +97,6 @@ az aks create \
--generate-ssh-keys \
--windows-admin-username $WINDOWS_USERNAME \
--vm-set-type VirtualMachineScaleSets \
- --kubernetes-version 1.20.7 \
--network-plugin azure
```
@@ -302,9 +301,6 @@ spec:
limits:
cpu: 1
memory: 800M
- requests:
- cpu: .1
- memory: 300M
ports:
- containerPort: 80
selector:
diff --git a/articles/aks/learn/quick-windows-container-deploy-powershell.md b/articles/aks/learn/quick-windows-container-deploy-powershell.md
index e4fed7b2564f2..e18be108d1a9f 100644
--- a/articles/aks/learn/quick-windows-container-deploy-powershell.md
+++ b/articles/aks/learn/quick-windows-container-deploy-powershell.md
@@ -211,9 +211,6 @@ spec:
limits:
cpu: 1
memory: 800M
- requests:
- cpu: .1
- memory: 300M
ports:
- containerPort: 80
selector:
diff --git a/articles/aks/load-balancer-standard.md b/articles/aks/load-balancer-standard.md
index d05184f253085..1e36ee7f04bf8 100644
--- a/articles/aks/load-balancer-standard.md
+++ b/articles/aks/load-balancer-standard.md
@@ -378,7 +378,6 @@ Learn more about using Internal Load Balancer for Inbound traffic at the [AKS In
[kubectl-get]: https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#get
[kubectl-apply]: https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#apply
[kubernetes-services]: https://kubernetes.io/docs/concepts/services-networking/service/
-[aks-engine]: https://github.com/Azure/aks-engine
[advanced-networking]: configure-azure-cni.md
diff --git a/articles/aks/media/keda/architecture.png b/articles/aks/media/keda/architecture.png
new file mode 100644
index 0000000000000..b5751183644dd
Binary files /dev/null and b/articles/aks/media/keda/architecture.png differ
diff --git a/articles/aks/media/release-tracker/regional-status.png b/articles/aks/media/release-tracker/regional-status.png
new file mode 100644
index 0000000000000..6f4b21d9b0329
Binary files /dev/null and b/articles/aks/media/release-tracker/regional-status.png differ
diff --git a/articles/aks/media/release-tracker/sdp-process.png b/articles/aks/media/release-tracker/sdp-process.png
new file mode 100644
index 0000000000000..1618aeb0e37d2
Binary files /dev/null and b/articles/aks/media/release-tracker/sdp-process.png differ
diff --git a/articles/aks/monitor-aks.md b/articles/aks/monitor-aks.md
index 7cf77bdf7b792..9ffa5bdf70617 100644
--- a/articles/aks/monitor-aks.md
+++ b/articles/aks/monitor-aks.md
@@ -41,7 +41,7 @@ You require at least one Log Analytics workspace to support Container insights a
If you're just getting started with Azure Monitor, then start with a single workspace and consider creating additional workspaces as your requirements evolve. Many environments will use a single workspace for all the Azure resources they monitor. You can even share a workspace used by [Microsoft Defender for Cloud and Microsoft Sentinel](../azure-monitor/vm/monitor-virtual-machine-security.md), although many customers choose to segregate their availability and performance telemetry from security data.
-See [Designing your Azure Monitor Logs deployment](../azure-monitor/logs/design-logs-deployment.md) for details on logic that you should consider for designing a workspace configuration.
+See [Designing your Azure Monitor Logs deployment](../azure-monitor/logs/workspace-design.md) for details on logic that you should consider for designing a workspace configuration.
### Enable container insights
When you enable Container insights for your AKS cluster, it deploys a containerized version of the [Log Analytics agent](../agents/../azure-monitor/agents/log-analytics-agent.md) that sends data to Azure Monitor. There are multiple methods to enable it depending whether you're working with a new or existing AKS cluster. See [Enable Container insights](../azure-monitor/containers/container-insights-onboard.md) for prerequisites and configuration options.
diff --git a/articles/aks/nat-gateway.md b/articles/aks/nat-gateway.md
index 75d5ff05ea8f2..35ff3e9b45cd8 100644
--- a/articles/aks/nat-gateway.md
+++ b/articles/aks/nat-gateway.md
@@ -1,5 +1,5 @@
---
-title: Managed NAT Gateway (preview)
+title: Managed NAT Gateway
description: Learn how to create an AKS cluster with managed NAT integration
services: container-service
ms.topic: article
@@ -7,56 +7,22 @@ ms.date: 10/26/2021
ms.author: juda
---
-# Managed NAT Gateway (preview)
+# Managed NAT Gateway
Whilst AKS customers are able to route egress traffic through an Azure Load Balancer, there are limitations on the amount of outbound flows of traffic that is possible.
-Azure NAT Gateway allows up to 64,000 outbound UDP and TCP traffic flows per IP address with a maximum of 16 IP addresses.
+Azure NAT Gateway allows up to 64,512 outbound UDP and TCP traffic flows per IP address with a maximum of 16 IP addresses.
This article will show you how to create an AKS cluster with a Managed NAT Gateway for egress traffic.
-[!INCLUDE [preview features callout](./includes/preview/preview-callout.md)]
## Before you begin
To use Managed NAT gateway, you must have the following:
* The latest version of the Azure CLI
-* The `aks-preview` extension version 0.5.31 or later
* Kubernetes version 1.20.x or above
-### Install aks-preview CLI extension
-
-You also need the *aks-preview* Azure CLI extension version 0.5.31 or later. Install the *aks-preview* Azure CLI extension by using the [az extension add][az-extension-add] command. Or install any available updates by using the [az extension update][az-extension-update] command.
-
-```azurecli-interactive
-# Install the aks-preview extension
-az extension add --name aks-preview
-
-# Update the extension to make sure you have the latest version installed
-az extension update --name aks-preview
-```
-
-### Register the `AKS-NATGatewayPreview` feature flag
-
-To use the NAT Gateway feature, you must enable the `AKS-NATGatewayPreview` feature flag on your subscription.
-
-```azurecli
-az feature register --namespace "Microsoft.ContainerService" --name "AKS-NATGatewayPreview"
-```
-You can check on the registration status by using the [az feature list][az-feature-list] command:
-
-```azurecli-interactive
-az feature list -o table --query "[?contains(name, 'Microsoft.ContainerService/AKS-NATGatewayPreview')].{Name:name,State:properties.state}"
-```
-
-When ready, refresh the registration of the *Microsoft.ContainerService* resource provider by using the [az provider register][az-provider-register] command:
-
-```azurecli-interactive
-az provider register --namespace Microsoft.ContainerService
-```
-
-
## Create an AKS cluster with a Managed NAT Gateway
To create an AKS cluster with a new Managed NAT Gateway, use `--outbound-type managedNATGateway` as well as `--nat-gateway-managed-outbound-ip-count` and `--nat-gateway-idle-timeout` when running `az aks create`. The following example creates a *myresourcegroup* resource group, then creates a *natcluster* AKS cluster in *myresourcegroup* with a Managed NAT Gateway, two outbound IPs, and an idle timeout of 30 seconds.
diff --git a/articles/aks/node-auto-repair.md b/articles/aks/node-auto-repair.md
index c0d47f242d35a..932ee79b7ecbb 100644
--- a/articles/aks/node-auto-repair.md
+++ b/articles/aks/node-auto-repair.md
@@ -35,7 +35,7 @@ If AKS identifies an unhealthy node that remains unhealthy for 10 minutes, AKS t
1. Reboot the node.
1. If the reboot is unsuccessful, reimage the node.
-1. If the reimage is unsuccessful, redploy the node.
+1. If the reimage is unsuccessful, redeploy the node.
Alternative remediations are investigated by AKS engineers if auto-repair is unsuccessful.
diff --git a/articles/aks/open-service-mesh-about.md b/articles/aks/open-service-mesh-about.md
index c9162ceac7a2d..22e7b77af38f7 100644
--- a/articles/aks/open-service-mesh-about.md
+++ b/articles/aks/open-service-mesh-about.md
@@ -32,7 +32,7 @@ OSM provides the following capabilities and features:
- Define and execute fine grained access control policies for services.
- Monitor and debug services using observability and insights into application metrics.
- Integrate with external certificate management.
-- Integrates with existing ingress solutions such as the [Azure Gateway Ingress Controller][agic], [NGINX][nginx], and [Contour][contour]. For more details on how ingress works with OSM, see [Using Ingress to manage external access to services within the cluster][osm-ingress]. For an example on integrating OSM with Contour for ingress, see [Ingress with Contour][osm-contour]. For an example on integrating OSM with ingress controllers that use the `networking.k8s.io/v1` API, such as NGINX, see [Ingress with Kubernetes Nginx Ingress Controller][osm-nginx].
+- Integrates with existing ingress solutions such as [NGINX][nginx], [Contour][contour], and [Web Application Routing][web-app-routing]. For more details on how ingress works with OSM, see [Using Ingress to manage external access to services within the cluster][osm-ingress]. For an example on integrating OSM with Contour for ingress, see [Ingress with Contour][osm-contour]. For an example on integrating OSM with ingress controllers that use the `networking.k8s.io/v1` API, such as NGINX, see [Ingress with Kubernetes Nginx Ingress Controller][osm-nginx]. For more details on using Web Application Routing, which automatically integrates with OSM, see [Web Application Routing][web-app-routing].
## Example scenarios
@@ -64,9 +64,9 @@ After enabling the OSM add-on using the [Azure CLI][osm-azure-cli] or a [Bicep t
[osm-onboard-app]: https://release-v1-0.docs.openservicemesh.io/docs/guides/app_onboarding/
[ip-tables-redirection]: https://docs.openservicemesh.io/docs/guides/traffic_management/iptables_redirection/
[global-exclusion]: https://docs.openservicemesh.io/docs/guides/traffic_management/iptables_redirection/#global-outbound-ip-range-exclusions
-[agic]: ../application-gateway/ingress-controller-overview.md
[nginx]: https://github.com/kubernetes/ingress-nginx
[contour]: https://projectcontour.io/
[osm-ingress]: https://release-v1-0.docs.openservicemesh.io/docs/guides/traffic_management/ingress/
[osm-contour]: https://release-v1-0.docs.openservicemesh.io/docs/demos/ingress_contour
[osm-nginx]: https://release-v1-0.docs.openservicemesh.io/docs/demos/ingress_k8s_nginx
+[web-app-routing]: web-app-routing.md
\ No newline at end of file
diff --git a/articles/aks/open-service-mesh-integrations.md b/articles/aks/open-service-mesh-integrations.md
index 0ebde87b0afa1..94769380bbb2c 100644
--- a/articles/aks/open-service-mesh-integrations.md
+++ b/articles/aks/open-service-mesh-integrations.md
@@ -15,7 +15,7 @@ The Open Service Mesh (OSM) add-on integrates with features provided by Azure as
## Ingress
-Ingress allows for traffic external to the mesh to be routed to services within the mesh. With OSM, you can configure most ingress solutions to work with your mesh, but OSM works best with either [NGINX ingress][osm-nginx] or [Contour ingress][osm-contour]. Open source projects integrating with OSM, including NGINX ingress and Contour ingress, are not covered by the [AKS support policy][aks-support-policy].
+Ingress allows for traffic external to the mesh to be routed to services within the mesh. With OSM, you can configure most ingress solutions to work with your mesh, but OSM works best with [Web Application Routing][web-app-routing], [NGINX ingress][osm-nginx], or [Contour ingress][osm-contour]. Open source projects integrating with OSM, including NGINX ingress and Contour ingress, are not covered by the [AKS support policy][aks-support-policy].
Using [Azure Gateway Ingress Controller (AGIC)][agic] for ingress with OSM is not supported and not recommended.
@@ -101,4 +101,5 @@ OSM has several types of certificates it uses to operate on your AKS cluster. OS
[osm-cert-manager]: https://release-v1-0.docs.openservicemesh.io/docs/guides/certificates/#using-cert-manager
[open-source-integrations]: open-service-mesh-integrations.md#additional-open-source-integrations
[osm-traffic-management-example]: https://github.com/MicrosoftDocs/azure-docs/pull/81085/files
-[osm-tresor]: https://release-v1-0.docs.openservicemesh.io/docs/guides/certificates/#using-osms-tresor-certificate-issuer
\ No newline at end of file
+[osm-tresor]: https://release-v1-0.docs.openservicemesh.io/docs/guides/certificates/#using-osms-tresor-certificate-issuer
+[web-app-routing]: web-app-routing.md
\ No newline at end of file
diff --git a/articles/aks/open-service-mesh-troubleshoot.md b/articles/aks/open-service-mesh-troubleshoot.md
index 219ff4d5e89ca..782db5a337786 100644
--- a/articles/aks/open-service-mesh-troubleshoot.md
+++ b/articles/aks/open-service-mesh-troubleshoot.md
@@ -103,7 +103,7 @@ aks-osm-webhook-osm 1 102m
### Check for the service and the CA bundle of the Validating webhook
```azurecli-interactive
-kubectl get ValidatingWebhookConfiguration aks-osm-webhook-osm -o json | jq '.webhooks[0].clientConfig.service'
+kubectl get ValidatingWebhookConfiguration aks-osm-validator-mesh-osm -o json | jq '.webhooks[0].clientConfig.service'
```
A well configured Validating Webhook Configuration would look exactly like this:
diff --git a/articles/aks/operator-best-practices-cluster-security.md b/articles/aks/operator-best-practices-cluster-security.md
index 63fa9bc59c139..6d7b1ae749fb2 100644
--- a/articles/aks/operator-best-practices-cluster-security.md
+++ b/articles/aks/operator-best-practices-cluster-security.md
@@ -141,7 +141,7 @@ AppArmor profiles are added using the `apparmor_parser` command.
spec:
containers:
- name: hello
- image: mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11
+ image: mcr.microsoft.com/dotnet/runtime-deps:6.0
command: [ "sh", "-c", "echo 'Hello AppArmor!' && sleep 1h" ]
```
@@ -216,7 +216,7 @@ To see seccomp in action, create a filter that prevents changing permissions on
spec:
containers:
- name: chmod
- image: mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11
+ image: mcr.microsoft.com/dotnet/runtime-deps:6.0
command:
- "chmod"
args:
@@ -239,7 +239,7 @@ To see seccomp in action, create a filter that prevents changing permissions on
localhostProfile: prevent-chmod
containers:
- name: chmod
- image: mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11
+ image: mcr.microsoft.com/dotnet/runtime-deps:6.0
command:
- "chmod"
args:
diff --git a/articles/aks/policy-reference.md b/articles/aks/policy-reference.md
index 4b73dc93c0862..d73984a6d03c9 100644
--- a/articles/aks/policy-reference.md
+++ b/articles/aks/policy-reference.md
@@ -25,10 +25,6 @@ the link in the **Version** column to view the source on the
[!INCLUDE [azure-policy-reference-rp-aks-containerservice](../../includes/policy/reference/byrp/microsoft.containerservice.md)]
-### AKS Engine
-
-[!INCLUDE [azure-policy-reference-rp-aks-aksengine](../../includes/policy/reference/byrp/aks-engine.md)]
-
## Next steps
- See the built-ins on the [Azure Policy GitHub repo](https://github.com/Azure/azure-policy).
diff --git a/articles/aks/private-clusters.md b/articles/aks/private-clusters.md
index 94723e3c13bbb..8cca35c58e576 100644
--- a/articles/aks/private-clusters.md
+++ b/articles/aks/private-clusters.md
@@ -3,7 +3,7 @@ title: Create a private Azure Kubernetes Service cluster
description: Learn how to create a private Azure Kubernetes Service (AKS) cluster
services: container-service
ms.topic: article
-ms.date: 01/12/2022
+ms.date: 05/27/2022
---
@@ -150,6 +150,9 @@ As mentioned, virtual network peering is one way to access your private cluster.
3. In scenarios where the VNet containing your cluster has custom DNS settings (4), cluster deployment fails unless the private DNS zone is linked to the VNet that contains the custom DNS resolvers (5). This link can be created manually after the private zone is created during cluster provisioning or via automation upon detection of creation of the zone using event-based deployment mechanisms (for example, Azure Event Grid and Azure Functions).
+> [!NOTE]
+> Conditional Forwarding doesn't support subdomains.
+
> [!NOTE]
> If you are using [Bring Your Own Route Table with kubenet](./configure-kubenet.md#bring-your-own-subnet-and-route-table-with-kubenet) and Bring Your Own DNS with Private Cluster, the cluster creation will fail. You will need to associate the [RouteTable](./configure-kubenet.md#bring-your-own-subnet-and-route-table-with-kubenet) in the node resource group to the subnet after the cluster creation failed, in order to make the creation successful.
diff --git a/articles/aks/quickstart-dapr.md b/articles/aks/quickstart-dapr.md
index c3d032a3148c7..fe931410894ed 100644
--- a/articles/aks/quickstart-dapr.md
+++ b/articles/aks/quickstart-dapr.md
@@ -1,6 +1,6 @@
---
-title: Deploy an application with the Dapr cluster extension for Azure Kubernetes Service (AKS)
-description: Use the Dapr cluster extension for Azure Kubernetes Service (AKS) to deploy an application
+title: Deploy an application with the Dapr cluster extension for Azure Kubernetes Service (AKS) or Arc-enabled Kubernetes
+description: Use the Dapr cluster extension for Azure Kubernetes Service (AKS) or Arc-enabled Kubernetes to deploy an application
author: nickomang
ms.author: nickoman
ms.service: container-service
@@ -9,15 +9,15 @@ ms.date: 05/03/2022
ms.custom: template-quickstart, mode-other, event-tier1-build-2022
---
-# Quickstart: Deploy an application using the Dapr cluster extension for Azure Kubernetes Service (AKS)
+# Quickstart: Deploy an application using the Dapr cluster extension for Azure Kubernetes Service (AKS) or Arc-enabled Kubernetes
-In this quickstart, you will get familiar with using the [Dapr cluster extension][dapr-overview] in an AKS cluster. You will be deploying a hello world example, consisting of a Python application that generates messages and a Node application that consumes and persists them.
+In this quickstart, you will get familiar with using the [Dapr cluster extension][dapr-overview] in an AKS or Arc-enabled Kubernetes cluster. You will be deploying a hello world example, consisting of a Python application that generates messages and a Node application that consumes and persists them.
## Prerequisites
* An Azure subscription. If you don't have an Azure subscription, you can create a [free account](https://azure.microsoft.com/free).
* [Azure CLI installed](/cli/azure/install-azure-cli).
-* An AKS cluster with the [Dapr cluster extension][dapr-overview] enabled
+* An AKS or Arc-enabled Kubernetes cluster with the [Dapr cluster extension][dapr-overview] enabled
## Clone the repository
@@ -201,7 +201,7 @@ You should see the latest JSON in the response.
## Clean up resources
-Use the [az group delete][az-group-delete] command to remove the resource group, the AKS cluster, namespace, and all related resources.
+Use the [az group delete][az-group-delete] command to remove the resource group, the cluster, the namespace, and all related resources.
```azurecli-interactive
az group delete --name MyResourceGroup
diff --git a/articles/aks/quickstart-event-grid.md b/articles/aks/quickstart-event-grid.md
index 26a11d1b6f8a3..cbd83a0609588 100644
--- a/articles/aks/quickstart-event-grid.md
+++ b/articles/aks/quickstart-event-grid.md
@@ -141,7 +141,7 @@ az group delete --name MyResourceGroup --yes --no-wait
## Next steps
-In this quickstart, you deployed a Kubernetes cluster and then subscribed to AKS events in Azure Event Hub.
+In this quickstart, you deployed a Kubernetes cluster and then subscribed to AKS events in Azure Event Hubs.
To learn more about AKS, and walk through a complete code to deployment example, continue to the Kubernetes cluster tutorial.
@@ -158,4 +158,4 @@ To learn more about AKS, and walk through a complete code to deployment example,
[az-feature-list]: /cli/azure/feature#az_feature_list
[az-provider-register]: /cli/azure/provider#az_provider_register
[az-group-delete]: /cli/azure/group#az_group_delete
-[sp-delete]: kubernetes-service-principal.md#additional-considerations
+[sp-delete]: kubernetes-service-principal.md#other-considerations
diff --git a/articles/aks/quickstart-helm.md b/articles/aks/quickstart-helm.md
index c12cedb17c1f8..9485c5986508f 100644
--- a/articles/aks/quickstart-helm.md
+++ b/articles/aks/quickstart-helm.md
@@ -236,5 +236,5 @@ For more information about using Helm, see the Helm documentation.
[helm-documentation]: https://helm.sh/docs/
[helm-existing]: kubernetes-helm.md
[helm-install]: https://helm.sh/docs/intro/install/
-[sp-delete]: kubernetes-service-principal.md#additional-considerations
+[sp-delete]: kubernetes-service-principal.md#other-considerations
[acr-helm]: ../container-registry/container-registry-helm-repos.md
\ No newline at end of file
diff --git a/articles/aks/release-tracker.md b/articles/aks/release-tracker.md
new file mode 100644
index 0000000000000..5cf412edaa53c
--- /dev/null
+++ b/articles/aks/release-tracker.md
@@ -0,0 +1,35 @@
+---
+title: AKS release tracker
+description: Learn how to determine which Azure regions have the weekly AKS release deployments rolled out in real time.
+services: container-service
+ms.topic: overview
+ms.date: 05/24/2022
+ms.author: nickoman
+author: nickomang
+
+ms.custom: mvc
+---
+
+# AKS release tracker
+
+> [!NOTE]
+> The AKS release tracker is currently not accessible. When the feature is fully released, this article will be updated to include access instructions.
+
+AKS releases weekly rounds of fixes and feature and component updates that affect all clusters and customers. However, these releases can take up to two weeks to roll out to all regions from the initial time of shipping due to Azure Safe Deployment Practices (SDP). It is important for customers to know when a particular AKS release is hitting their region, and the AKS release tracker provides these details in real time by versions and regions.
+
+## Why release tracker?
+
+With AKS release tracker, customers can follow specific component updates present in an AKS version release, such as fixes shipped to a core add-on. In addition to providing real-time updates of region release status, the tracker also links to the specific version of the AKS [release notes][aks-release] to help customers identify which instance of the release is relevant to them. As the data is updated in real time, customers can track the entire SDP process with a single tool.
+
+## How to use the release tracker
+
+The top half of the tracker shows the latest and 3 previously available release versions for each region, and links to the corresponding release notes entry. This view is helpful when you want to track the available versions by region.
+
+:::image type="content" source="./media/release-tracker/regional-status.png" alt-text="Screenshot of the A K S release tracker's regional status table displayed in a web browser.":::
+
+The bottom half of the tracker shows the SDP process. The table has two views: one shows the latest version and status update for each grouping of regions and the other shows the status and region availability of each currently supported version.
+
+:::image type="content" source="./media/release-tracker/sdp-process.png" alt-text="Screenshot of the A K S release tracker's S D P process table displayed in a web browser.":::
+
+
+[aks-release]: https://github.com/Azure/AKS/releases
\ No newline at end of file
diff --git a/articles/aks/spark-job.md b/articles/aks/spark-job.md
deleted file mode 100644
index 6e1b45cef6c1c..0000000000000
--- a/articles/aks/spark-job.md
+++ /dev/null
@@ -1,349 +0,0 @@
----
-title: Run an Apache Spark job with Azure Kubernetes Service (AKS)
-description: Use Azure Kubernetes Service (AKS) to create and run an Apache Spark job for large-scale data processing.
-ms.topic: conceptual
-ms.date: 10/18/2019
-ms.custom: mvc, devx-track-azurecli
----
-
-# Running Apache Spark jobs on AKS
-
-[Apache Spark][apache-spark] is a fast engine for large-scale data processing. As of the [Spark 2.3.0 release][spark-kubernetes-earliest-version], Apache Spark supports native integration with Kubernetes clusters. Azure Kubernetes Service (AKS) is a managed Kubernetes environment running in Azure. This document details preparing and running Apache Spark jobs on an Azure Kubernetes Service (AKS) cluster.
-
-## Prerequisites
-
-In order to complete the steps within this article, you need the following.
-
-* Basic understanding of Kubernetes and [Apache Spark][spark-quickstart].
-* [Docker Hub][docker-hub] account, or an [Azure Container Registry][acr-create].
-* Azure CLI [installed][azure-cli] on your development system.
-* [JDK 8][java-install] installed on your system.
-* [Apache Maven][maven-install] installed on your system.
-* SBT ([Scala Build Tool][sbt-install]) installed on your system.
-* Git command-line tools installed on your system.
-
-## Create an AKS cluster
-
-Spark is used for large-scale data processing and requires that Kubernetes nodes are sized to meet the Spark resources requirements. We recommend a minimum size of `Standard_D3_v2` for your Azure Kubernetes Service (AKS) nodes.
-
-If you need an AKS cluster that meets this minimum recommendation, run the following commands.
-
-Create a resource group for the cluster.
-
-```azurecli
-az group create --name mySparkCluster --location eastus
-```
-
-Create a Service Principal for the cluster. After it is created, you will need the Service Principal appId and password for the next command.
-
-```azurecli
-az ad sp create-for-rbac --name SparkSP --role Contributor --scopes /subscriptions/mySubscriptionID
-```
-
-Create the AKS cluster with nodes that are of size `Standard_D3_v2`, and values of appId and password passed as service-principal and client-secret parameters.
-
-```azurecli
-az aks create --resource-group mySparkCluster --name mySparkCluster --node-vm-size Standard_D3_v2 --generate-ssh-keys --service-principal --client-secret
-```
-
-Connect to the AKS cluster.
-
-```azurecli
-az aks get-credentials --resource-group mySparkCluster --name mySparkCluster
-```
-
-If you are using Azure Container Registry (ACR) to store container images, configure authentication between AKS and ACR. See the [ACR authentication documentation][acr-aks] for these steps.
-
-## Build the Spark source
-
-Before running Spark jobs on an AKS cluster, you need to build the Spark source code and package it into a container image. The Spark source includes scripts that can be used to complete this process.
-
-Clone the Spark project repository to your development system.
-
-```bash
-git clone -b branch-2.4 https://github.com/apache/spark
-```
-
-Change into the directory of the cloned repository and save the path of the Spark source to a variable.
-
-```bash
-cd spark
-sparkdir=$(pwd)
-```
-
-If you have multiple JDK versions installed, set `JAVA_HOME` to use version 8 for the current session.
-
-```bash
-export JAVA_HOME=`/usr/libexec/java_home -d 64 -v "1.8*"`
-```
-
-Run the following command to build the Spark source code with Kubernetes support.
-
-```bash
-./build/mvn -Pkubernetes -DskipTests clean package
-```
-
-The following commands create the Spark container image and push it to a container image registry. Replace `registry.example.com` with the name of your container registry and `v1` with the tag you prefer to use. If using Docker Hub, this value is the registry name. If using Azure Container Registry (ACR), this value is the ACR login server name.
-
-```bash
-REGISTRY_NAME=registry.example.com
-REGISTRY_TAG=v1
-```
-
-```bash
-./bin/docker-image-tool.sh -r $REGISTRY_NAME -t $REGISTRY_TAG build
-```
-
-Push the container image to your container image registry.
-
-```bash
-./bin/docker-image-tool.sh -r $REGISTRY_NAME -t $REGISTRY_TAG push
-```
-
-## Prepare a Spark job
-
-Next, prepare a Spark job. A jar file is used to hold the Spark job and is needed when running the `spark-submit` command. The jar can be made accessible through a public URL or pre-packaged within a container image. In this example, a sample jar is created to calculate the value of Pi. This jar is then uploaded to Azure storage. If you have an existing jar, feel free to substitute
-
-Create a directory where you would like to create the project for a Spark job.
-
-```bash
-mkdir myprojects
-cd myprojects
-```
-
-Create a new Scala project from a template.
-
-```bash
-sbt new sbt/scala-seed.g8
-```
-
-When prompted, enter `SparkPi` for the project name.
-
-```bash
-name [Scala Seed Project]: SparkPi
-```
-
-Navigate to the newly created project directory.
-
-```bash
-cd sparkpi
-```
-
-Run the following commands to add an SBT plugin, which allows packaging the project as a jar file.
-
-```bash
-touch project/assembly.sbt
-echo 'addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.10")' >> project/assembly.sbt
-```
-
-Run these commands to copy the sample code into the newly created project and add all necessary dependencies.
-
-```bash
-EXAMPLESDIR="src/main/scala/org/apache/spark/examples"
-mkdir -p $EXAMPLESDIR
-cp $sparkdir/examples/$EXAMPLESDIR/SparkPi.scala $EXAMPLESDIR/SparkPi.scala
-
-cat <> build.sbt
-// https://mvnrepository.com/artifact/org.apache.spark/spark-sql
-libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.3.0" % "provided"
-EOT
-
-sed -ie 's/scalaVersion.*/scalaVersion := "2.11.11"/' build.sbt
-sed -ie 's/name.*/name := "SparkPi",/' build.sbt
-```
-
-To package the project into a jar, run the following command.
-
-```bash
-sbt assembly
-```
-
-After successful packaging, you should see output similar to the following.
-
-```bash
-[info] Packaging /Users/me/myprojects/sparkpi/target/scala-2.11/SparkPi-assembly-0.1.0-SNAPSHOT.jar ...
-[info] Done packaging.
-[success] Total time: 10 s, completed Mar 6, 2018 11:07:54 AM
-```
-
-## Copy job to storage
-
-Create an Azure storage account and container to hold the jar file.
-
-```azurecli
-RESOURCE_GROUP=sparkdemo
-STORAGE_ACCT=sparkdemo$RANDOM
-az group create --name $RESOURCE_GROUP --location eastus
-az storage account create --resource-group $RESOURCE_GROUP --name $STORAGE_ACCT --sku Standard_LRS
-export AZURE_STORAGE_CONNECTION_STRING=`az storage account show-connection-string --resource-group $RESOURCE_GROUP --name $STORAGE_ACCT -o tsv`
-```
-
-Upload the jar file to the Azure storage account with the following commands.
-
-```azurecli
-CONTAINER_NAME=jars
-BLOB_NAME=SparkPi-assembly-0.1.0-SNAPSHOT.jar
-FILE_TO_UPLOAD=target/scala-2.11/SparkPi-assembly-0.1.0-SNAPSHOT.jar
-
-echo "Creating the container..."
-az storage container create --name $CONTAINER_NAME
-az storage container set-permission --name $CONTAINER_NAME --public-access blob
-
-echo "Uploading the file..."
-az storage blob upload --container-name $CONTAINER_NAME --file $FILE_TO_UPLOAD --name $BLOB_NAME
-
-jarUrl=$(az storage blob url --container-name $CONTAINER_NAME --name $BLOB_NAME | tr -d '"')
-```
-
-Variable `jarUrl` now contains the publicly accessible path to the jar file.
-
-## Submit a Spark job
-
-Start kube-proxy in a separate command-line with the following code.
-
-```bash
-kubectl proxy
-```
-
-Navigate back to the root of Spark repository.
-
-```bash
-cd $sparkdir
-```
-
-Create a service account that has sufficient permissions for running a job.
-
-```bash
-kubectl create serviceaccount spark
-kubectl create clusterrolebinding spark-role --clusterrole=edit --serviceaccount=default:spark --namespace=default
-```
-
-Submit the job using `spark-submit`.
-
-```bash
-./bin/spark-submit \
- --master k8s://http://127.0.0.1:8001 \
- --deploy-mode cluster \
- --name spark-pi \
- --class org.apache.spark.examples.SparkPi \
- --conf spark.executor.instances=3 \
- --conf spark.kubernetes.authenticate.driver.serviceAccountName=spark \
- --conf spark.kubernetes.container.image=$REGISTRY_NAME/spark:$REGISTRY_TAG \
- $jarUrl
-```
-
-This operation starts the Spark job, which streams job status to your shell session. While the job is running, you can see Spark driver pod and executor pods using the kubectl get pods command. Open a second terminal session to run these commands.
-
-```console
-kubectl get pods
-```
-
-```output
-NAME READY STATUS RESTARTS AGE
-spark-pi-2232778d0f663768ab27edc35cb73040-driver 1/1 Running 0 16s
-spark-pi-2232778d0f663768ab27edc35cb73040-exec-1 0/1 Init:0/1 0 4s
-spark-pi-2232778d0f663768ab27edc35cb73040-exec-2 0/1 Init:0/1 0 4s
-spark-pi-2232778d0f663768ab27edc35cb73040-exec-3 0/1 Init:0/1 0 4s
-```
-
-While the job is running, you can also access the Spark UI. In the second terminal session, use the `kubectl port-forward` command provide access to Spark UI.
-
-```bash
-kubectl port-forward spark-pi-2232778d0f663768ab27edc35cb73040-driver 4040:4040
-```
-
-To access Spark UI, open the address `127.0.0.1:4040` in a browser.
-
-![Spark UI](media/aks-spark-job/spark-ui.png)
-
-## Get job results and logs
-
-After the job has finished, the driver pod will be in a "Completed" state. Get the name of the pod with the following command.
-
-```bash
-kubectl get pods --show-all
-```
-
-Output:
-
-```output
-NAME READY STATUS RESTARTS AGE
-spark-pi-2232778d0f663768ab27edc35cb73040-driver 0/1 Completed 0 1m
-```
-
-Use the `kubectl logs` command to get logs from the spark driver pod. Replace the pod name with your driver pod's name.
-
-```bash
-kubectl logs spark-pi-2232778d0f663768ab27edc35cb73040-driver
-```
-
-Within these logs, you can see the result of the Spark job, which is the value of Pi.
-
-```output
-Pi is roughly 3.152155760778804
-```
-
-## Package jar with container image
-
-In the above example, the Spark jar file was uploaded to Azure storage. Another option is to package the jar file into custom-built Docker images.
-
-To do so, find the `dockerfile` for the Spark image located at `$sparkdir/resource-managers/kubernetes/docker/src/main/dockerfiles/spark/` directory. Add an `ADD` statement for the Spark job `jar` somewhere between `WORKDIR` and `ENTRYPOINT` declarations.
-
-Update the jar path to the location of the `SparkPi-assembly-0.1.0-SNAPSHOT.jar` file on your development system. You can also use your own custom jar file.
-
-```bash
-WORKDIR /opt/spark/work-dir
-
-ADD /path/to/SparkPi-assembly-0.1.0-SNAPSHOT.jar SparkPi-assembly-0.1.0-SNAPSHOT.jar
-
-ENTRYPOINT [ "/opt/entrypoint.sh" ]
-```
-
-Build and push the image with the included Spark scripts.
-
-```bash
-./bin/docker-image-tool.sh -r -t build
-./bin/docker-image-tool.sh -r -t push
-```
-
-When running the job, instead of indicating a remote jar URL, the `local://` scheme can be used with the path to the jar file in the Docker image.
-
-```bash
-./bin/spark-submit \
- --master k8s://https://: \
- --deploy-mode cluster \
- --name spark-pi \
- --class org.apache.spark.examples.SparkPi \
- --conf spark.executor.instances=3 \
- --conf spark.kubernetes.authenticate.driver.serviceAccountName=spark \
- --conf spark.kubernetes.container.image= \
- local:///opt/spark/work-dir/.jar
-```
-
-> [!WARNING]
-> From Spark [documentation][spark-docs]: "The Kubernetes scheduler is currently experimental. In future versions, there may be behavioral changes around configuration, container images and entrypoints".
-
-## Next steps
-
-Check out Spark documentation for more details.
-
-> [!div class="nextstepaction"]
-> [Spark documentation][spark-docs]
-
-
-[apache-spark]: https://spark.apache.org/
-[docker-hub]: https://docs.docker.com/docker-hub/
-[java-install]: /azure/developer/java/fundamentals/java-support-on-azure
-[maven-install]: https://maven.apache.org/install.html
-[sbt-install]: https://www.scala-sbt.org/1.x/docs/Setup.html
-[spark-docs]: https://spark.apache.org/docs/latest/running-on-kubernetes.html
-[spark-kubernetes-earliest-version]: https://spark.apache.org/releases/spark-release-2-3-0.html
-[spark-quickstart]: https://spark.apache.org/docs/latest/quick-start.html
-
-
-
-[acr-aks]: cluster-container-registry-integration.md
-[acr-create]: ../container-registry/container-registry-get-started-azure-cli.md
-[aks-quickstart]: ./index.yml
-[azure-cli]: /cli/azure/
-[storage-account]: ../storage/blobs/storage-quickstart-blobs-cli.md
diff --git a/articles/aks/start-stop-cluster.md b/articles/aks/start-stop-cluster.md
index d759901888e92..fca38f486433f 100644
--- a/articles/aks/start-stop-cluster.md
+++ b/articles/aks/start-stop-cluster.md
@@ -150,7 +150,7 @@ If the `ProvisioningState` shows `Starting` that means your cluster hasn't fully
[aks-quickstart-cli]: ./learn/quick-kubernetes-deploy-cli.md
[aks-quickstart-portal]: ./learn/quick-kubernetes-deploy-portal.md
-[aks-quickstart-powershell]: /learn/quick-kubernetes-deploy-powershell.md
+[aks-quickstart-powershell]: /azure/aks/learn/quick-kubernetes-deploy-powershell
[install-azure-cli]: /cli/azure/install-azure-cli
[az-extension-add]: /cli/azure/extension#az_extension_add
[az-extension-update]: /cli/azure/extension#az_extension_update
diff --git a/articles/aks/support-policies.md b/articles/aks/support-policies.md
index 0e2b03064b5d4..d0e154fd24070 100644
--- a/articles/aks/support-policies.md
+++ b/articles/aks/support-policies.md
@@ -33,7 +33,7 @@ Microsoft manages and monitors the following components through the control pane
AKS isn't a Platform-as-a-Service (PaaS) solution. Some components, such as agent nodes, have *shared responsibility*, where users must help maintain the AKS cluster. User input is required, for example, to apply an agent node operating system (OS) security patch.
-The services are *managed* in the sense that Microsoft and the AKS team deploys, operates, and is responsible for service availability and functionality. Customers can't alter these managed components. Microsoft limits customization to ensure a consistent and scalable user experience. For a fully customizable solution, see [AKS Engine](https://github.com/Azure/aks-engine).
+The services are *managed* in the sense that Microsoft and the AKS team deploys, operates, and is responsible for service availability and functionality. Customers can't alter these managed components. Microsoft limits customization to ensure a consistent and scalable user experience.
## Shared responsibility
diff --git a/articles/aks/supported-kubernetes-versions.md b/articles/aks/supported-kubernetes-versions.md
index ef02286b9b268..7c4bb4eab8c11 100644
--- a/articles/aks/supported-kubernetes-versions.md
+++ b/articles/aks/supported-kubernetes-versions.md
@@ -264,7 +264,6 @@ Patches have a two month minimum lifecycle. To keep up to date when new patches
For information on how to upgrade your cluster, see [Upgrade an Azure Kubernetes Service (AKS) cluster][aks-upgrade].
-[aks-engine]: https://github.com/Azure/aks-engine
[azure-update-channel]: https://azure.microsoft.com/updates/?product=kubernetes-service
diff --git a/articles/aks/troubleshooting.md b/articles/aks/troubleshooting.md
index f2b5a330e97d3..3b5de98a4ae3a 100644
--- a/articles/aks/troubleshooting.md
+++ b/articles/aks/troubleshooting.md
@@ -272,7 +272,7 @@ spec:
```yaml
initContainers:
- name: volume-mount
- image: mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11
+ image: mcr.microsoft.com/dotnet/runtime-deps:6.0
command: ["sh", "-c", "chown -R 100:100 /data"]
volumeMounts:
- name:
diff --git a/articles/aks/tutorial-kubernetes-upgrade-cluster.md b/articles/aks/tutorial-kubernetes-upgrade-cluster.md
index 368b6e539343a..6a879e92b639f 100644
--- a/articles/aks/tutorial-kubernetes-upgrade-cluster.md
+++ b/articles/aks/tutorial-kubernetes-upgrade-cluster.md
@@ -291,7 +291,7 @@ For more information on AKS, see [AKS overview][aks-intro]. For guidance on a cr
[az aks upgrade]: /cli/azure/aks#az_aks_upgrade
[azure-cli-install]: /cli/azure/install-azure-cli
[az-group-delete]: /cli/azure/group#az_group_delete
-[sp-delete]: kubernetes-service-principal.md#additional-considerations
+[sp-delete]: kubernetes-service-principal.md#other-considerations
[aks-solution-guidance]: /azure/architecture/reference-architectures/containers/aks-start-here?WT.mc_id=AKSDOCSPAGE
[azure-powershell-install]: /powershell/azure/install-az-ps
[get-azakscluster]: /powershell/module/az.aks/get-azakscluster
diff --git a/articles/aks/use-group-managed-service-accounts.md b/articles/aks/use-group-managed-service-accounts.md
index 4574e133763cb..605dc17d5416a 100644
--- a/articles/aks/use-group-managed-service-accounts.md
+++ b/articles/aks/use-group-managed-service-accounts.md
@@ -41,6 +41,8 @@ az keyvault secret set --vault-name MyAKSGMSAVault --name "GMSADomainUserCred" -
> [!NOTE]
> Use the Fully Qualified Domain Name for the Domain rather than the Partially Qualified Domain Name that may be used on internal networks.
+>
+> The above command escapes the `value` parameter for running the Azure CLI on a Linux shell. When running the Azure CLI command on Windows PowerShell, you don't need to escape characters in the `value` parameter.
## Optional: Use a custom VNET with custom DNS
diff --git a/articles/aks/use-kms-etcd-encryption.md b/articles/aks/use-kms-etcd-encryption.md
index c29557cf0b0b8..48cdd2b0c7fb0 100644
--- a/articles/aks/use-kms-etcd-encryption.md
+++ b/articles/aks/use-kms-etcd-encryption.md
@@ -3,7 +3,7 @@ title: Use KMS etcd encryption in Azure Kubernetes Service (AKS) (Preview)
description: Learn how to use kms etcd encryption with Azure Kubernetes Service (AKS)
services: container-service
ms.topic: article
-ms.date: 04/11/2022
+ms.date: 06/06/2022
---
@@ -65,12 +65,9 @@ The following limitations apply when you integrate KMS etcd encryption with AKS:
* Changing of key ID, including key name and key version.
* Deletion of the key, Key Vault, or the associated identity.
* KMS etcd encryption doesn't work with System-Assigned Managed Identity. The keyvault access-policy is required to be set before the feature is enabled. In addition, System-Assigned Managed Identity isn't available until cluster creation, thus there's a cycle dependency.
-* Using Azure Key Vault with PrivateLink enabled.
* Using more than 2000 secrets in a cluster.
-* Managed HSM Support
* Bring your own (BYO) Azure Key Vault from another tenant.
-
## Create a KeyVault and key
> [!WARNING]
diff --git a/articles/aks/use-managed-identity.md b/articles/aks/use-managed-identity.md
index 1cb37f7a47ba6..b2494a69ce935 100644
--- a/articles/aks/use-managed-identity.md
+++ b/articles/aks/use-managed-identity.md
@@ -1,25 +1,25 @@
---
-title: Use managed identities in Azure Kubernetes Service
-description: Learn how to use managed identities in Azure Kubernetes Service (AKS)
+title: Use a managed identity in Azure Kubernetes Service
+description: Learn how to use a system-assigned or user-assigned managed identity in Azure Kubernetes Service (AKS)
ms.topic: article
-ms.date: 01/25/2022
+ms.date: 06/07/2022
---
-# Use managed identities in Azure Kubernetes Service
+# Use a managed identity in Azure Kubernetes Service
-Currently, an Azure Kubernetes Service (AKS) cluster (specifically, the Kubernetes cloud provider) requires an identity to create additional resources like load balancers and managed disks in Azure. This identity can be either a *managed identity* or a *service principal*. If you use a [service principal](kubernetes-service-principal.md), you must either provide one or AKS creates one on your behalf. If you use managed identity, this will be created for you by AKS automatically. Clusters using service principals eventually reach a state in which the service principal must be renewed to keep the cluster working. Managing service principals adds complexity, which is why it's easier to use managed identities instead. The same permission requirements apply for both service principals and managed identities.
+An Azure Kubernetes Service (AKS) cluster requires an identity to access Azure resources like load balancers and managed disks. This identity can be either a managed identity or a service principal. By default, when you create an AKS cluster a system-assigned managed identity automatically created. The identity is managed by the Azure platform and doesn't require you to provision or rotate any secrets. For more information about managed identities in Azure AD, see [Managed identities for Azure resources][managed-identity-resources-overview].
-*Managed identities* are essentially a wrapper around service principals, and make their management simpler. Credential rotation for MI happens automatically every 46 days according to Azure Active Directory default. AKS uses both system-assigned and user-assigned managed identity types. These identities are currently immutable. To learn more, read about [managed identities for Azure resources](../active-directory/managed-identities-azure-resources/overview.md).
+To use a [service principal](kubernetes-service-principal.md), you have to create one, AKS does not create one automatically. Clusters using a service principal eventually expire and the service principal must be renewed to keep the cluster working. Managing service principals adds complexity, which is why it's easier to use managed identities instead. The same permission requirements apply for both service principals and managed identities.
-## Before you begin
+Managed identities are essentially a wrapper around service principals, and make their management simpler. Managed identities use certificate-based authentication, and each managed identities credential has an expiration of 90 days and it's rolled after 45 days. AKS uses both system-assigned and user-assigned managed identity types, and these identities are immutable.
-You must have the following resource installed:
+## Prerequisites
-- The Azure CLI, version 2.23.0 or later
+Azure CLI version 2.23.0 or later. Run `az --version` to find the version. If you need to install or upgrade, see [Install Azure CLI][install-azure-cli].
## Limitations
-* Tenants move / migrate of managed identity enabled clusters isn't supported.
+* Tenants move or migrate a managed identity-enabled cluster isn't supported.
* If the cluster has `aad-pod-identity` enabled, Node-Managed Identity (NMI) pods modify the nodes'
iptables to intercept calls to the Azure Instance Metadata endpoint. This configuration means any
request made to the Metadata endpoint is intercepted by NMI even if the pod doesn't use
@@ -52,9 +52,12 @@ AKS uses several managed identities for built-in services and add-ons.
| Add-on | Virtual-Node (ACIConnector) | Manages required network resources for Azure Container Instances (ACI) | Contributor role for node resource group | No
| OSS project | aad-pod-identity | Enables applications to access cloud resources securely with Azure Active Directory (AAD) | NA | Steps to grant permission at https://github.com/Azure/aad-pod-identity#role-assignment.
-## Create an AKS cluster with managed identities
+> [!NOTE]
+> AKS will create a kubelet managed identity in the Node resource group if you do not specify your own kubelet managed identity.
+
+## Create an AKS cluster using a managed identity
-You can now create an AKS cluster with managed identities by using the following CLI commands.
+You can create an AKS cluster using a system-assigned managed identity by running the following CLI command.
First, create an Azure resource group:
@@ -77,28 +80,29 @@ Finally, get credentials to access the cluster:
az aks get-credentials --resource-group myResourceGroup --name myManagedCluster
```
-## Update an AKS cluster to managed identities
+## Update an AKS cluster to use a managed identity
-You can now update an AKS cluster currently working with service principals to work with managed identities by using the following CLI commands.
+To update an AKS cluster currently using a service principals to work with a system-assigned managed identity, run the following CLI command.
```azurecli-interactive
az aks update -g -n --enable-managed-identity
```
+
> [!NOTE]
-> An update will only work if there is an actual VHD update to consume. If you are running the latest VHD, you will need to wait till the next VHD is available in order to do the actual update.
+> An update will only work if there is an actual VHD update to consume. If you are running the latest VHD, you'll need to wait until the next VHD is available in order to perform the update.
>
> [!NOTE]
-> After updating, your cluster's control plane and addon pods will switch to use managed identity, but kubelet will KEEP USING SERVICE PRINCIPAL until you upgrade your agentpool. Perform an `az aks nodepool upgrade --node-image-only` on your nodes to complete the update to managed identity.
+> After updating, your cluster's control plane and addon pods, they use the managed identity, but kubelet will continue using a service principal until you upgrade your agentpool. Perform an `az aks nodepool upgrade --node-image-only` on your nodes to complete the update to a managed identity.
>
-> If your cluster was using --attach-acr to pull from image from Azure Container Registry, after updating your cluster to Managed Identity, you need to rerun `az aks update --attach-acr ` to let the newly created kubelet used for managed identity get the permission to pull from ACR. Otherwise you will not be able to pull from ACR after the upgrade.
+> If your cluster was using `--attach-acr` to pull from image from Azure Container Registry, after updating your cluster to a managed identity, you need to rerun `az aks update --attach-acr ` to let the newly created kubelet used for managed identity get the permission to pull from ACR. Otherwise, you won't be able to pull from ACR after the upgrade.
>
-> The Azure CLI will ensure your addon's permission is correctly set after migrating, if you're not using the Azure CLI to perform the migrating operation, you will need to handle the addon identity's permission by yourself. Here is one example using [ARM](../role-based-access-control/role-assignments-template.md).
+> The Azure CLI will ensure your addon's permission is correctly set after migrating, if you're not using the Azure CLI to perform the migrating operation, you'll need to handle the addon identity's permission by yourself. Here is one example using an [Azure Resource Manager](../role-based-access-control/role-assignments-template.md) template.
> [!WARNING]
-> Nodepool upgrade will cause downtime for your AKS cluster as the nodes in the nodepools will be cordoned/drained and then reimaged.
+> A nodepool upgrade will cause downtime for your AKS cluster as the nodes in the nodepools will be cordoned/drained and then reimaged.
-## Obtain and use the system-assigned managed identity for your AKS cluster
+## Get and use the system-assigned managed identity for your AKS cluster
Confirm your AKS cluster is using managed identity with the following CLI command:
@@ -106,7 +110,7 @@ Confirm your AKS cluster is using managed identity with the following CLI comman
az aks show -g -n --query "servicePrincipalProfile"
```
-If the cluster is using managed identities, you will see a `clientId` value of "msi". A cluster using a Service Principal instead will instead show the object ID. For example:
+If the cluster is using a managed identity, the output shows `clientId` with a value of **msi**. A cluster using a service principal shows an object ID. For example:
```output
{
@@ -114,7 +118,7 @@ If the cluster is using managed identities, you will see a `clientId` value of "
}
```
-After verifying the cluster is using managed identities, you can find the control plane system-assigned identity's object ID with the following command:
+After verifying the cluster is using a managed identity, you can find the control plane system-assigned identity's object ID by running the following command:
```azurecli-interactive
az aks show -g -n --query "identity"
@@ -130,57 +134,36 @@ az aks show -g -n --query "identity"
```
> [!NOTE]
-> For creating and using your own VNet, static IP address, or attached Azure disk where the resources are outside of the worker node resource group, use the PrincipalID of the cluster System Assigned Managed Identity to perform a role assignment. For more information on role assignment, see [Delegate access to other Azure resources](kubernetes-service-principal.md#delegate-access-to-other-azure-resources).
+> For creating and using your own VNet, static IP address, or attached Azure disk where the resources are outside of the worker node resource group, the CLI will add the role assignment automatically. If you are using an ARM template or other method, you need to use the PrincipalID of the cluster system-assigned managed identity to perform a role assignment. For more information on role assignment, see [Delegate access to other Azure resources](kubernetes-service-principal.md#delegate-access-to-other-azure-resources).
>
-> Permission grants to cluster Managed Identity used by Azure Cloud provider may take up 60 minutes to populate.
+> Permission granted to your cluster's managed identity used by Azure may take up 60 minutes to populate.
+## Bring your own control plane managed identity
-## Bring your own control plane MI
-A custom control plane identity enables access to be granted to the existing identity prior to cluster creation. This feature enables scenarios such as using a custom VNET or outboundType of UDR with a pre-created managed identity.
+A custom control plane managed identity enables access to be granted to the existing identity prior to cluster creation. This feature enables scenarios such as using a custom VNET or outboundType of UDR with a pre-created managed identity.
-You must have the Azure CLI, version 2.15.1 or later installed.
-
-### Limitations
-* USDOD Central, USDOD East, USGov Iowa in Azure Government aren't currently supported.
+> [!NOTE]
+> USDOD Central, USDOD East, USGov Iowa regions in Azure US Government cloud aren't currently supported.
-If you don't have a managed identity yet, you should go ahead and create one for example by using the [az identity][az-identity-create] command.
+If you don't have a managed identity, you should create one by running the [az identity][az-identity-create] command.
```azurecli-interactive
az identity create --name myIdentity --resource-group myResourceGroup
```
-Assign "Managed Identity Operator" role to the identity.
+Azure CLI automatically adds required role assignment for the control plane managed identity. If you are using an ARM template or other method, you need to create the role assignment manually.
```azurecli-interactive
-az role assignment create --assignee --role "Managed Identity Operator" --scope
-
-
-The result should look like:
-
-```output
-{
- "canDelegate": null,
- "condition": null,
- "conditionVersion": null,
- "description": null,
- "id": "/subscriptions//resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity",
- "name": "myIdentity,
- "principalId": "",
- "principalType": "ServicePrincipal",
- "resourceGroup": "myResourceGroup",
- "roleDefinitionId": "/subscriptions//providers/Microsoft.Authorization/roleDefinitions/",
- "scope": "",
- "type": "Microsoft.Authorization/roleAssignments"
-}
+az role assignment create --assignee --role "Managed Identity Operator" --scope
```
-If your managed identity is part of your subscription, you can use [az identity CLI command][az-identity-list] to query it.
+If your managed identity is part of your subscription, run the following [az identity CLI command][az-identity-list] command to query it.
```azurecli-interactive
az identity list --query "[].{Name:name, Id:id, Location:location}" -o table
```
-Now you can use the following command to create your cluster with your existing identity:
+Run the following command to create a cluster with your existing identity:
```azurecli-interactive
az aks create \
@@ -195,7 +178,7 @@ az aks create \
--assign-identity
```
-A successful cluster creation using your own managed identities contains this userAssignedIdentities profile information:
+A successful cluster creation using your own managed identity should resemble the following **userAssignedIdentities** profile information:
```output
"identity": {
@@ -211,28 +194,31 @@ A successful cluster creation using your own managed identities contains this us
},
```
-## Bring your own kubelet MI
+## Use a pre-created kubelet managed identity
-A Kubelet identity enables access to be granted to the existing identity prior to cluster creation. This feature enables scenarios such as connection to ACR with a pre-created managed identity.
+A Kubelet identity enables access granted to the existing identity prior to cluster creation. This feature enables scenarios such as connection to ACR with a pre-created managed identity.
+
+> [!WARNING]
+> Updating kubelet managed identity upgrades Nodepool, which causes downtime for your AKS cluster as the nodes in the nodepools will be cordoned/drained and then reimaged.
### Prerequisites
-- You must have the Azure CLI, version 2.26.0 or later installed.
+- Azure CLI version 2.26.0 or later installed. Run `az --version` to find the version. If you need to install or upgrade, see [Install Azure CLI][install-azure-cli].
### Limitations
-- Only works with a User-Assigned Managed cluster.
-- China East, China North in Azure China 21Vianet aren't currently supported.
+- Only works with a user-assigned managed cluster.
+- China East and China North regions in Azure China 21Vianet aren't currently supported.
### Create or obtain managed identities
-If you don't have a control plane managed identity yet, you should go ahead and create one. The following example uses the [az identity create][az-identity-create] command:
+If you don't have a control plane managed identity, you can create by running the following [az identity create][az-identity-create] command:
```azurecli-interactive
az identity create --name myIdentity --resource-group myResourceGroup
```
-The result should look like:
+The output should resemble the following:
```output
{
@@ -249,13 +235,13 @@ The result should look like:
}
```
-If you don't have a kubelet managed identity yet, you should go ahead and create one. The following example uses the [az identity create][az-identity-create] command:
+If you don't have a kubelet managed identity, you can create one by running the following [az identity create][az-identity-create] command:
```azurecli-interactive
az identity create --name myKubeletIdentity --resource-group myResourceGroup
```
-The result should look like:
+The output should resemble the following:
```output
{
@@ -280,7 +266,7 @@ az identity list --query "[].{Name:name, Id:id, Location:location}" -o table
### Create a cluster using kubelet identity
-Now you can use the following command to create your cluster with your existing identities. Provide the control plane identity id via `assign-identity` and the kubelet managed identity via `assign-kubelet-identity`:
+Now you can use the following command to create your AKS cluster with your existing identities. Provide the control plane identity resource ID via `assign-identity` and the kubelet managed identity via `assign-kubelet-identity`:
```azurecli-interactive
az aks create \
@@ -292,11 +278,11 @@ az aks create \
--dns-service-ip 10.2.0.10 \
--service-cidr 10.2.0.0/24 \
--enable-managed-identity \
- --assign-identity \
- --assign-kubelet-identity
+ --assign-identity \
+ --assign-kubelet-identity
```
-A successful cluster creation using your own kubelet managed identity contains the following output:
+A successful AKS cluster creation using your own kubelet managed identity should resemble the following output:
```output
"identity": {
@@ -319,32 +305,31 @@ A successful cluster creation using your own kubelet managed identity contains t
},
```
-### Update an existing cluster using kubelet identity (Preview)
-
-Update kubelet identity on an existing cluster with your existing identities.
+### Update an existing cluster using kubelet identity
-#### Install the `aks-preview` Azure CLI
+Update kubelet identity on an existing AKS cluster with your existing identities.
-You also need the *aks-preview* Azure CLI extension version 0.5.64 or later. Install the *aks-preview* Azure CLI extension by using the [az extension add][az-extension-add] command. Or install any available updates by using the [az extension update][az-extension-update] command.
+#### Make sure the CLI version is 2.37.0 or later
```azurecli-interactive
-# Install the aks-preview extension
-az extension add --name aks-preview
+# Check the version of Azure CLI modules
+az version
-# Update the extension to make sure you have the latest version installed
-az extension update --name aks-preview
+# Upgrade the version to make sure it is 2.37.0 or later
+az upgrade
```
-#### Updating your cluster with kubelet identity (Preview)
-Now you can use the following command to update your cluster with your existing identities. Provide the control plane identity id via `assign-identity` and the kubelet managed identity via `assign-kubelet-identity`:
+#### Updating your cluster with kubelet identity
+
+Now you can use the following command to update your cluster with your existing identities. Provide the control plane identity resource ID via `assign-identity` and the kubelet managed identity via `assign-kubelet-identity`:
```azurecli-interactive
az aks update \
--resource-group myResourceGroup \
--name myManagedCluster \
--enable-managed-identity \
- --assign-identity \
- --assign-kubelet-identity
+ --assign-identity \
+ --assign-kubelet-identity
```
A successful cluster update using your own kubelet managed identity contains the following output:
@@ -371,7 +356,8 @@ A successful cluster update using your own kubelet managed identity contains the
```
## Next steps
-* Use [Azure Resource Manager templates ][aks-arm-template] to create Managed Identity enabled clusters.
+
+Use [Azure Resource Manager templates ][aks-arm-template] to create a managed identity-enabled cluster.
[aks-arm-template]: /azure/templates/microsoft.containerservice/managedclusters
@@ -381,3 +367,4 @@ A successful cluster update using your own kubelet managed identity contains the
[az-identity-list]: /cli/azure/identity#az_identity_list
[az-feature-list]: /cli/azure/feature#az_feature_list
[az-provider-register]: /cli/azure/provider#az_provider_register
+[managed-identity-resources-overview]: ../active-directory/managed-identities-azure-resources/overview.md
diff --git a/articles/aks/use-multiple-node-pools.md b/articles/aks/use-multiple-node-pools.md
index 8b42fbe229607..3621e1d70ff48 100644
--- a/articles/aks/use-multiple-node-pools.md
+++ b/articles/aks/use-multiple-node-pools.md
@@ -181,7 +181,7 @@ A workload may require splitting a cluster's nodes into separate pools for logic
* All subnets assigned to node pools must belong to the same virtual network.
* System pods must have access to all nodes/pods in the cluster to provide critical functionality such as DNS resolution and tunneling kubectl logs/exec/port-forward proxy.
-* If you expand your VNET after creating the cluster you must update your cluster (perform any managed cluster operation but node pool operations don't count) before adding a subnet outside the original cidr. AKS will error out on the agent pool add now though we originally allowed it. If you don't know how to reconcile your cluster file a support ticket.
+* If you expand your VNET after creating the cluster you must update your cluster (perform any managed cluster operation but node pool operations don't count) before adding a subnet outside the original cidr. AKS will error out on the agent pool add now though we originally allowed it. The `aks-preview` Azure CLI extension (version 0.5.66+) now supports running `az aks update -g -n ` without any optional arguments. This command will perform an update operation without making any changes, which can recover a cluster stuck in a failed state.
* In clusters with Kubernetes version < 1.23.3, kube-proxy will SNAT traffic from new subnets, which can cause Azure Network Policy to drop the packets.
* Windows nodes will SNAT traffic to the new subnets until the node pool is reimaged.
* Internal load balancers default to one of the node pool subnets (usually the first subnet of the node pool at cluster creation). To override this behavior, you can [specify the load balancer's subnet explicitly using an annotation][internal-lb-different-subnet].
@@ -639,7 +639,7 @@ az aks nodepool add \
To verify your node pool is FIPS-enabled, use [az aks show][az-aks-show] to check the *enableFIPS* value in *agentPoolProfiles*.
```azurecli-interactive
-az aks show --resource-group myResourceGroup --cluster-name myAKSCluster --query="agentPoolProfiles[].{Name:name enableFips:enableFips}" -o table
+az aks show --resource-group myResourceGroup --name myAKSCluster --query="agentPoolProfiles[].{Name:name enableFips:enableFips}" -o table
```
The following example output shows the *fipsnp* node pool is FIPS-enabled and *nodepool1* isn't.
@@ -665,7 +665,7 @@ aks-nodepool1-12345678-vmss000000 Ready agent 34m v1.19.9
In the above example, the nodes starting with `aks-fipsnp` are part of the FIPS-enabled node pool. Use `kubectl debug` to run a deployment with an interactive session on one of those nodes in the FIPS-enabled node pool.
```azurecli-interactive
-kubectl debug node/aks-fipsnp-12345678-vmss000000 -it --image=mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11
+kubectl debug node/aks-fipsnp-12345678-vmss000000 -it --image=mcr.microsoft.com/dotnet/runtime-deps:6.0
```
From the interactive session, you can verify the FIPS cryptographic libraries are enabled:
diff --git a/articles/aks/use-network-policies.md b/articles/aks/use-network-policies.md
index a81d4d4e5ada9..7a78a97532f7c 100644
--- a/articles/aks/use-network-policies.md
+++ b/articles/aks/use-network-policies.md
@@ -4,7 +4,7 @@ titleSuffix: Azure Kubernetes Service
description: Learn how to secure traffic that flows in and out of pods by using Kubernetes network policies in Azure Kubernetes Service (AKS)
services: container-service
ms.topic: article
-ms.date: 03/16/2021
+ms.date: 03/29/2022
---
@@ -18,15 +18,6 @@ This article shows you how to install the network policy engine and create Kuber
You need the Azure CLI version 2.0.61 or later installed and configured. Run `az --version` to find the version. If you need to install or upgrade, see [Install Azure CLI][install-azure-cli].
-> [!TIP]
-> If you used the network policy feature during preview, we recommend that you [create a new cluster](#create-an-aks-cluster-and-enable-network-policy).
->
-> If you wish to continue using existing test clusters that used network policy during preview, upgrade your cluster to a new Kubernetes versions for the latest GA release and then deploy the following YAML manifest to fix the crashing metrics server and Kubernetes dashboard. This fix is only required for clusters that used the Calico network policy engine.
->
-> As a security best practice, [review the contents of this YAML manifest][calico-aks-cleanup] to understand what is deployed into the AKS cluster.
->
-> `kubectl delete -f https://raw.githubusercontent.com/Azure/aks-engine/master/docs/topics/calico-3.3.1-cleanup-after-upgrade.yaml`
-
## Overview of network policy
All pods in an AKS cluster can send and receive traffic without limitations, by default. To improve security, you can define rules that control the flow of traffic. Back-end applications are often only exposed to required front-end services, for example. Or, database components are only accessible to the application tiers that connect to them.
@@ -100,7 +91,7 @@ az network vnet create \
--subnet-prefix 10.240.0.0/16
# Create a service principal and read in the application ID
-SP=$(az ad sp create-for-rbac --role Contributor --output json)
+SP=$(az ad sp create-for-rbac --output json)
SP_ID=$(echo $SP | jq -r .appId)
SP_PASSWORD=$(echo $SP | jq -r .password)
@@ -239,7 +230,13 @@ kubectl run backend --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine --la
Create another pod and attach a terminal session to test that you can successfully reach the default NGINX webpage:
```console
-kubectl run --rm -it --image=mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11 network-policy --namespace development
+kubectl run --rm -it --image=mcr.microsoft.com/dotnet/runtime-deps:6.0 network-policy --namespace development
+```
+
+Install `wget`:
+
+```console
+apt-get update && apt-get install -y wget
```
At the shell prompt, use `wget` to confirm that you can access the default NGINX webpage:
@@ -295,7 +292,13 @@ kubectl apply -f backend-policy.yaml
Let's see if you can use the NGINX webpage on the back-end pod again. Create another test pod and attach a terminal session:
```console
-kubectl run --rm -it --image=mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11 network-policy --namespace development
+kubectl run --rm -it --image=mcr.microsoft.com/dotnet/runtime-deps:6.0 network-policy --namespace development
+```
+
+Install `wget`:
+
+```console
+apt-get update && apt-get install -y wget
```
At the shell prompt, use `wget` to see if you can access the default NGINX webpage. This time, set a timeout value to *2* seconds. The network policy now blocks all inbound traffic, so the page can't be loaded, as shown in the following example:
@@ -352,7 +355,13 @@ kubectl apply -f backend-policy.yaml
Schedule a pod that is labeled as *app=webapp,role=frontend* and attach a terminal session:
```console
-kubectl run --rm -it frontend --image=mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11 --labels app=webapp,role=frontend --namespace development
+kubectl run --rm -it frontend --image=mcr.microsoft.com/dotnet/runtime-deps:6.0 --labels app=webapp,role=frontend --namespace development
+```
+
+Install `wget`:
+
+```console
+apt-get update && apt-get install -y wget
```
At the shell prompt, use `wget` to see if you can access the default NGINX webpage:
@@ -382,7 +391,13 @@ exit
The network policy allows traffic from pods labeled *app: webapp,role: frontend*, but should deny all other traffic. Let's test to see whether another pod without those labels can access the back-end NGINX pod. Create another test pod and attach a terminal session:
```console
-kubectl run --rm -it --image=mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11 network-policy --namespace development
+kubectl run --rm -it --image=mcr.microsoft.com/dotnet/runtime-deps:6.0 network-policy --namespace development
+```
+
+Install `wget`:
+
+```console
+apt-get update && apt-get install -y wget
```
At the shell prompt, use `wget` to see if you can access the default NGINX webpage. The network policy blocks the inbound traffic, so the page can't be loaded, as shown in the following example:
@@ -415,7 +430,13 @@ kubectl label namespace/production purpose=production
Schedule a test pod in the *production* namespace that is labeled as *app=webapp,role=frontend*. Attach a terminal session:
```console
-kubectl run --rm -it frontend --image=mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11 --labels app=webapp,role=frontend --namespace production
+kubectl run --rm -it frontend --image=mcr.microsoft.com/dotnet/runtime-deps:6.0 --labels app=webapp,role=frontend --namespace production
+```
+
+Install `wget`:
+
+```console
+apt-get update && apt-get install -y wget
```
At the shell prompt, use `wget` to confirm that you can access the default NGINX webpage:
@@ -479,7 +500,13 @@ kubectl apply -f backend-policy.yaml
Schedule another pod in the *production* namespace and attach a terminal session:
```console
-kubectl run --rm -it frontend --image=mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11 --labels app=webapp,role=frontend --namespace production
+kubectl run --rm -it frontend --image=mcr.microsoft.com/dotnet/runtime-deps:6.0 --labels app=webapp,role=frontend --namespace production
+```
+
+Install `wget`:
+
+```console
+apt-get update && apt-get install -y wget
```
At the shell prompt, use `wget` to see that the network policy now denies traffic:
@@ -501,7 +528,13 @@ exit
With traffic denied from the *production* namespace, schedule a test pod back in the *development* namespace and attach a terminal session:
```console
-kubectl run --rm -it frontend --image=mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11 --labels app=webapp,role=frontend --namespace development
+kubectl run --rm -it frontend --image=mcr.microsoft.com/dotnet/runtime-deps:6.0 --labels app=webapp,role=frontend --namespace development
+```
+
+Install `wget`:
+
+```console
+apt-get update && apt-get install -y wget
```
At the shell prompt, use `wget` to see that the network policy allows the traffic:
diff --git a/articles/aks/use-tags.md b/articles/aks/use-tags.md
index 34d05c2009402..e8bde9ef110b0 100644
--- a/articles/aks/use-tags.md
+++ b/articles/aks/use-tags.md
@@ -3,7 +3,7 @@ title: Use Azure tags in Azure Kubernetes Service (AKS)
description: Learn how to use Azure provider tags to track resources in Azure Kubernetes Service (AKS).
services: container-service
ms.topic: article
-ms.date: 02/08/2022
+ms.date: 05/26/2022
---
# Use Azure tags in Azure Kubernetes Service (AKS)
@@ -40,8 +40,16 @@ When you create or update an AKS cluster with the `--tags` parameter, the follow
* The AKS cluster
* The route table that's associated with the cluster
* The public IP that's associated with the cluster
+* The load balancer that's associated with the cluster
* The network security group that's associated with the cluster
* The virtual network that's associated with the cluster
+* The AKS managed kubelet msi associated with the cluster
+* The AKS managed addon msi associated with the cluster
+* The private DNS zone associated with the private cluster
+* The private endpoint associated with the private cluster
+
+> [!NOTE]
+> Azure Private DNS only supports 15 tags. [tag resources](../azure-resource-manager/management/tag-resources.md).
To create a cluster and assign Azure tags, run `az aks create` with the `--tags` parameter, as shown in the following command. Running the command creates a *myAKSCluster* in the *myResourceGroup* with the tags *dept=IT* and *costcenter=9999*.
@@ -203,4 +211,4 @@ parameters:
>
> Any updates that you make to tags through Kubernetes will retain the value that's set through Kubernetes. For example, if your disk has tags *dept=IT* and *costcenter=5555* set by Kubernetes, and you use the portal to set the tags *team=beta* and *costcenter=3333*, the new list of tags would be *dept=IT*, *team=beta*, and *costcenter=5555*. If you then remove the disk through Kubernetes, the disk would have the tag *team=beta*.
-[install-azure-cli]: /cli/azure/install-azure-cli
\ No newline at end of file
+[install-azure-cli]: /cli/azure/install-azure-cli
diff --git a/articles/aks/virtual-nodes-cli.md b/articles/aks/virtual-nodes-cli.md
index 5b10f6dc021c7..19544f279df31 100644
--- a/articles/aks/virtual-nodes-cli.md
+++ b/articles/aks/virtual-nodes-cli.md
@@ -241,7 +241,7 @@ The pod is assigned an internal IP address from the Azure virtual network subnet
To test the pod running on the virtual node, browse to the demo application with a web client. As the pod is assigned an internal IP address, you can quickly test this connectivity from another pod on the AKS cluster. Create a test pod and attach a terminal session to it:
```console
-kubectl run -it --rm testvk --image=mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11
+kubectl run -it --rm testvk --image=mcr.microsoft.com/dotnet/runtime-deps:6.0
```
Install `curl` in the pod using `apt-get`:
@@ -299,13 +299,19 @@ AKS_SUBNET=myVirtualNodeSubnet
NODE_RES_GROUP=$(az aks show --resource-group $RES_GROUP --name $AKS_CLUSTER --query nodeResourceGroup --output tsv)
# Get network profile ID
-NETWORK_PROFILE_ID=$(az network profile list --resource-group $NODE_RES_GROUP --query [0].id --output tsv)
+NETWORK_PROFILE_ID=$(az network profile list --resource-group $NODE_RES_GROUP --query "[0].id" --output tsv)
# Delete the network profile
az network profile delete --id $NETWORK_PROFILE_ID -y
+# Grab the service association link ID
+SAL_ID=$(az network vnet subnet show --resource-group $RES_GROUP --vnet-name $AKS_VNET --name $AKS_SUBNET --query id --output tsv)/providers/Microsoft.ContainerInstance/serviceAssociationLinks/default
+
+# Delete the service association link for the subnet
+az resource delete --ids $SAL_ID --api-version {api-version}
+
# Delete the subnet delegation to Azure Container Instances
-az network vnet subnet update --resource-group $RES_GROUP --vnet-name $AKS_VNET --name $AKS_SUBNET --remove delegations 0
+az network vnet subnet update --resource-group $RES_GROUP --vnet-name $AKS_VNET --name $AKS_SUBNET --remove delegations
```
## Next steps
diff --git a/articles/aks/virtual-nodes-portal.md b/articles/aks/virtual-nodes-portal.md
index c3b14f4439996..154be1d4293ed 100644
--- a/articles/aks/virtual-nodes-portal.md
+++ b/articles/aks/virtual-nodes-portal.md
@@ -153,7 +153,7 @@ The pod is assigned an internal IP address from the Azure virtual network subnet
To test the pod running on the virtual node, browse to the demo application with a web client. As the pod is assigned an internal IP address, you can quickly test this connectivity from another pod on the AKS cluster. Create a test pod and attach a terminal session to it:
```console
-kubectl run -it --rm virtual-node-test --image=mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11
+kubectl run -it --rm virtual-node-test --image=mcr.microsoft.com/dotnet/runtime-deps:6.0
```
Install `curl` in the pod using `apt-get`:
diff --git a/articles/aks/web-app-routing.md b/articles/aks/web-app-routing.md
index 5e7b464865caf..25bc780f57386 100644
--- a/articles/aks/web-app-routing.md
+++ b/articles/aks/web-app-routing.md
@@ -4,7 +4,6 @@ description: Use the Web Application Routing add-on to securely access applicat
services: container-service
author: jahabibi
ms.topic: article
-ms.custom: event-tier1-build-2022
ms.date: 05/13/2021
ms.author: jahabibi
---
@@ -20,34 +19,38 @@ The Web Application Routing solution makes it easy to access applications that a
- Web Application Routing currently doesn't support named ports in ingress backend.
## Web Application Routing solution overview
+
The add-on deploys four components: an [nginx ingress controller][nginx], [Secrets Store CSI Driver][csi-driver], [Open Service Mesh (OSM)][osm], and [External-DNS][external-dns] controller.
- **Nginx ingress Controller**: The ingress controller exposed to the internet.
-- **External-dns**: Watches for Kubernetes Ingress resources and creates DNS A records in the cluster-specific DNS zone.
+- **External-DNS controller**: Watches for Kubernetes Ingress resources and creates DNS A records in the cluster-specific DNS zone.
- **CSI driver**: Connector used to communicate with keyvault to retrieve SSL certificates for ingress controller.
- **OSM**: A lightweight, extensible, cloud native service mesh that allows users to uniformly manage, secure, and get out-of-the-box observability features for highly dynamic microservice environments.
-- **External-DNS controller**: Watches for Kubernetes Ingress resources and creates DNS A records in the cluster-specific DNS zone.
## Prerequisites
-* An Azure subscription. If you don't have an Azure subscription, you can create a [free account](https://azure.microsoft.com/free).
-* [Azure CLI installed](/cli/azure/install-azure-cli).
+- An Azure subscription. If you don't have an Azure subscription, you can create a [free account](https://azure.microsoft.com/free).
+- [Azure CLI installed](/cli/azure/install-azure-cli).
+- An Azure Key Vault containing any application certificates.
+- A DNS solution.
-### Install the `aks-preview` Azure CLI
+### Install the `aks-preview` Azure CLI extension
-You also need the *aks-preview* Azure CLI extension version 0.5.25 or later. Install the *aks-preview* Azure CLI extension by using the [az extension add][az-extension-add] command. Or install any available updates by using the [az extension update][az-extension-update] command.
+You also need the *aks-preview* Azure CLI extension version `0.5.75` or later. Install the *aks-preview* Azure CLI extension by using the [az extension add][az-extension-add] command. Or install any available updates by using the [az extension update][az-extension-update] command.
```azurecli-interactive
# Install the aks-preview extension
az extension add --name aks-preview
+
# Update the extension to make sure you have the latest version installed
az extension update --name aks-preview
```
-### Install `osm` CLI
-Since Web Application Routing uses OSM internally to secure intranet communication, we need to set up the CLI. The OSM command-line tool contains everything needed to install and configure Open Service Mesh. The binary is available on the [OSM GitHub releases page][osm-release].
+### Install the `osm` CLI
+
+Since Web Application Routing uses OSM internally to secure intranet communication, we need to set up the `osm` CLI. This command-line tool contains everything needed to install and configure Open Service Mesh. The binary is available on the [OSM GitHub releases page][osm-release].
-## Deploy Web Application Routing: CLI
+## Deploy Web Application Routing with the Azure CLI
The Web Application Routing routing add-on can be enabled with the Azure CLI when deploying an AKS cluster. To do so, use the [az aks create][az-aks-create] command with the `--enable-addons` argument.
@@ -64,25 +67,23 @@ You can also enable Web Application Routing on an existing AKS cluster using the
az aks enable-addons --resource-group myResourceGroup --name myAKSCluster --addons web_application_routing
```
-After the cluster is deployed or updated, use the [az aks show][az-aks-show] command to retrieve the DNS zone name.
-
## Connect to your AKS cluster
To connect to the Kubernetes cluster from your local computer, you use [kubectl][kubectl], the Kubernetes command-line client.
-If you use the Azure Cloud Shell, `kubectl` is already installed. You can also install it locally using the [az aks install-cli][] command:
+If you use the Azure Cloud Shell, `kubectl` is already installed. You can also install it locally using the `az aks install-cli` command:
```azurecli
az aks install-cli
```
-To configure `kubectl` to connect to your Kubernetes cluster, use the [az aks get-credentials][] command. The following example gets credentials for the AKS cluster named *MyAKSCluster* in the *MyResourceGroup*:
+To configure `kubectl` to connect to your Kubernetes cluster, use the [az aks get-credentials][az-aks-get-credentials] command. The following example gets credentials for the AKS cluster named *myAKSCluster* in *myResourceGroup*:
```azurecli
-az aks get-credentials --resource-group MyResourceGroup --name MyAKSCluster
+az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
```
-## Create Application Namespace
+## Create the application namespace
For the sample application environment, let's first create a namespace called `hello-web-app-routing` to run the example pods:
@@ -90,7 +91,7 @@ For the sample application environment, let's first create a namespace called `h
kubectl create namespace hello-web-app-routing
```
-## Add Application Namespace to OSM Control Plane
+We also need to add the application namespace to the OSM control plane:
```bash
osm namespace add hello-web-app-routing
@@ -98,7 +99,7 @@ osm namespace add hello-web-app-routing
## Grant permissions for Web Application Routing
-Identify the Web Application Routing-associated managed identity within the cluster resource group `webapprouting-`. In this walkthrough, the identity is named `webapprouting-myakscluster`.
+Identify the Web Application Routing-associated managed identity within the cluster resource group `webapprouting-`. In this walkthrough, the identity is named `webapprouting-myakscluster`.
:::image type="content" source="media/web-app-routing/identify-msi-web-app-routing.png" alt-text="Cluster resource group in the Azure portal is shown, and the webapprouting-myakscluster user-assigned managed identity is highlighted." lightbox="media/web-app-routing/identify-msi-web-app-routing.png":::
@@ -106,7 +107,13 @@ Copy the identity's object ID:
:::image type="content" source="media/web-app-routing/msi-web-app-object-id.png" alt-text="The webapprouting-myakscluster managed identity screen in Azure portal, the identity's object ID is highlighted. " lightbox="media/web-app-routing/msi-web-app-object-id.png":::
-### Grant Access to Keyvault
+### Grant access to Azure Key Vault
+
+Obtain the vault URI for your Azure Key Vault:
+
+```azurecli
+az keyvault show --resource-group myResourceGroup --name myapp-contoso
+```
Grant `GET` permissions for Web Application Routing to retrieve certificates from Azure Key Vault:
@@ -121,12 +128,12 @@ The Web Application Routing solution may only be triggered on service resources
```yaml
annotations:
kubernetes.azure.com/ingress-host: myapp.contoso.com
- kubernetes.azure.com/tls-cert-keyvault-uri: myapp-contoso.vault.azure.net
+ kubernetes.azure.com/tls-cert-keyvault-uri: myapp-contoso.vault.azure.net/certificates/keyvault-certificate-name/keyvault-certificate-name-revision
```
-These annotations in the service manifest would direct Web Application Routing to create an ingress servicing `myapp.contoso.com` connected to the keyvault `myapp-contoso`.
+These annotations in the service manifest would direct Web Application Routing to create an ingress servicing `myapp.contoso.com` connected to the keyvault `myapp-contoso` and will retrieve the `keyvault-certificate-name` with `keyvault-certificate-name-revision`
-Create a file named **samples-web-app-routing.yaml** and copy in the following YAML. On line 29-31, update `` and `` with the DNS zone name collected in the previous step of this article.
+Create a file named **samples-web-app-routing.yaml** and copy in the following YAML. On line 29-31, update `` with your DNS host name and `` with the full certficicate vault URI.
```yaml
apiVersion: apps/v1
@@ -156,9 +163,9 @@ apiVersion: v1
kind: Service
metadata:
name: aks-helloworld
-annotations:
- kubernetes.azure.com/ingress-host:
- kubernetes.azure.com/tls-cert-keyvault-uri:
+ annotations:
+ kubernetes.azure.com/ingress-host:
+ kubernetes.azure.com/tls-cert-keyvault-uri:
spec:
type: ClusterIP
ports:
@@ -173,37 +180,36 @@ Use the [kubectl apply][kubectl-apply] command to create the resources.
kubectl apply -f samples-web-app-routing.yaml -n hello-web-app-routing
```
-The following example shows the created resources:
+The following example output shows the created resources:
```bash
-$ kubectl apply -f samples-web-app-routing.yaml -n hello-web-app-routing
-
deployment.apps/aks-helloworld created
service/aks-helloworld created
```
-## Verify managed ingress created
+## Verify the managed ingress was created
+
```bash
-$ kubectl get ingress -n hello-web-app-routing -n hello-web-app-routing
+$ kubectl get ingress -n hello-web-app-routing
```
Open a web browser to **, for example *myapp.contoso.com* and verify you see the demo application. The application may take a few minutes to appear.
## Remove Web Application Routing
-```console
+
+First, remove the associated namespace:
+
+```bash
kubectl delete namespace hello-web-app-routing
```
-The Web Application Routing solution can be removed using the Azure CLI. To do so run the following command, substituting your AKS cluster and resource group name.
+The Web Application Routing add-on can be removed using the Azure CLI. To do so run the following command, substituting your AKS cluster and resource group name.
```azurecli
az aks disable-addons --addons web_application_routing --name myAKSCluster --resource-group myResourceGroup --no-wait
```
-When the Web Application Routing routing add-on is disabled, some Kubernetes resources may remain in the cluster. These resources include *configMaps* and *secrets*, and are created in the *app-routing-system* namespace. To maintain a clean cluster, you may want to remove these resources.
-
-Look for *addon-web-application-routing* resources using the following [kubectl get][kubectl-get] commands:
-
+When the Web Application Routing add-on is disabled, some Kubernetes resources may remain in the cluster. These resources include *configMaps* and *secrets*, and are created in the *app-routing-system* namespace. To maintain a clean cluster, you may want to remove these resources.
## Clean up
@@ -227,8 +233,8 @@ service "aks-helloworld" deleted
[az-aks-show]: /cli/azure/aks#az-aks-show
[ingress-https]: ./ingress-tls.md
[az-aks-enable-addons]: /cli/azure/aks#az-aks-enable-addons
-[az aks install-cli]: /cli/azure/aks#az-aks-install-cli
-[az aks get-credentials]: /cli/azure/aks#az-aks-get-credentials
+[az-aks-install-cli]: /cli/azure/aks#az-aks-install-cli
+[az-aks-get-credentials]: /cli/azure/aks#az-aks-get-credentials
[csi-driver]: https://github.com/Azure/secrets-store-csi-driver-provider-azure
[az-extension-add]: /cli/azure/extension#az-extension-add
[az-extension-update]: /cli/azure/extension#az-extension-update
diff --git a/articles/aks/windows-faq.md b/articles/aks/windows-faq.md
index 40d713ed4dda9..b3e170d8c588f 100644
--- a/articles/aks/windows-faq.md
+++ b/articles/aks/windows-faq.md
@@ -195,17 +195,12 @@ Use the following configuration:
1. In your Kubernetes service configuration, set **externalTrafficPolicy=Local**. This ensures that the Kubernetes service directs traffic only to pods within the local node.
1. In your Kubernetes service configuration, set **sessionAffinity: ClientIP**. This ensures that the Azure Load Balancer gets configured with session affinity.
-## What if I need a feature that's not supported?
-
-If you encounter feature gaps, the open-source [aks-engine][aks-engine] project provides an easy and fully customizable way of running Kubernetes in Azure, including Windows support. For more information, see [AKS roadmap][aks-roadmap].
-
## Next steps
To get started with Windows Server containers in AKS, see [Create a node pool that runs Windows Server in AKS][windows-node-cli].
[kubernetes]: https://kubernetes.io
-[aks-engine]: https://github.com/azure/aks-engine
[upstream-limitations]: https://kubernetes.io/docs/setup/production-environment/windows/intro-windows-in-kubernetes/#supported-functionality-and-limitations
[intro-windows]: https://kubernetes.io/docs/setup/production-environment/windows/intro-windows-in-kubernetes/
[aks-roadmap]: https://github.com/Azure/AKS/projects/1
diff --git a/articles/api-management/TOC.yml b/articles/api-management/TOC.yml
index 82c0c5e0662e9..f3f11aa60bbf3 100644
--- a/articles/api-management/TOC.yml
+++ b/articles/api-management/TOC.yml
@@ -190,6 +190,7 @@
href: graphql-api.md
- name: Import and resolve GraphQL schema
href: graphql-schema-resolve-api.md
+ displayName: synthetic GraphQL
- name: Import an App Service web API
href: import-app-service-as-api.md
- name: Import a Container App web API
@@ -238,6 +239,7 @@
href: api-management-policy-expressions.md
- name: Reuse policy configurations
href: policy-fragments.md
+ displayName: policy fragments
- name: Error handling
href: api-management-error-handling-policies.md
- name: Advanced monitoring
@@ -263,6 +265,15 @@
href: api-management-howto-ca-certificates.md
- name: Manage protocols and ciphers
href: api-management-howto-manage-protocols-ciphers.md
+ - name: Mitigate OWASP API threats
+ href: mitigate-owasp-api-threats.md
+ displayName: OWASP top 10, vulnerability, vulnerabilities
+ - name: Manage API authorizations
+ items:
+ - name: Authorizations overview
+ href: authorizations-overview.md
+ - name: Configure and use authorization
+ href: authorizations-how-to.md
- name: Set up backend authentication
items:
- name: Mutual certificate authentication
@@ -389,6 +400,8 @@
href: api-management-transformation-policies.md
- name: Validation policies
href: validation-policies.md
+ - name: Authorizations - identity providers
+ href: authorizations-reference.md
- name: Azure Policy built-ins
displayName: samples, policies, definitions
href: ./policy-reference.md
diff --git a/articles/api-management/add-api-manually.md b/articles/api-management/add-api-manually.md
index 273b4e35c26f0..c54a73e5fbc3e 100644
--- a/articles/api-management/add-api-manually.md
+++ b/articles/api-management/add-api-manually.md
@@ -89,6 +89,9 @@ Test the operation in the Azure portal. You can also test it in the **Developer
This section shows how to add a wildcard operation. A wildcard operation lets you pass an arbitrary value with an API request. Instead of creating separate GET operations as shown in the previous sections, you could create a wildcard GET operation.
+> [!CAUTION]
+> Use care when configuring a wildcard operation. This configuration may make an API more vulnerable to certain [API security threats](mitigate-owasp-api-threats.md#improper-assets-management).
+
### Add the operation
1. Select the API you created in the previous step.
diff --git a/articles/api-management/api-management-access-restriction-policies.md b/articles/api-management/api-management-access-restriction-policies.md
index 9f78d28b8d4d0..a68c273438aca 100644
--- a/articles/api-management/api-management-access-restriction-policies.md
+++ b/articles/api-management/api-management-access-restriction-policies.md
@@ -7,7 +7,7 @@ author: dlepow
ms.service: api-management
ms.topic: reference
-ms.date: 03/04/2022
+ms.date: 06/03/2022
ms.author: danlep
---
@@ -20,12 +20,13 @@ This article provides a reference for API Management access restriction policies
## Access restriction policies
- [Check HTTP header](#CheckHTTPHeader) - Enforces existence and/or value of an HTTP header.
+- [Get authorization context](#GetAuthorizationContext) - Gets the authorization context of a specified [authorization](authorizations-overview.md) configured in the API Management instance.
- [Limit call rate by subscription](#LimitCallRate) - Prevents API usage spikes by limiting call rate, on a per subscription basis.
- [Limit call rate by key](#LimitCallRateByKey) - Prevents API usage spikes by limiting call rate, on a per key basis.
- [Restrict caller IPs](#RestrictCallerIPs) - Filters (allows/denies) calls from specific IP addresses and/or address ranges.
- [Set usage quota by subscription](#SetUsageQuota) - Allows you to enforce a renewable or lifetime call volume and/or bandwidth quota, on a per subscription basis.
- [Set usage quota by key](#SetUsageQuotaByKey) - Allows you to enforce a renewable or lifetime call volume and/or bandwidth quota, on a per key basis.
-- [Validate JWT](#ValidateJWT) - Enforces existence and validity of a JWT extracted from either a specified HTTP Header or a specified query parameter.
+- [Validate JWT](#ValidateJWT) - Enforces existence and validity of a JWT extracted from either a specified HTTP header or a specified query parameter.
- [Validate client certificate](#validate-client-certificate) - Enforces that a certificate presented by a client to an API Management instance matches specified validation rules and claims.
> [!TIP]
@@ -67,7 +68,7 @@ Use the `check-header` policy to enforce that a request has a specified HTTP hea
| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ------- |
| failed-check-error-message | Error message to return in the HTTP response body if the header doesn't exist or has an invalid value. This message must have any special characters properly escaped. | Yes | N/A |
| failed-check-httpcode | HTTP Status code to return if the header doesn't exist or has an invalid value. | Yes | N/A |
-| header-name | The name of the HTTP Header to check. | Yes | N/A |
+| header-name | The name of the HTTP header to check. | Yes | N/A |
| ignore-case | Can be set to True or False. If set to True case is ignored when the header value is compared against the set of acceptable values. | Yes | N/A |
### Usage
@@ -78,6 +79,142 @@ This policy can be used in the following policy [sections](./api-management-howt
- **Policy scopes:** all scopes
+## Get authorization context
+
+Use the `get-authorization-context` policy to get the authorization context of a specified [authorization](authorizations-overview.md) (preview) configured in the API Management instance.
+
+The policy fetches and stores authorization and refresh tokens from the configured authorization provider.
+
+If `identity-type=jwt` is configured, a JWT token is required to be validated. The audience of this token must be https://azure-api.net/authorization-manager.
+
+[!INCLUDE [api-management-policy-generic-alert](../../includes/api-management-policy-generic-alert.md)]
+
+
+### Policy statement
+
+```xml
+
+```
+
+### Examples
+
+#### Example 1: Get token back
+
+```xml
+
+
+
+
+
+ @(((Authorization)context.Variables.GetValueOrDefault("auth-context"))?.AccessToken)
+
+```
+
+#### Example 2: Get token back with dynamically set attributes
+
+```xml
+
+
+
+
+
+ @(((Authorization)context.Variables.GetValueOrDefault("auth-context"))?.AccessToken)
+
+```
+
+#### Example 3: Attach the token to the backend call
+
+```xml
+
+
+
+
+ @("Bearer " + ((Authorization)context.Variables.GetValueOrDefault("auth-context"))?.AccessToken)
+
+```
+
+#### Example 4: Get token from incoming request and return token
+
+```xml
+
+
+
+
+
+ @(((Authorization)context.Variables.GetValueOrDefault("auth-context"))?.AccessToken)
+
+```
+
+### Elements
+
+| Name | Description | Required |
+| ----- | ------------- | -------- |
+| get-authorization-context | Root element. | Yes |
+
+### Attributes
+
+| Name | Description | Required | Default |
+|---|---|---|---|
+| provider-id | The authorization provider resource identifier. | Yes | |
+| authorization-id | The authorization resource identifier. | Yes | |
+| context-variable-name | The name of the context variable to receive the [`Authorization` object](#authorization-object). | Yes | |
+| identity-type | Type of identity to be checked against the authorization access policy. - `managed`: managed identity of the API Management service. - `jwt`: JWT bearer token specified in the `identity` attribute. | No | managed |
+| identity | An Azure AD JWT bearer token to be checked against the authorization permissions. Ignored for `identity-type` other than `jwt`.
Expected claims: - audience: https://azure-api.net/authorization-manager - `oid`: Permission object id - `tid`: Permission tenant id | No | |
+| ignore-error | Boolean. If acquiring the authorization context results in an error (for example, the authorization resource is not found or is in an error state): - `true`: the context variable is assigned a value of null. - `false`: return `500` | No | false |
+
+### Authorization object
+
+The Authorization context variable receives an object of type `Authorization`.
+
+```c#
+class Authorization
+{
+ public string AccessToken { get; }
+ public IReadOnlyDictionary Claims { get; }
+}
+```
+
+| Property Name | Description |
+| -- | -- |
+| AccessToken | Bearer access token to authorize a backend HTTP request. |
+| Claims | Claims returned from the authorization server’s token response API (see [RFC6749#section-5.1](https://datatracker.ietf.org/doc/html/rfc6749#section-5.1)). |
+
+### Usage
+
+This policy can be used in the following policy [sections](./api-management-howto-policies.md#sections) and [scopes](./api-management-howto-policies.md#scopes).
+
+- **Policy sections:** inbound
+
+- **Policy scopes:** all scopes
+
+
## Limit call rate by subscription
The `rate-limit` policy prevents API usage spikes on a per subscription basis by limiting the call rate to a specified number per a specified time period. When the call rate is exceeded, the caller receives a `429 Too Many Requests` response status code.
@@ -280,6 +417,9 @@ This policy can be used in the following policy [sections](./api-management-howt
- **Policy sections:** inbound
- **Policy scopes:** all scopes
+> [!NOTE]
+> If you configure this policy at more than one scope, IP filtering is applied in the order of [policy evaluation](set-edit-policies.md#use-base-element-to-set-policy-evaluation-order) in your policy definition.
+
## Set usage quota by subscription
The `quota` policy enforces a renewable or lifetime call volume and/or bandwidth quota, on a per subscription basis.
@@ -412,7 +552,7 @@ This policy can be used in the following policy [sections](./api-management-howt
## Validate JWT
-The `validate-jwt` policy enforces existence and validity of a JSON web token (JWT) extracted from either a specified HTTP Header or a specified query parameter.
+The `validate-jwt` policy enforces existence and validity of a JSON web token (JWT) extracted from either a specified HTTP header or a specified query parameter.
> [!IMPORTANT]
> The `validate-jwt` policy requires that the `exp` registered claim is included in the JWT token, unless `require-expiration-time` attribute is specified and set to `false`.
diff --git a/articles/api-management/api-management-advanced-policies.md b/articles/api-management/api-management-advanced-policies.md
index e29a6ef18032d..e8e579e4286d4 100644
--- a/articles/api-management/api-management-advanced-policies.md
+++ b/articles/api-management/api-management-advanced-policies.md
@@ -713,7 +713,7 @@ This sample policy shows an example of using the `send-one-way-request` policy t
- https://hooks.slack.com/services/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
+ https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXXPOST@{
return new JObject(
diff --git a/articles/api-management/api-management-cross-domain-policies.md b/articles/api-management/api-management-cross-domain-policies.md
index d4bf59079ecd6..eb27f8f544213 100644
--- a/articles/api-management/api-management-cross-domain-policies.md
+++ b/articles/api-management/api-management-cross-domain-policies.md
@@ -51,6 +51,9 @@ Use the `cross-domain` policy to make the API accessible from Adobe Flash and Mi
|----------|-----------------|--------------|
|cross-domain|Root element. Child elements must conform to the [Adobe cross-domain policy file specification](https://www.adobe.com/devnet-docs/acrobatetk/tools/AppSec/CrossDomain_PolicyFile_Specification.pdf).|Yes|
+> [!CAUTION]
+> Use the `*` wildcard with care in policy settings. This configuration may be overly permissive and may make an API more vulnerable to certain [API security threats](mitigate-owasp-api-threats.md#security-misconfiguration).
+
### Usage
This policy can be used in the following policy [sections](./api-management-howto-policies.md#sections) and [scopes](./api-management-howto-policies.md#scopes).
@@ -137,6 +140,9 @@ This example demonstrates how to support [pre-flight requests](https://developer
|expose-headers|This element contains `header` elements specifying names of the headers that will be accessible by the client.|No|N/A|
|header|Specifies a header name.|At least one `header` element is required in `allowed-headers` or `expose-headers` if the section is present.|N/A|
+> [!CAUTION]
+> Use the `*` wildcard with care in policy settings. This configuration may be overly permissive and may make an API more vulnerable to certain [API security threats](mitigate-owasp-api-threats.md#security-misconfiguration).
+
### Attributes
|Name|Description|Required|Default|
diff --git a/articles/api-management/api-management-get-started-revise-api.md b/articles/api-management/api-management-get-started-revise-api.md
index b2f6ac98a8adf..3542faaf6d071 100644
--- a/articles/api-management/api-management-get-started-revise-api.md
+++ b/articles/api-management/api-management-get-started-revise-api.md
@@ -120,7 +120,7 @@ Use this procedure to create and update a release.
The notes you specify appear in the change log. You can see them in the output of the previous command.
-1. When you create a release, the `--notes` parameter is optional. You can add or change the notes later using the [az apim api release update](/cli/azure/apim/api/release#az_apim_api_release_update) command:
+1. When you create a release, the `--notes` parameter is optional. You can add or change the notes later using the [az apim api release update](/cli/azure/apim/api/release#az-apim-api-release-update) command:
```azurecli
az apim api release update --resource-group apim-hello-word-resource-group \
diff --git a/articles/api-management/api-management-howto-aad.md b/articles/api-management/api-management-howto-aad.md
index e67741f224a0d..cfd7eda37cf97 100644
--- a/articles/api-management/api-management-howto-aad.md
+++ b/articles/api-management/api-management-howto-aad.md
@@ -1,18 +1,12 @@
---
-title: Authorize developer accounts by using Azure Active Directory
+title: Authorize access to API Management developer portal by using Azure AD
titleSuffix: Azure API Management
-description: Learn how to authorize users by using Azure Active Directory in API Management.
-services: api-management
-documentationcenter: API Management
-author: dlepow
-manager: cfowler
-editor: ''
+description: Learn how to enable user sign-in to the API Management developer portal by using Azure Active Directory.
+author: dlepow
ms.service: api-management
-ms.workload: mobile
-ms.tgt_pltfrm: na
ms.topic: article
-ms.date: 09/20/2021
+ms.date: 05/20/2022
ms.author: danlep
---
@@ -27,19 +21,39 @@ In this article, you'll learn how to:
- Complete the [Create an Azure API Management instance](get-started-create-service-instance.md) quickstart.
-- [Import and publish](import-and-publish.md) an Azure API Management instance.
+- [Import and publish](import-and-publish.md) an API in the Azure API Management instance.
[!INCLUDE [azure-cli-prepare-your-environment-no-header.md](../../includes/azure-cli-prepare-your-environment-no-header.md)]
[!INCLUDE [premium-dev-standard.md](../../includes/api-management-availability-premium-dev-standard.md)]
-## Authorize developer accounts by using Azure AD
+[!INCLUDE [api-management-navigate-to-instance.md](../../includes/api-management-navigate-to-instance.md)]
+
+
+## Enable user sign-in using Azure AD - portal
+
+To simplify the configuration, API Management can automatically enable an Azure AD application and identity provider for users of the developer portal. Alternatively, you can manually enable the Azure AD application and identity provider.
+
+### Automatically enable Azure AD application and identity provider
+
+1. In the left menu of your API Management instance, under **Developer portal**, select **Portal overview**.
+1. On the **Portal overview** page, scroll down to **Enable user sign-in with Azure Active Directory**.
+1. Select **Enable Azure AD**.
+1. On the **Enable Azure AD** page, select **Enable Azure AD**.
+1. Select **Close**.
-1. Sign in to the [Azure portal](https://portal.azure.com).
-1. Select ![Arrow icon.](./media/api-management-howto-aad/arrow.png).
-1. Search for and select **API Management services**.
-1. Select your API Management service instance.
-1. Under **Developer portal**, select **Identities**.
+ :::image type="content" source="media/api-management-howto-aad/enable-azure-ad-portal.png" alt-text="Screenshot of enabling Azure AD in the developer portal overview page.":::
+
+After the Azure AD provider is enabled:
+
+* Users in the specified Azure AD instance can [sign into the developer portal by using an Azure AD account](#log_in_to_dev_portal).
+* You can manage the Azure AD configuration on the **Developer portal** > **Identities** page in the portal.
+* Optionally configure other sign-in settings by selecting **Identities** > **Settings**. For example, you might want to redirect anonymous users to the sign-in page.
+* Republish the developer portal after any configuration change.
+
+### Manually enable Azure AD application and identity provider
+
+1. In the left menu of your API Management instance, under **Developer portal**, select **Identities**.
1. Select **+Add** from the top to open the **Add identity provider** pane to the right.
1. Under **Type**, select **Azure Active Directory** from the drop-down menu.
* Once selected, you'll be able to enter other necessary information.
@@ -47,7 +61,7 @@ In this article, you'll learn how to:
* See more information about these controls later in the article.
1. Save the **Redirect URL** for later.
- :::image type="content" source="media/api-management-howto-aad/api-management-with-aad001.png" alt-text="Add identity provider in Azure portal":::
+ :::image type="content" source="media/api-management-howto-aad/api-management-with-aad001.png" alt-text="Screenshot of adding identity provider in Azure portal.":::
> [!NOTE]
> There are two redirect URLs:
@@ -60,9 +74,9 @@ In this article, you'll learn how to:
1. Navigate to [App registrations](https://go.microsoft.com/fwlink/?linkid=2083908) to register an app in Active Directory.
1. Select **New registration**. On the **Register an application** page, set the values as follows:
- * Set **Name** to a meaningful name. e.g., *developer-portal*
+ * Set **Name** to a meaningful name such as *developer-portal*
* Set **Supported account types** to **Accounts in this organizational directory only**.
- * Set **Redirect URI** to the value you saved from step 9.
+ * In **Redirect URI**, select **Web** and paste the redirect URL you saved from a previous step.
* Select **Register**.
1. After you've registered the application, copy the **Application (client) ID** from the **Overview** page.
@@ -77,14 +91,19 @@ In this article, you'll learn how to:
* Choose **Add**.
1. Copy the client **Secret value** before leaving the page. You will need it later.
1. Under **Manage** in the side menu, select **Authentication**.
-1. Under the **Implicit grant and hybrid flows** sections, select the **ID tokens** checkbox.
+ 1. Under the **Implicit grant and hybrid flows** section, select the **ID tokens** checkbox.
+ 1. Select **Save**.
+1. Under **Manage** in the side menu, select **Token configuration** > **+ Add optional claim**.
+ 1. In **Token type**, select **ID**.
+ 1. Select (check) the following claims: **email**, **family_name**, **given_name**.
+ 1. Select **Add**. If prompted, select **Turn on the Microsoft Graph email, profile permission**.
1. Switch to the browser tab with your API Management instance.
1. Paste the secret into the **Client secret** field in the **Add identity provider** pane.
> [!IMPORTANT]
> Update the **Client secret** before the key expires.
-1. In the **Add identity provider** pane's **Allowed Tenants** field, specify the Azure AD instances' domains to which you want to grant access to the API Management service instance APIs.
+1. In the **Add identity provider** pane's **Allowed tenants** field, specify the Azure AD instance's domains to which you want to grant access to the API Management service instance APIs.
* You can separate multiple domains with newlines, spaces, or commas.
> [!NOTE]
@@ -93,9 +112,15 @@ In this article, you'll learn how to:
> 1. Enter the domain name of the Azure AD tenant to which they want to grant access.
> 1. Select **Submit**.
-1. After you specify the desired configuration, select **Add**.
+1. After you specify the desired configuration, select **Add**.
+1. Republish the developer portal for the Azure AD configuration to take effect. In the left menu, under **Developer portal**, select **Portal overview** > **Publish**.
-Once changes are saved, users in the specified Azure AD instance can [sign into the developer portal by using an Azure AD account](#log_in_to_dev_portal).
+After the Azure AD provider is enabled:
+
+* Users in the specified Azure AD instance can [sign into the developer portal by using an Azure AD account](#log_in_to_dev_portal).
+* You can manage the Azure AD configuration on the **Developer portal** > **Identities** page in the portal.
+* Optionally configure other sign-in settings by selecting **Identities** > **Settings**. For example, you might want to redirect anonymous users to the sign-in page.
+* Republish the developer portal after any configuration change.
## Add an external Azure AD group
@@ -120,20 +145,20 @@ Follow these steps to grant:
az rest --method PATCH --uri "https://graph.microsoft.com/v1.0/$($tenantId)/applications/$($appObjectID)" --body "{'requiredResourceAccess':[{'resourceAccess': [{'id': 'e1fe6dd8-ba31-4d61-89e7-88639da4683d','type': 'Scope'},{'id': '7ab1d382-f21e-4acd-a863-ba3e13f7da61','type': 'Role'}],'resourceAppId': '00000003-0000-0000-c000-000000000000'}]}"
```
-2. Log out and log back in to the Azure portal.
-3. Navigate to the App Registration page for the application you registered in [the previous section](#authorize-developer-accounts-by-using-azure-ad).
-4. Click **API Permissions**. You should see the permissions granted by the Azure CLI script in step 1.
-5. Select **Grant admin consent for {tenantname}** so that you grant access for all users in this directory.
+1. Sign out and sign back in to the Azure portal.
+1. Navigate to the App Registration page for the application you registered in [the previous section](#enable-user-sign-in-using-azure-ad---portal).
+1. Select **API Permissions**. You should see the permissions granted by the Azure CLI script in step 1.
+1. Select **Grant admin consent for {tenantname}** so that you grant access for all users in this directory.
Now you can add external Azure AD groups from the **Groups** tab of your API Management instance.
1. Under **Developer portal** in the side menu, select **Groups**.
-2. Select the **Add Azure AD group** button.
+1. Select the **Add Azure AD group** button.
- !["Add A A D group" button](./media/api-management-howto-aad/api-management-with-aad008.png)
+ !["Screenshot showing Add Azure AD group button.](./media/api-management-howto-aad/api-management-with-aad008.png)
1. Select the **Tenant** from the drop-down.
-2. Search for and select the group that you want to add.
-3. Press the **Select** button.
+1. Search for and select the group that you want to add.
+1. Press the **Select** button.
Once you add an external Azure AD group, you can review and configure its properties:
1. Select the name of the group from the **Groups** tab.
@@ -144,12 +169,15 @@ Users from the configured Azure AD instance can now:
* View and subscribe to any groups for which they have visibility.
> [!NOTE]
-> Learn more about the difference between **Delegated** and **Application** permissions types in [Permissions and consent in the Microsoft identity platform](../active-directory/develop/v2-permissions-and-consent.md#permission-types) article.
+> Learn more about the difference between **Delegated** and **Application** permissions types in [Permissions and consent in the Microsoft identity platform](../active-directory/develop/v2-permissions-and-consent.md#permission-types) article.
## Developer portal: Add Azure AD account authentication
In the developer portal, you can sign in with Azure AD using the **Sign-in button: OAuth** widget included on the sign-in page of the default developer portal content.
+:::image type="content" source="media/api-management-howto-aad/developer-portal-azure-ad-signin.png" alt-text="Screenshot showing OAuth widget in developer portal.":::
+
+
Although a new account will automatically be created when a new user signs in with Azure AD, consider adding the same widget to the sign-up page. The **Sign-up form: OAuth** widget represents a form used for signing up with OAuth.
> [!IMPORTANT]
diff --git a/articles/api-management/api-management-howto-add-products.md b/articles/api-management/api-management-howto-add-products.md
index 2fb53903ab57c..0fefbdd150c7b 100644
--- a/articles/api-management/api-management-howto-add-products.md
+++ b/articles/api-management/api-management-howto-add-products.md
@@ -57,6 +57,9 @@ In this tutorial, you learn how to:
1. Select **Create** to create your new product.
+> [!CAUTION]
+> Use care when configuring a product that doesn't require a subscription. This configuration may be overly permissive and may make the product's APIs more vulnerable to certain [API security threats](mitigate-owasp-api-threats.md#security-misconfiguration).
+
### [Azure CLI](#tab/azure-cli)
To begin using Azure CLI:
@@ -84,6 +87,9 @@ You can specify various values for your product:
| `--subscriptions-limit` | Optionally, limit the count of multiple simultaneous subscriptions.|
| `--legal-terms` | You can include the terms of use for the product, which subscribers must accept to use the product. |
+> [!CAUTION]
+> Use care when configuring a product that doesn't require a subscription. This configuration may be overly permissive and may make the product's APIs more vulnerable to certain [API security threats](mitigate-owasp-api-threats.md#security-misconfiguration).
+
To see your current products, use the [az apim product list](/cli/azure/apim/product#az-apim-product-list) command:
```azurecli
diff --git a/articles/api-management/api-management-howto-cache-external.md b/articles/api-management/api-management-howto-cache-external.md
index ac4f046ffb2e0..3576c9a2bca8a 100644
--- a/articles/api-management/api-management-howto-cache-external.md
+++ b/articles/api-management/api-management-howto-cache-external.md
@@ -1,31 +1,28 @@
---
title: Use an external cache in Azure API Management | Microsoft Docs
-description: Learn how to configure and use an external cache in Azure API Management. Using an external cache lets you overcome some limitations of the built-in cache.
+description: Learn how to configure and use an external Redis-compatible cache in Azure API Management. Using an external cache gives you more control and flexibility than the built-in cache.
services: api-management
documentationcenter: ''
author: dlepow
-manager: erikre
-editor: ''
-ms.assetid: 740f6a27-8323-474d-ade2-828ae0c75e7a
ms.service: api-management
-ms.topic: conceptual
-ms.date: 04/26/2020
+ms.topic: how-to
+ms.date: 05/19/2022
ms.author: danlep
---
# Use an external Redis-compatible cache in Azure API Management
-In addition to utilizing the built-in cache, Azure API Management allows for caching responses in an external Redis-compatible cache, e.g. Azure Cache for Redis.
+In addition to utilizing the built-in cache, Azure API Management allows for caching responses in an external Redis-compatible cache, such as Azure Cache for Redis.
Using an external cache allows you to overcome a few limitations of the built-in cache:
* Avoid having your cache periodically cleared during API Management updates
* Have more control over your cache configuration
-* Cache more data than your API Management tier allows to
+* Cache more data than your API Management tier allows
* Use caching with the Consumption tier of API Management
-* Enable caching in the [API Management self-hosted gateways](self-hosted-gateway-overview.md)
+* Enable caching in the [API Management self-hosted gateway](self-hosted-gateway-overview.md)
For more detailed information about caching, see [API Management caching policies](api-management-caching-policies.md) and [Custom caching in Azure API Management](api-management-sample-cache-by-key.md).
@@ -45,62 +42,76 @@ To complete this tutorial, you need to:
## Create Azure Cache for Redis
-This section explains how to create an Azure Cache for Redis in Azure. If you already have an Azure Cache for Redis, within or outside of Azure, you can skip to the next section.
+This section explains how to create an Azure Cache for Redis in Azure. If you already have an Azure Cache for Redis, or another Redis-compatible cache within or outside of Azure, you can skip to the next section.
[!INCLUDE [redis-cache-create](../azure-cache-for-redis/includes/redis-cache-create.md)]
## Deploy Redis cache to Kubernetes
-For caching, self-hosted gateways rely exclusively on external caches. For caching to be effective self-hosted gateways and the cache they rely on must be located close to each other to minimize lookup and store latencies. Deploying a Redis cache into the same Kubernetes cluster or in a separate cluster nearby are the best options. Follow this [link](https://github.com/kubernetes/examples/tree/master/guestbook) to learn how to deploy Redis cache to a Kubernetes cluster.
+For a self-hosted gateway, caching requires an external cache. For caching to be effective, a self-hosted gateway and the cache it relies on must be located close to each other to minimize lookup and store latencies. Deploying a Redis cache into the same Kubernetes cluster or in a separate cluster nearby are the best options. Learn how to [deploy Redis cache to a Kubernetes cluster](https://github.com/kubernetes/examples/tree/master/guestbook).
## Add an external cache
-Follow the steps below to add an external Azure Cache for Redis in Azure API Management.
+Follow the steps below to add an external Redis-compatible cache in Azure API Management. You can limit the cache to a specific gateway in your API Management instance.
![Screenshot that shows how to add an external Azure Cache for Redis in Azure API Management.](media/api-management-howto-cache-external/add-external-cache.png)
+### Use from setting
+
+The **Use from** setting in the configuration specifies the location of your API Management instance that will use the cache. Select one of the following:
+
+* The Azure region where the API Management instance is hosted (or one of the configured locations, if you have a [multi-region](api-management-howto-deploy-multi-region.md) deployment)
+
+* A self-hosted gateway location
+
+* **Default**, to configure the cache as the default for all gateway locations in the API Management instance
+
+ A cache used for **Default** will be overridden by a cache used for a specific matching region or location.
+
+ For example, consider an API Management instance that's hosted in the East US, Southeast Asia, and West Europe regions. There are two caches configured, one for **Default** and one for **Southeast Asia**. In this example, API Management in **Southeast Asia** will use its own cache, while the other two regions will use the **Default** cache entry.
+
> [!NOTE]
-> The **Use from** setting specifies an Azure region or a self-hosted gateway location that will use the configured cache. The caches configured as **Default** will be overridden by caches with a specific matching region or location value.
->
-> For example, if API Management is hosted in the East US, Southeast Asia and West Europe regions and there are two caches configured, one for **Default** and one for **Southeast Asia**, API Management in **Southeast Asia** will use its own cache, while the other two regions will use the **Default** cache entry.
+> You can configure the same external cache for more than one API Management instance. The API Management instances can be in the same or different regions. When sharing the cache for more than one instance, you must select **Default** in the **Use from** setting.
### Add an Azure Cache for Redis from the same subscription
1. Browse to your API Management instance in the Azure portal.
2. Select the **External cache** tab from the menu on the left.
-3. Click the **+ Add** button.
+3. Select the **+ Add** button.
4. Select your cache in the **Cache instance** dropdown field.
-5. Select **Default** or specify the desired region in the **Use from** dropdown field.
-6. Click **Save**.
+5. Select **Default** or specify the desired region in the [**Use from**](#use-from-setting) dropdown field.
+6. Select **Save**.
-### Add an Azure Cache for Redis hosted outside of the current Azure subscription or Azure in general
+### Add a Redis-compatible cache hosted outside of the current Azure subscription or Azure in general
1. Browse to your API Management instance in the Azure portal.
2. Select the **External cache** tab from the menu on the left.
-3. Click the **+ Add** button.
+3. Select the **+ Add** button.
4. Select **Custom** in the **Cache instance** dropdown field.
-5. Select **Default** or specify the desired region in the **Use from** dropdown field.
-6. Provide your Azure Cache for Redis connection string in the **Connection string** field.
-7. Click **Save**.
+5. Select **Default** or specify the desired region in the [**Use from**](#use-from-setting) dropdown field.
+6. Provide your Azure Cache for Redis (or Redis-compatible cache) connection string in the **Connection string** field.
+7. Select **Save**.
### Add a Redis cache to a self-hosted gateway
1. Browse to your API Management instance in the Azure portal.
2. Select the **External cache** tab from the menu on the left.
-3. Click the **+ Add** button.
+3. Select the **+ Add** button.
4. Select **Custom** in the **Cache instance** dropdown field.
-5. Specify the desired self-hosted gateway location or **Default** in the **Use from** dropdown field.
+5. Specify the desired self-hosted gateway location or **Default** in the [**Use from**](#use-from-setting) dropdown field.
6. Provide your Redis cache connection string in the **Connection string** field.
-7. Click **Save**.
+7. Select **Save**.
## Use the external cache
-Once the external cache is configured in Azure API Management, it can be used through caching policies. See [Add caching to improve performance in Azure API Management](api-management-howto-cache.md) for detailed steps.
+After adding a Redis-compatible cache, configure [caching policies](api-management-caching-policies.md) to enable response caching, or caching of values by key, in the external cache.
+
+For a detailed example, see [Add caching to improve performance in Azure API Management](api-management-howto-cache.md).
## Next steps
* For more information about caching policies, see [Caching policies][Caching policies] in the [API Management policy reference][API Management policy reference].
-* For information on caching items by key using policy expressions, see [Custom caching in Azure API Management](api-management-sample-cache-by-key.md).
+* To cache items by key using policy expressions, see [Custom caching in Azure API Management](api-management-sample-cache-by-key.md).
[API Management policy reference]: ./api-management-policies.md
[Caching policies]: ./api-management-caching-policies.md
diff --git a/articles/api-management/api-management-howto-create-or-invite-developers.md b/articles/api-management/api-management-howto-create-or-invite-developers.md
index de0f16bc29489..305af98970613 100644
--- a/articles/api-management/api-management-howto-create-or-invite-developers.md
+++ b/articles/api-management/api-management-howto-create-or-invite-developers.md
@@ -52,6 +52,8 @@ When a developer is invited, an email is sent to the developer. This email is ge
Once the invitation is accepted, the account becomes active.
+Invitation link will be active for 2 days.
+
## Deactivate or reactivate a developer account
By default, newly created or invited developer accounts are **Active**. To deactivate a developer account, click **Block**. To reactivate a blocked developer account, click **Activate**. A blocked developer account can't access the developer portal or call any APIs. To delete a user account, click **Delete**.
diff --git a/articles/api-management/api-management-howto-disaster-recovery-backup-restore.md b/articles/api-management/api-management-howto-disaster-recovery-backup-restore.md
index 8696f4d6f57f4..ea1ded555981d 100644
--- a/articles/api-management/api-management-howto-disaster-recovery-backup-restore.md
+++ b/articles/api-management/api-management-howto-disaster-recovery-backup-restore.md
@@ -78,7 +78,7 @@ All of the tasks that you do on resources using the Azure Resource Manager must
Before calling the APIs that generate the backup and restore, you need to get a token. The following example uses the [Microsoft.IdentityModel.Clients.ActiveDirectory](https://www.nuget.org/packages/Microsoft.IdentityModel.Clients.ActiveDirectory) NuGet package to retrieve the token.
> [!IMPORTANT]
-> The [Microsoft.IdentityModel.Clients.ActiveDirectory](https://www.nuget.org/packages/Microsoft.IdentityModel.Clients.ActiveDirectory) NuGet package and Azure AD Authentication Library (ADAL) have been deprecated. No new features have been added since June 30, 2020. We strongly encourage you to upgrade, see the [migration guide](/azure/active-directory/develop/msal-migration) for more details.
+> The [Microsoft.IdentityModel.Clients.ActiveDirectory](https://www.nuget.org/packages/Microsoft.IdentityModel.Clients.ActiveDirectory) NuGet package and Azure AD Authentication Library (ADAL) have been deprecated. No new features have been added since June 30, 2020. We strongly encourage you to upgrade, see the [migration guide](../active-directory/develop/msal-migration.md) for more details.
```csharp
using Microsoft.IdentityModel.Clients.ActiveDirectory;
@@ -331,4 +331,4 @@ API Management **Premium** tier also supports [zone redundancy](zone-redundancy.
[api-management-arm-token]: ./media/api-management-howto-disaster-recovery-backup-restore/api-management-arm-token.png
[api-management-endpoint]: ./media/api-management-howto-disaster-recovery-backup-restore/api-management-endpoint.png
[control-plane-ip-address]: virtual-network-reference.md#control-plane-ip-addresses
-[azure-storage-ip-firewall]: ../storage/common/storage-network-security.md#grant-access-from-an-internet-ip-range
+[azure-storage-ip-firewall]: ../storage/common/storage-network-security.md#grant-access-from-an-internet-ip-range
\ No newline at end of file
diff --git a/articles/api-management/api-management-howto-integrate-internal-vnet-appgateway.md b/articles/api-management/api-management-howto-integrate-internal-vnet-appgateway.md
index 1e5724678c703..76db55128709d 100644
--- a/articles/api-management/api-management-howto-integrate-internal-vnet-appgateway.md
+++ b/articles/api-management/api-management-howto-integrate-internal-vnet-appgateway.md
@@ -23,6 +23,11 @@ By combining API Management provisioned in an internal virtual network with the
* Use a single API Management resource and have a subset of APIs defined in API Management available for external consumers.
* Provide a turnkey way to switch access to API Management from the public internet on and off.
+For architectural guidance, see:
+* **Basic enterprise integration**: [Reference architecture](/azure/architecture/reference-architectures/enterprise-integration/basic-enterprise-integration?toc=%2Fazure%2Fapi-management%2Ftoc.json&bc=/azure/api-management/breadcrumb/toc.json)
+* **API Management landing zone accelerator**: [Reference architecture](/azure/architecture/example-scenario/integration/app-gateway-internal-api-management-function?toc=%2Fazure%2Fapi-management%2Ftoc.json&bc=/azure/api-management/breadcrumb/toc.json) and [design guidance](/azure/cloud-adoption-framework/scenarios/app-platform/api-management/land?toc=%2Fazure%2Fapi-management%2Ftoc.json&bc=/azure/api-management/breadcrumb/toc.json)
+
+
> [!NOTE]
> This article has been updated to use the [Application Gateway WAF_v2 SKU](../application-gateway/application-gateway-autoscaling-zone-redundant.md).
diff --git a/articles/api-management/api-management-howto-properties.md b/articles/api-management/api-management-howto-properties.md
index 855b64f707d8a..f75c9d2b39d2b 100644
--- a/articles/api-management/api-management-howto-properties.md
+++ b/articles/api-management/api-management-howto-properties.md
@@ -143,10 +143,11 @@ az apim nv delete --resource-group apim-hello-word-resource-group \
The examples in this section use the named values shown in the following table.
| Name | Value | Secret |
-|--------------------|----------------------------|--------|---------|
+|--------------------|----------------------------|--------|
| ContosoHeader | `TrackingId` | False |
| ContosoHeaderValue | •••••••••••••••••••••• | True |
| ExpressionProperty | `@(DateTime.Now.ToString())` | False |
+| ContosoHeaderValue2 | `This is a header value.` | False |
To use a named value in a policy, place its display name inside a double pair of braces like `{{ContosoHeader}}`, as shown in the following example:
@@ -182,6 +183,16 @@ If you look at the outbound [API trace](api-management-howto-api-inspector.md) f
:::image type="content" source="media/api-management-howto-properties/api-management-api-inspector-trace.png" alt-text="API Inspector trace":::
+String interpolation can also be used with named values.
+
+```xml
+
+ @($"The URL encoded value is {System.Net.WebUtility.UrlEncode("{{ContosoHeaderValue2}}")}")
+
+```
+
+The value for `CustomHeader` will be `The URL encoded value is This+is+a+header+value.`.
+
> [!CAUTION]
> If a policy references a secret in Azure Key Vault, the value from the key vault will be visible to users who have access to subscriptions enabled for [API request tracing](api-management-howto-api-inspector.md).
diff --git a/articles/api-management/api-management-policies.md b/articles/api-management/api-management-policies.md
index 64876e34f5654..9626b27954826 100644
--- a/articles/api-management/api-management-policies.md
+++ b/articles/api-management/api-management-policies.md
@@ -19,6 +19,7 @@ More information about policies:
## [Access restriction policies](api-management-access-restriction-policies.md)
- [Check HTTP header](api-management-access-restriction-policies.md#CheckHTTPHeader) - Enforces existence and/or value of an HTTP Header.
+- [Get authorization context](api-management-access-restriction-policies.md#GetAuthorizationContext) - Gets the authorization context of a specified [authorization](authorizations-overview.md) configured in the API Management instance.
- [Limit call rate by subscription](api-management-access-restriction-policies.md#LimitCallRate) - Prevents API usage spikes by limiting call rate, on a per subscription basis.
- [Limit call rate by key](api-management-access-restriction-policies.md#LimitCallRateByKey) - Prevents API usage spikes by limiting call rate, on a per key basis.
- [Restrict caller IPs](api-management-access-restriction-policies.md#RestrictCallerIPs) - Filters (allows/denies) calls from specific IP addresses and/or address ranges.
diff --git a/articles/api-management/api-management-policy-expressions.md b/articles/api-management/api-management-policy-expressions.md
index 7e52ec847bdf4..d08095c8f56d0 100644
--- a/articles/api-management/api-management-policy-expressions.md
+++ b/articles/api-management/api-management-policy-expressions.md
@@ -199,7 +199,7 @@ The `context` variable is implicitly available in every policy [expression](api-
|----------------------|-------------------------------------------------------|
|context|[Api](#ref-context-api): [IApi](#ref-iapi)
[Deployment](#ref-context-deployment)
Elapsed: TimeSpan - time interval between the value of Timestamp and current time
[LastError](#ref-context-lasterror)
[Operation](#ref-context-operation)
[Product](#ref-context-product)
[Request](#ref-context-request)
RequestId: Guid - unique request identifier
[Response](#ref-context-response)
[Subscription](#ref-context-subscription)
Timestamp: DateTime - point in time when request was received
SubscriptionRequired: bool|
diff --git a/articles/api-management/api-management-sample-cache-by-key.md b/articles/api-management/api-management-sample-cache-by-key.md
index ceb16439a83c3..ccc338645a6df 100644
--- a/articles/api-management/api-management-sample-cache-by-key.md
+++ b/articles/api-management/api-management-sample-cache-by-key.md
@@ -4,26 +4,24 @@ description: Learn how to cache items by key in Azure API Management. You can mo
services: api-management
documentationcenter: ''
author: dlepow
-manager: erikre
editor: ''
-
-ms.assetid: 772bc8dd-5cda-41c4-95bf-b9f6f052bc85
+ms.topic: how-to
ms.service: api-management
-ms.topic: article
-ms.tgt_pltfrm: na
-ms.workload: na
-ms.date: 12/15/2016
+ms.date: 05/19/2022
ms.author: danlep
---
# Custom caching in Azure API Management
-Azure API Management service has built-in support for [HTTP response caching](api-management-howto-cache.md) using the resource URL as the key. The key can be modified by request headers using the `vary-by` properties. This is useful for caching entire HTTP responses (also known as representations), but sometimes it is useful to just cache a portion of a representation. The new [cache-lookup-value](./api-management-caching-policies.md#GetFromCacheByKey) and [cache-store-value](./api-management-caching-policies.md#StoreToCacheByKey) policies provide the ability to store and retrieve arbitrary pieces of data from within policy definitions. This ability also adds value to the previously introduced [send-request](./api-management-advanced-policies.md#SendRequest) policy because you can now cache responses from external services.
+Azure API Management service has built-in support for [HTTP response caching](api-management-howto-cache.md) using the resource URL as the key. The key can be modified by request headers using the `vary-by` properties. This is useful for caching entire HTTP responses (also known as representations), but sometimes it's useful to just cache a portion of a representation. The [cache-lookup-value](./api-management-caching-policies.md#GetFromCacheByKey) and [cache-store-value](./api-management-caching-policies.md#StoreToCacheByKey) policies provide the ability to store and retrieve arbitrary pieces of data from within policy definitions. This ability also adds value to the [send-request](./api-management-advanced-policies.md#SendRequest) policy because you can cache responses from external services.
## Architecture
-API Management service uses a shared per-tenant data cache so that, as you scale up to multiple units you still get access to the same cached data. However, when working with a multi-region deployment there are independent caches within each of the regions. It is important to not treat the cache as a data store, where it is the only source of some piece of information. If you did, and later decided to take advantage of the multi-region deployment, then customers with users that travel may lose access to that cached data.
+API Management service uses a shared per-tenant internal data cache so that, as you scale up to multiple units, you still get access to the same cached data. However, when working with a multi-region deployment there are independent caches within each of the regions. It's important to not treat the cache as a data store, where it's the only source of some piece of information. If you did, and later decided to take advantage of the multi-region deployment, then customers with users that travel may lose access to that cached data.
+
+> [!NOTE]
+> The internal cache is not available in the **Consumption** tier of Azure API Management. You can [use an external Azure Cache for Redis](api-management-howto-cache-external.md) instead. An external cache allows for greater cache control and flexibility for API Management instances in all tiers.
## Fragment caching
-There are certain cases where responses being returned contain some portion of data that is expensive to determine and yet remains fresh for a reasonable amount of time. As an example, consider a service built by an airline that provides information relating flight reservations, flight status, etc. If the user is a member of the airlines points program, they would also have information relating to their current status and accumulated mileage. This user-related information might be stored in a different system, but it may be desirable to include it in responses returned about flight status and reservations. This can be done using a process called fragment caching. The primary representation can be returned from the origin server using some kind of token to indicate where the user-related information is to be inserted.
+There are certain cases where responses being returned contain some portion of data that is expensive to determine and yet remains fresh for a reasonable amount of time. As an example, consider a service built by an airline that provides information relating flight reservations, flight status, and so on. If the user is a member of the airlines points program, they would also have information relating to their current status and accumulated mileage. This user-related information might be stored in a different system, but it may be desirable to include it in responses returned about flight status and reservations. This can be done using a process called fragment caching. The primary representation can be returned from the origin server using some kind of token to indicate where the user-related information is to be inserted.
Consider the following JSON response from a backend API.
@@ -44,7 +42,7 @@ And secondary resource at `/userprofile/{userid}` that looks like,
{ "username" : "Bob Smith", "Status" : "Gold" }
```
-To determine the appropriate user information to include, API Management needs to identify who the end user is. This mechanism is implementation-dependent. As an example, I am using the `Subject` claim of a `JWT` token.
+To determine the appropriate user information to include, API Management needs to identify who the end user is. This mechanism is implementation-dependent. The following example uses the `Subject` claim of a `JWT` token.
```xml
```
-API Management stores the value in the cache using the exact same key that API Management originally attempted to retrieve it with. The duration that API Management chooses to store the value should be based on how often the information changes and how tolerant users are to out-of-date information.
+API Management stores the value in the cache using the same key that API Management originally attempted to retrieve it with. The duration that API Management chooses to store the value should be based on how often the information changes and how tolerant users are to out-of-date information.
-It is important to realize that retrieving from the cache is still an out-of-process, network request and potentially can still add tens of milliseconds to the request. The benefits come when determining the user profile information takes longer than that due to needing to do database queries or aggregate information from multiple back-ends.
+It is important to realize that retrieving from the cache is still an out-of-process network request and potentially can add tens of milliseconds to the request. The benefits come when determining the user profile information takes longer than that due to needing to do database queries or aggregate information from multiple back-ends.
The final step in the process is to update the returned response with the user profile information.
@@ -116,9 +114,9 @@ The final step in the process is to update the returned response with the user p
to="@((string)context.Variables["userprofile"])" />
```
-You can chose to include the quotation marks as part of the token so that even when the replace doesn’t occur, the response is still a valid JSON.
+You can choose to include the quotation marks as part of the token so that even when the replacement doesn’t occur, the response is still a valid JSON.
-Once you combine all these steps together, the end result is a policy that looks like the following one.
+Once you combine these steps, the end result is a policy that looks like the following one.
```xml
@@ -172,14 +170,14 @@ Once you combine all these steps together, the end result is a policy that looks
```
-This caching approach is primarily used in web sites where HTML is composed on the server side so that it can be rendered as a single page. It can also be useful in APIs where clients cannot do client-side HTTP caching or it is desirable not to put that responsibility on the client.
+This caching approach is primarily used in websites where HTML is composed on the server side so that it can be rendered as a single page. It can also be useful in APIs where clients can't do client-side HTTP caching or it's desirable not to put that responsibility on the client.
This same kind of fragment caching can also be done on the backend web servers using a Redis caching server, however, using the API Management service to perform this work is useful when the cached fragments are coming from different back-ends than the primary responses.
## Transparent versioning
-It is common practice for multiple different implementation versions of an API to be supported at any one time. For example, to support different environments (dev, test, production, etc.) or to support older versions of the API to give time for API consumers to migrate to newer versions.
+It's common practice for multiple different implementation versions of an API to be supported at any one time. For example, to support different environments (dev, test, production, etc.) or to support older versions of the API to give time for API consumers to migrate to newer versions.
-One approach to handling this, instead of requiring client developers to change the URLs from `/v1/customers` to `/v2/customers` is to store in the consumer’s profile data which version of the API they currently wish to use and call the appropriate backend URL. To determine the correct backend URL to call for a particular client, it is necessary to query some configuration data. By caching this configuration data, API Management can minimize the performance penalty of doing this lookup.
+One approach to handling this, instead of requiring client developers to change the URLs from `/v1/customers` to `/v2/customers` is to store in the consumer’s profile data which version of the API they currently wish to use and call the appropriate backend URL. To determine the correct backend URL to call for a particular client, it's necessary to query some configuration data. By caching this configuration data, API Management can minimize the performance penalty of doing this lookup.
The first step is to determine the identifier used to configure the desired version. In this example, I chose to associate the version to the product subscription key.
@@ -195,7 +193,7 @@ key="@("clientversion-" + context.Variables["clientid"])"
variable-name="clientversion" />
```
-Then, API Management checks to see if it did not find it in the cache.
+Then, API Management checks to see if it didn't find it in the cache.
```xml
diff --git a/articles/api-management/api-management-subscriptions.md b/articles/api-management/api-management-subscriptions.md
index ab655401f8079..fc173adfedbd5 100644
--- a/articles/api-management/api-management-subscriptions.md
+++ b/articles/api-management/api-management-subscriptions.md
@@ -84,6 +84,9 @@ API publishers can [create subscriptions](api-management-howto-create-subscripti
By default, a developer can only access a product or API by using a subscription key. Under certain scenarios, API publishers might want to publish a product or a particular API to the public without the requirement of subscriptions. While a publisher could choose to enable unsecured access to certain APIs, configuring another mechanism to secure client access is recommended.
+> [!CAUTION]
+> Use care when configuring a product or an API that doesn't require a subscription. This configuration may be overly permissive and may make an API more vulnerable to certain [API security threats](mitigate-owasp-api-threats.md#security-misconfiguration).
+
To disable the subscription requirement using the portal:
* **Disable requirement for product** - Disable **Requires subscription** on the **Settings** page of the product.
diff --git a/articles/api-management/authorizations-how-to.md b/articles/api-management/authorizations-how-to.md
new file mode 100644
index 0000000000000..0231af5e78927
--- /dev/null
+++ b/articles/api-management/authorizations-how-to.md
@@ -0,0 +1,156 @@
+---
+title: Create and use authorization in Azure API Management | Microsoft Docs
+description: Learn how to create and use an authorization in Azure API Management. An authorization manages authorization tokens to OAuth 2.0 backend services. The example uses GitHub as an identity provider.
+services: api-management
+author: dlepow
+ms.service: api-management
+ms.topic: how-to
+ms.date: 06/03/2022
+ms.author: danlep
+---
+
+# Configure and use an authorization
+
+In this article, you learn how to create an [authorization](authorizations-overview.md) (preview) in API Management and call a GitHub API that requires an authorization token. The authorization code grant type will be used.
+
+Four steps are needed to set up an authorization with the authorization code grant type:
+
+1. Register an application in the identity provider (in this case, GitHub).
+1. Configure an authorization in API Management.
+1. Authorize with GitHub and configure access policies.
+1. Create an API in API Management and configure a policy.
+
+## Prerequisites
+
+- A GitHub account is required.
+- Complete the following quickstart: [Create an Azure API Management instance](get-started-create-service-instance.md).
+- Enable a [managed identity](api-management-howto-use-managed-service-identity.md) for API Management in the API Management instance.
+
+## Step 1: Register an application in GitHub
+
+1. Sign in to GitHub.
+1. In your account profile, go to **Settings > Developer Settings > OAuth Apps > Register a new application**.
+
+
+ :::image type="content" source="media/authorizations-how-to/register-application.png" alt-text="Screenshot of registering a new OAuth application in GitHub.":::
+ 1. Enter an **Application name** and **Homepage URL** for the application.
+ 1. Optionally, add an **Application description**.
+ 1. In **Authorization callback URL** (the redirect URL), enter `https://authorization-manager-test.consent.azure-apim.net/redirect/apim/`, substituting the API Management service name that is used.
+1. Select **Register application**.
+1. In the **General** page, copy the **Client ID**, which you'll use in a later step.
+1. Select **Generate a new client secret**. Copy the secret, which won't be displayed again, and which you'll use in a later step.
+
+ :::image type="content" source="media/authorizations-how-to/generate-secret.png" alt-text="Screenshot showing how to get client ID and client secret for the application in GitHub.":::
+
+## Step 2: Configure an authorization in API Management
+
+1. Sign into Azure portal and go to your API Management instance.
+1. In the left menu, select **Authorizations** > **+ Create**.
+
+ :::image type="content" source="media/authorizations-how-to/create-authorization.png" alt-text="Screenshot of creating an API Management authorization in the Azure portal.":::
+1. In the **Create authorization** window, enter the following settings, and select **Create**:
+
+ |Settings |Value |
+ |---------|---------|
+ |**Provider name** | A name of your choice, such as *github-01* |
+ |**Identity provider** | Select **GitHub** |
+ |**Grant type** | Select **Authorization code** |
+ |**Client id** | Paste the value you copied earlier from the app registration |
+ |**Client secret** | Paste the value you copied earlier from the app registration |
+ |**Scope** | Set the scope to `User` |
+ |**Authorization name** | A name of your choice, such as *auth-01* |
+
+
+
+1. After the authorization provider and authorization are created, select **Next**.
+
+1. On the **Login** tab, select **Login with GitHub**. Before the authorization will work, it needs to be authorized at GitHub.
+
+ :::image type="content" source="media/authorizations-how-to/authorize-with-github.png" alt-text="Screenshot of logging into the GitHub authorization from the portal.":::
+
+## Step 3: Authorize with GitHub and configure access policies
+
+1. Sign in to your GitHub account if you're prompted to do so.
+1. Select **Authorize** so that the application can access the signed-in user’s account.
+
+ :::image type="content" source="media/authorizations-how-to/consent-to-authorization.png" alt-text="Screenshot of consenting to authorize with Github.":::
+
+ After authorization, the browser is redirected to API Management and the window is closed. If prompted during redirection, select **Allow access**. In API Management, select **Next**.
+1. On the **Access policy** page, create an access policy so that API Management has access to use the authorization. Ensure that a managed identity is configured for API Management. [Learn more about managed identities in API Management](api-management-howto-use-managed-service-identity.md#create-a-system-assigned-managed-identity).
+
+1. Select **Managed identity** **+ Add members** and then select your subscription.
+1. In **Managed identity**, select **API Management service**, and then select the API Management instance that is used. Click **Select** and then **Complete**.
+
+ :::image type="content" source="media/authorizations-how-to/select-managed-identity.png" alt-text="Screenshot of selecting a managed identity to use the authorization.":::
+
+## Step 4: Create an API in API Management and configure a policy
+
+1. Sign into Azure portal and go to your API Management instance.
+1. In the left menu, select **APIs > + Add API**.
+1. Select **HTTP** and enter the following settings. Then select **Create**.
+
+ |Setting |Value |
+ |---------|---------|
+ |**Display name** | *github* |
+ |**Web service URL** | https://api.github.com/users/ |
+ |**API URL suffix** | *github* |
+
+2. Navigate to the newly created API and select **Add Operation**. Enter the following settings and select **Save**.
+
+ |Setting |Value |
+ |---------|---------|
+ |**Display name** | *getdata* |
+ |**URL** | /data |
+
+ :::image type="content" source="media/authorizations-how-to/add-operation.png" alt-text="Screenshot of adding a getdata operation to the API in the portal.":::
+
+1. In the **Inbound processing** section, select the (**>**) (code editor) icon.
+1. Copy the following, and paste in the policy editor. Make sure the provider-id and authorization-id correspond to the names in step 2.3. Select **Save**.
+
+ ```xml
+
+
+
+
+
+ @("Bearer " + ((Authorization)context.Variables.GetValueOrDefault("auth-context"))?.AccessToken)
+
+
+
+ API Management
+
+
+
+
+
+
+
+
+
+
+
+
+ ```
+
+ The policy to be used consists of four parts.
+
+ - Fetch an authorization token.
+ - Create an HTTP header with the fetched authorization token.
+ - Create an HTTP header with a `User-Agent` header (GitHub requirement). [Learn more](https://docs.github.com/rest/overview/resources-in-the-rest-api#user-agent-required)
+ - Because the incoming request to API Management will consist of a query parameter called *username*, add the username to the backend call.
+
+ > [!NOTE]
+ > The `get-authorization-context` policy references the authorization provider and authorization that were created earlier. [Learn more](api-management-access-restriction-policies.md#GetAuthorizationContext) about how to configure this policy.
+
+ :::image type="content" source="media/authorizations-how-to/policy-configuration-cropped.png" lightbox="media/authorizations-how-to/policy-configuration.png" alt-text="Screenshot of configuring policy in the portal.":::
+1. Test the API.
+ 1. On the **Test** tab, enter a query parameter with the name *username*.
+ 1. As value, enter the username that was used to sign into GitHub, or another valid GitHub username.
+ 1. Select **Send**.
+ :::image type="content" source="media/authorizations-how-to/test-api.png" alt-text="Screenshot of testing the API successfully in the portal.":::
+
+ A successful response returns user data from the GitHub API.
+
+## Next steps
+
+Learn more about [access restriction policies](api-management-access-restriction-policies.md).
\ No newline at end of file
diff --git a/articles/api-management/authorizations-overview.md b/articles/api-management/authorizations-overview.md
new file mode 100644
index 0000000000000..37c00891b7358
--- /dev/null
+++ b/articles/api-management/authorizations-overview.md
@@ -0,0 +1,182 @@
+---
+title: About OAuth 2.0 authorizations in Azure API Management | Microsoft Docs
+description: Learn about authorizations in Azure API Management, a feature that simplifies the process of managing OAuth 2.0 authorization tokens to APIs
+author: dlepow
+ms.service: api-management
+ms.topic: conceptual
+ms.date: 06/03/2022
+ms.author: danlep
+---
+
+# Authorizations overview
+
+API Management authorizations (preview) simplify the process of managing authorization tokens to OAuth 2.0 backend services.
+By configuring any of the supported identity providers and creating an authorization using the standardized OAuth 2.0 flow, API Management can retrieve and refresh access tokens to be used inside of API management or sent back to a client.
+This feature enables APIs to be exposed with or without a subscription key, and the authorization to the backend service uses OAuth 2.0.
+
+Some example scenarios that will be possible through this feature are:
+
+- Citizen/low code developers using Power Apps or Power Automate can easily connect to SaaS providers that are using OAuth 2.0.
+- Unattended scenarios such as an Azure function using a timer trigger can utilize this feature to connect to a backend API using OAuth 2.0.
+- A marketing team in an enterprise company could use the same authorization for interacting with a social media platform using OAuth 2.0.
+- Exposing APIs in API Management as a custom connector in Logic Apps where the backend service requires OAuth 2.0 flow.
+- On behalf of a scenario where a service such as Dropbox or any other service protected by OAuth 2.0 flow is used by multiple clients.
+- Connect to different services that require OAuth 2.0 authorization using synthetic GraphQL in API Management.
+- Enterprise Application Integration (EAI) patterns using service-to-service authorization can use the client credentials grant type against backend APIs that use OAuth 2.0.
+- Single-page applications that only want to retrieve an access token to be used in a client's SDK against an API using OAuth 2.0.
+
+The feature consists of two parts, management and runtime:
+
+* The **management** part takes care of configuring identity providers, enabling the consent flow for the identity provider, and managing access to the authorizations.
+
+
+* The **runtime** part uses the [`get-authorization-context`](api-management-access-restriction-policies.md#GetAuthorizationContext) policy to fetch and store access and refresh tokens. When a call comes into API Management, and the `get-authorization-context` policy is executed, it will first validate if the existing authorization token is valid. If the authorization token has expired, the refresh token is used to try to fetch a new authorization and refresh token from the configured identity provider. If the call to the backend provider is successful, the new authorization token will be used, and both the authorization token and refresh token will be stored encrypted.
+
+
+ During the policy execution, access to the tokens is also validated using access policies.
+
+:::image type="content" source="media/authorizations-overview/overview.png" alt-text="Screenshot showing identity providers that can be used for OAuth 2.0 authorizations in API Management." border="false":::
+
+### Requirements
+
+- Managed system-assigned identity must be enabled for the API Management instance.
+- API Management instance must have outbound connectivity to internet on port `443` (HTTPS).
+
+### Limitations
+
+For public preview the following limitations exist:
+
+- Authorizations feature will be available in the Consumption tier in the coming weeks.
+- Authorizations feature is not supported in the following regions: swedencentral, australiacentral, australiacentral2, jioindiacentral.
+- Supported identity providers: Azure AD, DropBox, Generic OAuth 2.0, GitHub, Google, LinkedIn, Spotify
+- Maximum configured number of authorization providers per API Management instance: 50
+- Maximum configured number of authorizations per authorization provider: 500
+- Maximum configured number of access policies per authorization: 100
+- Maximum requests per minute per authorization: 100
+- Authorization code PKCE flow with code challenge isn't supported.
+- Authorizations feature isn't supported on self-hosted gateways.
+- API documentation is not available yet. Please see [this](https://github.com/Azure/APIManagement-Authorizations) GitHub repository with samples.
+
+### Authorization providers
+
+Authorization provider configuration includes which identity provider and grant type are used. Each identity provider requires different configurations.
+
+* An authorization provider configuration can only have one grant type.
+* One authorization provider configuration can have multiple authorizations.
+
+The following identity providers are supported for public preview:
+
+- Azure AD, DropBox, Generic OAuth 2.0, GitHub, Google, LinkedIn, Spotify
+
+
+With the Generic OAuth 2.0 provider, other identity providers that support the standards of OAuth 2.0 flow can be used.
+
+
+### Authorizations
+
+To use an authorization provider, at least one *authorization* is required. The process of configuring an authorization differs based on the used grant type. Each authorization provider configuration only supports one grant type. For example, if you want to configure Azure AD to use both grant types, two authorization provider configurations are needed.
+
+**Authorization code grant type**
+
+Authorization code grant type is bound to a user context, meaning a user needs to consent to the authorization. As long as the refresh token is valid, API Management can retrieve new access and refresh tokens. If the refresh token becomes invalid, the user needs to reauthorize. All identity providers support authorization code. [Read more about Authorization code grant type](https://www.rfc-editor.org/rfc/rfc6749?msclkid=929b18b5d0e611ec82a764a7c26a9bea#section-1.3.1).
+
+**Client credentials grant type**
+
+Client credentials grant type isn't bound to a user and is often used in application-to-application scenarios. No consent is required for client credentials grant type, and the authorization doesn't become invalid. [Read more about Client Credentials grant type](https://www.rfc-editor.org/rfc/rfc6749?msclkid=929b18b5d0e611ec82a764a7c26a9bea#section-1.3.4).
+
+
+### Access policies
+Access policies determine which identities can use the authorization that the access policy is related to. The supported identities are managed identities, user identities, and service principals. The identities must belong to the same tenant as the API Management tenant.
+
+- **Managed identities** - System- or user-assigned identity for the API Management instance that is being used.
+- **User identities** - Users in the same tenant as the API Management instance.
+- **Service principals** - Applications in the same Azure AD tenant as the API Management instance.
+
+### Process flow for creating authorizations
+
+The following image shows the process flow for creating an authorization in API Management using the grant type authorization code. For public preview no API documentation is available.
+
+:::image type="content" source="media/authorizations-overview/get-token.svg" alt-text="Process flow for creating authorizations" border="false":::
+
+
+1. Client sends a request to create an authorization provider.
+1. Authorization provider is created, and a response is sent back.
+1. Client sends a request to create an authorization.
+1. Authorization is created, and a response is sent back with the information that the authorization is not "connected".
+1. Client sends a request to retrieve a login URL to start the OAuth 2.0 consent at the identity provider. The request includes a post-redirect URL to be used in the last step.
+1. Response is returned with a login URL that should be used to start the consent flow.
+1. Client opens a browser with the login URL that was provided in the previous step. The browser is redirected to the identity provider OAuth 2.0 consent flow.
+1. After the consent is approved, the browser is redirected with an authorization code to the redirect URL configured at the identity provider.
+1. API Management uses the authorization code to fetch access and refresh tokens.
+1. API Management receives the tokens and encrypts them.
+1. API Management redirects to the provided URL from step 5.
+
+### Process flow for runtime
+
+The following image shows the process flow to fetch and store authorization and refresh tokens based on a configured authorization. After the tokens have been retrieved a call is made to the backend API.
+
+:::image type="content" source="media/authorizations-overview/get-token-for-backend.svg" alt-text="Diagram that shows the process flow for creating runtime." border="false":::
+
+1. Client sends request to API Management instance.
+1. The policy [`get-authorization-context`](api-management-access-restriction-policies.md#GetAuthorizationContext) checks if the access token is valid for the current authorization.
+1. If the access token has expired but the refresh token is valid, API Management tries to fetch new access and refresh tokens from the configured identity provider.
+1. The identity provider returns both an access token and a refresh token, which are encrypted and saved to API Management.
+1. After the tokens have been retrieved, the access token is attached using the `set-header` policy as an authorization header to the outgoing request to the backend API.
+1. Response is returned to API Management.
+1. Response is returned to the client.
+
+### Error handling
+
+If acquiring the authorization context results in an error, the outcome depends on how the attribute `ignore-error` is configured in the policy `get-authorization-context`. If the value is set to `false` (default), an error with `500 Internal Server Error` will be returned. If the value is set to `true`, the error will be ignored and execution will proceed with the context variable set to `null`.
+
+If the value is set to `false`, and the on-error section in the policy is configured, the error will be available in the property `context.LastError`. By using the on-error section, the error that is sent back to the client can be adjusted. Errors from API Management can be caught using standard Azure alerts. Read more about [handling errors in policies](api-management-error-handling-policies.md).
+
+### Authorizations FAQ
+
+##### How can I provide feedback and influence the roadmap for this feature?
+
+Please use [this](https://aka.ms/apimauthorizations/feedback) form to provide feedback.
+
+##### How are the tokens stored in API Management?
+
+The access token and other secrets (for example, client secrets) are encrypted with an envelope encryption and stored in an internal, multitenant storage. The data are encrypted with AES-128 using a key that is unique per data; those keys are encrypted asymmetrically with a master certificate stored in Azure Key Vault and rotated every month.
+
+##### When are the access tokens refreshed?
+
+When the policy `get-authorization-context` is executed at runtime, API Management checks if the stored access token is valid. If the token has expired or is near expiry, API Management uses the refresh token to fetch a new access token and a new refresh token from the configured identity provider. If the refresh token has expired, an error is thrown, and the authorization needs to be reauthorized before it will work.
+
+##### What happens if the client secret expires at the identity provider?
+At runtime API Management can't fetch new tokens, and an error will occur.
+
+* If the authorization is of type authorization code, the client secret needs to be updated on authorization provider level.
+
+* If the authorization is of type client credentials, the client secret needs to be updated on authorizations level.
+
+##### Is this feature supported using API Management running inside a VNet?
+
+Yes, as long as API Management gateway has outbound internet connectivity on port `443`.
+
+##### What happens when an authorization provider is deleted?
+
+All underlying authorizations and access policies are also deleted.
+
+##### Are the access tokens cached by API Management?
+
+The access token is cached by the API management until 3 minutes before the token expiration time.
+
+##### What grant types are supported?
+
+For public preview, the Azure AD identity provider supports authorization code and client credentials.
+
+The other identity providers support authorization code. After public preview, more identity providers and grant types will be added.
+
+### Next steps
+
+- Learn how to [configure and use an authorization](authorizations-how-to.md).
+- See [reference](authorizations-reference.md) for supported identity providers in authorizations.
+- Use [policies]() together with authorizations.
+- Authorizations [samples](https://github.com/Azure/APIManagement-Authorizations) GitHub repository.
+- Learn more about OAuth 2.0:
+
+ * [OAuth 2.0 overview](https://aaronparecki.com/oauth-2-simplified/)
+ * [OAuth 2.0 specification](https://oauth.net/2/)
diff --git a/articles/api-management/authorizations-reference.md b/articles/api-management/authorizations-reference.md
new file mode 100644
index 0000000000000..1e69e9b613d37
--- /dev/null
+++ b/articles/api-management/authorizations-reference.md
@@ -0,0 +1,102 @@
+---
+title: Reference for OAuth 2.0 authorizations - Azure API Management | Microsoft Docs
+description: Reference for identity providers supported in authorizations in Azure API Management. API Management authorizations manage OAuth 2.0 authorization tokens to APIs.
+author: dlepow
+ms.service: api-management
+ms.topic: reference
+ms.date: 05/02/2022
+ms.author: danlep
+---
+
+# Authorizations reference
+This article is a reference for the supported identity providers in API Management [authorizations](authorizations-overview.md) (preview) and their configuration options.
+
+## Azure Active Directory
+
+
+**Supported grant types**: authorization code and client credentials
+
+
+### Authorization provider - Authorization code grant type
+
+| Name | Required | Description | Default |
+|---|---|---|---|
+| Provider name | Yes | Name of Authorization provider. | |
+| Client id | Yes | The id used to identify this application with the service provider. | |
+| Client secret | Yes | The shared secret used to authenticate this application with the service provider. ||
+| Login URL | No | The Azure Active Directory login URL. | https://login.windows.net |
+| Tenant ID | No | The tenant ID of your Azure Active Directory application. | common |
+| Resource URL | Yes | The resource to get authorization for. | |
+| Scopes | No | Scopes used for the authorization. Multiple scopes could be defined separate with a space, for example, "User.Read User.ReadBasic.All" | |
+
+
+### Authorization - Authorization code grant type
+| Name | Required | Description | Default |
+|---|---|---|---|
+| Authorization name | Yes | Name of Authorization. | |
+
+---
+
+### Authorization provider - Client credentials code grant type
+| Name | Required | Description | Default |
+|---|---|---|---|
+| Provider name | Yes | Name of Authorization provider. | |
+| Login URL | No | The Azure Active Directory login URL. | https://login.windows.net |
+| Tenant ID | No | The tenant ID of your Azure Active Directory application. | common |
+| Resource URL | Yes | The resource to get authorization for. | |
+
+
+### Authorization - Client credentials code grant type
+| Name | Required | Description | Default |
+|---|---|---|---|
+| Authorization name | Yes | Name of Authorization. | |
+| Client id | Yes | The id used to identify this application with the service provider. | |
+| Client secret | Yes | The shared secret used to authenticate this application with the service provider. ||
+
+---
+
+## Google, LinkedIn, Spotify, Dropbox, GitHub
+
+**Supported grant types**: authorization code
+
+### Authorization provider - Authorization code grant type
+| Name | Required | Description | Default |
+|---|---|---|---|
+| Provider name | Yes | Name of Authorization provider. | |
+| Client id | Yes | The id used to identify this application with the service provider. | |
+| Client secret | Yes | The shared secret used to authenticate this application with the service provider. ||
+| Scopes | No | Scopes used for the authorization. Depending on the identity provider, multiple scopes are separated by space or comma. Default for most identity providers is space. | |
+
+
+### Authorization - Authorization code grant type
+| Name | Required | Description | Default |
+|---|---|---|---|
+| Authorization name | Yes | Name of Authorization. | |
+
+---
+
+## Generic OAuth 2
+
+**Supported grant types**: authorization code
+
+
+### Authorization provider - Authorization code grant type
+| Name | Required | Description | Default |
+|---|---|---|---|
+| Provider name | Yes | Name of Authorization provider. | |
+| Client id | Yes | The id used to identify this application with the service provider. | |
+| Client secret | Yes | The shared secret used to authenticate this application with the service provider. ||
+| Authorization URL | No | The authorization endpoint URL. | |
+| Token URL | No | The token endpoint URL. | |
+| Refresh URL | No | The token refresh endpoint URL. | |
+| Scopes | No | Scopes used for the authorization. Depending on the identity provider, multiple scopes are separated by space or comma. Default for most identity providers is space. | |
+
+
+### Authorization - Authorization code grant type
+| Name | Required | Description | Default |
+|---|---|---|---|
+| Authorization name | Yes | Name of Authorization. | |
+
+## Next steps
+
+Learn more about [authorizations](authorizations-overview.md) and how to [create and use authorizations](authorizations-how-to.md)
diff --git a/articles/api-management/devops-api-development-templates.md b/articles/api-management/devops-api-development-templates.md
index 395df26750338..90ee25d7e35c0 100644
--- a/articles/api-management/devops-api-development-templates.md
+++ b/articles/api-management/devops-api-development-templates.md
@@ -16,6 +16,10 @@ This article shows you how to use API DevOps with Azure API Management, through
For details, tools, and code samples to implement the DevOps approach described in this article, see the open-source [Azure API Management DevOps Resource Kit](https://github.com/Azure/azure-api-management-devops-resource-kit) in GitHub. Because customers bring a wide range of engineering cultures and existing automation solutions, the approach isn't a one-size-fits-all solution.
+For architectural guidance, see:
+
+* **API Management landing zone accelerator**: [Reference architecture](/azure/architecture/example-scenario/integration/app-gateway-internal-api-management-function?toc=%2Fazure%2Fapi-management%2Ftoc.json&bc=/azure/api-management/breadcrumb/toc.json) and [design guidance](/azure/cloud-adoption-framework/scenarios/app-platform/api-management/land?toc=%2Fazure%2Fapi-management%2Ftoc.json&bc=/azure/api-management/breadcrumb/toc.json)
+
## The problem
Organizations today normally have multiple deployment environments (such as development, testing, and production) and use separate API Management instances for each environment. Some instances are shared by multiple development teams, who are responsible for different APIs with different release cadences.
diff --git a/articles/api-management/graphql-api.md b/articles/api-management/graphql-api.md
index 7912d5f325105..42ff1de8f21e6 100644
--- a/articles/api-management/graphql-api.md
+++ b/articles/api-management/graphql-api.md
@@ -6,7 +6,7 @@ ms.service: api-management
author: dlepow
ms.author: danlep
ms.topic: how-to
-ms.date: 05/17/2022
+ms.date: 05/19/2022
ms.custom: event-tier1-build-2022
---
@@ -46,7 +46,7 @@ If you want to import a GraphQL schema and set up field resolvers using REST or
|----------------|-------|
| **Display name** | The name by which your GraphQL API will be displayed. |
| **Name** | Raw name of the GraphQL API. Automatically populates as you type the display name. |
- | **GraphQL API endpoint** | The base URL with your GraphQL API endpoint name. For example: *`https://example.com/your-GraphQL-name`*. You can also use the common ["Star Wars" GraphQL endpoint](https://swapi-graphql.netlify.app/.netlify/functions/index) as a demo. |
+ | **GraphQL API endpoint** | The base URL with your GraphQL API endpoint name. For example: *`https://example.com/your-GraphQL-name`*. You can also use a common "Star Wars" GraphQL endpoint such as `https://swapi-graphql.azure-api.net/graphql` as a demo. |
| **Upload schema** | Optionally select to browse and upload your schema file to replace the schema retrieved from the GraphQL endpoint (if available). |
| **Description** | Add a description of your API. |
| **URL scheme** | Select **HTTP**, **HTTPS**, or **Both**. Default selection: *Both*. |
diff --git a/articles/api-management/index.yml b/articles/api-management/index.yml
index f0c961b856e8d..873ac13b3d87b 100644
--- a/articles/api-management/index.yml
+++ b/articles/api-management/index.yml
@@ -1,7 +1,7 @@
### YamlMime:Landing
title: API Management documentation
-summary: Learn how to use API Management to publish APIs to external, partner, and employee developers securely and at scale. Shows you how to create and manage modern API gateways for existing back-end services hosted anywhere.
+summary: Learn how to use API Management to publish APIs to external, partner, and employee developers securely and at scale. Create and manage modern API gateways for existing back-end services hosted anywhere.
metadata:
title: API Management documentation
@@ -28,7 +28,9 @@ landingContent:
- linkListType: architecture
links:
- text: Basic enterprise integration
- url: /azure/architecture/reference-architectures/enterprise-integration/basic-enterprise-integration
+ url: /azure/architecture/reference-architectures/enterprise-integration/basic-enterprise-integration?toc=%2Fazure%2Fapi-management%2Ftoc.json&bc=/azure/api-management/breadcrumb/toc.json
+ - text: Landing zone accelerator
+ url: /azure/architecture/example-scenario/integration/app-gateway-internal-api-management-function?toc=%2Fazure%2Fapi-management%2Ftoc.json&bc=/azure/api-management/breadcrumb/toc.json
# Card (optional)
- title: Create an instance
linkLists:
diff --git a/articles/api-management/media/api-management-howto-aad/arrow.png b/articles/api-management/media/api-management-howto-aad/arrow.png
deleted file mode 100644
index c0df8c5523d4f..0000000000000
Binary files a/articles/api-management/media/api-management-howto-aad/arrow.png and /dev/null differ
diff --git a/articles/api-management/media/api-management-howto-aad/developer-portal-azure-ad-signin.png b/articles/api-management/media/api-management-howto-aad/developer-portal-azure-ad-signin.png
new file mode 100644
index 0000000000000..2b1a4a1e0ff9f
Binary files /dev/null and b/articles/api-management/media/api-management-howto-aad/developer-portal-azure-ad-signin.png differ
diff --git a/articles/api-management/media/api-management-howto-aad/enable-azure-ad-portal.png b/articles/api-management/media/api-management-howto-aad/enable-azure-ad-portal.png
new file mode 100644
index 0000000000000..1a528de39d19e
Binary files /dev/null and b/articles/api-management/media/api-management-howto-aad/enable-azure-ad-portal.png differ
diff --git a/articles/api-management/media/authorizations-how-to/add-operation.png b/articles/api-management/media/authorizations-how-to/add-operation.png
new file mode 100644
index 0000000000000..4ee042f4b5f1f
Binary files /dev/null and b/articles/api-management/media/authorizations-how-to/add-operation.png differ
diff --git a/articles/api-management/media/authorizations-how-to/authorization-settings.png b/articles/api-management/media/authorizations-how-to/authorization-settings.png
new file mode 100644
index 0000000000000..a0e865976fe81
Binary files /dev/null and b/articles/api-management/media/authorizations-how-to/authorization-settings.png differ
diff --git a/articles/api-management/media/authorizations-how-to/authorize-with-github.png b/articles/api-management/media/authorizations-how-to/authorize-with-github.png
new file mode 100644
index 0000000000000..0c7de978d4b09
Binary files /dev/null and b/articles/api-management/media/authorizations-how-to/authorize-with-github.png differ
diff --git a/articles/api-management/media/authorizations-how-to/consent-to-authorization.png b/articles/api-management/media/authorizations-how-to/consent-to-authorization.png
new file mode 100644
index 0000000000000..c35e2d289c0a3
Binary files /dev/null and b/articles/api-management/media/authorizations-how-to/consent-to-authorization.png differ
diff --git a/articles/api-management/media/authorizations-how-to/create-authorization.png b/articles/api-management/media/authorizations-how-to/create-authorization.png
new file mode 100644
index 0000000000000..e08bdd4abe38b
Binary files /dev/null and b/articles/api-management/media/authorizations-how-to/create-authorization.png differ
diff --git a/articles/api-management/media/authorizations-how-to/generate-secret.png b/articles/api-management/media/authorizations-how-to/generate-secret.png
new file mode 100644
index 0000000000000..74f4ecd2e6987
Binary files /dev/null and b/articles/api-management/media/authorizations-how-to/generate-secret.png differ
diff --git a/articles/api-management/media/authorizations-how-to/policy-configuration-cropped.png b/articles/api-management/media/authorizations-how-to/policy-configuration-cropped.png
new file mode 100644
index 0000000000000..00c0924f53b5f
Binary files /dev/null and b/articles/api-management/media/authorizations-how-to/policy-configuration-cropped.png differ
diff --git a/articles/api-management/media/authorizations-how-to/policy-configuration.png b/articles/api-management/media/authorizations-how-to/policy-configuration.png
new file mode 100644
index 0000000000000..4fb63dda18121
Binary files /dev/null and b/articles/api-management/media/authorizations-how-to/policy-configuration.png differ
diff --git a/articles/api-management/media/authorizations-how-to/register-application.png b/articles/api-management/media/authorizations-how-to/register-application.png
new file mode 100644
index 0000000000000..c74f8b7c1b805
Binary files /dev/null and b/articles/api-management/media/authorizations-how-to/register-application.png differ
diff --git a/articles/api-management/media/authorizations-how-to/select-managed-identity.png b/articles/api-management/media/authorizations-how-to/select-managed-identity.png
new file mode 100644
index 0000000000000..c4a4d3dfa2b18
Binary files /dev/null and b/articles/api-management/media/authorizations-how-to/select-managed-identity.png differ
diff --git a/articles/api-management/media/authorizations-how-to/test-api.png b/articles/api-management/media/authorizations-how-to/test-api.png
new file mode 100644
index 0000000000000..23529ce2b4363
Binary files /dev/null and b/articles/api-management/media/authorizations-how-to/test-api.png differ
diff --git a/articles/api-management/media/authorizations-overview/get-token-for-backend.svg b/articles/api-management/media/authorizations-overview/get-token-for-backend.svg
new file mode 100644
index 0000000000000..42e235b72d336
--- /dev/null
+++ b/articles/api-management/media/authorizations-overview/get-token-for-backend.svg
@@ -0,0 +1,1125 @@
+
+
+
diff --git a/articles/api-management/media/authorizations-overview/get-token.svg b/articles/api-management/media/authorizations-overview/get-token.svg
new file mode 100644
index 0000000000000..7e82102f56e0f
--- /dev/null
+++ b/articles/api-management/media/authorizations-overview/get-token.svg
@@ -0,0 +1,1513 @@
+
+
+
diff --git a/articles/api-management/media/authorizations-overview/overview.png b/articles/api-management/media/authorizations-overview/overview.png
new file mode 100644
index 0000000000000..82b96aae12263
Binary files /dev/null and b/articles/api-management/media/authorizations-overview/overview.png differ
diff --git a/articles/api-management/media/graphql-api/create-from-graphql-schema.png b/articles/api-management/media/graphql-api/create-from-graphql-schema.png
index 0191bc9e7e7dc..aebbd318aec9b 100644
Binary files a/articles/api-management/media/graphql-api/create-from-graphql-schema.png and b/articles/api-management/media/graphql-api/create-from-graphql-schema.png differ
diff --git a/articles/api-management/media/private-endpoint/api-management-private-endpoint.png b/articles/api-management/media/private-endpoint/api-management-private-endpoint.png
new file mode 100644
index 0000000000000..9c622add93619
Binary files /dev/null and b/articles/api-management/media/private-endpoint/api-management-private-endpoint.png differ
diff --git a/articles/api-management/media/virtual-network-concepts/api-management-application-gateway.png b/articles/api-management/media/virtual-network-concepts/api-management-application-gateway.png
new file mode 100644
index 0000000000000..a912186f7b3f2
Binary files /dev/null and b/articles/api-management/media/virtual-network-concepts/api-management-application-gateway.png differ
diff --git a/articles/api-management/media/virtual-network-concepts/api-management-private-endpoint.png b/articles/api-management/media/virtual-network-concepts/api-management-private-endpoint.png
new file mode 100644
index 0000000000000..9c622add93619
Binary files /dev/null and b/articles/api-management/media/virtual-network-concepts/api-management-private-endpoint.png differ
diff --git a/articles/api-management/mitigate-owasp-api-threats.md b/articles/api-management/mitigate-owasp-api-threats.md
new file mode 100644
index 0000000000000..fae9c2e49ed4b
--- /dev/null
+++ b/articles/api-management/mitigate-owasp-api-threats.md
@@ -0,0 +1,313 @@
+---
+title: Mitigate OWASP API security top 10 in Azure API Management
+description: Learn how to protect against common API-based vulnerabilities, as identified by the OWASP API Security Top 10 threats, using Azure API Management.
+author: mikebudzynski
+ms.service: api-management
+ms.topic: conceptual
+ms.date: 05/31/2022
+ms.author: mibudz
+---
+
+# Recommendations to mitigate OWASP API Security Top 10 threats using API Management
+
+The Open Web Application Security Project ([OWASP](https://owasp.org/about/)) Foundation works to improve software security through its community-led open source software projects, hundreds of chapters worldwide, tens of thousands of members, and by hosting local and global conferences.
+
+The OWASP [API Security Project](https://owasp.org/www-project-api-security/) focuses on strategies and solutions to understand and mitigate the unique *vulnerabilities and security risks of APIs*. In this article, we'll discuss recommendations to use Azure API Management to mitigate the top 10 API threats identified by OWASP.
+
+## Broken object level authorization
+
+API objects that aren't protected with the appropriate level of authorization may be vulnerable to data leaks and unauthorized data manipulation through weak object access identifiers. For example, an attacker could exploit an integer object identifier, which can be iterated.
+
+More information about this threat: [API1:2019 Broken Object Level Authorization](https://github.com/OWASP/API-Security/blob/master/2019/en/src/0xa1-broken-object-level-authorization.md)
+
+### Recommendations
+
+* The best place to implement object level authorization is within the backend API itself. At the backend, the correct authorization decisions can be made at the request (or object) level, where applicable, using logic applicable to the domain and API. Consider scenarios where a given request may yield differing levels of detail in the response, depending on the requestor's permissions and authorization.
+
+* If a current vulnerable API can't be changed at the backend, then API Management could be used as a fallback. For example:
+
+ * Use a custom policy to implement object-level authorization, if it's not implemented in the backend.
+
+ * Implement a custom policy to map identifiers from request to backend and from backend to client, so that internal identifiers aren't exposed.
+
+ In these cases, the custom policy could be a [policy expression](api-management-policy-expressions.md) with a look-up (for example, a dictionary) or integration with another service through the [send request](api-management-advanced-policies.md#SendRequest) policy.
+
+* For GraphQL scenarios, enforce object-level authorization through the [validate GraphQL request](graphql-policies.md#validate-graphql-request) policy, using the `authorize` element.
+
+## Broken user authentication
+
+Authentication mechanisms are often implemented incorrectly or missing, allowing attackers to exploit implementation flaws to access data.
+
+More information about this threat: [API2:2019 Broken User Authentication](https://github.com/OWASP/API-Security/blob/master/2019/en/src/0xa2-broken-user-authentication.md)
+
+### Recommendations
+
+Use API Management for user authentication and authorization:
+
+* **Authentication** - API Management supports the following [authentication methods](api-management-authentication-policies.md):
+
+ * [Basic authentication](api-management-authentication-policies.md#Basic) policy - Username and password credentials.
+
+ * [Subscription key](api-management-subscriptions.md) - A subscription key provides a similar level of security as basic authentication and may not be sufficient alone. If the subscription key is compromised, an attacker may get unlimited access to the system.
+
+ * [Client certificate](api-management-authentication-policies.md#ClientCertificate) policy - Using client certificates is more secure than basic credentials or subscription key, but it doesn't allow the flexibility provided by token-based authorization protocols such as OAuth 2.0.
+
+* **Authorization** - API Management supports a [validate JWT](api-management-access-restriction-policies.md#ValidateJWT) policy to check the validity of an incoming OAuth 2.0 JWT access token based on information obtained from the OAuth identity provider's metadata endpoint. Configure the policy to check relevant token claims, audience, and expiration time. Learn more about protecting an API using [OAuth 2.0 authorization and Azure Active Directory](api-management-howto-protect-backend-with-aad.md).
+
+More recommendations:
+
+* Use [access restriction policies](api-management-access-restriction-policies.md) in API Management to increase security. For example, [call rate limiting](api-management-access-restriction-policies.md#LimitCallRate) slows down bad actors using brute force attacks to compromise credentials.
+
+* APIs should use TLS/SSL (transport security) to protect the credentials or tokens. Credentials and tokens should be sent in request headers and not as query parameters.
+
+* In the API Management [developer portal](api-management-howto-developer-portal.md), configure [Azure Active Directory](api-management-howto-aad.md) or [Azure Active Directory B2C](api-management-howto-aad-b2c.md) as the identity provider to increase the account security. The developer portal uses CAPTCHA to mitigate brute force attacks.
+
+### Related information
+
+* [Authentication vs. authorization](../active-directory/develop/authentication-vs-authorization.md)
+
+## Excessive data exposure
+
+Good API interface design is deceptively challenging. Often, particularly with legacy APIs that have evolved over time, the request and response interfaces contain more data fields than the consuming applications require.
+
+A bad actor could attempt to access the API directly (perhaps by replaying a valid request), or sniff the traffic between server and API. Analysis of the API actions and the data available could yield sensitive data to the attacker, which isn't surfaced to, or used by, the frontend application.
+
+More information about this threat: [API3:2019 Excessive Data Exposure](https://github.com/OWASP/API-Security/blob/master/2019/en/src/0xa3-excessive-data-exposure.md)
+
+### Recommendations
+
+* The best approach to mitigating this vulnerability is to ensure that the external interfaces defined at the backend API are designed carefully and, ideally, independently of the data persistence. They should contain only the fields required by consumers of the API. APIs should be reviewed frequently, and legacy fields deprecated, then removed.
+
+ In API Management, use:
+ * [Revisions](api-management-revisions.md) to gracefully control nonbreaking changes, for example, the addition of a field to an interface. You may use revisions along with a versioning implementation at the backend.
+
+ * [Versions](api-management-versions.md) for breaking changes, for example, the removal of a field from an interface.
+
+* If it's not possible to alter the backend interface design and excessive data is a concern, use API Management [transformation policies](transform-api.md) to rewrite response payloads and mask or filter data. For example, [remove unneeded JSON properties](./policies/filter-response-content.md) from a response body.
+
+* [Response content validation](validation-policies.md#validate-content) in API Management can be used with an XML or JSON schema to block responses with undocumented properties or improper values. The policy also supports blocking responses exceeding a specified size.
+
+* Use the [validate status code](validation-policies.md#validate-status-code) policy to block responses with errors undefined in the API schema.
+
+* Use the [validate headers](validation-policies.md#validate-headers) policy to block responses with headers that aren't defined in the schema or don't comply to their definition in the schema. Remove unwanted headers with the [set header](api-management-transformation-policies.md#SetHTTPheader) policy.
+
+* For GraphQL scenarios, use the [validate GraphQL request](graphql-policies.md#validate-graphql-request) policy to validate GraphQL requests, authorize access to specific query paths, and limit response size.
+
+## Lack of resources and rate limiting
+
+Lack of rate limiting may lead to data exfiltration or successful DDoS attacks on backend services, causing an outage for all consumers.
+
+More information about this threat: [API4:2019 Lack of resources and rate limiting](https://github.com/OWASP/API-Security/blob/master/2019/en/src/0xa4-lack-of-resources-and-rate-limiting.md)
+
+### Recommendations
+
+* Use [rate limit](api-management-access-restriction-policies.md#LimitCallRate) (short-term) and [quota limit](api-management-access-restriction-policies.md#SetUsageQuota) (long-term) policies to control the allowed number of API calls or bandwidth per consumer.
+
+* Define strict request object definitions and their properties in the OpenAPI definition. For example, define the max value for paging integers, maxLength and regular expression (regex) for strings. Enforce those schemas with the [validate content](validation-policies.md#validate-content) and [validate parameters](validation-policies.md#validate-parameters) policies in API Management.
+
+* Enforce maximum size of the request with the [validate content](validation-policies.md#validate-content) policy.
+
+* Optimize performance with [built-in caching](api-management-howto-cache.md), thus reducing the consumption of CPU, memory, and networking resources for certain operations.
+
+* Enforce authentication for API calls (see [Broken user authentication](#broken-user-authentication)). Revoke access for abusive users. For example, deactivate the subscription key, block the IP address with the [restrict caller IPs](api-management-access-restriction-policies.md#RestrictCallerIPs) policy, or reject requests for a certain user claim from a [JWT token](api-management-access-restriction-policies.md#ValidateJWT).
+
+* Apply a [CORS](api-management-cross-domain-policies.md#CORS) policy to control the websites that are allowed to load the resources served through the API. To avoid overly permissive configurations, don’t use wildcard values (`*`) in the CORS policy.
+
+* Minimize the time it takes a backend service to respond. The longer the backend service takes to respond, the longer the connection is occupied in API Management, therefore reducing the number of requests that can be served in a given timeframe.
+
+ * Define `timeout` in the [forward request](api-management-advanced-policies.md#ForwardRequest) policy.
+
+ * Use the [validate GraphQL request](graphql-policies.md#validate-graphql-request) policy for GraphQL APIs and configure `max-depth` and `max-size` parameters.
+
+ * Limit the number of parallel backend connections with the [limit concurrency](api-management-advanced-policies.md#LimitConcurrency) policy.
+
+* While API Management can protect backend services from DDoS attacks, it may be vulnerable to those attacks itself. Deploy a bot protection service in front of API Management (for example, [Azure Application Gateway](api-management-howto-integrate-internal-vnet-appgateway.md), [Azure Front Door](../frontdoor/front-door-overview.md), or [Azure DDoS Protection Service](../ddos-protection/ddos-protection-overview.md)) to better protect against DDoS attacks. When using a WAF with Azure Application Gateway or Azure Front Door, consider using [Microsoft_BotManagerRuleSet_1.0](../web-application-firewall/afds/afds-overview.md#bot-protection-rule-set).
+
+## Broken function level authorization
+
+Complex access control policies with different hierarchies, groups, and roles, and an unclear separation between administrative and regular functions lead to authorization flaws. By exploiting these issues, attackers gain access to other users’ resources or administrative functions.
+
+More information about this threat: [API5:2019 Broken function level authorization](https://github.com/OWASP/API-Security/blob/master/2019/en/src/0xa5-broken-function-level-authorization.md)
+
+### Recommendations
+
+* By default, protect all API endpoints in API Management with [subscription keys](api-management-subscriptions.md).
+
+* Define a [validate JWT](api-management-access-restriction-policies.md#ValidateJWT) policy and enforce required token claims. If certain operations require stricter claims enforcement, define extra `validate-jwt` policies for those operations only.
+
+* Use an Azure virtual network or Private Link to hide API endpoints from the internet. Learn more about [virtual network options](virtual-network-concepts.md) with API Management.
+
+* Don't define [wildcard API operations](add-api-manually.md#add-and-test-a-wildcard-operation) (that is, "catch-all" APIs with `*` as the path). Ensure that API Management only serves requests for explicitly defined endpoints, and requests to undefined endpoints are rejected.
+
+* Don't publish APIs with [open products](api-management-howto-add-products.md#access-to-product-apis) that don't require a subscription.
+
+## Mass assignment
+
+If an API offers more fields than the client requires for a given action, an attacker may inject excessive properties to perform unauthorized operations on data. Attackers may discover undocumented properties by inspecting the format of requests and responses or other APIs, or guessing them. This vulnerability is especially applicable if you don’t use strongly typed programming languages.
+
+More information about this threat: [API6:2019 Mass assignment](https://github.com/OWASP/API-Security/blob/master/2019/en/src/0xa6-mass-assignment.md)
+
+### Recommendations
+
+* External API interfaces should be decoupled from the internal data implementation. Avoid binding API contracts directly to data contracts in backend services. Review the API design frequently, and deprecate and remove legacy properties using [versioning](/api-management-versions.md) in API Management.
+
+* Precisely define XML and JSON contracts in the API schema and use [validate content](validation-policies.md#validate-content) and [validate parameters](validation-policies.md#validate-parameters) policies to block requests and responses with undocumented properties. Blocking requests with undocumented properties mitigates attacks, while blocking responses with undocumented properties makes it harder to reverse-engineer potential attack vectors.
+
+* If the backend interface can't be changed, use [transformation policies](transform-api.md) to rewrite request and response payloads and decouple the API contracts from backend contracts. For example, mask or filter data or [remove unneeded JSON properties](./policies/filter-response-content.md).
+
+## Security misconfiguration
+
+Attackers may attempt to exploit security misconfiguration vulnerabilities such as:
+
+* Missing security hardening
+* Unnecessary enabled features
+* Network connections unnecessarily open to the internet
+* Use of weak protocols or ciphers
+* Other settings or endpoints that may allow unauthorized access to the system
+
+More information about this threat: [API7:2019 Security misconfiguration](https://github.com/OWASP/API-Security/blob/master/2019/en/src/0xa7-security-misconfiguration.md)
+
+### Recommendations
+
+* Correctly configure [gateway TLS](api-management-howto-manage-protocols-ciphers.MD). Don't use vulnerable protocols (for example, TLS 1.0, 1.1) or ciphers.
+
+* Configure APIs to accept encrypted traffic only, for example through HTTPS or WSS protocols.
+
+* Consider deploying API Management behind a [private endpoint](private-endpoint.md) or attached to a [virtual network deployed in internal mode](api-management-using-with-internal-vnet.md). In internal networks, access can be controlled from within the private network (via firewall or network security groups) and from the internet (via a reverse proxy).
+
+* Use Azure API Management policies:
+
+ * Always inherit parent policies through the `` tag.
+
+ * When using OAuth 2.0, configure and test the [validate JWT](api-management-access-restriction-policies.md#ValidateJWT) policy to check the existence and validity of the JWT token before it reaches the backend. Automatically check the token expiration time, token signature, and issuer. Enforce claims, audiences, token expiration, and token signature through policy settings.
+
+ * Configure the [CORS](api-management-cross-domain-policies.md#CORS) policy and don't use wildcard `*` for any configuration option. Instead, explicitly list allowed values.
+
+ * Set [validation policies](validation-policies.md) to `prevent` in production environments to validate JSON and XML schemas, headers, query parameters, and status codes, and to enforce the maximum size for request or response.
+
+ * If API Management is outside a network boundary, client IP validation is still possible using the [restrict caller IPs](api-management-access-restriction-policies.md#RestrictCallerIPs) policy. Ensure that it uses an allowlist, not a blocklist.
+
+ * If client certificates are used between caller and API Management, use the [validate client certificate](api-management-access-restriction-policies.md#validate-client-certificate) policy. Ensure that the `validate-revocation`, `validate-trust`, `validate-not-before`, and `validate-not-after` attributes are all set to `true`.
+
+ * Client certificates (mutual TLS) can also be applied between API Management and the backend. The backend should:
+
+ * Have authorization credentials configured
+
+ * Validate the certificate chain where applicable
+
+ * Validate the certificate name where applicable
+
+* For GraphQL scenarios, use the [validate GraphQL request](graphql-policies.md#validate-graphql-request) policy. Ensure that the `authorization` element and `max-size` and `max-depth` attributes are set.
+
+* Don't store secrets in policy files or in source control. Always use API Management [named values](api-management-howto-properties.md) or fetch the secrets at runtime using custom policy expressions.
+
+ * Named values should be [integrated with Key Vault](api-management-howto-properties.md#key-vault-secrets) or encrypted within API Management by marking them "secret". Never store secrets in plain-text named values.
+
+* Publish APIs through [products](api-management-howto-add-products.md), which require subscriptions. Don't use [open products](api-management-howto-add-products.md#access-to-product-apis) that don't require a subscription.
+
+* Use Key Vault integration to manage all certificates – this centralizes certificate management and can help to ease operations management tasks such as certificate renewal or revocation.
+
+* When using the [self-hosted-gateway](self-hosted-gateway-overview.md), ensure that there's a process in place to update the image to the latest version periodically.
+
+* Represent backend services as [backend entities](backends.md). Configure authorization credentials, certificate chain validation, and certificate name validation where applicable.
+
+* When using the [developer portal](api-management-howto-developer-portal.md):
+
+ * If you choose to [self-host](developer-portal-self-host.md) the developer portal, ensure there's a process in place to periodically update the self-hosted portal to the latest version. Updates for the default managed version are automatic.
+
+ * Use [Azure Active Directory (Azure AD)](api-management-howto-aad.md) or [Azure Active Directory B2C](api-management-howto-aad-b2c.md) for user sign-up and sign-in. Disable the default username and password authentication, which is less secure.
+
+ * Assign [user groups](api-management-howto-create-groups.md#-associate-a-group-with-a-product) to products, to control the visibility of APIs in the portal.
+
+* Use [Azure Policy](security-controls-policy.md) to enforce API Management resource-level configuration and role-based access control (RBAC) permissions to control resource access. Grant minimum required privileges to every user.
+
+* Use a [DevOps process](devops-api-development-templates.md) and infrastructure-as-code approach outside of a development environment to ensure consistency of API Management content and configuration changes and to minimize human errors.
+
+* Don't use any deprecated features.
+
+## Injection
+
+Any endpoint accepting user data is potentially vulnerable to an injection exploit. Examples include, but aren't limited to:
+
+* [Command injection](https://owasp.org/www-community/attacks/Command_Injection), where a bad actor attempts to alter the API request to execute commands on the operating system hosting the API
+
+* [SQL injection](https://owasp.org/www-community/attacks/SQL_Injection), where a bad actor attempts to alter the API request to execute commands and queries against the database an API depends on
+
+More information about this threat: [API8:2019 Injection](https://github.com/OWASP/API-Security/blob/master/2019/en/src/0xa8-injection.md)
+
+### Recommendations
+
+* [Modern Web Application Firewall (WAF) policies](https://github.com/SpiderLabs/ModSecurity) cover many common injection vulnerabilities. While API Management doesn’t have a built-in WAF component, deploying a WAF upstream (in front) of the API Management instance is strongly recommended. For example, use [Azure Application Gateway](/azure/architecture/reference-architectures/apis/protect-apis) or [Azure Front Door](../frontdoor/front-door-overview.md).
+
+ > [!IMPORTANT]
+ > Ensure that a bad actor can't bypass the gateway hosting the WAF and connect directly to the API Management gateway or backend API itself. Possible mitigations include: [network ACLs](../virtual-network/network-security-groups-overview.md), using API Management policy to [restrict inbound traffic by client IP](api-management-access-restriction-policies.md#RestrictCallerIPs), removing public access where not required, and [client certificate authentication](api-management-howto-mutual-certificates-for-clients.md) (also known as mutual TLS or mTLS).
+
+* Use schema and parameter [validation](validation-policies.md) policies, where applicable, to further constrain and validate the request before it reaches the backend API service.
+
+ The schema supplied with the API definition should have a regex pattern constraint applied to vulnerable fields. Each regex should be tested to ensure that it constrains the field sufficiently to mitigate common injection attempts.
+
+### Related information
+
+* [Deployment stamps pattern with Azure Front Door and API Management](/azure/architecture/patterns/deployment-stamp)
+
+* [Deploy Azure API Management with Azure Application Gateway](api-management-howto-integrate-internal-vnet-appgateway.md)
+
+## Improper assets management
+
+Vulnerabilities related to improper assets management include:
+
+* Lack of proper API documentation or ownership information
+
+* Excessive numbers of older API versions, which may be missing security fixes
+
+More information about this threat: [API9:2019 Improper assets management](https://github.com/OWASP/API-Security/blob/master/2019/en/src/0xa9-improper-assets-management.md)
+
+### Recommendations
+
+* Use a well-defined [OpenAPI specification](https://swagger.io/specification/) as the source for importing REST APIs. The specification allows encapsulation of the API definition, including self-documenting metadata.
+
+ * Use API interfaces with precise paths, data schemas, headers, query parameters, and status codes. Avoid [wildcard operations](add-api-manually.md#add-and-test-a-wildcard-operation). Provide descriptions for each API and operation and include contact and license information.
+
+ * Avoid endpoints that don’t directly contribute to the business objective. They unnecessarily increase the attack surface area and make it harder to evolve the API.
+
+* Use [revisions](api-management-revisions.md) and [versions](api-management-versions.md) in API Management to govern and control the API endpoints. Have a strong backend versioning strategy and commit to a maximum number of supported API versions (for example, 2 or 3 prior versions). Plan to quickly deprecate and ultimately remove older, often less secure, API versions.
+
+* Use an API Management instance per environment (such as development, test, and production). Ensure that each API Management instance connects to its dependencies in the same environment. For example, in the test environment, the test API Management resource should connect to a test Azure Key Vault resource and the test versions of backend services. Use [DevOps automation and infrastructure-as-code practices](devops-api-development-templates.md) to help maintain consistency and accuracy between environments and reduce human errors.
+
+* Use tags to organize APIs and products and group them for publishing.
+
+* Publish APIs for consumption through the built-in [developer portal](api-management-howto-developer-portal.md). Make sure the API documentation is up-to-date.
+
+* Discover undocumented or unmanaged APIs and expose them through API Management for better control.
+
+## Insufficient logging and monitoring
+
+Insufficient logging and monitoring, coupled with missing or ineffective integration with incident response, allows attackers to further attack systems, maintain persistence, pivot to more systems to tamper with, and extract or destroy data. Most breach studies demonstrate that the time to detect a breach is over 200 days, typically detected by external parties rather than internal processes or monitoring.
+
+More information about this threat: [API10:2019 Insufficient logging and monitoring](https://github.com/OWASP/API-Security/blob/master/2019/en/src/0xaa-insufficient-logging-monitoring.md)
+
+### Recommendations
+
+* Understand [observability options](observability.md) in Azure API Management and [best practices](/azure/architecture/best-practices/monitoring) for monitoring in Azure.
+
+* Monitor API traffic with [Azure Monitor](api-management-howto-use-azure-monitor.md).
+
+* Log to [Application Insights](api-management-howto-app-insights.md) for debugging purposes. Correlate [transactions in Application Insights](../azure-monitor/app/transaction-diagnostics.md) between API Management and the backend API to [trace them end-to-end](../azure-monitor/app/correlation.md).
+
+* If needed, forward custom events to [Event Hubs](api-management-howto-log-event-hubs.md).
+
+* Set alerts in Azure Monitor and Application Insights - for example, for the [capacity metric](api-management-howto-autoscale.md) or for excessive requests or bandwidth transfer.
+
+* Use the [emit metrics](api-management-advanced-policies.md#emit-metrics) policy for custom metrics.
+
+* Use the Azure Activity log for tracking activity in the service.
+
+* Use custom events in [Azure Application Insights](../azure-monitor/app/api-custom-events-metrics.md) and [Azure Monitor](../azure-monitor/app/custom-data-correlation.md) as needed.
+
+* Configure [OpenTelemetry](how-to-deploy-self-hosted-gateway-kubernetes-opentelemetry.md#introduction-to-opentelemetry) for [self-hosted gateways](self-hosted-gateway-overview.md) on Kubernetes.
+
+## Next steps
+
+* [Security baseline for API Management](/security/benchmark/azure/baselines/api-management-security-baseline)
+* [Security controls by Azure policy](security-controls-policy.md)
+* [Landing zone accelerator for API Management](/azure/cloud-adoption-framework/scenarios/app-platform/api-management/landing-zone-accelerator)
diff --git a/articles/api-management/policy-fragments.md b/articles/api-management/policy-fragments.md
index ecda6bc7e089d..533cb9fa41ca4 100644
--- a/articles/api-management/policy-fragments.md
+++ b/articles/api-management/policy-fragments.md
@@ -82,13 +82,13 @@ For example, insert the policy fragment named *ForwardContext* in the inbound po
```
> [!TIP]
-> To see the content of an included fragment displayed in the policy definition, select **Recalculate effective policy** in the policy editor.
+> To see the content of an included fragment displayed in the policy definition, select **Calculate effective policy** in the policy editor.
## Manage policy fragments
-After creating a policy fragment, you can view and update policy properties, or delete the policy at any time.
+After creating a policy fragment, you can view and update the properties of a policy fragment, or delete the policy fragment at any time.
-**To view properties of a fragment:**
+**To view properties of a policy fragment:**
1. In the left navigation of your API Management instance, under **APIs**, select **Policy fragments**. Select the name of your fragment.
1. On the **Overview** page, review the **Policy document references** to see the policy definitions that include the fragment.
diff --git a/articles/api-management/private-endpoint.md b/articles/api-management/private-endpoint.md
index 12ef721464b14..48d1b348a7a98 100644
--- a/articles/api-management/private-endpoint.md
+++ b/articles/api-management/private-endpoint.md
@@ -5,7 +5,7 @@ ms.service: api-management
author: dlepow
ms.author: danlep
ms.topic: how-to
-ms.date: 02/23/2022
+ms.date: 03/31/2022
---
@@ -19,6 +19,8 @@ You can configure a [private endpoint](../private-link/private-endpoint-overview
* Configure custom DNS settings or an Azure DNS private zone to map the API Management hostname to the endpoint's private IP address.
+:::image type="content" source="media/private-endpoint/api-management-private-endpoint.png" alt-text="Diagram that shows a secure connection to API Management using private endpoint.":::
+
With a private endpoint and Private Link, you can:
- Create multiple Private Link connections to an API Management instance.
diff --git a/articles/api-management/set-edit-policies.md b/articles/api-management/set-edit-policies.md
index 638f07a731fa6..1bd73ea9ab431 100644
--- a/articles/api-management/set-edit-policies.md
+++ b/articles/api-management/set-edit-policies.md
@@ -187,7 +187,7 @@ If you configure policy definitions at more than one scope, multiple policies co
In API Management, determine the policy evaluation order by placement of the `base` element in each section in the policy definition at each scope. The `base` element inherits the policies configured in that section at the next broader (parent) scope. The `base` element is included by default in each policy section.
> [!NOTE]
-> To view the effective policies at the current scope, select **Recalculate effective policy** in the policy editor.
+> To view the effective policies at the current scope, select **Calculate effective policy** in the policy editor.
To modify the policy evaluation order using the policy editor:
diff --git a/articles/api-management/validation-policies.md b/articles/api-management/validation-policies.md
index d924a133edeab..2bdb2ec351f32 100644
--- a/articles/api-management/validation-policies.md
+++ b/articles/api-management/validation-policies.md
@@ -6,15 +6,15 @@ documentationcenter: ''
author: dlepow
ms.service: api-management
ms.topic: reference
-ms.date: 03/07/2022
+ms.date: 06/07/2022
ms.author: danlep
---
# API Management policies to validate requests and responses
-This article provides a reference for API Management policies to validate REST or SOAP API requests and responses against schemas defined in the API definition or supplementary JSON or XML schemas. Validation policies protect from vulnerabilities such as injection of headers or payload or leaking sensitive data.
+This article provides a reference for API Management policies to validate REST or SOAP API requests and responses against schemas defined in the API definition or supplementary JSON or XML schemas. Validation policies protect from vulnerabilities such as injection of headers or payload or leaking sensitive data. Learn more about common [API vulnerabilites](mitigate-owasp-api-threats.md).
-While not a replacement for a Web Application Firewall, validation policies provide flexibility to respond to an additional class of threats that aren’t covered by security products that rely on static, predefined rules.
+While not a replacement for a Web Application Firewall, validation policies provide flexibility to respond to an additional class of threats that aren’t covered by security products that rely on static, predefined rules.
[!INCLUDE [api-management-policy-intro-links](../../includes/api-management-policy-intro-links.md)]
@@ -66,7 +66,7 @@ The `validate-content` policy validates the size or content of a request or resp
[!INCLUDE [api-management-policy-form-alert](../../includes/api-management-policy-form-alert.md)]
-The following table shows the schema formats and request or response content types that the policy supports. Content type values are case insensitive.
+The following table shows the schema formats and request or response content types that the policy supports. Content type values are case insensitive.
| Format | Content types |
|---------|---------|
@@ -74,6 +74,18 @@ The following table shows the schema formats and request or response content typ
|XML | Example: `application/xml` |
|SOAP | Allowed values: `application/soap+xml` for SOAP 1.2 APIs `text/xml` for SOAP 1.1 APIs|
+### What content is validated
+
+The policy validates the following content in the request or response against the schema:
+
+* Presence of all required properties.
+* Absence of additional properties, if the schema has the `additionalProperties` field set to `false`.
+* Types of all properties. For example, if a schema specifies a property as an integer, the request (or response) must include an integer and not another type, such as a string.
+* The format of the properties, if specified in the schema - for example, regex (if the `pattern` keyword is specified), `minimum` for integers, and so on.
+
+> [!TIP]
+> For examples of regex pattern constraints that can be used in schemas, see [OWASP Validation Regex Repository](https://owasp.org/www-community/OWASP_Validation_Regex_Repository).
+
### Policy statement
```xml
@@ -166,7 +178,6 @@ After the schema is created, it appears in the list on the **Schemas** page. Sel
> * A schema may cross-reference another schema that is added to the API Management instance.
> * Open-source tools to resolve WSDL and XSD schema references and to batch-import generated schemas to API Management are available on [GitHub](https://github.com/Azure-Samples/api-management-schema-import).
-
### Usage
This policy can be used in the following policy [sections](./api-management-howto-policies.md#sections) and [scopes](./api-management-howto-policies.md#scopes).
diff --git a/articles/api-management/virtual-network-concepts.md b/articles/api-management/virtual-network-concepts.md
index d7303df5d9abe..f7be67f48b011 100644
--- a/articles/api-management/virtual-network-concepts.md
+++ b/articles/api-management/virtual-network-concepts.md
@@ -1,43 +1,54 @@
---
title: Azure API Management with an Azure virtual network
-description: Learn about scenarios and requirements to connect your API Management instance to an Azure virtual network.
+description: Learn about scenarios and requirements to secure your API Management instance using an Azure virtual network.
author: dlepow
ms.service: api-management
ms.topic: conceptual
-ms.date: 01/14/2022
+ms.date: 05/26/2022
ms.author: danlep
ms.custom:
---
# Use a virtual network with Azure API Management
-With Azure virtual networks (VNets), you can place ("inject") your API Management instance in a non-internet-routable network to which you control access. In a virtual network, your API Management instance can securely access other networked Azure resources and also connect to on-premises networks using various VPN technologies. To learn more about Azure VNets, start with the information in the [Azure Virtual Network Overview](../virtual-network/virtual-networks-overview.md).
+API Management provides several options to secure access to your API Management instance and APIs using an Azure virtual network. API Management supports the following options, which are mutually exclusive:
+
+* **Integration (injection)** of the API Management instance into the virtual network, enabling the gateway to access resources in the network.
+
+ You can choose one of two integration modes: *external* or *internal*. They differ in whether inbound connectivity to the gateway and other API Management endpoints is allowed from the internet or only from within the virtual network.
+
+* **Enabling secure and private connectivity** to the API Management gateway using a *private endpoint* (preview).
-> [!TIP]
-> API Management also supports [private endpoints](../private-link/private-endpoint-overview.md). A private endpoint enables secure client connectivity to your API Management instance using a private IP address from your virtual network and Azure Private Link. [Learn more](private-endpoint.md) about using private endpoints with API Management.
+The following table compares virtual networking options. For more information, see later sections of this article and links to detailed guidance.
+
+|Networking model |Supported tiers |Supported components |Supported traffic |Usage scenario |
+|---------|---------|---------|---------|----|
+|**[Virtual network - external](#virtual-network-integration)** | Developer, Premium | Azure portal, gateway, management plane, and Git repository | Inbound and outbound traffic can be allowed to internet, peered virtual networks, Express Route, and S2S VPN connections. | External access to private and on-premises backends
+|**[Virtual network - internal](#virtual-network-integration)** | Developer, Premium | Developer portal, gateway, management plane, and Git repository. | Inbound and outbound traffic can be allowed to peered virtual networks, Express Route, and S2S VPN connections. | Internal access to private and on-premises backends
+|**[Private endpoint (preview)](#private-endpoint)** | Developer, Basic, Standard, Premium | Gateway only (managed gateway supported, self-hosted gateway not supported). | Only inbound traffic can be allowed from internet, peered virtual networks, Express Route, and S2S VPN connections. | Secure client connection to API Management gateway |
+
+## Virtual network integration
+With Azure virtual networks (VNets), you can place ("inject") your API Management instance in a non-internet-routable network to which you control access. In a virtual network, your API Management instance can securely access other networked Azure resources and also connect to on-premises networks using various VPN technologies. To learn more about Azure VNets, start with the information in the [Azure Virtual Network Overview](../virtual-network/virtual-networks-overview.md).
-This article explains VNet connectivity options, requirements, and considerations for your API Management instance. You can use the Azure portal, Azure CLI, Azure Resource Manager templates, or other tools for the configuration. You control inbound and outbound traffic into the subnet in which API Management is deployed by using [network security groups][NetworkSecurityGroups].
+ You can use the Azure portal, Azure CLI, Azure Resource Manager templates, or other tools for the configuration. You control inbound and outbound traffic into the subnet in which API Management is deployed by using [network security groups](../virtual-network/network-security-groups-overview.md).
For detailed deployment steps and network configuration, see:
* [Connect to an external virtual network using Azure API Management](./api-management-using-with-vnet.md).
* [Connect to an internal virtual network using Azure API Management](./api-management-using-with-internal-vnet.md).
-[!INCLUDE [premium-dev.md](../../includes/api-management-availability-premium-dev.md)]
-
-## Access options
-
-When created, an API Management instance must be accessible from the internet. Using a virtual network, you can configure the developer portal, API gateway, and other API Management endpoints to be accessible either from the internet (external mode) or only within the VNet (internal mode).
+### Access options
+Using a virtual network, you can configure the developer portal, API gateway, and other API Management endpoints to be accessible either from the internet (external mode) or only within the VNet (internal mode).
* **External** - The API Management endpoints are accessible from the public internet via an external load balancer. The gateway can access resources within the VNet.
- :::image type="content" source="media/virtual-network-concepts/api-management-vnet-external.png" alt-text="Connect to external VNet":::
+ :::image type="content" source="media/virtual-network-concepts/api-management-vnet-external.png" alt-text="Diagram showing a connection to external VNet." lightbox="media/virtual-network-concepts/api-management-vnet-external.png":::
Use API Management in external mode to access backend services deployed in the virtual network.
* **Internal** - The API Management endpoints are accessible only from within the VNet via an internal load balancer. The gateway can access resources within the VNet.
- :::image type="content" source="media/virtual-network-concepts/api-management-vnet-internal.png" alt-text="Connect to internal VNet":::
+ :::image type="content" source="media/virtual-network-concepts/api-management-vnet-internal.png" alt-text="Diagram showing a connection to internal VNet." lightbox="media/virtual-network-concepts/api-management-vnet-internal.png":::
Use API Management in internal mode to:
@@ -46,11 +57,11 @@ When created, an API Management instance must be accessible from the internet. U
* Manage your APIs hosted in multiple geographic locations, using a single gateway endpoint.
-## Network resource requirements
+### Network resource requirements
The following are virtual network resource requirements for API Management. Some requirements differ depending on the version (`stv2` or `stv1`) of the [compute platform](compute-infrastructure.md) hosting your API Management instance.
-### [stv2](#tab/stv2)
+#### [stv2](#tab/stv2)
* An Azure Resource Manager virtual network is required.
* You must provide a Standard SKU [public IPv4 address](../virtual-network/ip-services/public-ip-addresses.md#sku) in addition to specifying a virtual network and subnet.
@@ -59,16 +70,16 @@ The following are virtual network resource requirements for API Management. Some
* The API Management service, virtual network and subnet, and public IP address resource must be in the same region and subscription.
* For multi-region API Management deployments, configure virtual network resources separately for each location.
-### [stv1](#tab/stv1)
+#### [stv1](#tab/stv1)
* An Azure Resource Manager virtual network is required.
-* The subnet used to connect to the API Management instance must be dedicated to API Management. It cannot contain other Azure resource types.
+* The subnet used to connect to the API Management instance must be dedicated to API Management. It can't contain other Azure resource types.
* The API Management service, virtual network, and subnet resources must be in the same region and subscription.
-* For multi-region API Management deployments, you configure virtual network resources separately for each location.
+* For multi-region API Management deployments, configure virtual network resources separately for each location.
---
-## Subnet size
+### Subnet size
The minimum size of the subnet in which API Management can be deployed is /29, which gives three usable IP addresses. Each extra scale [unit](api-management-capacity.md) of API Management requires two more IP addresses. The minimum size requirement is based on the following considerations:
@@ -80,46 +91,78 @@ The minimum size of the subnet in which API Management can be deployed is /29, w
* When deploying into an [internal VNet](./api-management-using-with-internal-vnet.md), the instance requires an extra IP address for the internal load balancer.
-## Routing
+### Routing
See the Routing guidance when deploying your API Management instance into an [external VNet](./api-management-using-with-vnet.md#routing) or [internal VNet](./api-management-using-with-internal-vnet.md#routing).
Learn more about the [IP addresses of API Management](api-management-howto-ip-addresses.md).
-## DNS
+### DNS
-* In external mode, the VNet enables [Azure-provided name resolution](../virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances.md#azure-provided-name-resolution) by default for your API Management endpoints and other Azure resources. It does not provide name resolution for on-premises resources. Optionally, configure your own DNS solution.
+* In external mode, the VNet enables [Azure-provided name resolution](../virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances.md#azure-provided-name-resolution) by default for your API Management endpoints and other Azure resources. It doesn't provide name resolution for on-premises resources. Optionally, configure your own DNS solution.
* In internal mode, you must provide your own DNS solution to ensure name resolution for API Management endpoints and other required Azure resources. We recommend configuring an Azure [private DNS zone](../dns/private-dns-overview.md).
For more information, see the DNS guidance when deploying your API Management instance into an [external VNet](./api-management-using-with-vnet.md#routing) or [internal VNet](./api-management-using-with-internal-vnet.md#routing).
-For more information, see:
+Related information:
* [Name resolution for resources in Azure virtual networks](../virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances.md#name-resolution-that-uses-your-own-dns-server).
* [Create an Azure private DNS zone](../dns/private-dns-getstarted-portal.md)
> [!IMPORTANT]
> If you plan to use a custom DNS solution for the VNet, set it up **before** deploying an API Management service into it. Otherwise, you'll need to update the API Management service each time you change the DNS server(s) by running the [Apply Network Configuration Operation](/rest/api/apimanagement/current-ga/api-management-service/apply-network-configuration-updates), or by selecting **Apply network configuration** in the service instance's network configuration window in the Azure portal.
-## Limitations
+### Limitations
-Some limitations differ depending on the version (`stv2` or `stv1`) of the [compute platform](compute-infrastructure.md) hosting your API Management instance.
+Some virtual network limitations differ depending on the version (`stv2` or `stv1`) of the [compute platform](compute-infrastructure.md) hosting your API Management instance.
-### [stv2](#tab/stv2)
+#### [stv2](#tab/stv2)
* A subnet containing API Management instances can't be moved across subscriptions.
* For multi-region API Management deployments configured in internal VNet mode, users own the routing and are responsible for managing the load balancing across multiple regions.
* To import an API to API Management from an [OpenAPI specification](import-and-publish.md), the specification URL must be hosted at a publicly accessible internet address.
-### [stv1](#tab/stv1)
+#### [stv1](#tab/stv1)
-* A subnet containing API Management instances can't be movacross subscriptions.
+* A subnet containing API Management instances can't be moved across subscriptions.
* For multi-region API Management deployments configured in internal VNet mode, users own the routing and are responsible for managing the load balancing across multiple regions.
* To import an API to API Management from an [OpenAPI specification](import-and-publish.md), the specification URL must be hosted at a publicly accessible internet address.
-* Due to platform limitations, connectivity between a resource in a globally peered VNet in another region and an API Management service in internal mode will not work. For more information, see the [virtual network documentation](../virtual-network/virtual-network-manage-peering.md#requirements-and-constraints).
+* Due to platform limitations, connectivity between a resource in a globally peered VNet in another region and an API Management service in internal mode won't work. For more information, see the [virtual network documentation](../virtual-network/virtual-network-manage-peering.md#requirements-and-constraints).
---
+## Private endpoint
+
+API Management supports [private endpoints](../private-link/private-endpoint-overview.md). A private endpoint enables secure client connectivity to your API Management instance using a private IP address from your virtual network and Azure Private Link.
+
+:::image type="content" source="media/virtual-network-concepts/api-management-private-endpoint.png" alt-text="Diagram showing a secure connection to API Management using private endpoint." lightbox="media/virtual-network-concepts/api-management-private-endpoint.png":::
+
+With a private endpoint and Private Link, you can:
+
+* Create multiple Private Link connections to an API Management instance.
+* Use the private endpoint to send inbound traffic on a secure connection.
+* Use policy to distinguish traffic that comes from the private endpoint.
+* Limit incoming traffic only to private endpoints, preventing data exfiltration.
+
+> [!IMPORTANT]
+> * API Management support for private endpoints is currently in preview.
+> * During the preview period, a private endpoint connection supports only incoming traffic to the API Management managed gateway.
+
+For more information, see [Connect privately to API Management using a private endpoint](private-endpoint.md).
+
+## Advanced networking configurations
+
+### Secure API Management endpoints with a web application firewall
+
+You may have scenarios where you need both secure external and internal access to your API Management instance, and flexibility to reach private and on-premises backends. For these scenarios, you may choose to manage external access to the endpoints of an API Management instance with a web application firewall (WAF).
+
+One example is to deploy an API Management instance in an internal virtual network, and route public access to it using an internet-facing Azure Application Gateway:
+
+:::image type="content" source="media/virtual-network-concepts/api-management-application-gateway.png" alt-text="Diagram showing Application Gateway in front of API Management instance." lightbox="media/virtual-network-concepts/api-management-application-gateway.png":::
+
+For more information, see [Integrate API Management in an internal virtual network with Application Gateway](api-management-howto-integrate-internal-vnet-appgateway.md).
+
+
## Next steps
Learn more about:
@@ -128,11 +171,13 @@ Learn more about:
* [Connecting a virtual network from different deployment models](../vpn-gateway/vpn-gateway-connect-different-deployment-models-powershell.md)
* [Virtual network frequently asked questions](../virtual-network/virtual-networks-faq.md)
-Connect to a virtual network:
+Virtual network configuration with API Management:
* [Connect to an external virtual network using Azure API Management](./api-management-using-with-vnet.md).
* [Connect to an internal virtual network using Azure API Management](./api-management-using-with-internal-vnet.md).
+* [Connect privately to API Management using a private endpoint](private-endpoint.md)
+
-Review the following topics
+Related articles:
* [Connecting a Virtual Network to backend using Vpn Gateway](../vpn-gateway/design.md#s2smulti)
* [Connecting a Virtual Network from different deployment models](../vpn-gateway/vpn-gateway-connect-different-deployment-models-powershell.md)
@@ -140,17 +185,6 @@ Review the following topics
* [Virtual Network Frequently asked Questions](../virtual-network/virtual-networks-faq.md)
* [Service tags](../virtual-network/network-security-groups-overview.md#service-tags)
-[api-management-using-vnet-menu]: ./media/api-management-using-with-vnet/api-management-menu-vnet.png
-[api-management-setup-vpn-select]: ./media/api-management-using-with-vnet/api-management-using-vnet-select.png
-[api-management-setup-vpn-add-api]: ./media/api-management-using-with-vnet/api-management-using-vnet-add-api.png
-[api-management-vnet-private]: ./media/virtual-network-concepts/api-management-vnet-internal.png
-[api-management-vnet-public]: ./media/virtual-network-concepts/api-management-vnet-external.png
-[Enable VPN connections]: #enable-vpn
-[Connect to a web service behind VPN]: #connect-vpn
-[Related content]: #related-content
-[UDRs]: ../virtual-network/virtual-networks-udr-overview.md
-[NetworkSecurityGroups]: ../virtual-network/network-security-groups-overview.md
-[ServiceEndpoints]: ../virtual-network/virtual-network-service-endpoints-overview.md
-[ServiceTags]: ../virtual-network/network-security-groups-overview.md#service-tags
+
diff --git a/articles/app-service/configure-custom-container.md b/articles/app-service/configure-custom-container.md
index 938069c61c35a..7a377aa88cd77 100644
--- a/articles/app-service/configure-custom-container.md
+++ b/articles/app-service/configure-custom-container.md
@@ -206,7 +206,7 @@ The only exception is the `C:\home\LogFiles` directory, which is used to store t
::: zone pivot="container-linux"
-You can use the */home* directory in your custom container file system to persist files across restarts and share them across instances. The `/home` directory is provided to enable your custom container to access persistent storage. Saving data within `/home` will contribute to the [storage space quota](https://docs.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits#app-service-limits) included with your App Service Plan.
+You can use the */home* directory in your custom container file system to persist files across restarts and share them across instances. The `/home` directory is provided to enable your custom container to access persistent storage. Saving data within `/home` will contribute to the [storage space quota](../azure-resource-manager/management/azure-subscription-service-limits.md#app-service-limits) included with your App Service Plan.
When persistent storage is disabled, then writes to the `/home` directory are not persisted across app restarts or across multiple instances. When persistent storage is enabled, all writes to the `/home` directory are persisted and can be accessed by all instances of a scaled-out app. Additionally, any contents inside the `/home` directory of the container are overwritten by any existing files already present on the persistent storage when the container starts.
@@ -524,4 +524,4 @@ The following lists show supported and unsupported Docker Compose configuration
Or, see additional resources:
- [Environment variables and app settings reference](reference-app-settings.md)
-- [Load certificate in Windows/Linux containers](configure-ssl-certificate-in-code.md#load-certificate-in-linuxwindows-containers)
+- [Load certificate in Windows/Linux containers](configure-ssl-certificate-in-code.md#load-certificate-in-linuxwindows-containers)
\ No newline at end of file
diff --git a/articles/app-service/configure-language-java.md b/articles/app-service/configure-language-java.md
index 6ef2e9260d6d6..6142f2f45f54c 100644
--- a/articles/app-service/configure-language-java.md
+++ b/articles/app-service/configure-language-java.md
@@ -1135,6 +1135,8 @@ App Service supports clustering for JBoss EAP versions 7.4.1 and greater. To ena
When clustering is enabled, the JBoss EAP instances use the FILE_PING JGroups discovery protocol to discover new instances and persist the cluster information like the cluster members, their identifiers, and their IP addresses. On App Service, these files are under `/home/clusterinfo/`. The first EAP instance to start will obtain read/write permissions on the cluster membership file. Other instances will read the file, find the primary node, and coordinate with that node to be included in the cluster and added to the file.
+The Premium V3 and Isolated V2 App Service Plan types can optionally be distributed across Availability Zones to improve resiliency and reliability for your business-critical workloads. This architecture is also known as [zone redundancy](how-to-zone-redundancy.md). The JBoss EAP clustering feature is compatabile with the zone redundancy feature.
+
### JBoss EAP App Service Plans
diff --git a/articles/app-service/configure-vnet-integration-enable.md b/articles/app-service/configure-vnet-integration-enable.md
index cecc93cd48beb..e4b6a8ab910b5 100644
--- a/articles/app-service/configure-vnet-integration-enable.md
+++ b/articles/app-service/configure-vnet-integration-enable.md
@@ -6,6 +6,7 @@ author: madsd
ms.author: madsd
ms.topic: how-to
ms.date: 10/20/2021
+ms.tool: azure-cli, azure-powershell
---
# Enable virtual network integration in Azure App Service
diff --git a/articles/app-service/environment/how-to-migrate.md b/articles/app-service/environment/how-to-migrate.md
index ff0f6593184b6..6693900fdf2a6 100644
--- a/articles/app-service/environment/how-to-migrate.md
+++ b/articles/app-service/environment/how-to-migrate.md
@@ -80,7 +80,7 @@ az network vnet subnet update -g $ASE_RG -n --vnet-name ` is not available in this location|You'll see this error if you're trying to migrate an App Service Environment in a region that doesn't support one of your requested features. |Migrate using one of the [manual migration options](migration-alternatives.md) if you want to migrate immediately. Otherwise, wait for the migration feature to support this App Service Environment configuration. |
|Migrate cannot be called on this ASE until the active upgrade has finished. |App Service Environments can't be migrated during platform upgrades. You can set your [upgrade preference](using-an-ase.md#upgrade-preference) from the Azure portal. |Wait until the upgrade finishes and then migrate. |
@@ -114,11 +114,11 @@ App Service Environment v3 requires the subnet it's in to have a single delegati
After updating all dependent resources with your new IPs and properly delegating your subnet, you should continue with migration as soon as possible.
-During migration, the following events will occur:
+During migration, which requires up to a three hour service window, the following events will occur:
- The existing App Service Environment is shut down and replaced by the new App Service Environment v3.
- All App Service plans in the App Service Environment are converted from Isolated to Isolated v2.
-- All of the apps that are on your App Service Environment are temporarily down. You should expect about one hour of downtime.
+- All of the apps that are on your App Service Environment are temporarily down. You should expect about one hour of downtime during this period.
- If you can't support downtime, see [migration-alternatives](migration-alternatives.md#guidance-for-manual-migration).
- The public addresses that are used by the App Service Environment will change to the IPs identified during the previous step.
@@ -137,7 +137,7 @@ There's no cost to migrate your App Service Environment. You'll stop being charg
- **What if migrating my App Service Environment is not currently supported?**
You won't be able migrate using the migration feature at this time. If you have an unsupported environment and want to migrate immediately, see the [manual migration options](migration-alternatives.md). This doc will be updated as additional regions and supported scenarios become available.
- **Will I experience downtime during the migration?**
- Yes, you should expect about one hour of downtime during the migration step so plan accordingly. If downtime isn't an option for you, see the [manual migration options](migration-alternatives.md).
+ Yes, you should expect about one hour of downtime during the three hour service window during the migration step so plan accordingly. If downtime isn't an option for you, see the [manual migration options](migration-alternatives.md).
- **Will I need to do anything to my apps after the migration to get them running on the new App Service Environment?**
No, all of your apps running on the old environment will be automatically migrated to the new environment and run like before. No user input is needed.
- **What if my App Service Environment has a custom domain suffix?**
@@ -149,7 +149,7 @@ There's no cost to migrate your App Service Environment. You'll stop being charg
- **What happens if migration fails or there is an unexpected issue during the migration?**
If there's an unexpected issue, support teams will be on hand. It's recommended to migrate dev environments before touching any production environments.
- **What happens to my old App Service Environment?**
- If you decide to migrate an App Service Environment, the old environment gets shut down and deleted and all of your apps are migrated to a new environment. Your old environment will no longer be accessible.
+ If you decide to migrate an App Service Environment, the old environment gets shut down and deleted and all of your apps are migrated to a new environment. Your old environment will no longer be accessible. A rollback to the old environment will not be possible.
- **What will happen to my App Service Environment v1/v2 resources after 31 August 2024?**
After 31 August 2024, if you haven't migrated to App Service Environment v3, your App Service Environment v1/v2s and the apps deployed in them will no longer be available. App Service Environment v1/v2 is hosted on App Service scale units running on [Cloud Services (classic)](../../cloud-services/cloud-services-choose-me.md) architecture that will be [retired on 31 August 2024](https://azure.microsoft.com/updates/cloud-services-retirement-announcement/). Because of this, [App Service Environment v1/v2 will no longer be available after that date](https://azure.microsoft.com/updates/app-service-environment-v1-and-v2-retirement-announcement/). Migrate to App Service Environment v3 to keep your apps running or save or back up any resources or data that you need to maintain.
diff --git a/articles/app-service/includes/tutorial-dotnetcore-sqldb-app/azure-portal-connect-database-01.md b/articles/app-service/includes/tutorial-dotnetcore-sqldb-app/azure-portal-connect-database-01.md
index 3f79f7c1bbfb5..7a00fb8c878ce 100644
--- a/articles/app-service/includes/tutorial-dotnetcore-sqldb-app/azure-portal-connect-database-01.md
+++ b/articles/app-service/includes/tutorial-dotnetcore-sqldb-app/azure-portal-connect-database-01.md
@@ -2,9 +2,10 @@
author: alexwolfmsft
ms.author: alexwolf
ms.topic: include
-ms.date: 02/03/2022
+ms.date: 06/01/2022
---
In the Azure portal:
-
-Enter *coredb* in the Azure portal search bar. Select the matching item in the search results to navigate to the database overview page.
\ No newline at end of file
+
+1. Type the name of your app in the search box at the top of the screen.
+1. In the search results, select the app to navigate to it.
\ No newline at end of file
diff --git a/articles/app-service/includes/tutorial-dotnetcore-sqldb-app/azure-portal-connect-database-02.md b/articles/app-service/includes/tutorial-dotnetcore-sqldb-app/azure-portal-connect-database-02.md
index e0aeba2cb69b0..6668192d0b663 100644
--- a/articles/app-service/includes/tutorial-dotnetcore-sqldb-app/azure-portal-connect-database-02.md
+++ b/articles/app-service/includes/tutorial-dotnetcore-sqldb-app/azure-portal-connect-database-02.md
@@ -2,7 +2,8 @@
author: alexwolfmsft
ms.author: alexwolf
ms.topic: include
-ms.date: 02/03/2022
+ms.date: 06/01/2022
---
-On the left navigation of the database settings page, select **Connection strings**. Copy the connection string out of the text box under the preselected **ADO.NET** tab. Save it somewhere for later use throughout this guide.
\ No newline at end of file
+1. On the left navigation, select **Service Connector**.
+1. Select **Create**.
\ No newline at end of file
diff --git a/articles/app-service/includes/tutorial-dotnetcore-sqldb-app/azure-portal-connect-database-03.md b/articles/app-service/includes/tutorial-dotnetcore-sqldb-app/azure-portal-connect-database-03.md
index c3e01ba859342..63740541d089b 100644
--- a/articles/app-service/includes/tutorial-dotnetcore-sqldb-app/azure-portal-connect-database-03.md
+++ b/articles/app-service/includes/tutorial-dotnetcore-sqldb-app/azure-portal-connect-database-03.md
@@ -2,7 +2,15 @@
author: alexwolfmsft
ms.author: alexwolf
ms.topic: include
-ms.date: 02/03/2022
+ms.date: 06/01/2022
---
-Next, in the search bar at the top of the Azure portal, search for the `coreSqlXYZ` App Service you created previously and select it to navigate to the overview page.
+On the **Create connection** page
+
+1. select or enter the following settings:
+
+ * **Service Type**: Select **SQL Database**.
+ * **SQL server**: Enter your SQL Database server name.
+ * **SQL database**: Select **coreDB**.
+
+1. Select **Next: Authentication**.
\ No newline at end of file
diff --git a/articles/app-service/includes/tutorial-dotnetcore-sqldb-app/azure-portal-connect-database-04.md b/articles/app-service/includes/tutorial-dotnetcore-sqldb-app/azure-portal-connect-database-04.md
index b9c017b510a3d..e65707b0bc0d1 100644
--- a/articles/app-service/includes/tutorial-dotnetcore-sqldb-app/azure-portal-connect-database-04.md
+++ b/articles/app-service/includes/tutorial-dotnetcore-sqldb-app/azure-portal-connect-database-04.md
@@ -2,17 +2,10 @@
author: alexwolfmsft
ms.author: alexwolf
ms.topic: include
-ms.date: 02/03/2022
+ms.date: 06/01/2022
---
-Select the **Configuration** link on the left nav to go to the configuration page.
+Under the **Authentication** tab:
-Select the **+ New Connection string** button in the **Connection Strings** section, and enter the following values:
-
-* **Name** - enter `MyDbConnection`.
-* **Value** - paste the connection string you copied into the value field. Make sure to replace the username and password in the Connection String with the values you specified when creating the database.
-* **Type** - select **SQLServer**.
-
-Select **OK** to close the dialog, and then select **Save** at the top of the configuration screen.
-
-Your app can now connect to the SQL database. Next let's generate the schema for our data using Entity Framework Core.
+1. Specify the username and password of your SQL database.
+1. Select **Next: Networking**, then select **Next: Review + Create**.
diff --git a/articles/app-service/includes/tutorial-dotnetcore-sqldb-app/azure-portal-connect-database-05.md b/articles/app-service/includes/tutorial-dotnetcore-sqldb-app/azure-portal-connect-database-05.md
new file mode 100644
index 0000000000000..0fa2f839759ee
--- /dev/null
+++ b/articles/app-service/includes/tutorial-dotnetcore-sqldb-app/azure-portal-connect-database-05.md
@@ -0,0 +1,11 @@
+---
+author: alexwolfmsft
+ms.author: alexwolf
+ms.topic: include
+ms.date: 06/01/2022
+---
+
+
+After validation is complete, select **Create** to create the service connection.
+
+It might take 1 minute to complete the operation. Click **Refresh** button to see the SQL database connection.
diff --git a/articles/app-service/includes/tutorial-dotnetcore-sqldb-app/azure-portal-connect-database-06.md b/articles/app-service/includes/tutorial-dotnetcore-sqldb-app/azure-portal-connect-database-06.md
new file mode 100644
index 0000000000000..18c29ebde3ec8
--- /dev/null
+++ b/articles/app-service/includes/tutorial-dotnetcore-sqldb-app/azure-portal-connect-database-06.md
@@ -0,0 +1,13 @@
+---
+author: cephalin
+ms.author: cephalin
+ms.topic: include
+ms.date: 06/01/2022
+---
+
+In the **Service Connector** page:
+
+1. Expand the connection by selecting **>** next to it. `AZURE_SQL_CONNECTIONSTRING` is the connection string generated for you.
+1. Select **Hidden value. Click to show value** and copy the connection string for later.
+
+Your app can now connect to the SQL database. Next, let's generate the schema for our data using Entity Framework Core.
\ No newline at end of file
diff --git a/articles/app-service/media/quickstart-wordpress/05-wordpress-basics-instance-details.png b/articles/app-service/media/quickstart-wordpress/05-wordpress-basics-instance-details.png
index 0d08a5ccba5c9..36fe6c235ad68 100644
Binary files a/articles/app-service/media/quickstart-wordpress/05-wordpress-basics-instance-details.png and b/articles/app-service/media/quickstart-wordpress/05-wordpress-basics-instance-details.png differ
diff --git a/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-01-240px.png b/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-01-240px.png
index 2d045bc05feca..341a9cf59b5bd 100644
Binary files a/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-01-240px.png and b/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-01-240px.png differ
diff --git a/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-01.png b/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-01.png
index 4842fe301a2ac..6226ab9864403 100644
Binary files a/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-01.png and b/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-01.png differ
diff --git a/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-02-240px.png b/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-02-240px.png
index 0fa5a24e7e60d..205bf9d115518 100644
Binary files a/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-02-240px.png and b/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-02-240px.png differ
diff --git a/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-02.png b/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-02.png
index db5948d3f375c..1b8f0ee80e98d 100644
Binary files a/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-02.png and b/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-02.png differ
diff --git a/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-03-240px.png b/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-03-240px.png
index 7c37337e2d580..14bf9c96e6992 100644
Binary files a/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-03-240px.png and b/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-03-240px.png differ
diff --git a/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-03.png b/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-03.png
index 5953aaf3e8d16..d55005b1738c9 100644
Binary files a/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-03.png and b/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-03.png differ
diff --git a/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-04-240px.png b/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-04-240px.png
index 26a470546150e..55e1850bcd7a6 100644
Binary files a/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-04-240px.png and b/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-04-240px.png differ
diff --git a/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-04.png b/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-04.png
index f5891d8c0ddff..dd2cbdbb53c79 100644
Binary files a/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-04.png and b/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-04.png differ
diff --git a/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-05-240px.png b/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-05-240px.png
new file mode 100644
index 0000000000000..d7b607954c9cf
Binary files /dev/null and b/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-05-240px.png differ
diff --git a/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-05.png b/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-05.png
new file mode 100644
index 0000000000000..5f9f75ede12c3
Binary files /dev/null and b/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-05.png differ
diff --git a/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-06-240px.png b/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-06-240px.png
new file mode 100644
index 0000000000000..2af15bcf73b13
Binary files /dev/null and b/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-06-240px.png differ
diff --git a/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-06.png b/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-06.png
new file mode 100644
index 0000000000000..797da957140af
Binary files /dev/null and b/articles/app-service/media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-06.png differ
diff --git a/articles/app-service/media/webjobs-dotnet-deploy-vs/publish-settings.png b/articles/app-service/media/webjobs-dotnet-deploy-vs/publish-settings.png
index 643616a9a385f..538d1c0d47bab 100644
Binary files a/articles/app-service/media/webjobs-dotnet-deploy-vs/publish-settings.png and b/articles/app-service/media/webjobs-dotnet-deploy-vs/publish-settings.png differ
diff --git a/articles/app-service/media/webjobs-sdk-get-started/blob-upload-button.png b/articles/app-service/media/webjobs-sdk-get-started/blob-upload-button.png
index 03c3557cc22d1..f76b1848f067a 100644
Binary files a/articles/app-service/media/webjobs-sdk-get-started/blob-upload-button.png and b/articles/app-service/media/webjobs-sdk-get-started/blob-upload-button.png differ
diff --git a/articles/app-service/media/webjobs-sdk-get-started/change-webjob-type.png b/articles/app-service/media/webjobs-sdk-get-started/change-webjob-type.png
new file mode 100644
index 0000000000000..f5cfaff8cd9a3
Binary files /dev/null and b/articles/app-service/media/webjobs-sdk-get-started/change-webjob-type.png differ
diff --git a/articles/app-service/media/webjobs-sdk-get-started/connection-key.png b/articles/app-service/media/webjobs-sdk-get-started/connection-key.png
index 726237221c55e..a4bdce6db7a41 100644
Binary files a/articles/app-service/media/webjobs-sdk-get-started/connection-key.png and b/articles/app-service/media/webjobs-sdk-get-started/connection-key.png differ
diff --git a/articles/app-service/media/webjobs-sdk-get-started/create-queue-azure-storage.png b/articles/app-service/media/webjobs-sdk-get-started/create-queue-azure-storage.png
new file mode 100644
index 0000000000000..20d6ece1b0ab5
Binary files /dev/null and b/articles/app-service/media/webjobs-sdk-get-started/create-queue-azure-storage.png differ
diff --git a/articles/app-service/media/webjobs-sdk-get-started/hello-world-text.png b/articles/app-service/media/webjobs-sdk-get-started/hello-world-text.png
index 8f8704a56dbaf..c37d8e2d1f7ed 100644
Binary files a/articles/app-service/media/webjobs-sdk-get-started/hello-world-text.png and b/articles/app-service/media/webjobs-sdk-get-started/hello-world-text.png differ
diff --git a/articles/app-service/media/webjobs-sdk-get-started/queue-msg-program-cs.png b/articles/app-service/media/webjobs-sdk-get-started/queue-msg-program-cs.png
index e9cc6a7412280..6e99e7981a0be 100644
Binary files a/articles/app-service/media/webjobs-sdk-get-started/queue-msg-program-cs.png and b/articles/app-service/media/webjobs-sdk-get-started/queue-msg-program-cs.png differ
diff --git a/articles/app-service/media/webjobs-sdk-get-started/stop-app-service.png b/articles/app-service/media/webjobs-sdk-get-started/stop-app-service.png
new file mode 100644
index 0000000000000..d5308f480155e
Binary files /dev/null and b/articles/app-service/media/webjobs-sdk-get-started/stop-app-service.png differ
diff --git a/articles/app-service/networking/nat-gateway-integration.md b/articles/app-service/networking/nat-gateway-integration.md
index 432d0f7a929d0..037d9e1b1bcbb 100644
--- a/articles/app-service/networking/nat-gateway-integration.md
+++ b/articles/app-service/networking/nat-gateway-integration.md
@@ -79,7 +79,7 @@ az network vnet subnet update --resource-group [myResourceGroup] --vnet-name [my
The same NAT gateway can be used across multiple subnets in the same Virtual Network allowing a NAT gateway to be used across multiple apps and App Service plans.
-NAT gateway supports both public IP addresses and public IP prefixes. A NAT gateway can support up to 16 IP addresses across individual IP addresses and prefixes. Each IP address allocates 64,000 ports (SNAT ports) allowing up to 1M available ports. Learn more in the [Scaling section](../../virtual-network/nat-gateway/nat-gateway-resource.md#scale-nat-gateway) of NAT gateway.
+NAT gateway supports both public IP addresses and public IP prefixes. A NAT gateway can support up to 16 IP addresses across individual IP addresses and prefixes. Each IP address allocates 64,512 ports (SNAT ports) allowing up to 1M available ports. Learn more in the [Scaling section](../../virtual-network/nat-gateway/nat-gateway-resource.md#scale-nat-gateway) of NAT gateway.
## Next steps
diff --git a/articles/app-service/provision-resource-terraform.md b/articles/app-service/provision-resource-terraform.md
index 551d106f69378..494fbefc6c819 100644
--- a/articles/app-service/provision-resource-terraform.md
+++ b/articles/app-service/provision-resource-terraform.md
@@ -5,6 +5,7 @@ author: seligj95
ms.author: msangapu
ms.topic: article
ms.date: 8/26/2021
+ms.tool: terraform
ms.custom: subject-terraform
---
diff --git a/articles/app-service/quickstart-php.md b/articles/app-service/quickstart-php.md
index 35a6a26a8cc4c..7d27471704d2a 100644
--- a/articles/app-service/quickstart-php.md
+++ b/articles/app-service/quickstart-php.md
@@ -59,15 +59,12 @@ Azure CLI has a command [`az webapp up`](/cli/azure/webapp#az_webapp_up) that wi
In the terminal, deploy the code in your local folder using the [`az webapp up`](/cli/azure/webapp#az_webapp_up) command:
```azurecli
-az webapp up \
- --sku F1 \
- --logs
+az webapp up --runtime "php|8.0" --os-type=linux
```
- If the `az` command isn't recognized, be sure you have Azure CLI installed.
-
-- The `--sku F1` argument creates the web app on the Free pricing tier, which incurs a no cost.
-- The `--logs` flag configures default logging required to enable viewing the log stream immediately after launching the webapp.
+- The `--runtime "php|8.0"` argument creates the web app with PHP version 8.0.
+- The `--os-type=linux` argument creates the web app on App Service on Linux.
- You can optionally specify a name with the argument `--name `. If you don't provide one, then a name will be automatically generated.
- You can optionally include the argument `--location ` where `` is an available Azure region. You can retrieve a list of allowable regions for your Azure account by running the [`az account list-locations`](/cli/azure/appservice#az_appservice_list_locations) command.
- If you see the error, "Could not auto-detect the runtime stack of your app," make sure you're running the command in the code directory (See [Troubleshooting auto-detect issues with az webapp up](https://github.com/Azure/app-service-linux-docs/blob/master/AzWebAppUP/runtime_detection.md)).
@@ -81,7 +78,7 @@ Resource group creation complete
Creating AppServicePlan '<app-service-plan-name>' ...
Creating webapp '<app-name>' ...
Configuring default logging for the app, if not already enabled
-Creating zip with contents of dir /home/cephas/myExpressApp ...
+Creating zip with contents of dir /home/msangapu/myPhpApp ...
Getting scm site credentials for zip deployment
Starting zip deployment. This operation can take a while to complete ...
Deployment endpoint responded with status code 202
@@ -116,10 +113,10 @@ Browse to the deployed application in your web browser at the URL `http:// [!div class="nextstepaction"]
> [Configure PHP app](configure-language-php.md)
-::: zone-end
\ No newline at end of file
+::: zone-end
diff --git a/articles/app-service/quickstart-python-portal.md b/articles/app-service/quickstart-python-portal.md
index 80441daa478ba..3e0534d70ac85 100644
--- a/articles/app-service/quickstart-python-portal.md
+++ b/articles/app-service/quickstart-python-portal.md
@@ -149,7 +149,7 @@ Having issues? [Let us know](https://aka.ms/FlaskCLIQuickstartHelp).
## Next steps
> [!div class="nextstepaction"]
-> [Tutorial: Python (Django) web app with PostgreSQL](/azure/developer/python/tutorial-python-postgresql-app-portal)
+> [Tutorial: Python (Django) web app with PostgreSQL](/azure/app-service/tutorial-python-postgresql-app)
> [!div class="nextstepaction"]
> [Configure Python app](configure-language-python.md)
diff --git a/articles/app-service/quickstart-python.md b/articles/app-service/quickstart-python.md
index a77ef4b0bc174..5a29ae2d26ead 100644
--- a/articles/app-service/quickstart-python.md
+++ b/articles/app-service/quickstart-python.md
@@ -3,8 +3,8 @@ title: 'Quickstart: Deploy a Python (Django or Flask) web app to Azure'
description: Get started with Azure App Service by deploying your first Python app to Azure App Service.
ms.topic: quickstart
ms.date: 03/22/2022
-author: DavidCBerry13
-ms.author: daberry
+author: mijacobs
+ms.author: mijacobs
ms.devlang: python
ms.custom: devx-azure-cli, devx-azure-portal, devx-vscode-azure-extension, devdivchpfy22
---
diff --git a/articles/app-service/security-controls-policy.md b/articles/app-service/security-controls-policy.md
index 726530f9d5a3f..c34ddffb05d0c 100644
--- a/articles/app-service/security-controls-policy.md
+++ b/articles/app-service/security-controls-policy.md
@@ -1,7 +1,7 @@
---
title: Azure Policy Regulatory Compliance controls for Azure App Service
description: Lists Azure Policy Regulatory Compliance controls available for Azure App Service. These built-in policy definitions provide common approaches to managing the compliance of your Azure resources.
-ms.date: 05/10/2022
+ms.date: 06/03/2022
ms.topic: sample
ms.service: app-service
ms.custom: subject-policy-compliancecontrols
@@ -15,9 +15,21 @@ page lists the **compliance domains** and **security controls** for Azure App Se
assign the built-ins for a **security control** individually to help make your Azure resources
compliant with the specific standard.
-[!INCLUDE [azure-policy-compliancecontrols-introwarning](../../includes/policy/standards/intro-warning.md)]
+[!INCLUDE [Azure-policy-compliancecontrols-introwarning](../../includes/policy/standards/intro-warning.md)]
-[!INCLUDE [azure-policy-compliancecontrols-appservice](../../includes/policy/standards/byrp/microsoft.web.md)]
+[!INCLUDE [Azure-policy-compliancecontrols-appservice](../../includes/policy/standards/byrp/microsoft.web.md)]
+
+## Release notes
+
+### June 2022
+
+- Deprecation of policy "API App should only be accessible over HTTPS"
+- Rename of policy "Web Application should only be accessible over HTTPS" to "App Service apps should only be accessible over HTTPS"
+- Update scope of policy "App Service apps should only be accessible over HTTPS" to include all app types except Function apps
+- Update scope of policy "App Service apps should only be accessible over HTTPS" to include slots
+- Update scope of policy "Function apps should only be accessible over HTTPS" to include slots
+- Update logic of policy "App Service apps should use a SKU that supports private link" to include checks on App Service plan tier or name so that the policy supports Terraform deployments
+- Update list of supported SKUs of policy "App Service apps should use a SKU that supports private link" to include the Basic and Standard tiers
## Next steps
diff --git a/articles/app-service/troubleshoot-dotnet-visual-studio.md b/articles/app-service/troubleshoot-dotnet-visual-studio.md
index ea582cdc5fae5..20fcf4c5e286f 100644
--- a/articles/app-service/troubleshoot-dotnet-visual-studio.md
+++ b/articles/app-service/troubleshoot-dotnet-visual-studio.md
@@ -33,7 +33,7 @@ The tutorial assumes you're using Visual Studio 2019.
The streaming logs feature only works for applications that target .NET Framework 4 or later.
## App configuration and management
-Visual Studio provides access to a subset of the app management functions and configuration settings available in the [Azure portal](https://go.microsoft.com/fwlink/?LinkId=529715). In this section, you'll see what's available by using **Server Explorer**. To see the latest Azure integration features, try out **Cloud Explorer** also. You can open both windows from the **View** menu.
+Visual Studio provides access to a subset of the app management functions and configuration settings available in the [Azure portal](/rest/api/appservice/web-apps). In this section, you'll see what's available by using **Server Explorer**. To see the latest Azure integration features, try out **Cloud Explorer** also. You can open both windows from the **View** menu.
1. If you aren't already signed in to Azure in Visual Studio, right-click **Azure** and select Connect to **Microsoft Azure Subscription** in **Server Explorer**.
@@ -684,4 +684,4 @@ For more information about analyzing web server logs, see the following resource
The Microsoft TechNet website includes a [Using Failed Request Tracing](https://www.iis.net/learn/troubleshoot/using-failed-request-tracing) section, which may be helpful for understanding how to use these logs. However, this documentation focuses mainly on configuring failed request tracing in IIS, which you can't do in Azure App Service.
[GetStarted]: quickstart-dotnetcore.md?pivots=platform-windows
-[GetStartedWJ]: https://github.com/Azure/azure-webjobs-sdk/wiki
\ No newline at end of file
+[GetStartedWJ]: https://github.com/Azure/azure-webjobs-sdk/wiki
diff --git a/articles/app-service/tutorial-connect-msi-azure-database.md b/articles/app-service/tutorial-connect-msi-azure-database.md
index 361aead405183..5c808b55a97d9 100644
--- a/articles/app-service/tutorial-connect-msi-azure-database.md
+++ b/articles/app-service/tutorial-connect-msi-azure-database.md
@@ -13,11 +13,11 @@ ms.custom: "mvc, devx-track-azurecli"
[App Service](overview.md) provides a highly scalable, self-patching web hosting service in Azure. It also provides a [managed identity](overview-managed-identity.md) for your app, which is a turn-key solution for securing access to Azure databases, including:
- [Azure SQL Database](/azure/azure-sql/database/)
-- [Azure Database for MySQL](/azure/mysql/)
-- [Azure Database for PostgreSQL](/azure/postgresql/)
+- [Azure Database for MySQL](../mysql/index.yml)
+- [Azure Database for PostgreSQL](../postgresql/index.yml)
> [!NOTE]
-> This tutorial doesn't include guidance for [Azure Cosmos DB](/azure/cosmos-db/), which supports Azure Active Directory authentication differently. For information, see Cosmos DB documentation. For example: [Use system-assigned managed identities to access Azure Cosmos DB data](../cosmos-db/managed-identity-based-authentication.md).
+> This tutorial doesn't include guidance for [Azure Cosmos DB](../cosmos-db/index.yml), which supports Azure Active Directory authentication differently. For information, see Cosmos DB documentation. For example: [Use system-assigned managed identities to access Azure Cosmos DB data](../cosmos-db/managed-identity-based-authentication.md).
Managed identities in App Service make your app more secure by eliminating secrets from your app, such as credentials in the connection strings. This tutorial shows you how to connect to the above-mentioned databases from App Service using managed identities.
@@ -54,7 +54,7 @@ First, enable Azure Active Directory authentication to the Azure database by ass
1. If your Azure AD tenant doesn't have a user yet, create one by following the steps at [Add or delete users using Azure Active Directory](../active-directory/fundamentals/add-users-azure-active-directory.md).
-1. Find the object ID of the Azure AD user using the [`az ad user list`](/cli/azure/ad/user#az_ad_user_list) and replace *\*. The result is saved to a variable.
+1. Find the object ID of the Azure AD user using the [`az ad user list`](/cli/azure/ad/user#az-ad-user-list) and replace *\*. The result is saved to a variable.
```azurecli-interactive
azureaduser=$(az ad user list --filter "userPrincipalName eq ''" --query [].objectId --output tsv)
@@ -62,7 +62,7 @@ First, enable Azure Active Directory authentication to the Azure database by ass
# [Azure SQL Database](#tab/sqldatabase)
-3. Add this Azure AD user as an Active Directory administrator using [`az sql server ad-admin create`](/cli/azure/sql/server/ad-admin#az_sql_server_ad_admin_create) command in the Cloud Shell. In the following command, replace *\* and *\* with your own parameters.
+3. Add this Azure AD user as an Active Directory administrator using [`az sql server ad-admin create`](/cli/azure/sql/server/ad-admin#az-sql-server-ad-admin-create) command in the Cloud Shell. In the following command, replace *\* and *\* with your own parameters.
```azurecli-interactive
az sql server ad-admin create --resource-group --server-name --display-name ADMIN --object-id $azureaduser
@@ -72,7 +72,7 @@ First, enable Azure Active Directory authentication to the Azure database by ass
# [Azure Database for MySQL](#tab/mysql)
-3. Add this Azure AD user as an Active Directory administrator using [`az mysql server ad-admin create`](/cli/azure/mysql/server/ad-admin#az_mysql_server_ad_admin_create) command in the Cloud Shell. In the following command, replace *\* and *\* with your own parameters.
+3. Add this Azure AD user as an Active Directory administrator using [`az mysql server ad-admin create`](/cli/azure/mysql/server/ad-admin#az-mysql-server-ad-admin-create) command in the Cloud Shell. In the following command, replace *\* and *\* with your own parameters.
```azurecli-interactive
az mysql server ad-admin create --resource-group --server-name --display-name --object-id $azureaduser
@@ -83,7 +83,7 @@ First, enable Azure Active Directory authentication to the Azure database by ass
# [Azure Database for PostgreSQL](#tab/postgresql)
-3. Add this Azure AD user as an Active Directory administrator using [`az postgres server ad-admin create`](/cli/azure/postgres/server/ad-admin#az_postgres_server_ad_admin_create) command in the Cloud Shell. In the following command, replace *\* and *\* with your own parameters.
+3. Add this Azure AD user as an Active Directory administrator using [`az postgres server ad-admin create`](/cli/azure/postgres/server/ad-admin#az-postgres-server-ad-admin-create) command in the Cloud Shell. In the following command, replace *\* and *\* with your own parameters.
```azurecli-interactive
az postgres server ad-admin create --resource-group --server-name --display-name --object-id $azureaduser
@@ -98,7 +98,7 @@ First, enable Azure Active Directory authentication to the Azure database by ass
Next, you configure your App Service app to connect to SQL Database with a managed identity.
-1. Enable a managed identity for your App Service app with the [az webapp identity assign](/cli/azure/webapp/identity#az_webapp_identity_assign) command in the Cloud Shell. In the following command, replace *\*.
+1. Enable a managed identity for your App Service app with the [az webapp identity assign](/cli/azure/webapp/identity#az-webapp-identity-assign) command in the Cloud Shell. In the following command, replace *\*.
# [System-assigned identity](#tab/systemassigned/sqldatabase)
@@ -741,7 +741,7 @@ For Azure Database for MySQL and Azure Database for PostgreSQL, the database use
The `if` statement sets the MySQL username based on which identity the token applies to. The token is then passed in to the [standard MySQL connection](../mysql/connect-python.md) as the password of the Azure identity.
- The `LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN` environment variable enables the [Cleartext plugin](https://dev.mysql.com/doc/refman/8.0/cleartext-pluggable-authentication.html) in the MySQL Connector (see [Use Azure Active Directory for authentication with MySQL](../mysql/howto-configure-sign-in-azure-ad-authentication.md#compatibility-with-application-drivers)).
+ The `LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN` environment variable enables the [Cleartext plugin](https://dev.mysql.com/doc/refman/8.0/en/cleartext-pluggable-authentication.html) in the MySQL Connector (see [Use Azure Active Directory for authentication with MySQL](../mysql/howto-configure-sign-in-azure-ad-authentication.md#compatibility-with-application-drivers)).
# [Azure Database for PostgreSQL](#tab/postgresql)
diff --git a/articles/app-service/tutorial-connect-msi-sql-database.md b/articles/app-service/tutorial-connect-msi-sql-database.md
index 755462b8a8fed..052ec53770fcd 100644
--- a/articles/app-service/tutorial-connect-msi-sql-database.md
+++ b/articles/app-service/tutorial-connect-msi-sql-database.md
@@ -144,10 +144,9 @@ The steps you follow for your project depends on whether you're using [Entity Fr
1. In Visual Studio, open the Package Manager Console and add the NuGet package [Azure.Identity](https://www.nuget.org/packages/Azure.Identity) and update Entity Framework:
```powershell
- Install-Package Azure.Identity -Version 1.5.0
+ Install-Package Azure.Identity
Update-Package EntityFramework
```
-
1. In your DbContext object (in *Models/MyDbContext.cs*), add the following code to the default constructor.
```csharp
diff --git a/articles/app-service/tutorial-dotnetcore-sqldb-app.md b/articles/app-service/tutorial-dotnetcore-sqldb-app.md
index f6a01c40cceb2..7bd08b1e449b8 100644
--- a/articles/app-service/tutorial-dotnetcore-sqldb-app.md
+++ b/articles/app-service/tutorial-dotnetcore-sqldb-app.md
@@ -2,7 +2,7 @@
title: Deploy an ASP.NET Core and Azure SQL Database app to Azure App Service
description: Learn how to deploy an ASP.NET Core web app to Azure App Service and connect to an Azure SQL Database.
ms.topic: tutorial
-ms.date: 03/02/2022
+ms.date: 06/01/2022
author: alexwolfmsft
ms.author: alexwolf
ms.devlang: csharp
@@ -96,7 +96,6 @@ Sign in to the [Azure portal](https://portal.azure.com/) and follow these steps
| [!INCLUDE [Create database step 1](<./includes/tutorial-dotnetcore-sqldb-app/azure-portal-sql-db-create-01.md>)] | :::image type="content" source="./media/tutorial-dotnetcore-sqldb-app/azure-portal-create-sql-01-240px.png" alt-text="A screenshot showing how to use the search box in the top tool bar to find Azure SQL in Azure." lightbox="./media/tutorial-dotnetcore-sqldb-app/azure-portal-create-sql-01.png"::: |
| [!INCLUDE [Create database step 2](<./includes/tutorial-dotnetcore-sqldb-app/azure-portal-sql-db-create-02.md>)] | :::image type="content" source="./media/tutorial-dotnetcore-sqldb-app/azure-portal-create-sql-02-240px.png" alt-text="A screenshot showing the create button on the SQL Servers page used to create a new database server." lightbox="./media/tutorial-dotnetcore-sqldb-app/azure-portal-create-sql-02.png"::: |
| [!INCLUDE [Create database step 3](<./includes/tutorial-dotnetcore-sqldb-app/azure-portal-sql-db-create-03.md>)] | :::image type="content" source="./media/tutorial-dotnetcore-sqldb-app/azure-portal-create-sql-03-240px.png" alt-text="A screenshot showing the form to fill out to create a SQL Server in Azure." lightbox="./media/tutorial-dotnetcore-sqldb-app/azure-portal-create-sql-03.png"::: |
-| [!INCLUDE [Create database step 4](<./includes/tutorial-dotnetcore-sqldb-app/azure-portal-sql-db-create-04.md>)] | :::image type="content" source="./media/tutorial-dotnetcore-sqldb-app/azure-portal-create-sql-04-240px.png" alt-text="A screenshot showing the form used to allow other Azure services to connect to the database." lightbox="./media/tutorial-dotnetcore-sqldb-app/azure-portal-create-sql-04.png"::: |
| [!INCLUDE [Create database step 5](<./includes/tutorial-dotnetcore-sqldb-app/azure-portal-sql-db-create-05.md>)] | :::image type="content" source="./media/tutorial-dotnetcore-sqldb-app/azure-portal-create-sql-05-240px.png" alt-text="A screenshot showing how to use the search box to find the SQL databases item in Azure." lightbox="./media/tutorial-dotnetcore-sqldb-app/azure-portal-create-sql-05.png"::: |
| [!INCLUDE [Create database step 6](<./includes/tutorial-dotnetcore-sqldb-app/azure-portal-sql-db-create-06.md>)] | :::image type="content" source="./media/tutorial-dotnetcore-sqldb-app/azure-portal-create-sql-06-240px.png" alt-text="A screenshot showing the create button in on the SQL databases page." lightbox="./media/tutorial-dotnetcore-sqldb-app/azure-portal-create-sql-06.png"::: |
| [!INCLUDE [Create database step 7](<./includes/tutorial-dotnetcore-sqldb-app/azure-portal-sql-db-create-07.md>)] | :::image type="content" source="./media/tutorial-dotnetcore-sqldb-app/azure-portal-create-sql-07-240px.png" alt-text="A screenshot showing the form to fill out to create a new SQL database in Azure." lightbox="./media/tutorial-dotnetcore-sqldb-app/azure-portal-create-sql-07.png"::: |
@@ -125,17 +124,6 @@ az sql db create \
--name coreDb
```
-We also need to add the following firewall rule to our database server to allow other Azure resources to connect to it.
-
-```azurecli-interactive
-az sql server firewall-rule create \
- --resource-group msdocs-core-sql \
- --server \
- --name AzureAccess \
- --start-ip-address 0.0.0.0 \
- --end-ip-address 0.0.0.0
-```
-
---
## 4 - Deploy to the App Service
@@ -167,7 +155,7 @@ We're now ready to deploy our .NET app to the App Service.
## 5 - Connect the App to the Database
-Next, we must connect the App hosted in our App Service to our database using a Connection String.
+Next, we must connect the App hosted in our App Service to our database using a Connection String. You can use [Service Connector](../service-connector/overview.md) to create the connection.
### [Azure portal](#tab/azure-portal)
@@ -175,42 +163,44 @@ Sign in to the [Azure portal](https://portal.azure.com/) and follow the steps to
| Instructions | Screenshot |
|:----------------|-----------:|
-| [!INCLUDE [Connect Service step 1](<./includes/tutorial-dotnetcore-sqldb-app/azure-portal-connect-database-01.md>)] | :::image type="content" source="./media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-01-240px.png" alt-text="A screenshot showing how to locate the database used by the App in the Azure portal." lightbox="./media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-01.png"::: |
-| [!INCLUDE [Connect Service step 2](<./includes/tutorial-dotnetcore-sqldb-app/azure-portal-connect-database-02.md>)] | :::image type="content" source="./media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-02-240px.png" alt-text="A screenshot showing how to get the connection string used to connect to the database from the Azure portal." lightbox="./media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-02.png"::: |
-| [!INCLUDE [Connect Service step 3](<./includes/tutorial-dotnetcore-sqldb-app/azure-portal-connect-database-03.md>)] | :::image type="content" source="./media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-03-240px.png" alt-text="A screenshot showing how to use the search box to find the App Service instance for the app in the Azure portal." lightbox="./media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-03.png"::: |
-| [!INCLUDE [Connect Service step 4](<./includes/tutorial-dotnetcore-sqldb-app/azure-portal-connect-database-04.md>)] | :::image type="content" source="./media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-04-240px.png" alt-text="A screenshot showing how to enter the connection string as an app setting for the web app in the Azure portal." lightbox="./media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-04.png"::: |
+| [!INCLUDE [Connect Service step 1](<./includes/tutorial-dotnetcore-sqldb-app/azure-portal-connect-database-01.md>)] | :::image type="content" source="./media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-01-240px.png" alt-text="A screenshot showing how to locate the app service in the Azure portal." lightbox="./media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-01.png"::: |
+| [!INCLUDE [Connect Service step 2](<./includes/tutorial-dotnetcore-sqldb-app/azure-portal-connect-database-02.md>)] | :::image type="content" source="./media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-02-240px.png" alt-text="A screenshot showing how to locate Service Connector from the Azure portal." lightbox="./media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-02.png"::: |
+| [!INCLUDE [Connect Service step 3](<./includes/tutorial-dotnetcore-sqldb-app/azure-portal-connect-database-03.md>)] | :::image type="content" source="./media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-03-240px.png" alt-text="A screenshot showing how to create a connection to the SQL database for the app in the Azure portal." lightbox="./media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-03.png"::: |
+| [!INCLUDE [Connect Service step 4](<./includes/tutorial-dotnetcore-sqldb-app/azure-portal-connect-database-04.md>)] | :::image type="content" source="./media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-04-240px.png" alt-text="A screenshot showing how to enter username and password of SQL Database during service connection in the Azure portal." lightbox="./media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-04.png"::: |
+| [!INCLUDE [Connect Service step 5](<./includes/tutorial-dotnetcore-sqldb-app/azure-portal-connect-database-05.md>)] | :::image type="content" source="./media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-05-240px.png" alt-text="A screenshot showing how to review and create the connection in the Azure portal." lightbox="./media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-05.png"::: |
+| [!INCLUDE [Connect Service step 6](<./includes/tutorial-dotnetcore-sqldb-app/azure-portal-connect-database-06.md>)] | :::image type="content" source="./media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-06-240px.png" alt-text="A screenshot showing how to get the connection string for a service connector in the Azure portal." lightbox="./media/tutorial-dotnetcore-sqldb-app/azure-portal-connect-sql-db-06.png"::: |
### [Azure CLI](#tab/azure-cli)
-Run Azure CLI commands in the [Azure Cloud Shell](https://shell.azure.com) or on a workstation with the [Azure CLI installed](/cli/azure/install-azure-cli).
-
-We can retrieve the Connection String for our database using the [az sql db show-connection-string](/cli/azure/sql/db#az-sql-db-show-connection-string) command. This command allows us to add the Connection String to our App Service configuration settings. Copy this Connection String value for later use.
+Configure the connection between your app and the SQL database by using the [az webapp connection create sql](/cli/azure/webapp/connection/create#az-webapp-connection-create-sql) command.
```azurecli-interactive
-az sql db show-connection-string \
- --client ado.net \
- --name coreDb \
- --server
+az webapp connection create sql \
+ --resource-group msdocs-core-sql \
+ --name \
+ --target-resource-group msdocs-core-sql \
+ --server \
+ --database coreDB \
+ --query configurations
```
-Next, let's assign the Connection String to our App Service using the command below. `MyDbConnection` is the name of the Connection String in our appsettings.json file, which means it gets loaded by our app during startup.
+When prompted, provide the administrator username and password for the SQL database.
-Replace the username and password in the connection string with your own before running the command.
+> [!NOTE]
+> The CLI command does everything the app needs to successfully connect to the database, including:
+>
+> - In your App Service app, adds a connection string with the name `AZURE_SQL_CONNECTIONSTRING`, which your code can use for its database connection. If the connection string is already in use, `AZURE_SQL__CONNECTIONSTRING` is used for the name instead.
+> - In your SQL database server, allows Azure services to access the SQL database server.
-```azurecli-interactive
-az webapp config connection-string set \
- -g msdocs-core-sql \
- -n \
- -t SQLServer \
- --settings MyDbConnection=
+Copy this connection string value from the output for later.
-```
+To see the entirety of the command output, drop the `--query` in the command.
---
## 6 - Generate the Database Schema
-To generate our database schema, we need to set up a firewall rule on our Database Server. This rule allows our local computer to connect to Azure. For this step, you'll need to know your local computer's IP address. For more information about how to find the IP address, [see here](https://whatismyipaddress.com/).
+To generate our database schema, set up a firewall rule on the SQL database server. This rule lets your local computer connect to Azure. For this step, you'll need to know your local computer's IP address. For more information about how to find the IP address, [see here](https://whatismyipaddress.com/).
### [Azure portal](#tab/azure-portal)
@@ -231,17 +221,17 @@ az sql server firewall-rule create --resource-group msdocs-core-sql --server .database.windows.net,1433;
- Initial Catalog=coredb;
- Persist Security Info=False;
- User ID=;Password=;
- Encrypt=True;
- TrustServerCertificate=False;"
- }
+"AZURE_SQL_CONNECTIONSTRING": "Data Source=.database.windows.net,1433;Initial Catalog=coreDb;User ID=;Password="
+```
+
+Next, update the *Startup.cs* file the sample project by updating the existing connection string name `MyDbConnection` to `AZURE_SQL_CONNECTIONSTRING`:
+
+```csharp
+services.AddDbContext(options =>
+ options.UseSqlServer(Configuration.GetConnectionString("AZURE_SQL_CONNECTIONSTRING")));
```
Finally, run the following commands to install the necessary CLI tools for Entity Framework Core. Create an initial database migration file and apply those changes to update the database:
@@ -254,7 +244,7 @@ dotnet ef database update
After the migration finishes, the correct schema is created.
-If you receive an error stating `Client with IP address xxx.xxx.xxx.xxx is not allowed to access the server`, that means the IP address you entered into your Azure firewall rule is incorrect. To fix this issue, update the Azure firewall rule with the IP address provided in the error message.
+If you receive the error `Client with IP address xxx.xxx.xxx.xxx is not allowed to access the server`, that means the IP address you entered into your Azure firewall rule is incorrect. To fix this issue, update the Azure firewall rule with the IP address provided in the error message.
## 7 - Browse the Deployed Application and File Directory
diff --git a/articles/app-service/webjobs-dotnet-deploy-vs.md b/articles/app-service/webjobs-dotnet-deploy-vs.md
index 42044702fe23c..0ef467ea0ffec 100644
--- a/articles/app-service/webjobs-dotnet-deploy-vs.md
+++ b/articles/app-service/webjobs-dotnet-deploy-vs.md
@@ -13,7 +13,7 @@ ms.reviewer: david.ebbo;suwatch;pbatum;naren.soni
# Develop and deploy WebJobs using Visual Studio
-This article explains how to use Visual Studio to deploy a console app project to a web app in [Azure App Service](overview.md) as an [Azure WebJob](/azure/app-service/webjobs-create). For information about how to deploy WebJobs by using the [Azure portal](https://portal.azure.com), see [Run background tasks with WebJobs in Azure App Service](webjobs-create.md).
+This article explains how to use Visual Studio to deploy a console app project to a web app in [Azure App Service](overview.md) as an [Azure WebJob](./webjobs-create.md). For information about how to deploy WebJobs by using the [Azure portal](https://portal.azure.com), see [Run background tasks with WebJobs in Azure App Service](webjobs-create.md).
You can choose to develop a WebJob that runs as either a [.NET Core app](#webjobs-as-net-core-console-apps) or a [.NET Framework app](#webjobs-as-net-framework-console-apps). Version 3.x of the [Azure WebJobs SDK](webjobs-sdk-how-to.md) lets you develop WebJobs that run as either .NET Core apps or .NET Framework apps, while version 2.x supports only the .NET Framework. The way that you deploy a WebJobs project is different for .NET Core projects than for .NET Framework projects.
@@ -51,7 +51,7 @@ Deploy a project as a WebJob by itself, or link it to a web project so that it a
### Prerequisites
-Install Visual Studio 2017 or Visual Studio 2019 with the [Azure development workload](/visualstudio/install/install-visual-studio#step-4---choose-workloads).
+Install Visual Studio 2022 with the [Azure development workload](/visualstudio/install/install-visual-studio#step-4---choose-workloads).
### Enable WebJobs deployment for an existing console app project
@@ -98,7 +98,7 @@ To create a new WebJobs-enabled project, use the console app project template an
Create a project that is configured to deploy automatically as a WebJob when you deploy a web project in the same solution. Use this option when you want to run your WebJob in the same web app in which you run the related web application.
> [!NOTE]
-> The WebJobs new-project template automatically installs NuGet packages and includes code in *Program.cs* for the [WebJobs SDK](/azure/app-service/webjobs-sdk-get-started). If you don't want to use the WebJobs SDK, remove or change the `host.RunAndBlock` statement in *Program.cs*.
+> The WebJobs new-project template automatically installs NuGet packages and includes code in *Program.cs* for the [WebJobs SDK](./webjobs-sdk-get-started.md). If you don't want to use the WebJobs SDK, remove or change the `host.RunAndBlock` statement in *Program.cs*.
>
>
@@ -228,7 +228,7 @@ If you enable **Always on** in Azure, you can use Visual Studio to change the We
1. In **Solution Explorer**, right-click the project and select **Publish**.
-1. In the **Publish** tab, choose **Edit**.
+1. In the **Settings** section, choose **Show all settings**.
1. In the **Profile settings** dialog box, choose **Continuous** for **WebJob Type**, and then choose **Save**.
@@ -239,4 +239,4 @@ If you enable **Always on** in Azure, you can use Visual Studio to change the We
## Next steps
> [!div class="nextstepaction"]
-> [Learn more about the WebJobs SDK](webjobs-sdk-how-to.md)
+> [Learn more about the WebJobs SDK](webjobs-sdk-how-to.md)
\ No newline at end of file
diff --git a/articles/app-service/webjobs-sdk-get-started.md b/articles/app-service/webjobs-sdk-get-started.md
index fc55d2d45cc75..fe446c548d78c 100644
--- a/articles/app-service/webjobs-sdk-get-started.md
+++ b/articles/app-service/webjobs-sdk-get-started.md
@@ -15,7 +15,7 @@ ms.topic: tutorial
Get started with the Azure WebJobs SDK for Azure App Service to enable your web apps to run background tasks, scheduled tasks, and respond to events.
-Use Visual Studio 2019 to create a .NET core console app that uses the WebJobs SDK to respond to Azure Storage Queue messages, run the project locally, and finally deploy it to Azure.
+Use Visual Studio 2022 to create a .NET Core console app that uses the WebJobs SDK to respond to Azure Storage Queue messages, run the project locally, and finally deploy it to Azure.
In this tutorial, you will learn how to:
@@ -29,15 +29,15 @@ In this tutorial, you will learn how to:
## Prerequisites
-* Visual Studio 2019 with the **Azure development** workload. [Install Visual Studio 2019](/visualstudio/install/).
+* Visual Studio 2022 with the **Azure development** workload. [Install Visual Studio 2022](/visualstudio/install/).
* An Azure account with an active subscription. [Create an account for free](https://azure.microsoft.com/free/dotnet).
## Create a console app
-In this section, you start by creating a project in Visual Studio 2019. Next, you'll add tools for Azure development, code publishing, and functions that listen for triggers and call functions. Last, you'll set up console logging that disables a legacy monitoring tool and enables a console provider with default filtering.
+In this section, you start by creating a project in Visual Studio 2022. Next, you'll add tools for Azure development, code publishing, and functions that listen for triggers and call functions. Last, you'll set up console logging that disables a legacy monitoring tool and enables a console provider with default filtering.
>[!NOTE]
->The procedures in this article are verified for creating a .NET Core console app that runs on .NET Core 3.1.
+>The procedures in this article are verified for creating a .NET Core console app that runs on .NET 6.0.
### Create a project
@@ -47,22 +47,22 @@ In this section, you start by creating a project in Visual Studio 2019. Next, yo
1. Under **Configure your new project**, name the project *WebJobsSDKSample*, and then select **Next**.
-1. Choose your **Target framework** and select **Create**. This tutorial has been verified using .NET Core 3.1.
+1. Choose your **Target framework** and select **Create**. This tutorial has been verified using .NET 6.0.
### Install WebJobs NuGet packages
Install the latest WebJobs NuGet package. This package includes Microsoft.Azure.WebJobs (WebJobs SDK), which lets you publish your function code to WebJobs in Azure App Service.
-1. Get the latest stable 3.x version of the [Microsoft.Azure.WebJobs.Extensions NuGet package](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions/).
+1. Get the latest stable 4.x version of the [Microsoft.Azure.WebJobs.Extensions NuGet package](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions/).
2. In Visual Studio, go to **Tools** > **NuGet Package Manager**.
3. Select **Package Manager Console**. You'll see a list of NuGet cmdlets, a link to documentation, and a `PM>` entry point.
-4. In the following command, replace `<3_X_VERSION>` with the current version number you found in step 1.
+4. In the following command, replace `<4_X_VERSION>` with the current version number you found in step 1.
```powershell
- Install-Package Microsoft.Azure.WebJobs.Extensions -version <3_X_VERSION>
+ Install-Package Microsoft.Azure.WebJobs.Extensions -version <4_X_VERSION>
```
5. In the **Package Manager Console**, execute the command. The extension list appears and automatically installs.
@@ -70,27 +70,33 @@ Install the latest WebJobs NuGet package. This package includes Microsoft.Azure.
The host is the runtime container for functions that listens for triggers and calls functions. The following steps create a host that implements [`IHost`](/dotnet/api/microsoft.extensions.hosting.ihost), which is the Generic Host in ASP.NET Core.
-1. Select the **Program.cs** tab and add these `using` statements:
+1. Select the **Program.cs** tab, remove the existing contents, and add these `using` statements:
```cs
using System.Threading.Tasks;
using Microsoft.Extensions.Hosting;
```
-1. Also under **Program.cs**, replace the `Main` method with the following code:
+1. Also under **Program.cs**, add the following code:
```cs
- static async Task Main()
+ namespace WebJobsSDKSample
{
- var builder = new HostBuilder();
- builder.ConfigureWebJobs(b =>
+ class Program
+ {
+ static async Task Main()
+ {
+ var builder = new HostBuilder();
+ builder.ConfigureWebJobs(b =>
{
b.AddAzureStorageCoreServices();
});
- var host = builder.Build();
- using (host)
- {
- await host.RunAsync();
+ var host = builder.Build();
+ using (host)
+ {
+ await host.RunAsync();
+ }
+ }
}
}
```
@@ -103,10 +109,10 @@ Set up console logging that uses the [ASP.NET Core logging framework](/aspnet/co
1. Get the latest stable version of the [`Microsoft.Extensions.Logging.Console` NuGet package](https://www.nuget.org/packages/Microsoft.Extensions.Logging.Console/), which includes `Microsoft.Extensions.Logging`.
-2. In the following command, replace `<3_X_VERSION>` with the current version number you found in step 1. Each type of NuGet Package has a unique version number.
+2. In the following command, replace `<6_X_VERSION>` with the current version number you found in step 1. Each type of NuGet Package has a unique version number.
```powershell
- Install-Package Microsoft.Extensions.Logging.Console -version <3_X_VERSION>
+ Install-Package Microsoft.Extensions.Logging.Console -version <6_X_VERSION>
```
3. In the **Package Manager Console**, fill in the current version number and execute the command. The extension list appears and automatically installs.
@@ -166,22 +172,22 @@ Starting with version 3 of the WebJobs SDK, to connect to Azure Storage services
>[!NOTE]
> Beginning with 5.x, Microsoft.Azure.WebJobs.Extensions.Storage has been [split by storage service](https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage/CHANGELOG.md#major-changes-and-features) and has migrated the `AddAzureStorage()` extension method by service type.
-1. Get the latest stable version of the [Microsoft.Azure.WebJobs.Extensions.Storage](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.Storage) NuGet package, version 3.x.
+1. Get the latest stable version of the [Microsoft.Azure.WebJobs.Extensions.Storage](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.Storage) NuGet package, version 5.x.
-1. In the following command, replace `<3_X_VERSION>` with the current version number you found in step 1. Each type of NuGet Package has a unique version number.
+1. In the following command, replace `<5_X_VERSION>` with the current version number you found in step 1. Each type of NuGet Package has a unique version number.
```powershell
- Install-Package Microsoft.Azure.WebJobs.Extensions.Storage -Version <3_X_VERSION>
+ Install-Package Microsoft.Azure.WebJobs.Extensions.Storage -Version <5_X_VERSION>
```
1. In the **Package Manager Console**, execute the command with the current version number at the `PM>` entry point.
-1. Continuing in **Program.cs**, in the `ConfigureWebJobs` extension method, add the `AddAzureStorage` method on the [`HostBuilder`](/dotnet/api/microsoft.extensions.hosting.hostbuilder) instance (before the `Build` command) to initialize the Storage extension. At this point, the `ConfigureWebJobs` method looks like this:
+1. Continuing in **Program.cs**, in the `ConfigureWebJobs` extension method, add the `AddAzureStorageQueues` method on the [`HostBuilder`](/dotnet/api/microsoft.extensions.hosting.hostbuilder) instance (before the `Build` command) to initialize the Storage extension. At this point, the `ConfigureWebJobs` method looks like this:
```cs
builder.ConfigureWebJobs(b =>
{
b.AddAzureStorageCoreServices();
- b.AddAzureStorage();
+ b.AddAzureStorageQueues();
});
```
1. Add the following code in the `Main` method after the `builder` is instantiated:
@@ -206,7 +212,7 @@ Starting with version 3 of the WebJobs SDK, to connect to Azure Storage services
builder.ConfigureWebJobs(b =>
{
b.AddAzureStorageCoreServices();
- b.AddAzureStorage();
+ b.AddAzureStorageQueues();
});
var host = builder.Build();
using (host)
@@ -285,37 +291,29 @@ Because this file contains a connection string secret, you shouldn't store the f
Build and run the project locally and create a message queue to trigger the function.
-1. In **Cloud Explorer** in Visual Studio, expand the node for your new storage account, and then right-click **Queues**.
-
-1. Select **Create Queue**.
-
-1. Enter *queue* as the name for the queue, and then select **OK**.
-
- ![Screenshot that shows where you create the queue and name it "queue". ](./media/webjobs-sdk-get-started/create-queue.png)
-
-1. Right-click the node for the new queue, and then select **Open**.
+1. In the Azure portal, navigate to your storage account and select the **Queues** tab (1). Select **+ Queue** (2) and enter **queue** as the Queue name (3). Then, select **OK** (4).
-1. Select the **Add Message** icon.
+ ![This image shows how to create a new Azure Storage Queue.](./media/webjobs-sdk-get-started/create-queue-azure-storage.png "New Azure Storage Queue")
- ![Screenshot that highlights the Add Message icon.](./media/webjobs-sdk-get-started/create-queue-message.png)
+2. Click the new queue and select **Add message**.
-1. In the **Add Message** dialog, enter *Hello World!* as the **Message text**, and then select **OK**. There is now a message in the queue.
+3. In the **Add Message** dialog, enter *Hello World!* as the **Message text**, and then select **OK**. There is now a message in the queue.
![Create queue](./media/webjobs-sdk-get-started/hello-world-text.png)
-1. Press **Ctrl+F5** to run the project.
+4. Press **Ctrl+F5** to run the project.
The console shows that the runtime found your function. Because you used the `QueueTrigger` attribute in the `ProcessQueueMessage` function, the WebJobs runtime listens for messages in the queue named `queue`. When it finds a new message in this queue, the runtime calls the function, passing in the message string value.
-1. Go back to the **Queue** window and refresh it. The message is gone, since it has been processed by your function running locally.
+5. Go back to the **Queue** window and refresh it. The message is gone, since it has been processed by your function running locally.
-1. Close the console window.
+6. Close the console window.
It's now time to publish your WebJobs SDK project to Azure.
## Deploy to Azure
-During deployment, you create an app service instance where you'll run your functions. When you publish a .NET Core console app to App Service in Azure, it automatically runs as a WebJob. To learn more about publishing, see [Develop and deploy WebJobs using Visual Studio](webjobs-dotnet-deploy-vs.md).
+During deployment, you create an app service instance where you'll run your functions. When you publish a .NET console app to App Service in Azure, it automatically runs as a WebJob. To learn more about publishing, see [Develop and deploy WebJobs using Visual Studio](webjobs-dotnet-deploy-vs.md).
### Create Azure resources
@@ -333,9 +331,12 @@ For a continuous WebJob, you should enable the Always on setting in the site so
With the web app created in Azure, it's time to publish the WebJobs project.
-1. In the **Publish** page under **Hosting**, select the edit button and change the **WebJob Type** to `Continuous` and select **Save**. This makes sure that the WebJob is running when messages are added to the queue. Triggered WebJobs are typically used only for manual webhooks.
+1. In the **Publish** page under **Hosting**, select the edit button and change the **WebJob Type** to `Continuous` and select **Save**. This makes sure that the WebJob is running when messages are added to the queue. Triggered WebJobs are typically used only for manual webhooks.
-1. Select the **Publish** button at the top right corner of the **Publish** page. When the operation completes, your WebJob is running on Azure.
+ ![Change WebJob type from the VS 2022 Publish window.](./media/webjobs-sdk-get-started/change-webjob-type.png)
+
+
+2. Select the **Publish** button at the top right corner of the **Publish** page. When the operation completes, your WebJob is running on Azure.
### Create a storage connection app setting
@@ -436,7 +437,7 @@ This initializes the Application Insights logging provider with default [filteri
1. In **Solution Explorer**, right-click the project and select **Publish**.
-1. As before, use **Cloud Explorer** in Visual Studio to create a queue message like you did [earlier](#test-locally), except enter *Hello App Insights!* as the message text.
+1. As before, use the Azure portal to create a queue message like you did [earlier](#test-locally), except enter *Hello App Insights!* as the message text.
1. In your **Publish** profile page, select the three dots above **Hosting** to show **Hosting profile section actions** and choose **Open in Azure Portal**.
@@ -454,94 +455,72 @@ This initializes the Application Insights logging provider with default [filteri
Bindings simplify code that reads and writes data. Input bindings simplify code that reads data. Output bindings simplify code that writes data.
-### Add input binding
+### Add bindings
+
+Input bindings simplify code that reads data. For this example, the queue message is the name of a blob, which you'll use to find and read a blob in Azure Storage. You will then use output bindings to write a copy of the file to the same container.
+
+1. In **Functions.cs**, add a `using`:
-Input bindings simplify code that reads data. For this example, the queue message is the name of a blob, which you'll use to find and read a blob in Azure Storage.
+ ```cs
+ using System.IO;
+ ```
-1. In *Functions.cs*, replace the `ProcessQueueMessage` method with the following code:
+2. Replace the `ProcessQueueMessage` method with the following code:
```cs
public static void ProcessQueueMessage(
[QueueTrigger("queue")] string message,
[Blob("container/{queueTrigger}", FileAccess.Read)] Stream myBlob,
+ [Blob("container/copy-{queueTrigger}", FileAccess.Write)] Stream outputBlob,
ILogger logger)
{
logger.LogInformation($"Blob name:{message} \n Size: {myBlob.Length} bytes");
+ myBlob.CopyTo(outputBlob);
}
```
-
+
In this code, `queueTrigger` is a [binding expression](../azure-functions/functions-bindings-expressions-patterns.md), which means it resolves to a different value at runtime. At runtime, it has the contents of the queue message.
-1. Add a `using`:
+ This code uses output bindings to create a copy of the file identified by the queue message. The file copy is prefixed with *copy-*.
- ```cs
- using System.IO;
- ```
+3. In **Program.cs**, in the `ConfigureWebJobs` extension method, add the `AddAzureStorageBlobs` method on the [`HostBuilder`](/dotnet/api/microsoft.extensions.hosting.hostbuilder) instance (before the `Build` command) to initialize the Storage extension. At this point, the `ConfigureWebJobs` method looks like this:
+
+ ```cs
+ builder.ConfigureWebJobs(b =>
+ {
+ b.AddAzureStorageCoreServices();
+ b.AddAzureStorageQueues();
+ b.AddAzureStorageBlobs();
+ });
+ ```
-1. Create a blob container in your storage account.
+4. Create a blob container in your storage account.
- a. In **Cloud Explorer** in Visual Studio, expand the node for your storage account, right-click **Blobs**, and then select **Create Blob Container**.
+ a. In the Azure portal, navigate to the **Containers** tab below **Data storage** and select **+ Container**
- b. In the **Create Blob Container** dialog, enter *container* as the container name, and then select **OK**.
+ b. In the **New container** dialog, enter *container* as the container name, and then select **Create**.
-1. Upload the *Program.cs* file to the blob container. (This file is used here as an example; you could upload any text file and create a queue message with the file's name.)
+5. Upload the *Program.cs* file to the blob container. (This file is used here as an example; you could upload any text file and create a queue message with the file's name.)
- a. In **Cloud Explorer**, double-click the node for the container you created.
+ a. Select the new container you created
- b. In the **Container** window, select the **Upload** button.
+ b. Select the **Upload** button.
![Blob upload button](./media/webjobs-sdk-get-started/blob-upload-button.png)
c. Find and select *Program.cs*, and then select **OK**.
-1. Create a queue message in the queue you created earlier, with *Program.cs* as the text of the message.
-
- ![Queue message Program.cs](./media/webjobs-sdk-get-started/queue-msg-program-cs.png)
-
-1. Run the project locally.
-
- The queue message triggers the function, which then reads the blob and logs its length. The console output looks like this:
-
- ```console
- Found the following functions:
- ConsoleApp1.Functions.ProcessQueueMessage
- Job host started
- Executing 'Functions.ProcessQueueMessage' (Reason='New queue message detected on 'queue'.', Id=5a2ac479-de13-4f41-aae9-1361f291ff88)
- Blob name:Program.cs
- Size: 532 bytes
- Executed 'Functions.ProcessQueueMessage' (Succeeded, Id=5a2ac479-de13-4f41-aae9-1361f291ff88)
- ```
-### Add an output binding
-
-Output bindings simplify code that writes data. This example modifies the previous one by writing a copy of the blob instead of logging its size. Blob storage bindings are included in the Azure Storage extension package that we installed previously.
-
-1. Replace the `ProcessQueueMessage` method with the following code:
-
- ```cs
- public static void ProcessQueueMessage(
- [QueueTrigger("queue")] string message,
- [Blob("container/{queueTrigger}", FileAccess.Read)] Stream myBlob,
- [Blob("container/copy-{queueTrigger}", FileAccess.Write)] Stream outputBlob,
- ILogger logger)
- {
- logger.LogInformation($"Blob name:{message} \n Size: {myBlob.Length} bytes");
- myBlob.CopyTo(outputBlob);
- }
- ```
-
-1. Create another queue message with *Program.cs* as the text of the message.
-
-1. Run the project locally.
-
- The queue message triggers the function, which then reads the blob, logs its length, and creates a new blob. The console output is the same, but when you go to the blob container window and select **Refresh**, you see a new blob named *copy-Program.cs.*
-
### Republish the project
1. In **Solution Explorer**, right-click the project and select **Publish**.
1. In the **Publish** dialog, make sure that the current profile is selected and then select **Publish**. Results of the publish are detailed in the **Output** window.
-1. Verify the function in Azure by again uploading a file to the blob container and adding a message to the queue that is the name of the uploaded file. You see the message get removed from the queue and a copy of the file created in the blob container.
+1. Create a queue message in the queue you created earlier, with *Program.cs* as the text of the message.
+
+ ![Queue message Program.cs](./media/webjobs-sdk-get-started/queue-msg-program-cs.png)
+
+1. A copy of the file, *copy-Program.cs*, will appear in the blob container.
## Next steps
diff --git a/articles/application-gateway/application-gateway-key-vault-common-errors.md b/articles/application-gateway/application-gateway-key-vault-common-errors.md
index b6c6400143888..2de9e78be4651 100644
--- a/articles/application-gateway/application-gateway-key-vault-common-errors.md
+++ b/articles/application-gateway/application-gateway-key-vault-common-errors.md
@@ -12,16 +12,16 @@ ms.author: jaysoni
# Common key vault errors in Azure Application Gateway
-Application Gateway enables customers to securely store TLS certificates in Azure Key Vault. When using a Key Vault resource, it is important that the gateway always has access to the linked key vault. If your Application Gateway is unable to fetch the certificate, the associated HTTPS listeners will be placed in a disabled state. [Learn more](../application-gateway/disabled-listeners.md).
+Application Gateway enables customers to securely store TLS certificates in Azure Key Vault. When using a key vault resource, it is important that the gateway always has access to the linked key vault. If your Application Gateway is unable to fetch the certificate, the associated HTTPS listeners will be placed in a disabled state. [Learn more](../application-gateway/disabled-listeners.md).
-This article helps you understand the details of key vault error codes you might encounter, including what is causing these errors. This article also contains steps to resolve such misconfigurations.
+This article helps you understand the details of the error codes and the steps to resolve such key vault misconfigurations.
> [!TIP]
> Use a secret identifier that doesn't specify a version. This way, Azure Application Gateway will automatically rotate the certificate, if a newer version is available in Azure Key Vault. An example of a secret URI without a version is: `https://myvault.vault.azure.net/secrets/mysecret/`.
## List of error codes and their details
-The following sections cover various errors you might encounter. You can find the details in Azure Advisor, and use this troubleshooting article to fix the problems. For more information, see [Create Azure Advisor alerts on new recommendations by using the Azure portal](../advisor/advisor-alerts-portal.md).
+The following sections describe the various errors you might encounter. You can verify if your gateway has any such problem by visting [**Azure Advisor**](./key-vault-certs.md#investigating-and-resolving-key-vault-errors) for your account, and use this troubleshooting article to fix the problem. We recommend configuring Azure Advisor alerts to stay informed when a key vault problem is detected for your gateway.
> [!NOTE]
> Azure Application Gateway generates logs for key vault diagnostics every four hours. If the diagnostic continues to show the error after you have fixed the configuration, you might have to wait for the logs to be refreshed.
@@ -29,19 +29,37 @@ The following sections cover various errors you might encounter. You can find th
[comment]: # (Error Code 1)
### Error code: UserAssignedIdentityDoesNotHaveGetPermissionOnKeyVault
-**Description:** The associated user-assigned managed identity doesn't have the "Get" permission.
+**Description:** The associated user-assigned managed identity doesn't have the required permission.
-**Resolution:** Configure the access policy of Key Vault to grant the user-assigned managed identity this permission on secrets.
-1. Go to the linked key vault in the Azure portal.
-1. Open the **Access policies** pane.
-1. For **Permission model**, select **Vault access policy**.
-1. Under **Secret Management Operations**, select the **Get** permission.
-1. Select **Save**.
+**Resolution:** Configure the access policies of your key vault to grant the user-assigned managed identity permission on secrets. You may do so in any of the following ways:
+
+ **Vault access policy**
+ 1. Go to the linked key vault in the Azure portal.
+ 1. Open the **Access policies** blade.
+ 1. For **Permission model**, select **Vault access policy**.
+ 1. Under **Secret Management Operations**, select the **Get** permission.
+ 1. Select **Save**.
:::image type="content" source="./media/application-gateway-key-vault-common-errors/no-get-permssion-for-managed-identity.png " alt-text=" Screenshot that shows how to resolve the Get permission error.":::
For more information, see [Assign a Key Vault access policy by using the Azure portal](../key-vault/general/assign-access-policy-portal.md).
+ **Azure role-based access control**
+ 1. Go to the linked key vault in the Azure portal.
+ 1. Open the **Access policies** blade.
+ 1. For **Permission model**, select **Azure role-based access control**.
+ 1. After this, navigate to **Access Control (IAM)** blade to configure permissions.
+ 1. **Add role assignment** for your managed identity by choosing the following
+ a. **Role**: Key Vault Secrets User
+ b. **Assign access to**: Managed identity
+ c. **Members**: select the user-assigned managed identity which you've associated with your application gateway.
+ 1. Select **Review + assign**.
+
+For more information, see [Azure role-based access control in Key Vault](../key-vault/general/rbac-guide.md).
+
+> [!NOTE]
+> Portal support for adding a new key vault-based certificate is currently not available when using **Azure role-based access control**. You can accomplish it by using ARM template, CLI, or PowerShell. Visit [this page](./key-vault-certs.md#key-vault-azure-role-based-access-control-permission-model) for guidance.
+
[comment]: # (Error Code 2)
### Error code: SecretDisabled
@@ -74,12 +92,9 @@ On the other hand, if a certificate object is permanently deleted, you will need
**Description:** The associated user-assigned managed identity has been deleted.
-**Resolution:** To use the identity again:
-1. Re-create a managed identity with the same name that was used previously, and under the same resource group. Resource activity logs contain more details.
-1. After you create the identity, go to **Application Gateway - Access Control (IAM)**. Assign the identity the **Reader** role, at a minimum.
-1. Finally, go to the desired Key Vault resource, and set its access policies to grant **Get** secret permissions for this new managed identity.
-
-For more information, see [How integration works](./key-vault-certs.md#how-integration-works).
+**Resolution:** Create a new managed identity and use it with the key vault.
+1. Re-create a managed identity with the same name that was previously used, and under the same resource group. (**TIP**: Refer to resource Activity Logs for naming details).
+1. Go to the desired key vault resource, and set its access policies to grant this new managed identity the required permission. You can follow the same steps as mentioned under [UserAssignedIdentityDoesNotHaveGetPermissionOnKeyVault](./application-gateway-key-vault-common-errors.md#error-code-userassignedidentitydoesnothavegetpermissiononkeyvault).
[comment]: # (Error Code 5)
### Error code: KeyVaultHasRestrictedAccess
@@ -117,5 +132,6 @@ Select **Managed deleted vaults**. From here, you can find the deleted Key Vault
These troubleshooting articles might be helpful as you continue to use Application Gateway:
+- [Understanding and fixing disabled listeners](disabled-listeners.md)
- [Azure Application Gateway Resource Health overview](resource-health-overview.md)
-- [Troubleshoot Azure Application Gateway session affinity issues](how-to-troubleshoot-application-gateway-session-affinity-issues.md)
+
diff --git a/articles/application-gateway/application-gateway-websocket.md b/articles/application-gateway/application-gateway-websocket.md
index 29cc7e1024826..56d573e95a591 100644
--- a/articles/application-gateway/application-gateway-websocket.md
+++ b/articles/application-gateway/application-gateway-websocket.md
@@ -25,6 +25,9 @@ To establish a WebSocket connection, a specific HTTP-based handshake is exchange
![Diagram compares a client interacting with a web server, connecting twice to get two replies, with a WebSocket interaction, where a client connects to a server once to get multiple replies.](./media/application-gateway-websocket/websocket.png)
+> [!NOTE]
+> As described, the HTTP protocol is used only to perform a handshake when establishing a WebSocket connection. Once the handshake is completed, a WebSocket connection gets opened for transmitting the data, and the Web Application Firewall (WAF) cannot parse any contents. Therefore, WAF does not perform any inspections on such data.
+
### Listener configuration element
An existing HTTP listener can be used to support WebSocket traffic. The following is a snippet of an httpListeners element from a sample template file. You would need both HTTP and HTTPS listeners to support WebSocket and secure WebSocket traffic. Similarly you can use the portal or Azure PowerShell to create an application gateway with listeners on port 80/443 to support WebSocket traffic.
@@ -118,4 +121,4 @@ Another reason for this is that application gateway backend health probe support
## Next steps
-After learning about WebSocket support, go to [create an application gateway](quick-create-powershell.md) to get started with a WebSocket enabled web application.
\ No newline at end of file
+After learning about WebSocket support, go to [create an application gateway](quick-create-powershell.md) to get started with a WebSocket enabled web application.
diff --git a/articles/application-gateway/configuration-infrastructure.md b/articles/application-gateway/configuration-infrastructure.md
index ac73f013be498..8a8bd2f7e383b 100644
--- a/articles/application-gateway/configuration-infrastructure.md
+++ b/articles/application-gateway/configuration-infrastructure.md
@@ -15,7 +15,7 @@ The application gateway infrastructure includes the virtual network, subnets, ne
## Virtual network and dedicated subnet
-An application gateway is a dedicated deployment in your virtual network. Within your virtual network, a dedicated subnet is required for the application gateway. You can have multiple instances of a given application gateway deployment in a subnet. You can also deploy other application gateways in the subnet. But you can't deploy any other resource in the application gateway subnet. You can't mix Standard_v2 and Standard Azure Application Gateway on the same subnet.
+An application gateway is a dedicated deployment in your virtual network. Within your virtual network, a dedicated subnet is required for the application gateway. You can have multiple instances of a given application gateway deployment in a subnet. You can also deploy other application gateways in the subnet. But you can't deploy any other resource in the application gateway subnet. You can't mix v1 and v2 Azure Application Gateway SKUs on the same subnet.
> [!NOTE]
> [Virtual network service endpoint policies](../virtual-network/virtual-network-service-endpoint-policies-overview.md) are currently not supported in an Application Gateway subnet.
diff --git a/articles/application-gateway/http-response-codes.md b/articles/application-gateway/http-response-codes.md
index 9e4613fa0cf95..425cb3e069ba8 100644
--- a/articles/application-gateway/http-response-codes.md
+++ b/articles/application-gateway/http-response-codes.md
@@ -83,13 +83,13 @@ An HTTP 499 response is presented if a client request that is sent to applicatio
#### 500 – Internal Server Error
-Azure Application Gateway shouldn't exhibit 500 response codes. Please open a support request if you see this code, because this issue is an internal error to the service. For information on how to open a support case, see [Create an Azure support request](/azure/azure-portal/supportability/how-to-create-azure-support-request).
+Azure Application Gateway shouldn't exhibit 500 response codes. Please open a support request if you see this code, because this issue is an internal error to the service. For information on how to open a support case, see [Create an Azure support request](../azure-portal/supportability/how-to-create-azure-support-request.md).
#### 502 – Bad Gateway
HTTP 502 errors can have several root causes, for example:
- NSG, UDR, or custom DNS is blocking access to backend pool members.
-- Back-end VMs or instances of [virtual machine scale sets](/azure/virtual-machine-scale-sets/overview) aren't responding to the default health probe.
+- Back-end VMs or instances of [virtual machine scale sets](../virtual-machine-scale-sets/overview.md) aren't responding to the default health probe.
- Invalid or improper configuration of custom health probes.
- Azure Application Gateway's [back-end pool isn't configured or empty](application-gateway-troubleshooting-502.md#empty-backendaddresspool).
- None of the VMs or instances in [virtual machine scale set are healthy](application-gateway-troubleshooting-502.md#unhealthy-instances-in-backendaddresspool).
@@ -103,4 +103,4 @@ HTTP 504 errors are presented if a request is sent to application gateways using
## Next steps
-If the information in this article doesn't help to resolve the issue, [submit a support ticket](https://azure.microsoft.com/support/options/).
+If the information in this article doesn't help to resolve the issue, [submit a support ticket](https://azure.microsoft.com/support/options/).
\ No newline at end of file
diff --git a/articles/application-gateway/key-vault-certs.md b/articles/application-gateway/key-vault-certs.md
index a57e50ee7f8b5..0be672b86e06c 100644
--- a/articles/application-gateway/key-vault-certs.md
+++ b/articles/application-gateway/key-vault-certs.md
@@ -78,7 +78,7 @@ As of March 15, 2021, Key Vault recognizes Application Gateway as a trusted serv
When you're using a restricted Key Vault, use the following steps to configure Application Gateway to use firewalls and virtual networks:
> [!TIP]
-> The following steps are not required if your Key Vault has a Private Endpoint enabled. The application gateway can access the Key Vault using the private IP address.
+> Steps 1-3 are not required if your Key Vault has a Private Endpoint enabled. The application gateway can access the Key Vault using the private IP address.
1. In the Azure portal, in your Key Vault, select **Networking**.
1. On the **Firewalls and virtual networks** tab, select **Selected networks**.
diff --git a/articles/application-gateway/tutorial-ssl-cli.md b/articles/application-gateway/tutorial-ssl-cli.md
index 2929f5e7fa5e1..6a588f2352cfc 100644
--- a/articles/application-gateway/tutorial-ssl-cli.md
+++ b/articles/application-gateway/tutorial-ssl-cli.md
@@ -102,6 +102,7 @@ az network application-gateway create \
--frontend-port 443 \
--http-settings-port 80 \
--http-settings-protocol Http \
+ --priority "1" \
--public-ip-address myAGPublicIPAddress \
--cert-file appgwcert.pfx \
--cert-password "Azure123456!"
diff --git a/articles/applied-ai-services/form-recognizer/compose-custom-models-preview.md b/articles/applied-ai-services/form-recognizer/compose-custom-models-preview.md
index d10922ecc3df4..be52105a10d15 100644
--- a/articles/applied-ai-services/form-recognizer/compose-custom-models-preview.md
+++ b/articles/applied-ai-services/form-recognizer/compose-custom-models-preview.md
@@ -7,7 +7,7 @@ manager: nitinme
ms.service: applied-ai-services
ms.subservice: forms-recognizer
ms.topic: how-to
-ms.date: 02/15/2022
+ms.date: 06/06/2022
ms.author: lajanuar
recommendations: false
---
@@ -15,11 +15,11 @@ recommendations: false
# Compose custom models v3.0 | Preview
> [!NOTE]
-> This how-to guide references Form Recognizer v3.0 (preview). To use Form Recognizer v2.1 (GA), see [Compose custom models v2.1.](compose-custom-models.md).
+> This how-to guide references Form Recognizer v3.0 (preview). To use Form Recognizer v2.1 (GA), see [Compose custom models v2.1](compose-custom-models.md).
-A composed model is created by taking a collection of custom models and assigning them to a single model built from your form types. You can assign up to 100 trained custom models to a single composed model. When analyze documents with a composed model, Form Recognizer will first classify the form you submitted, then choose the best matching assigned model, and return results the results.
+A composed model is created by taking a collection of custom models and assigning them to a single model ID. You can assign up to 100 trained custom models to a single composed model ID. When a document is submitted to a composed model, the service performs a classification step to decide which custom model accurately represents the form presented for analysis. Composed models are useful when you've trained several models and want to group them to analyze similar form types. For example, your composed model might include custom models trained to analyze your supply, equipment, and furniture purchase orders. Instead of manually trying to select the appropriate model, you can use a composed model to determine the appropriate custom model for each analysis and extraction.
-To learn more, see [Composed custom models](concept-composed-models.md)
+To learn more, see [Composed custom models](concept-composed-models.md).
In this article, you'll learn how to create and use composed custom models to analyze your forms and documents.
@@ -27,7 +27,7 @@ In this article, you'll learn how to create and use composed custom models to an
To get started, you'll need the following resources:
-* **An Azure subscription**. You can [create a free Azure subscription](https://azure.microsoft.com/free/cognitive-services/)
+* **An Azure subscription**. You can [create a free Azure subscription](https://azure.microsoft.com/free/cognitive-services/).
* **A Form Recognizer instance**. Once you have your Azure subscription, [create a Form Recognizer resource](https://portal.azure.com/#create/Microsoft.CognitiveServicesFormRecognizer) in the Azure portal to get your key and endpoint. If you have an existing Form Recognizer resource, navigate directly to your resource page. You can use the free pricing tier (F0) to try the service, and upgrade later to a paid tier for production.
@@ -44,7 +44,7 @@ To get started, you'll need the following resources:
## Create your custom models
-First, you'll need to a set of custom models to compose. You can use the Form Recognizer Studio, REST API, or client-library SDKs. The steps are as follows:
+First, you'll need a set of custom models to compose. You can use the Form Recognizer Studio, REST API, or client-library SDKs. The steps are as follows:
* [**Assemble your training dataset**](#assemble-your-training-dataset)
* [**Upload your training set to Azure blob storage**](#upload-your-training-dataset)
@@ -74,13 +74,13 @@ If you want to use manually labeled data, you'll also have to upload the *.label
When you [train your model](https://formrecognizer.appliedai.azure.com/studio/custommodel/projects) with labeled data, the model uses supervised learning to extract values of interest, using the labeled forms you provide. Labeled data results in better-performing models and can produce models that work with complex forms or forms containing values without keys.
-Form Recognizer uses the [prebuilt-layout model](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v3-0-preview-2/operations/AnalyzeDocument) API to learn the expected sizes and positions of printed and handwritten text elements and extract tables. Then it uses user-specified labels to learn the key/value associations and tables in the documents. We recommend that you use five manually labeled forms of the same type (same structure) to get started with training a new model. Then, add more labeled data, as needed, to improve the model accuracy. Form Recognizer enables training a model to extract key-value pairs and tables using supervised learning capabilities.
+Form Recognizer uses the [prebuilt-layout model](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v3-0-preview-2/operations/AnalyzeDocument) API to learn the expected sizes and positions of typeface and handwritten text elements and extract tables. Then it uses user-specified labels to learn the key/value associations and tables in the documents. We recommend that you use five manually labeled forms of the same type (same structure) to get started with training a new model. Then, add more labeled data, as needed, to improve the model accuracy. Form Recognizer enables training a model to extract key-value pairs and tables using supervised learning capabilities.
### [Form Recognizer Studio](#tab/studio)
-To create custom models, you start with configuring your project:
+To create custom models, start with configuring your project:
-1. From the Studio home, select the [Custom form project](https://formrecognizer.appliedai.azure.com/studio/customform/projects) to open the Custom form home page.
+1. From the Studio homepage, select [**Create new**](https://formrecognizer.appliedai.azure.com/studio/custommodel/projects) from the Custom model card.
1. Use the ➕ **Create a project** command to start the new project configuration wizard.
@@ -100,7 +100,7 @@ See [Form Recognizer Studio: labeling as tables](quickstarts/try-v3-form-recogni
### [REST API](#tab/rest)
-Training with labels leads to better performance in some scenarios. To train with labels, you need to have special label information files (*\.pdf.labels.json*) in your blob storage container alongside the training documents.
+Training with labels leads to better performance in some scenarios. To train with labels, you need to have special label information files (*\.pdf.labels.json*) in your blob storage container alongside the training documents.
Label files contain key-value associations that a user has entered manually. They're needed for labeled data training, but not every source file needs to have a corresponding label file. Source files without labels will be treated as ordinary training documents. We recommend five or more labeled files for reliable training. You can use a UI tool like [Form Recognizer Studio](https://formrecognizer.appliedai.azure.com/studio/customform/projects) to generate these files.
@@ -115,7 +115,7 @@ Training with labels leads to better performance in some scenarios. To train wit
|Language |Method|
|--|--|
|**C#**|[**StartBuildModel**](/dotnet/api/azure.ai.formrecognizer.documentanalysis.documentmodeladministrationclient.startbuildmodel?view=azure-dotnet-preview#azure-ai-formrecognizer-documentanalysis-documentmodeladministrationclient-startbuildmodel&preserve-view=true)|
-|**Java**| [**beginBuildModel**](/java/api/com.azure.ai.formrecognizer.administration.documentmodeladministrationclient.beginbuildmodel?view=azure-java-preview&preserve-view=true)|
+|**Java**| [**beginBuildModel**](/java/api/com.azure.ai.formrecognizer.administration.documentmodeladministrationclient.beginbuildmodel?view=azure-java-preview&preserve-view=true)|
|**JavaScript** | [**beginBuildModel**](/javascript/api/@azure/ai-form-recognizer/documentmodeladministrationclient?view=azure-node-preview#@azure-ai-form-recognizer-documentmodeladministrationclient-beginbuildmodel&preserve-view=true)|
| **Python** | [**begin_build_model**](/python/api/azure-ai-formrecognizer/azure.ai.formrecognizer.aio.documentmodeladministrationclient?view=azure-python-preview#azure-ai-formrecognizer-aio-documentmodeladministrationclient-begin-build-model&preserve-view=true)
@@ -159,8 +159,6 @@ When you train models using the [**Form Recognizer Studio**](https://formrecogni
1. Once the model is ready, use the **Test** command to validate it with your test documents and observe the results.
-
-
#### Analyze documents
The custom model **Analyze** operation requires you to provide the `modelID` in the call to Form Recognizer. You should provide the composed model ID for the `modelID` parameter in your applications.
@@ -170,7 +168,7 @@ The custom model **Analyze** operation requires you to provide the `modelID` in
#### Manage your composed models
You can manage your custom models throughout life cycles:
-
+
* Test and validate new documents.
* Download your model to use in your applications.
* Delete your model when its lifecycle is complete.
@@ -194,7 +192,7 @@ The [compose model API](https://westus.dev.cognitive.microsoft.com/docs/services
#### Analyze documents
-You can make an [**Analyze document**](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v3-0-preview-2/operations/AnalyzeDocument) request using a unique model name in the request parameters.
+To make an [**Analyze document**](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v3-0-preview-2/operations/AnalyzeDocument) request, use a unique model name in the request parameters.
:::image type="content" source="media/custom-model-analyze-request.png" alt-text="Screenshot of a custom model request URL.":::
@@ -223,7 +221,7 @@ You can use the programming language of your choice to create a composed model:
#### Analyze documents
-Once you have built your composed model, it can be used to analyze forms and documents You can use your composed `model ID` and let the service decide which of your aggregated custom models fits best according to the document provided.
+Once you've built your composed model, you can use it to analyze forms and documents. Use your composed `model ID` and let the service decide which of your aggregated custom models fits best according to the document provided.
|Programming language| Code sample |
|--|--|
@@ -234,7 +232,7 @@ Once you have built your composed model, it can be used to analyze forms and doc
## Manage your composed models
-Custom models can be managed throughout their lifecycle. You can view a list of all custom models under your subscription, retrieve information about a specific custom model, and delete custom models from your account.
+You can manage a custom models at each stage in its life cycles. You can view a list of all custom models under your subscription, retrieve information about a specific custom model, and delete custom models from your account.
|Programming language| Code sample |
|--|--|
@@ -247,7 +245,7 @@ Custom models can be managed throughout their lifecycle. You can view a list of
## Next steps
-Try one of our quickstarts to get started using Form Recognizer preview
+Try one of our Form Recognizer quickstarts:
> [!div class="nextstepaction"]
> [Form Recognizer Studio](quickstarts/try-v3-form-recognizer-studio.md)
diff --git a/articles/applied-ai-services/form-recognizer/compose-custom-models.md b/articles/applied-ai-services/form-recognizer/compose-custom-models.md
index 2982ab482a603..9656fa1eccb73 100644
--- a/articles/applied-ai-services/form-recognizer/compose-custom-models.md
+++ b/articles/applied-ai-services/form-recognizer/compose-custom-models.md
@@ -7,7 +7,7 @@ manager: nitinme
ms.service: applied-ai-services
ms.subservice: forms-recognizer
ms.topic: how-to
-ms.date: 02/15/2022
+ms.date: 06/06/2022
ms.author: lajanuar
recommendations: false
---
@@ -27,7 +27,7 @@ In this article, you'll learn how to create Form Recognizer custom and composed
## Sample Labeling tool
-You can see how data is extracted from custom forms by trying our Sample Labeling tool. You'll need the following resources:
+Try extracting data from custom forms using our Sample Labeling tool. You'll need the following resources:
* An Azure subscription—you can [create one for free](https://azure.microsoft.com/free/cognitive-services/)
@@ -41,12 +41,12 @@ You can see how data is extracted from custom forms by trying our Sample Labelin
In the Form Recognizer UI:
1. Select **Use Custom to train a model with labels and get key value pairs**.
-
- :::image type="content" source="media/label-tool/fott-use-custom.png" alt-text="Screenshot: FOTT tool select custom option.":::
+
+ :::image type="content" source="media/label-tool/fott-use-custom.png" alt-text="Screenshot of the FOTT tool select custom model option.":::
1. In the next window, select **New project**:
- :::image type="content" source="media/label-tool/fott-new-project.png" alt-text="Screenshot: FOTT tool select new project.":::
+ :::image type="content" source="media/label-tool/fott-new-project.png" alt-text="Screenshot of the FOTT tool select new project option.":::
## Create your models
@@ -74,7 +74,7 @@ You [train your model](./quickstarts/try-sdk-rest-api.md#train-a-custom-model)
When you train with labeled data, the model uses supervised learning to extract values of interest, using the labeled forms you provide. Labeled data results in better-performing models and can produce models that work with complex forms or forms containing values without keys.
-Form Recognizer uses the [Layout](concept-layout.md) API to learn the expected sizes and positions of printed and handwritten text elements and extract tables. Then it uses user-specified labels to learn the key/value associations and tables in the documents. We recommend that you use five manually labeled forms of the same type (same structure) to get started when training a new model and add more labeled data as needed to improve the model accuracy. Form Recognizer enables training a model to extract key value pairs and tables using supervised learning capabilities.
+Form Recognizer uses the [Layout](concept-layout.md) API to learn the expected sizes and positions of typeface and handwritten text elements and extract tables. Then it uses user-specified labels to learn the key/value associations and tables in the documents. We recommend that you use five manually labeled forms of the same type (same structure) to get started when training a new model. Add more labeled data as needed to improve the model accuracy. Form Recognizer enables training a model to extract key value pairs and tables using supervised learning capabilities.
[Get started with Train with labels](label-tool.md)
@@ -104,7 +104,7 @@ When you train models using the [**Form Recognizer Sample Labeling tool**](https
### [**REST API**](#tab/rest-api)
-The [**REST API**](./quickstarts/try-sdk-rest-api.md?pivots=programming-language-rest-api#train-a-custom-model), will return a `201 (Success)` response with a **Location** header. The value of the last parameter in this header is the model ID for the newly trained model:
+The [**REST API**](./quickstarts/try-sdk-rest-api.md?pivots=programming-language-rest-api#train-a-custom-model) will return a `201 (Success)` response with a **Location** header. The value of the last parameter in this header is the model ID for the newly trained model:
:::image type="content" source="media/model-id.png" alt-text="Screenshot: the returned location header containing the model ID.":::
@@ -124,7 +124,7 @@ The [**REST API**](./quickstarts/try-sdk-rest-api.md?pivots=programming-language
#### Compose your custom models
-After you have gathered your custom models corresponding to a single form type, you can compose them into a single model.
+After you've gathered your custom models corresponding to a single form type, you can compose them into a single model.
### [**Form Recognizer Sample Labeling tool**](#tab/fott)
@@ -132,7 +132,7 @@ The **Sample Labeling tool** enables you to quickly get started training models
After you have completed training, compose your models as follows:
-1. On the left rail menu, select the **Model Compose icon** (merging arrow).
+1. On the left rail menu, select the **Model Compose** icon (merging arrow).
1. In the main window, select the models you wish to assign to a single model ID. Models with the arrows icon are already composed models.
@@ -142,7 +142,7 @@ After you have completed training, compose your models as follows:
When the operation completes, your newly composed model will appear in the list.
- :::image type="content" source="media/custom-model-compose.png" alt-text="Screenshot: model compose window." lightbox="media/custom-model-compose-expanded.png":::
+ :::image type="content" source="media/custom-model-compose.png" alt-text="Screenshot of the model compose window." lightbox="media/custom-model-compose-expanded.png":::
### [**REST API**](#tab/rest-api)
@@ -168,7 +168,7 @@ Use the programming language code of your choice to create a composed model that
### [**Form Recognizer Sample Labeling tool**](#tab/fott)
-1. On the tool's left-pane menu, select the **Analyze icon** (lightbulb).
+1. On the tool's left-pane menu, select the **Analyze icon** (light bulb).
1. Choose a local file or image URL to analyze.
@@ -196,13 +196,13 @@ Using the programming language of your choice to analyze a form or document with
---
-Test your newly trained models by [analyzing forms](./quickstarts/try-sdk-rest-api.md#analyze-forms-with-a-custom-model) that were not part of the training dataset. Depending on the reported accuracy, you may want to do further training to improve the model. You can continue further training to [improve results](label-tool.md#improve-results).
+Test your newly trained models by [analyzing forms](./quickstarts/try-sdk-rest-api.md#analyze-forms-with-a-custom-model) that weren't part of the training dataset. Depending on the reported accuracy, you may want to do further training to improve the model. You can continue further training to [improve results](label-tool.md#improve-results).
## Manage your custom models
You can [manage your custom models](./quickstarts/try-sdk-rest-api.md#manage-custom-models) throughout their lifecycle by viewing a [list of all custom models](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v2-1/operations/GetCustomModels) under your subscription, retrieving information about [a specific custom model](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v2-1/operations/GetCustomModel), and [deleting custom models](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v2-1/operations/DeleteCustomModel) from your account.
-Great! You have learned the steps to create custom and composed models and use them in your Form Recognizer projects and applications.
+Great! You've learned the steps to create custom and composed models and use them in your Form Recognizer projects and applications.
## Next steps
diff --git a/articles/applied-ai-services/form-recognizer/concept-business-card.md b/articles/applied-ai-services/form-recognizer/concept-business-card.md
index e494cd436c226..915de06124105 100644
--- a/articles/applied-ai-services/form-recognizer/concept-business-card.md
+++ b/articles/applied-ai-services/form-recognizer/concept-business-card.md
@@ -1,16 +1,15 @@
---
title: Form Recognizer business card model
titleSuffix: Azure Applied AI Services
-description: Concepts encompassing data extraction and analysis using prebuilt business card model
+description: Concepts related to data extraction and analysis using the prebuilt business card model.
author: laujan
manager: nitinme
ms.service: applied-ai-services
ms.subservice: forms-recognizer
ms.topic: conceptual
-ms.date: 03/11/2022
+ms.date: 06/06/2022
ms.author: lajanuar
recommendations: false
-ms.custom: ignite-fall-2021
---
@@ -34,7 +33,7 @@ The following tools are supported by Form Recognizer v3.0:
| Feature | Resources | Model ID |
|----------|-------------|-----------|
-|**Business card model**|
|**prebuilt-businessCard**|
### Try Form Recognizer
@@ -96,7 +95,7 @@ You'll need a business card document. You can use our [sample business card docu
| Model | Language—Locale code | Default |
|--------|:----------------------|:---------|
-|Business card|
English (United States)—en-US
English (Australia)—en-AU
English (Canada)—en-CA
English (United Kingdom)—en-GB
English (India)—en-IN
| Autodetected |
+|Business card|
English (United States)—en-US
English (Australia)—en-AU
English (Canada)—en-CA
English (United Kingdom)—en-GB
English (India)—en-IN
English (Japan)—en-JP
Japanese (Japan)—ja-JP
| Autodetected (en-US or ja-JP) |
## Field extraction
diff --git a/articles/applied-ai-services/form-recognizer/concept-composed-models.md b/articles/applied-ai-services/form-recognizer/concept-composed-models.md
index a0078547b6157..29b3d5a3dabff 100644
--- a/articles/applied-ai-services/form-recognizer/concept-composed-models.md
+++ b/articles/applied-ai-services/form-recognizer/concept-composed-models.md
@@ -7,7 +7,7 @@ manager: nitinme
ms.service: applied-ai-services
ms.subservice: forms-recognizer
ms.topic: conceptual
-ms.date: 03/25/2022
+ms.date: 06/06/2022
ms.author: lajanuar
recommendations: false
---
@@ -18,7 +18,7 @@ recommendations: false
With composed models, you can assign multiple custom models to a composed model called with a single model ID. It's useful when you've trained several models and want to group them to analyze similar form types. For example, your composed model might include custom models trained to analyze your supply, equipment, and furniture purchase orders. Instead of manually trying to select the appropriate model, you can use a composed model to determine the appropriate custom model for each analysis and extraction.
-* ```Custom form```and ```Custom document``` models can be composed together into a single composed model when they're trained with the same API version or an API version later than ```2021-01-30-preview```. For more information on composing custom template and custom neural models, see [compose model limits](#compose-model-limits).
+* ```Custom form```and ```Custom document``` models can be composed together into a single composed model when they're trained with the same API version or an API version later than ```2021-06-30-preview```. For more information on composing custom template and custom neural models, see [compose model limits](#compose-model-limits).
* With the model compose operation, you can assign up to 100 trained custom models to a single composed model. To analyze a document with a composed model, Form Recognizer first classifies the submitted form, chooses the best-matching assigned model, and returns results.
* For **_custom template models_**, the composed model can be created using variations of a custom template or different form types. This operation is useful when incoming forms may belong to one of several templates.
* The response will include a ```docType``` property to indicate which of the composed models was used to analyze the document.
@@ -30,10 +30,10 @@ With composed models, you can assign multiple custom models to a composed model
### Composed model compatibility
- |Custom model type | API Version |Custom form 2021-01-30-preview (v3.0)| Custom document 2021-01-30-preview(v3.0) | Custom form GA version (v2.1) or earlier|
+ |Custom model type | API Version |Custom form 2021-06-30-preview (v3.0)| Custom document 2021-06-30-preview(v3.0) | Custom form GA version (v2.1) or earlier|
|--|--|--|--|--|
-|**Custom template** (updated custom form)| 2021-01-30-preview | ✱| ✓ | X |
-|**Custom neural**| trained with current API version (2021-01-30-preview) |✓ |✓ | X |
+|**Custom template** (updated custom form)| 2021-06-30-preview | ✱| ✓ | X |
+|**Custom neural**| trained with current API version (2021-06-30-preview) |✓ |✓ | X |
|**Custom form**| Custom form GA version (v2.1) or earlier | X | X| ✓|
**Table symbols**: ✔—supported; **X—not supported; ✱—unsupported for this API version, but will be supported in a future API version.
diff --git a/articles/applied-ai-services/form-recognizer/concept-custom-neural.md b/articles/applied-ai-services/form-recognizer/concept-custom-neural.md
index b1be49897c58a..c87daf443fc1f 100644
--- a/articles/applied-ai-services/form-recognizer/concept-custom-neural.md
+++ b/articles/applied-ai-services/form-recognizer/concept-custom-neural.md
@@ -1,13 +1,13 @@
---
title: Form Recognizer custom neural model
titleSuffix: Azure Applied AI Services
-description: Learn about custom neural (neural) model type, its features and how you train a model with high accuracy to extract data from structured and unstructured documents
+description: Learn about custom neural (neural) model type, its features and how you train a model with high accuracy to extract data from structured and unstructured documents.
author: laujan
manager: nitinme
ms.service: applied-ai-services
ms.subservice: forms-recognizer
ms.topic: conceptual
-ms.date: 02/15/2022
+ms.date: 06/06/2022
ms.author: lajanuar
ms.custom: references_regions
recommendations: false
@@ -23,19 +23,34 @@ Custom neural models or neural models are a deep learned model that combines lay
|semi-structured | invoices, purchase orders |
|unstructured | contracts, letters|
-Custom neural models share the same labeling format and strategy as custom template models. Currently custom neural models only support a subset of the field types supported by custom template models.
+Custom neural models share the same labeling format and strategy as [custom template](concept-custom-template.md) models. Currently custom neural models only support a subset of the field types supported by custom template models.
## Model capabilities
Custom neural models currently only support key-value pairs and selection marks, future releases will include support for structured fields (tables) and signature.
-| Form fields | Selection marks | Tables | Signature | Region |
-|--|--|--|--|--|
-| Supported| Supported | Unsupported | Unsupported | Unsupported |
+| Form fields | Selection marks | Tabular fields | Signature | Region |
+|:--:|:--:|:--:|:--:|:--:|
+| Supported | Supported | Supported | Unsupported | Unsupported |
+
+## Tabular fields
+
+With the release of API version **2022-06-30-preview**, custom neural models will support tabular fields (tables):
+
+* Models trained with API version 2022-06-30-preview or later will accept tabular field labels.
+* Documents analyzed with custom neural models using API version 2022-06-30-preview or later will produce tabular fields aggregated across the tables.
+* The results can be found in the ```analyzeResult``` object's ```documents``` array that is returned following an analysis operation.
+
+Tabular fields support **cross page tables** by default:
+
+* To label a table that spans multiple pages, label each row of the table across the different pages in a single table.
+* As a best practice, ensure that your dataset contains a few samples of the expected variations. For example, include samples where the entire table is on a single page and where tables span two or more pages.
+
+Tabular fields are also useful when extracting repeating information within a document that isn't recognized as a table. For example, a repeating section of work experiences in a resume can be labeled and extracted as a tabular field.
## Supported regions
-In public preview custom neural models can only be trained in select Azure regions.
+For the **2022-06-30-preview**, custom neural models can only be trained in the following Azure regions:
* AustraliaEast
* BrazilSouth
@@ -57,13 +72,14 @@ In public preview custom neural models can only be trained in select Azure regio
* WestUS2
* WestUS3
-You can copy a model trained in one of the regions listed above to any other region for use.
+> [!TIP]
+> You can copy a model trained in one of the select regions listed above to **any other region** and use it accordingly.
## Best practices
-Custom neural models differ from custom template models in a few different ways.
+Custom neural models differ from custom template models in a few different ways. The custom template or model relies on a consistent visual template to extract the labeled data. Custom neural models support structured, semi-structured, and unstructured documents to extract fields. When you're choosing between the two model types, start with a neural model and test to determine if it supports your functional needs.
-### Dealing with variations
+### Dealing with variations
Custom neural models can generalize across different formats of a single document type. As a best practice, create a single model for all variations of a document type. Add at least five labeled samples for each of the different variations to the training dataset.
@@ -96,12 +112,12 @@ Custom neural models are only available in the [v3 API](v3-migration-guide.md).
| Document Type | REST API | SDK | Label and Test Models|
|--|--|--|--|
-| Custom document | [Form Recognizer 3.0 (preview)](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v3-0-preview-1/operations/AnalyzeDocument)| [Form Recognizer Preview SDK](quickstarts/try-v3-python-sdk.md)| [Form Recognizer Studio](https://formrecognizer.appliedai.azure.com/studio)
+| Custom document | [Form Recognizer 3.0 (preview)](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2022-06-30-preview/operations/AnalyzeDocument)| [Form Recognizer Preview SDK](quickstarts/try-v3-python-sdk.md)| [Form Recognizer Studio](https://formrecognizer.appliedai.azure.com/studio)
The build operation to train model supports a new ```buildMode``` property, to train a custom neural model, set the ```buildMode``` to ```neural```.
```REST
-https://{endpoint}/formrecognizer/documentModels:build?api-version=2022-01-30-preview
+https://{endpoint}/formrecognizer/documentModels:build?api-version=2022-06-30
{
"modelId": "string",
diff --git a/articles/applied-ai-services/form-recognizer/concept-custom-template.md b/articles/applied-ai-services/form-recognizer/concept-custom-template.md
index 23d5d9fc5912c..e226c78b3aeff 100644
--- a/articles/applied-ai-services/form-recognizer/concept-custom-template.md
+++ b/articles/applied-ai-services/form-recognizer/concept-custom-template.md
@@ -7,7 +7,7 @@ manager: nitinme
ms.service: applied-ai-services
ms.subservice: forms-recognizer
ms.topic: conceptual
-ms.date: 02/15/2022
+ms.date: 06/06/2022
ms.author: lajanuar
recommendations: false
---
@@ -20,15 +20,24 @@ Custom template models share the same labeling format and strategy as custom neu
## Model capabilities
-Custom template models support key-value pairs, selection marks, tables, signature fields, and selected regions.
+Custom template models support key-value pairs, selection marks, tables, signature fields, and selected regions.
-| Form fields | Selection marks | Structured fields (Tables) | Signature | Selected regions |
-|--|--|--|--|--|
+| Form fields | Selection marks | Tabular fields (Tables) | Signature | Selected regions |
+|:--:|:--:|:--:|:--:|:--:|
| Supported| Supported | Supported | Preview | Supported |
-## Dealing with variations
+## Tabular fields
-Template models rely on a defined visual template, changes to the template will result in lower accuracy. In those instances, split your training dataset to include at least five samples of each template and train a model for each of the variations. You can then [compose](concept-composed-models.md) the models into a single endpoint. When dealing with subtle variations, like digital PDF documents and images, it's best to include at least five examples of each type in the same training dataset.
+With the release of API version **2022-06-30-preview**, custom template models will add support for **cross page** tabular fields (tables):
+
+* To label a table that spans multiple pages, label each row of the table across the different pages in a single table.
+* As a best practice, ensure that your dataset contains a few samples of the expected variations. For example, include samples where the entire table is on a single page and where tables span two or more pages if you expect to see those variations in documents.
+
+Tabular fields are also useful when extracting repeating information within a document that isn't recognized as a table. For example, a repeating section of work experiences in a resume can be labeled and extracted as a tabular field.
+
+## Dealing with variations
+
+Template models rely on a defined visual template, changes to the template will result in lower accuracy. In those instances, split your training dataset to include at least five samples of each template and train a model for each of the variations. You can then [compose](concept-composed-models.md) the models into a single endpoint. For subtle variations, like digital PDF documents and images, it's best to include at least five examples of each type in the same training dataset.
## Training a model
@@ -36,13 +45,13 @@ Template models are available generally [v2.1 API](https://westus.dev.cognitive.
| Model | REST API | SDK | Label and Test Models|
|--|--|--|--|
-| Custom template (preview) | [Form Recognizer 3.0 (preview)](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v3-0-preview-1/operations/AnalyzeDocument)| [Form Recognizer Preview SDK](quickstarts/try-v3-python-sdk.md)| [Form Recognizer Studio](https://formrecognizer.appliedai.azure.com/studio)|
+| Custom template (preview) | [Form Recognizer 3.0 (preview)](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2022-06-30-preview/operations/AnalyzeDocument)| [Form Recognizer Preview SDK](quickstarts/try-v3-python-sdk.md)| [Form Recognizer Studio](https://formrecognizer.appliedai.azure.com/studio)|
| Custom template | [Form Recognizer 2.1 (GA)](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v2-1/operations/AnalyzeWithCustomForm)| [Form Recognizer SDK](quickstarts/get-started-sdk-rest-api.md?pivots=programming-language-python)| [Form Recognizer Sample labeling tool](https://fott-2-1.azurewebsites.net/)|
On the v3 API, the build operation to train model supports a new ```buildMode``` property, to train a custom template model, set the ```buildMode``` to ```template```.
```REST
-https://{endpoint}/formrecognizer/documentModels:build?api-version=2022-01-30-preview
+https://{endpoint}/formrecognizer/documentModels:build?api-version=2022-06-30
{
"modelId": "string",
@@ -72,4 +81,4 @@ https://{endpoint}/formrecognizer/documentModels:build?api-version=2022-01-30-pr
* View the REST API:
> [!div class="nextstepaction"]
- > [Form Recognizer API v2.1](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v2-1/operations/AnalyzeWithCustomForm)
\ No newline at end of file
+ > [Form Recognizer API v2.1](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v2-1/operations/AnalyzeWithCustomForm)
diff --git a/articles/applied-ai-services/form-recognizer/concept-custom.md b/articles/applied-ai-services/form-recognizer/concept-custom.md
index 2c014d58e5e97..58c146716a418 100644
--- a/articles/applied-ai-services/form-recognizer/concept-custom.md
+++ b/articles/applied-ai-services/form-recognizer/concept-custom.md
@@ -7,7 +7,7 @@ manager: nitinme
ms.service: applied-ai-services
ms.subservice: forms-recognizer
ms.topic: conceptual
-ms.date: 03/10/2022
+ms.date: 06/06/2022
ms.author: lajanuar
recommendations: false
---
@@ -35,7 +35,7 @@ Your training set will consist of structured documents where the formatting and
### Custom neural model
-The custom neural (custom document) model uses deep learning models and base model trained on a large collection of documents. This model is then fine-tuned or adapted to your data when you train the model with a labeled dataset. Custom neural models support structured, semi-structured, and unstructured documents to extract fields. Custom neural models currently support English-language documents. When you're choosing between the two model types, start with a neural model if it meets your functional needs. See [neural models](concept-custom-neural.md) to learn more about custom document models.
+The custom neural (custom document) model uses deep learning models and base model trained on a large collection of documents. This model is then fine-tuned or adapted to your data when you train the model with a labeled dataset. Custom neural models support structured, semi-structured, and unstructured documents to extract fields. Custom neural models currently support English-language documents. When you're choosing between the two model types, start with a neural model to determine if it meets your functional needs. See [neural models](concept-custom-neural.md) to learn more about custom document models.
## Build mode
@@ -82,7 +82,7 @@ The following tools are supported by Form Recognizer v3.0:
### Try Form Recognizer
-See how data is extracted from your specific or unique documents by using custom models. You need the following resources:
+Try extracting data from your specific or unique documents using custom models. You need the following resources:
* An Azure subscription. You can [create one for free](https://azure.microsoft.com/free/cognitive-services/).
* A [Form Recognizer instance](https://portal.azure.com/#create/Microsoft.CognitiveServicesFormRecognizer) in the Azure portal. You can use the free pricing tier (`F0`) to try the service. After your resource deploys, select **Go to resource** to get your key and endpoint.
@@ -141,8 +141,8 @@ The following table describes the features available with the associated tools a
| Document type | REST API | SDK | Label and Test Models|
|--|--|--|--|
| Custom form 2.1 | [Form Recognizer 2.1 GA API](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v2-1/operations/AnalyzeWithCustomForm) | [Form Recognizer SDK](quickstarts/get-started-sdk-rest-api.md?pivots=programming-language-python)| [Sample labeling tool](https://fott-2-1.azurewebsites.net/)|
-| Custom template 3.0 | [Form Recognizer 3.0 (preview)](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v3-0-preview-1/operations/AnalyzeDocument)| [Form Recognizer Preview SDK](quickstarts/try-v3-python-sdk.md)| [Form Recognizer Studio](https://formrecognizer.appliedai.azure.com/studio)|
-| Custom neural | [Form Recognizer 3.0 (preview)](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v3-0-preview-1/operations/AnalyzeDocument)| [Form Recognizer Preview SDK](quickstarts/try-v3-python-sdk.md)| [Form Recognizer Studio](https://formrecognizer.appliedai.azure.com/studio)
+| Custom template 3.0 | [Form Recognizer 3.0 (preview)](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2022-06-30-preview/operations/AnalyzeDocument)| [Form Recognizer Preview SDK](quickstarts/try-v3-python-sdk.md)| [Form Recognizer Studio](https://formrecognizer.appliedai.azure.com/studio)|
+| Custom neural | [Form Recognizer 3.0 (preview)](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2022-06-30-preview/operations/AnalyzeDocument)| [Form Recognizer Preview SDK](quickstarts/try-v3-python-sdk.md)| [Form Recognizer Studio](https://formrecognizer.appliedai.azure.com/studio)
> [!NOTE]
@@ -177,7 +177,7 @@ The [Sample Labeling tool](https://fott-2-1.azurewebsites.net/) doesn't support
* **Custom model API (v3.0)**: This version supports signature detection for custom forms. When you train custom models, you can specify certain fields as signatures. When a document is analyzed with your custom model, it indicates whether a signature was detected or not.
* [Form Recognizer v3.0 migration guide](v3-migration-guide.md): This guide shows you how to use the preview version in your applications and workflows.
-* [REST API (preview)](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v3-0-preview-1/operations/AnalyzeDocument): This API shows you more about the preview version and new capabilities.
+* [REST API (preview)](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2022-06-30-preview/operations/AnalyzeDocument): This API shows you more about the preview version and new capabilities.
### Try signature detection
@@ -204,5 +204,5 @@ Explore Form Recognizer quickstarts and REST APIs:
| Quickstart | REST API|
|--|--|
-|[v3.0 Studio quickstart](quickstarts/try-v3-form-recognizer-studio.md) |[Form Recognizer v3.0 API 2022-01-30-preview](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v3-0-preview-2/operations/AnalyzeDocument)|
+|[v3.0 Studio quickstart](quickstarts/try-v3-form-recognizer-studio.md) |[Form Recognizer v3.0 API 2022-06-30](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v3-0-preview-2/operations/AnalyzeDocument)|
| [v2.1 quickstart](quickstarts/get-started-sdk-rest-api.md) | [Form Recognizer API v2.1](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v3-0-preview-2/operations/BuildDocumentModel) |
\ No newline at end of file
diff --git a/articles/applied-ai-services/form-recognizer/concept-general-document.md b/articles/applied-ai-services/form-recognizer/concept-general-document.md
index 6f0ae5e7bfbe2..865544676826a 100644
--- a/articles/applied-ai-services/form-recognizer/concept-general-document.md
+++ b/articles/applied-ai-services/form-recognizer/concept-general-document.md
@@ -1,13 +1,13 @@
---
title: Form Recognizer general document model | Preview
titleSuffix: Azure Applied AI Services
-description: Concepts encompassing data extraction and analysis using prebuilt general document preview model
+description: Concepts related to data extraction and analysis using prebuilt general document preview model
author: laujan
manager: nitinme
ms.service: applied-ai-services
ms.subservice: forms-recognizer
ms.topic: conceptual
-ms.date: 03/08/2022
+ms.date: 06/06/2022
ms.author: lajanuar
recommendations: false
---
@@ -21,19 +21,18 @@ The General document preview model combines powerful Optical Character Recogniti
The general document API supports most form types and will analyze your documents and extract keys and associated values. It's ideal for extracting common key-value pairs from documents. You can use the general document model as an alternative to training a custom model without labels.
> [!NOTE]
-> The ```2022-01-30-preview``` update to the general document model adds support for selection marks.
+> The ```2022-06-30``` update to the general document model adds support for selection marks.
## General document features
-* The general document model is a pre-trained model, doesn't require labels or training.
+* The general document model is a pre-trained model; it doesn't require labels or training.
-* A single API extracts key-value pairs, selection marks entities, text, tables, and structure from documents.
+* A single API extracts key-value pairs, selection marks, entities, text, tables, and structure from documents.
* The general document model supports structured, semi-structured, and unstructured documents.
* Key names are spans of text within the document that are associated with a value.
-
* Selection marks are identified as fields with a value of ```:selected:``` or ```:unselected:```
***Sample document processed in the Form Recognizer Studio***
@@ -46,11 +45,11 @@ The following tools are supported by Form Recognizer v3.0:
| Feature | Resources |
|----------|-------------------------|
-|🆕 **General document model**|
|
### Try Form Recognizer
-See how data is extracted from forms and documents using the Form Recognizer Studio or our Sample Labeling tool.
+Try extracting data from forms and documents using the Form Recognizer Studio.
You'll need the following resources:
@@ -78,15 +77,15 @@ You'll need the following resources:
## Key-value pairs
-Key-value pairs are specific spans within the document that identify a label or key and its associated response or value. In a structured form, these pairs could be the label and the value the user entered for that field or in an unstructured document they could be the date a contract was executed on based on the text in a paragraph. The AI model is trained to extract identifiable keys and values based on a wide variety of document types, formats, and structures.
+Key-value pairs are specific spans within the document that identify a label or key and its associated response or value. In a structured form, these pairs could be the label and the value the user entered for that field. In an unstructured document, they could be the date a contract was executed on based on the text in a paragraph. The AI model is trained to extract identifiable keys and values based on a wide variety of document types, formats, and structures.
-Keys can also exist in isolation when the model detects that a key exists, with no associated value or when processing optional fields. For example, a middle name field may be left blank on a form in some instances. key-value pairs are always spans of text contained in the document and if you have documents where same value is described in different ways, for example, a customer or a user, the associated key will be either customer or user based on what the document contained.
+Keys can also exist in isolation when the model detects that a key exists, with no associated value or when processing optional fields. For example, a middle name field may be left blank on a form in some instances. Key-value pairs are spans of text contained in the document. If you have documents where the same value is described in different ways, for example, customer and user, the associated key will be either customer or user based on context.
## Entities
Natural language processing models can identify parts of speech and classify each token or word. The named entity recognition model is able to identify entities like people, locations, and dates to provide for a richer experience. Identifying entities enables you to distinguish between customer types, for example, an individual or an organization.
-The key value pair extraction model and entity identification model are run in parallel on the entire document and not just on the values of the extracted key-value pairs. This process ensures that complex structures where a key can't be identified is still enriched by identifying the entities referenced. You can still match keys or values to entities based on the offsets of the identified spans.
+The key-value pair extraction model and entity identification model are run in parallel on the entire document—not just on the values of the extracted key-value pairs. This process ensures that complex structures where a key can't be identified are still enriched by identifying the entities referenced. You can still match keys or values to entities based on the offsets of the identified spans.
* The general document is a pre-trained model and can be directly invoked via the REST API.
diff --git a/articles/applied-ai-services/form-recognizer/concept-id-document.md b/articles/applied-ai-services/form-recognizer/concept-id-document.md
index 93df1ad7e889f..82ec023661fec 100644
--- a/articles/applied-ai-services/form-recognizer/concept-id-document.md
+++ b/articles/applied-ai-services/form-recognizer/concept-id-document.md
@@ -1,16 +1,15 @@
---
title: Form Recognizer ID document model
titleSuffix: Azure Applied AI Services
-description: Concepts encompassing data extraction and analysis using the prebuilt ID document model
+description: Concepts related to data extraction and analysis using the prebuilt ID document model
author: laujan
manager: nitinme
ms.service: applied-ai-services
ms.subservice: forms-recognizer
ms.topic: conceptual
-ms.date: 03/11/2022
+ms.date: 06/06/2022
ms.author: lajanuar
recommendations: false
-ms.custom: ignite-fall-2021
---
@@ -34,11 +33,11 @@ The following tools are supported by Form Recognizer v3.0:
| Feature | Resources | Model ID |
|----------|-------------|-----------|
-|**ID document model**|
|**prebuilt-idDocument**|
### Try Form Recognizer
-See how to extract data, including name, birth date, machine-readable zone, and expiration date, from ID documents using the Form Recognizer Studio or our Sample Labeling tool. You'll need the following resources:
+Extract data, including name, birth date, machine-readable zone, and expiration date, from ID documents using the Form Recognizer Studio or our Sample Labeling tool. You'll need the following resources:
* An Azure subscription—you can [create one for free](https://azure.microsoft.com/free/cognitive-services/)
@@ -114,17 +113,32 @@ You'll need an ID document. You can use our [sample ID document](https://raw.git
## Form Recognizer preview v3.0
- The Form Recognizer preview introduces several new features and capabilities:
+ The Form Recognizer preview v3.0 introduces several new features and capabilities:
-* **ID document (v3.0)** model supports endorsements, restrictions, and vehicle classification extraction from US driver's licenses.
+* **ID document (v3.0)** prebuilt model supports extraction of endorsement, restriction, and vehicle class codes from US driver's licenses.
+
+* The ID Document **2022-06-30-preview** release supports the following data extraction from US driver's licenses:
+
+ * Date issued
+ * Height
+ * Weight
+ * Eye color
+ * Hair color
+ * Document discriminator security code
### ID document preview field extraction
|Name| Type | Description | Standardized output|
|:-----|:----|:----|:----|
-| 🆕 Endorsements | String | Additional driving privileges granted to a driver such as Motorcycle or School bus. | |
-| 🆕 Restrictions | String | Restricted driving privileges applicable to suspended or revoked licenses.| |
-| 🆕VehicleClassification | String | Types of vehicles that can be driven by a driver. ||
+| 🆕 DateOfIssue | Date | Issue date | yyyy-mm-dd |
+| 🆕 Height | String | Height of the holder. | |
+| 🆕 Weight | String | Weight of the holder. | |
+| 🆕 EyeColor | String | Eye color of the holder. | |
+| 🆕 HairColor | String | Hair color of the holder. | |
+| 🆕 DocumentDiscriminator | String | Document discriminator is a security code that identifies where and when the license was issued. | |
+| Endorsements | String | More driving privileges granted to a driver such as Motorcycle or School bus. | |
+| Restrictions | String | Restricted driving privileges applicable to suspended or revoked licenses.| |
+| VehicleClassification | String | Types of vehicles that can be driven by a driver. ||
| CountryRegion | countryRegion | Country or region code compliant with ISO 3166 standard | |
| DateOfBirth | Date | DOB | yyyy-mm-dd |
| DateOfExpiration | Date | Expiration date DOB | yyyy-mm-dd |
diff --git a/articles/applied-ai-services/form-recognizer/concept-invoice.md b/articles/applied-ai-services/form-recognizer/concept-invoice.md
index 062824b46cbc1..b518421103941 100644
--- a/articles/applied-ai-services/form-recognizer/concept-invoice.md
+++ b/articles/applied-ai-services/form-recognizer/concept-invoice.md
@@ -1,13 +1,13 @@
---
title: Form Recognizer invoice model
titleSuffix: Azure Applied AI Services
-description: Concepts encompassing data extraction and analysis using prebuilt invoice model
+description: Concepts related to data extraction and analysis using prebuilt invoice model
author: laujan
manager: nitinme
ms.service: applied-ai-services
ms.subservice: forms-recognizer
ms.topic: conceptual
-ms.date: 02/15/2022
+ms.date: 06/06/2022
ms.author: lajanuar
recommendations: false
---
@@ -33,7 +33,7 @@ The following tools are supported by Form Recognizer v3.0:
| Feature | Resources | Model ID |
|----------|-------------|-----------|
-|**Invoice model** |
|**prebuilt-invoice**|
### Try Form Recognizer
@@ -93,6 +93,11 @@ You'll need an invoice document. You can use our [sample invoice document](https
|--------|:----------------------|:---------|
|Invoice|
| Dutch (Netherlands)—nl|
## Field extraction
@@ -144,9 +149,15 @@ Following are the line items extracted from an invoice in the JSON output respon
| Unit | String| The unit of the line item, e.g, kg, lb etc. | Hours | |
| Date | Date| Date corresponding to each line item. Often it's a date the line item was shipped | 3/4/2021| 2021-03-04 |
| Tax | Number | Tax associated with each line item. Possible values include tax amount, tax %, and tax Y/N | 10% | |
-| VAT | Number | Stands for Value added tax. This is a flat tax levied on an item. Common in European countries | €20.00 | |
+| VAT | Number | Stands for Value added tax. VAT is a flat tax levied on an item. Common in European countries | €20.00 | |
-The invoice key-value pairs and line items extracted are in the `documentResults` section of the JSON output.
+The invoice key-value pairs and line items extracted are in the `documentResults` section of the JSON output.
+
+### Key-value pairs (Preview)
+
+The prebuilt invoice **2022-06-30-preview** release returns key-value pairs at no extra cost. Key-value pairs are specific spans within the invoice that identify a label or key and its associated response or value. In an invoice, these pairs could be the label and the value the user entered for that field or telephone number. The AI model is trained to extract identifiable keys and values based on a wide variety of document types, formats, and structures.
+
+Keys can also exist in isolation when the model detects that a key exists, with no associated value or when processing optional fields. For example, a middle name field may be left blank on a form in some instances. key-value pairs are always spans of text contained in the document. If you have documents where the same value is described in different ways, for example, a customer or a user, the associated key will be either customer or user based on context.
## Form Recognizer preview v3.0
@@ -154,7 +165,7 @@ The invoice key-value pairs and line items extracted are in the `documentResults
* Follow our [**Form Recognizer v3.0 migration guide**](v3-migration-guide.md) to learn how to use the preview version in your applications and workflows.
-* Explore our [**REST API (preview)**](https://westcentralus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v3-0-preview-2/operations/AnalyzeDocument) to learn more about the preview version and new capabilities.
+* Explore our [**REST API (preview)**](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2022-06-30-preview/operations/AnalyzeDocument) to learn more about the preview version and new capabilities.
## Next steps
@@ -165,7 +176,7 @@ The invoice key-value pairs and line items extracted are in the `documentResults
* Explore our REST API:
> [!div class="nextstepaction"]
- > [Form Recognizer API v3.0 (Preview)](https://westcentralus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v3-0-preview-2/operations/AnalyzeDocument)
-
+ > [Form Recognizer API v3.0 (Preview)](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2022-06-30-preview/operations/AnalyzeDocument)
+
> [!div class="nextstepaction"]
> [Form Recognizer API v2.1](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v2-1/operations/5ed8c9843c2794cbb1a96291)
diff --git a/articles/applied-ai-services/form-recognizer/concept-layout.md b/articles/applied-ai-services/form-recognizer/concept-layout.md
index 69226aad645a2..194a1fa2fba19 100644
--- a/articles/applied-ai-services/form-recognizer/concept-layout.md
+++ b/articles/applied-ai-services/form-recognizer/concept-layout.md
@@ -1,16 +1,16 @@
---
title: Layouts - Form Recognizer
titleSuffix: Azure Applied AI Services
-description: Learn concepts related to Layout API analysis with Form Recognizer API—usage and limits.
+description: Learn concepts related to the Layout API with Form Recognizer REST API usage and limits.
author: laujan
manager: nitinme
ms.service: applied-ai-services
ms.subservice: forms-recognizer
ms.topic: conceptual
-ms.date: 03/11/2022
+ms.date: 06/06/2022
ms.author: lajanuar
recommendations: false
-ms.custom: ignite-fall-2021
+ms.custom:
---
# Form Recognizer layout model
@@ -19,14 +19,30 @@ The Form Recognizer Layout API extracts text, tables, selection marks, and struc
***Sample form processed with [Form Recognizer Studio](https://formrecognizer.appliedai.azure.com/studio/layout)***
-:::image type="content" source="media/studio/analyze-layout.png" alt-text="Screenshot: Screenshot of sample document processed using Form Recognizer studio":::
+:::image type="content" source="media/studio/form-recognizer-studio-layout-newspaper.png" alt-text="Screenshot of sample newspaper page processed using Form Recognizer studio":::
-**Data extraction features**
+## Supported document types
-| **Layout model** | **Text Extraction** | **Selection Marks** | **Tables** |
+| **Model** | **Images** | **PDF** | **TIFF** |
| --- | --- | --- | --- |
| Layout | ✓ | ✓ | ✓ |
+### Data extraction
+
+| **Model** | **Text** | **Selection Marks** | **Tables** | **Paragraphs** | **Paragraph roles** |
+| --- | --- | --- | --- | --- | --- |
+| Layout | ✓ | ✓ | ✓ | ✓ | ✓ |
+
+**Supported paragraph roles**:
+The paragraph roles are best used with unstructured documents. PAragraph roles help analyze the structure of the extracted content for better semantic search and analysis.
+
+* title
+* sectionHeading
+* footnote
+* pageHeader
+* pageFooter
+* pageNumber
+
## Development options
The following tools are supported by Form Recognizer v2.1:
@@ -39,11 +55,11 @@ The following tools are supported by Form Recognizer v3.0:
| Feature | Resources | Model ID |
|----------|------------|------------|
-|**Layout model**|
|**prebuilt-layout**|
-### Try Form Recognizer
+## Try Form Recognizer
-See how data is extracted from forms and documents using the Form Recognizer Studio or Sample Labeling tool. You'll need the following resources:
+Try extracting data from forms and documents using the Form Recognizer Studio. You'll need the following resources:
* An Azure subscription—you can [create one for free](https://azure.microsoft.com/free/cognitive-services/)
@@ -51,14 +67,14 @@ See how data is extracted from forms and documents using the Form Recognizer Stu
:::image type="content" source="media/containers/keys-and-endpoint.png" alt-text="Screenshot: keys and endpoint location in the Azure portal.":::
-#### Form Recognizer Studio (preview)
+### Form Recognizer Studio (preview)
> [!NOTE]
> Form Recognizer studio is available with the preview (v3.0) API.
***Sample form processed with [Form Recognizer Studio](https://formrecognizer.appliedai.azure.com/studio/layout)***
-:::image type="content" source="media/studio/form-recognizer-studio-layout-v3p2.png" alt-text="Screenshot: Layout processing in Form Recognizer Studio.":::
+:::image type="content" source="media/studio/form-recognizer-studio-layout-newspaper.png" alt-text="Screenshot: Layout processing a newspaper page in Form Recognizer Studio.":::
1. On the Form Recognizer Studio home page, select **Layout**
@@ -71,79 +87,55 @@ See how data is extracted from forms and documents using the Form Recognizer Stu
> [!div class="nextstepaction"]
> [Try Form Recognizer Studio](https://formrecognizer.appliedai.azure.com/studio/layout)
-#### Sample Labeling tool
-
-You'll need a form document. You can use our [sample form document](https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf).
-
-1. On the Sample Labeling tool home page, select **Use Layout to get text, tables, and selection marks**.
-
-1. Select **Local file** from the dropdown menu.
-
-1. Upload your file and select **Run Layout**
-
- :::image type="content" source="media/try-layout.png" alt-text="Screenshot: Screenshot: Sample Labeling tool dropdown layout file source selection menu.":::
-
- > [!div class="nextstepaction"]
- > [Try Sample Labeling tool](https://fott-2-1.azurewebsites.net/prebuilts-analyze)
-
## Input requirements
* For best results, provide one clear photo or high-quality scan per document.
-* Supported file formats: JPEG/JPG, PNG, BMP, TIFF, and PDF (text-embedded or scanned). Text-embedded PDFs are best to eliminate the possibility of error in character extraction and location.
+* Supported file formats: JPEG/JPG, PNG, BMP, TIFF, and PDF (text-embedded or scanned).
* For PDF and TIFF, up to 2000 pages can be processed (with a free tier subscription, only the first two pages are processed).
-* The file size must be less than 500 MB for paid (S0) tier and 4 MB for free (F0) tier (4 MB for the free tier).
+* The file size must be less than 500 MB for paid (S0) tier and 4 MB for free (F0) tier.
* Image dimensions must be between 50 x 50 pixels and 10,000 x 10,000 pixels.
-
-> [!NOTE]
-> The [Sample Labeling tool](https://fott-2-1.azurewebsites.net/) does not support the BMP file format. This is a limitation of the tool not the Form Recognizer Service.
+* The minimum height of the text to be extracted is 12 pixels for a 1024 X 768 image. This dimension corresponds to about eight font point text at 150 DPI.
## Supported languages and locales
*See* [Language Support](language-support.md) for a complete list of supported handwritten and printed languages.
-## Data extraction
-
-The layout model extracts table structures, selection marks, printed and handwritten text, and bounding box coordinates from your documents.
+## Model extraction
-### Tables and table headers
+The layout model extracts text, selection marks, tables, paragraphs, and paragraph types (`roles`) from your documents.
-Layout API extracts tables in the `pageResults` section of the JSON output. Documents can be scanned, photographed, or digitized. Tables can be complex with merged cells or columns, with or without borders, and with odd angles. Extracted table information includes the number of columns and rows, row span, and column span. Each cell with its bounding box is output along with information whether it's recognized as part of a header or not. The model predicted header cells can span multiple rows and aren't necessarily the first rows in a table. They also work with rotated tables. Each table cell also includes the full text with references to the individual words in the `readResults` section.
+### Text lines and words
-:::image type="content" source="./media/layout-table-headers-example.png" alt-text="Layout table headers output":::
+Layout API extracts print and handwritten style text as `lines` and `words`. The model outputs bounding `polygon` coordinates and `confidence` for the extracted words. The `styles` collection includes any handwritten style for lines, if detected, along with the spans pointing to the associated text. This feature applies to [supported handwritten languages](language-support.md).
### Selection marks
-Layout API also extracts selection marks from documents. Extracted selection marks include the bounding box, confidence, and state (selected/unselected). Selection mark information is extracted in the `readResults` section of the JSON output.
-
-:::image type="content" source="./media/layout-selection-marks.png" alt-text="Layout selection marks output":::
-
-### Text lines and words
+Layout API also extracts selection marks from documents. Extracted selection marks appear within the `pages` collection for each page. They include the bounding `polygon`, `confidence`, and selection `state` (`selected/unselected`). Any associated text if extracted is also included as the starting index (`offset`) and `length` that references the top level `content` property that contains the full text from the document.
-The layout model extracts text from documents and images with multiple text angles and colors. It accepts photos of documents, faxes, printed and/or handwritten (English only) text, and mixed modes. Printed and handwritten text is extracted from lines and words. The service then returns bounding box coordinates, confidence scores, and style (handwritten or other). All the text information is included in the `readResults` section of the JSON output.
+### Tables and table headers
-:::image type="content" source="./media/layout-text-extraction.png" alt-text="Layout text extraction output":::
+Layout API extracts tables in the `pageResults` section of the JSON output. Documents can be scanned, photographed, or digitized. Extracted table information includes the number of columns and rows, row span, and column span. Each cell with its bounding `polygon` is output along with information whether it's recognized as a `columnHeader` or not. The API also works with rotated tables. Each table cell contains the row and column index and bounding polygon coordinates. For the cell text, the model outputs the `span` information containing the starting index (`offset`). The model also outputs the `length` within the top level `content` that contains the full text from the document.
-### Natural reading order for text lines (Latin only)
+### Paragraphs
-In Form Recognizer v2.1, you can specify the order in which the text lines are output with the `readingOrder` query parameter. Use `natural` for a more human-friendly reading order output as shown in the following example. This feature is only supported for Latin languages.
+The Layout model extracts all identified blocks of text in the `paragraphs` collection as a top level object under `analyzeResults`. Each entry in this collection represents a text block and includes the extracted text as`content`and the bounding `polygon` coordinates. The `span` information points to the text fragment within the top level `content` property that contains the full text from the document.
-In Form Recognizer v3.0, the natural reading order output is used by the service in all cases. Therefore, there's no `readingOrder` parameter provided in this version.
+### Paragraph roles
-### Handwritten classification for text lines (Latin only)
+The Layout model may flag certain paragraphs with their specialized type or `role` as predicted by the model. They're best used with unstructured documents to help understand the layout of the extracted content for a richer semantic analysis. The following paragraph roles are supported:
-The response includes classifying whether each text line is of handwriting style or not, along with a confidence score. This feature is only supported for Latin languages.
+| **Predicted role** | **Description** |
+| --- | --- |
+| `title` | The main heading(s) in the page |
+| `sectionHeading` | One or more subheading(s) on the page |
+| `footnote` | Text near the bottom of the page |
+| `pageHeader` | Text near the top edge of the page |
+| `pageFooter` | Text near the bottom edge of the page |
+| `pageNumber` | Page number |
### Select page numbers or ranges for text extraction
-For large multi-page documents, use the `pages` query parameter to indicate specific page numbers or page ranges for text extraction.
-
-## Form Recognizer preview v3.0
-
- The Form Recognizer preview introduces several new features and capabilities.
-
-* Follow our [**Form Recognizer v3.0 migration guide**](v3-migration-guide.md) to learn how to use the preview version in your applications and workflows.
-
-* Explore our [**REST API (preview)**](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v3-0-preview-2/operations/AnalyzeDocument) to learn more about the preview version and new capabilities.
+For large multi-page documents, use the `pages` query parameter to indicate specific page numbers or page ranges for text extraction.
## Next steps
diff --git a/articles/applied-ai-services/form-recognizer/concept-model-overview.md b/articles/applied-ai-services/form-recognizer/concept-model-overview.md
index 7522e18a8b2e7..9215f198cb177 100644
--- a/articles/applied-ai-services/form-recognizer/concept-model-overview.md
+++ b/articles/applied-ai-services/form-recognizer/concept-model-overview.md
@@ -1,13 +1,13 @@
---
title: Form Recognizer models
titleSuffix: Azure Applied AI Services
-description: Concepts encompassing data extraction and analysis using prebuilt models.
+description: Concepts related to data extraction and analysis using prebuilt models.
author: laujan
manager: nitinme
ms.service: applied-ai-services
ms.subservice: forms-recognizer
ms.topic: conceptual
-ms.date: 03/16/2022
+ms.date: 06/06/2022
ms.author: lajanuar
recommendations: false
ms.custom: ignite-fall-2021
@@ -16,14 +16,14 @@ ms.custom: ignite-fall-2021
# Form Recognizer models
-Azure Form Recognizer prebuilt models enable you to add intelligent document processing to your apps and flows without having to train and build your own models. Prebuilt models use optical character recognition (OCR) combined with deep learning models to identify and extract predefined text and data fields common to specific form and document types. Form Recognizer extracts analyzes form and document data then returns an organized, structured JSON response. Form Recognizer v2.1 supports invoice, receipt, ID document, and business card models.
+ Azure Form Recognizer supports a wide variety of models that enable you to add intelligent document processing to your apps and flows. You can use a prebuilt document analysis or domain specific model or train a custom model tailored to your specific business needs and use cases. Form Recognizer can be used with the REST API or Python, C#, Java, and JavaScript SDKs.
## Model overview
| **Model** | **Description** |
| --- | --- |
|**Document analysis**||
-| 🆕[Read (preview)](#read-preview) | Extract printed and handwritten text lines, words, locations, and detected languages.|
+| 🆕[Read (preview)](#read-preview) | Extract typeface and handwritten text lines, words, locations, and detected languages.|
| 🆕[General document (preview)](#general-document-preview) | Extract text, tables, structure, key-value pairs, and named entities.|
| [Layout](#layout) | Extract text and layout information from documents.|
|**Prebuilt**||
@@ -83,20 +83,21 @@ The W-2 model analyzes and extracts key information reported in each box on a W-
[:::image type="icon" source="media/studio/layout.png":::](https://formrecognizer.appliedai.azure.com/studio/layout)
-The Layout API analyzes and extracts text, tables and headers, selection marks, and structure information from forms and documents.
+The Layout API analyzes and extracts text, tables and headers, selection marks, and structure information from documents.
***Sample document processed using the [Form Recognizer Studio](https://formrecognizer.appliedai.azure.com/studio/layout)***:
-:::image type="content" source="media/studio/analyze-layout.png" alt-text="Screenshot: Screenshot of sample document processed using Form Recognizer studio":::
+:::image type="content" source="media/studio/form-recognizer-studio-layout-newspaper.png" alt-text="Screenshot: Screenshot of sample newspaper page processed using Form Recognizer studio":::
> [!div class="nextstepaction"]
+>
> [Learn more: layout model](concept-layout.md)
### Invoice
[:::image type="icon" source="media/studio/invoice.png":::](https://formrecognizer.appliedai.azure.com/studio/prebuilt?formType=invoice)
-The invoice model analyzes and extracts key information from sales invoices. The API analyzes invoices in various formats and extracts key information such as customer name, billing address, due date, and amount due. Currently, the model supports both English and Spanish invoices.
+The invoice model analyzes and extracts key information from sales invoices. The API analyzes invoices in various formats and extracts key information such as customer name, billing address, due date, and amount due. Currently, the model supports English, Spanish, German, French, Italian, Portuguese, and Dutch invoices.
***Sample invoice processed using [Form Recognizer Studio](https://formrecognizer.appliedai.azure.com/studio/prebuilt?formType=invoice)***:
@@ -109,7 +110,9 @@ The invoice model analyzes and extracts key information from sales invoices. The
[:::image type="icon" source="media/studio/receipt.png":::](https://formrecognizer.appliedai.azure.com/studio/prebuilt?formType=receipt)
-The receipt model analyzes and extracts key information from printed and handwritten receipts.
+* The receipt model analyzes and extracts key information from printed and handwritten sales receipts.
+
+* The preview version v3.0 also supports single-page hotel receipt processing.
***Sample receipt processed using [Form Recognizer Studio](https://formrecognizer.appliedai.azure.com/studio/prebuilt?formType=receipt)***:
@@ -152,7 +155,9 @@ The business card model analyzes and extracts key information from business card
[:::image type="icon" source="media/studio/custom.png":::](https://formrecognizer.appliedai.azure.com/studio/custommodel/projects)
-The custom model analyzes and extracts data from forms and documents specific to your business. The API is a machine-learning program trained to recognize form fields within your distinct content and extract key-value pairs and table data. You only need five examples of the same form type to get started and your custom model can be trained with or without labeled datasets.
+* Custom models analyze and extract data from forms and documents specific to your business. The API is a machine-learning program trained to recognize form fields within your distinct content and extract key-value pairs and table data. You only need five examples of the same form type to get started and your custom model can be trained with or without labeled datasets.
+
+* The preview version v3.0 custom model supports signature detection in custom forms (template model) and cross-page tables in both template and neural models.
***Sample custom template processed using [Form Recognizer Studio](https://formrecognizer.appliedai.azure.com/studio/customform/projects)***:
@@ -165,7 +170,7 @@ The custom model analyzes and extracts data from forms and documents specific to
A composed model is created by taking a collection of custom models and assigning them to a single model built from your form types. You can assign multiple custom models to a composed model called with a single model ID. you can assign up to 100 trained custom models to a single composed model.
-***Composed model dialog window[Form Recognizer Studio](https://formrecognizer.appliedai.azure.com/studio/customform/projects)***:
+***Composed model dialog window in [Form Recognizer Studio](https://formrecognizer.appliedai.azure.com/studio/customform/projects)***:
:::image type="content" source="media/studio/composed-model.png" alt-text="Screenshot of Form Recognizer Studio compose custom model dialog window.":::
@@ -174,43 +179,31 @@ A composed model is created by taking a collection of custom models and assignin
## Model data extraction
- | **Data extraction** | **Text extraction** |**Key-Value pairs** |**Fields**|**Selection Marks** | **Tables** |**Entities** |
-| --- |:---: |:---:|:---: |:---: |:---: |:---: |
-|🆕 [prebuilt-read](concept-read.md#data-extraction) | ✓ | || | | |
-|🆕 [prebuilt-tax.us.w2](concept-w2.md#field-extraction) | ✓ | ✓ | ✓ | ✓ | ✓ ||
-|🆕 [prebuilt-document](concept-general-document.md#data-extraction)| ✓ | ✓ || ✓ | ✓ | ✓ |
-| [prebuilt-layout](concept-layout.md#data-extraction) | ✓ | || ✓ | ✓ | |
-| [prebuilt-invoice](concept-invoice.md#field-extraction) | ✓ | ✓ |✓| ✓ | ✓ ||
-| [prebuilt-receipt](concept-receipt.md#field-extraction) | ✓ | ✓ |✓| | ||
-| [prebuilt-idDocument](concept-id-document.md#field-extraction) | ✓ | ✓ |✓| | ||
-| [prebuilt-businessCard](concept-business-card.md#field-extraction) | ✓ | ✓ | ✓| | ||
-| [Custom](concept-custom.md#compare-model-features) |✓ | ✓ || ✓ | ✓ | ✓ |
+ | **Model ID** | **Text extraction** | **Language detection** | **Selection Marks** | **Tables** | **Paragraphs** | **Paragraph roles** | **Key-Value pairs** | **Fields** |
+ |:-----|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|
+|🆕 [prebuilt-read](concept-read.md#data-extraction) | ✓ | ✓ | | | ✓ | | | |
+|🆕 [prebuilt-tax.us.w2](concept-w2.md#field-extraction) | ✓ | | ✓ | | ✓ | | | ✓ |
+|🆕 [prebuilt-document](concept-general-document.md#data-extraction)| ✓ | | ✓ | ✓ | ✓ | | ✓ | |
+| [prebuilt-layout](concept-layout.md#data-extraction) | ✓ | | ✓ | ✓ | ✓ | ✓ | | | |
+| [prebuilt-invoice](concept-invoice.md#field-extraction) | ✓ | | ✓ | ✓ | ✓ | | ✓ | ✓ |
+| [prebuilt-receipt](concept-receipt.md#field-extraction) | ✓ | | | | ✓ | | | ✓ |
+| [prebuilt-idDocument](concept-id-document.md#field-extraction) | ✓ | | | | ✓ | | | ✓ |
+| [prebuilt-businessCard](concept-business-card.md#field-extraction) | ✓ | | | | ✓ | | | ✓ |
+| [Custom](concept-custom.md#compare-model-features) | ✓ | | ✓ | ✓ | ✓ | | | ✓ |
## Input requirements
* For best results, provide one clear photo or high-quality scan per document.
-* Supported file formats: JPEG/JPG, PNG, BMP, TIFF, and PDF (text-embedded or scanned). Text-embedded PDFs are best to eliminate the possibility of error in character extraction and location.
+* Supported file formats: JPEG/JPG, PNG, BMP, TIFF, and PDF (text-embedded or scanned). Additionally, the Read API supports Microsoft Word (DOCX), Excel (XLS), PowerPoint (PPT), and HTML files.
* For PDF and TIFF, up to 2000 pages can be processed (with a free tier subscription, only the first two pages are processed).
* The file size must be less than 500 MB for paid (S0) tier and 4 MB for free (F0) tier.
* Image dimensions must be between 50 x 50 pixels and 10,000 x 10,000 pixels.
-* PDF dimensions are up to 17 x 17 inches, corresponding to Legal or A3 paper size, or smaller.
* The total size of the training data is 500 pages or less.
* If your PDFs are password-locked, you must remove the lock before submission.
> [!NOTE]
> The [Sample Labeling tool](https://fott-2-1.azurewebsites.net/) does not support the BMP file format. This is a limitation of the tool not the Form Recognizer Service.
-## Form Recognizer preview v3.0
-
- Form Recognizer v3.0 (preview) introduces several new features and capabilities:
-
-* [**Read (preview)**](concept-read.md) model is a new API that extracts text lines, words, their locations, detected languages, and handwritten text, if detected.
-* [**General document (preview)**](concept-general-document.md) model is a new API that uses a pre-trained model to extract text, tables, structure, key-value pairs, and named entities from forms and documents.
-* [**Receipt (preview)**](concept-receipt.md) model supports single-page hotel receipt processing.
-* [**ID document (preview)**](concept-id-document.md) model supports endorsements, restrictions, and vehicle classification extraction from US driver's licenses.
-* [**W-2 (preview)**](concept-w2.md) model supports employee, employer, wage information, etc. from US W-2 forms.
-* [**Custom model API (preview)**](concept-custom.md) supports signature detection for custom forms.
-
### Version migration
Learn how to use Form Recognizer v3.0 in your applications by following our [**Form Recognizer v3.0 migration guide**](v3-migration-guide.md)
diff --git a/articles/applied-ai-services/form-recognizer/concept-read.md b/articles/applied-ai-services/form-recognizer/concept-read.md
index 80e1f756e19a4..173a0ff05b2de 100644
--- a/articles/applied-ai-services/form-recognizer/concept-read.md
+++ b/articles/applied-ai-services/form-recognizer/concept-read.md
@@ -1,21 +1,33 @@
---
-title: Read - Form Recognizer
+title: Read OCR - Form Recognizer
titleSuffix: Azure Applied AI Services
-description: Learn concepts related to Read API analysis with Form Recognizer API—usage and limits.
+description: Learn concepts related to Read OCR API analysis with Form Recognizer API—usage and limits.
author: laujan
manager: nitinme
ms.service: applied-ai-services
ms.subservice: forms-recognizer
ms.topic: conceptual
-ms.date: 03/09/2022
+ms.date: 06/06/2022
ms.author: lajanuar
recommendations: false
ms.custom: ignite-fall-2021
---
-# Form Recognizer read model
+# Form Recognizer Read OCR model
-The Form Recognizer v3.0 preview includes the new Read OCR model. Form Recognizer Read builds on the success of COmputer Vision Read and optimizes even more for analyzing documents, including new document formats in the future. It extracts printed and handwritten text from documents and images and can handle mixed languages in the documents and text line. The read model can detect lines, words, locations, and additionally detect languages. It is the foundational technology powering the text extraction in Form Recognizer Layout, prebuilt, general document, and custom models.
+Form Recognizer v3.0 preview includes the new Read Optical Character Recognition (OCR) model. The Read OCR model extracts typeface and handwritten text including mixed languages in documents. The Read OCR model can detect lines, words, locations, and languages and is the core of all other Form Recognizer models. Layout, general document, custom, and prebuilt models all use the Read OCR model as a foundation for extracting texts from documents.
+
+## Supported document types
+
+| **Model** | **Images** | **PDF** | **TIFF** | **Word** | **Excel** | **PowerPoint** | **HTML** |
+| --- | --- | --- | --- | --- | --- | --- | --- |
+| Read | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
+
+### Data extraction
+
+| **Read model** | **Text** | **[Language detection](language-support.md#detected-languages-read-api)** |
+| --- | --- | --- |
+prebuilt-read | ✓ |✓ |
## Development options
@@ -25,15 +37,9 @@ The following resources are supported by Form Recognizer v3.0:
|----------|------------|------------|
|**Read model**|
|**prebuilt-read**|
-## Data extraction
-
-| **Read model** | **Text Extraction** | **[Language detection](language-support.md#detected-languages-read-api)** |
-| --- | --- | --- |
-prebuilt-read | ✓ |✓ |
-
-### Try Form Recognizer
+## Try Form Recognizer
-See how text is extracted from forms and documents using the Form Recognizer Studio. You'll need the following assets:
+Try extracting text from forms and documents using the Form Recognizer Studio. You'll need the following assets:
* An Azure subscription—you can [create one for free](https://azure.microsoft.com/free/cognitive-services/)
@@ -41,10 +47,10 @@ See how text is extracted from forms and documents using the Form Recognizer Stu
:::image type="content" source="media/containers/keys-and-endpoint.png" alt-text="Screenshot: keys and endpoint location in the Azure portal.":::
-#### Form Recognizer Studio (preview)
+### Form Recognizer Studio (preview)
> [!NOTE]
-> Form Recognizer studio is available with the preview (v3.0) API.
+> Currently, Form Recognizer Studio doesn't support Microsoft Word, Excel, PowerPoint, and HTML file formats in the Read preview.
***Sample form processed with [Form Recognizer Studio](https://formrecognizer.appliedai.azure.com/studio/read)***
@@ -63,33 +69,47 @@ See how text is extracted from forms and documents using the Form Recognizer Stu
## Input requirements
-* For best results, provide one clear photo or high-quality scan per document.
-* Supported file formats: JPEG/JPG, PNG, BMP, TIFF, and PDF (text-embedded or scanned). Text-embedded PDFs are best to eliminate the possibility of error in character extraction and location.
+* Supported file formats: These include JPEG/JPG, PNG, BMP, TIFF, PDF (text-embedded or scanned). Additionally, the newest API version `2022-06-30-preview` supports Microsoft Word (DOCX), Excel (XLS), PowerPoint (PPT), and HTML files.
* For PDF and TIFF, up to 2000 pages can be processed (with a free tier subscription, only the first two pages are processed).
-* The file size must be less than 500 MB for paid (S0) tier and 4 MB for free (F0) tier (4 MB for the free tier)
+* The file size must be less than 500 MB for paid (S0) tier and 4 MB for free (F0) tier.
* Image dimensions must be between 50 x 50 pixels and 10,000 x 10,000 pixels.
+* The minimum height of the text to be extracted is 12 pixels for a 1024X768 image. This dimension corresponds to about eight font point text at 150 DPI.
## Supported languages and locales
Form Recognizer preview version supports several languages for the read model. *See* our [Language Support](language-support.md) for a complete list of supported handwritten and printed languages.
-## Features
+## Data detection and extraction
-### Text lines and words
+### Pages
-Read API extracts text from documents and images. It accepts PDFs and images of documents and handles printed and/or handwritten text, and supports mixed languages. Text is extracted as text lnes, words, bounding boxes, confidence scores, and style, whether handwritten or not, supported for Latin languages only.
+With the added support for Microsoft Word, Excel, PowerPoint, and HTML files, the page units in the model output are computed as shown:
-### Language detection
+ **File format** | **Computed page unit** | **Total pages** |
+| --- | --- | --- |
+|Images | Each image = 1 page unit | Total images |
+|PDF | Each page in the PDF = 1 page unit | Total pages in the PDF |
+|Word | Up to 3,000 characters = 1 page unit, Each embedded image = 1 page unit | Total pages of up to 3,000 characters each + Total embedded images |
+|Excel | Each worksheet = 1 page unit, Each embedded image = 1 page unit | Total worksheets + Total images
+|PowerPoint| Each slide = 1 page unit, Each embedded image = 1 page unit | Total slides + Total images
+|HTML| Up to 3,000 characters = 1 page unit, embedded or linked images not supported | Total pages of up to 3,000 characters each |
+
+### Text lines and words
-Read adds [language detection](language-support.md#detected-languages-read-api) as a new feature for text lines. Read will predict the language at the text line level along with the confidence score.
+Read extracts print and handwritten style text as `lines` and `words`. The model outputs bounding `polygon` coordinates and `confidence` for the extracted words. The `styles` collection includes any handwritten style for lines if detected along with the spans pointing to the associated text. This feature applies to [supported handwritten languages](language-support.md).
-### Handwritten classification for text lines (Latin only)
+For Microsoft Word, Excel, PowerPoint, and HTML file formats, Read will extract all embedded text as is. For any embedded images, it will run OCR on the images to extract text and append the text from each image as an added entry to the `pages` collection. These added entries will include the extracted text lines and words, their bounding polygons, confidences, and the spans pointing to the associated text.
-The response includes classifying whether each text line is of handwriting style or not, along with a confidence score. This feature is only supported for Latin languages.
+### Language detection
+
+Read adds [language detection](language-support.md#detected-languages-read-api) as a new feature for text lines. Read will predict all detected languages for text lines along with the `confidence` in the `languages` collection under `analyzeResult`.
### Select page (s) for text extraction
-For large multi-page documents, use the `pages` query parameter to indicate specific page numbers or page ranges for text extraction.
+For large multi-page PDF documents, use the `pages` query parameter to indicate specific page numbers or page ranges for text extraction.
+
+> [!NOTE]
+> For Microsoft Word, Excel, PowerPoint, and HTML file formats, the Read API ignores the pages parameter and extracts all pages by default.
## Next steps
diff --git a/articles/applied-ai-services/form-recognizer/concept-receipt.md b/articles/applied-ai-services/form-recognizer/concept-receipt.md
index 8d05f3ad82149..ec85bc975e9fd 100644
--- a/articles/applied-ai-services/form-recognizer/concept-receipt.md
+++ b/articles/applied-ai-services/form-recognizer/concept-receipt.md
@@ -1,13 +1,13 @@
---
title: Form Recognizer receipt model
titleSuffix: Azure Applied AI Services
-description: Concepts encompassing data extraction and analysis using the prebuilt receipt model
+description: Concepts related to data extraction and analysis using the prebuilt receipt model
author: laujan
manager: nitinme
ms.service: applied-ai-services
ms.subservice: forms-recognizer
ms.topic: conceptual
-ms.date: 03/11/2022
+ms.date: 06/06/2022
ms.author: lajanuar
recommendations: false
ms.custom: ignite-fall-2021
@@ -16,7 +16,7 @@ ms.custom: ignite-fall-2021
# Form Recognizer receipt model
-The receipt model combines powerful Optical Character Recognition (OCR) capabilities with deep learning models to analyze and extract key information from sales receipts. Receipts can be of various formats and quality including printed and handwritten receipts. The API extracts key information such as merchant name, merchant phone number, transaction date, tax, and transaction total and returns a structured JSON data representation.
+The receipt model combines powerful Optical Character Recognition (OCR) capabilities with deep learning models to analyze and extract key information from sales receipts. Receipts can be of various formats and quality including printed and handwritten receipts. The API extracts key information such as merchant name, merchant phone number, transaction date, total tax, and transaction total and returns a structured JSON data representation.
***Sample receipt processed with [Form Recognizer Studio](https://formrecognizer.appliedai.azure.com/studio/prebuilt?formType=receipt)***:
@@ -34,7 +34,7 @@ The following tools are supported by Form Recognizer v3.0:
| Feature | Resources | Model ID |
|----------|-------------|-----------|
-|**Receipt model**|
|**prebuilt-receipt**|
### Try Form Recognizer
@@ -64,7 +64,7 @@ See how data, including time and date of transactions, merchant information, and
#### Sample Labeling tool (API v2.1)
-You will need a receipt document. You can use our [sample receipt document](https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/contoso-receipt.png).
+You'll need a receipt document. You can use our [sample receipt document](https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/contoso-receipt.png).
1. On the Sample Labeling tool home page, select **Use prebuilt model to get data**.
@@ -81,7 +81,7 @@ You will need a receipt document. You can use our [sample receipt document](http
* Supported file formats: JPEG/JPG, PNG, BMP, TIFF, and PDF (text-embedded or scanned). Text-embedded PDFs are best to eliminate the possibility of error in character extraction and location.
* For PDF and TIFF, up to 2000 pages can be processed (with a free tier subscription, only the first two pages are processed).
* The file size must be less than 500 MB for paid (S0) tier and 4 MB for free (F0) tier.
-* Image dimensions must be between 50 x 50 pixels and 10000 x 10000 pixels.
+* Image dimensions must be between 50 x 50 pixels and 10,000 x 10,000 pixels.
* PDF dimensions are up to 17 x 17 inches, corresponding to Legal or A3 paper size, or smaller.
* The total size of the training data is 500 pages or less.
* If your PDFs are password-locked, you must remove the lock before submission.
@@ -107,13 +107,13 @@ You will need a receipt document. You can use our [sample receipt document](http
| TransactionTime | Time | Time the receipt was issued | hh-mm-ss (24-hour) |
| Total | Number (USD)| Full transaction total of receipt | Two-decimal float|
| Subtotal | Number (USD) | Subtotal of receipt, often before taxes are applied | Two-decimal float|
-| Tax | Number (USD) | Tax on receipt (often sales tax or equivalent) | Two-decimal float |
+ | Tax | Number (USD) | Total tax on receipt (often sales tax or equivalent). **Renamed to "TotalTax" in 2022-06-30-preview version**. | Two-decimal float |
| Tip | Number (USD) | Tip included by buyer | Two-decimal float|
| Items | Array of objects | Extracted line items, with name, quantity, unit price, and total price extracted | |
-| Name | String | Item name | |
-| Quantity | Number | Quantity of each item | Integer |
+| Name | String | Item description. **Renamed to "Description" in 2022-06-30-preview version**. | |
+| Quantity | Number | Quantity of each item | Two-decimal float |
| Price | Number | Individual price of each item unit| Two-decimal float |
-| Total Price | Number | Total price of line item | Two-decimal float |
+| TotalPrice | Number | Total price of line item | Two-decimal float |
## Form Recognizer preview v3.0
@@ -130,7 +130,7 @@ You will need a receipt document. You can use our [sample receipt document](http
| Items.*.Category | String | Item category, for example, Room, Tax, etc. | |
| Items.*.Date | Date | Item date | yyyy-mm-dd |
| Items.*.Description | String | Item description | |
-| Items.*.TotalPrice | Number | Item total price | Integer |
+| Items.*.TotalPrice | Number | Item total price | Two-decimal float |
| Locale | String | Locale of the receipt, for example, en-US. | ISO language-county code |
| MerchantAddress | String | Listed address of merchant | |
| MerchantAliases | Array| | |
diff --git a/articles/applied-ai-services/form-recognizer/concept-w2.md b/articles/applied-ai-services/form-recognizer/concept-w2.md
index e0811d38ebc95..9010a7ffaf5c8 100644
--- a/articles/applied-ai-services/form-recognizer/concept-w2.md
+++ b/articles/applied-ai-services/form-recognizer/concept-w2.md
@@ -1,13 +1,13 @@
---
-title: Form Recognizer W-2 form prebuilt model
+title: Form Recognizer W-2 prebuilt model
titleSuffix: Azure Applied AI Services
-description: Data extraction and analysis extraction using the prebuilt-tax Form W-2 model
+description: Data extraction and analysis extraction using the prebuilt W-2 model
author: laujan
manager: nitinme
ms.service: applied-ai-services
ms.subservice: forms-recognizer
ms.topic: conceptual
-ms.date: 03/25/2022
+ms.date: 06/06/2022
ms.author: lajanuar
recommendations: false
---
@@ -24,7 +24,7 @@ A W-2 is a multipart form divided into state and federal sections and consisting
## Development options
-The prebuilt W-2 form, model is supported by Form Recognizer v3.0 with the following tools:
+The prebuilt W-2 model is supported by Form Recognizer v3.0 with the following tools:
| Feature | Resources | Model ID |
|----------|-------------|-----------|
@@ -32,7 +32,7 @@ The prebuilt W-2 form, model is supported by Form Recognizer v3.0 with the follo
### Try Form Recognizer
-See how data is extracted from W-2 forms using the Form Recognizer Studio. You'll need the following resources:
+Try extracting data from W-2 forms using the Form Recognizer Studio. You'll need the following resources:
* An Azure subscription—you can [create one for free](https://azure.microsoft.com/free/cognitive-services/)
@@ -45,7 +45,7 @@ See how data is extracted from W-2 forms using the Form Recognizer Studio. You'l
> [!NOTE]
> Form Recognizer studio is available with v3.0 preview API.
-1. On the [Form Recognizer Studio home page](https://formrecognizer.appliedai.azure.com/studio), select **W-2 form**.
+1. On the [Form Recognizer Studio home page](https://formrecognizer.appliedai.azure.com/studio), select **W-2**.
1. You can analyze the sample W-2 document or select the **➕ Add** button to upload your own sample.
@@ -71,7 +71,7 @@ See how data is extracted from W-2 forms using the Form Recognizer Studio. You'l
| Model | Language—Locale code | Default |
|--------|:----------------------|:---------|
-|prebuilt-tax.us.w2|
|English (United States)—en-US|
## Field extraction
@@ -117,7 +117,6 @@ See how data is extracted from W-2 forms using the Form Recognizer Studio. You'l
| TaxYear | | Number | Tax year | 2020 |
| W2FormVariant | | String | The variants of W-2 forms, including "W-2", "W-2AS", "W-2CM", "W-2GU", "W-2VI" | W-2 |
-
### Migration guide and REST API v3.0
* Follow our [**Form Recognizer v3.0 migration guide**](v3-migration-guide.md) to learn how to use the preview version in your applications and workflows.
@@ -127,9 +126,10 @@ See how data is extracted from W-2 forms using the Form Recognizer Studio. You'l
## Next steps
* Complete a Form Recognizer quickstart:
-
-|Programming language | :::image type="content" source="media/form-recognizer-icon.png" alt-text="Form Recognizer icon from the Azure portal."::: |Programming language
-|:---:|:---:|:---:|
-|[**C#**](quickstarts/try-v3-csharp-sdk.md#prebuilt-model)||[**JavaScript**](quickstarts/try-v3-javascript-sdk.md#prebuilt-model)|
-|[**Java**](quickstarts/try-v3-java-sdk.md#prebuilt-model)||[**Python**](quickstarts/try-v3-python-sdk.md#prebuilt-model)|
-|[**REST API**](quickstarts/try-v3-rest-api.md)|||
+> [!div class="checklist"]
+>
+> * [**REST API**](quickstarts/try-v3-rest-api.md)
+> * [**C# SDK**](quickstarts/try-v3-csharp-sdk.md#prebuilt-model)
+> * [**Python SDK**](quickstarts/try-v3-python-sdk.md#prebuilt-model)
+> * [**Java SDK**](quickstarts/try-v3-java-sdk.md#prebuilt-model)
+> * [**JavaScript**](quickstarts/try-v3-javascript-sdk.md#prebuilt-model)
diff --git a/articles/applied-ai-services/form-recognizer/containers/form-recognizer-container-configuration.md b/articles/applied-ai-services/form-recognizer/containers/form-recognizer-container-configuration.md
index 02b3459bf1f8d..e802008f9572b 100644
--- a/articles/applied-ai-services/form-recognizer/containers/form-recognizer-container-configuration.md
+++ b/articles/applied-ai-services/form-recognizer/containers/form-recognizer-container-configuration.md
@@ -7,7 +7,7 @@ manager: nitinme
ms.service: applied-ai-services
ms.subservice: forms-recognizer
ms.topic: how-to
-ms.date: 03/25/2022
+ms.date: 06/06/2022
ms.author: lajanuar
---
# Configure Form Recognizer containers
@@ -16,7 +16,7 @@ ms.author: lajanuar
>
> Form Recognizer containers are in gated preview. To use them, you must submit an [online request](https://customervoice.microsoft.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR7en2Ais5pxKtso_Pz4b1_xUNlpBU1lFSjJUMFhKNzVHUUVLN1NIOEZETiQlQCN0PWcu), and have it approved. For more information, See [**Request approval to run container**](form-recognizer-container-install-run.md#request-approval-to-run-the-container).
-With Azure Form Recognizer containers, you can build an application architecture that's optimized to take advantage of both robust cloud capabilities and edge locality. Containers provide a minimalist, isolated environment that can be easily deployed on-premise and in the cloud. In this article, you'll learn to configure the Form Recognizer container run-time environment by using the `docker compose` command arguments. Form Recognizer features are supported by six Form Recognizer feature containers—**Layout**, **Business Card**,**ID Document**, **Receipt**, **Invoice**, **Custom**. These containers have several required settings and a few optional settings. For a few examples, see the [Example docker-compose.yml file](#example-docker-composeyml-file) section.
+With Azure Form Recognizer containers, you can build an application architecture that's optimized to take advantage of both robust cloud capabilities and edge locality. Containers provide a minimalist, isolated environment that can be easily deployed on-premise and in the cloud. In this article, you'll learn to configure the Form Recognizer container run-time environment by using the `docker compose` command arguments. Form Recognizer features are supported by six Form Recognizer feature containers—**Layout**, **Business Card**,**ID Document**, **Receipt**, **Invoice**, **Custom**. These containers have both required and optional settings. For a few examples, see the [Example docker-compose.yml file](#example-docker-composeyml-file) section.
## Configuration settings
@@ -25,9 +25,9 @@ Each container has the following configuration settings:
|Required|Setting|Purpose|
|--|--|--|
|Yes|[Key](#key-and-billing-configuration-setting)|Tracks billing information.|
-|Yes|[Billing](#key-and-billing-configuration-setting)|Specifies the endpoint URI of the service resource on Azure. _See_ [Billing]](form-recognizer-container-install-run.md#billing), for more information. For more information and a complete list of regional endpoints, _see_ [Custom subdomain names for Cognitive Services](../../../cognitive-services/cognitive-services-custom-subdomains.md).|
+|Yes|[Billing](#key-and-billing-configuration-setting)|Specifies the endpoint URI of the service resource on Azure. For more information, _see_ [Billing](form-recognizer-container-install-run.md#billing). For more information and a complete list of regional endpoints, _see_ [Custom subdomain names for Cognitive Services](../../../cognitive-services/cognitive-services-custom-subdomains.md).|
|Yes|[Eula](#eula-setting)| Indicates that you've accepted the license for the container.|
-|No|[ApplicationInsights](#applicationinsights-setting)|Enables adding [Azure Application Insights](/azure/application-insights) telemetry support to your container.|
+|No|[ApplicationInsights](#applicationinsights-setting)|Enables adding [Azure Application Insights](/azure/application-insights) customer content support to your container.|
|No|[Fluentd](#fluentd-settings)|Writes log and, optionally, metric data to a Fluentd server.|
|No|HTTP Proxy|Configures an HTTP proxy for making outbound requests.|
|No|[Logging](#logging-settings)|Provides ASP.NET Core logging support for your container. |
diff --git a/articles/applied-ai-services/form-recognizer/create-a-form-recognizer-resource.md b/articles/applied-ai-services/form-recognizer/create-a-form-recognizer-resource.md
index 4f6e9a07d1260..ca600f1a576bf 100644
--- a/articles/applied-ai-services/form-recognizer/create-a-form-recognizer-resource.md
+++ b/articles/applied-ai-services/form-recognizer/create-a-form-recognizer-resource.md
@@ -7,7 +7,7 @@ manager: nitinme
ms.service: applied-ai-services
ms.subservice: forms-recognizer
ms.topic: how-to
-ms.date: 01/06/2022
+ms.date: 06/06/2022
ms.author: bemabonsu
recommendations: false
#Customer intent: I want to learn how to use create a Form Recognizer service in the Azure portal.
@@ -61,7 +61,7 @@ Let's get started:
1. Copy the key and endpoint values from your Form Recognizer resource paste them in a convenient location, such as *Microsoft Notepad*. You'll need the key and endpoint values to connect your application to the Form Recognizer API.
-1. If your overview page does not have the keys and endpoint visible, you can select the **Keys and Endpoint** button on the left navigation bar and retrieve them there.
+1. If your overview page doesn't have the keys and endpoint visible, you can select the **Keys and Endpoint** button on the left navigation bar and retrieve them there.
:::image border="true" type="content" source="media/containers/keys-and-endpoint.png" alt-text="Still photo showing how to access resource key and endpoint URL":::
@@ -71,4 +71,9 @@ That's it! You're now ready to start automating data extraction using Azure Form
* Try the [Form Recognizer Studio](concept-form-recognizer-studio.md), an online tool for visually exploring, understanding, and integrating features from the Form Recognizer service into your applications.
-* Complete a Form Recognizer [C#](quickstarts/try-v3-csharp-sdk.md),[Python](quickstarts/try-v3-python-sdk.md), [Java](quickstarts/try-v3-java-sdk.md), or [JavaScript](quickstarts/try-v3-javascript-sdk.md) quickstart and get started creating a document processing app in the development language of your choice.
+* Complete a Form Recognizer quickstart and get started creating a document processing app in the development language of your choice:
+
+ * [C#](quickstarts/try-v3-csharp-sdk.md)
+ * [Python](quickstarts/try-v3-python-sdk.md)
+ * [Java](quickstarts/try-v3-java-sdk.md)
+ * [JavaScript](quickstarts/try-v3-javascript-sdk.md)
\ No newline at end of file
diff --git a/articles/applied-ai-services/form-recognizer/create-sas-tokens.md b/articles/applied-ai-services/form-recognizer/create-sas-tokens.md
new file mode 100644
index 0000000000000..bd7961793a6b0
--- /dev/null
+++ b/articles/applied-ai-services/form-recognizer/create-sas-tokens.md
@@ -0,0 +1,181 @@
+---
+title: Create SAS tokens for containers and blobs with the Azure portal
+description: Learn how to create shared access signature (SAS) tokens for containers using Azure portal, or Azure Explorer
+ms.topic: how-to
+author: laujan
+manager: nitinme
+ms.service: applied-ai-services
+ms.subservice: forms-recognizer
+ms.date: 05/27/2022
+ms.author: lajanuar
+recommendations: false
+---
+
+# Create SAS tokens for storage containers
+
+ In this article, you'll learn how to create user delegation, shared access signature (SAS) tokens, using the Azure portal or Azure Storage Explorer. User delegation SAS tokens are secured with Azure AD credentials. SAS tokens provide secure, delegated access to resources in your Azure storage account.
+
+At a high level, here's how SAS tokens work:
+
+* Your application submits the SAS token to Azure Storage as part of a REST API request.
+
+* If the storage service verifies that the SAS is valid, the request is authorized.
+
+* If the SAS token is deemed invalid, the request is declined and the error code 403 (Forbidden) is returned.
+
+Azure Blob Storage offers three resource types:
+
+* **Storage** accounts provide a unique namespace in Azure for your data.
+* **Data storage containers** are located in storage accounts and organize sets of blobs.
+* **Blobs** are located in containers and store text and binary data such as files, text, and images.
+
+## When to use a SAS token
+
+* **Training custom models**. Your assembled set of training documents *must* be uploaded to an Azure Blob Storage container. You can opt to use a SAS token to grant access to your training documents.
+
+* **Using storage containers with public access**. You can opt to use a SAS token to grant limited access to your storage resources that have public read access.
+
+ > [!IMPORTANT]
+ >
+ > * If your Azure storage account is protected by a virtual network or firewall, you can't grant access with a SAS token. You'll have to use a [managed identity](managed-identities.md) to grant access to your storage resource.
+ >
+ > * [Managed identity](managed-identities-secured-access.md) supports both privately and publicly accessible Azure Blob Storage accounts.
+ >
+ > * SAS tokens grant permissions to storage resources, and should be protected in the same manner as an account key.
+ >
+ > * Operations that use SAS tokens should be performed only over an HTTPS connection, and SAS URIs should only be distributed on a secure connection such as HTTPS.
+
+## Prerequisites
+
+To get started, you'll need:
+
+* An active [Azure account](https://azure.microsoft.com/free/cognitive-services/). If you don't have one, you can [create a free account](https://azure.microsoft.com/free/).
+
+* A [Form Recognizer](https://portal.azure.com/#create/Microsoft.CognitiveServicesFormRecognizer) or [Cognitive Services multi-service](https://portal.azure.com/#create/Microsoft.CognitiveServicesAllInOne) resource.
+
+* A **standard performance** [Azure Blob Storage account](https://portal.azure.com/#create/Microsoft.StorageAccount-ARM). You'll create containers to store and organize your blob data within your storage account. If you don't know how to create an Azure storage account with a storage container, follow these quickstarts:
+
+ * [Create a storage account](../../storage/common/storage-account-create.md). When you create your storage account, select **Standard** performance in the **Instance details** > **Performance** field.
+ * [Create a container](../../storage/blobs/storage-quickstart-blobs-portal.md#create-a-container). When you create your container, set **Public access level** to **Container** (anonymous read access for containers and blobs) in the **New Container** window.
+
+## Upload your documents
+
+1. Go to the [Azure portal](https://portal.azure.com/#home).
+ * Select **Your storage account** → **Data storage** → **Containers**.
+
+ :::image type="content" source="media/sas-tokens/data-storage-menu.png" alt-text="Screenshot that shows the Data storage menu in the Azure portal.":::
+
+1. Select a container from the list.
+
+1. Select **Upload** from the menu at the top of the page.
+
+ :::image type="content" source="media/sas-tokens/container-upload-button.png" alt-text="Screenshot that shows the container Upload button in the Azure portal.":::
+
+1. The **Upload blob** window will appear. Select your files to upload.
+
+ :::image type="content" source="media/sas-tokens/upload-blob-window.png" alt-text="Screenshot that shows the Upload blob window in the Azure portal.":::
+
+ > [!NOTE]
+ > By default, the REST API uses form documents located at the root of your container. You can also use data organized in subfolders if specified in the API call. For more information, see [Organize your data in subfolders](./build-training-data-set.md#organize-your-data-in-subfolders-optional).
+
+## Use the Azure portal
+
+The Azure portal is a web-based console that enables you to manage your Azure subscription and resources using a graphical user interface (GUI).
+
+1. Go to the [Azure portal](https://portal.azure.com/#home) and navigate as follows:
+
+ * **Your storage account** → **containers** → **your container**.
+
+1. Select **Generate SAS** from the menu near the top of the page.
+
+1. Select **Signing method** → **User delegation key**.
+
+1. Define **Permissions** by selecting or clearing the appropriate checkbox.
+
+ * Make sure the **Read**, **Write**, **Delete**, and **List** permissions are selected.
+
+ :::image type="content" source="media/sas-tokens/sas-permissions.png" alt-text="Screenshot that shows the SAS permission fields in the Azure portal.":::
+
+ >[!IMPORTANT]
+ >
+ > * If you receive a message similar to the following one, you'll also need to assign access to the blob data in your storage account:
+ >
+ > :::image type="content" source="media/sas-tokens/need-permissions.png" alt-text="Screenshot that shows the lack of permissions warning.":::
+ >
+ > * [Azure role-based access control](../../role-based-access-control/overview.md) (Azure RBAC) is the authorization system used to manage access to Azure resources. Azure RBAC helps you manage access and permissions for your Azure resources.
+ > * [Assign an Azure role for access to blob data](../../role-based-access-control/role-assignments-portal.md?tabs=current) to assign a role that allows for read, write, and delete permissions for your Azure storage container. *See* [Storage Blob Data Contributor](../../role-based-access-control/built-in-roles.md#storage-blob-data-contributor).
+
+1. Specify the signed key **Start** and **Expiry** times.
+
+ * When you create a SAS token, the default duration is 48 hours. After 48 hours, you'll need to create a new token.
+ * Consider setting a longer duration period for the time you'll be using your storage account for Form Recognizer Service operations.
+ * The value for the expiry time is a maximum of seven days from the creation of the SAS token.
+
+1. The **Allowed IP addresses** field is optional and specifies an IP address or a range of IP addresses from which to accept requests. If the request IP address doesn't match the IP address or address range specified on the SAS token, it won't be authorized.
+
+1. The **Allowed protocols** field is optional and specifies the protocol permitted for a request made with the SAS token. The default value is HTTPS.
+
+1. Select **Generate SAS token and URL**.
+
+1. The **Blob SAS token** query string and **Blob SAS URL** appear in the lower area of the window. To use the Blob SAS token, append it to a storage service URI.
+
+1. Copy and paste the **Blob SAS token** and **Blob SAS URL** values in a secure location. They're displayed only once and can't be retrieved after the window is closed.
+
+1. To [construct a SAS URL](#use-your-sas-url-to-grant-access), append the SAS token (URI) to the URL for a storage service.
+
+## Use Azure Storage Explorer
+
+Azure Storage Explorer is a free standalone app that enables you to easily manage your Azure cloud storage resources from your desktop.
+
+### Get started
+
+* You'll need the [**Azure Storage Explorer**](../../vs-azure-tools-storage-manage-with-storage-explorer.md) app installed in your Windows, macOS, or Linux development environment.
+
+* After the Azure Storage Explorer app is installed, [connect it the storage account](../../vs-azure-tools-storage-manage-with-storage-explorer.md?tabs=windows#connect-to-a-storage-account-or-service) you're using for Form Recognizer.
+
+### Create your SAS tokens
+
+1. Open the Azure Storage Explorer app on your local machine and navigate to your connected **Storage Accounts**.
+1. Expand the Storage Accounts node and select **Blob Containers**.
+1. Expand the Blob Containers node and right-click a storage **container** node to display the options menu.
+1. Select **Get Shared Access Signature** from options menu.
+1. In the **Shared Access Signature** window, make the following selections:
+ * Select your **Access policy** (the default is none).
+ * Specify the signed key **Start** and **Expiry** date and time. A short lifespan is recommended because, once generated, a SAS can't be revoked.
+ * Select the **Time zone** for the Start and Expiry date and time (default is Local).
+ * Define your container **Permissions** by selecting the **Read**, **Write**, **List**, and **Delete** checkboxes.
+ * Select **key1** or **key2**.
+ * Review and select **Create**.
+
+1. A new window will appear with the **Container** name, **SAS URL**, and **Query string** for your container.
+
+1. **Copy and paste the SAS URL and query string values in a secure location. They'll only be displayed once and can't be retrieved once the window is closed.**
+
+1. To [construct a SAS URL](#use-your-sas-url-to-grant-access), append the SAS token (URI) to the URL for a storage service.
+
+## Use your SAS URL to grant access
+
+The SAS URL includes a special set of [query parameters](/rest/api/storageservices/create-user-delegation-sas#assign-permissions-with-rbac). Those parameters indicate how the resources may be accessed by the client.
+
+### REST API
+
+To use your SAS URL with the [REST API](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v2-1/operations/TrainCustomModelAsync), add the SAS URL to the request body:
+
+ ```json
+ {
+ "source":""
+ }
+ ```
+
+### Sample Labeling Tool
+
+To use your SAS URL with the [Form Recognizer labeling tool](https://fott-2-1.azurewebsites.net/connections/create), add the SAS URL to the **Connection Settings** → **Azure blob container** → **SAS URI** field:
+
+ :::image type="content" source="media/sas-tokens/fott-add-sas-uri.png" alt-text="Screenshot that shows the SAS URI field.":::
+
+That's it! You've learned how to create SAS tokens to authorize how clients access your data.
+
+## Next step
+
+> [!div class="nextstepaction"]
+> [Build a training data set](build-training-data-set.md)
diff --git a/articles/applied-ai-services/form-recognizer/encrypt-data-at-rest.md b/articles/applied-ai-services/form-recognizer/encrypt-data-at-rest.md
index 69a919d05372f..a082921dd0012 100644
--- a/articles/applied-ai-services/form-recognizer/encrypt-data-at-rest.md
+++ b/articles/applied-ai-services/form-recognizer/encrypt-data-at-rest.md
@@ -9,7 +9,7 @@ ms.subservice: forms-recognizer
ms.topic: conceptual
ms.date: 08/28/2020
ms.author: egeaney
-#Customer intent: As a user of the Form Recognizer service, I want to learn how encryption at rest works.
+ms.custom: applied-ai-non-critical-form
---
# Form Recognizer encryption of data at rest
@@ -26,4 +26,4 @@ Azure Form Recognizer automatically encrypts your data when persisting it to the
## Next steps
* [Form Recognizer Customer-Managed Key Request Form](https://aka.ms/cogsvc-cmk)
-* [Learn more about Azure Key Vault](../../key-vault/general/overview.md)
\ No newline at end of file
+* [Learn more about Azure Key Vault](../../key-vault/general/overview.md)
diff --git a/articles/applied-ai-services/form-recognizer/faq.yml b/articles/applied-ai-services/form-recognizer/faq.yml
index 907c43422345b..e847467a9ffb1 100644
--- a/articles/applied-ai-services/form-recognizer/faq.yml
+++ b/articles/applied-ai-services/form-recognizer/faq.yml
@@ -7,7 +7,7 @@ metadata:
ms.service: applied-ai-services
ms.subservice: forms-recognizer
ms.topic: faq
- ms.date: 05/23/2022
+ ms.date: 06/06/2022
ms.author: lajanuar
title: Form Recognizer frequently asked questions
@@ -72,7 +72,7 @@ sections:
Azure Form Recognizer is a cloud-based Azure Applied AI Service that is built using optical character recognition (OCR), Text Analytics, and Custom Text from Azure Cognitive Services.
- OCR is used to extract text from printed and handwritten documents.
+ OCR is used to extract typeface and handwritten text documents.
Form Recognizer uses OCR to detect and extract information from forms and documents supported by AI to provide more structure and information to the text extraction.
@@ -100,7 +100,7 @@ sections:
- For signature and region labeling, don't include the surrounding text.
- See [[Interpret and improve accuracy and confidence scores](concept-accuracy-confidence.md#ensure-high-model-accuracy)]
+ See [Interpret and improve accuracy and confidence scores](concept-accuracy-confidence.md#ensure-high-model-accuracy)
- question: |
What is the confidence score and how is it calculated?
@@ -154,7 +154,7 @@ sections:
Form Recognizer offers the latest development options within the following platforms:
- - [REST API](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v3-0-preview-1/operations/AnalyzeDocument)
+ - [REST API](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2022-06-30-preview/operations/AnalyzeDocument)
- [Form Recognizer Studio](https://formrecognizer.appliedai.azure.com/studio)
@@ -173,11 +173,11 @@ sections:
This table provides links to the latest SDK versions and shows the relationship between supported Form Recognizer SDK and API versions:
| Supported Language | Azure SDK client-library|API reference |Supported API version|
- | ----------- | --------|--------|:---------------------: |
- | C#/.NET| [4.0.0-beta.3](https://azuresdkdocs.blob.core.windows.net/$web/dotnet/Azure.AI.FormRecognizer/4.0.0-beta.3/index.html)|[.NET SDK](/dotnet/api/azure.ai.formrecognizer.documentanalysis?view=azure-dotnet-preview&preserve-view=true) |2022-01-30-preview, 2021-09-30-preview, v2.1, v2.0 |
- | Java | [4.0.0-beta.4](https://azuresdkdocs.blob.core.windows.net/$web/java/azure-ai-formrecognizer/4.0.0-beta.4/index.html)|[Java SDK](/java/api/overview/azure/ai-formrecognizer-readme?view=azure-java-preview&preserve-view=true)|2022-01-30-preview, 2021-09-30-preview, v2.1, v2.0 |
- | JavaScript| [4.0.0-beta.3](https://azuresdkdocs.blob.core.windows.net/$web/javascript/azure-ai-form-recognizer/4.0.0-beta.3/index.html)|[JavaScript SDK](/javascript/api/@azure/ai-form-recognizer/?view=azure-node-preview&preserve-view=true) |2022-01-30-preview, 2021-09-30-preview, v2.1, v2.0 |
- | Python | [3.2.0b3](https://azuresdkdocs.blob.core.windows.net/$web/python/azure-ai-formrecognizer/3.2.0b3/index.html) |[Python SDK](/python/api/azure-ai-formrecognizer/azure.ai.formrecognizer?view=azure-python-preview&preserve-view=true) |2022-01-30-preview, 2021-09-30-preview, v2.1, v2.0 |
+ | ----- | -----|-----|-----|
+ | C#/.NET| [4.0.0-beta.3](https://azuresdkdocs.blob.core.windows.net/$web/dotnet/Azure.AI.FormRecognizer/4.0.0-beta.3/index.html)|[.NET SDK](/dotnet/api/azure.ai.formrecognizer.documentanalysis?view=azure-dotnet-preview&preserve-view=true) |2022-06-30, 2022-01-30, 2021-09-30-preview, v2.1, v2.0 |
+ | Java | [4.0.0-beta.4](https://azuresdkdocs.blob.core.windows.net/$web/java/azure-ai-formrecognizer/4.0.0-beta.4/index.html)|[Java SDK](/java/api/overview/azure/ai-formrecognizer-readme?view=azure-java-preview&preserve-view=true)| 2022-06-30, 2022-01-30, 2021-09-30-preview, v2.1, v2.0 |
+ | JavaScript | [4.0.0-beta.3](https://azuresdkdocs.blob.core.windows.net/$web/javascript/azure-ai-form-recognizer/4.0.0-beta.3/index.html)|[JavaScript SDK](/javascript/api/@azure/ai-form-recognizer/?view=azure-node-preview&preserve-view=true) |2022-06-30, 2022-01-30, 2021-09-30-preview, v2.1, v2.0|
+ | Python | [3.2.0b3](https://azuresdkdocs.blob.core.windows.net/$web/python/azure-ai-formrecognizer/3.2.0b3/index.html) |[Python SDK](/python/api/azure-ai-formrecognizer/azure.ai.formrecognizer?view=azure-python-preview&preserve-view=true) |2022-06-30, 2022-01-30, 2021-09-30-preview, v2.1, v2.0|
- question: |
What is the difference between Form Recognizer v3.0 and v2.1 and how do I migrate to the latest version?
@@ -209,10 +209,19 @@ sections:
To ensure the best results, see [input requirements](concept-model-overview.md#input-requirements).
- question: |
- How can I specify a specific range of pages to be analyzed in a document?
+ How can I specify a specific range of pages to be analyzed in a document?
answer: |
- There's a parameter `pages` supported in both v2.1 and v3.0 REST API that you can specify for multi-page PDF and TIFF documents. Accepted input includes single pages (for example,'1, 2' -> pages 1 and 2 will be processed), finite (for example '2-5' -> pages 2 to 5 will be processed) and open-ended ranges (for example '5-' -> all the pages from page 5 will be processed & for example, '-10' -> pages 1 to 10 will be processed). These parameters can be mixed together and ranges are allowed to overlap (for example, '-5, 1, 3, 5-10' - pages 1 to 10 will be processed). The service will accept the request if it can process at least one page of the document (for example, using '5-100' on a five page document is a valid input where page 5 will be processed). If no page range is provided, the entire document will be processed.
+ - The parameter `pages`(supported in both v2.1 and v3.0 REST API) enables you to specify pages for multi-page PDF and TIFF documents. Accepted input includes the following ranges:
+
+ - Single pages (for example,'1, 2' -> pages 1 and 2 will be processed).- Finite (for example '2-5' -> pages 2 to 5 will be processed)
+ - Open-ended ranges (for example '5-' -> all the pages from page 5 will be processed & for example, '-10' -> pages 1 to 10 will be processed).
+
+ - These parameters can be mixed together and ranges are allowed to overlap (for example, '-5, 1, 3, 5-10' - pages 1 to 10 will be processed).
+
+ - The service will accept the request if it can process at least one page of the document. For example, using '5-100' on a five page document is a valid input where page 5 will be processed.
+
+ - If no page range is provided, the entire document will be processed.
- question: |
Both Form Recognizer Studio and the FOTT sample labeling tool are available. Which one should I use?
@@ -234,6 +243,12 @@ sections:
- When you submit a document for analysis, all pages are analyzed unless you specify a page range with the `pages` parameter in your request.
+ - When analyzing Microsoft Word and HTML files with the new Read OCR model, pages are counted in blocks of 3,000 characters each. For example, if your document contains 7,000 characters, it will be counted as three pages as two pages with 3,000 characters each and one page with 1,000 characters.
+
+ - In addition, if your Microsoft Word, Excel, and PowerPoint documents have embedded images, each image will be analyzed for text extraction and counted as a page. Therefore, the total analyzed pages for Microsoft Office documents will be equal to the sum of total text pages and total images analyzed. In the previous example if the document contains 2 embedded images, the total page count in the service output will be 3 + 2 equaling five pages.
+
+ - When analyzing Microsoft Excel and PowerPoint documents with the new Read OCR model, each worksheet and slide is counted as one page respectively.
+
- Training a custom model is always free with Form Recognizer. You’re only charged when a model is used to analyze a document.
- Container pricing is the same as cloud service pricing.
@@ -254,7 +269,7 @@ sections:
- If you find that you’re being throttled on the number of POST requests, consider adding a delay between the requests.
- Increase the workload gradually. Avoid sharp changes.
-
+
- [Create a support request](service-limits.md#create-and-submit-support-request) to increase transactions per second(TPS) limit.
Learn more about Form Recognizer [service quotas and limits](service-limits.md)
@@ -263,7 +278,7 @@ sections:
How long will it take to analyze a document?
answer: |
Form Recognizer is a multi-tenanted service where latency for similar documents is comparable but not always identical. The time to analyze a document depends on the size (for example, number of pages) and associated content on each page.
-
+
Latency is the amount of time it takes for an API server to handle and process an incoming request and deliver the outgoing response to the client. Occasional variability in latency and performance is inherent in any micro-service-based, stateless, asynchronous service that processes images and large documents at scale. While we're continuously scaling up the hardware and capacity and scaling capabilities, you may still see latency issues at run time.
- name: Custom models
@@ -323,7 +338,7 @@ sections:
If the number of models I want to compose exceeds the upper limit of composed model, what are the alternatives?
answer: |
You can classify the documents before calling the custom model or consider [Custom neural model](concept-custom-neural.md):
-
+
- Use [Read model](concept-read.md) and build a classification based on the extracted text from the documents and certain phrases using code, regular expressions, search etc.
- If you want to extract the same fields from various structured, semi-structured, and unstructured documents. Consider using the deep learning [custom neural model](concept-custom-neural.md). Learn more about the [differences between custom template model and custom neural model](concept-custom.md#compare-model-features).
@@ -362,7 +377,7 @@ sections:
- Do your tables span across multiple pages? If so, to avoid having to label all of the pages, split the PDF into pages prior to sending it to Form Recognizer. Following the analysis, post-process the pages to a single table.
- If you’re creating custom models, refer to [Labeling as tables](quickstarts/try-v3-form-recognizer-studio.md#labeling-as-tables). Dynamic tables have a variable number of rows for each given column. Fixed tables have a constant number of rows for each given column.
-
+
- question: |
How can I move my trained models from one environment (like beta) to another (like production)?
answer: |
@@ -389,6 +404,18 @@ sections:
- name: Form Recognizer Studio
questions:
+ - question: |
+ What permissions do I need to access Form Recognizer Studio?
+ answer: |
+
+ - You need an active [Azure account](https://azure.microsoft.com/free/cognitive-services/) and subscription with at least a **Reader** role to access Form Recognizer Studio.
+
+ - For **document analysis and prebuilt models**, you need full access—**Contributor** role—to at least one [Form Recognizer](https://portal.azure.com/#create/Microsoft.CognitiveServicesFormRecognizer) or [Cognitive Services multi-service](https://portal.azure.com/#create/Microsoft.CognitiveServicesAllInOne) resource to enter the analyze page. Once you access the model analyze page, you can change the endpoint and key to access other resources, if needed.
+
+ - For custom models, you can use the endpoint and key of a [Form Recognizer](https://portal.azure.com/#create/Microsoft.CognitiveServicesFormRecognizer) or [Cognitive Services multi-service](https://portal.azure.com/#create/Microsoft.CognitiveServicesAllInOne) resource to create a project, and access to at least one blob storage account.
+
+ - For more information, *see* [Azure AD built-in roles](/azure/role-based-access-control/built-in-roles).
+
- question: |
I have multiple pages in a document. Why are there only two pages analyzed in Form Recognizer Studio?
answer: |
@@ -400,7 +427,7 @@ sections:
answer: |
- In Form Recognizer Studio, you can select the top right gear button (Settings), under Directory, search and select the directory from the list and select on Switch Directory. You'll be prompted to sign in again after switching directory.
-
+
- Switching subscriptions or resources can be done under Settings -> Resource tab.
- name: Containers
@@ -427,7 +454,7 @@ sections:
Form Recognizer connected containers send billing information to Azure by using a Form Recognizer resource on your Azure account. Connected containers don't send customer data, such as the image or text that's being analyzed, to Microsoft. See the [Cognitive Services container FAQ](../../cognitive-services/containers/disconnected-container-faq.yml#how-does-billing-work) for an example of the information sent to Microsoft for billing.
- question: |
- I received an "OutOfQuota" error message: "Container isn't in a valid state. Subscription validation failed with status 'OutOfQuota'. Api Key is out of quota".
+ I received an "OutOfQuota" error message: "Container isn't in a valid state. Subscription validation failed with status 'OutOfQuota'. API key is out of quota".
answer: |
Form Recognizer connected containers send billing information to Azure by using a Form Recognizer resource on your Azure account. You could get this message if the containers can't communicate with the billing endpoint.
diff --git a/articles/applied-ai-services/form-recognizer/generate-sas-tokens.md b/articles/applied-ai-services/form-recognizer/generate-sas-tokens.md
deleted file mode 100644
index 63305541f6cdc..0000000000000
--- a/articles/applied-ai-services/form-recognizer/generate-sas-tokens.md
+++ /dev/null
@@ -1,157 +0,0 @@
----
-title: Generate SAS tokens for containers and blobs with the Azure portal
-description: Learn how to generate shared access signature (SAS) tokens for containers and blobs in the Azure portal.
-ms.topic: how-to
-author: laujan
-manager: nitinme
-ms.service: applied-ai-services
-ms.subservice: forms-recognizer
-ms.date: 09/23/2021
-ms.author: lajanuar
-recommendations: false
----
-
-# Generate SAS tokens for storage containers
-
-In this article, you'll learn how to generate user delegation shared access signature (SAS) tokens for Azure Blob Storage containers. A user delegation SAS token is signed with Azure Active Directory (Azure AD) credentials instead of Azure Storage keys. It provides superior secure and delegated access to resources in your Azure storage account.
-
-At a high level, here's how it works: your application provides the SAS token to Azure Storage as part of a request. If the storage service verifies that the shared access signature is valid, the request is authorized. If the shared access signature is considered invalid, the request is declined with error code 403 (Forbidden).
-
-Azure Blob Storage offers three types of resources:
-
-* **Storage** accounts provide a unique namespace in Azure for your data.
-* **Containers** are located in storage accounts and organize sets of blobs.
-* **Blobs** are located in containers and store text and binary data.
-
-> [!NOTE]
->
-> * If your Azure storage account is protected by a virtual network or firewall, you can't grant access by using a SAS token. You'll have to use a [managed identity](managed-identity-byos.md) to grant access to your storage resource.
-> * [Managed identity](managed-identity-byos.md) supports both privately and publicly accessible Azure Blob Storage accounts.
->
-
-## When to use a shared access signature
-
-* If you're using storage containers with public access, you can opt to use a SAS token to grant limited access to your storage resources.
-* When you're training a custom model, your assembled set of training documents *must* be uploaded to an Azure Blob Storage container. You can grant permission to your training resources with a user delegation SAS token.
-
-## Prerequisites
-
-To get started, you'll need:
-
-* An active [Azure account](https://azure.microsoft.com/free/cognitive-services/). If you don't have one, you can [create a free account](https://azure.microsoft.com/free/).
-* A [Form Recognizer](https://portal.azure.com/#create/Microsoft.CognitiveServicesFormRecognizer) or [Cognitive Services multi-service](https://portal.azure.com/#create/Microsoft.CognitiveServicesAllInOne) resource.
-* A **standard performance** [Azure Blob Storage account](https://portal.azure.com/#create/Microsoft.StorageAccount-ARM). You'll create containers to store and organize your blob data within your storage account. If you don't know how to create an Azure storage account with a container, following these quickstarts:
-
- * [Create a storage account](../../storage/common/storage-account-create.md). When you create your storage account, select **Standard** performance in the **Instance details** > **Performance** field.
- * [Create a container](../../storage/blobs/storage-quickstart-blobs-portal.md#create-a-container). When you create your container, set **Public access level** to **Container** (anonymous read access for containers and blobs) in the **New Container** window.
-
-## Upload your documents
-
-1. Go to the [Azure portal](https://portal.azure.com/#home). Select **Your storage account** > **Data storage** > **Containers**.
-
- :::image type="content" source="media/sas-tokens/data-storage-menu.png" alt-text="Screenshot that shows the Data storage menu in the Azure portal.":::
-
-1. Select a container from the list.
-1. Select **Upload** from the menu at the top of the page.
-
- :::image type="content" source="media/sas-tokens/container-upload-button.png" alt-text="Screenshot that shows the container Upload button in the Azure portal.":::
-
- The **Upload blob** window appears.
-1. Select your files to upload.
-
- :::image type="content" source="media/sas-tokens/upload-blob-window.png" alt-text="Screenshot that shows the Upload blob window in the Azure portal.":::
-
-> [!NOTE]
-> By default, the REST API uses form documents located at the root of your container. You can also use data organized in subfolders if specified in the API call. For more information, see [Organize your data in subfolders](./build-training-data-set.md#organize-your-data-in-subfolders-optional).
-
-## Create a shared access signature with the Azure portal
-
-> [!IMPORTANT]
->
-> Generate and retrieve the shared access signature for your container, not for the storage account itself.
-
-1. In the [Azure portal](https://portal.azure.com/#home), select **Your storage account** > **Containers**.
-1. Select a container from the list.
-1. Go to the right of the main window, and select the three ellipses associated with your chosen container.
-1. Select **Generate SAS** from the dropdown menu to open the **Generate SAS** window.
-
- :::image type="content" source="media/sas-tokens/generate-sas.png" alt-text="Screenshot that shows the Generate SAS token dropdown menu in the Azure portal.":::
-
-1. Select **Signing method** > **User delegation key**.
-
-1. Define **Permissions** by selecting or clearing the appropriate checkbox. Make sure the **Read**, **Write**, **Delete**, and **List** permissions are selected.
-
- :::image type="content" source="media/sas-tokens/sas-permissions.png" alt-text="Screenshot that shows the SAS permission fields in the Azure portal.":::
-
- >[!IMPORTANT]
- >
- > * If you receive a message similar to the following one, you'll need to assign access to the blob data in your storage account:
- >
- > :::image type="content" source="media/sas-tokens/need-permissions.png" alt-text="Screenshot that shows the lack of permissions warning.":::
- >
- > * [Azure role-based access control](../../role-based-access-control/overview.md) (Azure RBAC) is the authorization system used to manage access to Azure resources. Azure RBAC helps you manage access and permissions for your Azure resources.
- > * [Assign an Azure role for access to blob data](../../role-based-access-control/role-assignments-portal.md?tabs=current) shows you how to assign a role that allows for read, write, and delete permissions for your Azure storage container. For example, see [Storage Blob Data Contributor](../../role-based-access-control/built-in-roles.md#storage-blob-data-contributor).
-
-1. Specify the signed key **Start** and **Expiry** times. The value for the expiry time is a maximum of seven days from the start of the shared access signature.
-
-1. The **Allowed IP addresses** field is optional and specifies an IP address or a range of IP addresses from which to accept requests. If the request IP address doesn't match the IP address or address range specified on the SAS token, it won't be authorized.
-
-1. The **Allowed protocols** field is optional and specifies the protocol permitted for a request made with the shared access signature. The default value is HTTPS.
-
-1. Select **Generate SAS token and URL**.
-
-1. The **Blob SAS token** query string and **Blob SAS URL** appear in the lower area of the window. To use the Blob SAS token, append it to a storage service URI.
-
-1. Copy and paste the **Blob SAS token** and **Blob SAS URL** values in a secure location. They're displayed only once and can't be retrieved after the window is closed.
-
-## Create a shared access signature with the Azure CLI
-
-1. To create a user delegation SAS for a container by using the Azure CLI, make sure that you've installed version 2.0.78 or later. To check your installed version, use the `az --version` command.
-
-1. Call the [az storage container generate-sas](/cli/azure/storage/container#az-storage-container-generate-sas) command.
-
-1. The following parameters are required:
-
- * `auth-mode login`. This parameter ensures that requests made to Azure Storage are authorized with your Azure AD credentials.
- * `as-user`. This parameter indicates that the generated SAS is a user delegation SAS.
-
-1. Supported permissions for a user delegation SAS on a container include Add (a), Create (c), Delete (d), List (l), Read (r), and Write (w). Make sure **r**, **w**, **d**, and **l** are included as part of the permissions parameters.
-
-1. When you create a user delegation SAS with the Azure CLI, the maximum interval during which the user delegation key is valid is seven days from the start date. Specify an expiry time for the shared access signature that's within seven days of the start time. For more information, see [Create a user delegation SAS for a container or blob with the Azure CLI](../../storage/blobs/storage-blob-user-delegation-sas-create-cli.md#use-azure-ad-credentials-to-secure-a-sas).
-
-### Example
-
-Generate a user delegation SAS. Replace the placeholder values in the brackets with your own values:
-
-```azurecli-interactive
-az storage container generate-sas \
- --account-name \
- --name \
- --permissions rwdl \
- --expiry \
- --auth-mode login \
- --as-user
-```
-
-## Use your Blob SAS URL
-
-Two options are available:
-
-* To use your Blob SAS URL with the [REST API](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v2-1/operations/TrainCustomModelAsync), add the SAS URL to the request body:
-
- ```json
- {
- "source":""
- }
- ```
-
-* To use your Blob SAS URL with the [Form Recognizer labeling tool](https://fott-2-1.azurewebsites.net/connections/create), add the SAS URL to the **Connection Settings** > **Azure blob container** > **SAS URI** field:
-
- :::image type="content" source="media/sas-tokens/fott-add-sas-uri.png" alt-text="Screenshot that shows the SAS URI field.":::
-
-That's it. You've learned how to generate SAS tokens to authorize how clients access your data.
-
-## Next step
-
-> [!div class="nextstepaction"]
-> [Build a training data set](build-training-data-set.md)
\ No newline at end of file
diff --git a/articles/applied-ai-services/form-recognizer/how-to-guides/includes/csharp-read.md b/articles/applied-ai-services/form-recognizer/how-to-guides/includes/csharp-read.md
index 45bfd24f0a69c..b895b3d935590 100644
--- a/articles/applied-ai-services/form-recognizer/how-to-guides/includes/csharp-read.md
+++ b/articles/applied-ai-services/form-recognizer/how-to-guides/includes/csharp-read.md
@@ -1,6 +1,6 @@
---
title: "How to use the read model with C#/.NET programming language"
-description: Use the Form Recognizer prebuilt-read model and C# to extract printed and handwritten text from documents.
+description: Use the Form Recognizer prebuilt-read model and C# to extract printed (typeface) and handwritten text from documents.
author: laujan
manager: nitinme
ms.service: applied-ai-services
diff --git a/articles/applied-ai-services/form-recognizer/how-to-guides/includes/java-read.md b/articles/applied-ai-services/form-recognizer/how-to-guides/includes/java-read.md
index c4982257af454..1ee5071670908 100644
--- a/articles/applied-ai-services/form-recognizer/how-to-guides/includes/java-read.md
+++ b/articles/applied-ai-services/form-recognizer/how-to-guides/includes/java-read.md
@@ -1,6 +1,6 @@
---
title: "How to use the read model with Java programming language"
-description: Use the Form Recognizer prebuilt-read model and Java to extract printed and handwritten text from documents.
+description: Use the Form Recognizer prebuilt-read model and Java to extract printed (typeface) and handwritten text from documents.
author: laujan
manager: nitinme
ms.service: applied-ai-services
diff --git a/articles/applied-ai-services/form-recognizer/how-to-guides/includes/javascript-read.md b/articles/applied-ai-services/form-recognizer/how-to-guides/includes/javascript-read.md
index 1dc3e5affe333..da8373668309c 100644
--- a/articles/applied-ai-services/form-recognizer/how-to-guides/includes/javascript-read.md
+++ b/articles/applied-ai-services/form-recognizer/how-to-guides/includes/javascript-read.md
@@ -1,6 +1,6 @@
---
title: "How to use the read model with JavaScript programming language"
-description: Use the Form Recognizer prebuilt-read model and JavaScript to extract printed and handwritten text from documents.
+description: Use the Form Recognizer prebuilt-read model and JavaScript to extract printed (typeface) and handwritten text from documents.
author: laujan
manager: nitinme
ms.service: applied-ai-services
diff --git a/articles/applied-ai-services/form-recognizer/how-to-guides/includes/python-read.md b/articles/applied-ai-services/form-recognizer/how-to-guides/includes/python-read.md
index afa500a5c985b..dd42ae66c6b67 100644
--- a/articles/applied-ai-services/form-recognizer/how-to-guides/includes/python-read.md
+++ b/articles/applied-ai-services/form-recognizer/how-to-guides/includes/python-read.md
@@ -1,6 +1,6 @@
---
title: "How to use the read model with Python programming language"
-description: Use the Form Recognizer prebuilt-read model and Python to extract printed and handwritten text from documents.
+description: Use the Form Recognizer prebuilt-read model and Python to extract printed (typeface) and handwritten text from documents.
author: laujan
manager: nitinme
ms.service: applied-ai-services
diff --git a/articles/applied-ai-services/form-recognizer/how-to-guides/includes/rest-api-read.md b/articles/applied-ai-services/form-recognizer/how-to-guides/includes/rest-api-read.md
index 521275a21c7fe..33519a3c0db0b 100644
--- a/articles/applied-ai-services/form-recognizer/how-to-guides/includes/rest-api-read.md
+++ b/articles/applied-ai-services/form-recognizer/how-to-guides/includes/rest-api-read.md
@@ -1,6 +1,6 @@
---
title: "How to use the read model with the Form Recognizer REST API"
-description: Use the Form Recognizer prebuilt-read model and REST API to extract printed and handwritten text from documents.
+description: Use the Form Recognizer prebuilt-read model and REST API to extract printed (typeface) and handwritten text from documents.
author: laujan
manager: nitinme
ms.service: applied-ai-services
@@ -45,7 +45,7 @@ Before you run the following cURL command, make the following changes:
1. Replace `{key}` with the key value from your Form Recognizer instance in the Azure portal.
```bash
-curl -v -i POST "{endpoint}/formrecognizer/documentModels/prebuilt-read:analyze?api-version=2022-01-30-preview" -H "Content-Type: application/json" -H "Ocp-Apim-Subscription-Key: {key}" --data-ascii "{'urlSource': 'https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/rest-api/read.png'}"
+curl -v -i POST "{endpoint}/formrecognizer/documentModels/prebuilt-read:analyze?api-version=2022-06-30" -H "Content-Type: application/json" -H "Ocp-Apim-Subscription-Key: {key}" --data-ascii "{'urlSource': 'https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/rest-api/read.png'}"
```
#### Operation-Location
@@ -56,14 +56,14 @@ You'll receive a `202 (Success)` response that includes an **Operation-Location*
### Get Request
-After you've called the [**Analyze document**](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v3-0-preview-1/operations/AnalyzeDocument) API, call the [**Get analyze result**](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v3-0-preview-1/operations/GetAnalyzeDocumentResult) API to get the status of the operation and the extracted data. Before you run the command, make these changes:
+After you've called the [**Analyze document**](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2022-06-30-preview/operations/AnalyzeDocument) API, call the [**Get analyze result**](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2022-06-30-preview/operations/GetAnalyzeDocumentResult) API to get the status of the operation and the extracted data. Before you run the command, make these changes:
1. Replace `{endpoint}` with the endpoint value from your Form Recognizer instance in the Azure portal.
1. Replace `{key}` with the key value from your Form Recognizer instance in the Azure portal.
1. Replace `{resultID}` with the result ID from the [Operation-Location](#operation-location) header.
```bash
-curl -v -X GET "{endpoint}/formrecognizer/documentModels/prebuilt-read/analyzeResults/{resultId}?api-version=2022-01-30-preview" -H "Ocp-Apim-Subscription-Key: {key}"
+curl -v -X GET "{endpoint}/formrecognizer/documentModels/prebuilt-read/analyzeResults/{resultId}?api-version=2022-06-30" -H "Ocp-Apim-Subscription-Key: {key}"
```
### Read Model Output
@@ -76,7 +76,7 @@ You'll receive a `200 (Success)` response with JSON output. The first field, `"s
"createdDateTime": "2022-04-08T00:36:48Z",
"lastUpdatedDateTime": "2022-04-08T00:36:50Z",
"analyzeResult": {
- "apiVersion": "2022-01-30-preview",
+ "apiVersion": "2022-06-30",
"modelId": "prebuilt-read",
"stringIndexType": "textElements",
"content": "While healthcare is still in the early stages of its Al journey, we\nare seeing...",
diff --git a/articles/applied-ai-services/form-recognizer/how-to-guides/use-prebuilt-read.md b/articles/applied-ai-services/form-recognizer/how-to-guides/use-prebuilt-read.md
index fa0ba04185198..da08585658225 100644
--- a/articles/applied-ai-services/form-recognizer/how-to-guides/use-prebuilt-read.md
+++ b/articles/applied-ai-services/form-recognizer/how-to-guides/use-prebuilt-read.md
@@ -15,13 +15,13 @@ recommendations: false
# Use the Read Model
- In this how-to guide, you'll learn to use Azure Form Recognizer's [read model](../concept-read.md) to extract printed and handwritten text from documents. The read model can detect lines, words, locations, and languages. You can use a programming language of your choice or the REST API. We recommend that you use the free service when you're learning the technology. Remember that the number of free pages is limited to 500 per month.
+ In this how-to guide, you'll learn to use Azure Form Recognizer's [read model](../concept-read.md) to extract typeface and handwritten text from documents. The read model can detect lines, words, locations, and languages. You can use a programming language of your choice or the REST API. We recommend that you use the free service when you're learning the technology. Remember that the number of free pages is limited to 500 per month.
The read model is the core of all the other Form Recognizer models. Layout, general document, custom, and prebuilt models all use the read model as a foundation for extracting texts from documents.
>[!NOTE]
> Form Recognizer v3.0 is currently in public preview. Some features may not be supported or have limited capabilities.
-The current API version is ```2022-01-30-preview```.
+The current API version is ```2022-06-30```.
::: zone pivot="programming-language-csharp"
diff --git a/articles/applied-ai-services/form-recognizer/includes/get-started/csharp.md b/articles/applied-ai-services/form-recognizer/includes/get-started/csharp.md
index 57b3269c17e43..6000f1afa249e 100644
--- a/articles/applied-ai-services/form-recognizer/includes/get-started/csharp.md
+++ b/articles/applied-ai-services/form-recognizer/includes/get-started/csharp.md
@@ -230,7 +230,7 @@ FormRecognizerClient recognizerClient = AuthenticateClient();
if (invoice.Fields.TryGetValue("InvoiceId", out invoiceIdField)) {
if (invoiceIdField.Value.ValueType == FieldValueType.String) {
string invoiceId = invoiceIdField.Value.AsString();
- Console.WriteLine($ " Invoice Id: '{invoiceId}', with confidence {invoiceIdField.Confidence}");
+ Console.WriteLine($" Invoice Id: '{invoiceId}', with confidence {invoiceIdField.Confidence}");
}
}
@@ -238,7 +238,7 @@ FormRecognizerClient recognizerClient = AuthenticateClient();
if (invoice.Fields.TryGetValue("InvoiceDate", out invoiceDateField)) {
if (invoiceDateField.Value.ValueType == FieldValueType.Date) {
DateTime invoiceDate = invoiceDateField.Value.AsDate();
- Console.WriteLine($ " Invoice Date: '{invoiceDate}', with confidence {invoiceDateField.Confidence}");
+ Console.WriteLine($" Invoice Date: '{invoiceDate}', with confidence {invoiceDateField.Confidence}");
}
}
@@ -246,7 +246,7 @@ FormRecognizerClient recognizerClient = AuthenticateClient();
if (invoice.Fields.TryGetValue("DueDate", out dueDateField)) {
if (dueDateField.Value.ValueType == FieldValueType.Date) {
DateTime dueDate = dueDateField.Value.AsDate();
- Console.WriteLine($ " Due Date: '{dueDate}', with confidence {dueDateField.Confidence}");
+ Console.WriteLine($" Due Date: '{dueDate}', with confidence {dueDateField.Confidence}");
}
}
@@ -254,7 +254,7 @@ FormRecognizerClient recognizerClient = AuthenticateClient();
if (invoice.Fields.TryGetValue("VendorName", out vendorNameField)) {
if (vendorNameField.Value.ValueType == FieldValueType.String) {
string vendorName = vendorNameField.Value.AsString();
- Console.WriteLine($ " Vendor Name: '{vendorName}', with confidence {vendorNameField.Confidence}");
+ Console.WriteLine($" Vendor Name: '{vendorName}', with confidence {vendorNameField.Confidence}");
}
}
@@ -262,7 +262,7 @@ FormRecognizerClient recognizerClient = AuthenticateClient();
if (invoice.Fields.TryGetValue("VendorAddress", out vendorAddressField)) {
if (vendorAddressField.Value.ValueType == FieldValueType.String) {
string vendorAddress = vendorAddressField.Value.AsString();
- Console.WriteLine($ " Vendor Address: '{vendorAddress}', with confidence {vendorAddressField.Confidence}");
+ Console.WriteLine($" Vendor Address: '{vendorAddress}', with confidence {vendorAddressField.Confidence}");
}
}
@@ -270,7 +270,7 @@ FormRecognizerClient recognizerClient = AuthenticateClient();
if (invoice.Fields.TryGetValue("CustomerName", out customerNameField)) {
if (customerNameField.Value.ValueType == FieldValueType.String) {
string customerName = customerNameField.Value.AsString();
- Console.WriteLine($ " Customer Name: '{customerName}', with confidence {customerNameField.Confidence}");
+ Console.WriteLine($" Customer Name: '{customerName}', with confidence {customerNameField.Confidence}");
}
}
@@ -278,7 +278,7 @@ FormRecognizerClient recognizerClient = AuthenticateClient();
if (invoice.Fields.TryGetValue("CustomerAddress", out customerAddressField)) {
if (customerAddressField.Value.ValueType == FieldValueType.String) {
string customerAddress = customerAddressField.Value.AsString();
- Console.WriteLine($ " Customer Address: '{customerAddress}', with confidence {customerAddressField.Confidence}");
+ Console.WriteLine($" Customer Address: '{customerAddress}', with confidence {customerAddressField.Confidence}");
}
}
@@ -286,7 +286,7 @@ FormRecognizerClient recognizerClient = AuthenticateClient();
if (invoice.Fields.TryGetValue("CustomerAddressRecipient", out customerAddressRecipientField)) {
if (customerAddressRecipientField.Value.ValueType == FieldValueType.String) {
string customerAddressRecipient = customerAddressRecipientField.Value.AsString();
- Console.WriteLine($ " Customer address recipient: '{customerAddressRecipient}', with confidence {customerAddressRecipientField.Confidence}");
+ Console.WriteLine($" Customer address recipient: '{customerAddressRecipient}', with confidence {customerAddressRecipientField.Confidence}");
}
}
@@ -294,7 +294,7 @@ FormRecognizerClient recognizerClient = AuthenticateClient();
if (invoice.Fields.TryGetValue("InvoiceTotal", out invoiceTotalField)) {
if (invoiceTotalField.Value.ValueType == FieldValueType.Float) {
float invoiceTotal = invoiceTotalField.Value.AsFloat();
- Console.WriteLine($ " Invoice Total: '{invoiceTotal}', with confidence {invoiceTotalField.Confidence}");
+ Console.WriteLine($" Invoice Total: '{invoiceTotal}', with confidence {invoiceTotalField.Confidence}");
}
}
}
@@ -318,4 +318,4 @@ Congratulations! In this quickstart, you used the Form Recognizer C# SDK to anal
> [REST API v2.1 reference documentation](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v2-1/operations/5ed8c9843c2794cbb1a96291)
> [!div class="nextstepaction"]
-> [Form Recognizer C#/.NET reference library](/dotnet/api/overview/azure/AI.FormRecognizer-readme)
\ No newline at end of file
+> [Form Recognizer C#/.NET reference library](/dotnet/api/overview/azure/AI.FormRecognizer-readme)
diff --git a/articles/applied-ai-services/form-recognizer/index.yml b/articles/applied-ai-services/form-recognizer/index.yml
index d2d0a400e4014..624d570266f4c 100644
--- a/articles/applied-ai-services/form-recognizer/index.yml
+++ b/articles/applied-ai-services/form-recognizer/index.yml
@@ -85,8 +85,8 @@ landingContent:
url: v3-migration-guide.md
- text: Use the read model
url: how-to-guides/use-prebuilt-read.md
- - text: Generate SAS tokens for Azure Blob containers
- url: generate-sas-tokens.md
+ - text: Create SAS tokens for storage containers
+ url: create-sas-tokens.md
- text: Build a custom model (v3.0)
url: how-to-guides/build-custom-model-v3.md
- text: Compose custom models (v3.0)
diff --git a/articles/applied-ai-services/form-recognizer/language-support.md b/articles/applied-ai-services/form-recognizer/language-support.md
index b6023261f9bd3..8e51520c1ea80 100644
--- a/articles/applied-ai-services/form-recognizer/language-support.md
+++ b/articles/applied-ai-services/form-recognizer/language-support.md
@@ -7,7 +7,7 @@ manager: nitinme
ms.service: applied-ai-services
ms.subservice: forms-recognizer
ms.topic: overview
-ms.date: 04/22/2022
+ms.date: 06/06/2022
ms.author: lajanuar
---
@@ -159,12 +159,25 @@ Pre-Built Receipt and Business Cards support all English receipts and business c
|English (India|`en-in`|
|English (United States)| `en-us`|
+## Business card model
+
+The **2022-06-30-preview** release includes Japanese language support:
+
+|Language| Locale code |
+|:-----|:----:|
+| Japanese | `ja` |
+
## Invoice model
Language| Locale code |
|:-----|:----:|
-|English (United States)|en-us|
-|Spanish (preview) | es |
+|English (United States) |en-US|
+|Spanish| es|
+|German (**2022-06-30-preview**)| de|
+|French (**2022-06-30-preview**)| fr|
+|Italian (**2022-06-30-preview**)|it|
+|Portuguese (**2022-06-30-preview**)|pt|
+|Dutch (**2022-06-30-preview**)| nl|
## ID documents
diff --git a/articles/applied-ai-services/form-recognizer/media/quickstarts/form-recognizer-demo-preview3.gif b/articles/applied-ai-services/form-recognizer/media/quickstarts/form-recognizer-demo-preview3.gif
new file mode 100644
index 0000000000000..24bd7f6eadddd
Binary files /dev/null and b/articles/applied-ai-services/form-recognizer/media/quickstarts/form-recognizer-demo-preview3.gif differ
diff --git a/articles/applied-ai-services/form-recognizer/media/quickstarts/form-recognizer-general-document-demo-preview3.gif b/articles/applied-ai-services/form-recognizer/media/quickstarts/form-recognizer-general-document-demo-preview3.gif
new file mode 100644
index 0000000000000..1261894a2695a
Binary files /dev/null and b/articles/applied-ai-services/form-recognizer/media/quickstarts/form-recognizer-general-document-demo-preview3.gif differ
diff --git a/articles/applied-ai-services/form-recognizer/media/studio/form-recognizer-studio-layout-newspaper.png b/articles/applied-ai-services/form-recognizer/media/studio/form-recognizer-studio-layout-newspaper.png
new file mode 100644
index 0000000000000..f51cf591f7d80
Binary files /dev/null and b/articles/applied-ai-services/form-recognizer/media/studio/form-recognizer-studio-layout-newspaper.png differ
diff --git a/articles/applied-ai-services/form-recognizer/media/studio/form-recognizer-studio-layout-pod-2.png b/articles/applied-ai-services/form-recognizer/media/studio/form-recognizer-studio-layout-pod-2.png
new file mode 100644
index 0000000000000..42e784cb6c4de
Binary files /dev/null and b/articles/applied-ai-services/form-recognizer/media/studio/form-recognizer-studio-layout-pod-2.png differ
diff --git a/articles/applied-ai-services/form-recognizer/media/studio/form-recognizer-studio-layout-pod.png b/articles/applied-ai-services/form-recognizer/media/studio/form-recognizer-studio-layout-pod.png
new file mode 100644
index 0000000000000..23f6bb5355131
Binary files /dev/null and b/articles/applied-ai-services/form-recognizer/media/studio/form-recognizer-studio-layout-pod.png differ
diff --git a/articles/applied-ai-services/form-recognizer/overview.md b/articles/applied-ai-services/form-recognizer/overview.md
index 2676c00642751..63aa94200a5a9 100644
--- a/articles/applied-ai-services/form-recognizer/overview.md
+++ b/articles/applied-ai-services/form-recognizer/overview.md
@@ -7,12 +7,11 @@ manager: nitinme
ms.service: applied-ai-services
ms.subservice: forms-recognizer
ms.topic: overview
-ms.date: 03/08/2022
+ms.date: 06/06/2022
ms.author: lajanuar
recommendations: false
keywords: automated data processing, document processing, automated data entry, forms processing
#Customer intent: As a developer of form-processing software, I want to learn what the Form Recognizer service does so I can determine if I should use it.
-ms.custom: ignite-fall-2021
---
@@ -25,8 +24,8 @@ Form Recognizer uses the following models to easily identify, extract, and analy
**Document analysis models**
-* [**Read model**](concept-read.md) | Extract printed and handwritten text lines, words, locations, and detected languages from documents and images.
-* [**Layout model**](concept-layout.md) | Extract text, tables, selection marks, and structure information from documents (PDF and TIFF) and images (JPG, PNG, and BMP).
+* [**Read model**](concept-read.md) | Extract text lines, words, locations, and detected languages from documents and images.
+* [**Layout model**](concept-layout.md) | Extract text, tables, selection marks, and structure information from documents and images.
* [**General document model**](concept-general-document.md) | Extract key-value pairs, selection marks, and entities from documents.
**Prebuilt models**
@@ -49,8 +48,9 @@ This section helps you decide which Form Recognizer v3.0 supported feature you s
| What type of document do you want to analyze?| How is the document formatted? | Your best solution |
| -----------------|-------------------| ----------|
|
**W-2 Form**
| Is your W-2 document composed in United States English (en-US) text?|
If **Yes**, use the [**W-2 Form**](concept-w2.md) model.
If **No**, use the [**Layout**](concept-layout.md) or [**General document (preview)**](concept-general-document.md) model.
|
-|
**Text-only document**
| Is your text-only document _printed_ in a [supported language](language-support.md#read-layout-and-custom-form-template-model) or, if handwritten, is it composed in English?|
If **Yes**, use the [**Read**](concept-invoice.md) model.
If **No**, use the [**Layout**](concept-layout.md) or [**General document (preview)**](concept-general-document.md) model.
-|
**Invoice**
| Is your invoice document composed in English or Spanish text?|
If **Yes**, use the [**Invoice**](concept-invoice.md) model.
If **No**, use the [**Layout**](concept-layout.md) or [**General document (preview)**](concept-general-document.md) model.
+|
**Primarily text content**
| Is your document _printed_ in a [supported language](language-support.md#read-layout-and-custom-form-template-model) and are you only interested in text and not tables, selection marks, and the structure?|
If **Yes** to text-only extraction, use the [**Read**](concept-read.md) model.
If **No**, because you also need structure information, use the [**Layout**](concept-layout.md) model.
+|
**General structured document**
| Is your document mostly structured and does it contain a few fields and values that may not be covered by the other prebuilt models?|
If **Yes**, use the [**General document (preview)**](concept-general-document.md) model.
If **No**, because the fields and values are complex and highly variable, train and build a [**Custom**](how-to-guides/build-custom-model-v3.md) model.
+|
**Invoice**
| Is your invoice document composed in a [supported language](language-support.md#invoice-model) text?|
If **Yes**, use the [**Invoice**](concept-invoice.md) model.
If **No**, use the [**Layout**](concept-layout.md) or [**General document (preview)**](concept-general-document.md) model.
|
**Receipt**
**Business card**
| Is your receipt or business card document composed in English text? |
If **Yes**, use the [**Receipt**](concept-receipt.md) or [**Business Card**](concept-business-card.md) model.
If **No**, use the [**Layout**](concept-layout.md) or [**General document (preview)**](concept-general-document.md) model.
|
|
**ID document**
| Is your ID document a US driver's license or an international passport?|
If **Yes**, use the [**ID document**](concept-id-document.md) model.
If **No**, use the[**Layout**](concept-layout.md) or [**General document (preview)**](concept-general-document.md) model
|
|
**Form** or **Document**
| Is your form or document an industry-standard format commonly used in your business or industry?|
If **Yes**, use the [**Layout**](concept-layout.md) or [**General document (preview)**](concept-general-document.md).
If **No**, you can [**Train and build a custom model**](quickstarts/try-sample-label-tool.md#train-a-custom-form-model).
@@ -68,7 +68,7 @@ The following features and development options are supported by the Form Recogn
|[🆕 **General document model**](concept-general-document.md)|Extract text, tables, structure, key-value pairs and, named entities.|
|
|[**Layout model**](concept-layout.md) | Extract text, selection marks, and tables structures, along with their bounding box coordinates, from forms and documents. Layout API has been updated to a prebuilt model. |
|
|[**Custom model (updated)**](concept-custom.md) | Extraction and analysis of data from forms and documents specific to distinct business data and use cases.
Custom model API v3.0 supports **signature detection for custom template (custom form) models**.
Custom model API v3.0 offers a new model type **Custom Neural** or custom document to analyze unstructured documents.
|
|[**Receipt model (updated)**](concept-receipt.md) | Automated data processing and extraction of key information from sales receipts.Receipt model v3.0 supports processing of **single-page hotel receipts**.|
|
|[**ID document model (updated)**](concept-id-document.md) |Automated data processing and extraction of key information from US driver's licenses and international passports.Prebuilt ID document API supports the **extraction of endorsements, restrictions, and vehicle classifications from US driver's licenses**. |
|
@@ -108,7 +108,7 @@ This documentation contains the following article types:
> [!div class="checklist"]
>
> * Try our [**Form Recognizer Studio**](https://formrecognizer.appliedai.azure.com)
-> * Explore the [**REST API reference documentation**](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v3-0-preview-1/operations/AnalyzeDocument) to learn more.
+> * Explore the [**REST API reference documentation**](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2022-06-30-preview/operations/AnalyzeDocument) to learn more.
> * If you're familiar with a previous version of the API, see the [**What's new**](./whats-new.md) article to learn of recent changes.
### [Form Recognizer v2.1](#tab/v2-1)
diff --git a/articles/applied-ai-services/form-recognizer/quickstarts/try-v3-form-recognizer-studio.md b/articles/applied-ai-services/form-recognizer/quickstarts/try-v3-form-recognizer-studio.md
index d03f0343268fe..e52e77568744c 100644
--- a/articles/applied-ai-services/form-recognizer/quickstarts/try-v3-form-recognizer-studio.md
+++ b/articles/applied-ai-services/form-recognizer/quickstarts/try-v3-form-recognizer-studio.md
@@ -19,7 +19,7 @@ ms.custom: ignite-fall-2021, mode-ui
[Form Recognizer Studio preview](https://formrecognizer.appliedai.azure.com/) is an online tool for visually exploring, understanding, and integrating features from the Form Recognizer service in your applications. Get started with exploring the pre-trained models with sample documents or your own. Create projects to build custom template models and reference the models in your applications using the [Python SDK preview](try-v3-python-sdk.md) and other quickstarts.
-:::image border="true" type="content" source="../media/quickstarts/form-recognizer-demo-v3p2.gif" alt-text="Form Recognizer Studio demo":::
+:::image border="true" type="content" source="../media/quickstarts/form-recognizer-demo-preview3.gif" alt-text="Selecting the Layout API to analyze a newspaper document in the Form Recognizer Studio.":::
## Prerequisites for new users
@@ -39,23 +39,25 @@ Prebuilt models help you add Form Recognizer features to your apps without havin
* [**ID document**](https://formrecognizer.appliedai.azure.com/studio/prebuilt?formType=idDocument): extract text and key information from driver licenses and international passports.
* [**Business card**](https://formrecognizer.appliedai.azure.com/studio/prebuilt?formType=businessCard): extract text and key information from business cards.
-After you've completed the prerequisites, navigate to the [Form Recognizer Studio General Documents preview](https://formrecognizer.appliedai.azure.com). In the following example, we use the General Documents feature. The steps to use other pre-trained features like [W2 tax form](https://formrecognizer.appliedai.azure.com/studio/prebuilt?formType=tax.us.w2), [Read](https://formrecognizer.appliedai.azure.com/studio/read), [Layout](https://formrecognizer.appliedai.azure.com/studio/layout), [Invoice](https://formrecognizer.appliedai.azure.com/studio/prebuilt?formType=invoice), [Receipt](https://formrecognizer.appliedai.azure.com/studio/prebuilt?formType=receipt), [Business card](https://formrecognizer.appliedai.azure.com/studio/prebuilt?formType=businessCard), and [ID documents](https://formrecognizer.appliedai.azure.com/studio/prebuilt?formType=idDocument) models are similar.
+After you've completed the prerequisites, navigate to the [Form Recognizer Studio General Documents preview](https://formrecognizer.appliedai.azure.com).
+
+In the following example, we use the General Documents feature. The steps to use other pre-trained features like [W2 tax form](https://formrecognizer.appliedai.azure.com/studio/prebuilt?formType=tax.us.w2), [Read](https://formrecognizer.appliedai.azure.com/studio/read), [Layout](https://formrecognizer.appliedai.azure.com/studio/layout), [Invoice](https://formrecognizer.appliedai.azure.com/studio/prebuilt?formType=invoice), [Receipt](https://formrecognizer.appliedai.azure.com/studio/prebuilt?formType=receipt), [Business card](https://formrecognizer.appliedai.azure.com/studio/prebuilt?formType=businessCard), and [ID documents](https://formrecognizer.appliedai.azure.com/studio/prebuilt?formType=idDocument) models are similar.
+
+ :::image border="true" type="content" source="../media/quickstarts/form-recognizer-general-document-demo-preview3.gif" alt-text="Selecting the General Document API to analysis a document in the Form Recognizer Studio.":::
1. Select a Form Recognizer service feature from the Studio home page.
-1. This is a one-time step unless you've already selected the service resource from prior use. Select your Azure subscription, resource group, and resource. (You can change the resources anytime in "Settings" in the top menu.) Review and confirm your selections.
+1. This step is a one-time process unless you've already selected the service resource from prior use. Select your Azure subscription, resource group, and resource. (You can change the resources anytime in "Settings" in the top menu.) Review and confirm your selections.
1. Select the Analyze command to run analysis on the sample document or try your document by using the Add command.
-1. Observe the highlighted extracted content in the document view. Hover your move over the keys and values to see details.
-
1. Use the controls at the bottom of the screen to zoom in and out and rotate the document view.
-1. Show and hide the text, tables, and selection marks layers to focus on each one of them at a time.
+1. Observe the highlighted extracted content in the document view. Hover your move over the keys and values to see details.
-1. In the output section's Result tab, browse the JSON output to understand the service response format. Copy and download to jumpstart integration.
+1. In the output section's Result tab, browse the JSON output to understand the service response format.
-:::image border="true" type="content" source="../media/quickstarts/layout-get-started-v2.gif" alt-text="Form Recognizer Layout example":::
+1. In the Code tab, browse the sample code for integration. Copy and download to get started.
## Additional prerequisites for custom projects
@@ -70,9 +72,9 @@ A **standard performance** [**Azure Blob Storage account**](https://portal.azure
### Configure CORS
-[CORS (Cross Origin Resource Sharing)](/rest/api/storageservices/cross-origin-resource-sharing--cors--support-for-the-azure-storage-services) needs to be configured on your Azure storage account for it to be accessible from the Form Recognizer Studio. To configure CORS in the Azure portal, you'll need access to the CORS blade of your storage account.
+[CORS (Cross Origin Resource Sharing)](/rest/api/storageservices/cross-origin-resource-sharing--cors--support-for-the-azure-storage-services) needs to be configured on your Azure storage account for it to be accessible from the Form Recognizer Studio. To configure CORS in the Azure portal, you'll need access to the CORS tab of your storage account.
-1. Select the CORS blade for the storage account.
+1. Select the CORS tab for the storage account.
:::image type="content" source="../media/quickstarts/cors-setting-menu.png" alt-text="Screenshot of the CORS setting menu in the Azure portal.":::
diff --git a/articles/applied-ai-services/form-recognizer/quickstarts/try-v3-javascript-sdk.md b/articles/applied-ai-services/form-recognizer/quickstarts/try-v3-javascript-sdk.md
index 2a4395d504c34..d80581f3767e1 100644
--- a/articles/applied-ai-services/form-recognizer/quickstarts/try-v3-javascript-sdk.md
+++ b/articles/applied-ai-services/form-recognizer/quickstarts/try-v3-javascript-sdk.md
@@ -7,7 +7,7 @@ manager: nitinme
ms.service: applied-ai-services
ms.subservice: forms-recognizer
ms.topic: quickstart
-ms.date: 03/16/2022
+ms.date: 06/06/2022
ms.author: lajanuar
recommendations: false
ms.custom: ignite-fall-2021, mode-api
@@ -20,17 +20,17 @@ ms.custom: ignite-fall-2021, mode-api
[Reference documentation](/javascript/api/@azure/ai-form-recognizer/?view=azure-node-preview&preserve-view=true) | [Library source code](https://github.com/Azure/azure-sdk-for-js/tree/@azure/ai-form-recognizer_4.0.0-beta.3/sdk/formrecognizer/ai-form-recognizer/) | [Package (npm)](https://www.npmjs.com/package/@azure/ai-form-recognizer/v/4.0.0-beta.3) | [Samples](https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/formrecognizer/ai-form-recognizer/samples/v4-beta/javascript/README.md)
-Get started with Azure Form Recognizer using the JavaScript programming language. Azure Form Recognizer is a cloud-based Azure Applied AI Service that uses machine learning to extract key-value pairs, text, and tables from your documents. You can easily call Form Recognizer models by integrating our client library SDks into your workflows and applications. We recommend that you use the free service when you're learning the technology. Remember that the number of free pages is limited to 500 per month.
+Get started with Azure Form Recognizer using the JavaScript programming language. Azure Form Recognizer is a cloud-based Azure Applied AI Service that uses machine learning to extract key-value pairs, text, and tables from your documents. You can easily call Form Recognizer models by integrating our client library SDKs into your workflows and applications. We recommend that you use the free service when you're learning the technology. Remember that the number of free pages is limited to 500 per month.
To learn more about Form Recognizer features and development options, visit our [Overview](../overview.md#form-recognizer-features-and-development-options) page.
In this quickstart you'll use following features to analyze and extract data and values from forms and documents:
-* [🆕 **General document**](#general-document-model)—Analyze and extract common fields from specific document types using a pre-trained invoice model.
+* [🆕 **General document**](#general-document-model)—Analyze and extract key-value pairs, selection marks, and entities from documents.
* [**Layout**](#layout-model)—Analyze and extract tables, lines, words, and selection marks like radio buttons and check boxes in forms documents, without the need to train a model.
-* [**Prebuilt Invoice**](#prebuilt-model)—Analyze and extract common fields from specific document types using a pre-trained model.
+* [**Prebuilt Invoice**](#prebuilt-model)—Analyze and extract common fields from specific document types using a pre-trained invoice model.
## Prerequisites
@@ -121,9 +121,9 @@ Extract text, tables, structure, key-value pairs, and named entities from docume
const { AzureKeyCredential, DocumentAnalysisClient } = require("@azure/ai-form-recognizer");
- // set `` and `` variables with the values from the Azure portal
- const key = "";
- const endpoint = "";
+ // set `` and `` variables with the values from the Azure portal.
+ const key = "";
+ const endpoint = "";
// sample document
const formUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf"
@@ -231,9 +231,9 @@ Extract text, selection marks, text styles, table structures, and bounding regio
const { AzureKeyCredential, DocumentAnalysisClient } = require("@azure/ai-form-recognizer");
- // set `` and `` variables with the values from the Azure portal
- const key = "";
- const endpoint = "";
+ // set `` and `` variables with the values from the Azure portal.
+ const key = "";
+ const endpoint = "";
// sample document
const formUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf"
@@ -324,9 +324,9 @@ In this example, we'll analyze an invoice using the **prebuilt-invoice** model.
// using the PrebuiltModels object, rather than the raw model ID, adds strong typing to the model's output
const { PrebuiltModels } = require("@azure/ai-form-recognizer");
- // set `` and `` variables with the values from the Azure portal
- const key = "";
- const endpoint = "";
+ // set `` and `` variables with the values from the Azure portal.
+ const key = "";
+ const endpoint = "";
// sample document
const invoiceUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf";
@@ -419,7 +419,7 @@ In this quickstart, you used the Form Recognizer JavaScript SDK to analyze vario
## Next steps
> [!div class="nextstepaction"]
-> [REST API v3.0reference documentation](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v3-0-preview-1/operations/AnalyzeDocument)
+> [REST API v3.0reference documentation](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2022-06-30-preview/operations/AnalyzeDocument)
> [!div class="nextstepaction"]
> [Form Recognizer JavaScript reference library](https://azuresdkdocs.blob.core.windows.net/$web/javascript/azure-ai-form-recognizer/4.0.0-beta.1/index.html)
diff --git a/articles/applied-ai-services/form-recognizer/quickstarts/try-v3-python-sdk.md b/articles/applied-ai-services/form-recognizer/quickstarts/try-v3-python-sdk.md
index 5dda4a0c5d86d..b105379236047 100644
--- a/articles/applied-ai-services/form-recognizer/quickstarts/try-v3-python-sdk.md
+++ b/articles/applied-ai-services/form-recognizer/quickstarts/try-v3-python-sdk.md
@@ -120,7 +120,7 @@ def analyze_general_documents():
docUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf"
# create your `DocumentAnalysisClient` instance and `AzureKeyCredential` variable
- document_analysis_client = DocumentAnalysisClient(endpoint=endpoint, credential=AzureKeyCredential(key))
+ document_analysis_client = DocumentAnalysisClient(endpoint=endpoint, credential=AzureKeyCredential(key))
poller = document_analysis_client.begin_analyze_document_from_url(
"prebuilt-document", docUrl)
diff --git a/articles/applied-ai-services/form-recognizer/quickstarts/try-v3-rest-api.md b/articles/applied-ai-services/form-recognizer/quickstarts/try-v3-rest-api.md
index bb1e8bcce4758..ce43b4b839c65 100644
--- a/articles/applied-ai-services/form-recognizer/quickstarts/try-v3-rest-api.md
+++ b/articles/applied-ai-services/form-recognizer/quickstarts/try-v3-rest-api.md
@@ -7,19 +7,19 @@ manager: nitinme
ms.service: applied-ai-services
ms.subservice: forms-recognizer
ms.topic: quickstart
-ms.date: 03/24/2022
+ms.date: 06/06/2022
ms.author: lajanuar
---
-# Get started: Form Recognizer REST API 2022-01-30-preview
+# Get started: Form Recognizer REST API 2022-06-30-preview
>[!NOTE]
> Form Recognizer v3.0 is currently in public preview. Some features may not be supported or have limited capabilities.
-The current API version is ```2022-01-30-preview```.
+The current API version is **2022-06-30-preview**.
-| [Form Recognizer REST API](https://westcentralus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v3-0-preview-2/operations/AnalyzeDocument) | [Azure SDKS](https://azure.github.io/azure-sdk/releases/latest/index.html) |
+| [Form Recognizer REST API](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2022-06-30-preview/operations/AnalyzeDocument) | [Azure SDKS](https://azure.github.io/azure-sdk/releases/latest/index.html) |
Get started with Azure Form Recognizer using the REST API. Azure Form Recognizer is a cloud-based Azure Applied AI Service that uses machine learning to extract key-value pairs, text, and tables from your documents. You can easily call Form Recognizer models using the REST API or by integrating our client library SDks into your workflows and applications. We recommend that you use the free service when you're learning the technology. Remember that the number of free pages is limited to 500 per month.
@@ -31,7 +31,7 @@ To learn more about Form Recognizer features and development options, visit our
**Document Analysis**
-* 🆕 Read—Analyze and extract printed and handwritten text lines, words, locations, and detected languages.
+* 🆕 Read—Analyze and extract printed (typeface) and handwritten text lines, words, locations, and detected languages.
* 🆕General document—Analyze and extract text, tables, structure, key-value pairs, and named entities.
* Layout—Analyze and extract tables, lines, words, and selection marks from documents, without the need to train a model.
@@ -46,7 +46,7 @@ To learn more about Form Recognizer features and development options, visit our
**Custom Models**
* Custom—Analyze and extract form fields and other content from your custom forms, using models you trained with your own form types.
-* Composed custom—Compose a collection of custom models and assign them to a single model built from your form types.
+* Composed custom—Compose a collection of custom models and assign them to a single model ID.
## Prerequisites
@@ -84,7 +84,7 @@ Before you run the cURL command, make the following changes:
#### POST request
```bash
-curl -v -i POST "{endpoint}/formrecognizer/documentModels/{modelID}:analyze?api-version=2022-01-30-preview" -H "Content-Type: application/json" -H "Ocp-Apim-Subscription-Key: {key}" --data-ascii "{'urlSource': '{your-document-url}'}"
+curl -v -i POST "{endpoint}/formrecognizer/documentModels/{modelID}:analyze?api-version=2022-06-30-preview" -H "Content-Type: application/json" -H "Ocp-Apim-Subscription-Key: {key}" --data-ascii "{'urlSource': '{your-document-url}'}"
```
#### Reference table
@@ -108,18 +108,22 @@ You'll receive a `202 (Success)` response that includes an **Operation-Location*
### Get analyze results (GET Request)
-After you've called the [**Analyze document**](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v3-0-preview-1/operations/AnalyzeDocument) API, call the [**Get analyze result**](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v3-0-preview-1/operations/GetAnalyzeDocumentResult) API to get the status of the operation and the extracted data. Before you run the command, make these changes:
+After you've called the [**Analyze document**](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2022-06-30-preview/operations/AnalyzeDocument) API, call the [**Get analyze result**](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2022-06-30-preview/operations/GetAnalyzeDocumentResult) API to get the status of the operation and the extracted data. Before you run the command, make these changes:
1. Replace `{endpoint}` with the endpoint value from your Form Recognizer instance in the Azure portal.
1. Replace `{key}` with the key value from your Form Recognizer instance in the Azure portal.
-1. Replace `{modelID}` with the same model name you used to analyze your document.
+1. Replace `{modelID}` with the same modelID you used to analyze your document.
1. Replace `{resultID}` with the result ID from the [Operation-Location](#operation-location) header.
#### GET request
```bash
-curl -v -X GET "{endpoint}/formrecognizer/documentModels/{model name}/analyzeResults/{resultId}?api-version=2022-01-30-preview" -H "Ocp-Apim-Subscription-Key: {key}"
+<<<<<<< HEAD
+curl -v -X GET "{endpoint}/formrecognizer/documentModels/{model name}/analyzeResults/{resultId}?api-version=2022-06-30-preview" -H "Ocp-Apim-Subscription-Key: {key}"
+=======
+curl -v -X GET "{endpoint}/formrecognizer/documentModels/{modelID}/analyzeResults/{resultId}?api-version=2022-06-30-preview" -H "Ocp-Apim-Subscription-Key: {key}"
+>>>>>>> resolve-merge-conflict
```
#### Examine the response
@@ -134,7 +138,7 @@ You'll receive a `200 (Success)` response with JSON output. The first field, `"s
"createdDateTime": "2022-03-25T19:31:37Z",
"lastUpdatedDateTime": "2022-03-25T19:31:43Z",
"analyzeResult": {
- "apiVersion": "2022-01-30-preview",
+ "apiVersion": "2022-06-30",
"modelId": "prebuilt-invoice",
"stringIndexType": "textElements"...
..."pages": [
diff --git a/articles/applied-ai-services/form-recognizer/resource-customer-stories.md b/articles/applied-ai-services/form-recognizer/resource-customer-stories.md
index ef95365357356..7e1a0b695c63e 100644
--- a/articles/applied-ai-services/form-recognizer/resource-customer-stories.md
+++ b/articles/applied-ai-services/form-recognizer/resource-customer-stories.md
@@ -7,8 +7,9 @@ manager: nitinme
ms.service: applied-ai-services
ms.subservice: forms-recognizer
ms.topic: conceptual
-ms.date: 02/04/2022
+ms.date: 05/25/2022
ms.author: lajanuar
+ms.custom: applied-ai-non-critical-form
---
# Customer spotlight
@@ -17,23 +18,26 @@ The following customers and partners have adopted Form Recognizer across a wide
| Customer/Partner | Description | Link |
|---------|-------------|----------------------|
-| **Acumatica** | [**Acumatica**](https://www.acumatica.com/) is a technology provider that develops cloud- and browser-based enterprise resource planning (ERP) software for small and medium-sized businesses (SMBs). To bring expense claims into the modern age, Acumatica incorporated Form Recognizer into its native application. The Form Recognizer's prebuilt-receipt API and machine learning capabilities are used to automatically extract data from receipts. Acumatica's customers can file multiple, error-free claims in a matter of seconds, freeing up more time to focus on other important tasks. | [Customer story](https://customers.microsoft.com/story/762684-acumatica-partner-professional-services-azure) |
-|**Arkas Logistics** | [**Arkas Logistics**](http://www.arkaslojistik.com.tr/) is operates under the umbrella of Arkas Holding, Turkey's leading holding institution and operating in 23 countries. During the COVID-19 crisis, Arkas Logistics has been able to provide outstanding, complete logistical services thanks to its focus on contactless operation and digitalization steps. Form Recognizer powers a solution that maintains the continuity of the supply chain and allows for uninterrupted service. | [Customer story](https://customers.microsoft.com/story/842149-arkas-logistics-transportation-azure-en-turkey ) |
+| **Acumatica** | [**Acumatica**](https://www.acumatica.com/) is a technology provider that develops cloud and browser-based enterprise resource planning (ERP) software for small and medium-sized businesses (SMBs). To bring expense claims into the modern age, Acumatica incorporated Form Recognizer into its native application. The Form Recognizer's prebuilt-receipt API and machine learning capabilities are used to automatically extract data from receipts. Acumatica's customers can file multiple, error-free claims in a matter of seconds, freeing up more time to focus on other important tasks. | [Customer story](https://customers.microsoft.com/story/762684-acumatica-partner-professional-services-azure) |
+ | **Air Canada** | In September 2021, [**Air Canada**](https://www.aircanada.com/) was tasked with verifying the COVID-19 vaccination status of thousands of worldwide employees in only two months. After realizing manual verification would be too costly and complex within the time constraint, Air Canada turned to its internal AI team for an automated solution. The AI team partnered with Microsoft and used Form Recognizer to roll out a fully functional, accurate solution within weeks. This partnership met the government mandate on time and saved thousands of hours of manual work. | [Customer story](https://customers.microsoft.com/story/1505667713938806113-air-canada-travel-transportation-azure-form-recognizer)|
+|**Arkas Logistics** | [**Arkas Logistics**](http://www.arkaslojistik.com.tr/) is operates under the umbrella of Arkas Holding, Turkey's leading holding institution and operating in 23 countries. During the COVID-19 crisis, the company has been able to provide outstanding, complete logistical services thanks to its focus on contactless operation and digitalization steps. Form Recognizer powers a solution that maintains the continuity of the supply chain and allows for uninterrupted service. | [Customer story](https://customers.microsoft.com/story/842149-arkas-logistics-transportation-azure-en-turkey ) |
|**Automation Anywhere**| [**Automation Anywhere**](https://www.automationanywhere.com/) is on a singular and unwavering mission to democratize automation by liberating teams from mundane, repetitive tasks, and allowing more time for innovation and creativity with cloud-native robotic process automation (RPA)software. To protect the citizens of the United Kingdom, healthcare providers must process tens of thousands of COVID-19 tests daily, each one accompanied by a form for the World Health Organization (WHO). Manually completing and processing these forms would potentially slow testing and divert resources away from patient care. In response, Automation Anywhere built an AI-powered bot to help a healthcare provider automatically process and submit the COVID-19 test forms at scale. | [Customer story](https://customers.microsoft.com/story/811346-automation-anywhere-partner-professional-services-azure-cognitive-services) |
|**AvidXchange**| [**AvidXchange**](https://www.avidxchange.com/) has developed an accounts payable automation solution applying Form Recognizer. AvidXchange partners with Azure Cognitive Services to deliver an accounts payable automation solution for the middle market. Customers benefit from faster invoice processing times and increased accuracy to ensure their suppliers are paid the right amount, at the right time. | [Blog](https://techcommunity.microsoft.com/t5/azure-ai/form-recognizer-now-reads-more-languages-processes-ids-and/ba-p/2179428)|
|**Blue Prism**| [**Blue Prism**](https://www.blueprism.com/) Decipher is an AI-powered document processing capability that's directly embedded into the company's connected-RPA platform. Decipher works with Form Recognizer to help organizations process forms faster and with less human effort. One of Blue Prism's customers has been testing the solution to automate invoice handling as part of its procurement process. | [Customer story](https://customers.microsoft.com/story/737482-blue-prism-partner-professional-services-azure) |
|**Chevron**| [**Chevron**](https://www.chevron.com//) Canada Business Unit is now using Form Recognizer with UiPath's robotic process automation platform to automate the extraction of data and move it into back-end systems for analysis. Subject matter experts have more time to focus on higher-value activities and information flows more rapidly. Accelerated operational control enables the company to analyze its business with greater speed, accuracy, and depth. | [Customer story](https://customers.microsoft.com/story/chevron-mining-oil-gas-azure-cognitive-services)|
|**Cross Masters**|[**Cross Masters**](https://crossmasters.com/), uses cutting-edge AI technologies not only as a passion, but as an essential part of a work culture requiring continuous innovation. One of the latest success stories is automation of manual paperwork required to process thousands of invoices. Cross Masters used Form Recognizer to develop a unique, customized solution, to provide clients with market insights from a large set of collected invoices. Most impressive is the extraction quality and continuous introduction of new features, such as model composing and table labeling. | [Blog](https://techcommunity.microsoft.com/t5/azure-ai/form-recognizer-now-reads-more-languages-processes-ids-and/ba-p/2179428)|
-|**Element**| [**Element**](https://www.element.com/) is a global business that provides specialist testing, inspection, and certification services to a diverse range of businesses. Element is one of the fastest growing companies in the global testing, inspection and certification sector having over 6,500 engaged experts working in more than 200 facilities across the globe. When the finance team for the Americas was forced to work from home during the COVID-19 pandemic, it needed to digitalize its paper processes fast. The creativity of the team and its use of Azure Form Recognizer delivered more than business as usual—it delivered significant efficiencies. The Element team used the tools in Microsoft Azure so the next phase could be expedited. Rather than coding from scratch, they saw the opportunity to use the Azure Form Recognizer. This integration quickly gave them the functionality they needed, together with the agility and security of Microsoft Azure. Microsoft Azure Logic Apps is used to automate the process of extracting the documents from email, storing them, and updating the system with the extracted data. Computer Vision, part of Azure Cognitive Services, partners with Azure Form Recognizer to extract the right data points from the invoice documents—whether they're a pdf or scanned images. | [Customer story](https://customers.microsoft.com/story/1414941527887021413-element)|
-|**Emaar Properties**| [**Emaar Properties**](https://www.emaar.com/en/), operates Dubai Mall, the world's most-visited retail and entertainment destination. Each year, the Dubai Mall draws more than 80 million visitors. To enrich the shopping experience, Emaar Properties offers a unique rewards program through a dedicated mobile app. Loyalty program points are earned via submitted receipts. Emaar Properties uses Microsoft Azure Form Recognizer to process submitted receipts and has achieved 92 percent reading accuracy.| [Customer story](https://customers.microsoft.com/story/1459754150957690925-emaar-retailers-azure-en-united-arab-emirates)|
-|**EY**| [**EY**](https://ey.com/) (Ernst & Young Global Limited) is a multinational professional services network that helps to create long-term value for clients and build trust in the capital markets. Enabled by data and technology, diverse EY teams in over 150 countries to help clients grow, transform, and operate. EY teams work across assurance, consulting, law, strategy, tax, and transactions to find solutions for complex issues facing our world today. The EY Technology team collaborated with Microsoft to build a platform that hastens invoice extraction and contract comparison processes. Azure Form Recognizer and Custom Vision partnered to enable EY teams to automate and improve the OCR and document handling processes for its consulting, tax, audit, and transactions services clients. | [Customer story](https://customers.microsoft.com/story/1404985164224935715-ey-professional-services-azure-form-recognizer)|
-|**Financial Fabric**| [**Financial Fabric**](https://www.financialfabric.com//), a Microsoft Cloud Solution Provider, delivers data architecture, science, and analytics services to investment managers at hedge funds, family offices, and corporate treasuries. Its daily processes involve extracting and normalizing data from thousands of complex financial documents, such as bank statements and legal agreements. The company then provides custom analytics to help its clients make better investment decisions. Extracting this data previously took days or weeks. By using Form Recognizer, Financial Fabric has reduced the time it takes to go from extraction to analysis to just minutes. | [Customer story](https://customers.microsoft.com/story/financial-fabric-banking-capital-markets-azure)|
-|**GEP**| [**GEP**](https://www.gep.com/) has developed an invoice processing solution for a client using Form Recognizer. "At GEP, we're seeing AI and automation make a profound impact on procurement and the supply chain. By combining our AI solution with Microsoft Form Recognizer, we automated the processing of 4,000 invoices a day for a client... It saved them tens of thousands of hours of manual effort, while improving accuracy, controls and compliance on a global scale." Sarateudu Sethi, GEP's Vice President of Artificial Intelligence. | [Blog](https://techcommunity.microsoft.com/t5/azure-ai/form-recognizer-now-reads-more-languages-processes-ids-and/ba-p/2179428)|
+|**Element**| [**Element**](https://www.element.com/) is a global business that provides specialist testing, inspection, and certification services to a diverse range of businesses. Element is one of the fastest growing companies in the global testing, inspection and certification sector having over 6,500 engaged experts working in more than 200 facilities across the globe. When the finance team for the Americas was forced to work from home during the COVID-19 pandemic, it needed to digitalize its paper processes fast. The creativity of the team and its use of Azure Form Recognizer delivered more than business as usual—it delivered significant efficiencies. The Element team used the tools in Azure so the next phase could be expedited. Rather than coding from scratch, they saw the opportunity to use the Azure Form Recognizer. This integration quickly gave them the functionality they needed, together with the agility and security of Azure. Azure Logic Apps is used to automate the process of extracting the documents from email, storing them, and updating the system with the extracted data. Computer Vision, part of Azure Cognitive Services, partners with Azure Form Recognizer to extract the right data points from the invoice documents—whether they're a pdf or scanned images. | [Customer story](https://customers.microsoft.com/story/1414941527887021413-element)|
+|**Emaar Properties**| [**Emaar Properties**](https://www.emaar.com/en/), operates Dubai Mall, the world's most-visited retail and entertainment destination. Each year, the Dubai Mall draws more than 80 million visitors. To enrich the shopping experience, Emaar Properties offers a unique rewards program through a dedicated mobile app. Loyalty program points are earned via submitted receipts. Emaar Properties uses Azure Form Recognizer to process submitted receipts and has achieved 92 percent reading accuracy.| [Customer story](https://customers.microsoft.com/story/1459754150957690925-emaar-retailers-azure-en-united-arab-emirates)|
+|**EY**| [**EY**](https://ey.com/) (Ernst & Young Global Limited) is a multinational professional services network that helps to create long-term value for clients and build trust in the capital markets. Enabled by data and technology, diverse EY teams in over 150 countries to help clients grow, transform, and operate. EY teams work across assurance, consulting, law, strategy, tax, and transactions to find solutions for complex issues facing our world today. The EY Technology team collaborated with Microsoft to build a platform that hastens invoice extraction and contract comparison processes. Azure Form Recognizer and Custom Vision partnered to enable EY teams to automate and improve the OCR and document handling processes for its transactions services clients. | [Customer story](https://customers.microsoft.com/story/1404985164224935715-ey-professional-services-azure-form-recognizer)|
+|**Financial Fabric**| [**Financial Fabric**](https://www.financialfabric.com/), a Microsoft Cloud Solution Provider, delivers data architecture, science, and analytics services to investment managers at hedge funds, family offices, and corporate treasuries. Its daily processes involve extracting and normalizing data from thousands of complex financial documents, such as bank statements and legal agreements. The company then provides custom analytics to help its clients make better investment decisions. Extracting this data previously took days or weeks. By using Form Recognizer, Financial Fabric has reduced the time it takes to go from extraction to analysis to just minutes. | [Customer story](https://customers.microsoft.com/story/financial-fabric-banking-capital-markets-azure)|
+|**Fujitsu**| [**Fujitsu**](https://scanners.us.fujitsu.com/about-us) is the world leader in document scanning technology, with more than 50 percent of global market share, but that doesn't stop the company from constantly innovating. To improve the performance and accuracy of its cloud scanning solution, Fujitsu incorporated Azure Form Recognizer. It took only a few months to deploy the new technologies, and they have boosted character recognition rates as high as 99.9 percent. This collaboration helps Fujitsu deliver market-leading innovation and give its customers powerful and flexible tools for end-to-end document management. | [Customer story](https://customers.microsoft.com/en-us/story/1504311236437869486-fujitsu-document-scanning-azure-form-recognizer)|
+|**GEP**| [**GEP**](https://www.gep.com/) has developed an invoice processing solution for a client using Form Recognizer. GEP combined their AI solution with Azure Form Recognizer to automate the processing of 4,000 invoices a day for a client saving them tens of thousands of hours of manual effort. This collaborative effort improved accuracy, controls, and compliance on a global scale." Sarateudu Sethi, GEP's Vice President of Artificial Intelligence. | [Blog](https://techcommunity.microsoft.com/t5/azure-ai/form-recognizer-now-reads-more-languages-processes-ids-and/ba-p/2179428)|
|**HCA Healthcare**| [**HCA Healthcare**](https://hcahealthcare.com/) is one of the nation's leading providers of healthcare with over 180 hospitals and 2,000 sites-of-care located throughout the United States and serving approximately 35 million patients each year. Currently, they're using Azure Form Recognizer to simplify and improve the patient onboarding experience and reducing administrative time spent entering repetitive data into the care center's system. | [Customer story](https://customers.microsoft.com/story/1404891793134114534-hca-healthcare-healthcare-provider-azure)|
|**Icertis**| [**Icertis**](https://www.icertis.com/), is a Software as a Service (SaaS) provider headquartered in Bellevue, Washington. Icertis digitally transforms the contract management process with a cloud-based, AI-powered, contract lifecycle management solution. Azure Form Recognizer enables Icertis Contract Intelligence to take key-value pairs embedded in contracts and create structured data understood and operated upon by machine algorithms. Through these and other powerful Azure Cognitive and AI services, Icertis empowers customers in every industry to improve business in multiple ways: optimized manufacturing operations, added agility to retail strategies, reduced risk in IT services, and faster delivery of life-saving pharmaceutical products. | [Blog](https://cloudblogs.microsoft.com/industry-blog/en-in/unicorn/2022/01/12/how-icertis-built-a-contract-management-solution-using-azure-form-recognizer/)|
-|**Instabase**| [**Instabase**](https://instabase.com/) is a horizontal application platform that provides best-in-class machine learning processes to help retrieve, organize, identify, and understand complex masses of unorganized data. Instabase then brings this data into business workflows as organized information. The platform provides a repository of integrative applications to orchestrate and harness that information with the means to rapidly extend and enhance them as required. Instabase applications are fully containerized for widespread, infrastructure-agnostic deployment. | [Customer story](https://customers.microsoft.com/en-gb/story/1376278902865681018-instabase-partner-professional-services-azure)|
-|**Northern Trust**| [**Northern Trust**](https://www.northerntrust.com/) is a leading provider of wealth management, asset servicing, asset management, and banking to corporations, institutions, families, and individuals. As part of its initiative to digitize alternative asset servicing, Northern Trust has launched an AI-powered solution to extract unstructured investment data from alternative asset documents and making it accessible and actionable for asset-owner clients. Microsoft Azure Applied AI services accelerate time-to-value for enterprises building AI solutions. This proprietary solution transforms crucial information such as capital call notices, cash and stock distribution notices, and capital account statements from various unstructured formats into digital, actionable insights for investment teams. | [Customer story](https://www.businesswire.com/news/home/20210914005449/en/Northern-Trust-Automates-Data-Extraction-from-Alternative-Asset-Documentation)|
+|**Instabase**| [**Instabase**](https://instabase.com/) is a horizontal application platform that provides best-in-class machine learning processes to help retrieve, organize, identify, and understand complex masses of unorganized data. The application platform then brings this data into business workflows as organized information. This workflow provides a repository of integrative applications to orchestrate and harness that information with the means to rapidly extend and enhance them as required. The applications are fully containerized for widespread, infrastructure-agnostic deployment. | [Customer story](https://customers.microsoft.com/en-gb/story/1376278902865681018-instabase-partner-professional-services-azure)|
+|**Northern Trust**| [**Northern Trust**](https://www.northerntrust.com/) is a leading provider of wealth management, asset servicing, asset management, and banking to corporations, institutions, families, and individuals. As part of its initiative to digitize alternative asset servicing, Northern Trust has launched an AI-powered solution to extract unstructured investment data from alternative asset documents and making it accessible and actionable for asset-owner clients. Azure Applied AI services accelerate time-to-value for enterprises building AI solutions. This proprietary solution transforms crucial information from various unstructured formats into digital, actionable insights for investment teams. | [Customer story](https://www.businesswire.com/news/home/20210914005449/en/Northern-Trust-Automates-Data-Extraction-from-Alternative-Asset-Documentation)|
+|**Old Mutual**| [**Old Mutual**](https://www.oldmutual.co.za/) is Africa's leading financial services group with a comprehensive range of investment capabilities. They're the industry leader in retirement fund solutions, investments, asset management, group risk benefits, insurance, and multi-fund management. The Old Mutual team used Microsoft Natural Language Processing and Optical Character Recognition to provide the basis for automating key customer transactions received via emails. It also offered an opportunity to identify incomplete customer requests in order to nudge customers to the correct digital channels. Old Mutual's extensible solution technology was further developed as a microservice to be consumed by any enterprise application through a secure API management layer. | [Customer story](https://customers.microsoft.com/en-us/story/1507561807660098567-old-mutual-banking-capital-markets-azure-en-south-africa)|
|**Standard Bank**| [**Standard Bank of South Africa**](https://www.standardbank.co.za/southafrica/personal/home) is Africa's largest bank by assets. Standard Bank is headquartered in Johannesburg, South Africa, and has more than 150 years of trade experience in Africa and beyond. When manual due diligence in cross-border transactions began absorbing too much staff time, the bank decided it needed a new way forward. Standard Bank uses Form Recognizer to significantly reduce its cross-border payments registration and processing time. | [Customer story](https://customers.microsoft.com/en-hk/story/1395059149522299983-standard-bank-of-south-africa-banking-capital-markets-azure-en-south-africa)|
| **WEX**| [**WEX**](https://www.wexinc.com/) has developed a tool to process Explanation of Benefits documents using Form Recognizer. "The technology is truly amazing. I was initially worried that this type of solution wouldn't be feasible, but I soon realized that Form Recognizer can read virtually any document with accuracy." Matt Dallahan, Senior Vice President of Product Management and Strategy | [Blog](https://techcommunity.microsoft.com/t5/azure-ai/form-recognizer-now-reads-more-languages-processes-ids-and/ba-p/2179428)|
-|**Wilson Allen** | [**Wilson Allen**](https://wilsonallen.com/) took advantage of AI container support for Microsoft Azure Cognitive Services and created a powerful AI solution that help firms around the world find unprecedented levels of insight in previously siloed and unstructured data. Its clients can use this data to support business development and foster client relationships. | [Customer story](https://customers.microsoft.com/story/814361-wilson-allen-partner-professional-services-azure)|
-|**Zelros**| [**Zelros**](http://www.zelros.com/) offers AI-powered software for the insurance industry. Insurers use the Zelros platform to take in forms and seamlessly manage customer enrollment and claims filing. The company combined its technology with Form Recognizer to automatically pull key-value pairs and text out of documents. When insurers use the Zelros platform, they can quickly process paperwork, ensure high accuracy, and redirect thousands of hours previously spent on manual data extraction toward better service. | [Customer story](https://customers.microsoft.com/story/816397-zelros-insurance-azure)|
+|**Wilson Allen** | [**Wilson Allen**](https://wilsonallen.com/) took advantage of AI container support for Azure Cognitive Services and created a powerful AI solution that help firms around the world find unprecedented levels of insight in previously siloed and unstructured data. Its clients can use this data to support business development and foster client relationships. | [Customer story](https://customers.microsoft.com/story/814361-wilson-allen-partner-professional-services-azure)|
+|**Zelros**| [**Zelros**](http://www.zelros.com/) offers AI-powered software for the insurance industry. Insurers use the platform to take in forms and seamlessly manage customer enrollment and claims filing. The company combined its technology with Form Recognizer to automatically pull key-value pairs and text out of documents. When insurers use the platform, they can quickly process paperwork, ensure high accuracy, and redirect thousands of hours previously spent on manual data extraction toward better service. | [Customer story](https://customers.microsoft.com/story/816397-zelros-insurance-azure)|
diff --git a/articles/applied-ai-services/form-recognizer/service-limits.md b/articles/applied-ai-services/form-recognizer/service-limits.md
index da564f000d489..66eddf1b88a7c 100644
--- a/articles/applied-ai-services/form-recognizer/service-limits.md
+++ b/articles/applied-ai-services/form-recognizer/service-limits.md
@@ -8,7 +8,7 @@ manager: nitinme
ms.service: applied-ai-services
ms.subservice: forms-recognizer
ms.topic: conceptual
-ms.date: 05/23/2022
+ms.date: 06/06/2022
ms.author: lajanuar
---
@@ -30,6 +30,10 @@ For the usage with [Form Recognizer SDK](quickstarts/try-v3-csharp-sdk.md), [For
| Adjustable | No | No |
| **Max size of OCR json response** | 500 MB | 500 MB |
| Adjustable | No | No |
+| **Max number of Template models** | 500 | 5000 |
+| Adjustable | No | No |
+| **Max number of Neural models** | 100 | 500 |
+| Adjustable | No | No |
# [Form Recognizer v3.0 (Preview)](#tab/v30)
diff --git a/articles/applied-ai-services/form-recognizer/toc.yml b/articles/applied-ai-services/form-recognizer/toc.yml
index dba6bde2ab60e..8dd00c9950efb 100644
--- a/articles/applied-ai-services/form-recognizer/toc.yml
+++ b/articles/applied-ai-services/form-recognizer/toc.yml
@@ -48,8 +48,8 @@ items:
href: how-to-guides/use-prebuilt-read.md
- name: Use SDKs and the REST API (v2.1)
href: how-to-guides/try-sdk-rest-api.md
- - name: Create SAS tokens for Azure Blob storage
- href: generate-sas-tokens.md
+ - name: Create SAS tokens for storage containers
+ href: create-sas-tokens.md
- name: Custom models
items:
- name: Build a custom model (v2.1)
@@ -182,7 +182,7 @@ items:
- name: Azure Form Recognizer REST API v3.0 (preview)
items:
- name: REST API v3.0 reference
- href: https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v3-0-preview-2/operations/AnalyzeDocument
+ href: https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2022-06-30-preview/operations/AnalyzeDocument
- name: Client libraries and SDKs
items:
- name: .NET
diff --git a/articles/applied-ai-services/form-recognizer/tutorial-azure-function.md b/articles/applied-ai-services/form-recognizer/tutorial-azure-function.md
index cce14d5c50a0a..f216192aa1bef 100644
--- a/articles/applied-ai-services/form-recognizer/tutorial-azure-function.md
+++ b/articles/applied-ai-services/form-recognizer/tutorial-azure-function.md
@@ -10,6 +10,7 @@ ms.subservice: forms-recognizer
ms.topic: tutorial
ms.date: 03/19/2021
ms.author: lajanuar
+ms.custom: applied-ai-non-critical-form
---
# Tutorial: Use an Azure Function to process stored documents
@@ -255,4 +256,4 @@ In this tutorial, you learned how to use an Azure Function written in Python to
> [Microsoft Power BI](https://powerbi.microsoft.com/integrations/azure-table-storage/)
* [What is Form Recognizer?](overview.md)
-* Learn more about the [Layout API](concept-layout.md)
\ No newline at end of file
+* Learn more about the [Layout API](concept-layout.md)
diff --git a/articles/applied-ai-services/form-recognizer/v3-migration-guide.md b/articles/applied-ai-services/form-recognizer/v3-migration-guide.md
index b72cc784164d2..bca025ae5a4ef 100644
--- a/articles/applied-ai-services/form-recognizer/v3-migration-guide.md
+++ b/articles/applied-ai-services/form-recognizer/v3-migration-guide.md
@@ -7,7 +7,7 @@ manager: nitinme
ms.service: applied-ai-services
ms.subservice: forms-recognizer
ms.topic: how-to
-ms.date: 02/15/2022
+ms.date: 06/06/2022
ms.author: lajanuar
recommendations: false
---
@@ -25,10 +25,16 @@ Form Recognizer v3.0 (preview) introduces several new features and capabilities:
* [**Custom document model (v3.0)**](concept-custom-neural.md) is a new custom model type to extract fields from structured and unstructured documents.
* [**Receipt (v3.0)**](concept-receipt.md) model supports single-page hotel receipt processing.
* [**ID document (v3.0)**](concept-id-document.md) model supports endorsements, restrictions, and vehicle classification extraction from US driver's licenses.
-* [**Custom model API (v3.0)**](concept-custom.md) supports signature detection for custom forms.
+* [**Custom model API (v3.0)**](concept-custom.md) supports signature detection for custom template models.
+* [**Custom model API (v3.0)**](overview.md) supports analysis of all the newly added prebuilt models. For a complete list of prebuilt models, see the [overview](overview.md) page.
In this article, you'll learn the differences between Form Recognizer v2.1 and v3.0 and how to move to the newer version of the API.
+> [!CAUTION]
+>
+> * REST API **2022-06-30-preview** release includes a breaking change in the REST API analyze response JSON.
+> * The `boundingBox` property is renamed to `polygon` in each instance.
+
## Changes to the REST API endpoints
The v3.0 REST API combines the analysis operations for layout analysis, prebuilt models, and custom models into a single pair of operations by assigning **`documentModels`** and **`modelId`** to the layout analysis (prebuilt-layout) and prebuilt models.
@@ -36,14 +42,14 @@ In this article, you'll learn the differences between Form Recognizer v2.1 and v
### POST request
```http
-https://{your-form-recognizer-endpoint}/formrecognizer/documentModels/{modelId}?api-version=2022-01-30-preview
+https://{your-form-recognizer-endpoint}/formrecognizer/documentModels/{modelId}?api-version=2022-06-30
```
### GET request
```http
-https://{your-form-recognizer-endpoint}/formrecognizer/documentModels/{modelId}/AnalyzeResult/{resultId}?api-version=2022-01-30-preview
+https://{your-form-recognizer-endpoint}/formrecognizer/documentModels/{modelId}/AnalyzeResult/{resultId}?api-version=2022-06-30
```
### Analyze operation
@@ -56,14 +62,14 @@ https://{your-form-recognizer-endpoint}/formrecognizer/documentModels/{modelId}/
| Model | v2.1 | v3.0 |
|:--| :--| :--|
| **Request URL prefix**| **https://{your-form-recognizer-endpoint}/formrecognizer/v2.1** | **https://{your-form-recognizer-endpoint}/formrecognizer** |
-|🆕 **General document**|N/A|/documentModels/prebuilt-document:analyze |
-| **Layout**| /layout/analyze |/documentModels/prebuilt-layout:analyze|
-|**Custom**| /custom/{modelId}/analyze |/documentModels/{modelId}:analyze |
-| **Invoice** | /prebuilt/invoice/analyze | /documentModels/prebuilt-invoice:analyze |
-| **Receipt** | /prebuilt/receipt/analyze | /documentModels/prebuilt-receipt:analyze |
-| **ID document** | /prebuilt/idDocument/analyze | /documentModels/prebuilt-idDocument:analyze |
-|**Business card**| /prebuilt/businessCard/analyze| /documentModels/prebuilt-businessCard:analyze|
-|**W-2**| /prebuilt/w-2/analyze| /documentModels/prebuilt-w-2:analyze|
+|🆕 **General document**|N/A|`/documentModels/prebuilt-document:analyze` |
+| **Layout**| /layout/analyze |`/documentModels/prebuilt-layout:analyze`|
+|**Custom**| /custom/{modelId}/analyze |`/documentModels/{modelId}:analyze` |
+| **Invoice** | /prebuilt/invoice/analyze | `/documentModels/prebuilt-invoice:analyze` |
+| **Receipt** | /prebuilt/receipt/analyze | `/documentModels/prebuilt-receipt:analyze` |
+| **ID document** | /prebuilt/idDocument/analyze | `/documentModels/prebuilt-idDocument:analyze` |
+|**Business card**| /prebuilt/businessCard/analyze| `/documentModels/prebuilt-businessCard:analyze`|
+|**W-2**| /prebuilt/w-2/analyze| `/documentModels/prebuilt-w-2:analyze`|
### Analyze request body
@@ -89,10 +95,10 @@ Base64 encoding is also supported in Form Recognizer v3.0:
Parameters that continue to be supported:
-* `pages`
-* `locale`
+* `pages` : Analyze only a specific subset of pages in the document. List of page numbers indexed from the number `1` to analyze. Ex. "1-3,5,7-9"
+* `locale` : Locale hint for text recognition and document analysis. Value may contain only the language code (ex. "en", "fr") or BCP 47 language tag (ex. "en-US").
-Parameters no longer supported:
+Parameters no longer supported:
* includeTextDetails
@@ -117,7 +123,7 @@ Analyze response has been refactored to the following top-level results to suppo
{
// Basic analyze result metadata
-"apiVersion": "2022-01-30-preview", // REST API version used
+"apiVersion": "2022-06-30", // REST API version used
"modelId": "prebuilt-invoice", // ModelId used
"stringIndexType": "textElements", // Character unit used for string offsets and lengths:
// textElements, unicodeCodePoint, utf16CodeUnit // Concatenated content in global reading order across pages.
@@ -131,7 +137,7 @@ Analyze response has been refactored to the following top-level results to suppo
"angle": 0, // Orientation of content in clockwise direction (degree)
"width": 0, // Page width
"height": 0, // Page height
-"unit": "pixel", // Unit for width, height, and bounding box coordinates
+"unit": "pixel", // Unit for width, height, and polygon coordinates
"spans": [ // Parts of top-level content covered by page
{
"offset": 0, // Offset in content
@@ -167,10 +173,10 @@ Analyze response has been refactored to the following top-level results to suppo
{
"rowCount": 1, // Number of rows in table
"columnCount": 1, // Number of columns in table
-"boundingRegions": [ // Bounding boxes potentially across pages covered by table
+"boundingRegions": [ // Polygons or Bounding boxes potentially across pages covered by table
{
"pageNumber": 1, // 1-indexed page number
-"boundingBox": [ ... ], // Bounding box
+"polygon": [ ... ], // Previously Bounding box, renamed to polygon in the 2022-06-30-preview API
}
],
"spans": [ ... ], // Parts of top-level content covered by table // List of cells in table
@@ -240,8 +246,6 @@ Analyze response has been refactored to the following top-level results to suppo
]
}
-
-
```
## Build or train model
@@ -250,14 +254,14 @@ The model object has three updates in the new API
* ```modelId``` is now a property that can be set on a model for a human readable name.
* ```modelName``` has been renamed to ```description```
-* ```buildMode``` is a new proerty with values of ```template``` for custom form models or ```neural``` for custom document models.
+* ```buildMode``` is a new property with values of ```template``` for custom form models or ```neural``` for custom document models.
-The ```build``` operation is invoked to train a model. The request payload and call pattern remain unchanged. The build operation specifies the model and training dataset, it returns the result via the Operation-Location header in the response. Poll this model operation URL, via a GET request to check the status of the build operation (minimum recommended interval between requests is 1 second). Unlike v2.1, this URL is not the resource location of the model. Instead, the model URL can be constructed from the given modelId, also retrieved from the resourceLocation property in the response. Upon success, status is set to ```succeeded``` and result contains the custom model info. If errors are encountered, status is set to ```failed``` and the error is returned.
+The ```build``` operation is invoked to train a model. The request payload and call pattern remain unchanged. The build operation specifies the model and training dataset, it returns the result via the Operation-Location header in the response. Poll this model operation URL, via a GET request to check the status of the build operation (minimum recommended interval between requests is 1 second). Unlike v2.1, this URL isn't the resource location of the model. Instead, the model URL can be constructed from the given modelId, also retrieved from the resourceLocation property in the response. Upon success, status is set to ```succeeded``` and result contains the custom model info. If errors are encountered, status is set to ```failed``` and the error is returned.
The following code is a sample build request using a SAS token. Note the trailing slash when setting the prefix or folder path.
```json
-POST https://{your-form-recognizer-endpoint}/formrecognizer/documentModels:build?api-version=2022-01-30-preview
+POST https://{your-form-recognizer-endpoint}/formrecognizer/documentModels:build?api-version=2022-06-30
{
"modelId": {modelId},
@@ -275,7 +279,7 @@ POST https://{your-form-recognizer-endpoint}/formrecognizer/documentModels:build
Model compose is now limited to single level of nesting. Composed models are now consistent with custom models with the addition of ```modelId``` and ```description``` properties.
```json
-POST https://{your-form-recognizer-endpoint}/formrecognizer/documentModels:compose?api-version=2022-01-30-preview
+POST https://{your-form-recognizer-endpoint}/formrecognizer/documentModels:compose?api-version=2022-06-30
{
"modelId": "{composedModelId}",
"description": "{composedModelDescription}",
@@ -303,7 +307,7 @@ The only changes to the copy model function are:
***Authorize the copy***
```json
-POST https://{targetHost}/formrecognizer/documentModels:authorizeCopy?api-version=2022-01-30-preview
+POST https://{targetHost}/formrecognizer/documentModels:authorizeCopy?api-version=2022-06-30
{
"modelId": "{targetModelId}",
"description": "{targetModelDescription}",
@@ -313,7 +317,7 @@ POST https://{targetHost}/formrecognizer/documentModels:authorizeCopy?api-versio
Use the response body from the authorize action to construct the request for the copy.
```json
-POST https://{sourceHost}/formrecognizer/documentModels/{sourceModelId}:copy-to?api-version=2022-01-30-preview
+POST https://{sourceHost}/formrecognizer/documentModels/{sourceModelId}:copy-to?api-version=2022-06-30
{
"targetResourceId": "{targetResourceId}",
"targetResourceRegion": "{targetResourceRegion}",
@@ -331,7 +335,7 @@ List models have been extended to now return prebuilt and custom models. All pre
***Sample list models request***
```json
-GET https://{your-form-recognizer-endpoint}/formrecognizer/documentModels?api-version=2022-01-30-preview
+GET https://{your-form-recognizer-endpoint}/formrecognizer/documentModels?api-version=2022-06-30
```
## Change to get model
@@ -339,7 +343,7 @@ GET https://{your-form-recognizer-endpoint}/formrecognizer/documentModels?api-ve
As get model now includes prebuilt models, the get operation returns a ```docTypes``` dictionary. Each document type is described by its name, optional description, field schema, and optional field confidence. The field schema describes the list of fields potentially returned with the document type.
```json
-GET https://{your-form-recognizer-endpoint}/formrecognizer/documentModels/{modelId}?api-version=2022-01-30-preview
+GET https://{your-form-recognizer-endpoint}/formrecognizer/documentModels/{modelId}?api-version=2022-06-30
```
## New get info operation
@@ -347,7 +351,7 @@ GET https://{your-form-recognizer-endpoint}/formrecognizer/documentModels/{model
The ```info``` operation on the service returns the custom model count and custom model limit.
```json
-GET https://{your-form-recognizer-endpoint}/formrecognizer/info? api-version=2022-01-30-preview
+GET https://{your-form-recognizer-endpoint}/formrecognizer/info? api-version=2022-06-30
```
***Sample response***
@@ -365,6 +369,6 @@ GET https://{your-form-recognizer-endpoint}/formrecognizer/info? api-version=202
In this migration guide, you've learned how to upgrade your existing Form Recognizer application to use the v3.0 APIs. Continue to use the 2.1 API for all GA features and use the 3.0 API for any of the preview features.
-* [Review the new REST API](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v3-0-preview-1/operations/AnalyzeDocument)
+* [Review the new REST API](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2022-06-30-preview/operations/AnalyzeDocument)
* [What is Form Recognizer?](overview.md)
* [Form Recognizer quickstart](./quickstarts/try-sdk-rest-api.md)
\ No newline at end of file
diff --git a/articles/applied-ai-services/form-recognizer/whats-new.md b/articles/applied-ai-services/form-recognizer/whats-new.md
index c0a9b6858a148..84057c6c71235 100644
--- a/articles/applied-ai-services/form-recognizer/whats-new.md
+++ b/articles/applied-ai-services/form-recognizer/whats-new.md
@@ -7,9 +7,8 @@ manager: nitinme
ms.service: applied-ai-services
ms.subservice: forms-recognizer
ms.topic: conceptual
-ms.date: 02/28/2022
+ms.date: 06/06/2022
ms.author: lajanuar
-ms.custom: ignite-fall-2021
---
@@ -18,6 +17,21 @@ ms.custom: ignite-fall-2021
Form Recognizer service is updated on an ongoing basis. Bookmark this page to stay up to date with release notes, feature enhancements, and documentation updates.
+## June 2022
+
+### Form Recognizer v3.0 preview release (beta.3)
+
+The **2022-06-30-preview** release is the latest update to the Form Recognizer service for v3.0 capabilities. There are considerable updates across the feature APIs:
+
+* [🆕 **Layout extends structure extraction**](concept-layout.md). Layout now includes added structure elements including sections, section headers, and paragraphs. This update enables finer grain document segmentation scenarios. For a complete list of structure elements identified, _see_ [enhanced structure](concept-layout.md#data-extraction).
+* [🆕 **Custom neural model tabular fields support**](concept-custom-neural.md). Custom document models now support tabular fields. Tabular fields by default are also multi page. To learn more about tabular fields in custom neural models, _see_ [tabular fields](concept-custom-neural.md#tabular-fields).
+* [🆕 **Custom template model tabular fields support for cross page tables**](concept-custom-template.md). Custom form models now support tabular fields across pages. To learn more about tabular fields in custom template models, _see_ [tabular fields](concept-custom-neural.md#tabular-fields).
+* [🆕 **Invoice model output now includes general document key-value pairs**](concept-invoice.md). Where invoices contain required fields beyond the fields included in the prebuilt model, the general document model supplements the output with key-value pairs. _See_ [key value pairs](concept-invoice.md#key-value-pairs-preview).
+* [🆕 **Invoice language expansion**](concept-invoice.md). The invoice model includes expanded language support. _See_ [supported languages](concept-invoice.md#supported-languages-and-locales).
+* [🆕 **Prebuilt business card**](concept-business-card.md) now includes Japanese language support. _See_ [supported languages](concept-business-card.md#supported-languages-and-locales).
+* [🆕 **Prebuilt ID document model**](concept-id-document.md). The ID document model now extracts DateOfIssue, Height, Weight, EyeColor, HairColor, and DocumentDiscriminator from US driver's licenses. _See_ [field extraction](concept-id-document.md#id-document-preview-field-extraction).
+* [🆕 **Read model now supports common Microsoft Office document types**](concept-read.md). Document types like Word (docx) and PowerPoint (ppt) are now supported with the Read API. See [page extraction](concept-read.md#pages).
+
## February 2022
### Form Recognizer v3.0 preview release
@@ -30,22 +44,23 @@ Form Recognizer service is updated on an ongoing basis. Bookmark this page to st
* [**General document**](concept-general-document.md) pre-trained model is now updated to support selection marks in addition to API text, tables, structure, key-value pairs, and named entities from forms and documents.
* [**Invoice API**](language-support.md#invoice-model) Invoice prebuilt model expands support to Spanish invoices.
* [**Form Recognizer Studio**](https://formrecognizer.appliedai.azure.com) adds new demos for Read, W2, Hotel receipt samples, and support for training the new custom neural models.
-* [**Language Expansion**](language-support.md) Form Recognizer Read, Layout, and Custom Form add support for 42 new languages including Arabic, Hindi, and other languages using Arabic and Devanagari scripts to expand the coverage to 164 languages. Handwritten support for the same features expands to Japanese and Korean in addition to English, Chinese Simplified, French, German, Italian, Portuguese, and Spanish languages.
+* [**Language Expansion**](language-support.md) Form Recognizer Read, Layout, and Custom Form add support for 42 new languages including Arabic, Hindi, and other languages using Arabic and Devanagari scripts to expand the coverage to 164 languages. Handwritten language support expands to Japanese and Korean.
Get started with the new [REST API](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v3-0-preview-2/operations/AnalyzeDocument), [Python](quickstarts/try-v3-python-sdk.md), or [.NET](quickstarts/try-v3-csharp-sdk.md) SDK for the v3.0 preview API.
#### Form Recognizer model data extraction
- | **Model** | **Text extraction** |**Key-Value pairs** |**Selection Marks** | **Tables** |**Entities** |
+ | **Model** | **Text extraction** |**Key-Value pairs** |**Selection Marks** | **Tables** |**Entities** |**Signatures**|
| --- | :---: |:---:| :---: | :---: |:---: |
- |🆕Read | ✓ | | | | |
- |🆕General document | ✓ | ✓ | ✓ | ✓ | ✓ |
- | Layout | ✓ | | ✓ | ✓ | |
- | Invoice | ✓ | ✓ | ✓ | ✓ ||
- |Receipt | ✓ | ✓ | | ||
- | ID document | ✓ | ✓ | | ||
- | Business card | ✓ | ✓ | | ||
- | Custom |✓ | ✓ | ✓ | ✓ | ✓ |
+ |🆕Read | ✓ | | | | | |
+ |🆕General document | ✓ | ✓ | ✓ | ✓ | ✓ | |
+ | Layout | ✓ | | ✓ | ✓ | | |
+ | Invoice | ✓ | ✓ | ✓ | ✓ || |
+ |Receipt | ✓ | ✓ | | || |
+ | ID document | ✓ | ✓ | | || |
+ | Business card | ✓ | ✓ | | || |
+ | Custom template |✓ | ✓ | ✓ | ✓ | | ✓ |
+ | Custom neural |✓ | ✓ | ✓ | ✓ | | |
#### Form Recognizer SDK beta preview release
@@ -562,7 +577,7 @@ pip package version 3.1.0b4
**Form Recognizer v2.1 public preview 3 is now available.** v2.1-preview.3 has been released, including the following features:
-* **New prebuilt ID model** The new prebuilt ID model enables customers to take IDs and return structured data to automate processing. It combines our powerful Optical Character Recognition (OCR) capabilities with ID understanding models to extract key information from passports and U.S. driver licenses, such as name, date of birth, issue date, expiration date, and more.
+* **New prebuilt ID model** The new prebuilt ID model enables customers to take IDs and return structured data to automate processing. It combines our powerful Optical Character Recognition (OCR) capabilities with ID understanding models to extract key information from passports and U.S. driver licenses.
[Learn more about the prebuilt ID model](./concept-id-document.md)
@@ -576,7 +591,7 @@ pip package version 3.1.0b4
:::image type="content" source="./media/table-labeling.png" alt-text="Table labeling" lightbox="./media/table-labeling.png":::
- In addition to labeling tables, you can now label empty values and regions; if some documents in your training set don't have values for certain fields, you can label them so that your model will know to extract values properly from analyzed documents.
+ In addition to labeling tables, you can now label empty values and regions. If some documents in your training set don't have values for certain fields, you can label them so that your model will know to extract values properly from analyzed documents.
* **Support for 66 new languages** - The Layout API and Custom Models for Form Recognizer now support 73 languages.
@@ -615,7 +630,7 @@ pip package version 3.1.0b4
![Screenshot: Sample Labeling tool.](./media/ui-preview.jpg)
* **Feedback Loop** - When Analyzing files via the Sample Labeling tool you can now also add it to the training set and adjust the labels if necessary and train to improve the model.
-* **Auto Label Documents** - Automatically labels additional documents based on previous labeled documents in the project.
+* **Auto Label Documents** - Automatically labels added documents based on previous labeled documents in the project.
## August 2020
@@ -661,7 +676,7 @@ pip package version 3.1.0b4
* **CopyModel API added to client SDKs** - You can now use the client SDKs to copy models from one subscription to another. See [Back up and recover models](./disaster-recovery.md) for general information on this feature.
* **Azure Active Directory integration** - You can now use your Azure AD credentials to authenticate your Form Recognizer client objects in the SDKs.
-* **SDK-specific changes** - This change includes both minor feature additions and breaking changes. For more information, *see* the SDK changelogs for more information.
+* **SDK-specific changes** - This change includes both minor feature additions and breaking changes. For more information, _see_ the SDK changelogs.
* [C# SDK Preview 3 changelog](https://github.com/Azure/azure-sdk-for-net/blob/master/sdk/formrecognizer/Azure.AI.FormRecognizer/CHANGELOG.md)
* [Python SDK Preview 3 changelog](https://github.com/Azure/azure-sdk-for-python/blob/master/sdk/formrecognizer/azure-ai-formrecognizer/CHANGELOG.md)
* [Java SDK Preview 3 changelog](https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/formrecognizer/azure-ai-formrecognizer/CHANGELOG.md)
@@ -677,9 +692,9 @@ pip package version 3.1.0b4
* [Python SDK](/python/api/overview/azure/ai-formrecognizer-readme)
* [JavaScript SDK](/javascript/api/overview/azure/ai-form-recognizer-readme)
- The new SDK supports all the features of the v2.0 REST API for Form Recognizer. For example, you can train a model with or without labels and extract text, key-value pairs and tables from your forms, extract data from receipts with the pre-built receipts service and extract text and tables with the layout service from your documents. You can share your feedback on the SDKs through the [SDK Feedback form](https://aka.ms/FR_SDK_v1_feedback).
+ The new SDK supports all the features of the v2.0 REST API for Form Recognizer. You can share your feedback on the SDKs through the [SDK Feedback form](https://aka.ms/FR_SDK_v1_feedback).
-* **Copy Custom Model** You can now copy models between regions and subscriptions using the new Copy Custom Model feature. Before invoking the Copy Custom Model API, you must first obtain authorization to copy into the target resource by calling the Copy Authorization operation against the target resource endpoint.
+* **Copy Custom Model** You can now copy models between regions and subscriptions using the new Copy Custom Model feature. Before invoking the Copy Custom Model API, you must first obtain authorization to copy into the target resource. This authorization is secured by calling the Copy Authorization operation against the target resource endpoint.
* [Generate a copy authorization](https://westus2.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v2/operations/CopyCustomFormModelAuthorization) REST API
* [Copy a custom model](https://westus2.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v2/operations/CopyCustomFormModel) REST API
diff --git a/articles/applied-ai-services/metrics-advisor/whats-new.md b/articles/applied-ai-services/metrics-advisor/whats-new.md
index d5a67006d1e9a..1670177f1a306 100644
--- a/articles/applied-ai-services/metrics-advisor/whats-new.md
+++ b/articles/applied-ai-services/metrics-advisor/whats-new.md
@@ -8,7 +8,7 @@ manager: nitinme
ms.service: applied-ai-services
ms.subservice: metrics-advisor
ms.topic: overview
-ms.date: 10/14/2020
+ms.date: 05/25/2022
ms.author: mbullwin
---
@@ -16,6 +16,12 @@ ms.author: mbullwin
Welcome! This page covers what's new in the Metrics Advisor docs. Check back every month for information on service changes, doc additions and updates this month.
+## May 2022
+
+ **Detection configuration auto-tuning** has been released. This feature enables you to customize the service to better surface and personalize anomalies. Instead of the traditional way of setting configurations for each time series or a group of time series. A guided experience is provided to capture your detection preferences, such as the level of sensitivity, and the types of anomaly patterns, which allows you to tailor the model to your own needs on the back end. Those preferences can then be applied to all the time series you're monitoring. This allows you to reduce configuration costs while achieving better detection results.
+
+Check out [this article](how-tos/configure-metrics.md#tune-the-detection-configuration) to learn how to take advantage of the new feature.
+
## SDK updates
If you want to learn about the latest updates to Metrics Advisor client SDKs see:
diff --git a/articles/attestation/attestation-token-examples.md b/articles/attestation/attestation-token-examples.md
new file mode 100644
index 0000000000000..b692d911e15df
--- /dev/null
+++ b/articles/attestation/attestation-token-examples.md
@@ -0,0 +1,138 @@
+---
+title: Examples of an Azure Attestation token
+description: Examples of Azure Attestation token
+services: attestation
+author: msmbaldwin
+ms.service: attestation
+ms.topic: overview
+ms.date: 06/07/2022
+ms.author: mbaldwin
+
+
+---
+# Examples of an attestation token
+
+Attestation policy is used to process the attestation evidence and determine whether Azure Attestation will issue an attestation token. Attestation token generation can be controlled with custom policies. Below are some examples of an attestation policy.
+
+## Sample JWT generated for SGX attestation
+
+```
+{
+ "alg": "RS256",
+ "jku": "https://tradewinds.us.attest.azure.net/certs",
+ "kid": ,
+ "exp": 1568187398,
+ "iat": 1568158598,
+ "is-debuggable": false,
+ "iss": "https://tradewinds.us.attest.azure.net",
+ "maa-attestationcollateral":
+ {
+ "qeidcertshash": ,
+ "qeidcrlhash": ,
+ "qeidhash": ,
+ "quotehash": ,
+ "tcbinfocertshash": ,
+ "tcbinfocrlhash": ,
+ "tcbinfohash":
+ },
+ "maa-ehd": ,
+ "nbf": 1568158598,
+ "product-id": 4639,
+ "sgx-mrenclave": ,
+ "sgx-mrsigner": ,
+ "svn": 0,
+ "tee": "sgx"
+ "x-ms-attestation-type": "sgx",
+ "x-ms-policy-hash": <>,
+ "x-ms-sgx-collateral":
+ {
+ "qeidcertshash": ,
+ "qeidcrlhash": ,
+ "qeidhash": ,
+ "quotehash": ,
+ "tcbinfocertshash": ,
+ "tcbinfocrlhash": ,
+ "tcbinfohash":
+ },
+ "x-ms-sgx-ehd": <>,
+ "x-ms-sgx-is-debuggable": true,
+ "x-ms-sgx-mrenclave": ,
+ "x-ms-sgx-mrsigner": ,
+ "x-ms-sgx-product-id": 1,
+ "x-ms-sgx-svn": 1,
+ "x-ms-ver": "1.0",
+ "x-ms-sgx-config-id": "000102030405060708090a0b0c0d8f99000102030405060708090a0b0c860e9a000102030405060708090a0b7d0d0e9b000102030405060708090a740c0d0e9c",
+ "x-ms-sgx-config-svn": 3451,
+ "x-ms-sgx-isv-extended-product-id": "8765432143211234abcdabcdef123456",
+ "x-ms-sgx-isv-family-id": "1234567812344321abcd1234567890ab"
+}.[Signature]
+```
+
+Some of the claims used above are considered deprecated but are fully supported. It is recommended that all future code and tooling use the non-deprecated claim names. See [claims issued by Azure Attestation](claim-sets.md) for more information.
+
+The below claims will appear only in the attestation token generated for Intel® Xeon® Scalable processor-based server platforms. The claims will not appear if the SGX enclave is not configured with [Key Separation and Sharing Support](https://github.com/openenclave/openenclave/issues/3054)
+
+**x-ms-sgx-config-id**
+
+**x-ms-sgx-config-svn**
+
+**x-ms-sgx-isv-extended-product-id**
+
+**x-ms-sgx-isv-family-id**
+
+## Sample JWT generated for SEV-SNP attestation
+
+```
+{
+ "exp": 1649970020,
+ "iat": 1649941220,
+ "iss": "https://maasandbox0001.wus.attest.azure.net",
+ "jti": "b65da1dcfbb4698b0bb2323cac664b745a2ff1cffbba55641fd65784aa9474d5",
+ "nbf": 1649941220,
+ "x-ms-attestation-type": "sevsnpvm",
+ "x-ms-compliance-status": "azure-compliant-cvm",
+ "x-ms-policy-hash": "LTPRQQju-FejAwdYihF8YV_c2XWebG9joKvrHKc3bxs",
+ "x-ms-runtime": {
+ "keys": [
+ {
+ "e": "AQAB",
+ "key_ops": ["encrypt"],
+ "kid": "HCLTransferKey",
+ "kty": "RSA",
+ "n": "ur08DccjGGzRo3OIq445n00Q3OthMIbR3SWIzCcicIM_7nPiVF5NBIknk2zdHZN1iiNhIzJezrXSqVT7Ty1Dl4AB5xiAAqxo7xGjFqlL47NA8WbZRMxQtwlsOjZgFxosDNXIt6dMq7ODh4nj6nV2JMScNfRKyr1XFIUK0XkOWvVlSlNZjaAxj8H4pS0yNfNwr1Q94VdSn3LPRuZBHE7VrofHRGSHJraDllfKT0-8oKW8EjpMwv1ME_OgPqPwLyiRzr99moB7uxzjEVDe55D2i2mPrcmT7kSsHwp5O2xKhM68rda6F-IT21JgdhQ6n4HWCicslBmx4oqkI-x5lVsRkQ"
+ }
+ ],
+ "vm-configuration": {
+ "secure-boot": true,
+ "secure-boot-template-id": "1734c6e8-3154-4dda-ba5f-a874cc483422",
+ "tpm-enabled": true,
+ "vmUniqueId": "AE5CBB2A-DC95-4870-A74A-EE4FB33B1A9C"
+ }
+ },
+ "x-ms-sevsnpvm-authorkeydigest": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "x-ms-sevsnpvm-bootloader-svn": 0,
+ "x-ms-sevsnpvm-familyId": "01000000000000000000000000000000",
+ "x-ms-sevsnpvm-guestsvn": 1,
+ "x-ms-sevsnpvm-hostdata": "0000000000000000000000000000000000000000000000000000000000000000",
+ "x-ms-sevsnpvm-idkeydigest": "38ed94f9aab20bc5eb40e89c7cbb03aa1b9efb435892656ade789ccaa0ded82ff18bae0e849c3166351ba1fa7ff620a2",
+ "x-ms-sevsnpvm-imageId": "02000000000000000000000000000000",
+ "x-ms-sevsnpvm-is-debuggable": false,
+ "x-ms-sevsnpvm-launchmeasurement": "04a170f39a3f702472ed0c7ecbda9babfc530e3caac475fdd607ff499177d14c278c5a15ad07ceacd5230ae63d507e9d",
+ "x-ms-sevsnpvm-microcode-svn": 40,
+ "x-ms-sevsnpvm-migration-allowed": false,
+ "x-ms-sevsnpvm-reportdata": "99dd4593a43f4b0f5f10f1856c7326eba309b943251fededc15592e3250ca9e90000000000000000000000000000000000000000000000000000000000000000",
+ "x-ms-sevsnpvm-reportid": "d1d5c2c71596fae601433ecdfb62799de2a785cc08be3b1c8a4e26a381494787",
+ "x-ms-sevsnpvm-smt-allowed": true,
+ "x-ms-sevsnpvm-snpfw-svn": 0,
+ "x-ms-sevsnpvm-tee-svn": 0,
+ "x-ms-sevsnpvm-vmpl": 0,
+ "x-ms-ver": "1.0"
+}
+```
+
+## Next steps
+
+- [View examples of an attestation policy](policy-examples.md)
diff --git a/articles/attestation/audit-logs.md b/articles/attestation/audit-logs.md
index 8ef8823540a49..8da2a9ece7b5c 100644
--- a/articles/attestation/audit-logs.md
+++ b/articles/attestation/audit-logs.md
@@ -65,7 +65,7 @@ Individual blobs are stored as text, formatted as a JSON blob. Let’s look at a
}
```
-Most of these fields are documented in the [Top-level common schema](/azure/azure-monitor/essentials/resource-logs-schema#top-level-common-schema). The following table lists the field names and descriptions for the entries not included in the top-level common schema:
+Most of these fields are documented in the [Top-level common schema](../azure-monitor/essentials/resource-logs-schema.md#top-level-common-schema). The following table lists the field names and descriptions for the entries not included in the top-level common schema:
| Field Name | Description |
|------------------------------------------|-----------------------------------------------------------------------------------------------|
@@ -82,4 +82,4 @@ The properties contain additional Azure attestation specific context:
| infoDataReceived | Information about the request received from the client. Includes some HTTP headers, the number of headers received, the content type and content length |
## Next steps
-- [How to enable Microsoft Azure Attestation logging ](azure-diagnostic-monitoring.md)
+- [How to enable Microsoft Azure Attestation logging ](azure-diagnostic-monitoring.md)
\ No newline at end of file
diff --git a/articles/attestation/basic-concepts.md b/articles/attestation/basic-concepts.md
index 795171a09a56d..a42a1e4806cfd 100755
--- a/articles/attestation/basic-concepts.md
+++ b/articles/attestation/basic-concepts.md
@@ -65,7 +65,7 @@ Attestation policy is used to process the attestation evidence and is configurab
If the default policy in the attestation provider doesn’t meet the needs, customers will be able to create custom policies in any of the regions supported by Azure Attestation. Policy management is a key feature provided to customers by Azure Attestation. Policies will be attestation type specific and can be used to identify enclaves or add claims to the output token or modify claims in an output token.
-See [examples of an attestation policy](policy-examples.md) for policy samples.
+See [examples of an attestation policy](policy-examples.md)
## Benefits of policy signing
@@ -83,74 +83,7 @@ Azure Attestation response will be a JSON string whose value contains JWT. Azure
The Get OpenID Metadata API returns an OpenID Configuration response as specified by the [OpenID Connect Discovery protocol](https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderConfig). The API retrieves metadata about the signing certificates in use by Azure Attestation.
-Example of JWT generated for an SGX enclave:
-
-```
-{
- "alg": "RS256",
- "jku": "https://tradewinds.us.attest.azure.net/certs",
- "kid": ,
- "exp": 1568187398,
- "iat": 1568158598,
- "is-debuggable": false,
- "iss": "https://tradewinds.us.attest.azure.net",
- "maa-attestationcollateral":
- {
- "qeidcertshash": ,
- "qeidcrlhash": ,
- "qeidhash": ,
- "quotehash": ,
- "tcbinfocertshash": ,
- "tcbinfocrlhash": ,
- "tcbinfohash":
- },
- "maa-ehd": ,
- "nbf": 1568158598,
- "product-id": 4639,
- "sgx-mrenclave": ,
- "sgx-mrsigner": ,
- "svn": 0,
- "tee": "sgx"
- "x-ms-attestation-type": "sgx",
- "x-ms-policy-hash": <>,
- "x-ms-sgx-collateral":
- {
- "qeidcertshash": ,
- "qeidcrlhash": ,
- "qeidhash": ,
- "quotehash": ,
- "tcbinfocertshash": ,
- "tcbinfocrlhash": ,
- "tcbinfohash":
- },
- "x-ms-sgx-ehd": <>,
- "x-ms-sgx-is-debuggable": true,
- "x-ms-sgx-mrenclave": ,
- "x-ms-sgx-mrsigner": ,
- "x-ms-sgx-product-id": 1,
- "x-ms-sgx-svn": 1,
- "x-ms-ver": "1.0",
- "x-ms-sgx-config-id": "000102030405060708090a0b0c0d8f99000102030405060708090a0b0c860e9a000102030405060708090a0b7d0d0e9b000102030405060708090a740c0d0e9c",
- "x-ms-sgx-config-svn": 3451,
- "x-ms-sgx-isv-extended-product-id": "8765432143211234abcdabcdef123456",
- "x-ms-sgx-isv-family-id": "1234567812344321abcd1234567890ab"
-}.[Signature]
-```
-
-Some of the claims used above are considered deprecated but are fully supported. It is recommended that all future code and tooling use the non-deprecated claim names. See [claims issued by Azure Attestation](claim-sets.md) for more information.
-
-The below claims will appear only in the attestation token generated for Intel® Xeon® Scalable processor-based server platforms. The claims will not appear if the SGX enclave is not configured with [Key Separation and Sharing Support](https://github.com/openenclave/openenclave/issues/3054)
-
-**x-ms-sgx-config-id**
-
-**x-ms-sgx-config-svn**
-
-**x-ms-sgx-isv-extended-product-id**
-
-**x-ms-sgx-isv-family-id**
+See [examples of attestation token](attestation-token-examples.md).
## Encryption of data at rest
diff --git a/articles/attestation/faq.yml b/articles/attestation/faq.yml
index 1558e5d837e3c..036037200ef21 100644
--- a/articles/attestation/faq.yml
+++ b/articles/attestation/faq.yml
@@ -51,12 +51,12 @@ sections:
The same process can be implemented for Azure Attestation. However to leverage the benefits offered by Trusted Hardware Identity Management (THIM), after installing ACC virtual machine, it is recommended to install [Azure DCAP library](https://www.nuget.org/packages/Microsoft.Azure.DCAP). Based on the agreement with Intel, when Azure DCAP library is installed, the requests for generating enclave evidence are redirected from Intel PCK caching service to THIM. Azure DCAP library is supported in Windows and Linux-based environments.
- question: |
- How to shift to Azure Attestation from other attestation models
+ How to shift to Azure Attestation from other SGX attestation models
answer: |
- After installing Azure Confidential computing virtual machine, install Azure DCAP library ([Windows/](https://www.nuget.org/packages/Microsoft.Azure.DCAP/) [Linux](https://packages.microsoft.com/ubuntu/18.04/prod/pool/main/a/az-dcap-client/)) to leverage the benefits offered by Trusted Hardware Identity Management (THIM).
- Remote attestation client needs to be authored which can retrieve the enclave evidence and send requests to Azure Attestation. See [code samples](/samples/browse/?expanded=azure&terms=attestation) for reference
- Attestation requests can be sent to the REST API endpoint of default providers or custom attestation providers
- - Azure Attestation APIs are protected by Azure AD authentication. Hence the client that invokes attest APIs must be able to obtain and pass a valid Azure AD access token in the attestation request
+ - In [2018-09-01-preview](https://github.com/Azure/azure-rest-api-specs/tree/master/specification/attestation/data-plane/Microsoft.Attestation/stable/2018-09-01-preview) API version, the client needs to send Azure AD access token along with the evidence to SGX attest API endpoint. The Azure AD access token is not a required parameter to perform SGX attestation in [2020-10-01](https://github.com/Azure/azure-rest-api-specs/tree/master/specification/attestation/data-plane/Microsoft.Attestation/stable/2020-10-01) API version
- question: |
How can the relying party verify the integrity of attestation token and confirm that Azure Attestation is running inside an enclave
diff --git a/articles/attestation/overview.md b/articles/attestation/overview.md
index dd75bc2372731..1a8d549c7a3be 100755
--- a/articles/attestation/overview.md
+++ b/articles/attestation/overview.md
@@ -54,7 +54,7 @@ Azure [Confidential VM](../confidential-computing/confidential-vm-overview.md) (
Azure customers can [prevent bootkit and rootkit infections](https://www.youtube.com/watch?v=CQqu_rTSi0Q) by enabling [Trusted launch](../virtual-machines/trusted-launch.md)) for their virtual machines (VMs). When the VM is Secure Boot and vTPM enabled with guest attestation extension installed, vTPM measurements get submitted to Azure Attestation periodically for monitoring of boot integrity. An attestation failure indicates potential malware, which is surfaced to customers via Microsoft Defender for Cloud, through Alerts and Recommendations.
-## Azure Attestation can run in a TEE
+## Azure Attestation runs in a TEE
Azure Attestation is critical to Confidential Computing scenarios, as it performs the following actions:
@@ -63,11 +63,7 @@ Azure Attestation is critical to Confidential Computing scenarios, as it perform
- Manages and stores tenant-specific policies.
- Generates and signs a token that is used by relying parties to interact with the enclave.
-Azure Attestation is built to run in two types of environments:
-- Azure Attestation running in an SGX enabled TEE.
-- Azure Attestation running in a non-TEE.
-
-Azure Attestation customers have expressed a requirement for Microsoft to be operationally out of trusted computing base (TCB). This is to prevent Microsoft entities such as VM admins, host admins, and Microsoft developers from modifying attestation requests, policies, and Azure Attestation-issued tokens. Azure Attestation is also built to run in TEE, where features of Azure Attestation like quote validation, token generation, and token signing are moved into an SGX enclave.
+To keep Microsoft operationally out of trusted computing base (TCB), critical operations of Azure Attestation like quote validation, token generation, policy evaluation and token signing are moved into an SGX enclave.
## Why use Azure Attestation
diff --git a/articles/attestation/policy-examples.md b/articles/attestation/policy-examples.md
index ea2c303f95e59..493f3b722520a 100644
--- a/articles/attestation/policy-examples.md
+++ b/articles/attestation/policy-examples.md
@@ -55,6 +55,31 @@ issuancerules {
Claims used in default policy are considered deprecated but are fully supported and will continue to be included in the future. It's recommended to use the non-deprecated claim names. For more information on the recommended claim names, see [claim sets](./claim-sets.md).
+## Sample custom policy to support multiple SGX enclaves
+
+```
+version= 1.0;
+authorizationrules
+{
+ [ type=="x-ms-sgx-is-debuggable", value==true ]&&
+ [ type=="x-ms-sgx-mrsigner", value=="mrsigner1"] => permit();
+ [ type=="x-ms-sgx-is-debuggable", value==true ]&&
+ [ type=="x-ms-sgx-mrsigner", value=="mrsigner2"] => permit();
+};
+```
+
+## Unsigned Policy for an SGX enclave with PolicyFormat=JWT
+
+```
+eyJhbGciOiJub25lIn0.eyJBdHRlc3RhdGlvblBvbGljeSI6ICJkbVZ5YzJsdmJqMGdNUzR3TzJGMWRHaHZjbWw2WVhScGIyNXlkV3hsYzN0ak9sdDBlWEJsUFQwaUpHbHpMV1JsWW5WbloyRmliR1VpWFNBOVBpQndaWEp0YVhRb0tUdDlPMmx6YzNWaGJtTmxjblZzWlhON1l6cGJkSGx3WlQwOUlpUnBjeTFrWldKMVoyZGhZbXhsSWwwZ1BUNGdhWE56ZFdVb2RIbHdaVDBpYVhNdFpHVmlkV2RuWVdKc1pTSXNJSFpoYkhWbFBXTXVkbUZzZFdVcE8yTTZXM1I1Y0dVOVBTSWtjMmQ0TFcxeWMybG5ibVZ5SWwwZ1BUNGdhWE56ZFdVb2RIbHdaVDBpYzJkNExXMXljMmxuYm1WeUlpd2dkbUZzZFdVOVl5NTJZV3gxWlNrN1l6cGJkSGx3WlQwOUlpUnpaM2d0YlhKbGJtTnNZWFpsSWwwZ1BUNGdhWE56ZFdVb2RIbHdaVDBpYzJkNExXMXlaVzVqYkdGMlpTSXNJSFpoYkhWbFBXTXVkbUZzZFdVcE8yTTZXM1I1Y0dVOVBTSWtjSEp2WkhWamRDMXBaQ0pkSUQwLUlHbHpjM1ZsS0hSNWNHVTlJbkJ5YjJSMVkzUXRhV1FpTENCMllXeDFaVDFqTG5aaGJIVmxLVHRqT2x0MGVYQmxQVDBpSkhOMmJpSmRJRDAtSUdsemMzVmxLSFI1Y0dVOUluTjJiaUlzSUhaaGJIVmxQV011ZG1Gc2RXVXBPMk02VzNSNWNHVTlQU0lrZEdWbElsMGdQVDRnYVhOemRXVW9kSGx3WlQwaWRHVmxJaXdnZG1Gc2RXVTlZeTUyWVd4MVpTazdmVHMifQ.
+```
+
+## Signed Policy for an SGX enclave with PolicyFormat=JWT
+
+```
+eyJhbGciOiJSU0EyNTYiLCJ4NWMiOlsiTUlJQzFqQ0NBYjZnQXdJQkFnSUlTUUdEOUVGakJcdTAwMkJZd0RRWUpLb1pJaHZjTkFRRUxCUUF3SWpFZ01CNEdBMVVFQXhNWFFYUjBaWE4wWVhScGIyNURaWEowYVdacFkyRjBaVEF3SGhjTk1qQXhNVEl6TVRneU1EVXpXaGNOTWpFeE1USXpNVGd5TURVeldqQWlNU0F3SGdZRFZRUURFeGRCZEhSbGMzUmhkR2x2YmtObGNuUnBabWxqWVhSbE1EQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQUpyRWVNSlo3UE01VUJFbThoaUNLRGh6YVA2Y2xYdkhmd0RIUXJ5L3V0L3lHMUFuMGJ3MVU2blNvUEVtY2FyMEc1WmYxTUR4alZOdEF5QjZJWThKLzhaQUd4eFFnVVZsd1dHVmtFelpGWEJVQTdpN1B0NURWQTRWNlx1MDAyQkJnanhTZTBCWVpGYmhOcU5zdHhraUNybjYwVTYwQUU1WFx1MDAyQkE1M1JvZjFUUkNyTXNLbDRQVDRQeXAzUUtNVVlDaW9GU3d6TkFQaU8vTy9cdTAwMkJIcWJIMXprU0taUXh6bm5WUGVyYUFyMXNNWkptRHlyUU8vUFlMTHByMXFxSUY2SmJsbjZEenIzcG5uMXk0Wi9OTzJpdFBxMk5Nalx1MDAyQnE2N1FDblNXOC9xYlpuV3ZTNXh2S1F6QVR5VXFaOG1PSnNtSThUU05rLzBMMlBpeS9NQnlpeDdmMTYxQ2tjRm1LU3kwQ0F3RUFBYU1RTUE0d0RBWURWUjBUQkFVd0F3RUIvekFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBZ1ZKVWRCaXRud3ZNdDdvci9UMlo4dEtCUUZsejFVcVVSRlRUTTBBcjY2YWx2Y2l4VWJZR3gxVHlTSk5pbm9XSUJROU9QamdMa1dQMkVRRUtvUnhxN1NidGxqNWE1RUQ2VjRyOHRsejRISjY0N3MyM2V0blJFa2o5dE9Gb3ZNZjhOdFNVeDNGTnBhRUdabDJMUlZHd3dcdTAwMkJsVThQd0gzL2IzUmVCZHRhQTdrZmFWNVx1MDAyQml4ZWRjZFN5S1F1VkFUbXZNSTcxM1A4VlBsNk1XbXNNSnRrVjNYVi9ZTUVzUVx1MDAyQkdZcU1yN2tLWGwxM3lldUVmVTJWVkVRc1ovMXRnb29iZVZLaVFcdTAwMkJUcWIwdTJOZHNcdTAwMkJLamRIdmFNYngyUjh6TDNZdTdpR0pRZnd1aU1tdUxSQlJwSUFxTWxRRktLNmRYOXF6Nk9iT01zUjlpczZ6UDZDdmxGcEV6bzVGUT09Il19.eyJBdHRlc3RhdGlvblBvbGljeSI6ImRtVnljMmx2YmoweExqQTdZWFYwYUc5eWFYcGhkR2x2Ym5KMWJHVnpJSHRqT2x0MGVYQmxQVDBpSkdsekxXUmxZblZuWjJGaWJHVWlYU0FtSmlCYmRtRnNkV1U5UFhSeWRXVmRJRDAtSUdSbGJua29LVHM5UGlCd1pYSnRhWFFvS1R0OU8ybHpjM1ZoYm1ObGNuVnNaWE1nZXlBZ0lDQmpPbHQwZVhCbFBUMGlKR2x6TFdSbFluVm5aMkZpYkdVaVhTQTlQaUJwYzNOMVpTaDBlWEJsUFNKT2IzUkVaV0oxWjJkaFlteGxJaXdnZG1Gc2RXVTlZeTUyWVd4MVpTazdJQ0FnSUdNNlczUjVjR1U5UFNJa2FYTXRaR1ZpZFdkbllXSnNaU0pkSUQwLUlHbHpjM1ZsS0hSNWNHVTlJbWx6TFdSbFluVm5aMkZpYkdVaUxDQjJZV3gxWlQxakxuWmhiSFZsS1RzZ0lDQWdZenBiZEhsd1pUMDlJaVJ6WjNndGJYSnphV2R1WlhJaVhTQTlQaUJwYzNOMVpTaDBlWEJsUFNKelozZ3RiWEp6YVdkdVpYSWlMQ0IyWVd4MVpUMWpMblpoYkhWbEtUc2dJQ0FnWXpwYmRIbHdaVDA5SWlSelozZ3RiWEpsYm1Oc1lYWmxJbDBnUFQ0Z2FYTnpkV1VvZEhsd1pUMGljMmQ0TFcxeVpXNWpiR0YyWlNJc0lIWmhiSFZsUFdNdWRtRnNkV1VwT3lBZ0lDQmpPbHQwZVhCbFBUMGlKSEJ5YjJSMVkzUXRhV1FpWFNBOVBpQnBjM04xWlNoMGVYQmxQU0p3Y205a2RXTjBMV2xrSWl3Z2RtRnNkV1U5WXk1MllXeDFaU2s3SUNBZ0lHTTZXM1I1Y0dVOVBTSWtjM1p1SWwwZ1BUNGdhWE56ZFdVb2RIbHdaVDBpYzNadUlpd2dkbUZzZFdVOVl5NTJZV3gxWlNrN0lDQWdJR002VzNSNWNHVTlQU0lrZEdWbElsMGdQVDRnYVhOemRXVW9kSGx3WlQwaWRHVmxJaXdnZG1Gc2RXVTlZeTUyWVd4MVpTazdmVHMifQ.c0l-xqGDFQ8_kCiQ0_vvmDQYG_u544CYmoiucPNxd9MU8ZXT69UD59UgSuya2yl241NoVXA_0LaMEB2re0JnTbPD_dliJn96HnIOqnxXxRh7rKbu65ECUOMWPXbyKQMZ0I3Wjhgt_XyyhfEiQGfJfGzA95-wm6yWqrmW7dMI7JkczG9ideztnr0bsw5NRsIWBXOjVy7Bg66qooTnODS_OqeQ4iaNsN-xjMElHABUxXhpBt2htbhemDU1X41o8clQgG84aEHCgkE07pR-7IL_Fn2gWuPVC66yxAp00W1ib2L-96q78D9J52HPdeDCSFio2RL7r5lOtz8YkQnjacb6xA
+```
+
## Sample policy for TPM using Policy version 1.0
```
@@ -123,31 +148,6 @@ c:[type=="boolProperties", issuer=="AttestationPolicy"] => add(type="elamDriverL
The policy uses the TPM version to restrict attestation calls. The issuancerules looks at various properties measured during boot.
-## Sample custom policy to support multiple SGX enclaves
-
-```
-version= 1.0;
-authorizationrules
-{
- [ type=="x-ms-sgx-is-debuggable", value==true ]&&
- [ type=="x-ms-sgx-mrsigner", value=="mrsigner1"] => permit();
- [ type=="x-ms-sgx-is-debuggable", value==true ]&&
- [ type=="x-ms-sgx-mrsigner", value=="mrsigner2"] => permit();
-};
-```
-
-## Unsigned Policy for an SGX enclave with PolicyFormat=JWT
-
-```
-eyJhbGciOiJub25lIn0.eyJBdHRlc3RhdGlvblBvbGljeSI6ICJkbVZ5YzJsdmJqMGdNUzR3TzJGMWRHaHZjbWw2WVhScGIyNXlkV3hsYzN0ak9sdDBlWEJsUFQwaUpHbHpMV1JsWW5WbloyRmliR1VpWFNBOVBpQndaWEp0YVhRb0tUdDlPMmx6YzNWaGJtTmxjblZzWlhON1l6cGJkSGx3WlQwOUlpUnBjeTFrWldKMVoyZGhZbXhsSWwwZ1BUNGdhWE56ZFdVb2RIbHdaVDBpYVhNdFpHVmlkV2RuWVdKc1pTSXNJSFpoYkhWbFBXTXVkbUZzZFdVcE8yTTZXM1I1Y0dVOVBTSWtjMmQ0TFcxeWMybG5ibVZ5SWwwZ1BUNGdhWE56ZFdVb2RIbHdaVDBpYzJkNExXMXljMmxuYm1WeUlpd2dkbUZzZFdVOVl5NTJZV3gxWlNrN1l6cGJkSGx3WlQwOUlpUnpaM2d0YlhKbGJtTnNZWFpsSWwwZ1BUNGdhWE56ZFdVb2RIbHdaVDBpYzJkNExXMXlaVzVqYkdGMlpTSXNJSFpoYkhWbFBXTXVkbUZzZFdVcE8yTTZXM1I1Y0dVOVBTSWtjSEp2WkhWamRDMXBaQ0pkSUQwLUlHbHpjM1ZsS0hSNWNHVTlJbkJ5YjJSMVkzUXRhV1FpTENCMllXeDFaVDFqTG5aaGJIVmxLVHRqT2x0MGVYQmxQVDBpSkhOMmJpSmRJRDAtSUdsemMzVmxLSFI1Y0dVOUluTjJiaUlzSUhaaGJIVmxQV011ZG1Gc2RXVXBPMk02VzNSNWNHVTlQU0lrZEdWbElsMGdQVDRnYVhOemRXVW9kSGx3WlQwaWRHVmxJaXdnZG1Gc2RXVTlZeTUyWVd4MVpTazdmVHMifQ.
-```
-
-## Signed Policy for an SGX enclave with PolicyFormat=JWT
-
-```
-eyJhbGciOiJSU0EyNTYiLCJ4NWMiOlsiTUlJQzFqQ0NBYjZnQXdJQkFnSUlTUUdEOUVGakJcdTAwMkJZd0RRWUpLb1pJaHZjTkFRRUxCUUF3SWpFZ01CNEdBMVVFQXhNWFFYUjBaWE4wWVhScGIyNURaWEowYVdacFkyRjBaVEF3SGhjTk1qQXhNVEl6TVRneU1EVXpXaGNOTWpFeE1USXpNVGd5TURVeldqQWlNU0F3SGdZRFZRUURFeGRCZEhSbGMzUmhkR2x2YmtObGNuUnBabWxqWVhSbE1EQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQUpyRWVNSlo3UE01VUJFbThoaUNLRGh6YVA2Y2xYdkhmd0RIUXJ5L3V0L3lHMUFuMGJ3MVU2blNvUEVtY2FyMEc1WmYxTUR4alZOdEF5QjZJWThKLzhaQUd4eFFnVVZsd1dHVmtFelpGWEJVQTdpN1B0NURWQTRWNlx1MDAyQkJnanhTZTBCWVpGYmhOcU5zdHhraUNybjYwVTYwQUU1WFx1MDAyQkE1M1JvZjFUUkNyTXNLbDRQVDRQeXAzUUtNVVlDaW9GU3d6TkFQaU8vTy9cdTAwMkJIcWJIMXprU0taUXh6bm5WUGVyYUFyMXNNWkptRHlyUU8vUFlMTHByMXFxSUY2SmJsbjZEenIzcG5uMXk0Wi9OTzJpdFBxMk5Nalx1MDAyQnE2N1FDblNXOC9xYlpuV3ZTNXh2S1F6QVR5VXFaOG1PSnNtSThUU05rLzBMMlBpeS9NQnlpeDdmMTYxQ2tjRm1LU3kwQ0F3RUFBYU1RTUE0d0RBWURWUjBUQkFVd0F3RUIvekFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBZ1ZKVWRCaXRud3ZNdDdvci9UMlo4dEtCUUZsejFVcVVSRlRUTTBBcjY2YWx2Y2l4VWJZR3gxVHlTSk5pbm9XSUJROU9QamdMa1dQMkVRRUtvUnhxN1NidGxqNWE1RUQ2VjRyOHRsejRISjY0N3MyM2V0blJFa2o5dE9Gb3ZNZjhOdFNVeDNGTnBhRUdabDJMUlZHd3dcdTAwMkJsVThQd0gzL2IzUmVCZHRhQTdrZmFWNVx1MDAyQml4ZWRjZFN5S1F1VkFUbXZNSTcxM1A4VlBsNk1XbXNNSnRrVjNYVi9ZTUVzUVx1MDAyQkdZcU1yN2tLWGwxM3lldUVmVTJWVkVRc1ovMXRnb29iZVZLaVFcdTAwMkJUcWIwdTJOZHNcdTAwMkJLamRIdmFNYngyUjh6TDNZdTdpR0pRZnd1aU1tdUxSQlJwSUFxTWxRRktLNmRYOXF6Nk9iT01zUjlpczZ6UDZDdmxGcEV6bzVGUT09Il19.eyJBdHRlc3RhdGlvblBvbGljeSI6ImRtVnljMmx2YmoweExqQTdZWFYwYUc5eWFYcGhkR2x2Ym5KMWJHVnpJSHRqT2x0MGVYQmxQVDBpSkdsekxXUmxZblZuWjJGaWJHVWlYU0FtSmlCYmRtRnNkV1U5UFhSeWRXVmRJRDAtSUdSbGJua29LVHM5UGlCd1pYSnRhWFFvS1R0OU8ybHpjM1ZoYm1ObGNuVnNaWE1nZXlBZ0lDQmpPbHQwZVhCbFBUMGlKR2x6TFdSbFluVm5aMkZpYkdVaVhTQTlQaUJwYzNOMVpTaDBlWEJsUFNKT2IzUkVaV0oxWjJkaFlteGxJaXdnZG1Gc2RXVTlZeTUyWVd4MVpTazdJQ0FnSUdNNlczUjVjR1U5UFNJa2FYTXRaR1ZpZFdkbllXSnNaU0pkSUQwLUlHbHpjM1ZsS0hSNWNHVTlJbWx6TFdSbFluVm5aMkZpYkdVaUxDQjJZV3gxWlQxakxuWmhiSFZsS1RzZ0lDQWdZenBiZEhsd1pUMDlJaVJ6WjNndGJYSnphV2R1WlhJaVhTQTlQaUJwYzNOMVpTaDBlWEJsUFNKelozZ3RiWEp6YVdkdVpYSWlMQ0IyWVd4MVpUMWpMblpoYkhWbEtUc2dJQ0FnWXpwYmRIbHdaVDA5SWlSelozZ3RiWEpsYm1Oc1lYWmxJbDBnUFQ0Z2FYTnpkV1VvZEhsd1pUMGljMmQ0TFcxeVpXNWpiR0YyWlNJc0lIWmhiSFZsUFdNdWRtRnNkV1VwT3lBZ0lDQmpPbHQwZVhCbFBUMGlKSEJ5YjJSMVkzUXRhV1FpWFNBOVBpQnBjM04xWlNoMGVYQmxQU0p3Y205a2RXTjBMV2xrSWl3Z2RtRnNkV1U5WXk1MllXeDFaU2s3SUNBZ0lHTTZXM1I1Y0dVOVBTSWtjM1p1SWwwZ1BUNGdhWE56ZFdVb2RIbHdaVDBpYzNadUlpd2dkbUZzZFdVOVl5NTJZV3gxWlNrN0lDQWdJR002VzNSNWNHVTlQU0lrZEdWbElsMGdQVDRnYVhOemRXVW9kSGx3WlQwaWRHVmxJaXdnZG1Gc2RXVTlZeTUyWVd4MVpTazdmVHMifQ.c0l-xqGDFQ8_kCiQ0_vvmDQYG_u544CYmoiucPNxd9MU8ZXT69UD59UgSuya2yl241NoVXA_0LaMEB2re0JnTbPD_dliJn96HnIOqnxXxRh7rKbu65ECUOMWPXbyKQMZ0I3Wjhgt_XyyhfEiQGfJfGzA95-wm6yWqrmW7dMI7JkczG9ideztnr0bsw5NRsIWBXOjVy7Bg66qooTnODS_OqeQ4iaNsN-xjMElHABUxXhpBt2htbhemDU1X41o8clQgG84aEHCgkE07pR-7IL_Fn2gWuPVC66yxAp00W1ib2L-96q78D9J52HPdeDCSFio2RL7r5lOtz8YkQnjacb6xA
-```
-
## Next steps
- [How to author and sign an attestation policy](author-sign-policy.md)
diff --git a/articles/attestation/toc.yml b/articles/attestation/toc.yml
index 96eb9c97e9de9..49287ed752baa 100755
--- a/articles/attestation/toc.yml
+++ b/articles/attestation/toc.yml
@@ -35,6 +35,8 @@
href: policy-examples.md
- name: Policy signer certificate
href: policy-signer-examples.md
+ - name: Attestation token
+ href: attestation-token-examples.md
- name: Concepts
items:
- name: Basic concepts
@@ -68,6 +70,16 @@
href: faq.yml
- name: REST
href: /rest/api/attestation/
+ - name: C++ data-plane SDK
+ href: https://azuresdkdocs.blob.core.windows.net/$web/cpp/azure-security-attestation/1.0.0-beta.2/index.html
+ - name: .NET data-plane SDK
+ href: https://www.nuget.org/packages/Azure.Security.Attestation
+ - name: Java data-plane SDK
+ href: https://search.maven.org/artifact/com.azure/azure-security-attestation/1.1.2/jar
+ - name: Python data-plane SDK
+ href: https://pypi.org/project/azure-security-attestation/
+ - name: JavaScript SDK
+ href: https://www.npmjs.com/package/@azure/attestation/v/1.0.0
- name: Azure PowerShell
href: /powershell/module/az.attestation/#attestation
- name: Azure CLI
diff --git a/articles/attestation/workflow.md b/articles/attestation/workflow.md
index 9e12dc151f551..9ca28cfb22c36 100755
--- a/articles/attestation/workflow.md
+++ b/articles/attestation/workflow.md
@@ -25,10 +25,10 @@ The following actors are involved in an Azure Attestation work flow:
Here are the general steps in a typical SGX enclave attestation workflow (using Azure Attestation):
-1. Client collects evidence from an enclave. Evidence is information about the enclave environment and the client library running inside the enclave.
-1. The client has an URI which refers to an instance of Azure Attestation. The client sends evidence to Azure Attestation. Exact information submitted to the provider depends on the enclave type.
-1. Azure Attestation validates the submitted information and evaluates it against a configured policy. If the verification succeeds, Azure Attestation issues an attestation token and returns it to the client. If this step fails, Azure Attestation reports an error to the client.
-1. The client sends the attestation token to relying party. The relying party calls public key metadata endpoint of Azure Attestation to retrieve signing certificates. The relying party then verifies the signature of the attestation token and ensures the enclave trustworthiness.
+1. Client collects evidence from an enclave. Evidence is information about the enclave environment and the client library running inside the enclave
+1. The client has an URI which refers to an instance of Azure Attestation. The client sends evidence to Azure Attestation. Exact information submitted to the provider depends on the enclave type
+1. Azure Attestation validates the submitted information and evaluates it against a configured policy. If the verification succeeds, Azure Attestation issues an attestation token and returns it to the client. If this step fails, Azure Attestation reports an error to the client
+1. The client sends the attestation token to relying party. The relying party calls public key metadata endpoint of Azure Attestation to retrieve signing certificates. The relying party then verifies the signature of the attestation token and ensures the enclave trustworthiness
![SGX enclave validation flow](./media/sgx-validation-flow.png)
@@ -39,11 +39,11 @@ Here are the general steps in a typical SGX enclave attestation workflow (using
Here are the general steps in a typical TPM enclave attestation workflow (using Azure Attestation):
-1. On device/platform boot, various boot loaders and boot services measure events which backed by the TPM and are securely stored (TCG log).
-2. Client collects the TCG logs from the device and TPM quote, which acts the evidence for attestation.
-3. The client has an URI which refers to an instance of Azure Attestation. The client sends evidence to Azure Attestation. Exact information submitted to the provider depends on the platform.
-4. Azure Attestation validates the submitted information and evaluates it against a configured policy. If the verification succeeds, Azure Attestation issues an attestation token and returns it to the client. If this step fails, Azure Attestation reports an error to the client. The communication between the client and attestation service is dictated by the Azure attestation TPM protocol.
-5. The client then sends the attestation token to relying party. The relying party calls public key metadata endpoint of Azure Attestation to retrieve signing certificates. The relying party then verifies the signature of the attestation token and ensures the platforms trustworthiness.
+1. On device/platform boot, various boot loaders and boot services measure events backed by TPM and securely store them as TCG logs. Client collects the TCG logs from the device and TPM quote which acts evidence for attestation
+2. The client authenticates to Azure AD and obtains a access token
+3. The client has an URI which refers to an instance of Azure Attestation. The client sends the evidence and the Azure Active Directory (Azure AD) access token to Azure Attestation. Exact information submitted to the provider depends on the platform
+4. Azure Attestation validates the submitted information and evaluates it against a configured policy. If the verification succeeds, Azure Attestation issues an attestation token and returns it to the client. If this step fails, Azure Attestation reports an error to the client. The communication between the client and attestation service is dictated by the Azure attestation TPM protocol
+5. The client then sends the attestation token to relying party. The relying party calls public key metadata endpoint of Azure Attestation to retrieve signing certificates. The relying party then verifies the signature of the attestation token and ensures the platforms trustworthiness
![TPM validation flow](./media/tpm-validation-flow.png)
diff --git a/articles/automanage/automanage-linux.md b/articles/automanage/automanage-linux.md
index e833b45790e9c..09bf3b9e8a6eb 100644
--- a/articles/automanage/automanage-linux.md
+++ b/articles/automanage/automanage-linux.md
@@ -40,7 +40,7 @@ Automanage supports the following Linux distributions and versions:
|[Guest configuration](../governance/policy/concepts/guest-configuration.md) | Guest configuration is used to monitor the configuration and report on the compliance of the machine. The Automanage service will install the Azure Linux baseline using the guest configuration extension. For Linux machines, the guest configuration service will install the baseline in audit-only mode. You will be able to see where your VM is out of compliance with the baseline, but noncompliance won't be automatically remediated. Learn [more](../governance/policy/concepts/guest-configuration.md). |Production, Dev/Test |
|[Boot Diagnostics](../virtual-machines/boot-diagnostics.md) | Boot diagnostics is a debugging feature for Azure virtual machines (VM) that allows diagnosis of VM boot failures. Boot diagnostics enables a user to observe the state of their VM as it is booting up by collecting serial log information and screenshots. This will only be enabled for machines that are using managed disks. |Production, Dev/Test |
|[Azure Automation Account](../automation/automation-create-standalone-account.md) |Azure Automation supports management throughout the lifecycle of your infrastructure and applications. Learn [more](../automation/automation-intro.md). |Production, Dev/Test |
-|[Log Analytics Workspace](../azure-monitor/logs/log-analytics-overview.md) |Azure Monitor stores log data in a Log Analytics workspace, which is an Azure resource and a container where data is collected, aggregated, and serves as an administrative boundary. Learn [more](../azure-monitor/logs/design-logs-deployment.md). |Production, Dev/Test |
+|[Log Analytics Workspace](../azure-monitor/logs/log-analytics-workspace-overview.md) |Azure Monitor stores log data in a Log Analytics workspace, which is an Azure resource and a container where data is collected, aggregated, and serves as an administrative boundary. Learn [more](../azure-monitor/logs/workspace-design.md). |Production, Dev/Test |
1 The configuration profile selection is available when you are enabling Automanage. Learn [more](automanage-virtual-machines.md#configuration-profile). You can also create your own custom profile with the set of Azure services and settings that you need.
diff --git a/articles/automanage/virtual-machines-best-practices.md b/articles/automanage/virtual-machines-best-practices.md
index b4399d38046e8..6ad448a336540 100644
--- a/articles/automanage/virtual-machines-best-practices.md
+++ b/articles/automanage/virtual-machines-best-practices.md
@@ -28,7 +28,7 @@ For all of these services, we will auto-onboard, auto-configure, monitor for dri
|Change Tracking & Inventory |Change Tracking and Inventory combines change tracking and inventory functions to allow you to track virtual machine and server infrastructure changes. The service supports change tracking across services, daemons software, registry, and files in your environment to help you diagnose unwanted changes and raise alerts. Inventory support allows you to query in-guest resources for visibility into installed applications and other configuration items. Learn [more](../automation/change-tracking/overview.md). |Azure VM Best Practices – Production, Azure VM Best Practices – Dev/Test |No |
|Guest configuration | Guest configuration is used to monitor the configuration and report on the compliance of the machine. The Automanage service will install the [Windows security baselines](/windows/security/threat-protection/windows-security-baselines) using the guest configuration extension. Learn [more](../governance/policy/concepts/guest-configuration.md). |Azure VM Best Practices – Production, Azure VM Best Practices – Dev/Test |No |
|Azure Automation Account |Azure Automation supports management throughout the lifecycle of your infrastructure and applications. Learn [more](../automation/automation-intro.md). |Azure VM Best Practices – Production, Azure VM Best Practices – Dev/Test |No |
-|Log Analytics Workspace |Azure Monitor stores log data in a Log Analytics workspace, which is an Azure resource and a container where data is collected, aggregated, and serves as an administrative boundary. Learn [more](../azure-monitor/logs/design-logs-deployment.md). |Azure VM Best Practices – Production, Azure VM Best Practices – Dev/Test |No |
+|Log Analytics Workspace |Azure Monitor stores log data in a Log Analytics workspace, which is an Azure resource and a container where data is collected, aggregated, and serves as an administrative boundary. Learn [more](../azure-monitor/logs/log-analytics-workspace-overview.md). |Azure VM Best Practices – Production, Azure VM Best Practices – Dev/Test |No |
1 Configuration profiles are available when you are enabling Automanage. Learn [more](automanage-virtual-machines.md). You can also adjust the default settings of the configuration profile and set your own preferences within the best practices constraints.
diff --git a/articles/automation/automation-hrw-run-runbooks.md b/articles/automation/automation-hrw-run-runbooks.md
index faedab8383793..140c0267e7883 100644
--- a/articles/automation/automation-hrw-run-runbooks.md
+++ b/articles/automation/automation-hrw-run-runbooks.md
@@ -78,45 +78,95 @@ You can also use an [InlineScript](automation-powershell-workflow.md#use-inlines
Hybrid Runbook Workers on Azure virtual machines can use managed identities to authenticate to Azure resources. Using managed identities for Azure resources instead of Run As accounts provides benefits because you don't need to:
-* Export the Run As certificate and then import it into the Hybrid Runbook Worker.
-* Renew the certificate used by the Run As account.
-* Handle the Run As connection object in your runbook code.
+- Export the Run As certificate and then import it into the Hybrid Runbook Worker.
+- Renew the certificate used by the Run As account.
+- Handle the Run As connection object in your runbook code.
-Follow the next steps to use a managed identity for Azure resources on a Hybrid Runbook Worker:
+There are two ways to use the Managed Identities in Hybrid Runbook Worker scripts.
-1. Create an Azure VM.
-1. Configure managed identities for Azure resources on the VM. See [Configure managed identities for Azure resources on a VM using the Azure portal](../active-directory/managed-identities-azure-resources/qs-configure-portal-windows-vm.md#enable-system-assigned-managed-identity-on-an-existing-vm).
-1. Give the VM access to a resource group in Resource Manager. Refer to [Use a Windows VM system-assigned managed identity to access Resource Manager](../active-directory/managed-identities-azure-resources/tutorial-windows-vm-access-arm.md#grant-your-vm-access-to-a-resource-group-in-resource-manager).
-1. Install the Hybrid Runbook Worker on the VM. See [Deploy a Windows Hybrid Runbook Worker](automation-windows-hrw-install.md) or [Deploy a Linux Hybrid Runbook Worker](automation-linux-hrw-install.md).
-1. Update the runbook to use the [Connect-AzAccount](/powershell/module/az.accounts/connect-azaccount) cmdlet with the `Identity` parameter to authenticate to Azure resources. This configuration reduces the need to use a Run As account and perform the associated account management.
+1. Use the system-assigned Managed Identity for the Automation account:
+
+ 1. [Configure](/enable-managed-identity-for-automation.md#enable-a-system-assigned-managed-identity-for-an-azure-automation-account) a System-assigned Managed Identity for the Automation account.
+ 1. Grant this identity the [required permissions](/enable-managed-identity-for-automation.md#assign-role-to-a-system-assigned-managed-identity) within the Subscription to perform its task.
+ 1. Update the runbook to use the [Connect-AzAccount](/powershell/module/az.accounts/connect-azaccount) cmdlet with the `Identity` parameter to authenticate to Azure resources. This configuration reduces the need to use a Run As account and perform the associated account management.
+
+ ```powershell
+ # Ensures you do not inherit an AzContext in your runbook
+ Disable-AzContextAutosave -Scope Process
+
+ # Connect to Azure with system-assigned managed identity
+ $AzureContext = (Connect-AzAccount -Identity).context
+
+ # set and store context
+ $AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile
+ $AzureContext
+
+ # Get all VM names from the subscription
+ Get-AzVM -DefaultProfile $AzureContext | Select Name
+ ```
+ > [!NOTE]
+ > It is **Not** possible to use the Automation Account's User Managed Identity on a Hybrid Runbook Worker, it must be the Automation Account's System Managed Identity.
+
+2. Use the VM Managed Identity for both the Azure VM or Arc-enabled server running as a Hybrid Runbook Worker.
+ Here, you can use either the **VM’s User-assigned Managed Identity** or the **VM’s System-assigned Managed Identity**.
+
+ > [!NOTE]
+ > This will **Not** work in an Automation Account which has been configured with an Automation account Managed Identity. As soon as the Automation account Managed Identity is enabled, you can't use the VM Managed Identity. The only available option is to use the Automation Account **System-Assigned Managed Identity** as mentioned in option 1.
+
+ **To use a VM's system-assigned managed identity**:
+
+ 1. [Configure](/active-directory/managed-identities-azure-resources/qs-configure-portal-windows-vm#enable-system-assigned-managed-identity-on-an-existing-vm) a System Managed Identity for the VM.
+ 1. Grant this identity the [required permissions](/active-directory/managed-identities-azure-resources/tutorial-windows-vm-access-arm#grant-your-vm-access-to-a-resource-group-in-resource-manager) within the subscription to perform its tasks.
+ 1. Update the runbook to use the [Connect-Az-Account](/powershell/module/az.accounts/connect-azaccount?view=azps-8.0.0) cmdlet with the `Identity` parameter to authenticate to Azure resources. This configuration reduces the need to use a Run As Account and perform the associated account management.
```powershell
- # Ensures you do not inherit an AzContext in your runbook
- Disable-AzContextAutosave -Scope Process
-
- # Connect to Azure with system-assigned managed identity
- $AzureContext = (Connect-AzAccount -Identity).context
-
- # set and store context
- $AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile $AzureContext
+ # Ensures you do not inherit an AzContext in your runbook
+ Disable-AzContextAutosave -Scope Process
+
+ # Connect to Azure with system-assigned managed identity
+ $AzureContext = (Connect-AzAccount -Identity).context
+
+ # set and store context
+ $AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile
+ $AzureContext
+
+ # Get all VM names from the subscription
+ Get-AzVM -DefaultProfile $AzureContext | Select Name
+ ```
- # Get all VM names from the subscription
- Get-AzVM -DefaultProfile $AzureContext | Select Name
+ **To use a VM's user-assigned managed identity**:
+ 1. [Configure](/active-directory/managed-identities-azure-resources/qs-configure-portal-windows-vm#user-assigned-managed-identity) a User Managed Identity for the VM.
+ 1. Grant this identity the [required permissions](/active-directory/managed-identities-azure-resources/howto-assign-access-portal) within the Subscription to perform its tasks.
+ 1. Update the runbook to use the [Connect-AzAccount](/powershell/module/az.accounts/connect-azaccount?view=azps-8.0.0) cmdlet with the `Identity ` and `AccountID` parameters to authenticate to Azure resources. This configuration reduces the need to use a Run As account and perform the associated account management.
+
+ ```powershell
+ # Ensures you do not inherit an AzContext in your runbook
+ Disable-AzContextAutosave -Scope Process
+
+ # Connect to Azure with user-managed-assigned managed identity. Replace below with the Client Id of the User Managed Identity
+ $AzureContext = (Connect-AzAccount -Identity -AccountId ).context
+
+ # set and store context
+ $AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile
+ $AzureContext
+
+ # Get all VM names from the subscription
+ Get-AzVM -DefaultProfile $AzureContext | Select Name
```
+ > [!NOTE]
+ > You can find the client Id of the user-assigned managed identity in the Azure portal.
+
+ > :::image type="content" source="./media/automation-hrw-run-runbooks/managed-identities-client-id-inline.png" alt-text="Screenshot of client id in Managed Identites." lightbox="./media/automation-hrw-run-runbooks/managed-identities-client-id-expanded.png":::
- If you want the runbook to execute with the system-assigned managed identity, leave the code as-is. If you prefer to use a user-assigned managed identity, then:
- 1. From line 5, remove `$AzureContext = (Connect-AzAccount -Identity).context`,
- 1. Replace it with `$AzureContext = (Connect-AzAccount -Identity -AccountId ).context`, and
- 1. Enter the Client ID.
>[!NOTE]
->By default, the Azure contexts are saved for use between PowerShell sessions. It is possible that when a previous runbook on the Hybrid Runbook Worker has been authenticated with Azure, that context persists to the disk in the System PowerShell profile, as per [Azure contexts and sign-in credentials | Microsoft Docs](/powershell/azure/context-persistence?view=azps-7.3.2).
+> By default, the Azure contexts are saved for use between PowerShell sessions. It is possible that when a previous runbook on the Hybrid Runbook Worker has been authenticated with Azure, that context persists to the disk in the System PowerShell profile, as per [Azure contexts and sign-in credentials | Microsoft Docs](/powershell/azure/context-persistence?view=azps-7.3.2).
For instance, a runbook with `Get-AzVM` can return all the VMs in the subscription with no call to `Connect-AzAccount`, and the user would be able to access Azure resources without having to authenticate within that runbook. You can disable context autosave in Azure PowerShell, as detailed [here](/powershell/azure/context-persistence?view=azps-7.3.2#save-azure-contexts-across-powershell-sessions).
+
+### Use runbook authentication with Hybrid Worker Credentials
-### Use runbook authentication with Run As account
-
-Instead of having your runbook provide its own authentication to local resources, you can specify a Run As account for a Hybrid Runbook Worker group. To specify a Run As account, you must define a [credential asset](./shared-resources/credentials.md) that has access to local resources. These resources include certificate stores and all runbooks run under these credentials on a Hybrid Runbook Worker in the group.
+Instead of having your runbook provide its own authentication to local resources, you can specify Hybrid Worker Credentials for a Hybrid Runbook Worker group. To specify a Hybrid Worker Credentials, you must define a [credential asset](./shared-resources/credentials.md) that has access to local resources. These resources include certificate stores and all runbooks run under these credentials on a Hybrid Runbook Worker in the group.
- The user name for the credential must be in one of the following formats:
@@ -126,16 +176,35 @@ Instead of having your runbook provide its own authentication to local resources
- To use the PowerShell runbook **Export-RunAsCertificateToHybridWorker**, you need to install the Az modules for Azure Automation on the local machine.
-#### Use a credential asset to specify a Run As account
+#### Use a credential asset for a Hybrid Runbook Worker group
-Use the following procedure to specify a Run As account for a Hybrid Runbook Worker group:
+By default, the Hybrid jobs run under the context of System account. However, to run Hybrid jobs under a different credential asset, follow the steps:
1. Create a [credential asset](./shared-resources/credentials.md) with access to local resources.
1. Open the Automation account in the Azure portal.
1. Select **Hybrid Worker Groups**, and then select the specific group.
-1. Select **All settings**, followed by **Hybrid worker group settings**.
-1. Change the value of **Run As** from **Default** to **Custom**.
+1. Select **Settings**.
+1. Change the value of **Hybrid Worker credentials** from **Default** to **Custom**.
1. Select the credential and click **Save**.
+1. If the following permissions are not assigned for Custom users, jobs might get suspended.
+Use your discretion in assigning the elevated permissions corresponding to the following registry keys/folders:
+
+**Registry path**
+
+- HKLM\SYSTEM\CurrentControlSet\Services\EventLog (read)
+- HKLM\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters (full access)
+- HKLM\SOFTWARE\Microsoft\Wbem\CIMOM (full access)
+- HKLM\Software\Policies\Microsoft\SystemCertificates\Root (full access)
+- HKLM\Software\Microsoft\SystemCertificates (full access)
+- HKLM\Software\Microsoft\EnterpriseCertificates (full access)
+- HKLM\software\Microsoft\HybridRunbookWorker (full access)
+- HKLM\software\Microsoft\HybridRunbookWorkerV2 (full access)
+- HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\SystemCertificates\Disallowed (full access)
+- HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\PnpLockdownFiles (full access)
+
+**Folders**
+- C:\ProgramData\AzureConnectedMachineAgent\Tokens (read)
+- C:\Packages\Plugins\Microsoft.Azure.Automation.HybridWorker.HybridWorkerForWindows\0.1.0.18\HybridWorkerPackage\HybridWorkerAgent (full access)
## Install Run As account certificate
@@ -394,6 +463,7 @@ To help troubleshoot issues with your runbooks running on a hybrid runbook worke
## Next steps
+* For more information on Hybrid Runbook Worker, see [Automation Hybrid Runbook Worker](automation-hybrid-runbook-worker.md).
* If your runbooks aren't completing successfully, review the troubleshooting guide for [runbook execution failures](troubleshoot/hybrid-runbook-worker.md#runbook-execution-fails).
* For more information on PowerShell, including language reference and learning modules, see [PowerShell Docs](/powershell/scripting/overview).
* Learn about [using Azure Policy to manage runbook execution](enforce-job-execution-hybrid-worker.md) with Hybrid Runbook Workers.
diff --git a/articles/automation/automation-hybrid-runbook-worker.md b/articles/automation/automation-hybrid-runbook-worker.md
index 2ee01f537abc9..865fc8e3279ce 100644
--- a/articles/automation/automation-hybrid-runbook-worker.md
+++ b/articles/automation/automation-hybrid-runbook-worker.md
@@ -1,6 +1,6 @@
---
title: Azure Automation Hybrid Runbook Worker overview
-description: This article provides an overview of the Hybrid Runbook Worker, which you can use to run runbooks on machines in your local datacenter or cloud provider.
+description: Know about Hybrid Runbook Worker. How to install and run the runbooks on machines in your local datacenter or cloud provider.
services: automation
ms.subservice: process-automation
ms.date: 11/11/2021
@@ -17,7 +17,7 @@ Azure Automation provides native integration of the Hybrid Runbook Worker role t
| Platform | Description |
|---|---|
|**Extension-based (V2)** |Installed using the [Hybrid Runbook Worker VM extension](./extension-based-hybrid-runbook-worker-install.md), without any dependency on the Log Analytics agent reporting to an Azure Monitor Log Analytics workspace. **This is the recommended platform**.|
-|**Agent-based (V1)** |Installed after the [Log Analytics agent](../azure-monitor/agents/log-analytics-agent.md) reporting to an Azure Monitor [Log Analytics workspace](../azure-monitor/logs/design-logs-deployment.md) is completed.|
+|**Agent-based (V1)** |Installed after the [Log Analytics agent](../azure-monitor/agents/log-analytics-agent.md) reporting to an Azure Monitor [Log Analytics workspace](../azure-monitor/logs/log-analytics-workspace-overview.md) is completed.|
:::image type="content" source="./media/automation-hybrid-runbook-worker/hybrid-worker-group-platform.png" alt-text="Hybrid worker group showing platform field":::
@@ -47,7 +47,7 @@ There are two types of Runbook Workers - system and user. The following table de
|**System** |Supports a set of hidden runbooks used by the Update Management feature that are designed to install user-specified updates on Windows and Linux machines. This type of Hybrid Runbook Worker isn't a member of a Hybrid Runbook Worker group, and therefore doesn't run runbooks that target a Runbook Worker group. |
|**User** |Supports user-defined runbooks intended to run directly on the Windows and Linux machine that are members of one or more Runbook Worker groups. |
-Agent-based (V1) Hybrid Runbook Workers rely on the [Log Analytics agent](../azure-monitor/agents/log-analytics-agent.md) reporting to an Azure Monitor [Log Analytics workspace](../azure-monitor/logs/design-logs-deployment.md). The workspace isn't only to collect monitoring data from the machine, but also to download the components required to install the agent-based Hybrid Runbook Worker.
+Agent-based (V1) Hybrid Runbook Workers rely on the [Log Analytics agent](../azure-monitor/agents/log-analytics-agent.md) reporting to an Azure Monitor [Log Analytics workspace](../azure-monitor/logs/log-analytics-workspace-overview.md). The workspace isn't only to collect monitoring data from the machine, but also to download the components required to install the agent-based Hybrid Runbook Worker.
When Azure Automation [Update Management](./update-management/overview.md) is enabled, any machine connected to your Log Analytics workspace is automatically configured as a system Hybrid Runbook Worker. To configure it as a user Windows Hybrid Runbook Worker, see [Deploy an agent-based Windows Hybrid Runbook Worker in Automation](automation-windows-hrw-install.md) and for Linux, see [Deploy an agent-based Linux Hybrid Runbook Worker in Automation](./automation-linux-hrw-install.md).
diff --git a/articles/automation/automation-linux-hrw-install.md b/articles/automation/automation-linux-hrw-install.md
index fb56541bb947d..93759e885eafa 100644
--- a/articles/automation/automation-linux-hrw-install.md
+++ b/articles/automation/automation-linux-hrw-install.md
@@ -28,7 +28,7 @@ Before you start, make sure that you have the following.
The Hybrid Runbook Worker role depends on an Azure Monitor Log Analytics workspace to install and configure the role. You can create it through [Azure Resource Manager](../azure-monitor/logs/resource-manager-workspace.md#create-a-log-analytics-workspace), through [PowerShell](../azure-monitor/logs/powershell-workspace-configuration.md?toc=%2fpowershell%2fmodule%2ftoc.json), or in the [Azure portal](../azure-monitor/logs/quick-create-workspace.md).
-If you don't have an Azure Monitor Log Analytics workspace, review the [Azure Monitor Log design guidance](../azure-monitor/logs/design-logs-deployment.md) before you create the workspace.
+If you don't have an Azure Monitor Log Analytics workspace, review the [Azure Monitor Log design guidance](../azure-monitor/logs/workspace-design.md) before you create the workspace.
### Log Analytics agent
diff --git a/articles/automation/automation-managing-data.md b/articles/automation/automation-managing-data.md
index 8df46fb14bcc9..fe54cfc05ad31 100644
--- a/articles/automation/automation-managing-data.md
+++ b/articles/automation/automation-managing-data.md
@@ -97,6 +97,6 @@ The Automation geo-replication service isn't accessible directly to external cus
## Next steps
+* To learn about security guidelines, see [Security best practices in Azure Automation](automation-security-guidelines.md).
* To learn more about secure assets in Azure Automation, see [Encryption of secure assets in Azure Automation](automation-secure-asset-encryption.md).
-
* To find out more about geo-replication, see [Creating and using active geo-replication](/azure/azure-sql/database/active-geo-replication-overview).
diff --git a/articles/automation/automation-role-based-access-control.md b/articles/automation/automation-role-based-access-control.md
index 351c9b06284ee..eef8ee274092f 100644
--- a/articles/automation/automation-role-based-access-control.md
+++ b/articles/automation/automation-role-based-access-control.md
@@ -1,6 +1,6 @@
---
title: Manage role permissions and security in Azure Automation
-description: This article describes how to use Azure role-based access control (Azure RBAC), which enables access management for Azure resources.
+description: This article describes how to use Azure role-based access control (Azure RBAC), which enables access management and role permissions for Azure resources.
services: automation
ms.subservice: shared-capabilities
ms.date: 09/10/2021
@@ -9,7 +9,7 @@ ms.custom: devx-track-azurepowershell, subject-rbac-steps
#Customer intent: As an administrator, I want to understand permissions so that I use the least necessary set of permissions.
---
-# Manage role permissions and security in Automation
+# Manage role permissions and security in Azure Automation
Azure role-based access control (Azure RBAC) enables access management for Azure resources. Using [Azure RBAC](../role-based-access-control/overview.md), you can segregate duties within your team and grant only the amount of access to users, groups, and applications that they need to perform their jobs. You can grant role-based access to users using the Azure portal, Azure Command-Line tools, or Azure Management APIs.
@@ -469,6 +469,7 @@ When a user assigned to the Automation Operator role on the Runbook scope views
## Next steps
+* To learn about security guidelines, see [Security best practices in Azure Automation](automation-security-guidelines.md).
* To find out more about Azure RBAC using PowerShell, see [Add or remove Azure role assignments using Azure PowerShell](../role-based-access-control/role-assignments-powershell.md).
* For details of the types of runbooks, see [Azure Automation runbook types](automation-runbook-types.md).
* To start a runbook, see [Start a runbook in Azure Automation](start-runbooks.md).
\ No newline at end of file
diff --git a/articles/automation/automation-runbook-types.md b/articles/automation/automation-runbook-types.md
index 6fad31f9f13fc..436978159d35d 100644
--- a/articles/automation/automation-runbook-types.md
+++ b/articles/automation/automation-runbook-types.md
@@ -64,7 +64,7 @@ The same Azure sandbox and Hybrid Runbook Worker can execute **PowerShell 5.1**
Ensure that you select the right Runtime Version for modules.
-For example : if you are executing a runbook for a Sharepoint automation scenario in **Runtime version** *7.1 (preview)*, then import the module in **Runtime version** **7.1 (preview)**; if you are executing a runbook for a Sharepoint automation scenario in **Runtime version** **5.1**, then import the module in **Runtime version** *5.1*. In this case, you would see two entries for the module, one for **Runtime Version** **7.1(preview)** and other for **5.1**.
+For example : if you are executing a runbook for a SharePoint automation scenario in **Runtime version** *7.1 (preview)*, then import the module in **Runtime version** **7.1 (preview)**; if you are executing a runbook for a SharePoint automation scenario in **Runtime version** **5.1**, then import the module in **Runtime version** *5.1*. In this case, you would see two entries for the module, one for **Runtime Version** **7.1(preview)** and other for **5.1**.
:::image type="content" source="./media/automation-runbook-types/runbook-types.png" alt-text="runbook Types.":::
diff --git a/articles/automation/automation-secure-asset-encryption.md b/articles/automation/automation-secure-asset-encryption.md
index c680e93836d1b..3fc8a4053c1fa 100644
--- a/articles/automation/automation-secure-asset-encryption.md
+++ b/articles/automation/automation-secure-asset-encryption.md
@@ -281,6 +281,7 @@ To revoke access to customer-managed keys, use PowerShell or the Azure CLI. For
## Next steps
+- To learn about security guidelines, see [Security best practices in Azure Automation](automation-security-guidelines.md).
- To understand Azure Key Vault, see [What is Azure Key Vault?](../key-vault/general/overview.md).
- To work with certificates, see [Manage certificates in Azure Automation](shared-resources/certificates.md).
- To handle credentials, see [Manage credentials in Azure Automation](shared-resources/credentials.md).
diff --git a/articles/automation/automation-security-guidelines.md b/articles/automation/automation-security-guidelines.md
index 6a460daf960ca..2d5db3808abe4 100644
--- a/articles/automation/automation-security-guidelines.md
+++ b/articles/automation/automation-security-guidelines.md
@@ -1,5 +1,5 @@
---
-title: Azure Automation security guidelines, security best practices Automation.
+title: Azure Automation security guidelines, security best practices Automation jobs.
description: This article helps you with the guidelines that Azure Automation offers to ensure a secured configuration of Automation account, Hybrid Runbook worker role, authentication certificate and identities, network isolation and policies.
services: automation
ms.subservice: shared-capabilities
@@ -7,7 +7,7 @@ ms.date: 02/16/2022
ms.topic: conceptual
---
-# Best practices for security in Azure Automation
+# Security best practices in Azure Automation
This article details the best practices to securely execute the automation jobs.
[Azure Automation](./overview.md) provides you the platform to orchestrate frequent, time consuming, error-prone infrastructure management and operational tasks, as well as mission-critical operations. This service allows you to execute scripts, known as automation runbooks seamlessly across cloud and hybrid environments.
diff --git a/articles/automation/automation-services.md b/articles/automation/automation-services.md
index 0589ba1535a8c..5b06592069e3a 100644
--- a/articles/automation/automation-services.md
+++ b/articles/automation/automation-services.md
@@ -1,6 +1,6 @@
---
title: Automation services in Azure - overview
-description: This article tells what are the Automation services in Azure and how to use it to automate the lifecycle of infrastructure and applications.
+description: This article tells what are the Automation services in Azure and how to compare and use it to automate the lifecycle of infrastructure and applications.
services: automation
keywords: azure automation services, automanage, Bicep, Blueprints, Guest Config, Policy, Functions
ms.date: 03/04/2022
diff --git a/articles/automation/automation-solution-vm-management.md b/articles/automation/automation-solution-vm-management.md
index 7768e0e2bea78..a0e0ff4b4dcb4 100644
--- a/articles/automation/automation-solution-vm-management.md
+++ b/articles/automation/automation-solution-vm-management.md
@@ -37,7 +37,7 @@ The following are limitations with the current feature:
- The runbooks for the Start/Stop VMs during off hours feature work with an [Azure Run As account](./automation-security-overview.md#run-as-accounts). The Run As account is the preferred authentication method because it uses certificate authentication instead of a password that might expire or change frequently.
-- An [Azure Monitor Log Analytics workspace](../azure-monitor/logs/design-logs-deployment.md) that stores the runbook job logs and job stream results in a workspace to query and analyze. The Automation account and Log Analytics workspace need to be in the same subscription and supported region. The workspace needs to already exist, you cannot create a new workspace during deployment of this feature.
+- An [Azure Monitor Log Analytics workspace](../azure-monitor/logs/log-analytics-workspace-overview.md) that stores the runbook job logs and job stream results in a workspace to query and analyze. The Automation account and Log Analytics workspace need to be in the same subscription and supported region. The workspace needs to already exist, you cannot create a new workspace during deployment of this feature.
We recommend that you use a separate Automation account for working with VMs enabled for the Start/Stop VMs during off-hours feature. Azure module versions are frequently upgraded, and their parameters might change. The feature isn't upgraded on the same cadence and it might not work with newer versions of the cmdlets that it uses. Before importing the updated modules into your production Automation account(s), we recommend you import them into a test Automation account to verify there aren't any compatibility issues.
diff --git a/articles/automation/automation-update-azure-modules.md b/articles/automation/automation-update-azure-modules.md
index 827b74e324387..432e3a9b098a2 100644
--- a/articles/automation/automation-update-azure-modules.md
+++ b/articles/automation/automation-update-azure-modules.md
@@ -28,7 +28,7 @@ If you develop your scripts locally, it's recommended to have the same module ve
## Update Az modules
-You can update Az modules through the portal **(recommended)** or through the runbook.
+The following sections explains on how you can update Az modules either through the **portal** (recommended) or through the runbook.
### Update Az modules through portal
@@ -52,7 +52,14 @@ The Azure team will regularly update the module version and provide an option to
### Update Az modules through runbook
-To update the Azure modules in your Automation account, you must use the [Update-AutomationAzureModulesForAccount](https://github.com/Microsoft/AzureAutomation-Account-Modules-Update) runbook, available as open source. To start using this runbook to update your Azure modules, download it from the GitHub repository. You can then import it into your Automation account or run it as a script. To learn how to import a runbook in your Automation account, see [Import a runbook](manage-runbooks.md#import-a-runbook). In case of any runbook failure, we recommend that you modify the parameters in the runbook according to your specific needs, as the runbook is available as open-source and provided as a reference.
+To update the Azure modules in your Automation account:
+
+1. Use the [Update-AutomationAzureModulesForAccount](https://github.com/Microsoft/AzureAutomation-Account-Modules-Update) runbook, available as open source.
+1. Download from the GitHub repository, to start using this runbook to update your Azure modules.
+1. Import it into your Automation account or run it as a script. To learn how to import a runbook in your Automation account, see [Import a runbook](manage-runbooks.md#import-a-runbook).
+
+>[!NOTE]
+> We recommend you to update Az modules through Azure portal. You can also perform this using the `Update-AutomationAzureModulesForAccount` script, available as open-source and provided as a reference. However, in case of any runbook failure, you need to modify parameters in the runbook as required or debug the script as per the scenario.
The **Update-AutomationAzureModulesForAccount** runbook supports updating the Azure, AzureRM, and Az modules by default. Review the [Update Azure modules runbook README](https://github.com/microsoft/AzureAutomation-Account-Modules-Update/blob/master/README.md) for more information on updating Az.Automation modules with this runbook. There are additional important factors that you need to take into account when using the Az modules in your Automation account. To learn more, see [Manage modules in Azure Automation](shared-resources/modules.md).
diff --git a/articles/automation/automation-windows-hrw-install.md b/articles/automation/automation-windows-hrw-install.md
index 83f64ba1117ca..bed2ea76a9af5 100644
--- a/articles/automation/automation-windows-hrw-install.md
+++ b/articles/automation/automation-windows-hrw-install.md
@@ -28,7 +28,7 @@ Before you start, make sure that you have the following.
The Hybrid Runbook Worker role depends on an Azure Monitor Log Analytics workspace to install and configure the role. You can create it through [Azure Resource Manager](../azure-monitor/logs/resource-manager-workspace.md#create-a-log-analytics-workspace), through [PowerShell](../azure-monitor/logs/powershell-workspace-configuration.md?toc=%2fpowershell%2fmodule%2ftoc.json), or in the [Azure portal](../azure-monitor/logs/quick-create-workspace.md).
-If you don't have an Azure Monitor Log Analytics workspace, review the [Azure Monitor Log design guidance](../azure-monitor/logs/design-logs-deployment.md) before you create the workspace.
+If you don't have an Azure Monitor Log Analytics workspace, review the [Azure Monitor Log design guidance](../azure-monitor/logs/workspace-design.md) before you create the workspace.
### Log Analytics agent
diff --git a/articles/automation/change-tracking/enable-from-runbook.md b/articles/automation/change-tracking/enable-from-runbook.md
index 188b0e568e872..248627f3a6a0d 100644
--- a/articles/automation/change-tracking/enable-from-runbook.md
+++ b/articles/automation/change-tracking/enable-from-runbook.md
@@ -23,7 +23,7 @@ This method uses two runbooks:
* Azure subscription. If you don't have one yet, you can [activate your MSDN subscriber benefits](https://azure.microsoft.com/pricing/member-offers/msdn-benefits-details/) or sign up for a [free account](https://azure.microsoft.com/free/?WT.mc_id=A261C142F).
* [Automation account](../automation-security-overview.md) to manage machines.
-* [Log Analytics workspace](../../azure-monitor/logs/design-logs-deployment.md)
+* [Log Analytics workspace](../../azure-monitor/logs/log-analytics-workspace-overview.md)
* A [virtual machine](../../virtual-machines/windows/quick-create-portal.md).
* Two Automation assets, which are used by the **Enable-AutomationSolution** runbook. This runbook, if it doesn't already exist in your Automation account, is automatically imported by the **Enable-MultipleSolution** runbook during its first run.
* *LASolutionSubscriptionId*: Subscription ID of where the Log Analytics workspace is located.
diff --git a/articles/automation/disable-local-authentication.md b/articles/automation/disable-local-authentication.md
index 9fb2c983ff7f3..2743710a21308 100644
--- a/articles/automation/disable-local-authentication.md
+++ b/articles/automation/disable-local-authentication.md
@@ -20,7 +20,7 @@ Disabling local authentication doesn't take effect immediately. Allow a few minu
>[!NOTE]
> Currently, PowerShell support for the new API version (2021-06-22) or the flag – `DisableLocalAuth` is not available. However, you can use the Rest-API with this API version to update the flag.
-To allow list and enroll your subscription for this feature in your respective regions, follow the steps in [how to create an Azure support request - Azure supportability | Microsoft Docs](/azure/azure-portal/supportability/how-to-create-azure-support-request).
+To allow list and enroll your subscription for this feature in your respective regions, follow the steps in [how to create an Azure support request - Azure supportability | Microsoft Docs](../azure-portal/supportability/how-to-create-azure-support-request.md).
## Re-enable local authentication
@@ -42,4 +42,4 @@ Update Management patching will not work when local authentication is disabled.
## Next steps
-- [Azure Automation account authentication overview](./automation-security-overview.md)
+- [Azure Automation account authentication overview](./automation-security-overview.md)
\ No newline at end of file
diff --git a/articles/automation/extension-based-hybrid-runbook-worker-install.md b/articles/automation/extension-based-hybrid-runbook-worker-install.md
index 8f538dd278439..6e824c7fbd38d 100644
--- a/articles/automation/extension-based-hybrid-runbook-worker-install.md
+++ b/articles/automation/extension-based-hybrid-runbook-worker-install.md
@@ -67,6 +67,20 @@ If you use a proxy server for communication between Azure Automation and machine
> [!NOTE]
> You can set up the proxy settings by PowerShell cmdlets or API.
+ To install the extension using cmdlets:
+
+1. Get the automation account details using the below API call.
+
+ ```http
+ GET https://westcentralus.management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Automation/automationAccounts/{automationAccountName}?api-version=2021-06-22
+
+ ```
+
+ The API call will provide the value with the key: `AutomationHybridServiceUrl`. Use the URL in the next step to enable extension on the VM.
+
+1. Install the Hybrid Worker Extension on the VM by running the following PowerShell cmdlet (Required module: Az.Compute). Use the `properties.automationHybridServiceUrl` provided by the above API call
+
+
**Proxy server settings**
# [Windows](#tab/windows)
@@ -82,6 +96,17 @@ $protectedsettings = @{
"ProxyPassword" = "password";
};
```
+**Azure VMs**
+
+```powershell
+Set-AzVMExtension -ResourceGroupName -Location -VMName -Name "HybridWorkerExtension" -Publisher "Microsoft.Azure.Automation.HybridWorker" -ExtensionType HybridWorkerForWindows -TypeHandlerVersion 0.1 -Settings $settings
+```
+
+**Azure Arc-enabled VMs**
+
+```powershell
+New-AzConnectedMachineExtension -ResourceGroupName -Location -VMName -Name "HybridWorkerExtension" -Publisher "Microsoft.Azure.Automation.HybridWorker" -ExtensionType HybridWorkerForWindows -TypeHandlerVersion 0.1 -Settings $settings -NoWait
+```
# [Linux](#tab/linux)
@@ -93,6 +118,18 @@ $settings = @{
"AutomationAccountURL" = "/";
};
```
+**Azure VMs**
+
+```powershell
+Set-AzVMExtension -ResourceGroupName -Location -VMName -Name "HybridWorkerExtension" -Publisher "Microsoft.Azure.Automation.HybridWorker" -ExtensionType HybridWorkerForLinux -TypeHandlerVersion 0.1 -Settings $settings
+```
+
+**Azure Arc-enabled VMs**
+
+```powershell
+New-AzConnectedMachineExtension -ResourceGroupName -Location -VMName -Name "HybridWorkerExtension" -Publisher "Microsoft.Azure.Automation.HybridWorker" -ExtensionType HybridWorkerForLinux -TypeHandlerVersion 0.1 -Settings $settings -NoWait
+```
+
---
### Firewall use
@@ -127,10 +164,10 @@ To create a hybrid worker group in the Azure portal, follow these steps:
1. From the **Basics** tab, in the **Name** text box, enter a name for your Hybrid worker group.
-1. For the **Use run as credential** option:
+1. For the **Use Hybrid Worker Credentials** option:
- - If you select **No**, the hybrid extension will be installed using the local system account.
- - If you select **Yes**, then from the drop-down list, select the credential asset.
+ - If you select **Default**, the hybrid extension will be installed using the local system account.
+ - If you select **Custom**, then from the drop-down list, select the credential asset.
1. Select **Next** to advance to the **Hybrid workers** tab. You can select Azure virtual machines or Azure Arc-enabled servers to be added to this Hybrid worker group. If you don't select any machines, an empty Hybrid worker group will be created. You can still add machines later.
@@ -585,7 +622,7 @@ To install and use Hybrid Worker extension using REST API, follow these steps. T
1. Get the automation account details using this API call.
```http
- GET https://westcentralus.management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Automation/automationAccounts/{automationAccountName}?api-version=2021-06-22
+ GET https://westcentralus.management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Automation/automationAccounts/HybridWorkerExtension?api-version=2021-06-22
```
@@ -594,7 +631,7 @@ To install and use Hybrid Worker extension using REST API, follow these steps. T
1. Install the Hybrid Worker Extension on Azure VM by using the following API call.
```http
- PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}?api-version=2021-11-01
+ PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/HybridWorkerExtension?api-version=2021-11-01
```
diff --git a/articles/automation/media/automation-hrw-run-runbooks/managed-identities-client-id-expanded.png b/articles/automation/media/automation-hrw-run-runbooks/managed-identities-client-id-expanded.png
new file mode 100644
index 0000000000000..baedca73b7f48
Binary files /dev/null and b/articles/automation/media/automation-hrw-run-runbooks/managed-identities-client-id-expanded.png differ
diff --git a/articles/automation/media/automation-hrw-run-runbooks/managed-identities-client-id-inline.png b/articles/automation/media/automation-hrw-run-runbooks/managed-identities-client-id-inline.png
new file mode 100644
index 0000000000000..baedca73b7f48
Binary files /dev/null and b/articles/automation/media/automation-hrw-run-runbooks/managed-identities-client-id-inline.png differ
diff --git a/articles/automation/media/overview/automation-overview.png b/articles/automation/media/overview/automation-overview.png
index a10ab5a94703b..3d32e2c883c68 100644
Binary files a/articles/automation/media/overview/automation-overview.png and b/articles/automation/media/overview/automation-overview.png differ
diff --git a/articles/automation/overview.md b/articles/automation/overview.md
index b49b6729333cf..06ff2f91fa8dd 100644
--- a/articles/automation/overview.md
+++ b/articles/automation/overview.md
@@ -135,7 +135,7 @@ These Azure services can work with Automation job and runbook resources using an
## Pricing for Azure Automation
-Process automation includes runbook jobs and watchers. Billing for jobs is based on the number of job run time minutes used in the month, and for watchers, it is on the number of hours used in a month. The charges for process automation are incurred whenever a [job](/azure/automation/start-runbooks) or [watcher](/azure/automation/automation-scenario-using-watcher-task) runs.
+Process automation includes runbook jobs and watchers. Billing for jobs is based on the number of job run time minutes used in the month, and for watchers, it is on the number of hours used in a month. The charges for process automation are incurred whenever a [job](./start-runbooks.md) or [watcher](./automation-scenario-using-watcher-task.md) runs.
You create Automation accounts with a Basic SKU, wherein the first 500 job run time minutes are free per subscription. You are billed only for minutes/hours that exceed the 500 mins free included units.
You can review the prices associated with Azure Automation on the [pricing](https://azure.microsoft.com/pricing/details/automation/) page.
@@ -143,4 +143,4 @@ You can review the prices associated with Azure Automation on the [pricing](http
## Next steps
> [!div class="nextstepaction"]
-> [Create an Automation account](./quickstarts/create-account-portal.md)
+> [Create an Automation account](./quickstarts/create-account-portal.md)
\ No newline at end of file
diff --git a/articles/automation/quickstart-create-automation-account-template.md b/articles/automation/quickstart-create-automation-account-template.md
index 469f9d7c9991d..5ef25b462e917 100644
--- a/articles/automation/quickstart-create-automation-account-template.md
+++ b/articles/automation/quickstart-create-automation-account-template.md
@@ -35,7 +35,7 @@ If you're new to Azure Automation and Azure Monitor, it's important that you und
* Review [workspace mappings](how-to/region-mappings.md) to specify the supported regions inline or in a parameter file. Only certain regions are supported for linking a Log Analytics workspace and an Automation account in your subscription.
-* If you're new to Azure Monitor Logs and haven't deployed a workspace already, review the [workspace design guidance](../azure-monitor/logs/design-logs-deployment.md). This document will help you learn about access control, and help you understand the recommended design implementation strategies for your organization.
+* If you're new to Azure Monitor Logs and haven't deployed a workspace already, review the [workspace design guidance](../azure-monitor/logs/workspace-design.md). This document will help you learn about access control, and help you understand the recommended design implementation strategies for your organization.
## Review the template
diff --git a/articles/automation/troubleshoot/update-agent-issues.md b/articles/automation/troubleshoot/update-agent-issues.md
index e6f97785dead1..35aefce6628d6 100644
--- a/articles/automation/troubleshoot/update-agent-issues.md
+++ b/articles/automation/troubleshoot/update-agent-issues.md
@@ -44,7 +44,7 @@ Results are shown on the page when they're ready. The checks sections show what'
### Operating system
-The operating system check verifies whether the Hybrid Runbook Worker is running [one of the supported operating systems.](/azure/automation/update-management/operating-system-requirements.md#windows-operating-system)
+The operating system check verifies whether the Hybrid Runbook Worker is running [one of the supported operating systems.](../update-management/operating-system-requirements.md)
one of the supported operating systems
### .NET 4.6.2
diff --git a/articles/automation/update-management/enable-from-runbook.md b/articles/automation/update-management/enable-from-runbook.md
index bc2facd427710..109ad1e3b3bb0 100644
--- a/articles/automation/update-management/enable-from-runbook.md
+++ b/articles/automation/update-management/enable-from-runbook.md
@@ -24,7 +24,7 @@ This method uses two runbooks:
* Azure subscription. If you don't have one yet, you can [activate your MSDN subscriber benefits](https://azure.microsoft.com/pricing/member-offers/msdn-benefits-details/) or sign up for a [free account](https://azure.microsoft.com/free/?WT.mc_id=A261C142F).
* [Automation account](../automation-security-overview.md) to manage machines.
-* [Log Analytics workspace](../../azure-monitor/logs/design-logs-deployment.md)
+* [Log Analytics workspace](../../azure-monitor/logs/log-analytics-workspace-overview.md)
* A [virtual machine](../../virtual-machines/windows/quick-create-portal.md).
* Two Automation assets, which are used by the **Enable-AutomationSolution** runbook. This runbook, if it doesn't already exist in your Automation account, is automatically imported by the **Enable-MultipleSolution** runbook during its first run.
* *LASolutionSubscriptionId*: Subscription ID of where the Log Analytics workspace is located.
diff --git a/articles/automation/update-management/enable-from-template.md b/articles/automation/update-management/enable-from-template.md
index 959c210c6e8b1..34b6ccb7d9efc 100644
--- a/articles/automation/update-management/enable-from-template.md
+++ b/articles/automation/update-management/enable-from-template.md
@@ -62,7 +62,7 @@ If you're new to Azure Automation and Azure Monitor, it's important that you und
* Review [workspace mappings](../how-to/region-mappings.md) to specify the supported regions inline or in a parameter file. Only certain regions are supported for linking a Log Analytics workspace and an Automation account in your subscription.
-* If you're new to Azure Monitor logs and have not deployed a workspace already, you should review the [workspace design guidance](../../azure-monitor/logs/design-logs-deployment.md). It will help you to learn about access control, and understand the design implementation strategies we recommend for your organization.
+* If you're new to Azure Monitor logs and have not deployed a workspace already, you should review the [workspace design guidance](../../azure-monitor/logs/workspace-design.md). It will help you to learn about access control, and understand the design implementation strategies we recommend for your organization.
## Deploy template
diff --git a/articles/automation/update-management/plan-deployment.md b/articles/automation/update-management/plan-deployment.md
index e090c8085cd67..49f881e1d9292 100644
--- a/articles/automation/update-management/plan-deployment.md
+++ b/articles/automation/update-management/plan-deployment.md
@@ -17,7 +17,7 @@ Update Management is an Azure Automation feature, and therefore requires an Auto
Update Management depends on a Log Analytics workspace in Azure Monitor to store assessment and update status log data collected from managed machines. Integration with Log Analytics also enables detailed analysis and alerting in Azure Monitor. You can use an existing workspace in your subscription, or create a new one dedicated only for Update Management.
-If you are new to Azure Monitor Logs and the Log Analytics workspace, you should review the [Design a Log Analytics workspace](../../azure-monitor/logs/design-logs-deployment.md) deployment guide.
+If you are new to Azure Monitor Logs and the Log Analytics workspace, you should review the [Design a Log Analytics workspace](../../azure-monitor/logs/workspace-design.md) deployment guide.
## Step 3 - Supported operating systems
diff --git a/articles/automation/whats-new.md b/articles/automation/whats-new.md
index fd1939b6843b9..55141c35a67b5 100644
--- a/articles/automation/whats-new.md
+++ b/articles/automation/whats-new.md
@@ -13,9 +13,12 @@ ms.custom: references_regions
Azure Automation receives improvements on an ongoing basis. To stay up to date with the most recent developments, this article provides you with information about:
- The latest releases
+- New features
+- Improvements to existing features
- Known issues
- Bug fixes
+
This page is updated monthly, so revisit it regularly. If you're looking for items older than six months, you can find them in [Archive for What's new in Azure Automation](whats-new-archive.md).
@@ -49,7 +52,7 @@ Users can now restore an Automation account deleted within 30 days. Read [here](
**Type:** New feature
-New scripts are added to the Azure Automation [GitHub repository](https://github.com/azureautomation) to address one of Azure Automation's key scenarios of VM management based on Azure Monitor alert. For more information, see [Trigger runbook from Azure alert](./automation-create-alert-triggered-runbook.md).
+New scripts are added to the Azure Automation [GitHub repository](https://github.com/azureautomation) to address one of Azure Automation's key scenarios of VM management based on Azure Monitor alert. For more information, see [Trigger runbook from Azure alert](./automation-create-alert-triggered-runbook.md#common-azure-vm-management-operations).
- Stop-Azure-VM-On-Alert
- Restart-Azure-VM-On-Alert
diff --git a/articles/availability-zones/TOC.yml b/articles/availability-zones/TOC.yml
index 3e623d74f98f2..c00d5afb8708e 100644
--- a/articles/availability-zones/TOC.yml
+++ b/articles/availability-zones/TOC.yml
@@ -16,6 +16,8 @@
href: az-region.md
- name: Migration Guidance
items:
+ - name: Virtual Machines and Virtual Machine Scale Sets
+ href: migrate-vm.md
- name: Storage accounts
href: migrate-storage.md
- name: Terminology
@@ -102,8 +104,7 @@
- name: Identity
items:
- name: Create an Azure Active Directory Domain Services instance
- href: ../active-directory-domain-services/tutorial-create-instance.md
-
+ href: ../active-directory-domain-services/tutorial-create-instance.md
- name: Disaster Recovery
items:
- name: Business continuity management in Azure
diff --git a/articles/availability-zones/az-overview.md b/articles/availability-zones/az-overview.md
index 05c76a63d074d..6b120b23c57a8 100644
--- a/articles/availability-zones/az-overview.md
+++ b/articles/availability-zones/az-overview.md
@@ -4,7 +4,7 @@ description: Learn about regions and availability zones and how they work to hel
author: awysza
ms.service: azure
ms.topic: conceptual
-ms.date: 03/30/2022
+ms.date: 05/30/2022
ms.author: rarco
ms.reviewer: cynthn
ms.custom: references_regions
@@ -42,21 +42,7 @@ Some organizations require high availability of availability zones and protectio
## Azure regions with availability zones
-Azure provides the most extensive global footprint of any cloud provider and is rapidly opening new regions and availability zones. The following regions currently support availability zones.
-
-| Americas | Europe | Africa | Asia Pacific |
-|--------------------|----------------------|---------------------|----------------|
-| Brazil South | France Central | South Africa North | Australia East |
-| Canada Central | Germany West Central | | Central India |
-| Central US | North Europe | | Japan East |
-| East US | Norway East | | Korea Central |
-| East US 2 | UK South | | Southeast Asia |
-| South Central US | West Europe | | East Asia |
-| US Gov Virginia | Sweden Central | | China North 3 |
-| West US 2 | Switzerland North* | | |
-| West US 3 | | | |
-
-\* To learn more about Availability Zones and available services support in these regions, contact your Microsoft sales or customer representative. For the upcoming regions that will support Availability Zones, see [Azure geographies](https://azure.microsoft.com/global-infrastructure/geographies/).
+[!INCLUDE [availability-zone-regions-include](./includes/availability-zone-regions-include.md)]
## Next steps
diff --git a/articles/availability-zones/az-region.md b/articles/availability-zones/az-region.md
index fa1787e731f1b..6e27b3f2df00e 100644
--- a/articles/availability-zones/az-region.md
+++ b/articles/availability-zones/az-region.md
@@ -4,7 +4,7 @@ description: Learn what services are supported by availability zones and underst
author: awysza
ms.service: azure
ms.topic: conceptual
-ms.date: 03/25/2022
+ms.date: 05/30/2022
ms.author: rarco
ms.reviewer: cynthn
ms.custom: references_regions
@@ -19,21 +19,7 @@ Azure strives to enable high resiliency across every service and offering. Runni
## Azure regions with availability zones
-Azure provides the most extensive global footprint of any cloud provider and is rapidly opening new regions and availability zones. The following regions currently support availability zones.
-
-| Americas | Europe | Africa | Asia Pacific |
-|--------------------|----------------------|---------------------|----------------|
-| Brazil South | France Central | South Africa North | Australia East |
-| Canada Central | Germany West Central | | Central India |
-| Central US | North Europe | | Japan East |
-| East US | Norway East | | Korea Central |
-| East US 2 | UK South | | Southeast Asia |
-| South Central US | West Europe | | East Asia |
-| US Gov Virginia | Sweden Central | | China North 3 |
-| West US 2 | Switzerland North* | | |
-| West US 3 | | | |
-
-\* To learn more about Availability Zones and available services support in these regions, contact your Microsoft sales or customer representative. For the upcoming regions that will support Availability Zones, see [Azure geographies](https://azure.microsoft.com/global-infrastructure/geographies/).
+[!INCLUDE [availability-zone-regions-include](./includes/availability-zone-regions-include.md)]
For a list of Azure services that support availability zones by Azure region, see the [availability zones documentation](az-overview.md).
@@ -84,19 +70,19 @@ In the Product Catalog, always-available services are listed as "non-regional" s
| [Azure Storage: Disk Storage](migrate-storage.md) | ![An icon that signifies this service is zone redundant.](media/icon-zone-redundant.svg) |
| [Azure Storage: Blob Storage](migrate-storage.md) | ![An icon that signifies this service is zone redundant.](media/icon-zone-redundant.svg) |
| [Azure Storage: Managed Disks](migrate-storage.md) | ![An icon that signifies this service is zone redundant.](media/icon-zone-redundant.svg) ![An icon that signifies this service is zonal](media/icon-zonal.svg) |
-| [Azure Virtual Machine Scale Sets](../virtual-machine-scale-sets/scripts/cli-sample-zone-redundant-scale-set.md) | ![An icon that signifies this service is zone redundant.](media/icon-zone-redundant.svg) ![An icon that signifies this service is zonal.](media/icon-zonal.svg) |
-| [Azure Virtual Machines](../virtual-machines/windows/create-powershell-availability-zone.md) | ![An icon that signifies this service is zonal.](media/icon-zonal.svg) |
-| Virtual Machines: [Av2-Series](../virtual-machines/windows/create-powershell-availability-zone.md) | ![An icon that signifies this service is zonal.](media/icon-zonal.svg) |
-| Virtual Machines: [Bs-Series](../virtual-machines/windows/create-powershell-availability-zone.md) | ![An icon that signifies this service is zonal.](media/icon-zonal.svg) |
-| Virtual Machines: [DSv2-Series](../virtual-machines/windows/create-powershell-availability-zone.md) | ![An icon that signifies this service is zonal.](media/icon-zonal.svg) |
-| Virtual Machines: [DSv3-Series](../virtual-machines/windows/create-powershell-availability-zone.md) | ![An icon that signifies this service is zonal.](media/icon-zonal.svg) |
-| Virtual Machines: [Dv2-Series](../virtual-machines/windows/create-powershell-availability-zone.md) | ![An icon that signifies this service is zonal.](media/icon-zonal.svg) |
-| Virtual Machines: [Dv3-Series](../virtual-machines/windows/create-powershell-availability-zone.md) | ![An icon that signifies this service is zonal.](media/icon-zonal.svg) |
-| Virtual Machines: [ESv3-Series](../virtual-machines/windows/create-powershell-availability-zone.md) | ![An icon that signifies this service is zonal.](media/icon-zonal.svg) |
-| Virtual Machines: [Ev3-Series](../virtual-machines/windows/create-powershell-availability-zone.md) | ![An icon that signifies this service is zonal.](media/icon-zonal.svg) |
-| Virtual Machines: [F-Series](../virtual-machines/windows/create-powershell-availability-zone.md) | ![An icon that signifies this service is zonal.](media/icon-zonal.svg) |
-| Virtual Machines: [FS-Series](../virtual-machines/windows/create-powershell-availability-zone.md) | ![An icon that signifies this service is zonal.](media/icon-zonal.svg) |
-| Virtual Machines: [Azure Compute Gallery](../virtual-machines/azure-compute-gallery.md#high-availability)| ![An icon that signifies this service is zone redundant.](media/icon-zone-redundant.svg) |
+| [Azure Virtual Machine Scale Sets](migrate-vm.md) | ![An icon that signifies this service is zone redundant.](media/icon-zone-redundant.svg) ![An icon that signifies this service is zonal.](media/icon-zonal.svg) |
+| [Azure Virtual Machines](migrate-vm.md) | ![An icon that signifies this service is zonal.](media/icon-zonal.svg) |
+| Virtual Machines: [Av2-Series](migrate-vm.md) | ![An icon that signifies this service is zonal.](media/icon-zonal.svg) |
+| Virtual Machines: [Bs-Series](migrate-vm.md) | ![An icon that signifies this service is zonal.](media/icon-zonal.svg) |
+| Virtual Machines: [DSv2-Series](migrate-vm.md) | ![An icon that signifies this service is zonal.](media/icon-zonal.svg) |
+| Virtual Machines: [DSv3-Series](migrate-vm.md) | ![An icon that signifies this service is zonal.](media/icon-zonal.svg) |
+| Virtual Machines: [Dv2-Series](migrate-vm.md) | ![An icon that signifies this service is zonal.](media/icon-zonal.svg) |
+| Virtual Machines: [Dv3-Series](migrate-vm.md) | ![An icon that signifies this service is zonal.](media/icon-zonal.svg) |
+| Virtual Machines: [ESv3-Series](migrate-vm.md) | ![An icon that signifies this service is zonal.](media/icon-zonal.svg) |
+| Virtual Machines: [Ev3-Series](migrate-vm.md) | ![An icon that signifies this service is zonal.](media/icon-zonal.svg) |
+| Virtual Machines: [F-Series](migrate-vm.md) | ![An icon that signifies this service is zonal.](media/icon-zonal.svg) |
+| Virtual Machines: [FS-Series](migrate-vm.md) | ![An icon that signifies this service is zonal.](media/icon-zonal.svg) |
+| Virtual Machines: [Azure Compute Gallery](migrate-vm.md)| ![An icon that signifies this service is zone redundant.](media/icon-zone-redundant.svg) |
| [Azure Virtual Network](../vpn-gateway/create-zone-redundant-vnet-gateway.md) | ![An icon that signifies this service is zone redundant.](media/icon-zone-redundant.svg) |
| [Azure VPN Gateway](../vpn-gateway/about-zone-redundant-vnet-gateways.md) | ![An icon that signifies this service is zone redundant.](media/icon-zone-redundant.svg) |
diff --git a/articles/availability-zones/includes/availability-zone-regions-include.md b/articles/availability-zones/includes/availability-zone-regions-include.md
new file mode 100644
index 0000000000000..de0bb4db74c61
--- /dev/null
+++ b/articles/availability-zones/includes/availability-zone-regions-include.md
@@ -0,0 +1,24 @@
+---
+ title: include file
+ description: include file
+ author: awysza
+ ms.service: azure
+ ms.topic: include
+ ms.date: 05/30/2022
+ ms.author: rarco
+ ms.custom: include file
+---
+
+Azure provides the most extensive global footprint of any cloud provider and is rapidly opening new regions and availability zones. The following regions currently support availability zones.
+
+| Americas | Europe | Africa | Asia Pacific |
+|--------------------|----------------------|---------------------|----------------|
+| Brazil South | France Central | South Africa North | Australia East |
+| Canada Central | Germany West Central | | Central India |
+| Central US | North Europe | | Japan East |
+| East US | Norway East | | Korea Central |
+| East US 2 | UK South | | Southeast Asia |
+| South Central US | West Europe | | East Asia |
+| US Gov Virginia | Sweden Central | | China North 3 |
+| West US 2 | Switzerland North | | |
+| West US 3 | | | |
diff --git a/articles/availability-zones/migrate-vm.md b/articles/availability-zones/migrate-vm.md
new file mode 100644
index 0000000000000..5bd4d24ea54c9
--- /dev/null
+++ b/articles/availability-zones/migrate-vm.md
@@ -0,0 +1,96 @@
+---
+title: Migrate Azure Virtual Machines and Azure Virtual Machine Scale Sets to availability zone support
+description: Learn how to migrate your Azure Virtual Machines and Virtual Machine Scale Sets to availability zone support.
+author: anaharris-ms
+ms.service: azure
+ms.topic: conceptual
+ms.date: 04/21/2022
+ms.author: anaharris
+ms.reviewer: anaharris
+ms.custom: references_regions
+---
+
+# Migrate Virtual Machines and Virtual Machine Scale Sets to availability zone support
+
+This guide describes how to migrate Virtual Machines (VMs) and Virtual Machine Scale Sets (VMSS) from non-availability zone support to availability zone support. We'll take you through the different options for migration, including how you can use availability zone support for Disaster Recovery solutions.
+
+Virtual Machine (VM) and Virtual Machine Scale Sets (VMSS) are zonal services, which means that VM resources can be deployed by using one of the following methods:
+
+- VM resources are deployed to a specific, self-selected availability zone to achieve more stringent latency or performance requirements.
+
+- VM resources are replicated to one or more zones within the region to improve the resiliency of the application and data in a High Availability (HA) architecture.
+
+When you migrate resources to availability zone support, we recommend that you select multiple zones for your new VMs and VMSS, to ensure high-availability of your compute resources.
+
+## Prerequisites
+
+To migrate to availability zone support, your VM SKUs must be available across the zones in for your region. To check for VM SKU availability, use one of the following methods:
+
+- Use PowerShell to [Check VM SKU availability](../virtual-machines/windows/create-PowerShell-availability-zone.md#check-vm-sku-availability).
+- Use the Azure CLI to [Check VM SKU availability](../virtual-machines/linux/create-cli-availability-zone.md#check-vm-sku-availability).
+- Go to [Foundational Services](az-region.md#an-icon-that-signifies-this-service-is-foundational-foundational-services).
+
+## Downtime requirements
+
+Because zonal VMs are created across the availability zones, all migration options mentioned in this article require downtime during deployment because zonal VMs are created across the availability zones.
+
+## Migration Option 1: Redeployment
+
+### When to use redeployment
+
+Use the redeployment option if you have good Infrastructure as Code (IaC) practices setup to manage infrastructure. The redeployment option gives you more control, and the ability to automate various processes within your deployment pipelines.
+
+### Redeployment considerations
+
+- When you redeploy your VM and VMSS resources, the underlying resources such as managed disk and IP address for the VM are created in the same availability zone. You must use a Standard SKU public IP address and load balancer to create zone-redundant network resources.
+
+- For zonal deployments that require reasonably low network latency and good performance between application tier and data tier, use [proximity placement groups](../virtual-machines/co-location.md). Proximity groups can force grouping of different VM resources under a single network spine. For an example of an SAP workload that uses proximity placement groups, see [Azure proximity placement groups for optimal network latency with SAP applications](../virtual-machines/workloads/sap/sap-proximity-placement-scenarios.md)
+
+### How to redeploy
+
+To redeploy, you'll need to recreate your VM and VMSS resources. To ensure high-availability of your compute resources, it's recommended that you select multiple zones for your new VMs and VMSS.
+
+To learn how create VMs in an availability zone, see:
+
+- [Create VM using Azure CLI](../virtual-machines/linux/create-cli-availability-zone.md)
+- [Create VM using Azure PowerShell](../virtual-machines/windows/create-PowerShell-availability-zone.md)
+- [Create VM using Azure portal](../virtual-machines/create-portal-availability-zone.md?tabs=standard)
+
+To learn how to create VMSS in an availability zone, see [Create a virtual machine scale set that uses Availability Zones](../virtual-machine-scale-sets/virtual-machine-scale-sets-use-availability-zones.md).
+
+## Migration Option 2: Azure Resource Mover
+
+### When to use Azure Resource Mover
+
+Use Azure Resource Mover for an easy way to move VMs or encrypted VMs from one region without availability zones to another with availability zones. If you want to learn more about the benefits of using Azure Resource Mover, see [Why use Azure Resource Mover?](../resource-mover/overview.md#why-use-resource-mover).
+
+### Azure Resource Mover considerations
+
+When you use Azure Resource mover, all keys and secrets are copied from the source key vault to the newly created destination key vault in your target region. All resources related to your customer-managed keys, such as Azure Key Vaults, disk encryption sets, VMs, disks, and snapshots, must be in the same subscription and region. Azure Key Vault’s default availability and redundancy feature can't be used as the destination key vault for the moved VM resources, even if the target region is a secondary region to which your source key vault is replicated.
+
+### How to use Azure Resource Mover
+
+To learn how to move VMs to another region, see [Move Azure VMs to an availability zone in another region](../resource-mover/move-region-availability-zone.md)
+
+To learn how to move encrypted VMs to another region, see [Tutorial: Move encrypted Azure VMs across regions](../resource-mover/tutorial-move-region-encrypted-virtual-machines.md)
+
+## Disaster Recovery Considerations
+
+Typically, availability zones are used to deploy VMs in a High Availability configuration. They may be too close to each other to serve as a Disaster Recovery solution during a natural disaster. However, there are scenarios where availability zones can be used for Disaster Recovery. To learn more, see [Using Availability Zones for Disaster Recovery](../site-recovery/azure-to-azure-how-to-enable-zone-to-zone-disaster-recovery.md#using-availability-zones-for-disaster-recovery).
+
+The following requirements should be part of a disaster recovery strategy that helps your organization run its workloads during planned or unplanned outages across zones:
+
+- The source VM must already be a zonal VM, which means that it's placed in a logical zone.
+- You'll need to replicate your VM from one zone to another zone using Azure Site Recovery service.
+- Once your VM is replicated to another zone, you can follow steps to run a Disaster Recovery drill, fail over, reprotect, and failback.
+- To enable VM disaster recovery between availability zones, follow the instructions in [Enable Azure VM disaster recovery between availability zones](../site-recovery/azure-to-azure-how-to-enable-zone-to-zone-disaster-recovery.md) .
+
+## Next Steps
+
+Learn more about:
+
+> [!div class="nextstepaction"]
+> [Regions and Availability Zones in Azure](az-overview.md)
+
+> [!div class="nextstepaction"]
+> [Azure Services that support Availability Zones](az-region.md)
\ No newline at end of file
diff --git a/articles/azure-app-configuration/TOC.yml b/articles/azure-app-configuration/TOC.yml
index bcdde3634ebfe..60261c886011c 100644
--- a/articles/azure-app-configuration/TOC.yml
+++ b/articles/azure-app-configuration/TOC.yml
@@ -171,6 +171,8 @@
href: howto-move-resource-between-regions.md
- name: Recover App Configuration stores (Preview)
href: howto-recover-deleted-stores-in-azure-app-configuration.md
+ - name: Disable public access
+ href: howto-disable-public-access.md
- name: Reference
items:
- name: Client libraries
diff --git a/articles/azure-app-configuration/concept-github-action.md b/articles/azure-app-configuration/concept-github-action.md
index 4b560432d1fd1..00ac784079407 100644
--- a/articles/azure-app-configuration/concept-github-action.md
+++ b/articles/azure-app-configuration/concept-github-action.md
@@ -20,7 +20,7 @@ A GitHub Actions [workflow](https://docs.github.com/en/actions/learn-github-acti
The GitHub [documentation](https://docs.github.com/en/actions/learn-github-actions/introduction-to-github-actions) provides in-depth view of GitHub workflows and actions.
## Enable GitHub Actions in your repository
-To start using this GitHub action, go to your repository and select the **Actions** tab. Select **New workflow**, then **Set up a workflow yourself**. Finally, search the marketplace for “Azure App Configuration Sync.”
+To start using this GitHub Action, go to your repository and select the **Actions** tab. Select **New workflow**, then **Set up a workflow yourself**. Finally, search the marketplace for “Azure App Configuration Sync.”
> [!div class="mx-imgBorder"]
> ![Select the Action tab](media/find-github-action.png)
@@ -57,7 +57,7 @@ jobs:
```
## Use strict sync
-By default the GitHub action does not enable strict mode, meaning that the sync will only add key-values from the configuration file to the App Configuration instance (no key-value pairs will be deleted). Enabling strict mode will mean key-value pairs that aren't in the configuration file are deleted from the App Configuration instance, so that it matches the configuration file. If you are syncing from multiple sources or using Azure Key Vault with App Configuration, you'll want to use different prefixes or labels with strict sync to avoid wiping out configuration settings from other files (see samples below).
+By default the GitHub Action does not enable strict mode, meaning that the sync will only add key-values from the configuration file to the App Configuration instance (no key-value pairs will be deleted). Enabling strict mode will mean key-value pairs that aren't in the configuration file are deleted from the App Configuration instance, so that it matches the configuration file. If you are syncing from multiple sources or using Azure Key Vault with App Configuration, you'll want to use different prefixes or labels with strict sync to avoid wiping out configuration settings from other files (see samples below).
```json
on:
diff --git a/articles/azure-app-configuration/concept-soft-delete.md b/articles/azure-app-configuration/concept-soft-delete.md
index 28d6ebd4a8b45..8d5879caf90a9 100644
--- a/articles/azure-app-configuration/concept-soft-delete.md
+++ b/articles/azure-app-configuration/concept-soft-delete.md
@@ -38,13 +38,18 @@ Purge is the operation to permanently delete the stores in a soft deleted state,
## Purge protection
With Purge protection enabled, soft deleted stores can't be purged in the retention period. If disabled, the soft deleted store can be purged before the retention period expires. Once purge protection is enabled on a store, it can't be disabled.
-## Permissions to recover or purge store
+## Permissions to recover a deleted store
-A user has to have below permissions to recover or purge a soft-deleted app configuration store. The built-in Contributor and Owner roles already have the required permissions to recover and purge.
+- `Microsoft.AppConfiguration/configurationStores/write`
-- Permission to recover - `Microsoft.AppConfiguration/configurationStores/write`
+To recover a deleted App Configuration store the `Microsoft.AppConfiguration/configurationStores/write` permission is needed. The built-in "Owner" and "Contributor" roles contain this permission by default. The permission can be assigned at the subscription or resource group scope.
-- Permission to purge - `Microsoft.AppConfiguration/configurationStores/action`
+## Permissions to read and purge deleted stores
+
+* Read: `Microsoft.AppConfiguration/locations/deletedConfigurationStores/read`
+* Purge: `Microsoft.AppConfiguration/locations/deletedConfigurationStores/purge/action`
+
+To list deleted App Configuration stores, or get an individual store by name the `Microsoft.AppConfiguration/locations/deletedConfigurationStores/read` permission is needed. To purge a deleted App Configuration store the `Microsoft.AppConfiguration/locations/deletedConfigurationStores/purge/action` permission is needed. The built-in "Owner" and "Contributor" roles contain these permissions by default. Permissions for reading and purging deleted App Configuration stores must be assigned at the subscription level. This is because deleted configuration stores exist outside of individual resource groups.
## Billing implications
diff --git a/articles/azure-app-configuration/howto-disable-public-access.md b/articles/azure-app-configuration/howto-disable-public-access.md
new file mode 100644
index 0000000000000..3d0287e9183d2
--- /dev/null
+++ b/articles/azure-app-configuration/howto-disable-public-access.md
@@ -0,0 +1,79 @@
+---
+title: How to disable public access in Azure App Configuration
+description: How to disable public access to your Azure App Configuration store.
+author: maud-lv
+ms.author: malev
+ms.service: azure-app-configuration
+ms.topic: how-to
+ms.date: 05/25/2022
+ms.custom: template-how-to
+---
+
+# Disable public access in Azure App Configuration
+
+In this article, you'll learn how to disable public access for your Azure App Configuration store. Setting up private access can offer a better security for your configuration store.
+
+## Prerequisites
+
+- An Azure account with an active subscription. [Create an account for free](https://azure.microsoft.com/free/dotnet).
+- We assume you already have an App Configuration store. If you want to create one, [create an App Configuration store](quickstart-aspnet-core-app.md).
+
+## Sign in to Azure
+
+You will need to sign in to Azure first to access the App Configuration service.
+
+### [Portal](#tab/azure-portal)
+
+Sign in to the Azure portal at [https://portal.azure.com/](https://portal.azure.com/) with your Azure account.
+
+### [Azure CLI](#tab/azure-cli)
+
+Sign in to Azure using the `az login` command in the [Azure CLI](/cli/azure/install-azure-cli).
+
+```azurecli-interactive
+az login
+```
+
+This command will prompt your web browser to launch and load an Azure sign-in page. If the browser fails to open, use device code flow with `az login --use-device-code`. For more sign in options, go to [sign in with the Azure CLI](/cli/azure/authenticate-azure-cli).
+
+---
+
+## Disable public access to a store
+
+Azure App Configuration offers three public access options:
+
+- Automatic public access: public network access is enabled, as long as you don't have a private endpoint present. Once you create a private endpoint, App Configuration disables public network access and enables private access. This option can only be selected when creating the store.
+- Disabled: public access is disabled and no traffic can access this resource unless it's through a private endpoint.
+- Enabled: all networks can access this resource.
+
+To disable access to the App Configuration store from public network, follow the process below.
+
+### [Portal](#tab/azure-portal)
+
+1. In your App Configuration store, under **Settings**, select **Networking**.
+1. Under **Public Access**, select **Disabled** to disable public access to the App Configuration store and only allow access through private endpoints. If you already had public access disabled and instead wanted to enable public access to your configuration store, you would select **Enabled**.
+
+ > [!NOTE]
+ > Once you've switched **Public Access** to **Disabled** or **Enabled**, you won't be able to select **Public Access: Automatic** anymore, as this option can only be selected when creating the store.
+
+1. Select **Apply**.
+
+:::image type="content" source="media/disable-public-access.png" alt-text="Screenshot of the Azure portal disabling public access.":::
+
+### [Azure CLI](#tab/azure-cli)
+
+In the CLI, run the following code:
+
+```azurecli-interactive
+az appconfig update --name --enable-public-network false
+```
+
+> [!NOTE]
+> When you create an App Config store without specifying if you want public access to be enabled or disabled, public access is set to automatic by default. After you've run the `--enable-public-network` command, you won't be able to switch to an automatic public access anymore.
+
+---
+
+## Next steps
+
+> [!div class="nextstepaction"]
+>[Using private endpoints for Azure App Configuration](./concept-private-endpoint.md)
diff --git a/articles/azure-app-configuration/howto-recover-deleted-stores-in-azure-app-configuration.md b/articles/azure-app-configuration/howto-recover-deleted-stores-in-azure-app-configuration.md
index 7847d8fb43e9a..8374871985111 100644
--- a/articles/azure-app-configuration/howto-recover-deleted-stores-in-azure-app-configuration.md
+++ b/articles/azure-app-configuration/howto-recover-deleted-stores-in-azure-app-configuration.md
@@ -19,7 +19,7 @@ To learn more about the concept of soft delete feature, see [Soft-Delete in Azur
* An Azure subscription - [create one for free](https://azure.microsoft.com/free/dotnet)
-* Refer to the [Soft-Delete in Azure App Configuration](./concept-soft-delete.md#permissions-to-recover-or-purge-store) for permissions requirements.
+* Refer to the [Soft-Delete in Azure App Configuration](./concept-soft-delete.md#permissions-to-recover-a-deleted-store) section for permissions requirements.
## Set retention policy and enable purge protection at store creation
diff --git a/articles/azure-app-configuration/media/disable-public-access.png b/articles/azure-app-configuration/media/disable-public-access.png
new file mode 100644
index 0000000000000..f40a1dfed0c03
Binary files /dev/null and b/articles/azure-app-configuration/media/disable-public-access.png differ
diff --git a/articles/azure-arc/data/active-directory-introduction.md b/articles/azure-arc/data/active-directory-introduction.md
index 4e2aa81f5f331..badf4919ec5ec 100644
--- a/articles/azure-arc/data/active-directory-introduction.md
+++ b/articles/azure-arc/data/active-directory-introduction.md
@@ -12,8 +12,11 @@ ms.topic: how-to
---
# Azure Arc-enabled SQL Managed Instance with Active Directory authentication
+
Azure Arc-enabled data services support Active Directory (AD) for Identity and Access Management (IAM). The Arc-enabled SQL Managed Instance uses an existing on-premises Active Directory (AD) domain for authentication.
+[!INCLUDE [azure-arc-data-preview](../../../includes/azure-arc-data-preview.md)]
+
This article describes how to enable Azure Arc-enabled SQL Managed Instance with Active Directory (AD) Authentication. The article demonstrates two possible AD integration modes:
- Customer-managed keytab (CMK)
- System-managed keytab (SMK)
diff --git a/articles/azure-arc/data/active-directory-prerequisites.md b/articles/azure-arc/data/active-directory-prerequisites.md
index 97abd37826960..fafd2be89973f 100644
--- a/articles/azure-arc/data/active-directory-prerequisites.md
+++ b/articles/azure-arc/data/active-directory-prerequisites.md
@@ -15,6 +15,8 @@ ms.topic: how-to
This document explains how to prepare to deploy Azure Arc-enabled data services with Active Directory (AD) authentication. Specifically the article describes Active Directory objects you need to configure before the deployment of Kubernetes resources.
+[!INCLUDE [azure-arc-data-preview](../../../includes/azure-arc-data-preview.md)]
+
[The introduction](active-directory-introduction.md#compare-ad-integration-modes) describes two different integration modes:
- *System-managed keytab* mode allows the system to create and manage the AD accounts for each SQL Managed Instance.
- *Customer-managed keytab* mode allows you to create and manage the AD accounts for each SQL Managed Instance.
diff --git a/articles/azure-arc/data/configure-managed-instance.md b/articles/azure-arc/data/configure-managed-instance.md
index e60fcc4ca9cdf..fd08daf42e3ea 100644
--- a/articles/azure-arc/data/configure-managed-instance.md
+++ b/articles/azure-arc/data/configure-managed-instance.md
@@ -7,7 +7,7 @@ ms.subservice: azure-arc-data
author: dnethi
ms.author: dinethi
ms.reviewer: mikeray
-ms.date: 02/22/2022
+ms.date: 05/27/2022
ms.topic: how-to
---
@@ -45,6 +45,39 @@ To view the changes made to the Azure Arc-enabled SQL managed instance, you can
az sql mi-arc show -n --k8s-namespace --use-k8s
```
+## Configure readable secondaries
+
+When you deploy Azure Arc enabled SQL managed instance in `BusinessCritical` service tier with 2 or more replicas, by default, one secondary replica is automatically configured as `readableSecondary`. This setting can be changed, either to add or to remove the readable secondaries as follows:
+
+```azurecli
+az sql mi-arc update --name --readable-secondaries --k8s-namespace --use-k8s
+```
+
+For example, the following example will reset the readable secondaries to 0.
+
+```azurecli
+az sql mi-arc update --name sqlmi1 --readable-secondaries 0 --k8s-namespace mynamespace --use-k8s
+```
+## Configure replicas
+
+You can also scale up or down the number of replicas deployed in the `BusinessCritical` service tier as follows:
+
+```azurecli
+az sql mi-arc update --name --replicas --k8s-namespace --use-k8s
+```
+
+For example:
+
+The following example will scale down the number of replicas from 3 to 2.
+
+```azurecli
+az sql mi-arc update --name sqlmi1 --replicas 2 --k8s-namespace mynamespace --use-k8s
+```
+
+> [Note]
+> If you scale down from 2 replicas to 1 replica, you may run into a conflict with the pre-configured `--readable--secondaries` setting. You can first edit the `--readable--secondaries` before scaling down the replicas.
+
+
## Configure Server options
You can configure server configuration settings for Azure Arc-enabled SQL managed instance after creation time. This article describes how to configure settings like enabling or disabling mssql Agent, enable specific trace flags for troubleshooting scenarios.
diff --git a/articles/azure-arc/data/configure-transparent-data-encryption-manually.md b/articles/azure-arc/data/configure-transparent-data-encryption-manually.md
index 3539257ce8daf..045e0516e3cba 100644
--- a/articles/azure-arc/data/configure-transparent-data-encryption-manually.md
+++ b/articles/azure-arc/data/configure-transparent-data-encryption-manually.md
@@ -14,27 +14,27 @@ ms.custom: template-how-to, event-tier1-build-2022
# Enable transparent data encryption on Azure Arc-enabled SQL Managed Instance
-This article describes how to enable transparent data encryption on a database created in an Azure Arc-enabled SQL Managed Instance.
+This article describes how to enable transparent data encryption on a database created in an Azure Arc-enabled SQL Managed Instance. In this article, the term *managed instance* refers to a deployment of Azure Arc-enabled SQL Managed Instance.
## Prerequisites
-Before you proceed with this article, you must have an Azure Arc-enabled SQL Managed Instance resource created and have connected to it.
+Before you proceed with this article, you must have an Azure Arc-enabled SQL Managed Instance resource created and connect to it.
- [An Azure Arc-enabled SQL Managed Instance created](./create-sql-managed-instance.md)
- [Connect to Azure Arc-enabled SQL Managed Instance](./connect-managed-instance.md)
-## Turn on transparent data encryption on a database in Azure Arc-enabled SQL Managed Instance
+## Turn on transparent data encryption on a database in the managed instance
-Turning on transparent data encryption in Azure Arc-enabled SQL Managed Instance follows the same steps as SQL Server on-premises. Follow the steps described in [SQL Server's transparent data encryption guide](/sql/relational-databases/security/encryption/transparent-data-encryption#enable-tde).
+Turning on transparent data encryption in the managed instance follows the same steps as SQL Server on-premises. Follow the steps described in [SQL Server's transparent data encryption guide](/sql/relational-databases/security/encryption/transparent-data-encryption#enable-tde).
-After creating the necessary credentials, it's highly recommended to back up any newly created credentials.
+After you create the necessary credentials, back up any newly created credentials.
-## Back up a transparent data encryption credential from Azure Arc-enabled SQL Managed Instance
+## Back up a transparent data encryption credential
-When backing up from Azure Arc-enabled SQL Managed Instance, the credentials will be stored within the container. It isn't necessary to store the credentials on a persistent volume, but you may use the mount path for the data volume within the container if you'd like: `/var/opt/mssql/data`. Otherwise, the credentials will be stored in-memory in the container. Below is an example of backing up a certificate from Azure Arc-enabled SQL Managed Instance.
+When you back up credentials from the managed instance, the credentials are stored within the container. To store credentials on a persistent volume, specify the mount path in the container. For example, `var/opt/mssql/data`. The following example backs up a certificate from the managed instance:
> [!NOTE]
-> If the `kubectl cp` command is run from Windows, the command may fail when using absolute Windows paths. `kubectl` can mistake the drive in the path as a pod name. For example, `kubectl` might mistake `C` to be a pod name in `C:\folder`. Users can avoid this issue by using relative paths or removing the `C:` from the provided path while in the `C:` drive. This issue also applies to environment variables on Windows like `$HOME`.
+> If the `kubectl cp` command is run from Windows, the command may fail when using absolute Windows paths. Use relative paths or the commands specified below.
1. Back up the certificate from the container to `/var/opt/mssql/data`.
@@ -60,6 +60,19 @@ When backing up from Azure Arc-enabled SQL Managed Instance, the credentials wil
2. Copy the certificate from the container to your file system.
+### [Windows](#tab/windows)
+
+ ```console
+ kubectl exec -n -c arc-sqlmi -- cat >
+ ```
+
+ Example:
+
+ ```console
+ kubectl exec -n arc-ns -c arc-sqlmi sql-0 -- cat /var/opt/mssql/data/servercert.crt > $HOME\sqlcerts\servercert.crt
+ ```
+
+### [Linux](#tab/linux)
```console
kubectl cp --namespace --container arc-sqlmi :
```
@@ -67,11 +80,25 @@ When backing up from Azure Arc-enabled SQL Managed Instance, the credentials wil
Example:
```console
- kubectl cp --namespace arc-ns --container arc-sqlmi sql-0:/var/opt/mssql/data/servercert.crt ./sqlcerts/servercert.crt
+ kubectl cp --namespace arc-ns --container arc-sqlmi sql-0:/var/opt/mssql/data/servercert.crt $HOME/sqlcerts/servercert.crt
```
+---
+
3. Copy the private key from the container to your file system.
+### [Windows](#tab/windows)
+ ```console
+ kubectl exec -n -c arc-sqlmi -- cat >
+ ```
+
+ Example:
+
+ ```console
+ kubectl exec -n arc-ns -c arc-sqlmi sql-0 -- cat /var/opt/mssql/data/servercert.key > $HOME\sqlcerts\servercert.key
+ ```
+
+### [Linux](#tab/linux)
```console
kubectl cp --namespace --container arc-sqlmi :
```
@@ -79,9 +106,11 @@ When backing up from Azure Arc-enabled SQL Managed Instance, the credentials wil
Example:
```console
- kubectl cp --namespace arc-ns --container arc-sqlmi sql-0:/var/opt/mssql/data/servercert.key ./sqlcerts/servercert.key
+ kubectl cp --namespace arc-ns --container arc-sqlmi sql-0:/var/opt/mssql/data/servercert.key $HOME/sqlcerts/servercert.key
```
+---
+
4. Delete the certificate and private key from the container.
```console
@@ -94,15 +123,26 @@ When backing up from Azure Arc-enabled SQL Managed Instance, the credentials wil
kubectl exec -it --namespace arc-ns --container arc-sqlmi sql-0 -- bash -c "rm /var/opt/mssql/data/servercert.crt /var/opt/mssql/data/servercert.key"
```
-## Restore a transparent data encryption credential to Azure Arc-enabled SQL Managed Instance
+## Restore a transparent data encryption credential to a managed instance
-Similar to above, restore the credentials by copying them into the container and running the corresponding T-SQL afterwards.
+Similar to above, to restore the credentials, copy them into the container and run the corresponding T-SQL afterwards.
> [!NOTE]
-> If the `kubectl cp` command is run from Windows, the command may fail when using absolute Windows paths. `kubectl` can mistake the drive in the path as a pod name. For example, `kubectl` might mistake `C` to be a pod name in `C:\folder`. Users can avoid this issue by using relative paths or removing the `C:` from the provided path while in the `C:` drive. This issue also applies to environment variables on Windows like `$HOME`.
+> If the `kubectl cp` command is run from Windows, the command may fail when using absolute Windows paths. Use relative paths or the commands specified below.
1. Copy the certificate from your file system to the container.
+### [Windows](#tab/windows)
+ ```console
+ type | kubectl exec -i -n -c arc-sqlmi -- tee
+ ```
+
+ Example:
+ ```console
+ type $HOME\sqlcerts\servercert.crt | kubectl exec -i -n arc-ns -c arc-sqlmi sql-0 -- tee /var/opt/mssql/data/servercert.crt
+ ```
+
+### [Linux](#tab/linux)
```console
kubectl cp --namespace --container arc-sqlmi :
```
@@ -110,11 +150,24 @@ Similar to above, restore the credentials by copying them into the container and
Example:
```console
- kubectl cp --namespace arc-ns --container arc-sqlmi ./sqlcerts/servercert.crt sql-0:/var/opt/mssql/data/servercert.crt
+ kubectl cp --namespace arc-ns --container arc-sqlmi $HOME/sqlcerts/servercert.crt sql-0:/var/opt/mssql/data/servercert.crt
```
+---
+
2. Copy the private key from your file system to the container.
+### [Windows](#tab/windows)
+ ```console
+ type | kubectl exec -i -n -c arc-sqlmi -- tee
+ ```
+
+ Example:
+ ```console
+ type $HOME\sqlcerts\servercert.key | kubectl exec -i -n arc-ns -c arc-sqlmi sql-0 -- tee /var/opt/mssql/data/servercert.key
+ ```
+
+### [Linux](#tab/linux)
```console
kubectl cp --namespace --container arc-sqlmi :
```
@@ -122,9 +175,11 @@ Similar to above, restore the credentials by copying them into the container and
Example:
```console
- kubectl cp --namespace arc-ns --container arc-sqlmi ./sqlcerts/servercert.key sql-0:/var/opt/mssql/data/servercert.key
+ kubectl cp --namespace arc-ns --container arc-sqlmi $HOME/sqlcerts/servercert.key sql-0:/var/opt/mssql/data/servercert.key
```
+---
+
3. Create the certificate using file paths from `/var/opt/mssql/data`.
```sql
diff --git a/articles/azure-arc/data/connect-active-directory-sql-managed-instance.md b/articles/azure-arc/data/connect-active-directory-sql-managed-instance.md
index e9d9c4902c050..cb952f4ce7972 100644
--- a/articles/azure-arc/data/connect-active-directory-sql-managed-instance.md
+++ b/articles/azure-arc/data/connect-active-directory-sql-managed-instance.md
@@ -15,6 +15,8 @@ ms.topic: how-to
This article describes how to connect to SQL Managed Instance endpoint using Active Directory (AD) authentication. Before you proceed, make sure you have an AD-integrated Azure Arc-enabled SQL Managed Instance deployed already.
+[!INCLUDE [azure-arc-data-preview](../../../includes/azure-arc-data-preview.md)]
+
See [Tutorial – Deploy AD-integrated SQL Managed Instance](deploy-active-directory-sql-managed-instance.md) to deploy Azure Arc-enabled SQL Managed Instance with Active Directory authentication enabled.
> [!NOTE]
diff --git a/articles/azure-arc/data/create-complete-managed-instance-indirectly-connected.md b/articles/azure-arc/data/create-complete-managed-instance-indirectly-connected.md
index 4fdb6b2ab4215..330e45f27ac35 100644
--- a/articles/azure-arc/data/create-complete-managed-instance-indirectly-connected.md
+++ b/articles/azure-arc/data/create-complete-managed-instance-indirectly-connected.md
@@ -160,7 +160,7 @@ NAME STATE
Ready
```
-## Create Azure Arc-enabled SQL Managed Instance
+## Create an instance of Azure Arc-enabled SQL Managed Instance
Now, we can create the Azure MI for indirectly connected mode with the following command:
@@ -188,4 +188,4 @@ To connect with Azure Data Studio, see [Connect to Azure Arc-enabled SQL Managed
## Next steps
-[Upload usage data, metrics, and logs to Azure](upload-metrics-and-logs-to-azure-monitor.md).
\ No newline at end of file
+[Upload usage data, metrics, and logs to Azure](upload-metrics-and-logs-to-azure-monitor.md).
diff --git a/articles/azure-arc/data/create-data-controller-direct-cli.md b/articles/azure-arc/data/create-data-controller-direct-cli.md
index 81599d2c97bef..014983d40ec6a 100644
--- a/articles/azure-arc/data/create-data-controller-direct-cli.md
+++ b/articles/azure-arc/data/create-data-controller-direct-cli.md
@@ -8,7 +8,7 @@ ms.reviewer: mikeray
services: azure-arc
ms.service: azure-arc
ms.subservice: azure-arc-data
-ms.date: 03/24/2022
+ms.date: 05/27/2022
ms.topic: overview
---
@@ -225,18 +225,18 @@ Optionally, you can specify certificates for logs and metrics UI dashboards. See
After the extension and custom location are created, proceed to deploy the Azure Arc data controller as follows.
```azurecli
-az arcdata dc create --name --resource-group --location --connectivity-mode direct --profile-name --auto-upload-logs true --auto-upload-metrics true --custom-location --storage-class
+az arcdata dc create --name --resource-group --location --connectivity-mode direct --profile-name --auto-upload-metrics true --custom-location --storage-class
# Example
-az arcdata dc create --name arc-dc1 --resource-group my-resource-group --location eastasia --connectivity-mode direct --profile-name azure-arc-aks-premium-storage --auto-upload-logs true --auto-upload-metrics true --custom-location mycustomlocation --storage-class mystorageclass
+az arcdata dc create --name arc-dc1 --resource-group my-resource-group --location eastasia --connectivity-mode direct --profile-name azure-arc-aks-premium-storage --auto-upload-metrics true --custom-location mycustomlocation --storage-class mystorageclass
```
If you want to create the Azure Arc data controller using a custom configuration template, follow the steps described in [Create custom configuration profile](create-custom-configuration-template.md) and provide the path to the file as follows:
```azurecli
-az arcdata dc create --name --resource-group --location --connectivity-mode direct --path ./azure-arc-custom --auto-upload-logs true --auto-upload-metrics true --custom-location
+az arcdata dc create --name --resource-group --location --connectivity-mode direct --path ./azure-arc-custom --auto-upload-metrics true --custom-location
# Example
-az arcdata dc create --name arc-dc1 --resource-group my-resource-group --location eastasia --connectivity-mode direct --path ./azure-arc-custom --auto-upload-logs true --auto-upload-metrics true --custom-location mycustomlocation
+az arcdata dc create --name arc-dc1 --resource-group my-resource-group --location eastasia --connectivity-mode direct --path ./azure-arc-custom --auto-upload-metrics true --custom-location mycustomlocation
```
## Monitor the status of Azure Arc data controller deployment
diff --git a/articles/azure-arc/data/delete-managed-instance.md b/articles/azure-arc/data/delete-managed-instance.md
index b41939581cb0e..57f30c8c3cde3 100644
--- a/articles/azure-arc/data/delete-managed-instance.md
+++ b/articles/azure-arc/data/delete-managed-instance.md
@@ -1,6 +1,7 @@
---
-title: Delete Azure Arc-enabled SQL Managed Instance
-description: Delete Azure Arc-enabled SQL Managed Instance
+title: Delete an Azure Arc-enabled SQL Managed Instance
+description: Learn how to delete an Azure Arc-enabled SQL Managed Instance and optionally, reclaim associated Kubernetes persistent volume claims (PVCs).
+ms.custom: kr2b-contr-experiment
services: azure-arc
ms.service: azure-arc
ms.subservice: azure-arc-data
@@ -11,107 +12,101 @@ ms.date: 07/30/2021
ms.topic: how-to
---
-# Delete Azure Arc-enabled SQL Managed Instance
-This article describes how you can delete an Azure Arc-enabled SQL Managed Instance.
+# Delete an Azure Arc-enabled SQL Managed Instance
+In this how-to guide, you'll find and then delete an Azure Arc-enabled SQL Managed Instance. Optionally, after deleting managed instances, you can reclaim associated Kubernetes persistent volume claims (PVCs).
-## View Existing Azure Arc-enabled SQL Managed Instances
-To view SQL Managed Instances, run the following command:
+1. Find existing Azure Arc-enabled SQL Managed Instances:
-```azurecli
-az sql mi-arc list --k8s-namespace --use-k8s
-```
+ ```azurecli
+ az sql mi-arc list --k8s-namespace --use-k8s
+ ```
-Output should look something like this:
+ Example output:
-```console
-Name Replicas ServerEndpoint State
------- ---------- ---------------- -------
-demo-mi 1/1 10.240.0.4:32023 Ready
-```
+ ```console
+ Name Replicas ServerEndpoint State
+ ------ ---------- ---------------- -------
+ demo-mi 1/1 10.240.0.4:32023 Ready
+ ```
-## Delete Azure Arc-enabled SQL Managed Instance
+1. Delete the SQL Managed Instance, run one of the commands appropriate for your deployment type:
-To delete a SQL Managed Instance, run the appropriate command for your deployment type. For example:
+ 1. **Indirectly connected mode**:
-### [Indirectly connected mode](#tab/indirectly)
+ ```azurecli
+ az sql mi-arc delete --name --k8s-namespace --use-k8s
+ ```
-```azurecli
-az sql mi-arc delete -n --k8s-namespace --use-k8s
-```
+ Example output:
-Output should look something like this:
+ ```azurecli
+ # az sql mi-arc delete --name demo-mi --k8s-namespace --use-k8s
+ Deleted demo-mi from namespace arc
+ ```
-```azurecli
-# az sql mi-arc delete -n demo-mi --k8s-namespace --use-k8s
-Deleted demo-mi from namespace arc
-```
+ 1. **Directly connected mode**:
-### [Directly connected mode](#tab/directly)
+ ```azurecli
+ az sql mi-arc delete --name --resource-group
+ ```
-```azurecli
-az sql mi-arc delete -n -g
-```
+ Example output:
-Output should look something like this:
+ ```azurecli
+ # az sql mi-arc delete --name demo-mi --resource-group my-rg
+ Deleted demo-mi from namespace arc
+ ```
-```azurecli
-# az sql mi-arc delete -n demo-mi -g my-rg
-Deleted demo-mi from namespace arc
-```
+## Optional - Reclaim Kubernetes PVCs
----
+A Persistent Volume Claim (PVC) is a request for storage by a user from a Kubernetes cluster while creating and adding storage to a SQL Managed Instance. Deleting PVCs is recommended but it isn't mandatory. However, if you don't reclaim these PVCs, you'll eventually end up with errors in your Kubernetes cluster. For example, you might be unable to create, read, update, or delete resources from the Kubernetes API. You might not be able to run commands like `az arcdata dc export` because the controller pods were evicted from the Kubernetes nodes due to storage issues (normal Kubernetes behavior). You can see messages in the logs similar to:
-## Reclaim the Kubernetes Persistent Volume Claims (PVCs)
+- Annotations: microsoft.com/ignore-pod-health: true
+- Status: Failed
+- Reason: Evicted
+- Message: The node was low on resource: ephemeral-storage. Container controller was using 16372Ki, which exceeds its request of 0.
-A PersistentVolumeClaim (PVC) is a request for storage by a user from Kubernetes cluster while creating and adding storage to a SQL Managed Instance. Deleting a SQL Managed Instance does not remove its associated [PVCs](https://kubernetes.io/docs/concepts/storage/persistent-volumes/). This is by design. The intention is to help the user to access the database files in case the deletion of instance was accidental. Deleting PVCs is not mandatory. However it is recommended. If you don't reclaim these PVCs, you'll eventually end up with errors as your Kubernetes cluster will run out of disk space or usage of the same SQL Managed Instance name while creating new instance might cause inconsistencies. To reclaim the PVCs, take the following steps:
+By design, deleting a SQL Managed Instance doesn't remove its associated [PVCs](https://kubernetes.io/docs/concepts/storage/persistent-volumes/). The intention is to ensure that you can access the database files in case the deletion was accidental.
-### 1. List the PVCs for the server group you deleted
+1. To reclaim the PVCs, take the following steps:
+ 1. Find the PVCs for the server group you deleted.
-To list the PVCs, run the following command:
-```console
-kubectl get pvc
-```
+ ```console
+ kubectl get pvc
+ ```
-In the example below, notice the PVCs for the SQL Managed Instances you deleted.
+ In the example below, notice the PVCs for the SQL Managed Instances you deleted.
-```console
-# kubectl get pvc -n arc
+ ```console
+ # kubectl get pvc -n arc
-NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
-data-demo-mi-0 Bound pvc-1030df34-4b0d-4148-8986-4e4c20660cc4 5Gi RWO managed-premium 13h
-logs-demo-mi-0 Bound pvc-11836e5e-63e5-4620-a6ba-d74f7a916db4 5Gi RWO managed-premium 13h
-```
+ NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
+ data-demo-mi-0 Bound pvc-1030df34-4b0d-4148-8986-4e4c20660cc4 5Gi RWO managed-premium 13h
+ logs-demo-mi-0 Bound pvc-11836e5e-63e5-4620-a6ba-d74f7a916db4 5Gi RWO managed-premium 13h
+ ```
-### 2. Delete each of the PVCs
-Delete the data and log PVCs for each of the SQL Managed Instances you deleted.
-The general format of this command is:
-```console
-kubectl delete pvc
-```
+ 1. Delete the data and log PVCs for each of the SQL Managed Instances you deleted.
+ The general format of this command is:
-For example:
-```console
-kubectl delete pvc data-demo-mi-0 -n arc
-kubectl delete pvc logs-demo-mi-0 -n arc
-```
+ ```console
+ kubectl delete pvc
+ ```
-Each of these kubectl commands will confirm the successful deleting of the PVC. For example:
-```console
-persistentvolumeclaim "data-demo-mi-0" deleted
-persistentvolumeclaim "logs-demo-mi-0" deleted
-```
-
+ For example:
-> [!NOTE]
-> As indicated, not deleting the PVCs might eventually get your Kubernetes cluster in a situation where it will throw errors. Some of these errors may include being unable to create, read, update, delete resources from the Kubernetes API, or being able to run commands like `az arcdata dc export` as the controller pods may be evicted from the Kubernetes nodes because of this storage issue (normal Kubernetes behavior).
->
-> For example, you may see messages in the logs similar to:
-> - Annotations: microsoft.com/ignore-pod-health: true
-> - Status: Failed
-> - Reason: Evicted
-> - Message: The node was low on resource: ephemeral-storage. Container controller was using 16372Ki, which exceeds its request of 0.
+ ```console
+ kubectl delete pvc data-demo-mi-0 -n arc
+ kubectl delete pvc logs-demo-mi-0 -n arc
+ ```
+ Each of these kubectl commands will confirm the successful deleting of the PVC. For example:
+
+ ```console
+ persistentvolumeclaim "data-demo-mi-0" deleted
+ persistentvolumeclaim "logs-demo-mi-0" deleted
+ ```
+
## Next steps
Learn more about [Features and Capabilities of Azure Arc-enabled SQL Managed Instance](managed-instance-features.md)
diff --git a/articles/azure-arc/data/deploy-active-directory-connector-cli.md b/articles/azure-arc/data/deploy-active-directory-connector-cli.md
index 19e31a3fbde3a..535b8389e4374 100644
--- a/articles/azure-arc/data/deploy-active-directory-connector-cli.md
+++ b/articles/azure-arc/data/deploy-active-directory-connector-cli.md
@@ -16,6 +16,8 @@ ms.topic: how-to
This article explains how to deploy an Active Directory (AD) connector using Azure CLI. The AD connector is a key component to enable Active Directory authentication on Azure Arc-enabled SQL Managed Instance.
+[!INCLUDE [azure-arc-data-preview](../../../includes/azure-arc-data-preview.md)]
+
## Prerequisites
### Install tools
diff --git a/articles/azure-arc/data/deploy-active-directory-connector-portal.md b/articles/azure-arc/data/deploy-active-directory-connector-portal.md
new file mode 100644
index 0000000000000..15f734ab3f455
--- /dev/null
+++ b/articles/azure-arc/data/deploy-active-directory-connector-portal.md
@@ -0,0 +1,116 @@
+---
+title: Tutorial – Deploy Active Directory connector using Azure portal
+description: Tutorial to deploy an Active Directory connector using Azure portal
+services: azure-arc
+ms.service: azure-arc
+ms.subservice: azure-arc-data
+author: MikeRayMSFT
+ms.author: mikeray
+ms.reviewer: dinethi
+ms.date: 05/24/2022
+ms.topic: how-to
+---
+
+# Tutorial – Deploy Active Directory connector using Azure portal
+
+Active Directory (AD) connector is a key component to enable Active Directory authentication on Azure Arc-enabled SQL Managed Instances.
+
+[!INCLUDE [azure-arc-data-preview](../../../includes/azure-arc-data-preview.md)]
+
+This article explains how to deploy, manage, and delete an Active Directory (AD) connector in directly connected mode from the Azure portal.
+
+## Prerequisites
+
+For details about how to set up OU and AD account, go to [Deploy Azure Arc-enabled data services in Active Directory authentication - prerequisites](active-directory-prerequisites.md).
+
+Make sure you have the following deployed before proceed with the steps in this article:
+
+- An Arc-enabled Azure Kubernetes cluster.
+- A data controller in directly connected mode.
+
+## Create a new AD connector
+
+1. Log in to [Azure portal](https://portal.azure.com).
+1. In the search resources field at the top of the portal, type **data controllers**, and select **Azure Arc data controllers**.
+
+Azure takes you to where you can find all available data controllers deployed in your selected Azure subscription.
+
+1. Select the data controller where you wish to add an AD connector.
+1. Under **Settings** select **Active Directory**. The portal shows the Active Directory connectors for this data controller.
+1. Select **+ Add Connector**, the portal presents an **Add Connector** interface.
+1. Under **Active Directory connector**
+ 1. Specify your **Connector name**.
+ 2. Choose the account provisioning type - either **Automatic** or **Manual**.
+
+The account provisioning type determines whether you deploy a customer-managed keytab AD connector or a system-managed keytab AD connector.
+
+### Create a new customer-managed keytab AD connector
+
+1. Click **Add Connector**.
+
+1. Choose the account provisioning type **Manual**.
+
+1. Set the editable fields for your connector:
+ - **Realm**: The name of the Active Directory (AD) domain in uppercase. For example *CONTOSO.COM*.
+ - **Nameserver IP address**: A comma-separated list of Active Directory DNS server IP addresses. For example: *10.10.10.11, 10.10.10.12*.
+ - **Netbios domain name**: Optional. The NETBIOS name of the Active Directory domain. For example *CONTOSO*. Defaults to the first label of realm.
+ - **DNS domain name**: Optional. The DNS domain name associated with the Active Directory domain. For example, *contoso.com*.
+ - **DNS replicas**: Optional. The number of replicas to deploy for the DNS proxy service. Defaults to `1`.
+ - **Prefer Kubernetes DNS for PTR lookups**: Optional. Check to set Kubernetes DNS for IP address lookup. Clear to use Active Directory DNS.
+
+ ![Screenshot of the portal interface to add customer managed keytab.](media/active-directory-deployment/add-ad-customer-managed-keytab-connector-portal.png)
+
+1. Click **Add Connector** to create a new customer-managed keytab AD connector.
+
+### Create a new system-managed keytab AD connector
+1. Click **Add Connector**.
+1. Choose the account provisioning type **Automatic**.
+1. Set the editable fields for your connector:
+ - **Realm**: The name of the Active Directory (AD) domain in uppercase. For example *CONTOSO.COM*.
+ - **Nameserver IP address**: A comma-separated list of Active Directory DNS server IP addresses. For example: *10.10.10.11, 10.10.10.12*.
+ - **OU distinguished name** The distinguished name of the Organizational Unit (OU) pre-created in the Active Directory (AD) domain. For example, `OU=arcou,DC=contoso,DC=com`.
+ - **Domain Service Account username** The username of the Domain Service Account in Active Directory.
+ - **Domain Service Account password** The password of the Domain Service Account in Active Directory.
+ - **Primary domain controller hostname (Optional)** The hostname of the primary Active Directory domain controller. For example, `azdc01.contoso.com`.
+ - **Secondary domain controller hostname (Optional)** The secondary domain controller hostname.
+ - **Netbios domain name**: Optional. The NETBIOS name of the Active Directory domain. For example *CONTOSO*. Defaults to the first label of realm.
+ - **DNS domain name**: Optional. The DNS domain name associated with the Active Directory domain. For example, *contoso.com*.
+ - **DNS replicas (Optional)** The number of replicas to deploy for the DNS proxy service. Defaults to `1`.
+ - **Prefer Kubernetes DNS for PTR lookups**: Optional. Check to set Kubernetes DNS for IP address lookup. Clear to use Active Directory DNS.
+
+ ![Screenshot of the portal interface to add system managed keytab.](media/active-directory-deployment/add-ad-system-managed-keytab-connector-portal.png)
+
+1. Click **Add Connector** to create a new system-managed keytab AD connector.
+
+## Edit an existing AD connector
+
+1. Select the AD connect that you want to edit. Select the ellipses (**...**), and then **Edit**. The portal presents an **Edit Connector** interface.
+
+1. You may update any editable fields. For example:
+ - **Primary domain controller hostname** The hostname of the primary Active Directory domain controller. For example, `azdc01.contoso.com`.
+ - **Secondary domain controller hostname** The secondary domain controller hostname.
+ - **Nameserver IP address**: A comma-separated list of Active Directory DNS server IP addresses. For example: *10.10.10.11, 10.10.10.12*.
+ - **DNS replicas** The number of replicas to deploy for the DNS proxy service. Defaults to `1`.
+ - **Prefer Kubernetes DNS for PTR lookups**: Check to set Kubernetes DNS for IP address lookup. Clear to use Active Directory DNS.
+
+1. Click on **Apply** for changes to take effect.
+
+
+## Delete an AD connector
+
+1. Select the ellipses (**...**) on the right of the Active Directory connector you would like to delete.
+1. Select **Delete**.
+
+To delete multiple AD connectors at one time:
+
+1. Select the checkbox in the beginning row of each AD connector you want to delete.
+
+ Alternatively, select the checkbox in the top row to select all the AD connectors in the table.
+
+1. Click **Delete** in the management bar to delete the AD connectors that you selected.
+
+## Next steps
+* [Tutorial – Deploy Active Directory connector using Azure CLI](deploy-active-directory-connector-cli.md)
+* [Tutorial – Deploy AD connector in customer-managed keytab mode](deploy-customer-managed-keytab-active-directory-connector.md)
+* [Tutorial – Deploy Active Directory connector in system-managed keytab mode](deploy-system-managed-keytab-active-directory-connector.md)
+* [Deploy Arc-enabled SQL Managed Instance with Active Directory Authentication](deploy-active-directory-sql-managed-instance.md).
diff --git a/articles/azure-arc/data/deploy-active-directory-sql-managed-instance-cli.md b/articles/azure-arc/data/deploy-active-directory-sql-managed-instance-cli.md
index 7bd2bef7df040..e6e78d2b6fca4 100644
--- a/articles/azure-arc/data/deploy-active-directory-sql-managed-instance-cli.md
+++ b/articles/azure-arc/data/deploy-active-directory-sql-managed-instance-cli.md
@@ -15,6 +15,8 @@ ms.topic: how-to
This article explains how to deploy Azure Arc-enabled SQL Managed Instance with Active Directory (AD) authentication using Azure CLI.
+[!INCLUDE [azure-arc-data-preview](../../../includes/azure-arc-data-preview.md)]
+
See these articles for specific instructions:
- [Tutorial – Deploy AD connector in customer-managed keytab mode](deploy-customer-managed-keytab-active-directory-connector.md)
diff --git a/articles/azure-arc/data/deploy-active-directory-sql-managed-instance.md b/articles/azure-arc/data/deploy-active-directory-sql-managed-instance.md
index 84191fd1e79c8..3b749ec7cf09c 100644
--- a/articles/azure-arc/data/deploy-active-directory-sql-managed-instance.md
+++ b/articles/azure-arc/data/deploy-active-directory-sql-managed-instance.md
@@ -15,6 +15,8 @@ ms.topic: how-to
This article explains how to deploy Azure Arc-enabled SQL Managed Instance with Active Directory (AD) authentication.
+[!INCLUDE [azure-arc-data-preview](../../../includes/azure-arc-data-preview.md)]
+
Before you proceed, complete the steps explained in [Customer-managed keytab Active Directory (AD) connector](deploy-customer-managed-keytab-active-directory-connector.md) or [Deploy a system-managed keytab AD connector](deploy-system-managed-keytab-active-directory-connector.md)
## Prerequisites
diff --git a/articles/azure-arc/data/deploy-customer-managed-keytab-active-directory-connector.md b/articles/azure-arc/data/deploy-customer-managed-keytab-active-directory-connector.md
index ad7eb142aa670..a31373f2d685e 100644
--- a/articles/azure-arc/data/deploy-customer-managed-keytab-active-directory-connector.md
+++ b/articles/azure-arc/data/deploy-customer-managed-keytab-active-directory-connector.md
@@ -15,6 +15,8 @@ ms.topic: how-to
This article explains how to deploy Active Directory (AD) connector in customer-managed keytab mode. The connector is a key component to enable Active Directory authentication on Azure Arc-enabled SQL Managed Instance.
+[!INCLUDE [azure-arc-data-preview](../../../includes/azure-arc-data-preview.md)]
+
## Active Directory connector in customer-managed keytab mode
In customer-managed keytab mode, an Active Directory connector deploys a DNS proxy service that proxies the DNS requests coming from the managed instance to either of the two upstream DNS services:
diff --git a/articles/azure-arc/data/deploy-system-managed-keytab-active-directory-connector.md b/articles/azure-arc/data/deploy-system-managed-keytab-active-directory-connector.md
index 1af4002378708..9c10c76346307 100644
--- a/articles/azure-arc/data/deploy-system-managed-keytab-active-directory-connector.md
+++ b/articles/azure-arc/data/deploy-system-managed-keytab-active-directory-connector.md
@@ -16,6 +16,8 @@ ms.topic: how-to
This article explains how to deploy Active Directory connector in system-managed keytab mode. It is a key component to enable Active Directory authentication on Azure Arc-enabled SQL Managed Instance.
+[!INCLUDE [azure-arc-data-preview](../../../includes/azure-arc-data-preview.md)]
+
## Active Directory connector in system-managed keytab mode
In System-Managed Keytab mode, an Active Directory connector deploys a DNS proxy service that proxies the DNS requests coming from the managed instance to either of the two upstream DNS services:
diff --git a/articles/azure-arc/data/managed-instance-high-availability.md b/articles/azure-arc/data/managed-instance-high-availability.md
index eb6a58ee76cfa..d1822de394063 100644
--- a/articles/azure-arc/data/managed-instance-high-availability.md
+++ b/articles/azure-arc/data/managed-instance-high-availability.md
@@ -114,7 +114,7 @@ az sql mi-arc create -n --k8s-namespace --use-k8s --t
Example:
```azurecli
-az sql mi-arc create -n sqldemo --k8s-namespace my-namespace --use-k8s --tier bc --replicas 3
+az sql mi-arc create -n sqldemo --k8s-namespace my-namespace --use-k8s --tier BusinessCritical --replicas 3
```
Directly connected mode:
@@ -124,7 +124,7 @@ az sql mi-arc create --name --resource-group --location FROM URL = 'https://.blob.core.windows.net//.bak'
WITH MOVE 'Test' to '/var/opt/mssql/data/.mdf'
,MOVE 'Test_log' to '/var/opt/mssql/data/.ldf'
- ,RECOVERY
- ,REPLACE
- ,STATS = 5;
+ ,RECOVERY;
GO
```
@@ -171,9 +169,7 @@ Prepare and run the RESTORE command to restore the backup file to the Azure SQL
RESTORE DATABASE test FROM DISK = '/var/opt/mssql/data/.bak'
WITH MOVE '' to '/var/opt/mssql/data/.mdf'
,MOVE '' to '/var/opt/mssql/data/_log.ldf'
-,RECOVERY
-,REPLACE
-,STATS = 5;
+,RECOVERY;
GO
```
@@ -183,9 +179,7 @@ Example:
RESTORE DATABASE test FROM DISK = '/var/opt/mssql/data/test.bak'
WITH MOVE 'test' to '/var/opt/mssql/data/test.mdf'
,MOVE 'test' to '/var/opt/mssql/data/test_log.ldf'
-,RECOVERY
-,REPLACE
-,STATS = 5;
+,RECOVERY;
GO
```
diff --git a/articles/azure-arc/data/reference/reference-az-arcdata-dc.md b/articles/azure-arc/data/reference/reference-az-arcdata-dc.md
index 1a235c6a6b67b..27889b3bc04c5 100644
--- a/articles/azure-arc/data/reference/reference-az-arcdata-dc.md
+++ b/articles/azure-arc/data/reference/reference-az-arcdata-dc.md
@@ -144,7 +144,7 @@ Increase logging verbosity. Use `--debug` for full debug logs.
## az arcdata dc export
Export metrics, logs or usage to a file.
```azurecli
-az arcdata dc export
+az arcdata dc export -t logs --path logs.json --k8s-namespace namespace --use-k8s
```
### Global Arguments
#### `--debug`
diff --git a/articles/azure-arc/data/release-notes.md b/articles/azure-arc/data/release-notes.md
index b91c31d54a7ee..ff8c836f6753b 100644
--- a/articles/azure-arc/data/release-notes.md
+++ b/articles/azure-arc/data/release-notes.md
@@ -7,7 +7,7 @@ ms.reviewer: mikeray
services: azure-arc
ms.service: azure-arc
ms.subservice: azure-arc-data
-ms.date: 05/04/2022
+ms.date: 05/24/2022
ms.topic: conceptual
ms.custom: references_regions, devx-track-azurecli, event-tier1-build-2022
#Customer intent: As a data professional, I want to understand why my solutions would benefit from running with Azure Arc-enabled data services so that I can leverage the capability of the feature.
@@ -26,9 +26,27 @@ This release is published May 24, 2022.
For complete release version information, see [Version log](version-log.md).
+### Data controller reminders and warnings
+
+Reminders and warnings are implemented in Azure portal, custom resource status, and through CLI when the billing data related to all resources managed by the data controller has not been uploaded or exported for an extended period.
+
### SQL Managed Instance
-Azure SQL Managed Instance Business Critical tier is generally available.
+General Availability of Business Critical service tier. Azure Arc-enabled SQL Managed Instance instances that have a version greater than or equal to v1.7.0 will be charged through Azure billing meters.
+
+### User experience improvements
+
+#### Azure portal
+
+Added ability to create AD Connectors from Azure portal.
+
+Preview expected costs for Azure Arc-enabled SQL Managed Instance Business Critical tier when you create new instances.
+
+#### Azure Data Studio
+
+Added ability to upgrade Azure Arc-enabled SQL Managed Instances from Azure Data Studio in the indirect and direct connectivity modes.
+
+Preview expected costs for Azure Arc-enabled SQL Managed Instance Business Critical tier when you create new instances.
## May 4, 2022
@@ -63,7 +81,7 @@ Separated the availability group and failover group status into two different se
Updated SQL engine binaries to the latest version.
-Add support for `NodeSelector`, `TopologySpreadConstraints` and `Affinity`. Only available through Kubernetes yaml/json file create/edit currently. No Azure CLI, Azure Portal, or Azure Data Studio user experience yet.
+Add support for `NodeSelector`, `TopologySpreadConstraints` and `Affinity`. Only available through Kubernetes yaml/json file create/edit currently. No Azure CLI, Azure portal, or Azure Data Studio user experience yet.
Add support for specifying labels and annotations on the secondary service endpoint. `REQUIRED_SECONDARIES_TO_COMMIT` is now a function of the number of replicas.
@@ -74,7 +92,7 @@ In this release, the default value of the readable secondary service is `Cluster
### User experience improvements
-Notifications added in Azure Portal if billing data has not been uploaded to Azure recently.
+Notifications added in Azure portal if billing data has not been uploaded to Azure recently.
#### Azure Data Studio
@@ -171,7 +189,7 @@ For complete release version information, see [Version log](version-log.md).
- Set `--readable-secondaries` to any value between 0 and the number of replicas minus 1.
- `--readable-secondaries` only applies to Business Critical tier.
- Automatic backups are taken on the primary instance in a Business Critical service tier when there are multiple replicas. When a failover happens, backups move to the new primary.
-- [ReadWriteMany (RWX) capable storage class](/azure/aks/concepts-storage#azure-disks) is required for backups, for both General Purpose and Business Critical service tiers. Specifying a non-ReadWriteMany storage class will cause the SQL Managed Instance to be stuck in "Pending" status during deployment.
+- [ReadWriteMany (RWX) capable storage class](../../aks/concepts-storage.md#azure-disks) is required for backups, for both General Purpose and Business Critical service tiers. Specifying a non-ReadWriteMany storage class will cause the SQL Managed Instance to be stuck in "Pending" status during deployment.
- Billing support when using multiple read replicas.
For additional information about service tiers, see [High Availability with Azure Arc-enabled SQL Managed Instance (preview)](managed-instance-high-availability.md).
@@ -838,4 +856,4 @@ For instructions see [What are Azure Arc-enabled data services?](overview.md)
- [Plan an Azure Arc-enabled data services deployment](plan-azure-arc-data-services.md) (requires installing the client tools first)
- [Create an Azure SQL Managed Instance on Azure Arc](create-sql-managed-instance.md) (requires creation of an Azure Arc data controller first)
- [Create an Azure Database for PostgreSQL Hyperscale server group on Azure Arc](create-postgresql-hyperscale-server-group.md) (requires creation of an Azure Arc data controller first)
-- [Resource providers for Azure services](../../azure-resource-manager/management/azure-services-resource-providers.md)
+- [Resource providers for Azure services](../../azure-resource-manager/management/azure-services-resource-providers.md)
\ No newline at end of file
diff --git a/articles/azure-arc/data/toc.yml b/articles/azure-arc/data/toc.yml
index d25142da0697c..62c96062395b0 100644
--- a/articles/azure-arc/data/toc.yml
+++ b/articles/azure-arc/data/toc.yml
@@ -13,14 +13,15 @@ items:
href: privacy-data-collection-and-reporting.md
- name: Quickstarts
items:
- - name: Plan an Azure Arc-enabled data services deployment
- href: plan-azure-arc-data-services.md
- name: Directly connected | Azure portal example
href: create-complete-managed-instance-directly-connected.md
- name: Indirectly connected | Azure CLI example
href: create-complete-managed-instance-indirectly-connected.md
- name: Concepts
+ expanded: true
items:
+ - name: Plan an Azure Arc-enabled data services deployment
+ href: plan-azure-arc-data-services.md
- name: Connectivity modes and requirements
href: connectivity.md
- name: Storage configuration
@@ -73,6 +74,8 @@ items:
href: uninstall-azure-arc-data-controller.md
- name: Manage
items:
+ - name: Upload usage data
+ href: upload-usage-data.md
- name: Monitor with Grafana & Kibana
href: monitor-grafana-kibana.md
- name: Upload to Azure Monitor
@@ -83,8 +86,6 @@ items:
href: upload-logs.md
- name: Upload metrics
href: upload-metrics.md
- - name: Upload usage data
- href: upload-usage-data.md
- name: Inventory database instances
href: view-arc-data-services-inventory-in-azure-portal.md
- name: Update service principal credentials
@@ -247,6 +248,8 @@ items:
href: deploy-customer-managed-keytab-active-directory-connector.md
- name: Deploy AD connector - CLI
href: deploy-active-directory-connector-cli.md
+ - name: Deploy AD connector - portal
+ href: deploy-active-directory-connector-portal.md
- name: Deploy SQL Managed Instance
href: deploy-active-directory-sql-managed-instance.md
- name: Deploy SQL Managed Instance - CLI
diff --git a/articles/azure-arc/data/troubleshoot-guide.md b/articles/azure-arc/data/troubleshoot-guide.md
index 5a3c0d04128d2..1d35158ec2ac5 100644
--- a/articles/azure-arc/data/troubleshoot-guide.md
+++ b/articles/azure-arc/data/troubleshoot-guide.md
@@ -4,10 +4,10 @@ description: Introduction to troubleshooting resources
services: azure-arc
ms.service: azure-arc
ms.subservice: azure-arc-data
-author: twright-msft
-ms.author: twright
+author: dnethi
+ms.author: dinethi
ms.reviewer: mikeray
-ms.date: 07/30/2021
+ms.date: 05/27/2022
ms.topic: how-to
---
@@ -16,6 +16,60 @@ ms.topic: how-to
This article identifies troubleshooting resources for Azure Arc-enabled data services.
+## Logs Upload related errors
+
+If you deployed Azure Arc data controller in the `direct` connectivity mode using `kubectl`, and have not created a secret for the Log Analytics workspace credentials, you may see the following error messages in the Data Controller CR (Custom Resource):
+
+```
+status": {
+ "azure": {
+ "uploadStatus": {
+ "logs": {
+ "lastUploadTime": "YYYY-MM-HHTMM:SS:MS.SSSSSSZ",
+ "message": "spec.settings.azure.autoUploadLogs is true, but failed to get log-workspace-secret secret."
+ },
+
+```
+
+To resolve the above error, create a secret with the Log Analytics Workspace credentials containing the `WorkspaceID` and the `SharedAccessKey` as follows:
+
+```
+apiVersion: v1
+data:
+ primaryKey:
+ workspaceId:
+kind: Secret
+metadata:
+ name: log-workspace-secret
+ namespace:
+type: Opaque
+
+```
+
+## Metrics upload related errors in direct connected mode
+
+If you configured automatic upload of metrics, in the direct connected mode and the permissions needed for the MSI have not been properly granted (as described in [Upload metrics](upload-metrics.md)), you might see an error in your logs as follows:
+
+```output
+'Metric upload response: {"error":{"code":"AuthorizationFailed","message":"Check Access Denied Authorization for AD object XXXXXXXXX-XXXX-XXXX-XXXXX-XXXXXXXXXXX over scope /subscriptions/XXXXXXXXX-XXXX-XXXX-XXXXX-XXXXXXXXXXX/resourcegroups/my-resource-group/providers/microsoft.azurearcdata/sqlmanagedinstances/arc-dc, User Tenant Id: XXXXXXXXX-XXXX-XXXX-XXXXX-XXXXXXXXXXX. Microsoft.Insights/Metrics/write was not allowed, Microsoft.Insights/Telemetry/write was notallowed. Warning: Principal will be blocklisted if the service principal is not granted proper access while it hits the GIG endpoint continuously."}}
+```
+
+To resolve above error, retrieve the MSI for the Azure Arc data controller extension, and grant the required roles as described in [Upload metrics](upload-metrics.md).
+
+
+## Usage upload related errors in direct connected mode
+
+If you deployed your Azure Arc data controller in the direct connected mode the permissions needed to upload your usage information are automatically granted for the Azure Arc data controller extension MSI. If the automatic upload process runs into permissions related issues you might see an error in your logs as follows:
+
+```
+identified that your data controller stopped uploading usage data to Azure. The error was:
+
+{"lastUploadTime":"2022-05-05T20:10:47.6746860Z","message":"Data controller upload response: {\"error\":{\"code\":\"AuthorizationFailed\",\"message\":\"The client 'XXXXXXXXX-XXXX-XXXX-XXXXX-XXXXXXXXXXX' with object id 'XXXXXXXXX-XXXX-XXXX-XXXXX-XXXXXXXXXXX' does not have authorization to perform action 'microsoft.azurearcdata/datacontrollers/write' over scope '/subscriptions/XXXXXXXXX-XXXX-XXXX-XXXXX-XXXXXXXXXXX/resourcegroups/my-resource-group/providers/microsoft.azurearcdata/datacontrollers/arc-dc' or the scope is invalid. If access was recently granted, please refresh your credentials.\"}}"}
+```
+
+To resolve the permissions issue, retrieve the MSI and grant the required roles as described in [Upload metrics](upload-metrics.md)).
+
+
## Resources by type
[Scenario: Troubleshooting PostgreSQL Hyperscale server groups](troubleshoot-postgresql-hyperscale-server-group.md)
diff --git a/articles/azure-arc/data/upgrade-data-controller-direct-cli.md b/articles/azure-arc/data/upgrade-data-controller-direct-cli.md
index bcec538d935f1..76b8b76a3142a 100644
--- a/articles/azure-arc/data/upgrade-data-controller-direct-cli.md
+++ b/articles/azure-arc/data/upgrade-data-controller-direct-cli.md
@@ -4,10 +4,10 @@ description: Article describes how to upgrade a directly connected Azure Arc dat
services: azure-arc
ms.service: azure-arc
ms.subservice: azure-arc-data
-author: grrlgeek
-ms.author: jeschult
+author: dnethi
+ms.author: dinethi
ms.reviewer: mikeray
-ms.date: 12/10/2021
+ms.date: 05/24/2022
ms.topic: how-to
---
@@ -85,7 +85,32 @@ Preparing to upgrade dc arcdc in namespace arc to version .
Arcdata Control Plane would be upgraded to:
```
-To upgrade the data controller, run the `az arcdata dc upgrade` command. If you don't specify a target image, the data controller will be upgraded to the latest version.
+Upgrade the data controller by running an upgrade on the Arc data controller extension first. This can be done as follows:
+
+```azurecli
+az k8s-extension update --resource-group --cluster-name --cluster-type connectedClusters --name --version --release-train stable --config systemDefaultValues.image="//arc-bootstrapper:"
+```
+You can retrieve the name of your extension and its version, by browsing to the Overview blade of your Arc enabled kubernetes cluster and select Extensions tab on the left. You can also retrieve the name of your extension and its version running `az` CLI As follows:
+
+```azurecli
+az k8s-extension list --resource-group --cluster-name --cluster-type connectedClusters
+```
+
+For example:
+
+```azurecli
+az k8s-extension list --resource-group myresource-group --cluster-name myconnected-cluster --cluster-type connectedClusters
+```
+
+After retrieving the Arc data controller extension name and its version, the extension can be upgraded as follows:
+
+For example:
+
+```azurecli
+az k8s-extension update --resource-group myresource-group --cluster-name myconnected-cluster --cluster-type connectedClusters --name arcdc-ext --version 1.2.19481002 --release-train stable --config systemDefaultValues.image="mcr.microsoft.com/arcdata/arc-bootstrapper:v1.6.0_2022-05-02"
+```
+
+Once the extension is upgraded, run the `az arcdata dc upgrade` command to upgrade the data controller. If you don't specify a target image, the data controller will be upgraded to the latest version.
```azurecli
az arcdata dc upgrade --resource-group --name [--no-wait]
@@ -93,6 +118,10 @@ az arcdata dc upgrade --resource-group --name ` to specify a version if you do not want the latest version.
+> [!NOTE]
+> Currently upgrade is only supported to the next immediate version. Hence, if you are more than one version behind, specify the `--desired-version` to avoid compatibility issues.
+
+
## Monitor the upgrade status
You can monitor the progress of the upgrade with CLI.
diff --git a/articles/azure-arc/data/upgrade-sql-managed-instance-direct-cli.md b/articles/azure-arc/data/upgrade-sql-managed-instance-direct-cli.md
index 445ea09b0b15c..cffda7883789e 100644
--- a/articles/azure-arc/data/upgrade-sql-managed-instance-direct-cli.md
+++ b/articles/azure-arc/data/upgrade-sql-managed-instance-direct-cli.md
@@ -8,7 +8,7 @@ ms.custom: event-tier1-build-2022
author: grrlgeek
ms.author: jeschult
ms.reviewer: mikeray
-ms.date: 11/10/2021
+ms.date: 05/21/2022
ms.topic: how-to
---
@@ -57,13 +57,13 @@ During a SQL Managed Instance General Purpose upgrade, the containers in the pod
To upgrade the Managed Instance, use the following command:
````cli
-az sql mi-arc upgrade --resource-group --name [--no-wait]
+az sql mi-arc upgrade --resource-group --name --desired-version [--no-wait]
````
Example:
````cli
-az sql mi-arc upgrade --resource-group rgarc --name sql1 [--no-wait]
+az sql mi-arc upgrade --resource-group myresource-group --name sql1 --desired-version v1.6.0_2022-05-02 [--no-wait]
````
## Monitor
@@ -89,7 +89,7 @@ Status:
Observed Generation: 2
Primary Endpoint: 30.76.129.38,1433
Ready Replicas: 1/1
- Running Version: v1.0.0_2021-07-30
+ Running Version: v1.5.0_2022-04-05
State: Updating
```
@@ -102,7 +102,7 @@ Status:
Observed Generation: 2
Primary Endpoint: 30.76.129.38,1433
Ready Replicas: 1/1
- Running Version:
+ Running Version: v1.6.0_2022-05-02
State: Ready
```
diff --git a/articles/azure-arc/data/upload-logs.md b/articles/azure-arc/data/upload-logs.md
index ee2a0fa633437..38f21f3ad6c53 100644
--- a/articles/azure-arc/data/upload-logs.md
+++ b/articles/azure-arc/data/upload-logs.md
@@ -4,10 +4,10 @@ description: Upload logs for Azure Arc-enabled data services to Azure Monitor
services: azure-arc
ms.service: azure-arc
ms.subservice: azure-arc-data
-author: twright-msft
-ms.author: twright
+author: dnethi
+ms.author: dinethi
ms.reviewer: mikeray
-ms.date: 11/03/2021
+ms.date: 05/27/2022
ms.topic: how-to
---
@@ -149,9 +149,9 @@ echo $WORKSPACE_SHARED_KEY
With the environment variables set, you can upload logs to the log workspace.
-## Upload logs to Azure Log Analytics Workspace in direct mode
+## Configure automatic upload of logs to Azure Log Analytics Workspace in direct mode using `az` CLI
-In the **direct** connected mode, Logs upload can only be setup in **automatic** mode. This automatic upload of metrics can be setup either during deployment or post deployment of Azure Arc data controller.
+In the **direct** connected mode, Logs upload can only be set up in **automatic** mode. This automatic upload of metrics can be set up either during deployment or post deployment of Azure Arc data controller.
### Enable automatic upload of logs to Azure Log Analytics Workspace
@@ -163,7 +163,7 @@ az arcdata dc update --name --resource-group --auto-upload-logs true
```
-### Disable automatic upload of logs to Azure Log Analytics Workspace
+### Enable automatic upload of logs to Azure Log Analytics Workspace
If the automatic upload of logs was enabled during Azure Arc data controller deployment, run the below command to disable automatic upload of logs.
```
@@ -172,7 +172,54 @@ az arcdata dc update --name --resource-group --auto-upload-logs false
```
-## Upload logs to Azure Monitor in indirect mode
+## Configure automatic upload of logs to Azure Log Analytics Workspace in **direct** mode using `kubectl` CLI
+
+### Enable automatic upload of logs to Azure Log Analytics Workspace
+
+To configure automatic upload of logs using ```kubectl```:
+
+- ensure the Log Analytics Workspace is created as described in the earlier section
+- create a Kubernetes secret for the Log Analytics workspace using the ```WorkspaceID``` and `SharedAccessKey` as follows:
+
+```
+apiVersion: v1
+data:
+ primaryKey:
+ workspaceId:
+kind: Secret
+metadata:
+ name: log-workspace-secret
+ namespace:
+type: Opaque
+```
+
+- To create the secret, run:
+
+ ```console
+ kubectl apply -f --namespace
+ ```
+
+- To open the settings as a yaml file in the default editor, run:
+
+ ```console
+ kubectl edit datacontroller --name
+ ```
+
+- update the autoUploadLogs property to ```"true"```, and save the file
+
+
+
+### Enable automatic upload of logs to Azure Log Analytics Workspace
+
+To disable automatic upload of logs, run:
+
+```console
+kubectl edit datacontroller --name
+```
+
+- update the autoUploadLogs property to `"false"`, and save the file
+
+## Upload logs to Azure Monitor in **indirect** mode
To upload logs for your Azure Arc-enabled SQL managed instances and Azure Arc-enabled PostgreSQL Hyperscale server groups run the following CLI commands-
@@ -210,7 +257,7 @@ Once your logs are uploaded, you should be able to query them using the log quer
If you want to upload metrics and logs on a scheduled basis, you can create a script and run it on a timer every few minutes. Below is an example of automating the uploads using a Linux shell script.
-In your favorite text/code editor, add the following script to the file and save as a script executable file such as .sh (Linux/Mac) or .cmd, .bat, .ps1.
+In your favorite text/code editor, add the following script to the file and save as a script executable file - such as .sh for Linux/Mac, or .cmd, .bat, or .ps1 for Windows.
```azurecli
az arcdata dc export --type logs --path logs.json --force --k8s-namespace arc
diff --git a/articles/azure-arc/data/upload-metrics-and-logs-to-azure-monitor.md b/articles/azure-arc/data/upload-metrics-and-logs-to-azure-monitor.md
index 001fe75ccf3bb..f8c296f6c5678 100644
--- a/articles/azure-arc/data/upload-metrics-and-logs-to-azure-monitor.md
+++ b/articles/azure-arc/data/upload-metrics-and-logs-to-azure-monitor.md
@@ -160,7 +160,7 @@ Example output:
## Verify service principal role
```azurecli
-az role assignment list -o table
+az role assignment list --scope subscriptions//resourceGroups/ -o table
```
With the service principal assigned to the appropriate role, you can proceed to upload metrics, or user data.
diff --git a/articles/azure-arc/data/upload-usage-data.md b/articles/azure-arc/data/upload-usage-data.md
index 78aeed4ccfe9f..932d62fe8d500 100644
--- a/articles/azure-arc/data/upload-usage-data.md
+++ b/articles/azure-arc/data/upload-usage-data.md
@@ -4,16 +4,16 @@ description: Upload usage Azure Arc-enabled data services data to Azure
services: azure-arc
ms.service: azure-arc
ms.subservice: azure-arc-data
-author: twright-msft
-ms.author: twright
+author: dnethi
+ms.author: dinethi
ms.reviewer: mikeray
-ms.date: 11/03/2021
+ms.date: 05/27/2022
ms.topic: how-to
---
# Upload usage data to Azure in **indirect** mode
-Periodically, you can export out usage information. The export and upload of this information creates and updates the data controller, SQL managed instance, and PostgreSQL Hyperscale server group resources in Azure.
+Periodically, you can export out usage information. The export and upload of this information creates and updates the data controller, SQL managed instance, and PostgreSQL resources in Azure.
> [!NOTE]
> Usage information is automatically uploaded for Azure Arc data controller deployed in **direct** connectivity mode. The instructions in this article only apply to uploading usage information for Azure Arc data controller deployed in **indirect** connectivity mode..
@@ -42,12 +42,12 @@ Usage information such as inventory and resource usage can be uploaded to Azure
az arcdata dc export --type usage --path usage.json --k8s-namespace --use-k8s
```
- This command creates a `usage.json` file with all the Azure Arc-enabled data resources such as SQL managed instances and PostgreSQL Hyperscale instances etc. that are created on the data controller.
+ This command creates a `usage.json` file with all the Azure Arc-enabled data resources such as SQL managed instances and PostgreSQL instances etc. that are created on the data controller.
For now, the file is not encrypted so that you can see the contents. Feel free to open in a text editor and see what the contents look like.
-You will notice that there are two sets of data: `resources` and `data`. The `resources` are the data controller, PostgreSQL Hyperscale server groups, and SQL Managed Instances. The `resources` records in the data capture the pertinent events in the history of a resource - when it was created, when it was updated, and when it was deleted. The `data` records capture how many cores were available to be used by a given instance for every hour.
+You will notice that there are two sets of data: `resources` and `data`. The `resources` are the data controller, PostgreSQL, and SQL Managed Instances. The `resources` records in the data capture the pertinent events in the history of a resource - when it was created, when it was updated, and when it was deleted. The `data` records capture how many cores were available to be used by a given instance for every hour.
Example of a `resource` entry:
@@ -104,6 +104,18 @@ Example of a `data` entry:
az arcdata dc upload --path usage.json
```
+## Upload frequency
+
+In the **indirect** mode, usage information needs to be uploaded to Azure at least once in every 30 days. It is highly recommended to upload more frequently, such as daily or weekly. If usage information is not uploaded past 32 days, you will see some degradation in the service such as being unable to provision any new resources.
+
+There will be two types of notifications for delayed usage uploads - warning phase and degraded phase. In the warning phase there will be a message such as `Billing data for the Azure Arc data controller has not been uploaded in {0} hours. Please upload billing data as soon as possible.`.
+
+In the degraded phase, the message will look like `Billing data for the Azure Arc data controller has not been uploaded in {0} hours. Some functionality will not be available until the billing data is uploaded.`.
+
+The Azure portal Overview page for Data Controller and the Custom Resource status of the Data controller in your kubernetes cluster will both indicate the last upload date and the status message(s).
+
+
+
## Automating uploads (optional)
If you want to upload metrics and logs on a scheduled basis, you can create a script and run it on a timer every few minutes. Below is an example of automating the uploads using a Linux shell script.
diff --git a/articles/azure-arc/data/version-log.md b/articles/azure-arc/data/version-log.md
index 1e40cc27ff584..76ca06814180c 100644
--- a/articles/azure-arc/data/version-log.md
+++ b/articles/azure-arc/data/version-log.md
@@ -22,11 +22,11 @@ This article identifies the component versions with each release of Azure Arc-en
|Component |Value |
|--------------------------------------------------------|---------|
|Container images tag |`v1.7.0_2022-05-24`|
-|CRD names and versions |`datacontrollers.arcdata.microsoft.com`: v1beta1, v1 through v6`exporttasks.tasks.arcdata.microsoft.com`: v1beta1, v1, v2`kafkas.arcdata.microsoft.com`: v1beta1`monitors.arcdata.microsoft.com`: v1beta1, v1, v2`sqlmanagedinstances.sql.arcdata.microsoft.com`: v1beta1, v1 through v6`postgresqls.arcdata.microsoft.com`: v1beta1, v1beta2`sqlmanagedinstancerestoretasks.tasks.sql.arcdata.microsoft.com`: v1beta1, v1`failovergroups.sql.arcdata.microsoft.com`: v1beta1, v1beta2`activedirectoryconnectors.arcdata.microsoft.com`: v1beta1, v1beta2|
-|ARM API version|2022-03-01-preview|
-|`arcdata` Azure CLI extension version| 1.4.0|
-|Arc enabled Kubernetes helm chart extension version|1.2.19481002|
-|Arc Data extension for Azure Data Studio|1.2.0|
+|CRD names and versions |`datacontrollers.arcdata.microsoft.com`: v1beta1, v1 through v6`exporttasks.tasks.arcdata.microsoft.com`: v1beta1, v1, v2`kafkas.arcdata.microsoft.com`: v1beta1`monitors.arcdata.microsoft.com`: v1beta1, v1, v2`sqlmanagedinstances.sql.arcdata.microsoft.com`: v1beta1, v1 through v6`postgresqls.arcdata.microsoft.com`: v1beta1, v1beta2`sqlmanagedinstancerestoretasks.tasks.sql.arcdata.microsoft.com`: v1beta1, v1`failovergroups.sql.arcdata.microsoft.com`: v1beta1, v1beta2,v1`activedirectoryconnectors.arcdata.microsoft.com`: v1beta1, v1beta2|
+|ARM API version|2022-03-01-preview (No change)|
+|`arcdata` Azure CLI extension version| 1.4.1|
+|Arc enabled Kubernetes helm chart extension version|1.2.19581002|
+|Arc Data extension for Azure Data Studio|1.3.0|
## May 4, 2022
diff --git a/articles/azure-arc/index.yml b/articles/azure-arc/index.yml
index 2bb3c4439d4d3..792df72031c19 100644
--- a/articles/azure-arc/index.yml
+++ b/articles/azure-arc/index.yml
@@ -141,6 +141,9 @@ conceptualContent:
- url: ./vmware-vsphere/overview.md
itemType: overview
text: Azure Arc-enabled VMware vSphere (preview)
+ - url: ./system-center-virtual-machine-manager/overview.md
+ itemType: overview
+ text: Azure Arc-enabled System Center Virtual Machine Manager (preview)
# Card
- title: Application services
links:
diff --git a/articles/azure-arc/kubernetes/cluster-connect.md b/articles/azure-arc/kubernetes/cluster-connect.md
index 5f950825c7496..3028318d22cef 100644
--- a/articles/azure-arc/kubernetes/cluster-connect.md
+++ b/articles/azure-arc/kubernetes/cluster-connect.md
@@ -2,7 +2,7 @@
title: "Use Cluster Connect to connect to Azure Arc-enabled Kubernetes clusters"
services: azure-arc
ms.service: azure-arc
-ms.date: 10/31/2021
+ms.date: 06/03/2022
ms.topic: article
author: shashankbarsin
ms.author: shasb
@@ -11,47 +11,80 @@ description: "Use Cluster Connect to securely connect to Azure Arc-enabled Kuber
# Use Cluster Connect to connect to Azure Arc-enabled Kubernetes clusters
-With Cluster Connect, you can securely connect to Azure Arc-enabled Kubernetes clusters without requiring any inbound port to be enabled on the firewall. Access to the `apiserver` of the Azure Arc-enabled Kubernetes cluster enables the following scenarios:
-* Enable interactive debugging and troubleshooting.
-* Provide cluster access to Azure services for [custom locations](custom-locations.md) and other resources created on top of it.
+With Cluster Connect, you can securely connect to Azure Arc-enabled Kubernetes clusters without requiring any inbound port to be enabled on the firewall.
-A conceptual overview of this feature is available in [Cluster connect - Azure Arc-enabled Kubernetes](conceptual-cluster-connect.md) article.
+Access to the `apiserver` of the Azure Arc-enabled Kubernetes cluster enables the following scenarios:
-## Prerequisites
+- Interactive debugging and troubleshooting.
+- Cluster access to Azure services for [custom locations](custom-locations.md) and other resources created on top of it.
+
+A conceptual overview of this feature is available in [Cluster connect - Azure Arc-enabled Kubernetes](conceptual-cluster-connect.md).
+
+## Prerequisites
+
+### [Azure CLI](#tab/azure-cli)
+
+- An Azure account with an active subscription. [Create an account for free](https://azure.microsoft.com/free/?WT.mc_id=A261C142F).
- [Install](/cli/azure/install-azure-cli) or [update](/cli/azure/update-azure-cli) Azure CLI to version >= 2.16.0.
- Install the `connectedk8s` Azure CLI extension of version >= 1.2.5:
- ```azurecli
- az extension add --name connectedk8s
- ```
-
- If you've already installed the `connectedk8s` extension, update the extension to the latest version:
-
- ```azurecli
- az extension update --name connectedk8s
- ```
+ ```azurecli
+ az extension add --name connectedk8s
+ ```
+
+ If you've already installed the `connectedk8s` extension, update the extension to the latest version:
+
+ ```azurecli
+ az extension update --name connectedk8s
+ ```
- An existing Azure Arc-enabled Kubernetes connected cluster.
- - If you haven't connected a cluster yet, use our [quickstart](quickstart-connect-cluster.md).
- - [Upgrade your agents](agent-upgrade.md#manually-upgrade-agents) to version >= 1.5.3.
+ - If you haven't connected a cluster yet, use our [quickstart](quickstart-connect-cluster.md).
+ - [Upgrade your agents](agent-upgrade.md#manually-upgrade-agents) to version >= 1.5.3.
- Enable the below endpoints for outbound access in addition to the ones mentioned under [connecting a Kubernetes cluster to Azure Arc](quickstart-connect-cluster.md#meet-network-requirements):
- | Endpoint | Port |
- |----------------|-------|
- |`*.servicebus.windows.net` | 443 |
- |`guestnotificationservice.azure.com`, `*.guestnotificationservice.azure.com` | 443 |
+ | Endpoint | Port |
+ |----------------|-------|
+ |`*.servicebus.windows.net` | 443 |
+ |`guestnotificationservice.azure.com`, `*.guestnotificationservice.azure.com` | 443 |
- Replace the placeholders and run the below command to set the environment variables used in this document:
- ```azurecli
- CLUSTER_NAME=
- RESOURCE_GROUP=
- ARM_ID_CLUSTER=$(az connectedk8s show -n $CLUSTER_NAME -g $RESOURCE_GROUP --query id -o tsv)
- ```
+ ```azurecli
+ CLUSTER_NAME=
+ RESOURCE_GROUP=
+ ARM_ID_CLUSTER=$(az connectedk8s show -n $CLUSTER_NAME -g $RESOURCE_GROUP --query id -o tsv)
+ ```
+
+### [Azure PowerShell](#tab/azure-powershell)
+
+- An Azure account with an active subscription. [Create an account for free](https://azure.microsoft.com/free/?WT.mc_id=A261C142F).
+
+- Install [Azure PowerShell version 6.6.0 or later](/powershell/azure/install-az-ps).
+
+- An existing Azure Arc-enabled Kubernetes connected cluster.
+ - If you haven't connected a cluster yet, use our [quickstart](quickstart-connect-cluster.md).
+ - [Upgrade your agents](agent-upgrade.md#manually-upgrade-agents) to version >= 1.5.3.
+
+- Enable the below endpoints for outbound access in addition to the ones mentioned under [connecting a Kubernetes cluster to Azure Arc](quickstart-connect-cluster.md#meet-network-requirements):
+ | Endpoint | Port |
+ |----------------|-------|
+ |`*.servicebus.windows.net` | 443 |
+ |`guestnotificationservice.azure.com`, `*.guestnotificationservice.azure.com` | 443 |
+
+- Replace the placeholders and run the below command to set the environment variables used in this document:
+
+ ```azurepowershell
+ $CLUSTER_NAME =
+ $RESOURCE_GROUP =
+ $ARM_ID_CLUSTER = (az connectedk8s show -n $CLUSTER_NAME -g $RESOURCE_GROUP --query id -o tsv)
+ ```
+
+---
## Enable Cluster Connect feature
@@ -63,41 +96,77 @@ az connectedk8s enable-features --features cluster-connect -n $CLUSTER_NAME -g $
## Azure Active Directory authentication option
-1. Get the `objectId` associated with your Azure AD entity:
+### [Azure CLI](#tab/azure-cli)
+
+1. Get the `objectId` associated with your Azure AD entity.
+
+ - For an Azure AD user account:
+
+ ```azurecli
+ AAD_ENTITY_OBJECT_ID=$(az ad signed-in-user show --query objectId -o tsv)
+ ```
+
+ - For an Azure AD application:
+
+ ```azurecli
+ AAD_ENTITY_OBJECT_ID=$(az ad sp show --id --query objectId -o tsv)
+ ```
+
+1. Authorize the entity with appropriate permissions.
+
+ - If you are using Kubernetes native ClusterRoleBinding or RoleBinding for authorization checks on the cluster, with the `kubeconfig` file pointing to the `apiserver` of your cluster for direct access, you can create one mapped to the Azure AD entity (service principal or user) that needs to access this cluster. Example:
+
+ ```console
+ kubectl create clusterrolebinding admin-user-binding --clusterrole cluster-admin --user=$AAD_ENTITY_OBJECT_ID
+ ```
+
+ - If you are using Azure RBAC for authorization checks on the cluster, you can create an Azure role assignment mapped to the Azure AD entity. Example:
+
+ ```azurecli
+ az role assignment create --role "Azure Arc Kubernetes Viewer" --assignee $AAD_ENTITY_OBJECT_ID --scope $ARM_ID_CLUSTER
+ ```
- - For Azure AD user account:
+### [Azure PowerShell](#tab/azure-powershell)
- ```azurecli
- AAD_ENTITY_OBJECT_ID=$(az ad signed-in-user show --query objectId -o tsv)
- ```
+1. Get the `objectId` associated with your Azure AD entity.
- - For Azure AD application:
+ - For an Azure AD user account:
- ```azurecli
- AAD_ENTITY_OBJECT_ID=$(az ad sp show --id --query objectId -o tsv)
- ```
+ ```azurepowershell
+ $AAD_ENTITY_OBJECT_ID = (az ad signed-in-user show --query objectId -o tsv)
+ ```
-1. Authorize the entity with appropriate permissions:
+ - For an Azure AD application:
- - If you are using Kubernetes native ClusterRoleBinding or RoleBinding for authorization checks on the cluster, with the `kubeconfig` file pointing to the `apiserver` of your cluster for direct access, you can create one mapped to the Azure AD entity (service principal or user) that needs to access this cluster. Example:
-
- ```console
- kubectl create clusterrolebinding admin-user-binding --clusterrole cluster-admin --user=$AAD_ENTITY_OBJECT_ID
- ```
+ ```azurepowershell
+ $AAD_ENTITY_OBJECT_ID = (az ad sp show --id --query objectId -o tsv)
+ ```
- - If you are using Azure RBAC for authorization checks on the cluster, you can create an Azure role assignment mapped to the Azure AD entity. Example:
+1. Authorize the entity with appropriate permissions.
- ```azurecli
- az role assignment create --role "Azure Arc Kubernetes Viewer" --assignee $AAD_ENTITY_OBJECT_ID --scope $ARM_ID_CLUSTER
- ```
+ - If you are using Kubernetes native ClusterRoleBinding or RoleBinding for authorization checks on the cluster, with the `kubeconfig` file pointing to the `apiserver` of your cluster for direct access, you can create one mapped to the Azure AD entity (service principal or user) that needs to access this cluster. Example:
+
+ ```console
+ kubectl create clusterrolebinding admin-user-binding --clusterrole cluster-admin --user=$AAD_ENTITY_OBJECT_ID
+ ```
+
+ - If you are using Azure RBAC for authorization checks on the cluster, you can create an Azure role assignment mapped to the Azure AD entity. Example:
+
+ ```azurecli
+ az role assignment create --role "Azure Arc Kubernetes Viewer" --assignee $AAD_ENTITY_OBJECT_ID --scope $ARM_ID_CLUSTER
+ ```
+
+---
## Service account token authentication option
-1. With the `kubeconfig` file pointing to the `apiserver` of your Kubernetes cluster, create a service account in any namespace (following command creates it in the default namespace):
+### [Azure CLI](#tab/azure-cli)
- ```console
- kubectl create serviceaccount admin-user
- ```
+1. With the `kubeconfig` file pointing to the `apiserver` of your Kubernetes cluster, create a service account in any namespace (the following command creates it in the default namespace):
+
+ ```console
+ kubectl create serviceaccount admin-user
+ ```
1. Create ClusterRoleBinding or RoleBinding to grant this [service account the appropriate permissions on the cluster](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#kubectl-create-rolebinding). Example:
@@ -105,7 +174,7 @@ az connectedk8s enable-features --features cluster-connect -n $CLUSTER_NAME -g $
kubectl create clusterrolebinding admin-user-binding --clusterrole cluster-admin --serviceaccount default:admin-user
```
-1. Get the service account's token using the following commands
+1. Get the service account's token using the following commands:
```console
SECRET_NAME=$(kubectl get serviceaccount admin-user -o jsonpath='{$.secrets[0].name}')
@@ -115,43 +184,68 @@ az connectedk8s enable-features --features cluster-connect -n $CLUSTER_NAME -g $
TOKEN=$(kubectl get secret ${SECRET_NAME} -o jsonpath='{$.data.token}' | base64 -d | sed $'s/$/\\\n/g')
```
+### [Azure PowerShell](#tab/azure-powershell)
+
+1. With the `kubeconfig` file pointing to the `apiserver` of your Kubernetes cluster, create a service account in any namespace (the following command creates it in the default namespace):
+
+ ```console
+ kubectl create serviceaccount admin-user
+ ```
+
+1. Create ClusterRoleBinding or RoleBinding to grant this [service account the appropriate permissions on the cluster](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#kubectl-create-rolebinding). Example:
+
+ ```console
+ kubectl create clusterrolebinding admin-user-binding --clusterrole cluster-admin --serviceaccount default:admin-user
+ ```
+
+1. Get the service account's token using the following commands:
+
+ ```console
+ $SECRET_NAME = (kubectl get serviceaccount admin-user -o jsonpath='{$.secrets[0].name}')
+ ```
+
+ ```console
+ $TOKEN = ([System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String((kubectl get secret $SECRET_NAME -o jsonpath='{$.data.token}'))))
+ ```
+
+---
+
## Access your cluster
1. Set up the Cluster Connect based kubeconfig needed to access your cluster based on the authentication option used:
- - If using Azure Active Directory authentication option, after logging into Azure CLI using the Azure AD entity of interest, get the Cluster Connect `kubeconfig` needed to communicate with the cluster from anywhere (from even outside the firewall surrounding the cluster):
+ - If using Azure Active Directory authentication option, after logging into Azure CLI using the Azure AD entity of interest, get the Cluster Connect `kubeconfig` needed to communicate with the cluster from anywhere (from even outside the firewall surrounding the cluster):
- ```azurecli
- az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP
- ```
+ ```azurecli
+ az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP
+ ```
- - If using the service account authentication option, get the Cluster Connect `kubeconfig` needed to communicate with the cluster from anywhere:
+ - If using the service account authentication option, get the Cluster Connect `kubeconfig` needed to communicate with the cluster from anywhere:
- ```azurecli
- az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP --token $TOKEN
- ```
+ ```azurecli
+ az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP --token $TOKEN
+ ```
1. Use `kubectl` to send requests to the cluster:
- ```console
- kubectl get pods
- ```
-
- You should now see a response from the cluster containing the list of all pods under the `default` namespace.
+ ```console
+ kubectl get pods
+ ```
+
+You should now see a response from the cluster containing the list of all pods under the `default` namespace.
## Known limitations
When making requests to the Kubernetes cluster, if the Azure AD entity used is a part of more than 200 groups, the following error is observed as this is a known limitation:
-```console
-You must be logged in to the server (Error:Error while retrieving group info. Error:Overage claim (users with more than 200 group membership) is currently not supported.
-```
+`You must be logged in to the server (Error:Error while retrieving group info. Error:Overage claim (users with more than 200 group membership) is currently not supported.`
To get past this error:
+
1. Create a [service principal](/cli/azure/create-an-azure-service-principal-azure-cli), which is less likely to be a member of more than 200 groups.
-1. [Sign in](/cli/azure/create-an-azure-service-principal-azure-cli#sign-in-using-a-service-principal) to Azure CLI with the service principal before running `az connectedk8s proxy` command.
+1. [Sign in](/cli/azure/create-an-azure-service-principal-azure-cli#sign-in-using-a-service-principal) to Azure CLI with the service principal before running the `az connectedk8s proxy` command.
## Next steps
-> [!div class="nextstepaction"]
-> Set up [Azure AD RBAC](azure-rbac.md) on your clusters
+- Set up [Azure AD RBAC](azure-rbac.md) on your clusters.
+- Deploy and manage [cluster extensions](extensions.md).
diff --git a/articles/azure-arc/kubernetes/conceptual-configurations.md b/articles/azure-arc/kubernetes/conceptual-configurations.md
index 5269b5d9a4778..26b83cc3add2d 100644
--- a/articles/azure-arc/kubernetes/conceptual-configurations.md
+++ b/articles/azure-arc/kubernetes/conceptual-configurations.md
@@ -1,5 +1,5 @@
---
-title: "Configurations and GitOps - Azure Arc-enabled Kubernetes"
+title: "GitOps Flux v1 configurations with Azure Arc-enabled Kubernetes"
services: azure-arc
ms.service: azure-arc
ms.date: 05/24/2022
@@ -10,12 +10,13 @@ description: "This article provides a conceptual overview of GitOps and configur
keywords: "Kubernetes, Arc, Azure, containers, configuration, GitOps"
---
-# Configurations and GitOps with Azure Arc-enabled Kubernetes
+# GitOps Flux v1 configurations with Azure Arc-enabled Kubernetes
> [!NOTE]
> This document is for GitOps with Flux v1. GitOps with Flux v2 is now available for Azure Arc-enabled Kubernetes and Azure Kubernetes Service (AKS) clusters; [learn about GitOps with Flux v2](./conceptual-gitops-flux2.md). Eventually Azure will stop supporting GitOps with Flux v1, so begin using Flux v2 as soon as possible.
In relation to Kubernetes, GitOps is the practice of declaring the desired state of Kubernetes cluster configurations (deployments, namespaces, etc.) in a Git repository. This declaration is followed by a polling and pull-based deployment of these cluster configurations using an operator. The Git repository can contain:
+
* YAML-format manifests describing any valid Kubernetes resources, including Namespaces, ConfigMaps, Deployments, DaemonSets, etc.
* Helm charts for deploying applications.
diff --git a/articles/azure-arc/kubernetes/conceptual-gitops-flux2.md b/articles/azure-arc/kubernetes/conceptual-gitops-flux2.md
index 556fddd97237e..38ae7517f6e96 100644
--- a/articles/azure-arc/kubernetes/conceptual-gitops-flux2.md
+++ b/articles/azure-arc/kubernetes/conceptual-gitops-flux2.md
@@ -1,14 +1,14 @@
---
-title: "Conceptual overview Azure Kubernetes Configuration Management (GitOps)"
+title: "GitOps Flux v2 configurations with AKS and Azure Arc-enabled Kubernetes"
description: "This article provides a conceptual overview of GitOps in Azure for use in Azure Arc-enabled Kubernetes and Azure Kubernetes Service (AKS) clusters."
keywords: "GitOps, Flux, Kubernetes, K8s, Azure, Arc, AKS, Azure Kubernetes Service, containers, devops"
services: azure-arc, aks
ms.service: azure-arc
-ms.date: 5/3/2022
+ms.date: 5/26/2022
ms.topic: conceptual
---
-# GitOps in Azure
+# GitOps Flux v2 configurations with AKS and Azure Arc-enabled Kubernetes
Azure provides configuration management capability using GitOps in Azure Kubernetes Service (AKS) and Azure Arc-enabled Kubernetes clusters. You can easily enable and use GitOps in these clusters.
diff --git a/articles/azure-arc/kubernetes/custom-locations.md b/articles/azure-arc/kubernetes/custom-locations.md
index f1e597113471a..056ffd070cf63 100644
--- a/articles/azure-arc/kubernetes/custom-locations.md
+++ b/articles/azure-arc/kubernetes/custom-locations.md
@@ -70,15 +70,21 @@ If you are logged into Azure CLI as an Azure AD user, to enable this feature on
az connectedk8s enable-features -n -g --features cluster-connect custom-locations
```
-If you are logged into Azure CLI using a service principal, to enable this feature on your cluster, execute the following steps:
+If you run the above command while being logged into Azure CLI using a service principal, you may observe the following warning:
-1. Fetch the Object ID of the Azure AD application used by Azure Arc service:
+```console
+Unable to fetch oid of 'custom-locations' app. Proceeding without enabling the feature. Insufficient privileges to complete the operation.
+```
+
+This is because a service principal doesn't have permissions to get information of the application used by Azure Arc service. To avoid this error, execute the following steps:
+
+1. Login into Azure CLI using your user account. Fetch the Object ID of the Azure AD application used by Azure Arc service:
```azurecli
- az ad sp show --id 'bc313c14-388c-4e7d-a58e-70017303ee3b' --query objectId -o tsv
+ az ad sp show --id bc313c14-388c-4e7d-a58e-70017303ee3b --query objectId -o tsv
```
-1. Use the `` value from above step to enable custom locations feature on the cluster:
+1. Login into Azure CLI using the service principal. Use the `` value from above step to enable custom locations feature on the cluster:
```azurecli
az connectedk8s enable-features -n -g --custom-locations-oid