In your AWS Account for Horizon Cloud, several resource providers must have a registered status.
Note: The permission requirements listed on this page are specific to new customers beginning with release 2601. For the permission requirements for existing customers prior to release 2601, see KB 6001262.
Ensure that the listed IAM permissions are provided before deploying a Horizon Edge. The final step of the Horizon Edge deployment validates that these resource providers have a registered status and prevents the start of the Horizon Edge deployment if one is unregistered.
Two methods are available for you to provide the necessary IAM permissions.
- By using the AWS IAM console to create permissions.
- By using the AWS IAM console to run the JSON script included below.
Create IAM Permissions
If you choose to create permissions manually, add the required IAM permissions from the JSON policies below in the AWS IAM console.
Note: Horizon Cloud does not perform mandatory tag validation of any tags made mandatory by using AWS Service Control Policy (SCP) or other tag policy. If your organization enforces AWS service control policies (SCP) or tag policies, ensure all required tags are applied to the provider before Edge deployment. Horizon Edge, Edge Gateway, and UAG deployments may fail if policy-mandated tags are missing. For more information, see Using Amazon Resource Tags.
Copy and Use the Following JSON Files
If you choose to use the JSON file method, copy each JSON script below into the Policy editor in the AWS IAM console as separate policies (Policy 1 and Policy 2), and attach both policies to the same IAM role used by the provider.
Policy 1
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:AttachInternetGateway",
"ec2:AssociateRouteTable",
"ec2:CreateInternetGateway",
"ec2:CreateRoute",
"ec2:CreateRouteTable",
"ec2:CreateSubnet",
"ec2:CreateVpc",
"ec2:DescribeInstances",
"ec2:ModifyImageAttribute",
"ec2:RunInstances",
"ec2:TerminateInstances",
"ec2:StartInstances",
"ec2:StopInstances",
"ec2:RebootInstances",
"ec2:DescribeInstanceStatus",
"ec2:DescribeInstanceTypes",
"ec2:DescribeInstanceTypeOfferings",
"ec2:ModifyInstanceAttribute",
"ec2:AssociateIamInstanceProfile",
"ec2:DescribeImages",
"ec2:CreateImage",
"ec2:DeregisterImage",
"ec2:DescribeLaunchTemplateVersions",
"ec2:GetConsoleOutput",
"ec2:DescribeInstanceAttribute",
"ec2:DescribeSubnets",
"ec2:DescribeVpcs",
"ec2:DescribeRouteTables",
"ec2:DescribeNetworkAcls",
"ec2:DescribeDhcpOptions",
"ec2:DescribeNetworkInterfaces",
"ec2:CreateNetworkInterface",
"ec2:AttachNetworkInterface",
"ec2:DeleteNetworkInterface",
"ec2:DisassociateAddress",
"ec2:AllocateAddress",
"ec2:AssociateAddress",
"ec2:ReleaseAddress",
"ec2:DescribeAddresses",
"ec2:DescribeInternetGateways",
"ec2:DescribeNatGateways",
"ec2:DescribeVpcAttribute",
"ec2:DescribeSnapshots",
"ec2:CreateSnapshot",
"ec2:DeleteSnapshot",
"ec2:DescribeSecurityGroups",
"ec2:CreateSecurityGroup",
"ec2:AuthorizeSecurityGroupIngress",
"ec2:AuthorizeSecurityGroupEgress",
"ec2:RevokeSecurityGroupIngress",
"ec2:RevokeSecurityGroupEgress",
"ec2:DeleteSecurityGroup",
"ec2:CreateTags",
"ec2:DeleteTags",
"ec2:DescribeTags",
"ec2:DescribeRegions",
"ec2:DescribeAvailabilityZones",
"ec2:DescribeAccountAttributes"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"autoscaling:DescribeAutoScalingGroups"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"fsx:CreateFileSystem",
"fsx:DescribeFileSystems",
"fsx:DeleteFileSystem",
"fsx:UpdateFileSystem",
"fsx:TagResource",
"fsx:UntagResource"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"workspaces:*"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ds:*",
"ds:DescribeDirectories",
"ds:AuthorizeApplication",
"ds:UnauthorizeApplication",
"ds:UpdateAuthorizedApplication"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"cloudformation:CreateStack",
"cloudformation:UpdateStack",
"cloudformation:DeleteStack",
"cloudformation:DescribeStacks",
"cloudformation:TagResource",
"cloudformation:UntagResource",
"cloudformation:DescribeStackEvents",
"cloudformation:ListStackResources",
"cloudformation:GetTemplate"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"resource-groups:GetGroup",
"resource-groups:CreateGroup",
"resource-groups:DeleteGroup",
"resource-groups:UpdateGroup",
"resource-groups:Tag",
"resource-groups:Untag",
"resource-groups:GetTags",
"resource-groups:ListGroups",
"resource-groups:ListGroupResources",
"resource-groups:ListResourceTypes",
"resource-groups:AssociateResource",
"resource-groups:DisassociateResource"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"elasticloadbalancing:AddTags",
"elasticloadbalancing:RemoveTags",
"elasticloadbalancing:DescribeTags",
"elasticloadbalancing:RegisterTargets",
"elasticloadbalancing:DeregisterTargets",
"elasticloadbalancing:DescribeTargetHealth",
"elasticloadbalancing:CreateListener",
"elasticloadbalancing:DeleteListener",
"elasticloadbalancing:ModifyListener",
"elasticloadbalancing:DescribeListenerAttributes",
"elasticloadbalancing:DescribeListeners",
"elasticloadbalancing:CreateTargetGroup",
"elasticloadbalancing:DeleteTargetGroup",
"elasticloadbalancing:ModifyTargetGroup",
"elasticloadbalancing:DescribeTargetGroups",
"elasticloadbalancing:CreateLoadBalancer",
"elasticloadbalancing:DeleteLoadBalancer",
"elasticloadbalancing:DescribeLoadBalancers",
"elasticloadbalancing:ModifyLoadBalancerAttributes",
"elasticloadbalancing:ModifyTargetGroupAttributes",
"elasticloadbalancing:SetSubnets"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:ListBucket",
"s3:ListAllMyBuckets",
"s3:CreateBucket",
"s3:DeleteObject",
"s3:DeleteBucket",
"s3:PutBucketPolicy",
"s3:GetBucketPolicy",
"s3:DeleteBucketPolicy",
"s3:PutBucketTagging",
"s3:GetBucketLocation",
"s3:PutLifecycleConfiguration",
"s3:PutBucketPublicAccessBlock",
"s3:PutEncryptionConfiguration"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"iam:GetRole",
"iam:PassRole",
"iam:GetPolicy",
"iam:GetPolicyVersion",
"iam:ListAttachedUserPolicies",
"iam:CreateInstanceProfile",
"iam:DeleteInstanceProfile",
"iam:AddRoleToInstanceProfile",
"iam:RemoveRoleFromInstanceProfile",
"iam:SimulatePrincipalPolicy",
"iam:ListAttachedRolePolicies",
"iam:GetInstanceProfile",
"iam:ListInstanceProfilesForRole",
"iam:TagRole",
"iam:UntagRole",
"iam:CreateServiceLinkedRole",
"iam:CreateRole",
"iam:AttachRolePolicy",
"iam:PutRolePolicy",
"iam:ListRoles",
"iam:CreatePolicy"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"tag:GetResources",
"tag:TagResources",
"tag:UntagResources"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey",
"kms:ListKeys",
"kms:ListAliases"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ssm:SendCommand",
"ssm:StartSession",
"ssm:CreateAssociation",
"ssm:DescribeAssociation",
"ssm:GetCommandInvocation",
"ssm:ListCommandInvocations",
"ssm:DescribeInstanceInformation",
"ssm:StartAutomationExecution",
"ssm:DescribeAutomationExecutions",
"ssm:GetAutomationExecution"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"sso:GetApplicationGrant",
"sso:ListInstances",
"sso:DescribeInstance",
"sso:DescribeApplication",
"sso:CreateApplication",
"sso:DeleteApplication",
"sso-directory:SearchUsers",
"sso:PutApplicationAuthenticationMethod",
"sso:PutApplicationAssignmentConfiguration",
"sso:PutApplicationGrant"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"application-autoscaling:PutScheduledAction",
"application-autoscaling:RegisterScalableTarget",
"application-autoscaling:DeleteScalingPolicy",
"application-autoscaling:DescribeScalingPolicies",
"application-autoscaling:PutScalingPolicy",
"application-autoscaling:DeleteScheduledAction",
"application-autoscaling:DescribeScalingActivities",
"application-autoscaling:DescribeScalableTargets",
"application-autoscaling:DescribeScheduledActions",
"application-autoscaling:DeregisterScalableTarget"
],
"Resource": "*"
}
]
}
Policy 2
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"cloudwatch:DeleteAlarms",
"cloudwatch:DescribeAlarms",
"cloudwatch:PutMetricAlarm"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"secretsmanager:ListSecrets"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"servicequotas:GetServiceQuota"
],
"Resource": "*"
}
]
}
Create IAM Roles
An IAM role is an IAM identity that you can create in your account that has specific permissions. An IAM role is similar to an IAM user in that it is an AWS identity with permission policies that determine what the identity can and cannot do in AWS. However, instead of being uniquely associated with one person, a role is intended to be assumable by anyone who needs it. Also, a role does not have standard long-term credentials such as a password or access keys associated with it. Instead, when you assume a role, it provides you with temporary security credentials for your role session.
By following these steps, you can create an IAM role in AWS that provides temporary security credentials for your role session, allowing access to Horizon Cloud while ensuring secure access to your AWS resources. For related information, see Create a role using custom trust policies in AWS documentation.
-
In the IAM console, navigate to the IAM (Identity and Access Management) section in your AWS account.
-
Click Roles in the left pane.
-
Click Create role and select Custom trust policy.
-
Define a custom trust policy by entering the following JSON policy in the Custom trust policy editor.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::211125714243:user/svc.hcs-ng-prod-svc-user" ] }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "{create a custom ExternalId}" } } }, { "Sid": "ssmRoleTrustRelationship", "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "<Customer account number>" } } } ] } -
In the Add permissions section of the IAM console, add the policy defined in the Create IAM Permissions section of this topic.
-
With the above permissions, also add the AWS managed policy
AmazonSSMManagedInstanceCoreto enable SSM related functionalities. See the AWS documentation AmazonSSMManagedInstanceCore.
Was this page helpful?