We went though some "minimal" AZURE training last week. The trainer guy said we could organize and "bill" other departments using "TAGS". BUT, some Googling/Binging didn't turn anything up... so here is what I did to create a custom RBAC AZURE role:
Save this file (after you edit the last part, of course) as TAG_reader.json:
{
"Name": "Tag Reader",
"IsCustom": true,
"Description": "Can read tags.",
"Actions": [
"Microsoft.Resources/subscriptions/tagNames/read",
"Microsoft.Resources/subscriptions/tagNames/tagValues/read"
],
"NotActions": [
],
"AssignableScopes": [
"/subscriptions/PUTYOURSUBSCRIPTIONIDHERE"
]
}
then log into AZURE POSH, and run:
New-AzureRmRoleDefinition -inputfile TAG_reader.json
Then assign the person/people to that group.
If I spend some time figuring out something that might help others, and hasn't been found on the Internet by me, I will post about it. I hope to save some poor IT guy or gal some time.
Wednesday, November 15, 2017
Friday, July 7, 2017
Advanced Group Policy Management is such a control freak...
One of the things I like about my job is that I do lots of different "enterprisy" things with Microsoft Windows.
This week I had to solve an issue how to not have to create change requests every time someone edits a group policy. Thankfully, Microsoft has a solution that, while isn't perfect, is "good enough" called Advanced Group Policy Managment (AGPM).
The problem in our environment is we have over 600 GPOs that I needed to "import"/"control" into AGPM... and unless the owner and permissions are just right, they cannot be "controlled." I found a few people through some searches that were tackling either ownership, or permissions... but not both. So I present to you: Set-AGPMRights.ps1
Again, I am not a "full time programmer", so your mileage will vary, and I expect you to review my code before you use it on any production environment.
# Set-AGPMRights.ps1
# Created by Bryan Loveless # # Created June 2017
# This script will set the ownership and correct permissions/ownership for AGPM and
# will also "take control" of it/them.
# Just change the necessary variables, and away you go.
# References for borrowed code are in the script blocks where used, if they were. # ONLY CHANGE THE ONE LINE BELOW!!! (After changing the users during initial config) # It will support Wildcards (*) $GPOTARGET = "*" ########################now the script parts not to configure######################################## # get list of all GPOs with that name $allGPOnames = ((Get-Gpo -all | ? {$_.displayName -like $GPOTARGET }).DisplayName) # cycle through each one foreach ($gpo in $AllGPOnames){ # if you found this script online, below is where you would change the "AGPM archive account info" set-gppermissions -name $gpo -TargetName "YOURDOMAN\YOURSERVICEACCOUNT" -TargetType user -PermissionLevel GpoEditDeleteModifySecurity set-gppermissions -name $gpo -TargetName "YOURDOMAIN\Domain Admins" -TargetType group -PermissionLevel GpoEditDeleteModifySecurity } # now set owner #Script to change stale or existing owner of GPO using AD DACL modules # ref: https://gallery.technet.microsoft.com/scriptcenter/Script-to-Edit-Owner-on-bbba3562 $OwnerNew = "YOURSERVICEACCOUNT" #Name of the Object user or group to be updated $GPOName = $GPOTARGET #GPO to be updated, This field accepts wildcards, "*" updates all GPO #Get all GPOs, filter if required $AllGPO = Get-GPO -All | ?{$_.DisplayName -like $GPOName} #$AllGPO = Get-GPO -All "" "GPO Name"+" "+ "OwnerBefore"+" "+ "OwnerAfter" "--------"+" "+ "-----------"+" "+ "----------" foreach ($gp in $AllGPO){ #"GPO Name: " + $gp.DisplayName #Get the GUID and add wild* #Get-GPO "TestGPO" $gpId = "*"+($gp).Id+"*" #Store the GPO AD Object in a variable $Gpo1 = get-adobject -Filter {Name -like $gpId} #Store the new Owner in a variable as well (Note changes for group and user accounts) #$Ownr = New-Object System.Security.Principal.SecurityIdentifier (Get-ADGroup "Domain Admins").SID #$Ownr = New-Object System.Security.Principal.SecurityIdentifier (Get-ADUser "USer1").SID #Generic Cmdlet to get User or Group $Ownr = New-Object System.Security.Principal.SecurityIdentifier (Get-ADObject -Filter {Name -like $OwnerNew} -Properties objectSid).objectSid #$Ownr = New-Object System.Security.Principal.SecurityIdentifier (Get-ADObject -Filter {Name -like "User1"} -Properties objectSid).objectSid #Copy the DACL for the GPO object to be modified in a variable $Acl = Get-ACL -Path "ad:$($Gpo1.DistinguishedName)" #Validate the currect owner (- can be skipped in when in a script) #"Before:" $aclBefore = $Acl.GetOwner([System.Security.Principal.NTAccount]).Value #Edit Owner on a GPO using Powershell to new Owner $Acl.SetOwner($Ownr) #Note changes are not yet commited, we have made changes only to the variable data not the actual object #"Ready:" #$Acl.Owner #Commit the changes on the variable to the -Path actual object Set-ACL -Path "ad:$($Gpo1.DistinguishedName)" -ACLObject $Acl #"After:" #Get actual data, not from the old variable to confirm change has been made: $aclafter = (Get-ACL -Path "ad:$($Gpo1.DistinguishedName)").Owner $gp.DisplayName+" "+ $aclBefore+" "+ $aclafter } #Now add the GPO to the archive #more on this command at https://technet.microsoft.com/itpro/powershell/mdop/agpm/add-controlledgpo foreach ($gp in $AllGPO){ Add-ControlledGPO $gp } # let person know when script finished, and they need to wait for it to propagate write-host "" write-host "this script finshed:" get-date write-host "" write-host "THIS MAY TAKE UP TO 15 MINUTES TO FINISH" -ForegroundColor Red write-host ""
Subscribe to:
Posts (Atom)