Documentation
¶
Overview ¶
Package maz is a library of functions for interacting with essential Azure APIs via REST calls. Currently it supports two APIs, the Azure Resource Management (ARM) API and the MS Graph API, but can be extended to support additional APIs. This package obviously also includes code to get an Azure JWT token using the MSAL library, to then use against either the 2 currently supported Azure APIs.
Index ¶
- Constants
- Variables
- func AdRolesCountAzure(z *Config) int64
- func AdRolesCountLocal(z *Config) int64
- func AddAppSpSecret(t, id, displayName, expiry string, z *Config)
- func ApiCall(method, apiUrl string, z *Config, payload jsonT, params strMapT, verbose bool) (result jsonT, rsc int, err error)
- func ApiDelete(apiUrl string, z *Config, params strMapT) (result jsonT, rsc int, err error)
- func ApiDeleteDebug(apiUrl string, z *Config, params strMapT) (result jsonT, rsc int, err error)
- func ApiErrorCheck(method, apiUrl, caller string, r jsonT)
- func ApiGet(apiUrl string, z *Config, params strMapT) (result jsonT, rsc int, err error)
- func ApiGetDebug(apiUrl string, z *Config, params strMapT) (result jsonT, rsc int, err error)
- func ApiPatch(apiUrl string, z *Config, payload jsonT, params strMapT) (result jsonT, rsc int, err error)
- func ApiPatchDebug(apiUrl string, z *Config, payload jsonT, params strMapT) (result jsonT, rsc int, err error)
- func ApiPost(apiUrl string, z *Config, payload jsonT, params strMapT) (result jsonT, rsc int, err error)
- func ApiPostDebug(apiUrl string, z *Config, payload jsonT, params strMapT) (result jsonT, rsc int, err error)
- func ApiPut(apiUrl string, z *Config, payload jsonT, params strMapT) (result jsonT, rsc int, err error)
- func ApiPutDebug(apiUrl string, z *Config, payload jsonT, params strMapT) (result jsonT, rsc int, err error)
- func CompareSpecfileToAzure(filePath string, z *Config)
- func CreateAppSpByName(force bool, displayName string, z *Config) error
- func CreateAzRoleAssignment(x map[string]interface{}, z *Config)
- func CreateSkeletonFile(t string)
- func DecodeJwtToken(tokenString string)
- func DeleteAppSpByIdentifier(force bool, identifier string, z *Config)
- func DeleteAzObject(force bool, specifier string, z *Config)
- func DeleteAzRoleAssignmentByFqid(fqid string, z *Config) map[string]interface{}
- func DeleteAzRoleDefinitionByFqid(fqid string, z *Config) map[string]interface{}
- func DeleteDirObject(opts *Options, z *Config) error
- func DeleteDirObjectInAzure(t, id string, z *Config) error
- func DiffLists(list1, list2 []interface{}) (added, removed []interface{}, same bool)
- func DiffRoleDefinitionSpecfileVsAzure(a, b map[string]interface{}, z *Config)
- func DumpLoginValues(z *Config)
- func FetchDirObjectsDelta(apiUrl string, z *Config, verbose bool) (deltaSet AzureObjectList, deltaLinkMap AzureObject)
- func FindAzObjectsById(id string, z *Config) (list []interface{})
- func FindObjectOld(objSet []interface{}, id string) map[string]interface{}
- func GetAzAdRoleById(id string, z *Config) map[string]interface{}
- func GetAzAdRoles(z *Config, verbose bool) (list []interface{})
- func GetAzAllPages(apiUrl string, z *Config) (list []interface{})
- func GetAzMgGroups(z *Config) (list []interface{})
- func GetAzObjectById(t, id string, z *Config) (x map[string]interface{})
- func GetAzObjects(apiUrl string, z *Config, verbose bool) (deltaSet []interface{}, deltaLinkMap map[string]interface{})
- func GetAzRbacScopes(z *Config) (scopes []string)
- func GetAzRoleAssignmentById(id string, z *Config) map[string]interface{}
- func GetAzRoleAssignmentByObject(x map[string]interface{}, z *Config) (y map[string]interface{})
- func GetAzRoleAssignments(z *Config, verbose bool) (list []interface{})
- func GetAzRoleDefinitionById(id string, z *Config) map[string]interface{}
- func GetAzRoleDefinitionByName(roleName string, z *Config) (y map[string]interface{})
- func GetAzRoleDefinitionByObject(x map[string]interface{}, z *Config) (y map[string]interface{})
- func GetAzRoleDefinitions(z *Config, verbose bool) (list []interface{})
- func GetAzSubscriptionById(id string, z *Config) map[string]interface{}
- func GetAzSubscriptions(z *Config) (list []interface{})
- func GetAzSubscriptionsIds(z *Config) (scopes []string)
- func GetAzUserById(id string, z *Config) map[string]interface{}
- func GetAzUsers(z *Config, verbose bool) (list []interface{})
- func GetCachedObjects(cacheFile string) (cachedList []interface{})
- func GetDirObjectIdMap(t string, z *Config) map[string]string
- func GetIdMapMgGroups(z *Config) (nameMap map[string]string)
- func GetIdMapRoleDefs(z *Config) (nameMap map[string]string)
- func GetIdMapSubs(z *Config) (nameMap map[string]string)
- func GetIdMapUsers(z *Config) (nameMap map[string]string)
- func GetMatchingAdRoles(filter string, force bool, z *Config) (list []interface{})
- func GetMatchingMgGroups(filter string, force bool, z *Config) (list []interface{})
- func GetMatchingRoleAssignments(filter string, force bool, z *Config) (list []interface{})
- func GetMatchingRoleDefinitions(filter string, force bool, z *Config) (list []interface{})
- func GetMatchingSubscriptions(filter string, force bool, z *Config) (list []interface{})
- func GetMatchingUsers(filter string, force bool, z *Config) (list []interface{})
- func GetObjectFromFile(filePath string) (formatType, t string, specfileObj map[string]interface{})
- func GetObjects(t, filter string, force bool, z *Config) (list []interface{})
- func GetTokenByCredentials(scopes []string, z *Config) (token string, err error)
- func GetTokenInteractively(scopes []string, z *Config) (token string, err error)
- func MergeAzureObjects(newObj, existingObj AzureObject)
- func MgGroupCountAzure(z *Config) int64
- func MgGroupCountLocal(z *Config) int64
- func MgType(typeIn string) string
- func NormalizeCache(baseSet, deltaSet []interface{}) (list []interface{})
- func ObjectCountAzure(t string, z *Config) int64
- func ObjectCountLocal(t string, z *Config) int64
- func PrintAdRole(x map[string]interface{}, z *Config)
- func PrintApiErrMsg(msg string)
- func PrintApp(x AzureObject, z *Config)
- func PrintAppRoleAssignmentsOthers(appRoleAssignments []interface{}, z *Config)
- func PrintAppRoleAssignmentsSp(roleNameMap map[string]string, appRoleAssignments []interface{})
- func PrintCertificateList(certificates []interface{})
- func PrintCountStatus(z *Config)
- func PrintCountStatusAppsAndSps(z *Config)
- func PrintCountStatusGroups(z *Config)
- func PrintGroup(x AzureObject, z *Config)
- func PrintHeaders(headers http.Header)
- func PrintMatching(printFormat, t, specifier string, z *Config)
- func PrintMemberOfs(t string, memberOf []interface{})
- func PrintMgChildren(indent int, children []interface{})
- func PrintMgGroup(x map[string]interface{})
- func PrintMgTree(z *Config)
- func PrintObject(t string, x map[string]interface{}, z *Config)
- func PrintObjectById(id string, z *Config)
- func PrintOwners(owners []interface{})
- func PrintPags(z *Config)
- func PrintParams(params url.Values)
- func PrintRoleAssignment(x map[string]interface{}, z *Config)
- func PrintRoleAssignmentReport(z *Config)
- func PrintRoleDefinition(x map[string]interface{}, z *Config)
- func PrintSecretList(secretsList []interface{})
- func PrintSp(x AzureObject, z *Config)
- func PrintStringMapColor(strMap map[string]string)
- func PrintSubscription(x map[string]interface{})
- func PrintTersely(t string, object interface{})
- func PrintUser(x map[string]interface{}, z *Config)
- func RemoveAppSpSecret(t, id, keyId string, force bool, z *Config)
- func RemoveCacheFile(t string, z *Config)
- func RemoveCacheFiles(t string, z *Config) error
- func RenameAppSp(force bool, identifier, newName string, z *Config)
- func RenameDirObject(opts *Options, z *Config)
- func RoleAssignmentsCountAzure(z *Config) int64
- func RoleAssignmentsCountLocal(z *Config) int64
- func RoleDefinitionCountAzure(z *Config) (builtin, custom int64)
- func RoleDefinitionCountLocal(z *Config) (builtin, custom int64)
- func SaveFileBinaryList(filePath string, data AzureObjectList, perm os.FileMode, compress bool) error
- func SaveFileBinaryObject(filePath string, data AzureObject, perm os.FileMode) error
- func SetupApiTokens(z *Config)
- func SetupAutomatedLogin(z *Config)
- func SetupCredentials(z *Config)
- func SetupInterativeLogin(z *Config)
- func SpsCountAzure(z *Config) (native, others int64)
- func SpsCountLocal(z *Config) (native, others int64)
- func SubsCountAzure(z *Config) int64
- func SubsCountLocal(z *Config) int64
- func SyncDirObjectsWithAzure(t string, cache *Cache, z *Config, verbose bool)
- func TokenValid(tokenString string) bool
- func UpdateCacheIfNeeded(t string, cache *Cache, force bool, z *Config)
- func UpdateDirObject(force bool, id string, obj AzureObject, t string, z *Config)
- func UpdateDirObjectInAzure(t, id string, obj AzureObject, z *Config) error
- func UpsertAppSpFromFile(force bool, filePath string, z *Config)
- func UpsertAzObject(force bool, filePath string, z *Config)
- func UpsertAzRoleDefinition(force bool, x map[string]interface{}, z *Config)
- func UpsertGroupFromArgs(opts *Options, z *Config)
- func UpsertGroupFromFile(opts *Options, z *Config)
- func UsersCountAzure(z *Config) int64
- func UsersCountLocal(z *Config) int64
- type AzureObject
- func CheckAppSpExistence(identifier string, z *Config) (app, sp AzureObject, code int)
- func CreateDirObject(force bool, obj AzureObject, t string, z *Config) (AzureObject, error)
- func CreateDirObjectInAzure(t string, obj AzureObject, z *Config) (AzureObject, error)
- func GetObjectFromAzureById(t, id string, z *Config) AzureObject
- func LoadFileBinaryObject(filePath string) (AzureObject, error)
- func PreFetchAzureObject(t, identifier string, z *Config) (x AzureObject)
- type AzureObjectList
- func FilterObjects(data AzureObjectList, filter string) AzureObjectList
- func GetMatchingObjects(t, filter string, force bool, z *Config) AzureObjectList
- func GetObjectFromAzureByName(t, displayName string, z *Config) AzureObjectList
- func LoadFileBinaryList(filePath string, compressed bool) (AzureObjectList, error)
- func NewList() AzureObjectList
- func (list *AzureObjectList) Add(obj AzureObject)
- func (list *AzureObjectList) Delete(criteria AzureObject) bool
- func (list *AzureObjectList) DeleteById(targetId string) bool
- func (list *AzureObjectList) DeleteByName(targetName string) bool
- func (list AzureObjectList) Exists(criteria AzureObject) bool
- func (list AzureObjectList) ExistsById(targetId string) bool
- func (list AzureObjectList) ExistsByName(targetName string) bool
- func (list AzureObjectList) Find(criteria AzureObject) *AzureObject
- func (list AzureObjectList) FindById(targetId string) *AzureObject
- func (list AzureObjectList) FindByName(targetName string) *AzureObject
- func (list *AzureObjectList) Replace(newObj AzureObject) bool
- type Bundle
- type Cache
- func (c *Cache) Age() int64
- func (c *Cache) Count() int64
- func (c *Cache) Delete(id string) error
- func (c *Cache) Erase() error
- func (c *Cache) Load() error
- func (c *Cache) LoadDeltaLink() (AzureObject, error)
- func (c *Cache) Normalize(t string, deltaSet AzureObjectList)
- func (c *Cache) Save() error
- func (c *Cache) SaveDeltaLink(deltaLinkMap AzureObject) error
- func (c *Cache) Upsert(obj AzureObject) error
- type Config
- func (m *Config) AddAzHeader(key, value string) *Config
- func (m *Config) AddMgHeader(key, value string) *Config
- func (m *Config) SetInteractiveMode(interactive bool) *Config
- func (m *Config) SetTenantCredentials(tenantID, clientID, clientSecret string) *Config
- func (m *Config) SetUsername(username string) *Config
- func (m *Config) Validate() error
- type Options
- func (a *Options) Count() int
- func (a *Options) Get(key string) (interface{}, bool)
- func (a *Options) GetBool(key string) (bool, bool)
- func (a *Options) GetInt(key string) (int, bool)
- func (a *Options) GetString(key string) (string, bool)
- func (a *Options) Set(key string, value interface{}) *Options
- func (a *Options) Validate(requiredKeys []string) error
- type TokenCache
Constants ¶
const ( NeitherExists = iota // 0: Neither App nor SP exists OnlySPExists // 1: Only SP exists OnlyAppExists // 2: Only App exists BothExist // 3: Both App and SP exist )
const ( ConstAuthUrl = "https://login.microsoftonline.com/" ConstMgUrl = "https://graph.microsoft.com" ConstAzUrl = "https://management.azure.com" ConstAzPowerShellClientId = "1950a258-227b-4e31-a9cf-717495945fc2" // 'Microsoft Azure PowerShell' ClientId ConstCacheFileExtension = "gz" ConstMgCacheFileAgePeriod = 1800 // Half hour ConstAzCacheFileAgePeriod = 86400 // One day )
Variables ¶
var ( CacheSuffix = map[string]string{ "d": "_res-role-defs", "a": "_res-role-assgns", "s": "_res-subs", "mg": "_res-mgmt-groups", "u": "_dir-users", "g": "_dir-groups", "sp": "_dir-sps", "ap": "_dir-apps", "ad": "_dir-roles", } ApiEndpoint = map[string]string{ "d": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions", "a": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleAssignments", "s": "/subscriptions", "mg": "/providers/Microsoft.Management/managementGroups", "u": "/v1.0/users", "g": "/v1.0/groups", "sp": "/v1.0/servicePrincipals", "ap": "/v1.0/applications", "ad": "/v1.0/roleDefinitions", } MazObjName = map[string]string{ "d": "resource RBAC role definition", "a": "resource RBAC role assignment", "s": "resource subscription", "mg": "resource management group", "u": "directory user", "g": "directory group", "sp": "directory service principal", "ap": "directory application", "ad": "directory role definition", } )
Functions ¶
func AdRolesCountAzure ¶
Returns count of Azure AD directory role entries in current tenant
func AdRolesCountLocal ¶
Returns count of Azure AD directory role entries in local cache file
func AddAppSpSecret ¶
Adds a new secret to the given App or SP
func ApiCall ¶
func ApiCall(method, apiUrl string, z *Config, payload jsonT, params strMapT, verbose bool) (result jsonT, rsc int, err error)
Makes API calls and returns JSON object, Response StatusCode, and error. For a more clear explanation of how to interpret the JSON responses see https://eager.io/blog/go-and-json/ This function is the cornerstone of the maz package, extensively handling all API interactions.
func ApiDeleteDebug ¶
ApiCall alias to do a DELETE with debugging on
func ApiErrorCheck ¶
func ApiErrorCheck(method, apiUrl, caller string, r jsonT)
Prints useful error information if they occur
func ApiGetDebug ¶
ApiCall alias to do a GET with debugging on
func ApiPatch ¶
func ApiPatch(apiUrl string, z *Config, payload jsonT, params strMapT) (result jsonT, rsc int, err error)
ApiCall alias to do a PATCH
func ApiPatchDebug ¶
func ApiPatchDebug(apiUrl string, z *Config, payload jsonT, params strMapT) (result jsonT, rsc int, err error)
ApiCall alias to do a PATCH with debugging on
func ApiPost ¶
func ApiPost(apiUrl string, z *Config, payload jsonT, params strMapT) (result jsonT, rsc int, err error)
ApiCall alias to do a POST
func ApiPostDebug ¶
func ApiPostDebug(apiUrl string, z *Config, payload jsonT, params strMapT) (result jsonT, rsc int, err error)
ApiCall alias to do a POST with debugging on
func ApiPut ¶
func ApiPut(apiUrl string, z *Config, payload jsonT, params strMapT) (result jsonT, rsc int, err error)
ApiCall alias to do a PUT
func ApiPutDebug ¶
func ApiPutDebug(apiUrl string, z *Config, payload jsonT, params strMapT) (result jsonT, rsc int, err error)
ApiCall alias to do a PUT with debugging on
func CompareSpecfileToAzure ¶
Compares object in specfile to what is in Azure
func CreateAppSpByName ¶
Creates an App/SP object pair by name, if they don't already exist.
func CreateAzRoleAssignment ¶
Creates an RBAC role assignment as defined by give x object
func CreateSkeletonFile ¶
func CreateSkeletonFile(t string)
Creates specfile skeleton/scaffold files
func DecodeJwtToken ¶
func DecodeJwtToken(tokenString string)
Decode and dump token string, trusting without formal verification and validation
func DeleteAppSpByIdentifier ¶
Deletes Azure AppSP pair from given command-line arguments.
func DeleteAzObject ¶
Deletes object based on string specifier (currently only supports roleDefinitions or Assignments) String specifier can be either of 3: UUID, specfile, or displaName (only for roleDefinition) 1) Search Azure by given identifier; 2) Grab object's Fully Qualified Id string; 3) Print and prompt for confirmation; 4) Delete or abort
func DeleteAzRoleAssignmentByFqid ¶
Deletes an RBAC role assignment by its fully qualified object Id Example of a fully qualified Id string (note it's one long line):
/providers/Microsoft.Management/managementGroups/33550b0b-2929-4b4b-adad-cccc66664444 \ /providers/Microsoft.Authorization/roleAssignments/5d586a7b-3f4b-4b5c-844a-3fa8efe49ab3
func DeleteAzRoleDefinitionByFqid ¶
Deletes an RBAC role definition object by its fully qualified object Id Example of a fully qualified Id string:
"/providers/Microsoft.Authorization/roleDefinitions/50a6ff7c-3ac5-4acc-b4f4-9a43aee0c80f"
func DeleteDirObject ¶
Deletes directory object of given type in Azure, with a confirmation prompt.
func DeleteDirObjectInAzure ¶
Deletes directory object of given type in Azure, and updates local cache.
func DiffLists ¶
func DiffLists(list1, list2 []interface{}) (added, removed []interface{}, same bool)
Compares two list of strings and returns added and removed items, and whether or not the lists are the same. Note they come in as []interface{} but we know they are strings. This is a special function for handling Azure RBAC role definition action differences.
func DiffRoleDefinitionSpecfileVsAzure ¶
Prints differences between role definition in Specfile (a) vs what is in Azure (b). The calling function must ensure that both a & b are valid role definition objects from a specfile and from Azure. A generic DiffJsonObject() function would probably be better for this.
func FetchDirObjectsDelta ¶
func FetchDirObjectsDelta(apiUrl string, z *Config, verbose bool) (deltaSet AzureObjectList, deltaLinkMap AzureObject)
Retrieves Azure directory object deltas. Returns the set of new or updated items, and a deltaLink for running the next future Azure query. Implements the code logic pattern described at https://docs.microsoft.com/en-us/graph/delta-query-overview
func FindAzObjectsById ¶
Returns list of Azure objects with this UUID. We are saying a list because 1) the UUID could be an appId shared by an app and an SP, or 2) there could be UUID collisions with multiple objects potentially sharing the same UUID. Only checks for the maz package limited set of Azure object types.
func FindObjectOld ¶
Find JSON object with given ID in slice
func GetAzAdRoleById ¶
Gets Azure AD role definition by Object UUID, with all attributes
func GetAzAdRoles ¶
Gets all directory role definitions from Azure and sync to local cache. Shows progress if verbose = true
func GetAzAllPages ¶
Returns all Azure pages for given API URL call
func GetAzMgGroups ¶
func GetAzMgGroups(z *Config) (list []interface{})
Gets all management groups in current Azure tenant, and saves them to local cache file
func GetAzObjectById ¶
Retrieves Azure object by Object UUID
func GetAzObjects ¶
func GetAzRbacScopes ¶
Gets all scopes in the Azure tenant RBAC hierarchy: Tenant Root Group and all management groups, plus all subscription scopes
func GetAzRoleAssignmentById ¶
Gets RBAC role assignment by its Object UUID. Unfortunately we have to iterate through the entire tenant scope hierarchy, which can take time.
func GetAzRoleAssignmentByObject ¶
Gets Azure resource RBAC role assignment object by matching given objects: roleId, principalId, and scope (the 3 parameters which make a role assignment unique)
func GetAzRoleAssignments ¶
Gets all role assignments objects in current Azure tenant and save them to local cache file. Option to be verbose (true) or quiet (false), since it can take a while. References:
https://learn.microsoft.com/en-us/azure/role-based-access-control/role-assignments-list-rest https://learn.microsoft.com/en-us/rest/api/authorization/role-assignments/list-for-subscription
func GetAzRoleDefinitionById ¶
Gets role definition by Object Id. Unfortunately we have to iterate through the entire tenant scope hierarchy, which can take time.
func GetAzRoleDefinitionByName ¶
Gets role definition by displayName See https://learn.microsoft.com/en-us/rest/api/authorization/role-definitions/list
func GetAzRoleDefinitionByObject ¶
Gets role definition object if it exists exactly as x object (as per essential attributes). Matches on: displayName and assignableScopes
func GetAzRoleDefinitions ¶
Gets all role definitions in current Azure tenant and save them to local cache file Option to be verbose (true) or quiet (false), since it can take a while. References:
https://learn.microsoft.com/en-us/azure/role-based-access-control/role-definitions-list https://learn.microsoft.com/en-us/rest/api/authorization/role-definitions/list
func GetAzSubscriptionById ¶
Gets specific Azure subscription by Object UUID
func GetAzSubscriptions ¶
func GetAzSubscriptions(z *Config) (list []interface{})
Gets all subscription in current Azure tenant, and saves them to local cache file
func GetAzSubscriptionsIds ¶
Gets all subscription full IDs, i.e. "/subscriptions/UUID", which are commonly used as scopes for Azure resource RBAC role definitions and assignments
func GetAzUserById ¶
Gets Azure user object by Object UUID, with all attributes
func GetAzUsers ¶
Gets all users from Azure and sync to local cache. Show progress if verbose = true
func GetCachedObjects ¶
func GetCachedObjects(cacheFile string) (cachedList []interface{})
Retrieves locally cached list of objects in given cache file
func GetDirObjectIdMap ¶
Returns an id:name map of objects of the given type.
func GetIdMapMgGroups ¶
Returns id:name map of management groups
func GetIdMapRoleDefs ¶
Returns id:name map of all RBAC role definitions
func GetIdMapSubs ¶
Returns id:name map of all subscriptions
func GetIdMapUsers ¶
Returns an id:name map of all users
func GetMatchingAdRoles ¶
Gets all AD roles matching on 'filter'. Returns entire list if filter is empty ""
func GetMatchingMgGroups ¶
Gets all Azure management groups matching on 'filter'. Returns entire list if filter is empty ""
func GetMatchingRoleAssignments ¶
Gets all RBAC role assignments matching on 'filter'. Return entire list if filter is empty ""
func GetMatchingRoleDefinitions ¶
Gets all role definitions matching on 'filter'. Returns entire list if filter is empty ""
func GetMatchingSubscriptions ¶
Gets all Azure subscriptions matching on 'filter'. Returns entire list if filter is empty ""
func GetMatchingUsers ¶
Gets all users matching on 'filter'. Returns entire list if filter is empty ""
func GetObjectFromFile ¶
Processes given specfile and returns the specfile format type, the maz object letter string type, and the actual object.
func GetObjects ¶
Generic function to get objects of type t whose attributes match on filter. If filter is the "" empty string return ALL of the objects of this type.
func GetTokenByCredentials ¶
Initiates an Azure JWT token acquisition with provided parameters, using a Client ID plus a Client Secret. This is the 'Confidential' app auth flow and is documented at: https://github.com/AzureAD/microsoft-authentication-library-for-go/blob/dev/apps/confidential/confidential.go
func GetTokenInteractively ¶
Initiates an Azure JWT token acquisition with provided parameters, using a Username and a browser pop up window. This is the 'Public' app auth flow as documented at: https://github.com/AzureAD/microsoft-authentication-library-for-go/blob/dev/apps/public/public.go
func MergeAzureObjects ¶
func MergeAzureObjects(newObj, existingObj AzureObject)
Recursively merges the keys from AzureObject a into b. Existing object b attributes are overwritten if there's a conflict.
func MgGroupCountAzure ¶
Returns count of management groups in Azure
func MgGroupCountLocal ¶
Returns count of management group objects in local cache file
func NormalizeCache ¶
func NormalizeCache(baseSet, deltaSet []interface{}) (list []interface{})
Builds JSON mergeSet from deltaSet, and builds and returns the list of deleted IDs
func ObjectCountAzure ¶
Returns the number of objects of given type in the Azure tenant.
func ObjectCountLocal ¶
Returns the number of object entries in the local cache file for the given type.
func PrintAdRole ¶
Prints Azure AD role definition object in YAML-like format
func PrintApiErrMsg ¶
func PrintApiErrMsg(msg string)
Prints API error messages in 2 parts separated by a newline: A header, then a JSON byte slice
func PrintApp ¶
func PrintApp(x AzureObject, z *Config)
Prints application object in YAML-like format
func PrintAppRoleAssignmentsOthers ¶
func PrintAppRoleAssignmentsOthers(appRoleAssignments []interface{}, z *Config)
Prints appRoleAssignments for other types of objects (Users and Groups)
func PrintAppRoleAssignmentsSp ¶
Prints appRoleAssignments for given service principal (SP)
func PrintCertificateList ¶
func PrintCertificateList(certificates []interface{})
Prints certificate list stanza for Apps and Sps
func PrintCountStatus ¶
func PrintCountStatus(z *Config)
Prints a status count of all AZ and MG objects that are in Azure, and the local files.
func PrintCountStatusAppsAndSps ¶
func PrintCountStatusAppsAndSps(z *Config)
func PrintCountStatusGroups ¶
func PrintCountStatusGroups(z *Config)
func PrintGroup ¶
func PrintGroup(x AzureObject, z *Config)
Print directory group object in YAML-like format
func PrintHeaders ¶
Prints HTTP headers specific to API calls. Simplifies ApiCall function.
func PrintMatching ¶
Prints all objects that match on given specifier
func PrintMemberOfs ¶
func PrintMemberOfs(t string, memberOf []interface{})
Prints all memberOf entries
func PrintMgChildren ¶
func PrintMgChildren(indent int, children []interface{})
Recursively print management groups and all its children MGs and subscriptions
func PrintMgGroup ¶
func PrintMgGroup(x map[string]interface{})
Prints management group object in YAML-like format
func PrintMgTree ¶
func PrintMgTree(z *Config)
Gets current tenant management group tree, and recursively calls function PrintMgChildren() to print the hierarchy
func PrintObject ¶
Generic print object function
func PrintParams ¶
Prints HTTP parameters specific to API calls. Simplifies ApiCall function.
func PrintRoleAssignment ¶
Prints RBAC role definition object in YAML-like format
func PrintRoleAssignmentReport ¶
func PrintRoleAssignmentReport(z *Config)
Prints a human-readable report of all RBAC role assignments
func PrintRoleDefinition ¶
Prints role definition object in a YAML-like format
func PrintSecretList ¶
func PrintSecretList(secretsList []interface{})
Prints secret list stanza for App and SP objects
func PrintSp ¶
func PrintSp(x AzureObject, z *Config)
Prints service principal object in YAML-like format
func PrintStringMapColor ¶
Prints string map in YAML-like format, sorted, and in color
func PrintSubscription ¶
func PrintSubscription(x map[string]interface{})
Prints subscription object in YAML-like format
func PrintTersely ¶
func PrintTersely(t string, object interface{})
Prints this single object of type 't' tersely, with minimal attributes.
func RemoveAppSpSecret ¶
Removes a secret from the given App or SP object
func RemoveCacheFiles ¶
Removes cache files for a given type code and configuration. It ensures both the cache file and deltaLink file associated with the type are deleted.
func RenameAppSp ¶
Renames Azure App/SP pair
func RenameDirObject ¶
Renames directory object of given type in Azure.
func RoleAssignmentsCountAzure ¶
Calculates count of all role assignment objects in Azure
func RoleAssignmentsCountLocal ¶
Retrieves count of all role assignment objects in local cache file
func RoleDefinitionCountAzure ¶
Counts all role definition in Azure. Returns 2 lists: one of native custom roles, the other of built-in role
func RoleDefinitionCountLocal ¶
Dedicated role definition local cache counter able to discern if role is custom to native tenant or it's an Azure BuilIn role
func SaveFileBinaryList ¶
func SaveFileBinaryList(filePath string, data AzureObjectList, perm os.FileMode, compress bool) error
Serializes a slice of AzureObject objects into a gob binary file. The file is saved with the specified permissions, optionally compressed using Gzip.
func SaveFileBinaryObject ¶
func SaveFileBinaryObject(filePath string, data AzureObject, perm os.FileMode) error
Saves a single AzureObject as a gob binary file with specified permissions.
func SetupApiTokens ¶
func SetupApiTokens(z *Config)
Initializes the necessary global variables, acquires all API tokens, and sets them up for use.
func SetupAutomatedLogin ¶
func SetupAutomatedLogin(z *Config)
Sets up credentials file for client_id + secret login
func SetupCredentials ¶
func SetupCredentials(z *Config)
Gets credentials from OS environment variables (which take precedence), or from the credentials file.
func SetupInterativeLogin ¶
func SetupInterativeLogin(z *Config)
Sets up credentials file for interactive login
func SpsCountAzure ¶
Retrieves counts of SPs native to this Azure tenant, and all others.
func SpsCountLocal ¶
Retrieves counts of all SPs in local cache, 2 values: Native ones to this tenant, and all others.
func SubsCountAzure ¶
Returns count of all subscriptions in current Azure tenant
func SubsCountLocal ¶
Returns count of all subscriptions in local cache file
func SyncDirObjectsWithAzure ¶
Retrieves all directory objects of given type from Azure and syncs them to local cache. Shows progress if verbose = true.
func TokenValid ¶
Validates a JWT token *string* as defined in https://tools.ietf.org/html/rfc7519
func UpdateCacheIfNeeded ¶
Updates the local director object cache is needed
func UpdateDirObject ¶
func UpdateDirObject(force bool, id string, obj AzureObject, t string, z *Config)
Updates directory object of given type in Azure, with a confirmation prompt.
func UpdateDirObjectInAzure ¶
func UpdateDirObjectInAzure(t, id string, obj AzureObject, z *Config) error
Updates directory object of given type in Azure, and updates local cache.
func UpsertAppSpFromFile ¶
Creates or updates an Azure App/SP pair from given specfile.
func UpsertAzObject ¶
Creates or updates an Azure object based on given specfile
func UpsertAzRoleDefinition ¶
Creates or updates an RBAC role definition as defined by give x object
func UpsertGroupFromArgs ¶
Creates or updates an Azure directory group from given command-line arguments.
func UpsertGroupFromFile ¶
Creates or updates an Azure directory group from given specfile.
func UsersCountAzure ¶
Returns the number of entries in Azure tenant
func UsersCountLocal ¶
Returns the number of entries in local cache file
Types ¶
type AzureObject ¶
type AzureObject map[string]interface{} // Represents a single Azure JSON object
Basic types for this package
func CheckAppSpExistence ¶
func CheckAppSpExistence(identifier string, z *Config) (app, sp AzureObject, code int)
Checks to see whether the App and SP objects exist. Another preprocessing helper function.
func CreateDirObject ¶
func CreateDirObject(force bool, obj AzureObject, t string, z *Config) (AzureObject, error)
Creates directory object of given type in Azure, with a confirmation prompt.
func CreateDirObjectInAzure ¶
func CreateDirObjectInAzure(t string, obj AzureObject, z *Config) (AzureObject, error)
Creates directory object of given type in Azure, and updates local cache.
func GetObjectFromAzureById ¶
func GetObjectFromAzureById(t, id string, z *Config) AzureObject
Gets object of given type from Azure by id. Updates entry in local cache.
func LoadFileBinaryObject ¶
func LoadFileBinaryObject(filePath string) (AzureObject, error)
Reads a gob binary file and decodes it into an AzureObject.
func PreFetchAzureObject ¶
func PreFetchAzureObject(t, identifier string, z *Config) (x AzureObject)
Retrieves existing object from Azure by its ID or displayName. This is typically used as preprocessing for operations like renaming, deleting, or updating a group.
func (AzureObject) HasString ¶
func (obj AzureObject) HasString(filter string) bool
Checks if the filter string is found anywhere within the AzureObject. This method performs a recursive search.
func (AzureObject) TrimForCache ¶
func (obj AzureObject) TrimForCache(t string) (trimmed AzureObject)
Trims the AzureObject to retain only the fields needed for caching based on the type code.
type AzureObjectList ¶
type AzureObjectList []AzureObject // Represents a list of Azure JSON objects
func FilterObjects ¶
func FilterObjects(data AzureObjectList, filter string) AzureObjectList
Filter objects by matching any field to filter string.
func GetMatchingObjects ¶
func GetMatchingObjects(t, filter string, force bool, z *Config) AzureObjectList
Gets all objects of given type, matching on 'filter'. Returns the entire list if filter is empty "".
func GetObjectFromAzureByName ¶
func GetObjectFromAzureByName(t, displayName string, z *Config) AzureObjectList
Fetches objects of the given type from Azure by displayName. It returns a list of matching objects, accounting for the possibility of multiple objects with the same displayName.
func LoadFileBinaryList ¶
func LoadFileBinaryList(filePath string, compressed bool) (AzureObjectList, error)
Reads a gob binary file and decodes it into a slice of AzureObject. If the file is compressed, it decompresses it using Gzip before decoding.
func (*AzureObjectList) Add ¶
func (list *AzureObjectList) Add(obj AzureObject)
Add appends an AzureObject to the AzureObjectList.
func (*AzureObjectList) Delete ¶
func (list *AzureObjectList) Delete(criteria AzureObject) bool
Deletes an object from the list based on one or more field matches.
func (*AzureObjectList) DeleteById ¶
func (list *AzureObjectList) DeleteById(targetId string) bool
Deletes an object from the list by matching on its ID.
func (*AzureObjectList) DeleteByName ¶
func (list *AzureObjectList) DeleteByName(targetName string) bool
Deletes an object from the list by matching on its displayName.
func (AzureObjectList) Exists ¶
func (list AzureObjectList) Exists(criteria AzureObject) bool
Checks if an object exists in the list based on one or more field matches.
func (AzureObjectList) ExistsById ¶
func (list AzureObjectList) ExistsById(targetId string) bool
Checks if an object exists in the list by its ID.
func (AzureObjectList) ExistsByName ¶
func (list AzureObjectList) ExistsByName(targetName string) bool
Checks if an object exists in the list by its displayName.
func (AzureObjectList) Find ¶
func (list AzureObjectList) Find(criteria AzureObject) *AzureObject
Finds an object in the list based on one or more field matches and returns a pointer to it.
func (AzureObjectList) FindById ¶
func (list AzureObjectList) FindById(targetId string) *AzureObject
Finds an object in the list by its ID and returns a pointer to it.
func (AzureObjectList) FindByName ¶
func (list AzureObjectList) FindByName(targetName string) *AzureObject
Finds an object in the list by its displayName and returns a pointer to it.
func (*AzureObjectList) Replace ¶
func (list *AzureObjectList) Replace(newObj AzureObject) bool
Replaces an object in an AzureObjectList list by matching on id.
type Bundle ¶
type Bundle struct { ConfDir string // Directory where utility will store all its file CredsFile string TokenFile string TenantId string ClientId string ClientSecret string Interactive bool Username string AuthorityUrl string MgToken string // This and below to support MS Graph API MgHeaders map[string]string AzToken string // This and below to support Azure Resource Management API AzHeaders map[string]string }
Old configuration Bundle type. To be deprecated.
type Cache ¶
type Cache struct {
// contains filtered or unexported fields
}
Cache type
func GetCache ¶
Initializes a Cache instance for a given type. If the cache file exists, it loads the existing cache; otherwise, it creates a new one.
func (*Cache) Age ¶
Age returns the age of the cache file in seconds. If the file does not exist or is empty, it returns -1.
func (*Cache) Delete ¶
Removes an object by its ID from the cache and saves the updated cache to disk.
func (*Cache) LoadDeltaLink ¶
func (c *Cache) LoadDeltaLink() (AzureObject, error)
LoadDeltaLink loads the delta link from the file, if it exists and is valid.
func (*Cache) Normalize ¶
func (c *Cache) Normalize(t string, deltaSet AzureObjectList)
Merges the deltaSet with the current cache data.
func (*Cache) SaveDeltaLink ¶
func (c *Cache) SaveDeltaLink(deltaLinkMap AzureObject) error
SaveDeltaLink saves the provided delta link to the file.
func (*Cache) Upsert ¶
func (c *Cache) Upsert(obj AzureObject) error
type Config ¶
type Config struct { ConfDir string CredsFile string TokenFile string TenantId string ClientId string ClientSecret string Interactive bool Username string MgToken string MgHeaders map[string]string AzToken string AzHeaders map[string]string }
Config holds configuration and credentials for various APIs and the calling programs themselves.
func NewConfig ¶
func NewConfig() *Config
Constructs, initializes, and returns a pointer to a Config instance. The returned pointer can be used as a global configuration object to store credentials, tokens, and other API-related details for the application.
func (*Config) AddAzHeader ¶
Adds an Azure Resource Management API header.
func (*Config) AddMgHeader ¶
Adds a Microsoft Graph API header.
func (*Config) SetInteractiveMode ¶
Sets the interactive mode flag.
func (*Config) SetTenantCredentials ¶
Sets the credentials for the tenant.
func (*Config) SetUsername ¶
Sets the username.
type Options ¶
type Options struct {
// contains filtered or unexported fields
}
Options map type to facilitate calling functions with many variables.
type TokenCache ¶
type TokenCache struct {
// contains filtered or unexported fields
}
func (*TokenCache) Export ¶
func (t *TokenCache) Export(ctx context.Context, cache cache.Marshaler, hints cache.ExportHints) error
func (*TokenCache) Print ¶
func (t *TokenCache) Print() string
func (*TokenCache) Replace ¶
func (t *TokenCache) Replace(ctx context.Context, cache cache.Unmarshaler, hints cache.ReplaceHints) error