mirror of
https://github.com/BishopFox/cloudfox.git
synced 2026-11-07 09:56:01 -10:00
219 lines
7.8 KiB
Go
219 lines
7.8 KiB
Go
package internal
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
|
|
"github.com/Azure/azure-sdk-for-go/profiles/latest/authorization/mgmt/authorization"
|
|
"github.com/Azure/azure-sdk-for-go/profiles/latest/automation/mgmt/automation"
|
|
"github.com/Azure/azure-sdk-for-go/profiles/latest/compute/mgmt/compute"
|
|
"github.com/Azure/azure-sdk-for-go/profiles/latest/network/mgmt/network"
|
|
"github.com/Azure/azure-sdk-for-go/profiles/latest/resources/mgmt/resources"
|
|
"github.com/Azure/azure-sdk-for-go/profiles/latest/resources/mgmt/subscriptions"
|
|
"github.com/Azure/azure-sdk-for-go/profiles/latest/storage/mgmt/storage"
|
|
"github.com/Azure/azure-sdk-for-go/profiles/latest/web/mgmt/web"
|
|
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
|
|
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources"
|
|
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
|
|
"github.com/Azure/azure-sdk-for-go/services/graphrbac/1.6/graphrbac"
|
|
containerregistry "github.com/Azure/azure-sdk-for-go/services/preview/containerregistry/mgmt/2022-02-01-preview/containerregistry"
|
|
"github.com/Azure/go-autorest/autorest"
|
|
"github.com/Azure/go-autorest/autorest/azure/auth"
|
|
"github.com/BishopFox/cloudfox/globals"
|
|
)
|
|
|
|
func getAuthorizer(endpoint string) (autorest.Authorizer, error) {
|
|
auth, err := auth.NewAuthorizerFromCLIWithResource(endpoint)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to get client authorizer: %s", err)
|
|
}
|
|
return auth, nil
|
|
}
|
|
|
|
func GetTenantsClient() subscriptions.TenantsClient {
|
|
client := subscriptions.NewTenantsClient()
|
|
a, err := getAuthorizer(globals.AZ_RESOURCE_MANAGER_ENDPOINT)
|
|
if err != nil {
|
|
log.Fatalf("failed to get subscriptions client: %s", err)
|
|
}
|
|
client.Authorizer = a
|
|
client.AddToUserAgent(globals.CLOUDFOX_USER_AGENT)
|
|
return client
|
|
}
|
|
|
|
func GetSubscriptionsClient() subscriptions.Client {
|
|
client := subscriptions.NewClient()
|
|
a, err := getAuthorizer(globals.AZ_RESOURCE_MANAGER_ENDPOINT)
|
|
if err != nil {
|
|
log.Fatalf("failed to get subscriptions client: %s", err)
|
|
}
|
|
client.Authorizer = a
|
|
client.AddToUserAgent(globals.CLOUDFOX_USER_AGENT)
|
|
return client
|
|
}
|
|
|
|
func GetgraphRbacClient(tenantID string) graphrbac.DomainsClient {
|
|
client := graphrbac.NewDomainsClient(tenantID)
|
|
a, err := getAuthorizer(globals.AZ_GRAPH_ENDPOINT)
|
|
if err != nil {
|
|
log.Fatalf("failed to get azure active directory client: %s", err)
|
|
}
|
|
client.Authorizer = a
|
|
client.AddToUserAgent(globals.CLOUDFOX_USER_AGENT)
|
|
return client
|
|
}
|
|
|
|
func GetResourceGroupsClient(subscriptionID string) resources.GroupsClient {
|
|
client := resources.NewGroupsClient(subscriptionID)
|
|
a, err := getAuthorizer(globals.AZ_RESOURCE_MANAGER_ENDPOINT)
|
|
if err != nil {
|
|
log.Fatalf("failed to get resource groups client: %s", err)
|
|
}
|
|
client.Authorizer = a
|
|
client.AddToUserAgent(globals.CLOUDFOX_USER_AGENT)
|
|
return client
|
|
}
|
|
|
|
func GetAADUsersClient(tenantID string) graphrbac.UsersClient {
|
|
client := graphrbac.NewUsersClient(tenantID)
|
|
a, err := getAuthorizer(globals.AZ_GRAPH_ENDPOINT)
|
|
if err != nil {
|
|
log.Fatalf("failed to get azure active directory client: %s", err)
|
|
}
|
|
client.Authorizer = a
|
|
client.AddToUserAgent(globals.CLOUDFOX_USER_AGENT)
|
|
return client
|
|
}
|
|
|
|
func GetRoleAssignmentsClient(subscriptionID string) authorization.RoleAssignmentsClient {
|
|
client := authorization.NewRoleAssignmentsClient(subscriptionID)
|
|
a, err := getAuthorizer(globals.AZ_RESOURCE_MANAGER_ENDPOINT)
|
|
if err != nil {
|
|
log.Fatalf("failed to get role assignments client: %s", err)
|
|
}
|
|
client.Authorizer = a
|
|
client.AddToUserAgent(globals.CLOUDFOX_USER_AGENT)
|
|
return client
|
|
}
|
|
|
|
func GetRoleDefinitionsClient(subscriptionName string) authorization.RoleDefinitionsClient {
|
|
client := authorization.NewRoleDefinitionsClient(subscriptionName)
|
|
a, err := getAuthorizer(globals.AZ_RESOURCE_MANAGER_ENDPOINT)
|
|
if err != nil {
|
|
log.Fatalf("failed to get role definitions client: %s", err)
|
|
}
|
|
client.Authorizer = a
|
|
client.AddToUserAgent(globals.CLOUDFOX_USER_AGENT)
|
|
return client
|
|
}
|
|
|
|
func GetVirtualMachinesClient(subscriptionID string) compute.VirtualMachinesClient {
|
|
client := compute.NewVirtualMachinesClient(subscriptionID)
|
|
authorizer, err := getAuthorizer(globals.AZ_RESOURCE_MANAGER_ENDPOINT)
|
|
if err != nil {
|
|
log.Fatalf("failed to get compute client: %s", err)
|
|
}
|
|
client.Authorizer = authorizer
|
|
client.AddToUserAgent(globals.CLOUDFOX_USER_AGENT)
|
|
return client
|
|
}
|
|
|
|
func GetNICClient(subscriptionID string) network.InterfacesClient {
|
|
client := network.NewInterfacesClient(subscriptionID)
|
|
authorizer, err := getAuthorizer(globals.AZ_RESOURCE_MANAGER_ENDPOINT)
|
|
if err != nil {
|
|
log.Fatalf("failed to get nic client: %s", err)
|
|
}
|
|
client.Authorizer = authorizer
|
|
client.AddToUserAgent(globals.CLOUDFOX_USER_AGENT)
|
|
return client
|
|
}
|
|
|
|
func GetPublicIPClient(subscriptionID string) network.PublicIPAddressesClient {
|
|
client := network.NewPublicIPAddressesClient(subscriptionID)
|
|
authorizer, err := getAuthorizer(globals.AZ_RESOURCE_MANAGER_ENDPOINT)
|
|
if err != nil {
|
|
log.Fatalf("failed to get public ip client: %s", err)
|
|
}
|
|
client.Authorizer = authorizer
|
|
return client
|
|
}
|
|
|
|
func GetStorageClient(subscriptionID string) storage.AccountsClient {
|
|
client := storage.NewAccountsClient(subscriptionID)
|
|
a, err := getAuthorizer(globals.AZ_RESOURCE_MANAGER_ENDPOINT)
|
|
if err != nil {
|
|
log.Fatalf("failed to get storage client: %s", err)
|
|
}
|
|
client.Authorizer = a
|
|
client.AddToUserAgent(globals.CLOUDFOX_USER_AGENT)
|
|
return client
|
|
}
|
|
|
|
func GetContainerRegistriesClient(subscriptionID string) containerregistry.RegistriesClient {
|
|
client := containerregistry.NewRegistriesClient(subscriptionID)
|
|
a, err := getAuthorizer(globals.AZ_RESOURCE_MANAGER_ENDPOINT)
|
|
if err != nil {
|
|
log.Fatalf("failed to get container registries client: %s", err)
|
|
}
|
|
client.Authorizer = a
|
|
client.AddToUserAgent(globals.CLOUDFOX_USER_AGENT)
|
|
return client
|
|
}
|
|
|
|
func GetWebAppsClient(subscriptionID string) web.AppsClient {
|
|
client := web.NewAppsClient(subscriptionID)
|
|
a, err := getAuthorizer(globals.AZ_RESOURCE_MANAGER_ENDPOINT)
|
|
if err != nil {
|
|
log.Fatalf("failed to get web apps client: %s", err)
|
|
}
|
|
client.Authorizer = a
|
|
client.AddToUserAgent(globals.CLOUDFOX_USER_AGENT)
|
|
return client
|
|
}
|
|
|
|
func GetAutomationClients(subscriptionID string) (automation.AccountClient, automation.RunbookClient, automation.CredentialClient, automation.WebhookClient) {
|
|
authorizer, err := getAuthorizer(globals.AZ_RESOURCE_MANAGER_ENDPOINT)
|
|
if err != nil {
|
|
log.Fatalf("failed to get automation clients: %s", err)
|
|
}
|
|
accounts := automation.NewAccountClient(subscriptionID)
|
|
runbooks := automation.NewRunbookClient(subscriptionID)
|
|
credentials := automation.NewCredentialClient(subscriptionID)
|
|
webhooks := automation.NewWebhookClient(subscriptionID)
|
|
accounts.Authorizer = authorizer
|
|
runbooks.Authorizer = authorizer
|
|
credentials.Authorizer = authorizer
|
|
webhooks.Authorizer = authorizer
|
|
accounts.AddToUserAgent(globals.CLOUDFOX_USER_AGENT)
|
|
runbooks.AddToUserAgent(globals.CLOUDFOX_USER_AGENT)
|
|
credentials.AddToUserAgent(globals.CLOUDFOX_USER_AGENT)
|
|
webhooks.AddToUserAgent(globals.CLOUDFOX_USER_AGENT)
|
|
return accounts, runbooks, credentials, webhooks
|
|
}
|
|
|
|
func GetStorageAccountBlobClient(tenantID, storageAccountName string) (*azblob.Client, error) {
|
|
serviceURL := fmt.Sprintf("https://%s.blob.core.windows.net/", storageAccountName)
|
|
cred, err := azidentity.NewAzureCLICredential(&azidentity.AzureCLICredentialOptions{TenantID: tenantID})
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
}
|
|
client, err := azblob.NewClient(serviceURL, cred, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return client, nil
|
|
}
|
|
|
|
func GetARMresourcesClient(tenantID, subscriptionID string) *armresources.Client {
|
|
cred, err := azidentity.NewAzureCLICredential(&azidentity.AzureCLICredentialOptions{TenantID: tenantID})
|
|
if err != nil {
|
|
log.Fatalf("failed to get credentials from Azure CLI: %s", err)
|
|
}
|
|
client, err := armresources.NewClient(subscriptionID, cred, nil)
|
|
if err != nil {
|
|
log.Fatalf("failed to get ARM resources client: %s", err)
|
|
}
|
|
return client
|
|
}
|