Because who doesn’t need another way to deploy virtual apps and desktops in the AWS Cloud?
Overview: Welcome to the newest way to deploy Citrix Virtual Apps and Desktops in AWS
Let’s face it - if there’s one thing IT folks love more than solving problems, it’s being presented with multiple, viable ways to solve the same problem.
Enter: Citrix MCS for Amazon WorkSpaces Core—yet another (actually awesome) way to spin up Citrix based virtual apps and desktops in the cloud. But this isn’t just another VDI flavor-of-the-month. It’s a legit, cost-effective, and cloud-native combo move from Citrix and AWS that makes virtual app and desktop deployments smoother, simpler, and far less likely to end in a coffee-fueled midnight panic.
So buckle up, cloud wranglers. This is your guide to the latest deployment option you didn’t know you needed.
The Great Citrix-on-AWS Showdown: Deployment Models
Yes, there’s more than one way to deploy Citrix in AWS. And yes, each one has its quirks, benefits, and potential to either make you look like a genius—or have you Googling IAM policies at 2 a.m.
The table below breaks down all three Citrix in AWS deployment options
Prerequisites: What You Need Before You Start Clicking Stuff
Before you dive into the deep end, here’s what you’ll need to avoid creating a cloud-native mess:
Citrix Cloud (DaaS) Subscription
VPC (Virtual Private Cloud) configured in AWS
Cloud Connectors in AWS
IAM Setup
Enable the AWS Service-Linked Role
Master Image Prep
Deployment: Now the Real Fun Begins
Here’s where we make stuff happen. And yes, we’ll have screenshots to prove we did it and most importantly, that it actually works! 😊
Step 1: Create a Custom IAM Role
Step 2: Create a Hosting Connection in Citrix Cloud (DaaS)
Next, give your Network section a descriptive name and choose two private subnets within your AWS VPC.
Note: If you're unsure of which subnets in your VPC are private vs. public, you can go to VPC within your AWS account and scroll down to Resource Map. The resource map will give you a nice visual of which subnets are public and which are private along with the associated routing tables.
Choose the default options for “Scope”. Then, review the Summary screen and if all looks good, click Finish.
It will take a couple of minutes for your new hosting connection to initialize but once complete, it will be displayed as shown below.
Step 3: Create Master Image Definition and Version
Here you’ll define whether or not you will be deploying Multi-Session (Server OS) or Single-Session (Desktop OS)
Select a Machine Template. This is the AMI (Amazon Machine Image) that you created after deploying the Citrix VDA on the master image within EC2.
Select the Master Image and Machine Profile. Verify the Machine Specification and NICs options and begin creation of the image definition.
The image definition will take approximately 30-45 minutes to be created.
While the image definition is being created, on the AWS side you will see an MCS Preparation VM being created within EC2.
Once the image definition creation is complete, you should see the details in the version as shown below.
Step 4: Create Machine Catalog and Delivery Group
Create the machine catalog and choose Citrix MCS for the provisioning technology. Choose the AWS resources created as part of the hosting connection setup.
Select the Image.
Choose the image version.
Click Next.
Choose the Machine Specifications. By default, it will read the specs of your master image’s instance type.
Confirm the NIC ID and subnet info.
Create new Active Directory accounts. Specify the OU on where these computer accounts will be stored along with the machine account naming scheme.
Specify credentials of an AD user that has permissions to create and reset computer accounts. You may also choose to specify a Service Account.
Click finish for your Machine Catalog to be created.
Once the machine catalog is successfully created along with the machines in EC2, they will be powered off by default unless you manually start them or they will automatically start when you create the Delivery Group within Citrix DaaS and attempt to add Applications.
Tip: I recommend manually powering on at least one VDA so that it could register with the Cloud Connector and you can add applications swiftly during the delivery group creation process.
Create the Delivery Group.
Assign the AD user group(s) required, add the applications ( if multi-session) and Desktops.
After the Delivery Group creation is complete, you can right click on the Delivery Group and choose “View Machines” to ensure that the registration state of the machines displays as “registered”.
Lessons Learned: AKA “Stuff We Broke So You Don’t Have To”
Final Thoughts: Welcome to Your Cloud-First Era
Citrix MCS for Amazon WorkSpaces Core isn’t just a shiny new toy, it’s a serious evolution in how we deliver Citrix virtual apps and desktops from the AWS cloud. It brings Citrix control together with AWS simplicity and cost efficiency, creating a solution that makes sense.
So if you’ve been putting off your cloud VDI strategy because it was “too complicated,” well… time’s up. You’ve got a new option. It works. It scales. And it might just make you look like a rockstar in your next ops review.
Appendix:
Minimal IAM Permissions:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"ec2:AttachVolume",
"ec2:AssociateIamInstanceProfile",
"ec2:AuthorizeSecurityGroupEgress",
"ec2:AuthorizeSecurityGroupIngress",
"ec2:CreateImage",
"ec2:CreateLaunchTemplate",
"ec2:CreateNetworkInterface",
"ec2:CreateTags",
"ec2:CreateVolume",
"ec2:DeleteLaunchTemplate",
"ec2:DeleteNetworkInterface",
"ec2:DeleteSecurityGroup",
"ec2:DeleteSnapshot",
"ec2:DeleteTags",
"ec2:DeleteVolume",
"ec2:DeregisterImage",
"ec2:DescribeAccountAttributes",
"ec2:DescribeAvailabilityZones",
"ec2:DescribeIamInstanceProfileAssociations",
"ec2:DescribeImages",
"ec2:DescribeInstances",
"ec2:DescribeInstanceTypes",
"ec2:DescribeInstanceStatus",
"ec2:DescribeLaunchTemplates",
"ec2:DescribeLaunchTemplateVersions",
"ec2:DescribeNetworkInterfaces",
"ec2:DescribeRegions",
"ec2:DescribeSecurityGroups",
"ec2:DescribeSnapshots",
"ec2:DescribeSubnets",
"ec2:DescribeTags",
"ec2:DescribeSpotInstanceRequests",
"ec2:DescribeInstanceCreditSpecifications",
"ec2:DescribeInstanceAttribute",
"ec2:GetLaunchTemplateData",
"ec2:DescribeVolumes",
"ec2:DescribeVpcs",
"ec2:DetachVolume",
"ec2:DisassociateIamInstanceProfile",
"ec2:RebootInstances",
"ec2:RunInstances",
"ec2:StartInstances",
"ec2:StopInstances",
"ec2:TerminateInstances"
],
"Effect": "Allow",
"Resource": "*"
},
{
"Action": [
"ec2:CreateSecurityGroup",
"ec2:DeleteSecurityGroup"
],
"Effect": "Allow",
"Resource": "*"
},
{
"Action": [
"ebs:StartSnapshot",
"ebs:GetSnapshotBlock",
"ebs:PutSnapshotBlock",
"ebs:CompleteSnapshot",
"ebs:ListSnapshotBlocks",
"ebs:ListChangedBlocks",
"ec2:CreateSnapshot"
],
"Effect": "Allow",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"kms:CreateGrant",
"kms:Decrypt",
"kms:DescribeKey",
"kms:GenerateDataKeyWithoutPlainText",
"kms:GenerateDataKey",
"kms:ReEncryptTo",
"kms:ReEncryptFrom"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "arn:aws:iam::*:role/*"
},
{
"Effect": "Allow",
"Action": [
"workspaces-instances:*"
],
"Resource": "*"
}
]
}