This posting is ~8 years years old. You should keep this in mind. IT is a short living business. This information might be outdated.
Before you can manage Azure services with Azure Automation, you need to authenticate the Automation account against a subscription. This authentication process is part of each runbook. There are two different ways to authenticate against an Azure subscription:
Active Directory user
Certificate
If you want to use an Active Directory account, you have to create a credential asset in the Automation account and provide username and password for that Active Directory account. You can retrieve the credentials using the Get-AzureAutomationCredential cmdlet. This cmdlet returns a System.Management.Automation.PSCredential object, which can be used with Add-AzureAccount to connect to a subscription. If you want to use a certificate, you need four assets in the Automation account: A certificate and variables with the certificate name, the subscription ID and the subscription name. The values of these assets can be retrieved with Get-AutomationVariable and Get-AutomationCertificate.
Prerequisites
Before you start, you need a certificate. This certificate can be a self- or a CA-signed certificate. Check this blog post from Alice Waddicor if you want to start with a self-signed certificate. I used a certificate, that was signed by my lab CA.
At a Glance:
self- or CA-signed certificate
Base64 encoded DER format (file name extension .cer) to upload it as a management certificate
PKCS #12 format with private key (file name extension .pfx or .cer) to use it as an asset inside the Automation account
Upload the management certificate
First, you must upload the certificate to the management certificates. Login to Azure and click “Settings”.
Patrick Terlisten/ www.vcloudnine.de/ Creative Commons CC0
Click on “Management Certificates”
Patrick Terlisten/ www.vcloudnine.de/ Creative Commons CC0
and select “Upload” at the bottom of the website.
Patrick Terlisten/ www.vcloudnine.de/ Creative Commons CC0
Make sure that the certificate has the correct format and file name extension (.cer).
Patrick Terlisten/ www.vcloudnine.de/ Creative Commons CC0
Finish the upload dialog. After a few seconds, the certificate should appear in the listing.
Patrick Terlisten/ www.vcloudnine.de/ Creative Commons CC0
Create a new Automation account
Now it’s time to create the Automation account. Select “Automation” from the left panel.
Patrick Terlisten/ www.vcloudnine.de/ Creative Commons CC0
Click on “Create an Automation account”.
Patrick Terlisten/ www.vcloudnine.de/ Creative Commons CC0
Give your Automation account a descriptive name and select a region. Please note that an Automation account can manage Azure services from all regions!
Patrick Terlisten/ www.vcloudnine.de/ Creative Commons CC0
Click on the newly created account and click on “Assets”.
Patrick Terlisten/ www.vcloudnine.de/ Creative Commons CC0
Select “Add setting” from the bottom of the website.
Patrick Terlisten/ www.vcloudnine.de/ Creative Commons CC0
Add a credential asset by choosing “Add credential” and select “Certificate” as “Credential type”.
Patrick Terlisten/ www.vcloudnine.de/ Creative Commons CC0
Enter a descriptive name for the certificate. You should remember this name. You will need it later. Now you have to upload the certificate. The certificate must have the file name extension .pfx or .cer and it must include the private key!
Patrick Terlisten/ www.vcloudnine.de/ Creative Commons CC0
Finish the upload of the certificate. Now add three additional assets (variables).
Patrick Terlisten/ www.vcloudnine.de/ Creative Commons CC0
Select the name, the value and the type from the table below. The name of the certificate is the descriptive name, you’ve previously entered when uploading the certificate.
Name
Value
Type
AutomationCertificateName
Name of your certificate
String
AzureSubscriptionName
Name of your subscription
String
AzureSubscriptionID
36 digit ID of the subscription
String
Done. You’ve uploaded and created all the required certificates and variables.
How to use it
To use the certificate and the variables to connect to an Azure subscription, you have to use the two cmdlets Get-AutomationCertificate and Get-AutomationVariable. I use this code block in my runbooks:
Certificate-based authentication is an easy way to authenticate an Automation account against an Azure subscription. It’s easy to implement and you don’t have to maintain users and passwords. You can use different certificates for different Automation accounts. I really recommend this, especially if you have separate accounts for dev, test and production.
All you need is to upload a certificate as a management certificates, and as a credential asset in the Automation account. You can use a self- or CA-signed certificate. The subscription ID, the subscription name and the name of the certificate are stored in variables.
At the beginning of each runbook, you have to insert a code block. This code block takes care of authentication.
This posting is ~8 years years old. You should keep this in mind. IT is a short living business. This information might be outdated.
Automation is essential to reduce friction and to streamline operational processes. It’s indispensable when it comes to the automation of manual, error-prone and frequently repeated tasks in a cloud or enterprise environment. Automation is the key to IT industrialization. Azure Automation is used to automate operational processes withing Microsoft Azure.
Automation account
The very first thing you have to create is an Automation account. You can have multiple Automation accounts per subscription. An Automation account allows you so separate automation resources from other Automation accounts. Automation resources are runbooks and assets (credentials, certificates, connection strings, variables, scheudles etc.). So each Automation account has its own set of runbooks and assets. This is perfect to separate production from development. An Automation account is associated with an Azure region, but the Automation account can manage Azure services in all regions.
Runbooks
A runbook is a collection of PowerShell script or PowerShell workflows. You can automate nearly everything with it. If something provides an API, you can use a runbook and PowerShell to automate it. A runbook can run other runbooks, so you can build really complex automation processes. A runbook can access any services that can be accessed by Microsoft Azure, regardless if it’s an internal or external service.
There are three types of runbooks:
Graphical runbooks
PowerShell Workflow runbooks
PowerShell runbooks
Graphical runbooks can be created and maintained with a graphical editor within the Azure portal. Graphical runbooks use PowerShell workflow code, but you can’t directly view oder modify this code. Graphical runbooks are great for customers, that don’t have much automation and/ or PowerShell knowledge. Once you created a graphical runbook with an automation account, you can export and import this runbook into another automation accounts, but you can modify the runbook only with the account which was used during the creation of the runbook.
PowerShell Workflow runbooks doesn’t have a graphical presentation of the workflow. You can use a text editor to create and modify PowerShell Workflow runbooks. But you need to know how to deal with the logic of PowerShell Workflow code.
PowerShell runbooks are plain PowerShell code. Unlike PowerShell Workflows, a PowerShell runbook is faster, because it doesn’t have to be compiled before the run. But you have to be familiar with PowerShell. There is no parallel processing and you can’t use checkpoints (if a snapshot fails, it will be suspended. With a checkpoint, the workflow can started at the last sucessful checkpoint).
Schedule
Schedules are used to run runbooks to a specific point in time. Runbooks and schedules have a M:N relationship. A schedule can be associated with one or more runbooks, and a runbook can be linked to one or more schedules.
Summary
This is only a brief introduction into Azure Automation. Azure Automation uses Automation accounts to execute runbooks. A runbook consists of PowerShell Workflow or plain PowerShell code. You can use runbooks to automate nearly all operations of Azure services. To execute runbooks to a specific point in time, you can use schedules Runbooks, schedules and automation assets, like credentials, certificates etc., are associated with a specific Automation account. This helps you to separate between different Automation accounts, e.g. accounts for development and for production.
This posting is ~8 years years old. You should keep this in mind. IT is a short living business. This information might be outdated.
To be honest: I’m lazy and I have a wife and two kids. Therefore I have to minimize the costs of my lab. I have a physical lab at the office and some VMs running on Microsoft Azure. Azure is nice, because I only have to pay what I really use. And because I’m only paying the actual use, I start the VMs only when I need them. Inspired by this very handy Azure VM wakeup & shutdown script, I decided to write my own script (yes, I invented a wheel again…). Very simple, nothing fancy. Feel free to use and modify the script according to your needs.
This posting is ~8 years years old. You should keep this in mind. IT is a short living business. This information might be outdated.
Building networks in the cloud is sometimes hard to understand. A common mistake is to believe that all VMs can talk to another, regardless of the owner, and that all VMs are available over the internet.
Some basics about Cloud Service Endpoints and Virtual Networks
When we talk about Microsoft Azure, a Cloud Service Endpoint is the easiest way to access one or multiple VMs. A Cloud Service contains resources, like VMs, and it’s acting as a communication and security boundary. All VMs that use the same Cloud Service get their IPs via DHCP and share the same private IP address range. The VMs can communicate directly to each other. To access these VMs over the internet, a Cloud Service Endpoint is used. Each Cloud Service has a internet addressable virtual IP address assigned. And that’s the Cloud Service Endpoint. With PAT, ports for RDP or PowerShell are forwarded to the VMs by default. If you deploy a webserver and an application server, both can be provisioned to the same Cloud Service and therefore, they share the same Cloud Service Endpoint. But you can only forward http traffic to the webserver. Therefore only the webserver is available over the internet, not the application server.
If you need more complex networking within Microsoft Azure, you may take a look at the Virtual Networks (VNets). VNets are used to create and manage isolated networks within Microsoft Azure. Each VNet has its own choosable IP address range. VNets can be linked to other VNets and on-premises networks using VPN techniques. VNets allow you to assign “your own” IP addresses to VMs. To be honest: You can define “your own” IP subnet, but even with Set-AzureStaticVNetIP, you can’t assign a real static IPs to those VMs. It’s more a kind request to get the same IP everytime the VM boots up.
With VNets you can extend your on-premises network to Microsoft Azure. You can deploy test and development environments to Microsoft Azure and connect to the used VNets using IPsec. Or you can run you whole datacenter within Microsoft Azure and only have PCs and laptops on-premises.
Connect a on-premises network to Microsoft Azure
In this blog article, I’d like to show you how you connect your on-premises network to a Microsoft Azure Virtual Network. In this case, I used my AVM FRITZ!Box 7270 as the VPN gateway in my on-premises network. Many well-known manufacturers are listed on the compatibility list.
The very first step is to create a Virtual Network (VNet) in the Microsoft Azure portal. Select “NETWORKS” from the left panel and create a new VNet.
Patrick Terlisten/ www.vcloudnine.de/ Creative Commons CC0
You should assign a descriptive name to your VNet. Just an information: The datacenter for the local “West Europe” is located in the Netherlands. Currently there is no datacenter in Germany.
Patrick Terlisten/ www.vcloudnine.de/ Creative Commons CC0
If you have a DNS server in your local network, you can add it in step two of the “Create a Virtual Network” wizard. Make sure that you select the “Configure a site-to-site VPN” checkbox. Otherwise you can’t create a IPsec tunnel.
Patrick Terlisten/ www.vcloudnine.de/ Creative Commons CC0
In the third step, you have to enter details about your on-premises network and the VPN device. The VPN device address is the public address of your VPN gateway. You have to use an IP address here. You can’t use a FQDN. So make sure that you have a static IP address! I don’t have one. This means that I have to change my VNet config each time my public IP changes (all 24h). Enter the address spaces of your local IP subnets.
Patrick Terlisten/ www.vcloudnine.de/ Creative Commons CC0
The “Virtual Network Address Space” defines the IP subnet which should be used for the VMs that will be provisioned to this VNet. And you have to add a subnet for the gateway. The gateway subnet is used for the IPsec connection. Please note that this subnet can’t be used for VMs.
Patrick Terlisten/ www.vcloudnine.de/ Creative Commons CC0
The creation of the VNet takes some time. After a couple of minutes you should be able to click on “VIRTUAL NETWORKS”, “LOCAL NETWORKS” and “DNS SERVERS” and you should see the values you’ve entered.
Patrick Terlisten/ www.vcloudnine.de/ Creative Commons CC0
In the “LOCAL NETWORKS” section you can see the address space of your local network, as well as the IP of your VPN gateway. If you don’t have a static IP address, you have to change the VPN gateway address here everytime the IP address changes.
Patrick Terlisten/ www.vcloudnine.de/ Creative Commons CC0
Last but not least: The DNS server of your local network.
Patrick Terlisten/ www.vcloudnine.de/ Creative Commons CC0
The next step is to create a gatway. The gateway is necessary for the IPsec connection. Click on “CREATE GATEWAY”.
Patrick Terlisten/ www.vcloudnine.de/ Creative Commons CC0
Select “Static Routing”. That’s all. The creation of the gatway will take some time. I had to wait about 5 minutes until the gateway was created.
Patrick Terlisten/ www.vcloudnine.de/ Creative Commons CC0
After the creation of the gateway, you should see the gateway IP address. This address is the VPN endpoint from the perspective of your local network.
Patrick Terlisten/ www.vcloudnine.de/ Creative Commons CC0
Beside the gateway IP address, you also need the shared key to create an IPsec tunnel. Click on “MANAGE KEY” to get the pre-shared key.
Patrick Terlisten/ www.vcloudnine.de/ Creative Commons CC0
Copy the pre-shared key and save it for later use.
Patrick Terlisten/ www.vcloudnine.de/ Creative Commons CC0
Now the configuration of the VNet is finished. Now it’s time to configure your on-premises VPN gateway. In my case it’s a AVM FRITZ!Box which isn’t listed on the compatible device list. You have to create and import a config file. This is the config file I’ve used. I highlighted the parts of the config that you have to modify. Please note, that previously created VPN connections may be deleted if you import this file. If you have additional VPN connections configured on your FRITZ!Box, please make sure that you add them to this file BEFORE you import it.
/*
* VPN Config file for
* AVM FRITZ!Box
*/
vpncfg {
connections {
enabled = yes;
conn_type = conntype_lan;
name = "azure-2-home"; /* change this name
always_renew = no;
reject_not_encrypted = no;
dont_filter_netbios = yes;
localip = 0.0.0.0;
local_virtualip = 0.0.0.0;
remoteip = 40.xxx.xxx.xxx; /* the gateway IP address from your Microsoft Azure Gateway
remote_virtualip = 0.0.0.0;
localid {
ipaddr = 78.xxx.xxx.xxx; /* your local VPN gateway IP address
}
remoteid {
ipaddr = 40.xxx.xxx.xxx; /* the gateway IP address from your Microsoft Azure Gateway
}
mode = phase1_mode_aggressive;
phase1ss = "all/all/all";
keytype = connkeytype_pre_shared;
key = "FcYKsPLpeDFxxxxxxxxxxxxxxxxxxxxxxx"; /* the PSK
cert_do_server_auth = no;
use_nat_t = yes;
use_xauth = no;
use_cfgmode = no;
phase2localid {
ipnet {
ipaddr = 192.168.20.0; /* your local subnet
mask = 255.255.255.224; /* your local subnet mask
}
}
phase2remoteid {
ipnet {
ipaddr = 192.168.186.0; /* the virtual address space
mask = 255.255.255.0; /* the corresponding subnet mask
}
}
phase2ss = "esp-all-all/ah-none/comp-all/no-pfs"; /* change pfs to no-pfs
accesslist = "permit ip any 192.168.186.0 255.255.255.0"; /* change to your virtual address space
}
ike_forward_rules = "udp 0.0.0.0:500 0.0.0.0:500",
"udp 0.0.0.0:4500 0.0.0.0:4500";
}
// EOF
You can use my config as a template for your VPN config. Simply change the highlighted values, remove the comments and import it into your FRITZ!Box. Don’t forget to remove the comments in the config file. Don’t remove the comments at the beginning of the file. Only remove the comments I added to highlight the values you have to change. If everything’s fine, the IPsec tunnel should be established within a couple of seconds.
Patrick Terlisten/ www.vcloudnine.de/ Creative Commons CC0
As soon as the IPsec tunnel is established, you should be able to ping the gateway IP address. In my case it’s the IP address 192.168.186.37.
Patrick Terlisten/ www.vcloudnine.de/ Creative Commons CC0
If you create a new Azure VM, you can now use your newly created VNet and subnet. Simply choose the VNet from the “REGION/ AFFINITY GROUP/ VIRTUAL NETWORK” drop down menu.
Patrick Terlisten/ www.vcloudnine.de/ Creative Commons CC0
The first VM will get the IP address 192.168.186.4. Why the .4 when the first usable address is .1? The first four IP addresses of the address space are reserved. So the first usable IP address is 192.168.186.4. The second VM will get the 192.168.186.5 and so on. The same applies to the gateway address space.
Now, with a working IPsec tunnel to my VNet, I can open a RDP connection to my newly created VM using the IP address 192.168.186.4. And there it is:
Patrick Terlisten/ www.vcloudnine.de/ Creative Commons CC0
If you connect your on-premises network to Microsoft Azure, you should know that you can use up to 80 Mbps with an availability SLA of 99.9% and no performance commitment! If you need more bandwidth, you can use a High Performance Gatway which can deliver up to up to 250 Mbps.
I would recommend to use VNets whenever it’s possible. Not only in case of connecting a on-premises network. If you wish to use VPN features, take a look at the VPN gateway compatibility list! Otherwise, the connecting your on-premise network to Microsoft Azure might be a bit fiddly.
To change your privacy setting, e.g. granting or withdrawing consent, click here:
Settings