Seamlessly joining an Amazon EC2 Linux instance to your AWS Managed Microsoft AD Active Directory
This procedure seamlessly joins an Amazon EC2 Linux instance to your AWS Managed Microsoft AD Active Directory. If you need to perform seamless domain join across multiple AWS accounts, you can optionally choose to enable Directory sharing.
The following Linux instance distributions and versions are supported:
-
Amazon Linux AMI 2018.03.0
-
Amazon Linux 2 (64-bit x86)
-
Red Hat Enterprise Linux 8 (HVM) (64-bit x86)
-
Ubuntu Server 18.04 LTS & Ubuntu Server 16.04 LTS
-
CentOS 7 x86-64
-
SUSE Linux Enterprise Server 15 SP1
Note
Distributions prior to Ubuntu 14 and Red Hat Enterprise Linux 7 do not support the seamless domain join feature.
For a demonstration on the process of seamlessly joining a Linux instance to your AWS Managed Microsoft AD Active Directory, see the following YouTube video.
Prerequisites
Before you can set up seamless domain join to a Linux instance, you need to complete the procedures in this section.
Select your seamless domain join service account
You can seamlessly join Linux computers to your AWS Managed Microsoft AD Active Directory domain. To do that, you must use a user account with create computer account permissions to join the machines to the domain. Although members of the AWS delegated administrators or other groups might have sufficient privileges to join computers to the domain, we do not recommend using these. As a best practice, we recommend that you use a service account that has the minimum privileges necessary to join the computers to the domain.
To delegate an account with the minimum privileges necessary to join the computers to the domain, you can run the following PowerShell commands. You must run these commands from a domain-joined Windows computer with the Installing Active Directory Administration Tools for AWS Managed Microsoft AD installed. In addition, you must use an account that has permission to modify the permissions on your Computers OU or container. The PowerShell command sets permissions allowing the service account to create computer objects in your domain’s default computers container.
$AccountName = 'awsSeamlessDomain' # DO NOT modify anything below this comment. # Getting Active Directory information. Import-Module 'ActiveDirectory' $Domain = Get-ADDomain -ErrorAction Stop $BaseDn = $Domain.DistinguishedName $ComputersContainer = $Domain.ComputersContainer $SchemaNamingContext = Get-ADRootDSE | Select-Object -ExpandProperty 'schemaNamingContext' [System.GUID]$ServicePrincipalNameGuid = (Get-ADObject -SearchBase $SchemaNamingContext -Filter { lDAPDisplayName -eq 'Computer' } -Properties 'schemaIDGUID').schemaIDGUID # Getting Service account Information. $AccountProperties = Get-ADUser -Identity $AccountName $AccountSid = New-Object -TypeName 'System.Security.Principal.SecurityIdentifier' $AccountProperties.SID.Value # Getting ACL settings for the Computers container. $ObjectAcl = Get-ACL -Path "AD:\$ComputersContainer" # Setting ACL allowing the service account the ability to create child computer objects in the Computers container. $AddAccessRule = New-Object -TypeName 'System.DirectoryServices.ActiveDirectoryAccessRule' $AccountSid, 'CreateChild', 'Allow', $ServicePrincipalNameGUID, 'All' $ObjectAcl.AddAccessRule($AddAccessRule) Set-ACL -AclObject $ObjectAcl -Path "AD:\$ComputersContainer"
If you prefer using a graphical user interface (GUI) you can use the manual process that is described in Delegate privileges to your service account.
Create the secrets to store the domain service account
You can use AWS Secrets Manager to store the domain service account.
To create secrets and store the domain service account information
-
Sign in to the AWS Management Console and open the AWS Secrets Manager console at https://console.aws.amazon.com/secretsmanager/
. -
Choose Store a new secret.
-
On the Store a new secret page, do the following:
-
Under Secret type, choose Other type of secrets.
-
Under Key/value pairs, do the following:
-
In the first box, enter
awsSeamlessDomainUsername
. On the same row, in the next box, enter the username for your service account. For example, if you used the PowerShell command previously, the service account name would beawsSeamlessDomain
.Note
You must enter
awsSeamlessDomainUsername
exactly as it is. Make sure there are not any leading or ending spaces. Otherwise the domain join will fail. -
Choose Add row.
-
On the new row, in the first box, enter
awsSeamlessDomainPassword
. On the same row, in the next box, enter the password for your service account.Note
You must enter
awsSeamlessDomainPassword
exactly as it is. Make sure there are not any leading or ending spaces. Otherwise the domain join will fail. -
Under Encryption key, leave the default value
aws/secretsmanager
. AWS Secrets Manager always encrypts the secret when you choose this option. You also may choose a key you created.Note
There are fees associated with AWS Secrets Manager, depending on which secret you use. For the current complete pricing list, see AWS Secrets Manager Pricing
. You can use the AWS managed key
aws/secretsmanager
that Secrets Manager creates to encrypt your secrets for free. If you create your own KMS keys to encrypt your secrets, AWS charges you at the current AWS KMS rate. For more information, see AWS Key Management Service Pricing. -
Choose Next.
-
-
-
Under Secret name, enter a secret name that includes your directory ID using the following format, replacing
d-xxxxxxxxx
with your directory ID:aws/directory-services/
d-xxxxxxxxx
/seamless-domain-joinThis will be used to retrieve secrets in the application.
Note
You must enter
aws/directory-services/
exactly as it is but replaced-xxxxxxxxx
/seamless-domain-joind-xxxxxxxxxx
with your directory ID. Make sure that there are no leading or ending spaces. Otherwise the domain join will fail. -
Leave everything else set to defaults, and then choose Next.
-
Under Configure automatic rotation, choose Disable automatic rotation, and then choose Next.
You can turn on rotation for this secret after you store it.
-
Review the settings, and then choose Store to save your changes. The Secrets Manager console returns you to the list of secrets in your account with your new secret now included in the list.
-
Choose your newly created secret name from the list, and take note of the Secret ARN value. You will need it in the next section.
Turn on rotation for the domain service account secret
We recommend that you regularly rotate secrets to improve your security posture.
To turn on rotation for the domain service account secret
-
Follow the instructions in Set up automatic rotation for AWS Secrets Manager secrets in the AWS Secrets Manager User Guide.
For Step 5, use the rotation template Microsoft Active Directory credentials in the AWS Secrets Manager User Guide.
For help, see Troubleshoot AWS Secrets Manager rotation in the AWS Secrets Manager User Guide.
Create the required IAM policy and role
Use the following prerequisite steps to create a custom policy that allows read-only access to your Secrets Manager seamless domain join secret (which you created earlier), and to create a new LinuxEC2DomainJoin IAM role.
Create the Secrets Manager IAM read policy
You use the IAM console to create a policy that grants read-only access to your Secrets Manager secret.
To create the Secrets Manager IAM read policy
-
Sign in to the AWS Management Console as a user that has permission to create IAM policies. Then open the IAM console at https://console.aws.amazon.com/iam/
. -
In the navigation pane, Access Management, choose Policies.
-
Choose Create policy.
-
Choose the JSON tab and copy the text from the following JSON policy document. Then paste it into the JSON text box.
Note
Make sure you replace the Region and Resource ARN with the actual Region and ARN of the secret that you created earlier.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret" ], "Resource": [ "arn:aws:secretsmanager:
us-east-1:xxxxxxxxx
:secret:aws/directory-services/d-xxxxxxxxx
/seamless-domain-join" ] } ] } -
When you are finished, choose Next. The policy validator reports any syntax errors. For more information, see Validating IAM policies.
-
On the Review policy page, enter a policy name, such as
SM-Secret-Linux-DJ-
. Review the Summary section to see the permissions that your policy grants. Then choose Create policy to save your changes. The new policy appears in the list of managed policies and is now ready to attach to an identity.d-xxxxxxxxxx
-Read
Note
We recommend you create one policy per secret. Doing so ensures that instances only have access to the appropriate secret and minimizes the impact if an instance is compromised.
Create the LinuxEC2DomainJoin role
You use the IAM console to create the role that you will use to domain join your Linux EC2 instance.
To create the LinuxEC2DomainJoin role
-
Sign in to the AWS Management Console as a user that has permission to create IAM policies. Then open the IAM console at https://console.aws.amazon.com/iam/
. -
In the navigation pane, under Access Management, choose Roles.
-
In the content pane, choose Create role.
-
Under Select type of trusted entity, choose AWS service.
-
Under Use case, choose EC2, and then choose Next.
-
For Filter policies, do the following:
-
Enter
AmazonSSMManagedInstanceCore
. Then select the check box for that item in the list. -
Enter
AmazonSSMDirectoryServiceAccess
. Then select the check box for that item in the list. -
Enter
SM-Secret-Linux-DJ-
(or the name of the policy that you created in the previous procedure). Then select the check box for that item in the list.d-xxxxxxxxxx
-Read After adding the three policies listed above, select Create role.
Note
AmazonSSMDirectoryServiceAccess provides the permissions to join instances to an Active Directory managed by AWS Directory Service. AmazonSSMManagedInstanceCore provides the minimum permissions necessary to use the AWS Systems Manager service. For more information about creating a role with these permissions, and for information about other permissions and policies you can assign to your IAM role, see Create an IAM instance profile for Systems Manager in the AWS Systems Manager User Guide.
-
Enter a name for your new role, such as
LinuxEC2DomainJoin
or another name that you prefer in the Role name field.(Optional) For Role description, enter a description.
(Optional) Choose Add new tag under Step 3: Add tags to add tags. Tag key-value pairs are used to organize, track, or control access for this role.
-
Choose Create role.
Seamlessly join your Linux instance
To seamlessly join your Linux instance
-
Sign in to the AWS Management Console and open the Amazon EC2 console at https://console.aws.amazon.com/ec2/
. -
From the Region selector in the navigation bar, choose the same AWS Region as the existing directory.
-
On the EC2 Dashboard, in the Launch instance section, choose Launch instance.
-
On the Launch an instance page, under the Name and Tags section, enter the name you would like to use for your Linux EC2 instance.
(Optional) Choose Add additional tags to add one or more tag key-value pairs to organize, track, or control access for this EC2 instance.
-
In the Application and OS Image (Amazon Machine Image) section, choose a Linux AMI you wish to launch.
Note
The AMI used must have AWS Systems Manager (SSM Agent) version 2.3.1644.0 or higher. To check the installed SSM Agent version in your AMI by launching an instance from that AMI, see Getting the currently installed SSM Agent version. If you need to upgrade the SSM Agent, see Installing and configuring SSM Agent on EC2 instances for Linux.
SSM uses the
aws:domainJoin
plugin when joining a Linux instance to a Active Directory domain. The plugin changes the hostname for the Linux instances to the format EC2AMAZ-XXXXXXX
. For more information aboutaws:domainJoin
, see AWS Systems Manager command document plugin reference in the AWS Systems Manager User Guide. -
In the Instance type section, choose the instance type you would like to use from Instance type dropdown list.
-
In the Key pair (login) section, you can either choose to create a new key pair or choose from an existing key pair. To create a new key pair, choose Create new key pair. Enter a name for the key pair and select an option for the Key pair type and Private key file format. To save the private key in a format that can be used with OpenSSH, choose .pem. To save the private key in a format that can be used with PuTTY, choose .ppk. Choose create key pair. The private key file is automatically downloaded by your browser. Save the private key file in a safe place.
Important
This is the only chance for you to save the private key file.
-
On the Launch an instance page, under Network settings section, choose Edit. Choose the VPC that your directory was created in from the VPC - required dropdown list.
-
Choose one of the public subnets in your VPC from the Subnet dropdown list. The subnet you choose must have all external traffic routed to an internet gateway. If this is not the case, you won't be able to connect to the instance remotely.
For more information on how to connect to a internet gateway, see Connect to the internet using an internet gateway in the Amazon VPC User Guide.
-
Under Auto-assign public IP, choose Enable.
For more information about public and private IP addressing, see Amazon EC2 instance IP addressing in the Amazon EC2 User Guide.
-
For Firewall (security groups) settings, you can use the default settings or make changes to meet your needs.
-
For Configure storage settings, you can use the default settings or make changes to meet your needs.
-
Select Advanced details section, choose your domain from the Domain join directory dropdown list.
Note
After choosing the Domain join directory, you may see:
This error occurs if the EC2 launch wizard identifies an existing SSM document with unexpected properties. You can do one of the following:
If you previously edited the SSM document and the properties are expected, choose close and proceed to launch the EC2 instance with no changes.
Select the delete the existing SSM document here link to delete the SSM document. This will allow for the creation of an SSM document with the correct properties. The SSM document will automatically be created when you launch the EC2 instance.
-
For IAM instance profile, choose the IAM role that you previously created in the prerequisites section Step 2: Create the LinuxEC2DomainJoin role.
-
Choose Launch instance.
Note
If you are performing a seamless domain join with SUSE Linux, a reboot is required before authentications will work. To reboot SUSE from the Linux terminal, type sudo reboot.