Skip to content

Commit 33c5d32

Browse files
alrios-msdanielluo-msft
authored andcommitted
Added PS script to add permissions to UAMI
1 parent 18d19d0 commit 33c5d32

File tree

4 files changed

+98
-1
lines changed

4 files changed

+98
-1
lines changed

Deployment/Deploy-Resources.ps1

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,10 @@ function Set-RBACPermissions {
184184

185185
. ($ScriptsDirectory + '\Set-PostDeploymentRoles.ps1')
186186
Set-PostDeploymentRoles -SolutionAbbreviation $SolutionAbbreviation -EnvironmentAbbreviation $EnvironmentAbbreviation
187+
188+
. ($ScriptsDirectory + '\Set-UserManagedIdentityPermissions.ps1')
189+
Set-UserManagedIdentityPermissions -SolutionAbbreviation $SolutionAbbreviation -EnvironmentAbbreviation $EnvironmentAbbreviation
190+
187191
}
188192

189193
function Set-DBMigrations {
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
$ErrorActionPreference = "Stop"
2+
<#
3+
.SYNOPSIS
4+
Installs a module if it is needed.
5+
6+
.DESCRIPTION
7+
Installs a module if it is needed.
8+
9+
.EXAMPLE
10+
Install-MSGraphIfNeeded
11+
12+
#>
13+
function Install-MSGraphIfNeeded {
14+
[CmdletBinding()]
15+
param(
16+
[Parameter(Mandatory = $False)]
17+
[string] $BaseScriptDirectory
18+
)
19+
20+
$scriptsDirectory = (Split-Path $PSScriptRoot -Parent) + "\Scripts"
21+
22+
if ($BaseScriptDirectory) {
23+
$scriptsDirectory = $BaseScriptDirectory
24+
}
25+
26+
. ($scriptsDirectory + '\Install-ModuleIfNeeded.ps1')
27+
Install-ModuleIfNeeded -Name Microsoft.Graph -Version "2.17.0" -Verbose
28+
}

Scripts/PostDeployment/Set-PostDeploymentRoles.ps1

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@ function Set-PostDeploymentRoles {
3333
[Parameter(Mandatory = $False)]
3434
[string] $DataResourceGroupName = $null,
3535
[Parameter(Mandatory = $False)]
36-
[string] $ComputeResourceGroupName = $null
36+
[string] $ComputeResourceGroupName = $null,
37+
[Parameter(Mandatory = $False)]
38+
[string] $SetUserAssignedManagedIdentityPermissions = $false
3739
)
3840

3941
$scriptsDirectory = Split-Path $PSScriptRoot -Parent
@@ -68,4 +70,11 @@ function Set-PostDeploymentRoles {
6870
-ComputeResourceGroupName $ComputeResourceGroupName `
6971
-Verbose
7072

73+
if ($SetUserAssignedManagedIdentityPermissions) {
74+
. ($scriptsDirectory + '\PostDeployment\Set-UserManagedIdentityPermissions.ps1')
75+
Set-UserManagedIdentityPermissions -SolutionAbbreviation $SolutionAbbreviation `
76+
-EnvironmentAbbreviation $EnvironmentAbbreviation `
77+
-Verbose
78+
}
79+
7180
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
<#
2+
.SYNOPSIS
3+
Grants GraphAPI permissions to the User Assigned Managed Identity.
4+
5+
.DESCRIPTION
6+
Grants GraphAPI permissions to the User Assigned Managed Identity.
7+
8+
.PARAMETER SolutionAbbreviation
9+
The abbreviation for your solution.
10+
11+
.PARAMETER EnvironmentAbbreviation
12+
A 2-6 character abbreviation for your environment.
13+
14+
.EXAMPLE
15+
Set-UserManagedIdentityPermissions -SolutionAbbreviation "gmm" `
16+
-EnvironmentAbbreviation "<env>"
17+
#>
18+
19+
function Set-UserManagedIdentityPermissions {
20+
[CmdletBinding()]
21+
param(
22+
[Parameter(Mandatory = $True)]
23+
[string] $SolutionAbbreviation,
24+
[Parameter(Mandatory = $True)]
25+
[string] $EnvironmentAbbreviation
26+
)
27+
28+
Write-Host "Setting permissions for User Assigned Managed Identity"
29+
30+
$scriptsDirectory = Split-Path $PSScriptRoot -Parent
31+
32+
. ($scriptsDirectory + '\Install-MSGraphIfNeeded.ps1')
33+
Install-MSGraphIfNeeded
34+
35+
# Connect to Microsoft Graph
36+
Connect-MgGraph -Scopes "Directory.ReadWrite.All"
37+
38+
# Get the User Assigned Managed Identity and Graph Service Principal
39+
$uamiName = "$SolutionAbbreviation-identity-$EnvironmentAbbreviation-Graph"
40+
$uamiSPN = Get-MgServicePrincipal -Filter "displayName eq '$uamiName'"
41+
$graphApiSPN = Get-MgServicePrincipal -Filter "AppId eq '00000003-0000-0000-c000-000000000000'"
42+
43+
$appRoles = @("GroupMember.Read.All", "Member.Read.Hidden", "User.Read.All")
44+
foreach ($appRoleName in $appRoles) {
45+
46+
$appRole = $graphApiSPN.AppRoles | Where-Object { $_.Value -eq $appRoleName -and $_.AllowedMemberTypes -contains "Application" }
47+
48+
$bodyParam = @{
49+
PrincipalId = $uamiSPN.Id
50+
ResourceId = $graphApiSPN.Id
51+
AppRoleId = $appRole.Id
52+
}
53+
54+
New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $uamiSPN.Id -BodyParameter $bodyParam
55+
}
56+
}

0 commit comments

Comments
 (0)