VaporShell.ACMPCA.psm1

# PSM1 Contents
function Format-Json {
    [CmdletBinding()]
    Param (
        [Parameter(Mandatory = $true, Position = 0, ValueFromPipeline = $true)]
        [String]
        $Json
    )
    Begin {
        $cleaner = {
            param([String]$Line)
            Process{
                [Regex]::Replace(
                    $Line,
                    "\\u(?<Value>[a-zA-Z0-9]{4})",
                    {
                        param($m)([char]([int]::Parse(
                            $m.Groups['Value'].Value,
                            [System.Globalization.NumberStyles]::HexNumber
                        ))).ToString()
                    }
                )
            }
        }
    }
    Process {
        if ($PSVersionTable.PSVersion.Major -lt 6) {
            try {
                $indent = 0;
                $res = $Json -split '\n' | ForEach-Object {
                    if ($_ -match '[\}\]]') {
                        # This line contains ] or }, decrement the indentation level
                        $indent--
                    }
                    $line = (' ' * $indent * 2) + $_.TrimStart().Replace(': ', ': ')
                    if ($_ -match '[\{\[]') {
                        # This line contains [ or {, increment the indentation level
                        $indent++
                    }
                    $cleaner.Invoke($line)
                }
                $res -join "`n"
            }
            catch {
                ($Json -split '\n' | ForEach-Object {$cleaner.Invoke($_)}) -join "`n"
            }
        }
        else {
            ($Json -split '\n' | ForEach-Object {$cleaner.Invoke($_)}) -join "`n"
        }
    }
}

function Get-TrueCount {
    Param
    (
        [parameter(Mandatory = $false,Position = 0,ValueFromPipeline = $true)]
        $Array
    )
    Process {
        if ($array) {
            if ($array.Count) {
                $count = $array.Count
            }
            else {
                $count = 1
            }
        }
        else {
            $count = 0
        }
    }
    End {
        return $count
    }
}

function New-VSError {
    <#
    .SYNOPSIS
    Error generator function to use in tandem with $PSCmdlet.ThrowTerminatingError()
    
    .PARAMETER Result
    Allows input of an error from AWS SDK, resulting in the Exception message being parsed out.
    
    .PARAMETER String
    Used to create basic String message errors in the same wrapper
    #>

    [cmdletbinding(DefaultParameterSetName="Result")]
    param(
        [parameter(Position=0,ParameterSetName="Result")]
        $Result,
        [parameter(Position=0,ParameterSetName="String")]
        $String
    )
    switch ($PSCmdlet.ParameterSetName) {
        Result { $Exception = "$($result.Exception.InnerException.Message)" }
        String { $Exception = "$String" }
    }
    $e = New-Object "System.Exception" $Exception
    $errorRecord = New-Object 'System.Management.Automation.ErrorRecord' $e, $null, ([System.Management.Automation.ErrorCategory]::InvalidOperation), $null
    return $errorRecord
}

function ResolveS3Endpoint {
    <#
    .SYNOPSIS
    Resolves the S3 endpoint most appropriate for each region.
    #>

    Param
    (
      [parameter(Mandatory=$true,Position=0)]
      [ValidateSet("eu-west-2","ap-south-1","us-east-2","sa-east-1","us-west-1","us-west-2","eu-west-1","ap-southeast-2","ca-central-1","ap-northeast-2","us-east-1","eu-central-1","ap-southeast-1","ap-northeast-1")]
      [String]
      $Region
    )
    $endpointMap = @{
        "us-east-2" = "s3.us-east-2.amazonaws.com"
        "us-east-1" = "s3.amazonaws.com"
        "us-west-1" = "s3-us-west-1.amazonaws.com"
        "us-west-2" = "s3-us-west-2.amazonaws.com"
        "ca-central-1" = "s3.ca-central-1.amazonaws.com"
        "ap-south-1" = "s3.ap-south-1.amazonaws.com"
        "ap-northeast-2" = "s3.ap-northeast-2.amazonaws.com"
        "ap-southeast-1" = "s3-ap-southeast-1.amazonaws.com"
        "ap-southeast-2" = "s3-ap-southeast-2.amazonaws.com"
        "ap-northeast-1" = "s3-ap-northeast-1.amazonaws.com"
        "eu-central-1" = "s3.eu-central-1.amazonaws.com"
        "eu-west-1" = "s3-eu-west-1.amazonaws.com"
        "eu-west-2" = "s3.eu-west-2.amazonaws.com"
        "sa-east-1" = "s3-sa-east-1.amazonaws.com"
    }
    return $endpointMap[$Region]
}

