source/idea/batteries_included/parameters/directoryservice.py (197 lines of code) (raw):

# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 # Code changes made to this file must be replicated in 'source/idea/infrastructure/install/parameters/directoryservice' too from dataclasses import dataclass from typing import Any, Optional from idea.infrastructure.install.constants import OPTIONAL_INPUT_PARAMETER_LABEL_SUFFIX from idea.infrastructure.install.parameters.base import Attributes, Base, Key class DirectoryServiceKey(Key): NAME = "ActiveDirectoryName" LDAP_BASE = "LDAPBase" AD_SHORT_NAME = "ADShortName" LDAP_CONNECTION_URI = "LDAPConnectionURI" USERS_OU = "UsersOU" GROUPS_OU = "GroupsOU" COMPUTERS_OU = "ComputersOU" SUDOERS_GROUP_NAME = "SudoersGroupName" SERVICE_ACCOUNT_PASSWORD = "ServiceAccountPassword" SERVICE_ACCOUNT_CREDENTIALS_SECRET_ARN = "ServiceAccountCredentialsSecretArn" DOMAIN_TLS_CERTIFICATE_SECRET_ARN = "DomainTLSCertificateSecretArn" ENABLE_LDAP_ID_MAPPING = "EnableLdapIDMapping" DISABLE_AD_JOIN = "DisableADJoin" ROOT_USER_DN = "ServiceAccountUserDN" @dataclass class DirectoryServiceParameters(Base): name: str = Base.parameter( Attributes( id=DirectoryServiceKey.NAME, type="AWS::SSM::Parameter::Value<String>", description=( "Please provide parameter store path to contain the Fully Qualified Domain Name (FQDN) for your Active Directory. " ), ) ) ldap_base: str = Base.parameter( Attributes( id=DirectoryServiceKey.LDAP_BASE, type="AWS::SSM::Parameter::Value<String>", description=( "Please provide parameter store path to contain the Active Directory base string Distinguished Name (DN). " ), ) ) ad_short_name: str = Base.parameter( Attributes( id=DirectoryServiceKey.AD_SHORT_NAME, type="AWS::SSM::Parameter::Value<String>", description="Please provide parameter store path to contain the short name in Active directory", ) ) ldap_connection_uri: str = Base.parameter( Attributes( id=DirectoryServiceKey.LDAP_CONNECTION_URI, type="AWS::SSM::Parameter::Value<String>", description="Please provide parameter store path to contain the active directory connection URI (e.g. ldap://www.example.com)", ) ) users_ou: str = Base.parameter( Attributes( id=DirectoryServiceKey.USERS_OU, type="AWS::SSM::Parameter::Value<String>", description=( "Please provide parameter store path to contain Users Organization Unit in your active directory " ), ) ) groups_ou: str = Base.parameter( Attributes( id=DirectoryServiceKey.GROUPS_OU, type="AWS::SSM::Parameter::Value<String>", description="Please provide parameter store path to contain user groups Oganization Unit in your active directory", ) ) computers_ou: str = Base.parameter( Attributes( id=DirectoryServiceKey.COMPUTERS_OU, type="AWS::SSM::Parameter::Value<String>", description="Please provide parameter store path to contain Organization Unit for compute and storage servers in your active directory", ) ) sudoers_group_name: str = Base.parameter( Attributes( id=DirectoryServiceKey.SUDOERS_GROUP_NAME, type="AWS::SSM::Parameter::Value<String>", description="Please provide parameter store path to contain group name of users who will be able to sudo in your active directory", ) ) service_account_password: str = Base.parameter( Attributes( id=DirectoryServiceKey.SERVICE_ACCOUNT_PASSWORD, type="String", description="Please provide Directory Service Root (Service Account) password", no_echo=True, ) ) service_account_credentials_secret_arn: str = Base.parameter( Attributes( id=DirectoryServiceKey.SERVICE_ACCOUNT_CREDENTIALS_SECRET_ARN, type="AWS::SSM::Parameter::Value<String>", description="Directory Service Account Credentials Secret ARN", ) ) domain_tls_certificate_secret_arn: str = Base.parameter( Attributes( id=DirectoryServiceKey.DOMAIN_TLS_CERTIFICATE_SECRET_ARN, type="String", description="AD Domain TLS Certificate Secret ARN", ) ) enable_ldap_id_mapping: str = Base.parameter( Attributes( id=DirectoryServiceKey.ENABLE_LDAP_ID_MAPPING, type="String", description="Set to False to use the uidNumbers and gidNumbers for users and group from the provided AD. Otherwise set to True.", allowed_values=["True", "False", ""], ) ) disable_ad_join: str = Base.parameter( Attributes( id=DirectoryServiceKey.DISABLE_AD_JOIN, type="String", description="Set to True to prevent linux hosts from joining the Directory Domain. Otherwise set to False", allowed_values=["True", "False", ""], ) ) root_user_dn: str = Base.parameter( Attributes( id=DirectoryServiceKey.ROOT_USER_DN, type="AWS::SSM::Parameter::Value<String>", description="Provide the Distinguished name (DN) of the service account user in the Active Directory", no_echo=True, ) ) # These will be populated after the secrets are created from the above parameters root_user_dn_secret_arn: Optional[str] = None class DirectoryServiceParameterGroups: parameter_group_for_directory_service: dict[str, Any] = { "Label": { "default": f"Active Directory details{OPTIONAL_INPUT_PARAMETER_LABEL_SUFFIX}" }, "Parameters": [ DirectoryServiceKey.NAME, DirectoryServiceKey.AD_SHORT_NAME, DirectoryServiceKey.LDAP_BASE, DirectoryServiceKey.LDAP_CONNECTION_URI, DirectoryServiceKey.SERVICE_ACCOUNT_PASSWORD, DirectoryServiceKey.SERVICE_ACCOUNT_CREDENTIALS_SECRET_ARN, DirectoryServiceKey.USERS_OU, DirectoryServiceKey.GROUPS_OU, DirectoryServiceKey.SUDOERS_GROUP_NAME, DirectoryServiceKey.COMPUTERS_OU, DirectoryServiceKey.DOMAIN_TLS_CERTIFICATE_SECRET_ARN, DirectoryServiceKey.ENABLE_LDAP_ID_MAPPING, DirectoryServiceKey.DISABLE_AD_JOIN, DirectoryServiceKey.ROOT_USER_DN, ], } class DirectoryServiceParameterLabels: parameter_labels_for_directory_service: dict[str, Any] = { DirectoryServiceKey.NAME: { "default": f"{DirectoryServiceKey.NAME}{OPTIONAL_INPUT_PARAMETER_LABEL_SUFFIX}" }, DirectoryServiceKey.AD_SHORT_NAME: { "default": f"{DirectoryServiceKey.AD_SHORT_NAME}{OPTIONAL_INPUT_PARAMETER_LABEL_SUFFIX}" }, DirectoryServiceKey.LDAP_BASE: { "default": f"{DirectoryServiceKey.LDAP_BASE}{OPTIONAL_INPUT_PARAMETER_LABEL_SUFFIX}" }, DirectoryServiceKey.LDAP_CONNECTION_URI: { "default": f"{DirectoryServiceKey.LDAP_CONNECTION_URI}{OPTIONAL_INPUT_PARAMETER_LABEL_SUFFIX}" }, DirectoryServiceKey.SERVICE_ACCOUNT_PASSWORD: { "default": f"{DirectoryServiceKey.SERVICE_ACCOUNT_PASSWORD}{OPTIONAL_INPUT_PARAMETER_LABEL_SUFFIX}" }, DirectoryServiceKey.SERVICE_ACCOUNT_CREDENTIALS_SECRET_ARN: { "default": f"{DirectoryServiceKey.SERVICE_ACCOUNT_CREDENTIALS_SECRET_ARN}{OPTIONAL_INPUT_PARAMETER_LABEL_SUFFIX}" }, DirectoryServiceKey.USERS_OU: { "default": f"{DirectoryServiceKey.USERS_OU}{OPTIONAL_INPUT_PARAMETER_LABEL_SUFFIX}" }, DirectoryServiceKey.GROUPS_OU: { "default": f"{DirectoryServiceKey.GROUPS_OU}{OPTIONAL_INPUT_PARAMETER_LABEL_SUFFIX}" }, DirectoryServiceKey.SUDOERS_GROUP_NAME: { "default": f"{DirectoryServiceKey.SUDOERS_GROUP_NAME}{OPTIONAL_INPUT_PARAMETER_LABEL_SUFFIX}" }, DirectoryServiceKey.COMPUTERS_OU: { "default": f"{DirectoryServiceKey.COMPUTERS_OU}{OPTIONAL_INPUT_PARAMETER_LABEL_SUFFIX}" }, DirectoryServiceKey.DOMAIN_TLS_CERTIFICATE_SECRET_ARN: { "default": f"{DirectoryServiceKey.DOMAIN_TLS_CERTIFICATE_SECRET_ARN}{OPTIONAL_INPUT_PARAMETER_LABEL_SUFFIX}" }, DirectoryServiceKey.ENABLE_LDAP_ID_MAPPING: { "default": f"{DirectoryServiceKey.ENABLE_LDAP_ID_MAPPING}{OPTIONAL_INPUT_PARAMETER_LABEL_SUFFIX}" }, DirectoryServiceKey.DISABLE_AD_JOIN: { "default": f"{DirectoryServiceKey.DISABLE_AD_JOIN}{OPTIONAL_INPUT_PARAMETER_LABEL_SUFFIX}" }, DirectoryServiceKey.ROOT_USER_DN: { "default": f"{DirectoryServiceKey.ROOT_USER_DN}{OPTIONAL_INPUT_PARAMETER_LABEL_SUFFIX}" }, }