Skip to content

Commit 8bc39c7

Browse files
authored
Merge pull request #210932 from MicrosoftDocs/repo_sync_working_branch
Confirm merge from repo_sync_working_branch to main to sync with https://github.com/MicrosoftDocs/azure-docs (branch main)
2 parents 5deed9c + abcb1b7 commit 8bc39c7

16 files changed

+357
-180
lines changed

README.md

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,13 @@ Contributing to open source is more than just providing updates, it's also about
1010

1111
You've decided to contribute, that's great! To contribute to the documentation, you need a few tools.
1212

13-
Contributing to the documentation requires a GitHub account. If you don't have an account, follow the instructions for the [GitHub account setup](/contribute/get-started-setup-github) from our contributor guide.
13+
#### Github
1414

15-
#### Download
15+
Contributing to the documentation requires a GitHub account. If you don't have an account, follow the instructions for [GitHub account setup](https://docs.microsoft.com/contribute/get-started-setup-github) from our contributor guide.
1616

17-
Install the following tools:
17+
#### Tools
1818

19-
* [Git](https://git-scm.com/download)
20-
* [Visual Studio Code](https://code.visualstudio.com/Download)
21-
* [Docs Authoring Pack](https://marketplace.visualstudio.com/items?itemName=docsmsft.docs-authoring-pack) extension for Visual Studio Code
22-
23-
#### Install
24-
25-
Follow the instructions provided in the [Install content authoring tools](/contribute/get-started-setup-tools) from our contributor guide.
19+
To install necessary tools, follow the instructions for [Install content authoring tools](https://docs.microsoft.com/contribute/get-started-setup-tools) from our contributor guide.
2620

2721
## License
2822

@@ -31,4 +25,4 @@ Please refer to [LICENSE](LICENSE), [LICENSE-CODE](LICENSE-CODE) and [ThirdParty
3125
## Code of Conduct
3226

3327
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
34-
For more information, see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [[email protected]](mailto:[email protected]) with any additional questions or comments.
28+
For more information, see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [[email protected]](mailto:[email protected]) with any additional questions or comments.

articles/active-directory/conditional-access/service-dependencies.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ The below table lists some more service dependencies, where the client apps must
6161
| | Windows Azure Active Directory | Early-bound |
6262
| | SharePoint | Early-bound |
6363
| | Exchange | Early-bound |
64+
| Power Automate | Power Apps | Early-bound |
6465
| Project | Dynamics CRM | Early-bound |
6566
| Skype for Business | Exchange | Early-bound |
6667
| Visual Studio | Microsoft Azure Management (portal and API) | Early-bound |

articles/active-directory/develop/test-automate-integration-testing.md

Lines changed: 47 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -175,56 +175,56 @@ using System;
175175

176176
public class ClientFixture : IAsyncLifetime
177177
{
178-
public HttpClient httpClient;
178+
public HttpClient httpClient;
179179

180-
public async Task InitializeAsync()
181-
{
182-
var builder = new ConfigurationBuilder().AddJsonFile("<path-to-json-file>");
180+
public async Task InitializeAsync()
181+
{
182+
var builder = new ConfigurationBuilder().AddJsonFile("<path-to-json-file>");
183183

184-
IConfigurationRoot Configuration = builder.Build();
184+
IConfigurationRoot Configuration = builder.Build();
185185

186-
var PublicClientApplicationOptions = new PublicClientApplicationOptions();
187-
Configuration.Bind("Authentication", PublicClientApplicationOptions);
188-
var app = PublicClientApplicationBuilder.CreateWithApplicationOptions(PublicClientApplicationOptions)
189-
.Build();
186+
var PublicClientApplicationOptions = new PublicClientApplicationOptions();
187+
Configuration.Bind("Authentication", PublicClientApplicationOptions);
188+
var app = PublicClientApplicationBuilder.CreateWithApplicationOptions(PublicClientApplicationOptions)
189+
.Build();
190190

191-
SecretClientOptions options = new SecretClientOptions()
192-
{
193-
Retry =
191+
SecretClientOptions options = new SecretClientOptions()
192+
{
193+
Retry =
194194
{
195195
Delay= TimeSpan.FromSeconds(2),
196196
MaxDelay = TimeSpan.FromSeconds(16),
197197
MaxRetries = 5,
198198
Mode = RetryMode.Exponential
199199
}
200-
};
200+
};
201201

202-
string keyVaultUri = Configuration.GetValue<string>("KeyVault:KeyVaultUri");
203-
var client = new SecretClient(new Uri(keyVaultUri), new DefaultAzureCredential(), options);
202+
string keyVaultUri = Configuration.GetValue<string>("KeyVault:KeyVaultUri");
203+
var client = new SecretClient(new Uri(keyVaultUri), new DefaultAzureCredential(), options);
204204

205-
KeyVaultSecret userNameSecret = client.GetSecret("TestUserName");
206-
KeyVaultSecret passwordSecret = client.GetSecret("TestPassword");
205+
KeyVaultSecret userNameSecret = client.GetSecret("TestUserName");
206+
KeyVaultSecret passwordSecret = client.GetSecret("TestPassword");
207207

208-
string password = passwordSecret.Value;
209-
string username = userNameSecret.Value;
210-
string[] scopes = Configuration.GetSection( "WebAPI:Scopes").Get<string[]>();
211-
SecureString securePassword = new NetworkCredential("", password).SecurePassword;
208+
string password = passwordSecret.Value;
209+
string username = userNameSecret.Value;
210+
string[] scopes = Configuration.GetSection("WebAPI:Scopes").Get<string[]>();
211+
SecureString securePassword = new NetworkCredential("", password).SecurePassword;
212212

213-
AuthenticationResult result = null;
214-
httpClient = new HttpClient();
213+
AuthenticationResult result = null;
214+
httpClient = new HttpClient();
215215

216-
try
217-
{
218-
result = await app.AcquireTokenByUsernamePassword(scopes, username, securePassword)
219-
.ExecuteAsync();
220-
}
221-
catch (MsalException) { }
216+
try
217+
{
218+
result = await app.AcquireTokenByUsernamePassword(scopes, username, securePassword)
219+
.ExecuteAsync();
220+
}
221+
catch (MsalException) { }
222222

223-
string accessToken = result.AccessToken;
224-
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", accessToken);
225-
}
223+
string accessToken = result.AccessToken;
224+
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", accessToken);
225+
}
226226

227-
public Task DisposeAsync() => Task.CompletedTask;
227+
public Task DisposeAsync() => Task.CompletedTask;
228228
}
229229
```
230230

@@ -235,21 +235,20 @@ The following example is a test that calls Microsoft Graph. Replace this test w
235235
```csharp
236236
public class ApiTests : IClassFixture<ClientFixture>
237237
{
238-
ClientFixture clientFixture;
239-
240-
public ApiTests(ClientFixture clientFixture)
241-
{
242-
this.clientFixture = clientFixture;
243-
}
238+
ClientFixture clientFixture;
244239

240+
public ApiTests(ClientFixture clientFixture)
241+
{
242+
this.clientFixture = clientFixture;
243+
}
245244

246-
[Fact]
247-
public async Task GetRequestTest()
248-
{
249-
var testClient = clientFixture.httpClient;
250-
HttpResponseMessage response = await testClient.GetAsync("https://graph.microsoft.com/v1.0/me");
251-
var responseCode = response.StatusCode.ToString();
252-
Assert.Equal("OK", responseCode);
253-
}
245+
[Fact]
246+
public async Task GetRequestTest()
247+
{
248+
var testClient = clientFixture.httpClient;
249+
HttpResponseMessage response = await testClient.GetAsync("https://graph.microsoft.com/v1.0/me");
250+
var responseCode = response.StatusCode.ToString();
251+
Assert.Equal("OK", responseCode);
252+
}
254253
}
255-
```
254+
```

articles/active-directory/identity-protection/TOC.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
href: howto-identity-protection-remediate-unblock.md
4141
- name: Export risk data
4242
href: howto-export-risk-data.md
43-
- name: Use the Microsoft Graph API
43+
- name: Use the Microsoft Graph PowerShell
4444
href: howto-identity-protection-graph-api.md
4545
- name: Provide feedback on risk detections
4646
href: howto-identity-protection-risk-feedback.md

articles/active-directory/identity-protection/howto-identity-protection-graph-api.md

Lines changed: 42 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -15,83 +15,65 @@ ms.reviewer: sahandle
1515

1616
ms.collection: M365-identity-device-management
1717
---
18-
# Azure Active Directory Identity Protection and the Microsoft Graph PowerShell SDK
18+
# Azure Active Directory Identity Protection and the Microsoft Graph PowerShell
1919

20-
Microsoft Graph is the Microsoft unified API endpoint and the home of [Azure Active Directory Identity Protection](./overview-identity-protection.md) APIs. This article will show you how to use the [Microsoft Graph PowerShell SDK](/powershell/microsoftgraph/get-started) to get risky user details using PowerShell. Organizations that want to query the Microsoft Graph APIs directly can use the article, [Tutorial: Identify and remediate risks using Microsoft Graph APIs](/graph/tutorial-riskdetection-api) to begin that journey.
20+
Microsoft Graph is the Microsoft unified API endpoint and the home of [Azure Active Directory Identity Protection](./overview-identity-protection.md) APIs. This article will show you how to use the [Microsoft Graph PowerShell SDK](/powershell/microsoftgraph/get-started) to manage risky users using PowerShell. Organizations that want to query the Microsoft Graph APIs directly can use the article, [Tutorial: Identify and remediate risks using Microsoft Graph APIs](/graph/tutorial-riskdetection-api) to begin that journey.
2121

22-
## Connect to Microsoft Graph
22+
To successfully complete this tutorial, make sure you have the required prerequisites:
2323

24-
There are four steps to accessing Identity Protection data through Microsoft Graph:
25-
26-
1. [Create a certificate](#create-a-certificate)
27-
1. [Create a new app registration](#create-a-new-app-registration)
28-
1. [Configure API permissions](#configure-api-permissions)
29-
1. [Configure a valid credential](#configure-a-valid-credential)
30-
31-
### Create a certificate
32-
33-
In a production environment you would use a certificate from your production Certificate Authority, but in this sample we'll use a self-signed certificate. Create and export the certificate using the following PowerShell commands.
24+
- Microsoft Graph PowerShell SDK is installed. Follow the [installation guide](/powershell/microsoftgraph/installation?view=graph-powershell-1.0) for more info on how to do this.
25+
- Identity Protection is available in the beta version of Microsoft Graph PowerShell. Run the following command to set your profile to beta.
26+
```powershell
27+
# Connect to Graph beta Endpoint
28+
Select-MgProfile -Name 'beta'
29+
```
30+
- Microsoft Graph PowerShell using a global administrator role and the appropriate permissions. The IdentityRiskEvent.Read.All, IdentityRiskyUser.ReadWrite.All Or IdentityRiskyUser.ReadWrite.All delegated permissions are required. To set the permissions to IdentityRiskEvent.Read.All and IdentityRiskyUser.ReadWrite.All, run:
31+
```powershell
32+
Connect-MgGraph -Scopes "IdentityRiskEvent.Read.All","IdentityRiskyUser.ReadWrite.All"
33+
```
3434

35+
Or, if you use app-only authentication, you may follow this [guide](/powershell/microsoftgraph/app-only?view=graph-powershell-1.0&tabs=azure-portal). To register an application with the required application permissions, prepare a certificate and run:
3536
```powershell
36-
$cert = New-SelfSignedCertificate -Subject "CN=MSGraph_ReportingAPI" -CertStoreLocation "Cert:\CurrentUser\My" -KeyExportPolicy Exportable -KeySpec Signature -KeyLength 2048 -KeyAlgorithm RSA -HashAlgorithm SHA256
37-
Export-Certificate -Cert $cert -FilePath "C:\Reporting\MSGraph_ReportingAPI.cer"
37+
Connect-MgGraph -ClientID YOUR_APP_ID -TenantId YOUR_TENANT_ID -CertificateName YOUR_CERT_SUBJECT ## Or -CertificateThumbprint instead of -CertificateName
3838
```
3939

40-
### Create a new app registration
41-
42-
1. In the Azure portal, browse to **Azure Active Directory** > **App registrations**.
43-
1. Select **New registration**.
44-
1. On the **Create** page, perform the following steps:
45-
1. In the **Name** textbox, type a name for your application (for example: Azure AD Risk Detection API).
46-
1. Under **Supported account types**, select the type of accounts that will use the APIs.
47-
1. Select **Register**.
48-
1. Take note of the **Application (client) ID** and **Directory (tenant) ID** as you'll need these items later.
49-
50-
### Configure API permissions
51-
52-
In this example, we configure application permissions allowing this sample to be used unattended. If granting permissions to a user who will be logged on, choose delegated permissions instead. More information about different permission types can be found in the article, [Permissions and consent in the Microsoft identity platform](../develop/v2-permissions-and-consent.md#permission-types).
53-
54-
1. From the **Application** you created, select **API permissions**.
55-
1. On the **Configured permissions** page, in the toolbar on the top, click **Add a permission**.
56-
1. On the **Add API access** page, click **Select an API**.
57-
1. On the **Select an API** page, select **Microsoft Graph**, and then click **Select**.
58-
1. On the **Request API permissions** page:
59-
1. Select **Application permissions**.
60-
1. Select the checkboxes next to `IdentityRiskEvent.Read.All` and `IdentityRiskyUser.Read.All`.
61-
1. Select **Add permissions**.
62-
1. Select **Grant admin consent for domain**
63-
64-
### Configure a valid credential
40+
## List risky detections using PowerShell
41+
You can retrieve the risk detections by the properties of a risk detection in Identity Protection.
42+
```powershell
43+
# List all anonymizedIPAddress risk detections
44+
Get-MgRiskDetection -Filter "RiskType eq 'anonymizedIPAddress'" | Format-Table UserDisplayName, RiskType, RiskLevel, DetectedDateTime
6545
66-
1. From the **Application** you created, select **Certificates & secrets**.
67-
1. Under **certificates**, select **Upload certificate**.
68-
1. Select the previously exported certificate from the window that opens.
69-
1. Select **Add**.
70-
1. Take note of the **Thumbprint** of the certificate as you'll need this information in the next step.
46+
# List all high risk detections for the user 'User01'
47+
Get-MgRiskDetection -Filter "UserDisplayName eq 'User01' and Risklevel eq 'high'" | Format-Table UserDisplayName, RiskType, RiskLevel, DetectedDateTime
7148
49+
```
7250
## List risky users using PowerShell
73-
74-
To enable the ability to query Microsoft Graph, we need to install the `Microsoft.Graph` module in our PowerShell window, using the `Install-Module Microsoft.Graph` command.
75-
76-
Modify the following variables to include the information generated in the previous steps, then run them as a whole to get risky user details using PowerShell.
77-
51+
You can retrieve the risky users and their risky histories in Identity Protection.
7852
```powershell
79-
$ClientID = "<your client ID here>" # Application (client) ID gathered when creating the app registration
80-
$tenantdomain = "<your tenant domain here>" # Directory (tenant) ID gathered when creating the app registration
81-
$Thumbprint = "<your client secret here>" # Certificate thumbprint gathered when configuring your credential
53+
# List all high risk users
54+
Get-MgRiskyUser -Filter "RiskLevel eq 'high'" | Format-Table UserDisplayName, RiskDetail, RiskLevel, RiskLastUpdatedDateTime
8255
83-
Select-MgProfile -Name "beta"
84-
85-
Connect-MgGraph -ClientId $ClientID -TenantId $tenantdomain -CertificateThumbprint $Thumbprint
56+
# List history of a specific user with detailed risk detection
57+
Get-MgRiskyUserHistory -RiskyUserId 375844b0-2026-4265-b9f1-ee1708491e05| Format-Table RiskDetail, RiskLastUpdatedDateTime, @{N="RiskDetection";E={($_). Activity.RiskEventTypes}}, RiskState, UserDisplayName
8658
87-
Get-MgRiskyUser -All
8859
```
89-
60+
## Confirm users compromised using Powershell
61+
You can confirm users compromised and flag them as high risky users in Identity Protection.
62+
```powershell
63+
# Confirm Compromised on two users
64+
Confirm-MgRiskyUserCompromised -UserIds "577e09c1-5f26-4870-81ab-6d18194cbb51","bf8ba085-af24-418a-b5b2-3fc71f969bf3"
65+
```
66+
## Dimiss risky users using Powershell
67+
You can bulk dismiss risky users in Identity Protection.
68+
```powershell
69+
# Get a list of high risky users which are more than 90 days old
70+
$riskyUsers= Get-MgRiskyUser -Filter "RiskLevel eq 'high'" | where RiskLastUpdatedDateTime -LT (Get-Date).AddDays(-90)
71+
# bulk dimmiss the risky users
72+
Invoke-MgDismissRiskyUser -UserIds $riskyUsers.Id
73+
```
9074
## Next steps
9175

9276
- [Get started with the Microsoft Graph PowerShell SDK](/powershell/microsoftgraph/get-started)
9377
- [Tutorial: Identify and remediate risks using Microsoft Graph APIs](/graph/tutorial-riskdetection-api)
9478
- [Overview of Microsoft Graph](https://developer.microsoft.com/graph/docs)
95-
- [Get access without a user](/graph/auth-v2-service)
96-
- [Azure AD Identity Protection Service Root](/graph/api/resources/identityprotectionroot)
9779
- [Azure Active Directory Identity Protection](./overview-identity-protection.md)

articles/azure-arc/servers/learn/quick-enable-hybrid-vm.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ In this quickstart, you'll deploy and configure the Azure Connected Machine agen
1616

1717
* An Azure account with an active subscription. [Create an account for free](https://azure.microsoft.com/free/?WT.mc_id=A261C142F).
1818
* Deploying the Connected Machine agent on a machine requires that you have administrator permissions to install and configure the agent. On Linux this is done by using the root account, and on Windows, with an account that is a member of the Local Administrators group.
19-
* The Microsoft.HybridCompute, Microsoft.GuestConfiguration, and Microsoft.HybridConnectivity resource providers must be registered on your subscription. You can [register these resource providers ahead of time](../prerequisites.md#azure-resource-providers), or while completing the steps in this quickstart.
19+
* The Microsoft.HybridCompute, Microsoft.GuestConfiguration, and Microsoft.HybridConnectivity resource providers must be registered on your subscription. Please [register these resource providers ahead of time](../prerequisites.md#azure-resource-providers).
2020
* Before you get started, be sure to review the [agent prerequisites](../prerequisites.md) and verify the following:
2121
* Your target machine is running a supported [operating system](../prerequisites.md#supported-operating-systems).
2222
* Your account has the [required Azure built-in roles](../prerequisites.md#required-permissions).
@@ -52,8 +52,6 @@ Use the Azure portal to create a script that automates the agent download and in
5252

5353
1. On the **Tags** page, review the default **Physical location tags** suggested and enter a value, or specify one or more **Custom tags** to support your standards. Then select **Next**.
5454

55-
1. On the **Download and run script** page, select the **Register** button to register the required resource providers in your subscription, if you haven't already done so.
56-
5755
1. In the **Download or copy the following script** section, review the script. If you want to make any changes, use the **Previous** button to go back and update your selections. Otherwise, select **Download** to save the script file.
5856

5957
## Install the agent using the script

articles/azure-vmware/vmware-hcx-mon-guidance.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ ms.date: 04/11/2022
2323

2424
[HCX Mobility Optimized Networking (MON)](https://docs.vmware.com/en/VMware-HCX/4.2/hcx-user-guide/GUID-0E254D74-60A9-479C-825D-F373C41F40BC.html) is an optional feature to enable when using [HCX Network Extensions (NE)](configure-hcx-network-extension.md). MON provides optimal traffic routing under certain scenarios to prevent network tromboning between the on-premises and cloud-based resources on extended networks.
2525

26-
As MON is an enterprise capability of the NE feature, make sure you've enabled the [VMware HCX Enterprise](https://cloud.vmware.com/community/2019/08/08/introducing-hcx-enterprise/) add-on through a [support request](https://portal.azure.com/#create/Microsoft.Support). VMware HCX Enterprise Edition will be available for customers to add and run with their Azure VMware Solution environment free of charge until 10/1/2022.
26+
As MON is an enterprise capability of the NE feature, make sure you've enabled the [VMware HCX Enterprise](https://cloud.vmware.com/community/2019/08/08/introducing-hcx-enterprise/) add-on through a [support request](https://portal.azure.com/#create/Microsoft.Support).
2727

2828
Throughout the migration cycle, MON optimizes application mobility for:
2929

0 commit comments

Comments
 (0)