function Add-VSACMPCACertificateApiPassthrough {
    <#
    .SYNOPSIS
        Adds an AWS::ACMPCA::Certificate.ApiPassthrough resource property to the template.

    .DESCRIPTION
        Adds an AWS::ACMPCA::Certificate.ApiPassthrough resource property to the template.


    .LINK
        http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-apipassthrough.html

    .PARAMETER Extensions
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-apipassthrough.html#cfn-acmpca-certificate-apipassthrough-extensions
        UpdateType: Immutable
        Type: Extensions

    .PARAMETER Subject
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-apipassthrough.html#cfn-acmpca-certificate-apipassthrough-subject
        UpdateType: Immutable
        Type: Subject

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([ACMPCACertificateApiPassthrough])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        $Extensions,
        [parameter(Mandatory = $false)]
        $Subject
    )
    Process {
        $obj = [ACMPCACertificateApiPassthrough]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSACMPCACertificateApiPassthrough'

function Add-VSACMPCACertificateAuthorityAccessDescription {
    <#
    .SYNOPSIS
        Adds an AWS::ACMPCA::CertificateAuthority.AccessDescription resource property to the template.

    .DESCRIPTION
        Adds an AWS::ACMPCA::CertificateAuthority.AccessDescription resource property to the template.


    .LINK
        http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-accessdescription.html

    .PARAMETER AccessMethod
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-accessdescription.html#cfn-acmpca-certificateauthority-accessdescription-accessmethod
        UpdateType: Immutable
        Type: AccessMethod

    .PARAMETER AccessLocation
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-accessdescription.html#cfn-acmpca-certificateauthority-accessdescription-accesslocation
        UpdateType: Immutable
        Type: GeneralName

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([ACMPCACertificateAuthorityAccessDescription])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        $AccessMethod,
        [parameter(Mandatory = $true)]
        $AccessLocation
    )
    Process {
        $obj = [ACMPCACertificateAuthorityAccessDescription]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSACMPCACertificateAuthorityAccessDescription'

function Add-VSACMPCACertificateAuthorityAccessMethod {
    <#
    .SYNOPSIS
        Adds an AWS::ACMPCA::CertificateAuthority.AccessMethod resource property to the template.

    .DESCRIPTION
        Adds an AWS::ACMPCA::CertificateAuthority.AccessMethod resource property to the template.


    .LINK
        http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-accessmethod.html

    .PARAMETER CustomObjectIdentifier
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-accessmethod.html#cfn-acmpca-certificateauthority-accessmethod-customobjectidentifier
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER AccessMethodType
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-accessmethod.html#cfn-acmpca-certificateauthority-accessmethod-accessmethodtype
        UpdateType: Immutable
        PrimitiveType: String

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([ACMPCACertificateAuthorityAccessMethod])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        [object]
        $CustomObjectIdentifier,
        [parameter(Mandatory = $false)]
        [object]
        $AccessMethodType
    )
    Process {
        $obj = [ACMPCACertificateAuthorityAccessMethod]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSACMPCACertificateAuthorityAccessMethod'

function Add-VSACMPCACertificateAuthorityCrlConfiguration {
    <#
    .SYNOPSIS
        Adds an AWS::ACMPCA::CertificateAuthority.CrlConfiguration resource property to the template. Contains configuration information for a certificate revocation list (CRL. Your private certificate authority (CA creates base CRLs. Delta CRLs are not supported. You can enable CRLs for your new or an existing private CA by setting the **Enabled** parameter to true. Your private CA writes CRLs to an S3 bucket that you specify in the **S3BucketName** parameter. You can hide the name of your bucket by specifying a value for the **CustomCname** parameter. Your private CA copies the CNAME or the S3 bucket name to the **CRL Distribution Points** extension of each certificate it issues. Your S3 bucket policy must give write permission to ACM Private CA.

    .DESCRIPTION
        Adds an AWS::ACMPCA::CertificateAuthority.CrlConfiguration resource property to the template.
Contains configuration information for a certificate revocation list (CRL. Your private certificate authority (CA creates base CRLs. Delta CRLs are not supported. You can enable CRLs for your new or an existing private CA by setting the **Enabled** parameter to true. Your private CA writes CRLs to an S3 bucket that you specify in the **S3BucketName** parameter. You can hide the name of your bucket by specifying a value for the **CustomCname** parameter. Your private CA copies the CNAME or the S3 bucket name to the **CRL Distribution Points** extension of each certificate it issues. Your S3 bucket policy must give write permission to ACM Private CA.

ACM Private CA assets that are stored in Amazon S3 can be protected with encryption. For more information, see Encrypting Your CRLs: https://docs.aws.amazon.com/acm-pca/latest/userguide/PcaCreateCa.html#crl-encryption.

Your private CA uses the value in the **ExpirationInDays** parameter to calculate the **nextUpdate** field in the CRL. The CRL is refreshed at 1/2 the age of next update or when a certificate is revoked. When a certificate is revoked, it is recorded in the next CRL that is generated and in the next audit report. Only time valid certificates are listed in the CRL. Expired certificates are not included.

CRLs contain the following fields:

+ **Version**: The current version number defined in RFC 5280 is V2. The integer value is 0x1.

+ **Signature Algorithm**: The name of the algorithm used to sign the CRL.

+ **Issuer**: The X.500 distinguished name of your private CA that issued the CRL.

+ **Last Update**: The issue date and time of this CRL.

+ **Next Update**: The day and time by which the next CRL will be issued.

+ **Revoked Certificates**: List of revoked certificates. Each list item contains the following information.

+ **Serial Number**: The serial number, in hexadecimal format, of the revoked certificate.

+ **Revocation Date**: Date and time the certificate was revoked.

+ **CRL Entry Extensions**: Optional extensions for the CRL entry.

+ **X509v3 CRL Reason Code**: Reason the certificate was revoked.

+ **CRL Extensions**: Optional extensions for the CRL.

+ **X509v3 Authority Key Identifier**: Identifies the public key associated with the private key used to sign the certificate.

+ **X509v3 CRL Number:**: Decimal sequence number for the CRL.

+ **Signature Algorithm**: Algorithm used by your private CA to sign the CRL.

+ **Signature Value**: Signature computed over the CRL.

Certificate revocation lists created by ACM Private CA are DER-encoded. You can use the following OpenSSL command to list a CRL.

openssl crl -inform DER -text -in crl_path -noout

    .LINK
        http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-crlconfiguration.html

    .PARAMETER Enabled
        Boolean value that specifies whether certificate revocation lists CRLs are enabled. You can use this value to enable certificate revocation for a new CA when you call the CreateCertificateAuthority: https://docs.aws.amazon.com/acm-pca/latest/APIReference/API_CreateCertificateAuthority.html action or for an existing CA when you call the UpdateCertificateAuthority: https://docs.aws.amazon.com/acm-pca/latest/APIReference/API_UpdateCertificateAuthority.html action.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-crlconfiguration.html#cfn-acmpca-certificateauthority-crlconfiguration-enabled
        UpdateType: Mutable
        PrimitiveType: Boolean

    .PARAMETER ExpirationInDays
        Number of days until a certificate expires.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-crlconfiguration.html#cfn-acmpca-certificateauthority-crlconfiguration-expirationindays
        UpdateType: Mutable
        PrimitiveType: Integer

    .PARAMETER CustomCname
        Name inserted into the certificate **CRL Distribution Points** extension that enables the use of an alias for the CRL distribution point. Use this value if you don't want the name of your S3 bucket to be public.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-crlconfiguration.html#cfn-acmpca-certificateauthority-crlconfiguration-customcname
        UpdateType: Mutable
        PrimitiveType: String

    .PARAMETER S3BucketName
        Name of the S3 bucket that contains the CRL. If you do not provide a value for the **CustomCname** argument, the name of your S3 bucket is placed into the **CRL Distribution Points** extension of the issued certificate. You can change the name of your bucket by calling the UpdateCertificateAuthority: https://docs.aws.amazon.com/acm-pca/latest/APIReference/API_UpdateCertificateAuthority.html action. You must specify a bucket policy that allows ACM Private CA to write the CRL to your bucket.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-crlconfiguration.html#cfn-acmpca-certificateauthority-crlconfiguration-s3bucketname
        UpdateType: Mutable
        PrimitiveType: String

    .PARAMETER S3ObjectAcl
        *Update requires*: No interruption: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-no-interrupt

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-crlconfiguration.html#cfn-acmpca-certificateauthority-crlconfiguration-s3objectacl
        UpdateType: Mutable
        PrimitiveType: String

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([ACMPCACertificateAuthorityCrlConfiguration])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        [object]
        $Enabled,
        [parameter(Mandatory = $false)]
        [object]
        $ExpirationInDays,
        [parameter(Mandatory = $false)]
        [object]
        $CustomCname,
        [parameter(Mandatory = $false)]
        [object]
        $S3BucketName,
        [parameter(Mandatory = $false)]
        [object]
        $S3ObjectAcl
    )
    Process {
        $obj = [ACMPCACertificateAuthorityCrlConfiguration]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSACMPCACertificateAuthorityCrlConfiguration'

function Add-VSACMPCACertificateAuthorityCsrExtensions {
    <#
    .SYNOPSIS
        Adds an AWS::ACMPCA::CertificateAuthority.CsrExtensions resource property to the template.

    .DESCRIPTION
        Adds an AWS::ACMPCA::CertificateAuthority.CsrExtensions resource property to the template.


    .LINK
        http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-csrextensions.html

    .PARAMETER KeyUsage
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-csrextensions.html#cfn-acmpca-certificateauthority-csrextensions-keyusage
        UpdateType: Immutable
        Type: KeyUsage

    .PARAMETER SubjectInformationAccess
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-csrextensions.html#cfn-acmpca-certificateauthority-csrextensions-subjectinformationaccess
        UpdateType: Immutable
        Type: List
        ItemType: AccessDescription

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([ACMPCACertificateAuthorityCsrExtensions])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        $KeyUsage,
        [parameter(Mandatory = $false)]
        [object]
        $SubjectInformationAccess
    )
    Process {
        $obj = [ACMPCACertificateAuthorityCsrExtensions]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSACMPCACertificateAuthorityCsrExtensions'

function Add-VSACMPCACertificateAuthorityEdiPartyName {
    <#
    .SYNOPSIS
        Adds an AWS::ACMPCA::CertificateAuthority.EdiPartyName resource property to the template.

    .DESCRIPTION
        Adds an AWS::ACMPCA::CertificateAuthority.EdiPartyName resource property to the template.


    .LINK
        http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-edipartyname.html

    .PARAMETER PartyName
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-edipartyname.html#cfn-acmpca-certificateauthority-edipartyname-partyname
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER NameAssigner
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-edipartyname.html#cfn-acmpca-certificateauthority-edipartyname-nameassigner
        UpdateType: Immutable
        PrimitiveType: String

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([ACMPCACertificateAuthorityEdiPartyName])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $PartyName,
        [parameter(Mandatory = $true)]
        [object]
        $NameAssigner
    )
    Process {
        $obj = [ACMPCACertificateAuthorityEdiPartyName]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSACMPCACertificateAuthorityEdiPartyName'

function Add-VSACMPCACertificateAuthorityGeneralName {
    <#
    .SYNOPSIS
        Adds an AWS::ACMPCA::CertificateAuthority.GeneralName resource property to the template.

    .DESCRIPTION
        Adds an AWS::ACMPCA::CertificateAuthority.GeneralName resource property to the template.


    .LINK
        http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-generalname.html

    .PARAMETER OtherName
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-generalname.html#cfn-acmpca-certificateauthority-generalname-othername
        UpdateType: Immutable
        Type: OtherName

    .PARAMETER Rfc822Name
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-generalname.html#cfn-acmpca-certificateauthority-generalname-rfc822name
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER DnsName
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-generalname.html#cfn-acmpca-certificateauthority-generalname-dnsname
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER DirectoryName
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-generalname.html#cfn-acmpca-certificateauthority-generalname-directoryname
        UpdateType: Immutable
        Type: Subject

    .PARAMETER EdiPartyName
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-generalname.html#cfn-acmpca-certificateauthority-generalname-edipartyname
        UpdateType: Immutable
        Type: EdiPartyName

    .PARAMETER UniformResourceIdentifier
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-generalname.html#cfn-acmpca-certificateauthority-generalname-uniformresourceidentifier
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER IpAddress
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-generalname.html#cfn-acmpca-certificateauthority-generalname-ipaddress
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER RegisteredId
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-generalname.html#cfn-acmpca-certificateauthority-generalname-registeredid
        UpdateType: Immutable
        PrimitiveType: String

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([ACMPCACertificateAuthorityGeneralName])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        $OtherName,
        [parameter(Mandatory = $false)]
        [object]
        $Rfc822Name,
        [parameter(Mandatory = $false)]
        [object]
        $DnsName,
        [parameter(Mandatory = $false)]
        $DirectoryName,
        [parameter(Mandatory = $false)]
        $EdiPartyName,
        [parameter(Mandatory = $false)]
        [object]
        $UniformResourceIdentifier,
        [parameter(Mandatory = $false)]
        [object]
        $IpAddress,
        [parameter(Mandatory = $false)]
        [object]
        $RegisteredId
    )
    Process {
        $obj = [ACMPCACertificateAuthorityGeneralName]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSACMPCACertificateAuthorityGeneralName'

function Add-VSACMPCACertificateAuthorityKeyUsage {
    <#
    .SYNOPSIS
        Adds an AWS::ACMPCA::CertificateAuthority.KeyUsage resource property to the template.

    .DESCRIPTION
        Adds an AWS::ACMPCA::CertificateAuthority.KeyUsage resource property to the template.


    .LINK
        http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html

    .PARAMETER DigitalSignature
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html#cfn-acmpca-certificateauthority-keyusage-digitalsignature
        UpdateType: Immutable
        PrimitiveType: Boolean

    .PARAMETER NonRepudiation
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html#cfn-acmpca-certificateauthority-keyusage-nonrepudiation
        UpdateType: Immutable
        PrimitiveType: Boolean

    .PARAMETER KeyEncipherment
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html#cfn-acmpca-certificateauthority-keyusage-keyencipherment
        UpdateType: Immutable
        PrimitiveType: Boolean

    .PARAMETER DataEncipherment
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html#cfn-acmpca-certificateauthority-keyusage-dataencipherment
        UpdateType: Immutable
        PrimitiveType: Boolean

    .PARAMETER KeyAgreement
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html#cfn-acmpca-certificateauthority-keyusage-keyagreement
        UpdateType: Immutable
        PrimitiveType: Boolean

    .PARAMETER KeyCertSign
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html#cfn-acmpca-certificateauthority-keyusage-keycertsign
        UpdateType: Immutable
        PrimitiveType: Boolean

    .PARAMETER CRLSign
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html#cfn-acmpca-certificateauthority-keyusage-crlsign
        UpdateType: Immutable
        PrimitiveType: Boolean

    .PARAMETER EncipherOnly
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html#cfn-acmpca-certificateauthority-keyusage-encipheronly
        UpdateType: Immutable
        PrimitiveType: Boolean

    .PARAMETER DecipherOnly
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html#cfn-acmpca-certificateauthority-keyusage-decipheronly
        UpdateType: Immutable
        PrimitiveType: Boolean

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([ACMPCACertificateAuthorityKeyUsage])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        [object]
        $DigitalSignature,
        [parameter(Mandatory = $false)]
        [object]
        $NonRepudiation,
        [parameter(Mandatory = $false)]
        [object]
        $KeyEncipherment,
        [parameter(Mandatory = $false)]
        [object]
        $DataEncipherment,
        [parameter(Mandatory = $false)]
        [object]
        $KeyAgreement,
        [parameter(Mandatory = $false)]
        [object]
        $KeyCertSign,
        [parameter(Mandatory = $false)]
        [object]
        $CRLSign,
        [parameter(Mandatory = $false)]
        [object]
        $EncipherOnly,
        [parameter(Mandatory = $false)]
        [object]
        $DecipherOnly
    )
    Process {
        $obj = [ACMPCACertificateAuthorityKeyUsage]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSACMPCACertificateAuthorityKeyUsage'

function Add-VSACMPCACertificateAuthorityOcspConfiguration {
    <#
    .SYNOPSIS
        Adds an AWS::ACMPCA::CertificateAuthority.OcspConfiguration resource property to the template.

    .DESCRIPTION
        Adds an AWS::ACMPCA::CertificateAuthority.OcspConfiguration resource property to the template.


    .LINK
        http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-ocspconfiguration.html

    .PARAMETER Enabled
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-ocspconfiguration.html#cfn-acmpca-certificateauthority-ocspconfiguration-enabled
        UpdateType: Mutable
        PrimitiveType: Boolean

    .PARAMETER OcspCustomCname
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-ocspconfiguration.html#cfn-acmpca-certificateauthority-ocspconfiguration-ocspcustomcname
        UpdateType: Mutable
        PrimitiveType: String

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([ACMPCACertificateAuthorityOcspConfiguration])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        [object]
        $Enabled,
        [parameter(Mandatory = $false)]
        [object]
        $OcspCustomCname
    )
    Process {
        $obj = [ACMPCACertificateAuthorityOcspConfiguration]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSACMPCACertificateAuthorityOcspConfiguration'

function Add-VSACMPCACertificateAuthorityOtherName {
    <#
    .SYNOPSIS
        Adds an AWS::ACMPCA::CertificateAuthority.OtherName resource property to the template.

    .DESCRIPTION
        Adds an AWS::ACMPCA::CertificateAuthority.OtherName resource property to the template.


    .LINK
        http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-othername.html

    .PARAMETER TypeId
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-othername.html#cfn-acmpca-certificateauthority-othername-typeid
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER Value
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-othername.html#cfn-acmpca-certificateauthority-othername-value
        UpdateType: Immutable
        PrimitiveType: String

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([ACMPCACertificateAuthorityOtherName])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $TypeId,
        [parameter(Mandatory = $true)]
        [object]
        $Value
    )
    Process {
        $obj = [ACMPCACertificateAuthorityOtherName]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSACMPCACertificateAuthorityOtherName'

function Add-VSACMPCACertificateAuthorityRevocationConfiguration {
    <#
    .SYNOPSIS
        Adds an AWS::ACMPCA::CertificateAuthority.RevocationConfiguration resource property to the template. Certificate revocation information used by the CreateCertificateAuthority: https://docs.aws.amazon.com/acm-pca/latest/APIReference/API_CreateCertificateAuthority.html and UpdateCertificateAuthority: https://docs.aws.amazon.com/acm-pca/latest/APIReference/API_UpdateCertificateAuthority.html actions. Your private certificate authority (CA can create and maintain a certificate revocation list (CRL. A CRL contains information about certificates revoked by your CA. For more information, see RevokeCertificate: https://docs.aws.amazon.com/acm-pca/latest/APIReference/API_RevokeCertificate.html.

    .DESCRIPTION
        Adds an AWS::ACMPCA::CertificateAuthority.RevocationConfiguration resource property to the template.
Certificate revocation information used by the CreateCertificateAuthority: https://docs.aws.amazon.com/acm-pca/latest/APIReference/API_CreateCertificateAuthority.html and UpdateCertificateAuthority: https://docs.aws.amazon.com/acm-pca/latest/APIReference/API_UpdateCertificateAuthority.html actions. Your private certificate authority (CA can create and maintain a certificate revocation list (CRL. A CRL contains information about certificates revoked by your CA. For more information, see RevokeCertificate: https://docs.aws.amazon.com/acm-pca/latest/APIReference/API_RevokeCertificate.html.

    .LINK
        http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-revocationconfiguration.html

    .PARAMETER CrlConfiguration
        Configuration of the certificate revocation list CRL, if any, maintained by your private CA.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-revocationconfiguration.html#cfn-acmpca-certificateauthority-revocationconfiguration-crlconfiguration
        UpdateType: Mutable
        Type: CrlConfiguration

    .PARAMETER OcspConfiguration
        *Update requires*: No interruption: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-no-interrupt

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-revocationconfiguration.html#cfn-acmpca-certificateauthority-revocationconfiguration-ocspconfiguration
        UpdateType: Mutable
        Type: OcspConfiguration

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([ACMPCACertificateAuthorityRevocationConfiguration])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        $CrlConfiguration,
        [parameter(Mandatory = $false)]
        $OcspConfiguration
    )
    Process {
        $obj = [ACMPCACertificateAuthorityRevocationConfiguration]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSACMPCACertificateAuthorityRevocationConfiguration'

function Add-VSACMPCACertificateAuthoritySubject {
    <#
    .SYNOPSIS
        Adds an AWS::ACMPCA::CertificateAuthority.Subject resource property to the template. ASN1 subject for the certificate authority.

    .DESCRIPTION
        Adds an AWS::ACMPCA::CertificateAuthority.Subject resource property to the template.
ASN1 subject for the certificate authority.

    .LINK
        http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-subject.html

    .PARAMETER Country
        Two-digit code that specifies the country in which the certificate subject located.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-subject.html#cfn-acmpca-certificateauthority-subject-country
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER Organization
        Legal name of the organization with which the certificate subject is affiliated.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-subject.html#cfn-acmpca-certificateauthority-subject-organization
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER OrganizationalUnit
        A subdivision or unit of the organization such as sales or finance with which the certificate subject is affiliated.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-subject.html#cfn-acmpca-certificateauthority-subject-organizationalunit
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER DistinguishedNameQualifier
        Disambiguating information for the certificate subject.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-subject.html#cfn-acmpca-certificateauthority-subject-distinguishednamequalifier
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER State
        State in which the subject of the certificate is located.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-subject.html#cfn-acmpca-certificateauthority-subject-state
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER CommonName
        Fully qualified domain name FQDN associated with the certificate subject.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-subject.html#cfn-acmpca-certificateauthority-subject-commonname
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER SerialNumber
        The certificate serial number.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-subject.html#cfn-acmpca-certificateauthority-subject-serialnumber
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER Locality
        The locality such as a city or town in which the certificate subject is located.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-subject.html#cfn-acmpca-certificateauthority-subject-locality
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER Title
        A personal title such as Mr.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-subject.html#cfn-acmpca-certificateauthority-subject-title
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER Surname
        Family name.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-subject.html#cfn-acmpca-certificateauthority-subject-surname
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER GivenName
        First name.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-subject.html#cfn-acmpca-certificateauthority-subject-givenname
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER Initials
        Concatenation that typically contains the first letter of the GivenName, the first letter of the middle name if one exists, and the first letter of the SurName.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-subject.html#cfn-acmpca-certificateauthority-subject-initials
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER Pseudonym
        Typically a shortened version of a longer GivenName. For example, Jonathan is often shortened to John. Elizabeth is often shortened to Beth, Liz, or Eliza.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-subject.html#cfn-acmpca-certificateauthority-subject-pseudonym
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER GenerationQualifier
        Typically a qualifier appended to the name of an individual. Examples include Jr. for junior, Sr. for senior, and III for third.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-subject.html#cfn-acmpca-certificateauthority-subject-generationqualifier
        UpdateType: Immutable
        PrimitiveType: String

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([ACMPCACertificateAuthoritySubject])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        [object]
        $Country,
        [parameter(Mandatory = $false)]
        [object]
        $Organization,
        [parameter(Mandatory = $false)]
        [object]
        $OrganizationalUnit,
        [parameter(Mandatory = $false)]
        [object]
        $DistinguishedNameQualifier,
        [parameter(Mandatory = $false)]
        [object]
        $State,
        [parameter(Mandatory = $false)]
        [object]
        $CommonName,
        [parameter(Mandatory = $false)]
        [object]
        $SerialNumber,
        [parameter(Mandatory = $false)]
        [object]
        $Locality,
        [parameter(Mandatory = $false)]
        [object]
        $Title,
        [parameter(Mandatory = $false)]
        [object]
        $Surname,
        [parameter(Mandatory = $false)]
        [object]
        $GivenName,
        [parameter(Mandatory = $false)]
        [object]
        $Initials,
        [parameter(Mandatory = $false)]
        [object]
        $Pseudonym,
        [parameter(Mandatory = $false)]
        [object]
        $GenerationQualifier
    )
    Process {
        $obj = [ACMPCACertificateAuthoritySubject]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSACMPCACertificateAuthoritySubject'

function Add-VSACMPCACertificateEdiPartyName {
    <#
    .SYNOPSIS
        Adds an AWS::ACMPCA::Certificate.EdiPartyName resource property to the template.

    .DESCRIPTION
        Adds an AWS::ACMPCA::Certificate.EdiPartyName resource property to the template.


    .LINK
        http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-edipartyname.html

    .PARAMETER PartyName
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-edipartyname.html#cfn-acmpca-certificate-edipartyname-partyname
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER NameAssigner
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-edipartyname.html#cfn-acmpca-certificate-edipartyname-nameassigner
        UpdateType: Immutable
        PrimitiveType: String

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([ACMPCACertificateEdiPartyName])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $PartyName,
        [parameter(Mandatory = $true)]
        [object]
        $NameAssigner
    )
    Process {
        $obj = [ACMPCACertificateEdiPartyName]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSACMPCACertificateEdiPartyName'

function Add-VSACMPCACertificateExtendedKeyUsage {
    <#
    .SYNOPSIS
        Adds an AWS::ACMPCA::Certificate.ExtendedKeyUsage resource property to the template.

    .DESCRIPTION
        Adds an AWS::ACMPCA::Certificate.ExtendedKeyUsage resource property to the template.


    .LINK
        http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-extendedkeyusage.html

    .PARAMETER ExtendedKeyUsageType
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-extendedkeyusage.html#cfn-acmpca-certificate-extendedkeyusage-extendedkeyusagetype
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER ExtendedKeyUsageObjectIdentifier
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-extendedkeyusage.html#cfn-acmpca-certificate-extendedkeyusage-extendedkeyusageobjectidentifier
        UpdateType: Immutable
        PrimitiveType: String

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([ACMPCACertificateExtendedKeyUsage])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        [object]
        $ExtendedKeyUsageType,
        [parameter(Mandatory = $false)]
        [object]
        $ExtendedKeyUsageObjectIdentifier
    )
    Process {
        $obj = [ACMPCACertificateExtendedKeyUsage]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSACMPCACertificateExtendedKeyUsage'

function Add-VSACMPCACertificateExtensions {
    <#
    .SYNOPSIS
        Adds an AWS::ACMPCA::Certificate.Extensions resource property to the template.

    .DESCRIPTION
        Adds an AWS::ACMPCA::Certificate.Extensions resource property to the template.


    .LINK
        http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-extensions.html

    .PARAMETER CertificatePolicies
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-extensions.html#cfn-acmpca-certificate-extensions-certificatepolicies
        UpdateType: Immutable
        Type: List
        ItemType: PolicyInformation

    .PARAMETER ExtendedKeyUsage
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-extensions.html#cfn-acmpca-certificate-extensions-extendedkeyusage
        UpdateType: Immutable
        Type: List
        ItemType: ExtendedKeyUsage

    .PARAMETER KeyUsage
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-extensions.html#cfn-acmpca-certificate-extensions-keyusage
        UpdateType: Immutable
        Type: KeyUsage

    .PARAMETER SubjectAlternativeNames
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-extensions.html#cfn-acmpca-certificate-extensions-subjectalternativenames
        UpdateType: Immutable
        Type: List
        ItemType: GeneralName

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([ACMPCACertificateExtensions])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        [object]
        $CertificatePolicies,
        [parameter(Mandatory = $false)]
        [object]
        $ExtendedKeyUsage,
        [parameter(Mandatory = $false)]
        $KeyUsage,
        [parameter(Mandatory = $false)]
        [object]
        $SubjectAlternativeNames
    )
    Process {
        $obj = [ACMPCACertificateExtensions]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSACMPCACertificateExtensions'

function Add-VSACMPCACertificateGeneralName {
    <#
    .SYNOPSIS
        Adds an AWS::ACMPCA::Certificate.GeneralName resource property to the template.

    .DESCRIPTION
        Adds an AWS::ACMPCA::Certificate.GeneralName resource property to the template.


    .LINK
        http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-generalname.html

    .PARAMETER OtherName
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-generalname.html#cfn-acmpca-certificate-generalname-othername
        UpdateType: Immutable
        Type: OtherName

    .PARAMETER Rfc822Name
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-generalname.html#cfn-acmpca-certificate-generalname-rfc822name
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER DnsName
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-generalname.html#cfn-acmpca-certificate-generalname-dnsname
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER DirectoryName
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-generalname.html#cfn-acmpca-certificate-generalname-directoryname
        UpdateType: Immutable
        Type: Subject

    .PARAMETER EdiPartyName
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-generalname.html#cfn-acmpca-certificate-generalname-edipartyname
        UpdateType: Immutable
        Type: EdiPartyName

    .PARAMETER UniformResourceIdentifier
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-generalname.html#cfn-acmpca-certificate-generalname-uniformresourceidentifier
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER IpAddress
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-generalname.html#cfn-acmpca-certificate-generalname-ipaddress
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER RegisteredId
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-generalname.html#cfn-acmpca-certificate-generalname-registeredid
        UpdateType: Immutable
        PrimitiveType: String

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([ACMPCACertificateGeneralName])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        $OtherName,
        [parameter(Mandatory = $false)]
        [object]
        $Rfc822Name,
        [parameter(Mandatory = $false)]
        [object]
        $DnsName,
        [parameter(Mandatory = $false)]
        $DirectoryName,
        [parameter(Mandatory = $false)]
        $EdiPartyName,
        [parameter(Mandatory = $false)]
        [object]
        $UniformResourceIdentifier,
        [parameter(Mandatory = $false)]
        [object]
        $IpAddress,
        [parameter(Mandatory = $false)]
        [object]
        $RegisteredId
    )
    Process {
        $obj = [ACMPCACertificateGeneralName]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSACMPCACertificateGeneralName'

function Add-VSACMPCACertificateKeyUsage {
    <#
    .SYNOPSIS
        Adds an AWS::ACMPCA::Certificate.KeyUsage resource property to the template.

    .DESCRIPTION
        Adds an AWS::ACMPCA::Certificate.KeyUsage resource property to the template.


    .LINK
        http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-keyusage.html

    .PARAMETER DigitalSignature
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-keyusage.html#cfn-acmpca-certificate-keyusage-digitalsignature
        UpdateType: Immutable
        PrimitiveType: Boolean

    .PARAMETER NonRepudiation
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-keyusage.html#cfn-acmpca-certificate-keyusage-nonrepudiation
        UpdateType: Immutable
        PrimitiveType: Boolean

    .PARAMETER KeyEncipherment
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-keyusage.html#cfn-acmpca-certificate-keyusage-keyencipherment
        UpdateType: Immutable
        PrimitiveType: Boolean

    .PARAMETER DataEncipherment
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-keyusage.html#cfn-acmpca-certificate-keyusage-dataencipherment
        UpdateType: Immutable
        PrimitiveType: Boolean

    .PARAMETER KeyAgreement
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-keyusage.html#cfn-acmpca-certificate-keyusage-keyagreement
        UpdateType: Immutable
        PrimitiveType: Boolean

    .PARAMETER KeyCertSign
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-keyusage.html#cfn-acmpca-certificate-keyusage-keycertsign
        UpdateType: Immutable
        PrimitiveType: Boolean

    .PARAMETER CRLSign
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-keyusage.html#cfn-acmpca-certificate-keyusage-crlsign
        UpdateType: Immutable
        PrimitiveType: Boolean

    .PARAMETER EncipherOnly
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-keyusage.html#cfn-acmpca-certificate-keyusage-encipheronly
        UpdateType: Immutable
        PrimitiveType: Boolean

    .PARAMETER DecipherOnly
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-keyusage.html#cfn-acmpca-certificate-keyusage-decipheronly
        UpdateType: Immutable
        PrimitiveType: Boolean

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([ACMPCACertificateKeyUsage])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        [object]
        $DigitalSignature,
        [parameter(Mandatory = $false)]
        [object]
        $NonRepudiation,
        [parameter(Mandatory = $false)]
        [object]
        $KeyEncipherment,
        [parameter(Mandatory = $false)]
        [object]
        $DataEncipherment,
        [parameter(Mandatory = $false)]
        [object]
        $KeyAgreement,
        [parameter(Mandatory = $false)]
        [object]
        $KeyCertSign,
        [parameter(Mandatory = $false)]
        [object]
        $CRLSign,
        [parameter(Mandatory = $false)]
        [object]
        $EncipherOnly,
        [parameter(Mandatory = $false)]
        [object]
        $DecipherOnly
    )
    Process {
        $obj = [ACMPCACertificateKeyUsage]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSACMPCACertificateKeyUsage'

function Add-VSACMPCACertificateOtherName {
    <#
    .SYNOPSIS
        Adds an AWS::ACMPCA::Certificate.OtherName resource property to the template.

    .DESCRIPTION
        Adds an AWS::ACMPCA::Certificate.OtherName resource property to the template.


    .LINK
        http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-othername.html

    .PARAMETER TypeId
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-othername.html#cfn-acmpca-certificate-othername-typeid
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER Value
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-othername.html#cfn-acmpca-certificate-othername-value
        UpdateType: Immutable
        PrimitiveType: String

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([ACMPCACertificateOtherName])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $TypeId,
        [parameter(Mandatory = $true)]
        [object]
        $Value
    )
    Process {
        $obj = [ACMPCACertificateOtherName]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSACMPCACertificateOtherName'

function Add-VSACMPCACertificatePolicyInformation {
    <#
    .SYNOPSIS
        Adds an AWS::ACMPCA::Certificate.PolicyInformation resource property to the template.

    .DESCRIPTION
        Adds an AWS::ACMPCA::Certificate.PolicyInformation resource property to the template.


    .LINK
        http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-policyinformation.html

    .PARAMETER CertPolicyId
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-policyinformation.html#cfn-acmpca-certificate-policyinformation-certpolicyid
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER PolicyQualifiers
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-policyinformation.html#cfn-acmpca-certificate-policyinformation-policyqualifiers
        UpdateType: Immutable
        Type: List
        ItemType: PolicyQualifierInfo

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([ACMPCACertificatePolicyInformation])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $CertPolicyId,
        [parameter(Mandatory = $false)]
        [object]
        $PolicyQualifiers
    )
    Process {
        $obj = [ACMPCACertificatePolicyInformation]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSACMPCACertificatePolicyInformation'

function Add-VSACMPCACertificatePolicyQualifierInfo {
    <#
    .SYNOPSIS
        Adds an AWS::ACMPCA::Certificate.PolicyQualifierInfo resource property to the template.

    .DESCRIPTION
        Adds an AWS::ACMPCA::Certificate.PolicyQualifierInfo resource property to the template.


    .LINK
        http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-policyqualifierinfo.html

    .PARAMETER PolicyQualifierId
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-policyqualifierinfo.html#cfn-acmpca-certificate-policyqualifierinfo-policyqualifierid
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER Qualifier
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-policyqualifierinfo.html#cfn-acmpca-certificate-policyqualifierinfo-qualifier
        UpdateType: Immutable
        Type: Qualifier

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([ACMPCACertificatePolicyQualifierInfo])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $PolicyQualifierId,
        [parameter(Mandatory = $true)]
        $Qualifier
    )
    Process {
        $obj = [ACMPCACertificatePolicyQualifierInfo]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSACMPCACertificatePolicyQualifierInfo'

function Add-VSACMPCACertificateQualifier {
    <#
    .SYNOPSIS
        Adds an AWS::ACMPCA::Certificate.Qualifier resource property to the template.

    .DESCRIPTION
        Adds an AWS::ACMPCA::Certificate.Qualifier resource property to the template.


    .LINK
        http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-qualifier.html

    .PARAMETER CpsUri
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-qualifier.html#cfn-acmpca-certificate-qualifier-cpsuri
        UpdateType: Immutable
        PrimitiveType: String

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([ACMPCACertificateQualifier])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $CpsUri
    )
    Process {
        $obj = [ACMPCACertificateQualifier]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSACMPCACertificateQualifier'

function Add-VSACMPCACertificateSubject {
    <#
    .SYNOPSIS
        Adds an AWS::ACMPCA::Certificate.Subject resource property to the template.

    .DESCRIPTION
        Adds an AWS::ACMPCA::Certificate.Subject resource property to the template.


    .LINK
        http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-subject.html

    .PARAMETER Country
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-subject.html#cfn-acmpca-certificate-subject-country
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER Organization
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-subject.html#cfn-acmpca-certificate-subject-organization
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER OrganizationalUnit
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-subject.html#cfn-acmpca-certificate-subject-organizationalunit
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER DistinguishedNameQualifier
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-subject.html#cfn-acmpca-certificate-subject-distinguishednamequalifier
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER State
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-subject.html#cfn-acmpca-certificate-subject-state
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER CommonName
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-subject.html#cfn-acmpca-certificate-subject-commonname
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER SerialNumber
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-subject.html#cfn-acmpca-certificate-subject-serialnumber
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER Locality
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-subject.html#cfn-acmpca-certificate-subject-locality
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER Title
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-subject.html#cfn-acmpca-certificate-subject-title
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER Surname
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-subject.html#cfn-acmpca-certificate-subject-surname
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER GivenName
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-subject.html#cfn-acmpca-certificate-subject-givenname
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER Initials
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-subject.html#cfn-acmpca-certificate-subject-initials
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER Pseudonym
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-subject.html#cfn-acmpca-certificate-subject-pseudonym
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER GenerationQualifier
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-subject.html#cfn-acmpca-certificate-subject-generationqualifier
        UpdateType: Immutable
        PrimitiveType: String

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([ACMPCACertificateSubject])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $false)]
        [object]
        $Country,
        [parameter(Mandatory = $false)]
        [object]
        $Organization,
        [parameter(Mandatory = $false)]
        [object]
        $OrganizationalUnit,
        [parameter(Mandatory = $false)]
        [object]
        $DistinguishedNameQualifier,
        [parameter(Mandatory = $false)]
        [object]
        $State,
        [parameter(Mandatory = $false)]
        [object]
        $CommonName,
        [parameter(Mandatory = $false)]
        [object]
        $SerialNumber,
        [parameter(Mandatory = $false)]
        [object]
        $Locality,
        [parameter(Mandatory = $false)]
        [object]
        $Title,
        [parameter(Mandatory = $false)]
        [object]
        $Surname,
        [parameter(Mandatory = $false)]
        [object]
        $GivenName,
        [parameter(Mandatory = $false)]
        [object]
        $Initials,
        [parameter(Mandatory = $false)]
        [object]
        $Pseudonym,
        [parameter(Mandatory = $false)]
        [object]
        $GenerationQualifier
    )
    Process {
        $obj = [ACMPCACertificateSubject]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSACMPCACertificateSubject'

function Add-VSACMPCACertificateValidity {
    <#
    .SYNOPSIS
        Adds an AWS::ACMPCA::Certificate.Validity resource property to the template. The period of time during which a certificate issued by your private certificate authority (CA is valid. The expiration can be absolute (expressed as an explicit date and time or relative (expressed as a period of time after issuance in days, months, or years. For more information, see Validity: https://tools.ietf.org/html/rfc5280#section-4.1.2.5 in RFC 5280.

    .DESCRIPTION
        Adds an AWS::ACMPCA::Certificate.Validity resource property to the template.
The period of time during which a certificate issued by your private certificate authority (CA is valid. The expiration can be absolute (expressed as an explicit date and time or relative (expressed as a period of time after issuance in days, months, or years. For more information, see Validity: https://tools.ietf.org/html/rfc5280#section-4.1.2.5 in RFC 5280.

You can issue a certificate by calling the IssueCertificate: https://docs.aws.amazon.com/acm-pca/latest/APIReference/API_IssueCertificate.html action.

    .LINK
        http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-validity.html

    .PARAMETER Value
        Time period.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-validity.html#cfn-acmpca-certificate-validity-value
        UpdateType: Immutable
        PrimitiveType: Double

    .PARAMETER Type
        Determines how *ACM Private CA* interprets the Value parameter, an integer. Supported validity types include those listed below. Type definitions with absolute values include a sample input value and the resulting output.
END_DATE: Absolute value, using UTCTime YYMMDDHHMMSS or GeneralizedTime YYYYMMDDHHMMSS format.
+ Sample input value: 491231235959 UTCTime format
+ Output date: 12/31/2049 23:59:59
ABSOLUTE: Absolute value, expressed as the number of seconds since the Unix epoch.
+ Sample input value: 2524608000
+ Output date: 01/01/2050 00:00:00
DAYS, MONTHS, YEARS: Relative values, setting expiration as a number of days, months, or years after certificate issuance.
Note: When UTCTime is used, if the year field YY is greater than or equal to 50, the year is interpreted as 19YY. If the year field is less than 50, the year is interpreted as 20YY.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-validity.html#cfn-acmpca-certificate-validity-type
        UpdateType: Immutable
        PrimitiveType: String

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([ACMPCACertificateValidity])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)]
        [object]
        $Value,
        [parameter(Mandatory = $true)]
        [object]
        $Type
    )
    Process {
        $obj = [ACMPCACertificateValidity]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'Add-VSACMPCACertificateValidity'

function New-VSACMPCACertificate {
    <#
    .SYNOPSIS
        Adds an AWS::ACMPCA::Certificate resource to the template. The AWS::ACMPCA::Certificate resource is used to issue a certificate using your private certificate authority. For more information, see the IssueCertificate: https://docs.aws.amazon.com/acm-pca/latest/APIReference/API_IssueCertificate.html action.

    .DESCRIPTION
        Adds an AWS::ACMPCA::Certificate resource to the template. The AWS::ACMPCA::Certificate resource is used to issue a certificate using your private certificate authority. For more information, see the IssueCertificate: https://docs.aws.amazon.com/acm-pca/latest/APIReference/API_IssueCertificate.html action.

    .LINK
        http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificate.html

    .PARAMETER LogicalId
        The logical ID must be alphanumeric (A-Za-z0-9) and unique within the template. Use the logical name to reference the resource in other parts of the template. For example, if you want to map an Amazon Elastic Block Store volume to an Amazon EC2 instance, you reference the logical IDs to associate the block stores with the instance.

    .PARAMETER ApiPassthrough
        The issued Base64 PEM-encoded certificate.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificate.html#cfn-acmpca-certificate-apipassthrough
        UpdateType: Immutable
        Type: ApiPassthrough

    .PARAMETER CertificateAuthorityArn
        The Amazon Resource Name ARN for the private CA used to issue the certificate.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificate.html#cfn-acmpca-certificate-certificateauthorityarn
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER CertificateSigningRequest
        The certificate signing request CSR for the certificate.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificate.html#cfn-acmpca-certificate-certificatesigningrequest
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER SigningAlgorithm
        The name of the algorithm that will be used to sign the certificate to be issued.
This parameter should not be confused with the SigningAlgorithm parameter used to sign a CSR.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificate.html#cfn-acmpca-certificate-signingalgorithm
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER TemplateArn
        Specifies a custom configuration template to use when issuing a certificate. If this parameter is not provided, ACM Private CA defaults to the EndEntityCertificate/V1 template. For more information about ACM Private CA templates, see Using Templates: https://docs.aws.amazon.com/acm-pca/latest/userguide/UsingTemplates.html.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificate.html#cfn-acmpca-certificate-templatearn
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER Validity
        The period of time during which the certificate will be valid.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificate.html#cfn-acmpca-certificate-validity
        UpdateType: Immutable
        Type: Validity

    .PARAMETER ValidityNotBefore
        The issued Base64 PEM-encoded certificate.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificate.html#cfn-acmpca-certificate-validitynotbefore
        UpdateType: Immutable
        Type: Validity

    .PARAMETER DeletionPolicy
        With the DeletionPolicy attribute you can preserve or (in some cases) backup a resource when its stack is deleted. You specify a DeletionPolicy attribute for each resource that you want to control. If a resource has no DeletionPolicy attribute, AWS CloudFormation deletes the resource by default.

        To keep a resource when its stack is deleted, specify Retain for that resource. You can use retain for any resource. For example, you can retain a nested stack, S3 bucket, or EC2 instance so that you can continue to use or modify those resources after you delete their stacks.

        You must use one of the following options: "Delete","Retain","Snapshot"

    .PARAMETER UpdateReplacePolicy
        Use the UpdateReplacePolicy attribute to retain or (in some cases) backup the existing physical instance of a resource when it is replaced during a stack update operation.

        When you initiate a stack update, AWS CloudFormation updates resources based on differences between what you submit and the stack's current template and parameters. If you update a resource property that requires that the resource be replaced, AWS CloudFormation recreates the resource during the update. Recreating the resource generates a new physical ID. AWS CloudFormation creates the replacement resource first, and then changes references from other dependent resources to point to the replacement resource. By default, AWS CloudFormation then deletes the old resource. Using the UpdateReplacePolicy, you can specify that AWS CloudFormation retain or (in some cases) create a snapshot of the old resource.

        For resources that support snapshots, such as AWS::EC2::Volume, specify Snapshot to have AWS CloudFormation create a snapshot before deleting the old resource instance.

        You can apply the UpdateReplacePolicy attribute to any resource. UpdateReplacePolicy is only executed if you update a resource property whose update behavior is specified as Replacement, thereby causing AWS CloudFormation to replace the old resource with a new one with a new physical ID. For example, if you update the Engine property of an AWS::RDS::DBInstance resource type, AWS CloudFormation creates a new resource and replaces the current DB instance resource with the new one. The UpdateReplacePolicy attribute would then dictate whether AWS CloudFormation deleted, retained, or created a snapshot of the old DB instance. The update behavior for each property of a resource is specified in the reference topic for that resource in the AWS Resource and Property Types Reference. For more information on resource update behavior, see Update Behaviors of Stack Resources.

        The UpdateReplacePolicy attribute applies to stack updates you perform directly, as well as stack updates performed using change sets.

        Note
        Resources that are retained continue to exist and continue to incur applicable charges until you delete those resources. Snapshots that are created with this policy continue to exist and continue to incur applicable charges until you delete those snapshots. UpdateReplacePolicy retains the old physical resource or snapshot, but removes it from AWS CloudFormation's scope.

        UpdateReplacePolicy differs from the DeletionPolicy attribute in that it only applies to resources replaced during stack updates. Use DeletionPolicy for resources deleted when a stack is deleted, or when the resource definition itself is deleted from the template as part of a stack update.

        You must use one of the following options: "Delete","Retain","Snapshot"

    .PARAMETER DependsOn
        With the DependsOn attribute you can specify that the creation of a specific resource follows another. When you add a DependsOn attribute to a resource, that resource is created only after the creation of the resource specified in the DependsOn attribute.

        This parameter takes a string or list of strings representing Logical IDs of resources that must be created prior to this resource being created.


    .PARAMETER Metadata
        The Metadata attribute enables you to associate structured data with a resource. By adding a Metadata attribute to a resource, you can add data in JSON or YAML to the resource declaration. In addition, you can use intrinsic functions (such as GetAtt and Ref), parameters, and pseudo parameters within the Metadata attribute to add those interpreted values.

        This will be returned when describing the resource using AWS CLI.


    .PARAMETER UpdatePolicy
        Use the UpdatePolicy attribute to specify how AWS CloudFormation handles updates to the AWS::AutoScaling::AutoScalingGroup resource. AWS CloudFormation invokes one of three update policies depending on the type of change you make or whether a scheduled action is associated with the Auto Scaling group.

        You must use the "Add-UpdatePolicy" function or the [UpdatePolicy] class here.
    .PARAMETER Condition
        Logical ID of the condition that this resource needs to be true in order for this resource to be provisioned.

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([ACMPCACertificate])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true,Position = 0)]
        [ValidateLogicalId()]
        [string]
        $LogicalId,
        [parameter(Mandatory = $false)]
        $ApiPassthrough,
        [parameter(Mandatory = $true)]
        [object]
        $CertificateAuthorityArn,
        [parameter(Mandatory = $true)]
        [object]
        $CertificateSigningRequest,
        [parameter(Mandatory = $true)]
        [object]
        $SigningAlgorithm,
        [parameter(Mandatory = $false)]
        [object]
        $TemplateArn,
        [parameter(Mandatory = $true)]
        $Validity,
        [parameter(Mandatory = $false)]
        $ValidityNotBefore,
        [parameter()]
        [DeletionPolicy]
        $DeletionPolicy,
        [parameter()]
        [UpdateReplacePolicy]
        $UpdateReplacePolicy,
        [parameter(Mandatory = $false)]
        [string[]]
        $DependsOn,
        [parameter(Mandatory = $false)]
        [VSJson]
        $Metadata,
        [parameter(Mandatory = $false)]
        [UpdatePolicy]
        $UpdatePolicy,
        [parameter(Mandatory = $false)]
        [string]
        $Condition
    )
    Process {
        $obj = [ACMPCACertificate]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'New-VSACMPCACertificate'

function New-VSACMPCACertificateAuthority {
    <#
    .SYNOPSIS
        Adds an AWS::ACMPCA::CertificateAuthority resource to the template. Use the AWS::ACMPCA::CertificateAuthority resource to create a private CA. Once the CA exists, you can use the AWS::ACMPCA::Certificate resource to issue a new CA certificate. Alternatively, you can issue a CA certificate using an on-premises CA, and then use the AWS::ACMPCA::CertificateAuthorityActivation resource to import the new CA certificate and activate the CA.

    .DESCRIPTION
        Adds an AWS::ACMPCA::CertificateAuthority resource to the template. Use the AWS::ACMPCA::CertificateAuthority resource to create a private CA. Once the CA exists, you can use the AWS::ACMPCA::Certificate resource to issue a new CA certificate. Alternatively, you can issue a CA certificate using an on-premises CA, and then use the AWS::ACMPCA::CertificateAuthorityActivation resource to import the new CA certificate and activate the CA.

**Note**

Before removing a AWS::ACMPCA::CertificateAuthority resource from the CloudFormation stack, disable the affected CA. Otherwise, the action will fail. You can disable the CA by removing its associated AWS::ACMPCA::CertificateAuthorityActivation resource from CloudFormation.

    .LINK
        http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificateauthority.html

    .PARAMETER LogicalId
        The logical ID must be alphanumeric (A-Za-z0-9) and unique within the template. Use the logical name to reference the resource in other parts of the template. For example, if you want to map an Amazon Elastic Block Store volume to an Amazon EC2 instance, you reference the logical IDs to associate the block stores with the instance.

    .PARAMETER Type
        Type of your private CA.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificateauthority.html#cfn-acmpca-certificateauthority-type
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER KeyAlgorithm
        Type of the public key algorithm and size, in bits, of the key pair that your CA creates when it issues a certificate. When you create a subordinate CA, you must use a key algorithm supported by the parent CA.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificateauthority.html#cfn-acmpca-certificateauthority-keyalgorithm
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER SigningAlgorithm
        Name of the algorithm your private CA uses to sign certificate requests.
This parameter should not be confused with the SigningAlgorithm parameter used to sign certificates when they are issued.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificateauthority.html#cfn-acmpca-certificateauthority-signingalgorithm
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER Subject
        Structure that contains X.500 distinguished name information for your private CA.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificateauthority.html#cfn-acmpca-certificateauthority-subject
        UpdateType: Immutable
        Type: Subject

    .PARAMETER RevocationConfiguration
        Information about the certificate revocation list CRL created and maintained by your private CA. Certificate revocation information used by the CreateCertificateAuthority and UpdateCertificateAuthority actions. Your certificate authority can create and maintain a certificate revocation list CRL. A CRL contains information about certificates that have been revoked.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificateauthority.html#cfn-acmpca-certificateauthority-revocationconfiguration
        UpdateType: Mutable
        Type: RevocationConfiguration

    .PARAMETER Tags
        Key-value pairs that will be attached to the new private CA. You can associate up to 50 tags with a private CA. For information using tags with IAM to manage permissions, see Controlling Access Using IAM Tags: https://docs.aws.amazon.com/IAM/latest/UserGuide/access_iam-tags.html.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificateauthority.html#cfn-acmpca-certificateauthority-tags
        UpdateType: Mutable
        Type: List
        ItemType: Tag

    .PARAMETER CsrExtensions
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificateauthority.html#cfn-acmpca-certificateauthority-csrextensions
        UpdateType: Immutable
        Type: CsrExtensions

    .PARAMETER KeyStorageSecurityStandard
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificateauthority.html#cfn-acmpca-certificateauthority-keystoragesecuritystandard
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER DeletionPolicy
        With the DeletionPolicy attribute you can preserve or (in some cases) backup a resource when its stack is deleted. You specify a DeletionPolicy attribute for each resource that you want to control. If a resource has no DeletionPolicy attribute, AWS CloudFormation deletes the resource by default.

        To keep a resource when its stack is deleted, specify Retain for that resource. You can use retain for any resource. For example, you can retain a nested stack, S3 bucket, or EC2 instance so that you can continue to use or modify those resources after you delete their stacks.

        You must use one of the following options: "Delete","Retain","Snapshot"

    .PARAMETER UpdateReplacePolicy
        Use the UpdateReplacePolicy attribute to retain or (in some cases) backup the existing physical instance of a resource when it is replaced during a stack update operation.

        When you initiate a stack update, AWS CloudFormation updates resources based on differences between what you submit and the stack's current template and parameters. If you update a resource property that requires that the resource be replaced, AWS CloudFormation recreates the resource during the update. Recreating the resource generates a new physical ID. AWS CloudFormation creates the replacement resource first, and then changes references from other dependent resources to point to the replacement resource. By default, AWS CloudFormation then deletes the old resource. Using the UpdateReplacePolicy, you can specify that AWS CloudFormation retain or (in some cases) create a snapshot of the old resource.

        For resources that support snapshots, such as AWS::EC2::Volume, specify Snapshot to have AWS CloudFormation create a snapshot before deleting the old resource instance.

        You can apply the UpdateReplacePolicy attribute to any resource. UpdateReplacePolicy is only executed if you update a resource property whose update behavior is specified as Replacement, thereby causing AWS CloudFormation to replace the old resource with a new one with a new physical ID. For example, if you update the Engine property of an AWS::RDS::DBInstance resource type, AWS CloudFormation creates a new resource and replaces the current DB instance resource with the new one. The UpdateReplacePolicy attribute would then dictate whether AWS CloudFormation deleted, retained, or created a snapshot of the old DB instance. The update behavior for each property of a resource is specified in the reference topic for that resource in the AWS Resource and Property Types Reference. For more information on resource update behavior, see Update Behaviors of Stack Resources.

        The UpdateReplacePolicy attribute applies to stack updates you perform directly, as well as stack updates performed using change sets.

        Note
        Resources that are retained continue to exist and continue to incur applicable charges until you delete those resources. Snapshots that are created with this policy continue to exist and continue to incur applicable charges until you delete those snapshots. UpdateReplacePolicy retains the old physical resource or snapshot, but removes it from AWS CloudFormation's scope.

        UpdateReplacePolicy differs from the DeletionPolicy attribute in that it only applies to resources replaced during stack updates. Use DeletionPolicy for resources deleted when a stack is deleted, or when the resource definition itself is deleted from the template as part of a stack update.

        You must use one of the following options: "Delete","Retain","Snapshot"

    .PARAMETER DependsOn
        With the DependsOn attribute you can specify that the creation of a specific resource follows another. When you add a DependsOn attribute to a resource, that resource is created only after the creation of the resource specified in the DependsOn attribute.

        This parameter takes a string or list of strings representing Logical IDs of resources that must be created prior to this resource being created.


    .PARAMETER Metadata
        The Metadata attribute enables you to associate structured data with a resource. By adding a Metadata attribute to a resource, you can add data in JSON or YAML to the resource declaration. In addition, you can use intrinsic functions (such as GetAtt and Ref), parameters, and pseudo parameters within the Metadata attribute to add those interpreted values.

        This will be returned when describing the resource using AWS CLI.


    .PARAMETER UpdatePolicy
        Use the UpdatePolicy attribute to specify how AWS CloudFormation handles updates to the AWS::AutoScaling::AutoScalingGroup resource. AWS CloudFormation invokes one of three update policies depending on the type of change you make or whether a scheduled action is associated with the Auto Scaling group.

        You must use the "Add-UpdatePolicy" function or the [UpdatePolicy] class here.
    .PARAMETER Condition
        Logical ID of the condition that this resource needs to be true in order for this resource to be provisioned.

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([ACMPCACertificateAuthority])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true,Position = 0)]
        [ValidateLogicalId()]
        [string]
        $LogicalId,
        [parameter(Mandatory = $true)]
        [object]
        $Type,
        [parameter(Mandatory = $true)]
        [object]
        $KeyAlgorithm,
        [parameter(Mandatory = $true)]
        [object]
        $SigningAlgorithm,
        [parameter(Mandatory = $true)]
        $Subject,
        [parameter(Mandatory = $false)]
        $RevocationConfiguration,
        [TransformTag()]
        [object]
        [parameter(Mandatory = $false)]
        $Tags,
        [parameter(Mandatory = $false)]
        $CsrExtensions,
        [parameter(Mandatory = $false)]
        [object]
        $KeyStorageSecurityStandard,
        [parameter()]
        [DeletionPolicy]
        $DeletionPolicy,
        [parameter()]
        [UpdateReplacePolicy]
        $UpdateReplacePolicy,
        [parameter(Mandatory = $false)]
        [string[]]
        $DependsOn,
        [parameter(Mandatory = $false)]
        [VSJson]
        $Metadata,
        [parameter(Mandatory = $false)]
        [UpdatePolicy]
        $UpdatePolicy,
        [parameter(Mandatory = $false)]
        [string]
        $Condition
    )
    Process {
        $obj = [ACMPCACertificateAuthority]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'New-VSACMPCACertificateAuthority'

function New-VSACMPCACertificateAuthorityActivation {
    <#
    .SYNOPSIS
        Adds an AWS::ACMPCA::CertificateAuthorityActivation resource to the template. The AWS::ACMPCA::CertificateAuthorityActivation resource creates and installs a CA certificate on a CA. If no status is specified, the AWS::ACMPCA::CertificateAuthorityActivation resource status defaults to ACTIVE. Once the CA has a CA certificate installed, you can use the resource to toggle the CA status field between ACTIVE and DISABLED.

    .DESCRIPTION
        Adds an AWS::ACMPCA::CertificateAuthorityActivation resource to the template. The AWS::ACMPCA::CertificateAuthorityActivation resource creates and installs a CA certificate on a CA. If no status is specified, the AWS::ACMPCA::CertificateAuthorityActivation resource status defaults to ACTIVE. Once the CA has a CA certificate installed, you can use the resource to toggle the CA status field between ACTIVE and DISABLED.

    .LINK
        http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificateauthorityactivation.html

    .PARAMETER LogicalId
        The logical ID must be alphanumeric (A-Za-z0-9) and unique within the template. Use the logical name to reference the resource in other parts of the template. For example, if you want to map an Amazon Elastic Block Store volume to an Amazon EC2 instance, you reference the logical IDs to associate the block stores with the instance.

    .PARAMETER CertificateAuthorityArn
        The Amazon Resource Name ARN of your private CA.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificateauthorityactivation.html#cfn-acmpca-certificateauthorityactivation-certificateauthorityarn
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER Certificate
        The Base64 PEM-encoded certificate authority certificate.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificateauthorityactivation.html#cfn-acmpca-certificateauthorityactivation-certificate
        UpdateType: Mutable
        PrimitiveType: String

    .PARAMETER CertificateChain
        The Base64 PEM-encoded certificate chain that chains up to the root CA certificate that you used to sign your private CA certificate.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificateauthorityactivation.html#cfn-acmpca-certificateauthorityactivation-certificatechain
        UpdateType: Mutable
        PrimitiveType: String

    .PARAMETER Status
        Status of your private CA.

        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificateauthorityactivation.html#cfn-acmpca-certificateauthorityactivation-status
        UpdateType: Mutable
        PrimitiveType: String

    .PARAMETER DeletionPolicy
        With the DeletionPolicy attribute you can preserve or (in some cases) backup a resource when its stack is deleted. You specify a DeletionPolicy attribute for each resource that you want to control. If a resource has no DeletionPolicy attribute, AWS CloudFormation deletes the resource by default.

        To keep a resource when its stack is deleted, specify Retain for that resource. You can use retain for any resource. For example, you can retain a nested stack, S3 bucket, or EC2 instance so that you can continue to use or modify those resources after you delete their stacks.

        You must use one of the following options: "Delete","Retain","Snapshot"

    .PARAMETER UpdateReplacePolicy
        Use the UpdateReplacePolicy attribute to retain or (in some cases) backup the existing physical instance of a resource when it is replaced during a stack update operation.

        When you initiate a stack update, AWS CloudFormation updates resources based on differences between what you submit and the stack's current template and parameters. If you update a resource property that requires that the resource be replaced, AWS CloudFormation recreates the resource during the update. Recreating the resource generates a new physical ID. AWS CloudFormation creates the replacement resource first, and then changes references from other dependent resources to point to the replacement resource. By default, AWS CloudFormation then deletes the old resource. Using the UpdateReplacePolicy, you can specify that AWS CloudFormation retain or (in some cases) create a snapshot of the old resource.

        For resources that support snapshots, such as AWS::EC2::Volume, specify Snapshot to have AWS CloudFormation create a snapshot before deleting the old resource instance.

        You can apply the UpdateReplacePolicy attribute to any resource. UpdateReplacePolicy is only executed if you update a resource property whose update behavior is specified as Replacement, thereby causing AWS CloudFormation to replace the old resource with a new one with a new physical ID. For example, if you update the Engine property of an AWS::RDS::DBInstance resource type, AWS CloudFormation creates a new resource and replaces the current DB instance resource with the new one. The UpdateReplacePolicy attribute would then dictate whether AWS CloudFormation deleted, retained, or created a snapshot of the old DB instance. The update behavior for each property of a resource is specified in the reference topic for that resource in the AWS Resource and Property Types Reference. For more information on resource update behavior, see Update Behaviors of Stack Resources.

        The UpdateReplacePolicy attribute applies to stack updates you perform directly, as well as stack updates performed using change sets.

        Note
        Resources that are retained continue to exist and continue to incur applicable charges until you delete those resources. Snapshots that are created with this policy continue to exist and continue to incur applicable charges until you delete those snapshots. UpdateReplacePolicy retains the old physical resource or snapshot, but removes it from AWS CloudFormation's scope.

        UpdateReplacePolicy differs from the DeletionPolicy attribute in that it only applies to resources replaced during stack updates. Use DeletionPolicy for resources deleted when a stack is deleted, or when the resource definition itself is deleted from the template as part of a stack update.

        You must use one of the following options: "Delete","Retain","Snapshot"

    .PARAMETER DependsOn
        With the DependsOn attribute you can specify that the creation of a specific resource follows another. When you add a DependsOn attribute to a resource, that resource is created only after the creation of the resource specified in the DependsOn attribute.

        This parameter takes a string or list of strings representing Logical IDs of resources that must be created prior to this resource being created.


    .PARAMETER Metadata
        The Metadata attribute enables you to associate structured data with a resource. By adding a Metadata attribute to a resource, you can add data in JSON or YAML to the resource declaration. In addition, you can use intrinsic functions (such as GetAtt and Ref), parameters, and pseudo parameters within the Metadata attribute to add those interpreted values.

        This will be returned when describing the resource using AWS CLI.


    .PARAMETER UpdatePolicy
        Use the UpdatePolicy attribute to specify how AWS CloudFormation handles updates to the AWS::AutoScaling::AutoScalingGroup resource. AWS CloudFormation invokes one of three update policies depending on the type of change you make or whether a scheduled action is associated with the Auto Scaling group.

        You must use the "Add-UpdatePolicy" function or the [UpdatePolicy] class here.
    .PARAMETER Condition
        Logical ID of the condition that this resource needs to be true in order for this resource to be provisioned.

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([ACMPCACertificateAuthorityActivation])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true,Position = 0)]
        [ValidateLogicalId()]
        [string]
        $LogicalId,
        [parameter(Mandatory = $true)]
        [object]
        $CertificateAuthorityArn,
        [parameter(Mandatory = $true)]
        [object]
        $Certificate,
        [parameter(Mandatory = $false)]
        [object]
        $CertificateChain,
        [parameter(Mandatory = $false)]
        [object]
        $Status,
        [parameter()]
        [DeletionPolicy]
        $DeletionPolicy,
        [parameter()]
        [UpdateReplacePolicy]
        $UpdateReplacePolicy,
        [parameter(Mandatory = $false)]
        [string[]]
        $DependsOn,
        [parameter(Mandatory = $false)]
        [VSJson]
        $Metadata,
        [parameter(Mandatory = $false)]
        [UpdatePolicy]
        $UpdatePolicy,
        [parameter(Mandatory = $false)]
        [string]
        $Condition
    )
    Process {
        $obj = [ACMPCACertificateAuthorityActivation]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'New-VSACMPCACertificateAuthorityActivation'

function New-VSACMPCAPermission {
    <#
    .SYNOPSIS
        Adds an AWS::ACMPCA::Permission resource to the template.

    .DESCRIPTION
        Adds an AWS::ACMPCA::Permission resource to the template.

    .LINK
        http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-permission.html

    .PARAMETER LogicalId
        The logical ID must be alphanumeric (A-Za-z0-9) and unique within the template. Use the logical name to reference the resource in other parts of the template. For example, if you want to map an Amazon Elastic Block Store volume to an Amazon EC2 instance, you reference the logical IDs to associate the block stores with the instance.

    .PARAMETER Actions
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-permission.html#cfn-acmpca-permission-actions
        UpdateType: Immutable
        Type: List
        PrimitiveItemType: String

    .PARAMETER CertificateAuthorityArn
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-permission.html#cfn-acmpca-permission-certificateauthorityarn
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER Principal
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-permission.html#cfn-acmpca-permission-principal
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER SourceAccount
        Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-permission.html#cfn-acmpca-permission-sourceaccount
        UpdateType: Immutable
        PrimitiveType: String

    .PARAMETER DeletionPolicy
        With the DeletionPolicy attribute you can preserve or (in some cases) backup a resource when its stack is deleted. You specify a DeletionPolicy attribute for each resource that you want to control. If a resource has no DeletionPolicy attribute, AWS CloudFormation deletes the resource by default.

        To keep a resource when its stack is deleted, specify Retain for that resource. You can use retain for any resource. For example, you can retain a nested stack, S3 bucket, or EC2 instance so that you can continue to use or modify those resources after you delete their stacks.

        You must use one of the following options: "Delete","Retain","Snapshot"

    .PARAMETER UpdateReplacePolicy
        Use the UpdateReplacePolicy attribute to retain or (in some cases) backup the existing physical instance of a resource when it is replaced during a stack update operation.

        When you initiate a stack update, AWS CloudFormation updates resources based on differences between what you submit and the stack's current template and parameters. If you update a resource property that requires that the resource be replaced, AWS CloudFormation recreates the resource during the update. Recreating the resource generates a new physical ID. AWS CloudFormation creates the replacement resource first, and then changes references from other dependent resources to point to the replacement resource. By default, AWS CloudFormation then deletes the old resource. Using the UpdateReplacePolicy, you can specify that AWS CloudFormation retain or (in some cases) create a snapshot of the old resource.

        For resources that support snapshots, such as AWS::EC2::Volume, specify Snapshot to have AWS CloudFormation create a snapshot before deleting the old resource instance.

        You can apply the UpdateReplacePolicy attribute to any resource. UpdateReplacePolicy is only executed if you update a resource property whose update behavior is specified as Replacement, thereby causing AWS CloudFormation to replace the old resource with a new one with a new physical ID. For example, if you update the Engine property of an AWS::RDS::DBInstance resource type, AWS CloudFormation creates a new resource and replaces the current DB instance resource with the new one. The UpdateReplacePolicy attribute would then dictate whether AWS CloudFormation deleted, retained, or created a snapshot of the old DB instance. The update behavior for each property of a resource is specified in the reference topic for that resource in the AWS Resource and Property Types Reference. For more information on resource update behavior, see Update Behaviors of Stack Resources.

        The UpdateReplacePolicy attribute applies to stack updates you perform directly, as well as stack updates performed using change sets.

        Note
        Resources that are retained continue to exist and continue to incur applicable charges until you delete those resources. Snapshots that are created with this policy continue to exist and continue to incur applicable charges until you delete those snapshots. UpdateReplacePolicy retains the old physical resource or snapshot, but removes it from AWS CloudFormation's scope.

        UpdateReplacePolicy differs from the DeletionPolicy attribute in that it only applies to resources replaced during stack updates. Use DeletionPolicy for resources deleted when a stack is deleted, or when the resource definition itself is deleted from the template as part of a stack update.

        You must use one of the following options: "Delete","Retain","Snapshot"

    .PARAMETER DependsOn
        With the DependsOn attribute you can specify that the creation of a specific resource follows another. When you add a DependsOn attribute to a resource, that resource is created only after the creation of the resource specified in the DependsOn attribute.

        This parameter takes a string or list of strings representing Logical IDs of resources that must be created prior to this resource being created.


    .PARAMETER Metadata
        The Metadata attribute enables you to associate structured data with a resource. By adding a Metadata attribute to a resource, you can add data in JSON or YAML to the resource declaration. In addition, you can use intrinsic functions (such as GetAtt and Ref), parameters, and pseudo parameters within the Metadata attribute to add those interpreted values.

        This will be returned when describing the resource using AWS CLI.


    .PARAMETER UpdatePolicy
        Use the UpdatePolicy attribute to specify how AWS CloudFormation handles updates to the AWS::AutoScaling::AutoScalingGroup resource. AWS CloudFormation invokes one of three update policies depending on the type of change you make or whether a scheduled action is associated with the Auto Scaling group.

        You must use the "Add-UpdatePolicy" function or the [UpdatePolicy] class here.
    .PARAMETER Condition
        Logical ID of the condition that this resource needs to be true in order for this resource to be provisioned.

    .FUNCTIONALITY
        Vaporshell
    #>

    [OutputType([ACMPCAPermission])]
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true,Position = 0)]
        [ValidateLogicalId()]
        [string]
        $LogicalId,
        [parameter(Mandatory = $true)]
        $Actions,
        [parameter(Mandatory = $true)]
        [object]
        $CertificateAuthorityArn,
        [parameter(Mandatory = $true)]
        [object]
        $Principal,
        [parameter(Mandatory = $false)]
        [object]
        $SourceAccount,
        [parameter()]
        [DeletionPolicy]
        $DeletionPolicy,
        [parameter()]
        [UpdateReplacePolicy]
        $UpdateReplacePolicy,
        [parameter(Mandatory = $false)]
        [string[]]
        $DependsOn,
        [parameter(Mandatory = $false)]
        [VSJson]
        $Metadata,
        [parameter(Mandatory = $false)]
        [UpdatePolicy]
        $UpdatePolicy,
        [parameter(Mandatory = $false)]
        [string]
        $Condition
    )
    Process {
        $obj = [ACMPCAPermission]::new($PSBoundParameters)
        Write-Debug "$($MyInvocation.MyCommand) PSBoundParameters:`n$($PSBoundParameters | ConvertTo-Json -Depth 20 | Format-Json)"
        Write-Verbose "Resulting object from $($MyInvocation.MyCommand): `n$($obj.ToJson() | Format-Json)"
        $obj
    }
}

Export-ModuleMember -Function 'New-VSACMPCAPermission'