In vRA 6.2, using vRO 6.0, you may find that the data collection and other vRO workflows fail with the error “You must have at least one properly configured vCenter Orchestrator endpoint that is reachable”. The IaaS/Monitoring/Log will show which DEM worker threw the error. When you check the DEM worker logs for that instance, if you find the message “Could not create SSL/TLS secure channel. —> System.Net.WebException: The request was aborted: Could not create SSL/TLS secure channel“, you have probably been affected by VMKB 2123455 and MS KB 3061588.
Although both articles seem to suggest that removing the offending patch will solve the problem, I think figuring out exactly which patch is rather awkward. The easier fix is to apply a quick registry hack to your DEM workers (and wherever the vRA Designer runs).
Logon as an account with admin rights (suggest the account your IaaS services run under)
Add/update the DWORD value ClientMinKeyBitLength and set the value to 512 decimal (200 hex)
Restart the DEM worker service
Notes:
The Microsoft patch sets the default minimum group size to 1024. It appears that the vRO 6.0.x appliances use something less than that. This registry hack indicates that SCHANNEL should accept keys as small as 512 bits. I suggest only applying this to the necessary and affected machines since it does lower the bar for the DHE security requirements.
Thanks to Zach Milleson for reminding me that this workaround may not resolve everyone’s issue, depending on which MS patches are installed. If this workaround doesn’t work for you, you may have to locate and remove the offending patch. YMMV.
I’ve spent the past several weeks testing, trying to understand Cross-vCenter NSX and make it work in a useful way. Here’s what I’ve learned so far.
Environment and Set up:
I knew I needed two “sites” with discrete storage, but had a few physical limitations. I.e; I only own one managed router (Cisco C2821) and one managed switch (Force 10 S50). I trunked the management and vtep network to all the hosts, but configured a discrete transit network for each “site”. I hope to work with a much larger lab environment and do a thorough review of the setup and configuration. In the meantime, here’s the basics.
Two-host cluster, NSX manager and vCenter Server for primary site
1 host cluster, NSX manager and vCenter Server for recovery site
vSphere 6.0 U1b
NSX for vSphere 6.2.1
Universal Transport Zone includes both clusters, configured for Local Egress.
VTEPs in same L3 network (for simplicity’s sake)
Edge per site, discrete transit networks
Universal DLR for tenant networks, uplinked to both site ESGs
OSPF area for each ESG->UDLR
Partial Lab Network
Objectives
Eliminate need for manual synchronization between sites/NSX instances
Success! The distributed firewall and universal objects are respected by the NSX manager at both sites. Universal Security Groups and Logical Switches are usable at either end.
Span VXLANs between sites
Success! This is not really a surprise. As long as the clusters share a Transport Zone and teh VTEPs can route to each other, this works great.
Minimize network alterations when used with Site Recovery Manager to failover protected VMs between vCenter Servers.
Partial success. A placeholder/recovered VM will be in the same Universal Security Groups as the protected VM and the distributed firewall rules will apply as expected without any changes needed. However, even with Local Egress enabled, you’ll have to apply some sort of route updates so that traffic destined for the recovered VMs can get there. It looks like the route redistribution for egress us handled automatically though. This configuration pushed the limits of what I can do with my lab.
Make use of site-to-site microsegmentation (my definition: application of security policy regardless of L3 network scope)
Partial Success. I was really disappointed here. When the document states that you can add IP Sets, MAC Sets and other Universal Security Groups to a Universal Security Group, it means that’s ALL you can add. I’ve blogged a few times about adding VMs to a Security Group – even doing it as a Resource Action in vRA. That won’t work with Universal Security Groups! The only workaround I see is to add the desired VM’s IP or MAC to a Set and include the Set in the Security group. Blech!
Retain ability to assign security policy via security group membership through vRA
FAILURE. As noted above, we cannot assign Universal security group membership to a VM using any of the existing custom properties.
Notes and Observations
I guess I get it. The vm id between vCenter Servers will differ, so saying that “vm-123 is a member of securitygroup-456” is not valid on a different vCenter Server. But a table of IPs and MACs would be universally valid. I’m hoping that in a near-future version, the universal security group membership capabilities can be extended; perhaps with a shared or replicated vCenter Inventory Service.
While in the vRealize Orchestrator Client you find that the Library/Configuration/SSL Trust Manager/”Import a certificate from URL” workflow returns an error reading “InternalError: handshake alert: unrecognized_name” when provided. The URL the resolves to the Load-Balancer VIP for the vCAC/vRA appliances.
Background:
Signed SSL certificate installed on vCAC/vRA Appliance, SSL Passthrough on NSX/vCNX Load-Balancer, vCAC/vRA Settings/Hostname set to resolve to VIP, matching SSL cert.
Fix:
SSH into the vCAC Appliance as root
Backup /etc/apache2/vhosts.d/vcac.conf to vcac.conf.bak
Use vi to edit /etc/apache2/vhosts.d/vcac.conf
Scroll down to <virtualHost _default_:443>
Add these lines
ServerName fqdn.of.appliance.node
ServerAlias: load.balancer.name
Scroll further to ensure these params aren’t listed elsewhere, remove or revise if so.
***UPDATE*** The download link is currently broken. I seem to have lost the file, will fix the link as soon as I find or recreate it. Sorry about that. 😦
In part 1 of this series, we created a list of security groups and displayed that list to users during the request. In this post, we want to enhance that functionality by adding these features.
Creation of Security Groups and inclusion in Dropdown lists
Add a VM to a Security Group post-provisioning
Import existing Security Groups into vRA inventory
Add a Security Group to a Dropdown list
We’re going to do that by importing a vCO package with some new workflows and actions, then link up the workflows to Advanced Services and Resource Actions. As before, we’ll require the NSX and vCAC/vRA plugins for Orchestrator.
Preparation
Complete the creation of the VCNS.SecurityGroup.Names.production property dictionary and valuelist attribute from Part 1. We’re going to reuse those items. so make a note of the exact name of the property dictionary and the valuelist attribute. In my case, I’ve named the Property Dictionary VCNS.SecurityGroup.Names.production and also named the valuelist attribute for it VCNS.SecurityGroup.Names.production
Make sure vRA Advanced Services Server Configuration is complete and test the connection to the Orchestrator server. The default, built-in VCO is fine.
Login to vCO client as a vCO Admin. Set the mode to “Design” and navigate to the Inventory tab. Make sure that you have a connection listed under “vCAC Infrastructure Administration” and a connection listed under “NSX”.
Confirm that you have the necessary connections on the inventory tab
Get the Package
I’ve put together a handful of workflows and actions that use or expand the NSX plugin to provide information of functionallity back to vRA. Where possible, I reused existing library workflows, but in some cases, I had to use the API to create a REST call and consume that in an action.
By downloading any code, package or file, you acknowledge that:
There is no explicit or implied warranty or support for the code. Neither Brian Ragazzi, his employer nor anyone else is responsible for any problems, errors, omissions, unexpected behavior, breakage, trauma, outage, fatigue, lost time, lost work or incontinence that may occur as a result of using the code or package.
Download the zip file. It contains the package and a couple of images that can be used for the advanced services
Import the Package
Extract the zip file
In the vCO Client, navigate to the packages tab.
Click the “import package” button and select the extracted .package file
On the Package Import Information step, click “Import”
Package Import Information
On the Import package… step, check the “Select/Deselect all” box to check all of the items. Please note the server path, these should not be duplicates of anything else you have in your vCO inventory (unless you’ve already imported this package previously). Click “Import Selected elements”.
Select all items
Review the workflows and actions added to your inventory.
Configure Advanced Services – Create Security Group
This service enables the user to create a new NSX Security Group and automatically adds its name to the appropriate dropdown list of security groups. It can be added once for each different list of security groups. You’ll need to know the exact name of the Property Dictionary and valuelist attribute you created in Part 1.
NSX Management ServicesNSX Security Groups in vRA Items
While logged into vRA as a service architect, navigate to the Advanced Services tab, click “Custom Resources“
We need to make vRA aware of NSX Security Groups. Click the Add button.
In the Orchestrator Type field, enter “NSX:SecurityGroup“; for the Name, I suggest “NSX Security Group“, click Next
Add NSX Security Group as Custom Resource
On the details form, we’re not going to make any changes, but if you wanted to hide certain properties, you could here. Click “Add“.
Click “Service Blueprints”, then the “Add” button.
On the Workflow tab, select the AddNewSecurityGrouptoDropdown workflow, click next.
Select “AddNewSecurityGrouptoDropdown” workflow
On the Details tab, set the name to something like “Create new Production NSX Security Group“, because we’re going to create the security group and add its name to the “production”dropdown list. Click Next.
Set the Service Item Name
On the Blueprint Form tab, under the “Step” Form page (default), mouseover the text field labelled “Name of Custom Property Dictionary in vCAC/vRA”. Click the pencil “edit” icon when it appears.
Edit the Form Fields
Click the Constraints tab of the “Edit Form Field” window. On the Value field, select “Constant” and enter “VCNS.SecurityGroup.Names.Production” (or whatever suffix you used) for the Property Dictionary. Set the Visible value to “No” so it doesn’t show up. Click Submit on the Edit Form Field window.
Set the name of the Property Dictionary to be updated
Using the same method, set the Name of the Attribute appropriately and its visibility to no
Edit the “Value to be appended to the ValueList attribute” field. Set the label to “New Security Group Name“. Do not set a value or make this one invisible, we need the user to enter a value, submit to save.
Edit the vCACIaaSHost field – using the Constraints tab again– when setting the value, choose constant, then click Add by the green plus, to display a treeview, where you can choose your connection to the IaaS Server. Visible: No, submit to save.
Select connection to IaaS host
Edit the “NSX endpoint” field in the same way, selecting the NSX connection.
When done, all fields except “New Security Group Name” will have a value. Click Next.
On the Provisioned Resource tab, select “securityGroup [NSX Security Group]“. Click Add to save the service blueprint.
Repeat steps 5-15 for any other dropdown lists containing security groups; say “Non-Production” for instance
Highlight the Service Blueprint and click “Publish” to make the blueprint available for entitlements
Navigate to Administration, Services.
Add a new Service named “NSX Management” (for example) – I included a nifty image in the zip file
Under Catalog Items, click the “Create new Production NSX Security Group” item to edit it.
The Catalog item should inherit the Security Group icon from vCO, set its Service to “NSX Management”,click update to save.
Create or Edit an entitlement to include the new Service and/or catalog item.
Try it out, confirm that the Security Group was created in NSX, is visible in vCAC items and it name was added to the Property Dictionary
Configure Advanced Services – Import Security Group
This service allows you to make existing security groups visible as items in the vCAC Items view. Once this is done, we’ll add actions that allow you to add the security group to a dropdown list.
Click “Service Blueprints”, then the “Add” button.
Select the “GetNSXSecurityGroup” workflow, click Next
On the details tab, set the name to “Import NSX Security Group“, click Next
On the Blueprint form, set the “connection” to the NSX connection in vCO, then hide the field. Security Group Name will be a dropdown list of existing NSX Security Groups for the user to choose from. Click Next
On the Provisioned Resource tab, select “securityGroup [NSX Security Group]“. Click Add to save the service blueprint.
Just as before, publish the service blueprint, add it to a service and an entitlement.
Configure Advanced Services – Add Security Group to Dropdown list
With this service, we’ll let the user add the name of an existing Security Group to a drop down list. Unlike the first two, this is implemented as a Resource Action, meaning it’ll be executed against an existing item (a Security Group in this case)
Under Resource Actions, click “Add”
For the Workflow, select the “AddExistingSecurityGrouptoDropdown“, click Next
On the “Input Resource” tab, keep NSX Security Group, click Next
On the Details tab, set the Name to “Add Security Group to Production list” or similar, set the description, leave the Type options unchecked. click Next
Set Action Name and Description
On the Form tab, just like the first service blueprint, set the Property Dictionary and Attribute names as appropriate. VCNS.SecurityGroup.Names.production in my example, set visible to no on both.
Again, we’ll set the vCACIaaSHost to the connection to the Server and hide the field
Click Add to save the action.
Repeat steps 1-6 for each security group dropdown list (say “non-production” for instance)
Publish the action and add it to an entitlement
Add Action to Entitlement
Test by navigating toNSX under Items, highlight a Security group and Select “Add Security Group to…” from the Actions menu.
Yay! A Resource Action
Configure Advanced Services – Add VM to a Security Group
This service lets you add a provisioned VM to additional Security Groups. So, at provisioning-time, the VM is added to the Security Group selected by the user, but we may need to refine the security by adding that VM to additional Security Groups.
Under Resource Actions, click “Add“
For the Workflow, select the “AddVMtoSecurityGroup“, click Next
On the “Input Resource” tab, keep IaaS VC VirtualMachine, click Next
On the Details tab, set the name to “Add VM to a Security Group“, click Next
On the Form tab, set the connection Value to the NSX connection.
Leave the NSX Security Group field visible, click Add to save the action
Publish the action and add it to an entitlement
Test by selecting a machine under Items and “Add VM to a Security Group” from the Actions menu
VM Resource Action for Security Groups
You’ll be presented with the list of allNSX Security Groups to which you can add the selected VM
Select Security Group
Conclusion
This part of the series should help streamline the management of VMs and their membership in Security Groups. Obviously, items like removing a VM from a Security Group or even removing a Security Group are not included here. The NSX plugin is missing quite a bit of functionality available in the API, so those additional functions require significantly more configuration.
Thanks to John Dias for his information and examples posted here.
In this series, I’ll document how to automate the creation and (some of) the management of NSX security groups within NSX.
First, what’s the use case? Why is this interesting? Let’s assume that you’ve decided to use large “flat” networks instead of many small networks. One reason you may make that decision is because of the challenges with either having many blueprints (one per network!) or making changes to the workflows to reliably set the appropriate properties.
Background
In this solution, we’ll have to have vCAC 6.1 or vRealize Automation 6.2, NSX 6.x and vCenter/vRealize Orchestrator with the vCAC and NSX plugins installed and configured. We have two Logical Switches, one for Production and one for Non-Production. In addition, there’s a corresponding network profile and the business groups have reservations. Now, we have to ensure that there are security boundaries within the flat networks. We’ll accomplish this through Security Groups.
Caveats
We’ll create security groups and nod in the direction of security profiles, but will not be automating the creation of security profiles nor their assignment to the Security Group(s). That can be done by the security admins through the NSX interface or maybe later we’ll add that capability too. 😉
Procedure
Create Security Groups.
Open vSphere Web Client and navigate to Networking and Security, then Service Composer.
Click the “New Security Group” icon
Enter a Name and Description for your new Security Group and click Next
If you want to create rules for dynamic membership or include/exclude existing VMs, you can do so in the subsequent steps. Finish the wizard.
Repeat to create all of your security groups
Create Security Groups in NSX
Create Property Dictionaries invCAC/vRA.
Log into vCAC as an Infrastructure Admin and navigate to Infrastructure|Blueprints|Property Dictionary
Click “New Property Definition”, for the name enter “VCNS.SecurityGroup.Names.Production“. You can replace “Production” with a name of your choosing, so you can have multiple lists.
Select “DropDownList” as the control type and check to make it required, click the green check to save.
Create Property Dictionary
Click the “Edit” link in the Property Attributes column
Click “New Property Attribute”, select “ValueList” as the attribute type
Set the name to something appropriate, such as the same name as the Property Definition or “ValueList” or “SecurityGroups”
In the Value field, enter the names of the security groups you want included. Separate the group names by commas (no spaces). If you have groups whose names include spaces or commas, put them in quotes. Click the green check to save.
Repeat to create another property dictionary and attribute for the Non-Production list
Update Blueprints.
Edit your “production” blueprints by adding the “VCNS.SecurityGroup.Names.Production” custom property. Set the value to your default security group or leave it blank to require a selection. Be sure to check the “Prompt User” box. Click the green check to save.
Add Custom Property to Blueprint
Test
Submit a request for the affected blueprint and verify that the dropdown list of security groups looks like you expect it to. Remember, that unlike many other custom properties in vCAC (eg: Network Profiles), you CAN have multiple versions of this one and display different lists.
Dropdown list of Security Groups
After a VMis provisioned, verify in the vSphere Web Client that ithas been assigned to the expected security group
VM added to Security Group
Next
In the next parts of this series, I plan to address the problems of maintaining the dropdown list manually and having a single security group per machine.
Please note that this is a workaround, not a fix. I couldn’t get the damn thing working reliably, so I bypassed authentication. I wish I knew why I got “DataBaseStatsService: ignoring exception: Error executing query usp_SeclectAgent Inner Exception: Error Executing query usp_SelectAgentCapablities” all the frigging time. Followed John’s advice and reinstalled MSDTC on e.v.e.r.y.t.h.i.n.g, no change. Made sure that the settings match VMKB2089583, no change.
As a workaround, I just selected “No Authentication required” on the Clustered MSDTC and the IaaS Manager Service services. Don’t do this as a long-term thing.
This drives me crazy. An FQDN is not case-sensitive. SERVER.DOMAIN.TLD is the same as sERvEr.dOMaIn.tlD. VMware has added significantly to the server certificate authenticity checking in version 6.1. When configuring the SSO settings in the VAMI, it not only connects and validates the certificate, but also checks the host name against the SAML ticket. In general, more security and validation is a good thing, but in this case, the code requires that the hostname you entered is exactly the value in the SAML ticket. If the spelling and name do not exactly match, the step returns Invalid “Host Settings”. Worse, the value it states is expected is NOT the value from the SAML ticket.
Wait… what?!
To make sure you enter the correct value, browse to https://ssoserver:7444/websso/SAML2/Metadata/vsphere.local and save the vsphere.download file when prompted. Open the vsphere.download file in notepad or some text editor. Locate the entityID attribute of the EntityDescriptor element. That is the name and spelling required.
<EntitiesDescriptor xmlns="urn:oasis:names:tc:SAML:2.0:metadata" ...>
<Extensions>
<vmes:ExportedOn>...
<vmes:ExportedBy>Exported by VMware Identity Server (c) 2012
</Extensions>
<EntityDescriptor entityID="https://VCSSO.ragazzi.lab:7444/websso/SAML2/Metadata/vsphere.local">
<IDPSSODescriptor WantAuthnRequestsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
...
In my example, once I submitted the SSO Host name as VCSSO.ragazzi.lab, it was accepted and configuration continued.
I’m hoping this simple case-sensitivity issue is corrected in the next patch.
Just a quick couple of points from the past couple of days:
vCloud Automation Center will be renamed vRealize Automation
The minimal vCAC deployment is NOT just for POCs, it is suitable for production up to ~1000 VMs
Going forward, code will be moved from .NET to Java on the appliance.
Also going forward, most work done by the DEMs and agents will be handled by Orchestrator. I like this, as it opens up even more opportunities for extensibility