Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(Azure): add new check for private DNS zones #1455

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 32 additions & 6 deletions modules/azure/client_factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import (

"github.com/Azure/azure-sdk-for-go/profiles/latest/frontdoor/mgmt/frontdoor"
"github.com/Azure/azure-sdk-for-go/profiles/latest/mysql/mgmt/mysql"
"github.com/Azure/azure-sdk-for-go/profiles/latest/privatedns/mgmt/privatedns"
"github.com/Azure/azure-sdk-for-go/profiles/latest/resources/mgmt/resources"
"github.com/Azure/azure-sdk-for-go/profiles/latest/sql/mgmt/sql"
"github.com/Azure/azure-sdk-for-go/profiles/preview/cosmos-db/mgmt/documentdb"
Expand Down Expand Up @@ -176,7 +177,7 @@ func CreateKeyVaultManagementClientE(subscriptionID string) (*kvmng.VaultsClient
return nil, err
}

//create keyvault management clinet
// create keyvault management clinet
vaultClient := kvmng.NewVaultsClientWithBaseURI(baseURI, subscriptionID)

return &vaultClient, nil
Expand Down Expand Up @@ -220,7 +221,6 @@ func CreateStorageBlobContainerClientE(subscriptionID string) (*storage.BlobCont

blobContainerClient := storage.NewBlobContainersClientWithBaseURI(baseURI, subscriptionID)
authorizer, err := NewAuthorizer()

if err != nil {
return nil, err
}
Expand All @@ -243,7 +243,6 @@ func CreateStorageFileSharesClientE(subscriptionID string) (*storage.FileSharesC

fileShareClient := storage.NewFileSharesClientWithBaseURI(baseURI, subscriptionID)
authorizer, err := NewAuthorizer()

if err != nil {
return nil, err
}
Expand Down Expand Up @@ -693,7 +692,7 @@ func CreateLoadBalancerClientE(subscriptionID string) (*network.LoadBalancersCli
return nil, err
}

//create LB client
// create LB client
client := network.NewLoadBalancersClientWithBaseURI(baseURI, subscriptionID)
return &client, nil
}
Expand Down Expand Up @@ -741,7 +740,6 @@ func CreateNewVirtualNetworkClientE(subscriptionID string) (*network.VirtualNetw
// CreateAppServiceClientE returns an App service client instance configured with the
// correct BaseURI depending on the Azure environment that is currently setup (or "Public", if none is setup).
func CreateAppServiceClientE(subscriptionID string) (*web.AppsClient, error) {

// Validate Azure subscription ID
subscriptionID, err := getTargetAzureSubscription(subscriptionID)
if err != nil {
Expand All @@ -762,7 +760,6 @@ func CreateAppServiceClientE(subscriptionID string) (*web.AppsClient, error) {
// CreateContainerRegistryClientE returns an ACR client instance configured with the
// correct BaseURI depending on the Azure environment that is currently setup (or "Public", if none is setup).
func CreateContainerRegistryClientE(subscriptionID string) (*containerregistry.RegistriesClient, error) {

// Validate Azure subscription ID
subscriptionID, err := getTargetAzureSubscription(subscriptionID)
if err != nil {
Expand Down Expand Up @@ -927,6 +924,35 @@ func CreateDataFactoriesClientE(subscriptionID string) (*datafactory.FactoriesCl
return &dataFactoryClient, nil
}

// CreatePrivateDnsZonesClientE is a helper function that will setup a private DNS zone client.
func CreatePrivateDnsZonesClientE(subscriptionID string) (*privatedns.PrivateZonesClient, error) {
// Validate Azure subscription ID
subID, err := getTargetAzureSubscription(subscriptionID)
if err != nil {
return nil, err
}

// Lookup environment URI
baseURI, err := getBaseURI()
if err != nil {
return nil, err
}

// Create a private DNS zone client
privateZonesClient := privatedns.NewPrivateZonesClientWithBaseURI(baseURI, subID)

// Create an authorizer
authorizer, err := NewAuthorizer()
if err != nil {
return nil, err
}

// Attach authorizer to the client
privateZonesClient.Authorizer = *authorizer

return &privateZonesClient, nil
}

func CreateManagedEnvironmentsClientE(subscriptionID string) (*armappcontainers.ManagedEnvironmentsClient, error) {
clientFactory, err := getArmAppContainersClientFactory(subscriptionID)
if err != nil {
Expand Down
39 changes: 39 additions & 0 deletions modules/azure/privatednszone.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package azure

import (
"context"

"github.com/Azure/azure-sdk-for-go/profiles/latest/privatedns/mgmt/privatedns"
)

// PrivateDNSZoneExistsE indicates whether the specified private DNS zone exists.
func PrivateDNSZoneExistsE(zoneName string, resourceGroupName string, subscriptionID string) (bool, error) {
_, err := GetPrivateDNSZoneE(zoneName, resourceGroupName, subscriptionID)
if err != nil {
if ResourceNotFoundErrorExists(err) {
return false, nil
}
return false, err
}
return true, nil
}

// GetPrivateDNSZoneE gets the private DNS zone object
func GetPrivateDNSZoneE(zoneName string, resGroupName string, subscriptionID string) (*privatedns.PrivateZone, error) {
rgName, err := getTargetAzureResourceGroupName(resGroupName)
if err != nil {
return nil, err
}

client, err := CreatePrivateDnsZonesClientE(subscriptionID)
if err != nil {
return nil, err
}

zone, err := client.Get(context.Background(), rgName, zoneName)
if err != nil {
return nil, err
}

return &zone, nil
}
35 changes: 35 additions & 0 deletions modules/azure/privatednszone_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package azure

import (
"testing"

"github.com/stretchr/testify/require"
)

/*
The below tests are currently stubbed out, with the expectation that they will throw errors.
If/when CRUD methods are introduced for Azure Synapse, these tests can be extended
*/
func TestPrivateDNSZoneExists(t *testing.T) {
t.Parallel()

zoneName := ""
resourceGroupName := ""
subscriptionID := ""

exists, err := PrivateDNSZoneExistsE(zoneName, resourceGroupName, subscriptionID)

require.False(t, exists)
require.Error(t, err)
}

func TestPrivateDNSZoneExistsE(t *testing.T) {
t.Parallel()

resGroupName := ""
subscriptionID := ""
zoneName := ""

_, err := GetPrivateDNSZoneE(subscriptionID, resGroupName, zoneName)
require.Error(t, err)
}