# coding=utf-8
# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import warnings
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
from .. import _utilities

__all__ = [
    'CertifiateCertificateArgs',
    'CertifiateCertificateAttributeArgs',
    'CertifiateCertificatePolicyArgs',
    'CertifiateCertificatePolicyIssuerParametersArgs',
    'CertifiateCertificatePolicyKeyPropertiesArgs',
    'CertifiateCertificatePolicyLifetimeActionArgs',
    'CertifiateCertificatePolicyLifetimeActionActionArgs',
    'CertifiateCertificatePolicyLifetimeActionTriggerArgs',
    'CertifiateCertificatePolicySecretPropertiesArgs',
    'CertifiateCertificatePolicyX509CertificatePropertiesArgs',
    'CertifiateCertificatePolicyX509CertificatePropertiesSubjectAlternativeNamesArgs',
    'CertificateCertificateArgs',
    'CertificateCertificateAttributeArgs',
    'CertificateCertificatePolicyArgs',
    'CertificateCertificatePolicyIssuerParametersArgs',
    'CertificateCertificatePolicyKeyPropertiesArgs',
    'CertificateCertificatePolicyLifetimeActionArgs',
    'CertificateCertificatePolicyLifetimeActionActionArgs',
    'CertificateCertificatePolicyLifetimeActionTriggerArgs',
    'CertificateCertificatePolicySecretPropertiesArgs',
    'CertificateCertificatePolicyX509CertificatePropertiesArgs',
    'CertificateCertificatePolicyX509CertificatePropertiesSubjectAlternativeNamesArgs',
    'CertificateIssuerAdminArgs',
    'KeyVaultAccessPolicyArgs',
    'KeyVaultContactArgs',
    'KeyVaultNetworkAclsArgs',
]

@pulumi.input_type
class CertifiateCertificateArgs:
    def __init__(__self__, *,
                 contents: pulumi.Input[str],
                 password: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] contents: The base64-encoded certificate contents. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The password associated with the certificate. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "contents", contents)
        if password is not None:
            pulumi.set(__self__, "password", password)

    @property
    @pulumi.getter
    def contents(self) -> pulumi.Input[str]:
        """
        The base64-encoded certificate contents. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "contents")

    @contents.setter
    def contents(self, value: pulumi.Input[str]):
        pulumi.set(self, "contents", value)

    @property
    @pulumi.getter
    def password(self) -> Optional[pulumi.Input[str]]:
        """
        The password associated with the certificate. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "password", value)


@pulumi.input_type
class CertifiateCertificateAttributeArgs:
    def __init__(__self__, *,
                 created: Optional[pulumi.Input[str]] = None,
                 enabled: Optional[pulumi.Input[bool]] = None,
                 expires: Optional[pulumi.Input[str]] = None,
                 not_before: Optional[pulumi.Input[str]] = None,
                 recovery_level: Optional[pulumi.Input[str]] = None,
                 updated: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] created: The create time of the Key Vault Certificate.
        :param pulumi.Input[bool] enabled: whether the Key Vault Certificate is enabled.
        :param pulumi.Input[str] expires: The expires time of the Key Vault Certificate.
        :param pulumi.Input[str] not_before: The not before valid time of the Key Vault Certificate.
        :param pulumi.Input[str] recovery_level: The deletion recovery level of the Key Vault Certificate.
        :param pulumi.Input[str] updated: The recent update time of the Key Vault Certificate.
        """
        if created is not None:
            pulumi.set(__self__, "created", created)
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if expires is not None:
            pulumi.set(__self__, "expires", expires)
        if not_before is not None:
            pulumi.set(__self__, "not_before", not_before)
        if recovery_level is not None:
            pulumi.set(__self__, "recovery_level", recovery_level)
        if updated is not None:
            pulumi.set(__self__, "updated", updated)

    @property
    @pulumi.getter
    def created(self) -> Optional[pulumi.Input[str]]:
        """
        The create time of the Key Vault Certificate.
        """
        return pulumi.get(self, "created")

    @created.setter
    def created(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "created", value)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        whether the Key Vault Certificate is enabled.
        """
        return pulumi.get(self, "enabled")

    @enabled.setter
    def enabled(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "enabled", value)

    @property
    @pulumi.getter
    def expires(self) -> Optional[pulumi.Input[str]]:
        """
        The expires time of the Key Vault Certificate.
        """
        return pulumi.get(self, "expires")

    @expires.setter
    def expires(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "expires", value)

    @property
    @pulumi.getter(name="notBefore")
    def not_before(self) -> Optional[pulumi.Input[str]]:
        """
        The not before valid time of the Key Vault Certificate.
        """
        return pulumi.get(self, "not_before")

    @not_before.setter
    def not_before(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "not_before", value)

    @property
    @pulumi.getter(name="recoveryLevel")
    def recovery_level(self) -> Optional[pulumi.Input[str]]:
        """
        The deletion recovery level of the Key Vault Certificate.
        """
        return pulumi.get(self, "recovery_level")

    @recovery_level.setter
    def recovery_level(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "recovery_level", value)

    @property
    @pulumi.getter
    def updated(self) -> Optional[pulumi.Input[str]]:
        """
        The recent update time of the Key Vault Certificate.
        """
        return pulumi.get(self, "updated")

    @updated.setter
    def updated(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "updated", value)


@pulumi.input_type
class CertifiateCertificatePolicyArgs:
    def __init__(__self__, *,
                 issuer_parameters: pulumi.Input['CertifiateCertificatePolicyIssuerParametersArgs'],
                 key_properties: pulumi.Input['CertifiateCertificatePolicyKeyPropertiesArgs'],
                 secret_properties: pulumi.Input['CertifiateCertificatePolicySecretPropertiesArgs'],
                 lifetime_actions: Optional[pulumi.Input[Sequence[pulumi.Input['CertifiateCertificatePolicyLifetimeActionArgs']]]] = None,
                 x509_certificate_properties: Optional[pulumi.Input['CertifiateCertificatePolicyX509CertificatePropertiesArgs']] = None):
        """
        :param pulumi.Input['CertifiateCertificatePolicyIssuerParametersArgs'] issuer_parameters: A `issuer_parameters` block as defined below.
        :param pulumi.Input['CertifiateCertificatePolicyKeyPropertiesArgs'] key_properties: A `key_properties` block as defined below.
        :param pulumi.Input['CertifiateCertificatePolicySecretPropertiesArgs'] secret_properties: A `secret_properties` block as defined below.
        :param pulumi.Input[Sequence[pulumi.Input['CertifiateCertificatePolicyLifetimeActionArgs']]] lifetime_actions: A `lifetime_action` block as defined below.
        :param pulumi.Input['CertifiateCertificatePolicyX509CertificatePropertiesArgs'] x509_certificate_properties: A `x509_certificate_properties` block as defined below. Required when `certificate` block is not specified.
        """
        pulumi.set(__self__, "issuer_parameters", issuer_parameters)
        pulumi.set(__self__, "key_properties", key_properties)
        pulumi.set(__self__, "secret_properties", secret_properties)
        if lifetime_actions is not None:
            pulumi.set(__self__, "lifetime_actions", lifetime_actions)
        if x509_certificate_properties is not None:
            pulumi.set(__self__, "x509_certificate_properties", x509_certificate_properties)

    @property
    @pulumi.getter(name="issuerParameters")
    def issuer_parameters(self) -> pulumi.Input['CertifiateCertificatePolicyIssuerParametersArgs']:
        """
        A `issuer_parameters` block as defined below.
        """
        return pulumi.get(self, "issuer_parameters")

    @issuer_parameters.setter
    def issuer_parameters(self, value: pulumi.Input['CertifiateCertificatePolicyIssuerParametersArgs']):
        pulumi.set(self, "issuer_parameters", value)

    @property
    @pulumi.getter(name="keyProperties")
    def key_properties(self) -> pulumi.Input['CertifiateCertificatePolicyKeyPropertiesArgs']:
        """
        A `key_properties` block as defined below.
        """
        return pulumi.get(self, "key_properties")

    @key_properties.setter
    def key_properties(self, value: pulumi.Input['CertifiateCertificatePolicyKeyPropertiesArgs']):
        pulumi.set(self, "key_properties", value)

    @property
    @pulumi.getter(name="secretProperties")
    def secret_properties(self) -> pulumi.Input['CertifiateCertificatePolicySecretPropertiesArgs']:
        """
        A `secret_properties` block as defined below.
        """
        return pulumi.get(self, "secret_properties")

    @secret_properties.setter
    def secret_properties(self, value: pulumi.Input['CertifiateCertificatePolicySecretPropertiesArgs']):
        pulumi.set(self, "secret_properties", value)

    @property
    @pulumi.getter(name="lifetimeActions")
    def lifetime_actions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['CertifiateCertificatePolicyLifetimeActionArgs']]]]:
        """
        A `lifetime_action` block as defined below.
        """
        return pulumi.get(self, "lifetime_actions")

    @lifetime_actions.setter
    def lifetime_actions(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['CertifiateCertificatePolicyLifetimeActionArgs']]]]):
        pulumi.set(self, "lifetime_actions", value)

    @property
    @pulumi.getter(name="x509CertificateProperties")
    def x509_certificate_properties(self) -> Optional[pulumi.Input['CertifiateCertificatePolicyX509CertificatePropertiesArgs']]:
        """
        A `x509_certificate_properties` block as defined below. Required when `certificate` block is not specified.
        """
        return pulumi.get(self, "x509_certificate_properties")

    @x509_certificate_properties.setter
    def x509_certificate_properties(self, value: Optional[pulumi.Input['CertifiateCertificatePolicyX509CertificatePropertiesArgs']]):
        pulumi.set(self, "x509_certificate_properties", value)


@pulumi.input_type
class CertifiateCertificatePolicyIssuerParametersArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str]):
        """
        :param pulumi.Input[str] name: The name of the Certificate Issuer. Possible values include `Self` (for self-signed certificate), or `Unknown` (for a certificate issuing authority like `Let's Encrypt` and Azure direct supported ones). Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the Certificate Issuer. Possible values include `Self` (for self-signed certificate), or `Unknown` (for a certificate issuing authority like `Let's Encrypt` and Azure direct supported ones). Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)


@pulumi.input_type
class CertifiateCertificatePolicyKeyPropertiesArgs:
    def __init__(__self__, *,
                 exportable: pulumi.Input[bool],
                 key_type: pulumi.Input[str],
                 reuse_key: pulumi.Input[bool],
                 curve: Optional[pulumi.Input[str]] = None,
                 key_size: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[bool] exportable: Is this certificate exportable? Changing this forces a new resource to be created.
        :param pulumi.Input[str] key_type: Specifies the type of key, such as `RSA` or `EC`. Changing this forces a new resource to be created.
        :param pulumi.Input[bool] reuse_key: Is the key reusable? Changing this forces a new resource to be created.
        :param pulumi.Input[str] curve: Specifies the curve to use when creating an `EC` key. Possible values are `P-256`, `P-256K`, `P-384`, and `P-521`. This field will be required in a future release if `key_type` is `EC` or `EC-HSM`. Changing this forces a new resource to be created.
        :param pulumi.Input[int] key_size: The size of the key used in the certificate. Possible values include `2048`, `3072`, and `4096` for `RSA` keys, or `256`, `384`, and `521` for `EC` keys. This property is required when using RSA keys. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "exportable", exportable)
        pulumi.set(__self__, "key_type", key_type)
        pulumi.set(__self__, "reuse_key", reuse_key)
        if curve is not None:
            pulumi.set(__self__, "curve", curve)
        if key_size is not None:
            pulumi.set(__self__, "key_size", key_size)

    @property
    @pulumi.getter
    def exportable(self) -> pulumi.Input[bool]:
        """
        Is this certificate exportable? Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "exportable")

    @exportable.setter
    def exportable(self, value: pulumi.Input[bool]):
        pulumi.set(self, "exportable", value)

    @property
    @pulumi.getter(name="keyType")
    def key_type(self) -> pulumi.Input[str]:
        """
        Specifies the type of key, such as `RSA` or `EC`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "key_type")

    @key_type.setter
    def key_type(self, value: pulumi.Input[str]):
        pulumi.set(self, "key_type", value)

    @property
    @pulumi.getter(name="reuseKey")
    def reuse_key(self) -> pulumi.Input[bool]:
        """
        Is the key reusable? Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "reuse_key")

    @reuse_key.setter
    def reuse_key(self, value: pulumi.Input[bool]):
        pulumi.set(self, "reuse_key", value)

    @property
    @pulumi.getter
    def curve(self) -> Optional[pulumi.Input[str]]:
        """
        Specifies the curve to use when creating an `EC` key. Possible values are `P-256`, `P-256K`, `P-384`, and `P-521`. This field will be required in a future release if `key_type` is `EC` or `EC-HSM`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "curve")

    @curve.setter
    def curve(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "curve", value)

    @property
    @pulumi.getter(name="keySize")
    def key_size(self) -> Optional[pulumi.Input[int]]:
        """
        The size of the key used in the certificate. Possible values include `2048`, `3072`, and `4096` for `RSA` keys, or `256`, `384`, and `521` for `EC` keys. This property is required when using RSA keys. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "key_size")

    @key_size.setter
    def key_size(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "key_size", value)


@pulumi.input_type
class CertifiateCertificatePolicyLifetimeActionArgs:
    def __init__(__self__, *,
                 action: pulumi.Input['CertifiateCertificatePolicyLifetimeActionActionArgs'],
                 trigger: pulumi.Input['CertifiateCertificatePolicyLifetimeActionTriggerArgs']):
        """
        :param pulumi.Input['CertifiateCertificatePolicyLifetimeActionActionArgs'] action: A `action` block as defined below.
        :param pulumi.Input['CertifiateCertificatePolicyLifetimeActionTriggerArgs'] trigger: A `trigger` block as defined below.
        """
        pulumi.set(__self__, "action", action)
        pulumi.set(__self__, "trigger", trigger)

    @property
    @pulumi.getter
    def action(self) -> pulumi.Input['CertifiateCertificatePolicyLifetimeActionActionArgs']:
        """
        A `action` block as defined below.
        """
        return pulumi.get(self, "action")

    @action.setter
    def action(self, value: pulumi.Input['CertifiateCertificatePolicyLifetimeActionActionArgs']):
        pulumi.set(self, "action", value)

    @property
    @pulumi.getter
    def trigger(self) -> pulumi.Input['CertifiateCertificatePolicyLifetimeActionTriggerArgs']:
        """
        A `trigger` block as defined below.
        """
        return pulumi.get(self, "trigger")

    @trigger.setter
    def trigger(self, value: pulumi.Input['CertifiateCertificatePolicyLifetimeActionTriggerArgs']):
        pulumi.set(self, "trigger", value)


@pulumi.input_type
class CertifiateCertificatePolicyLifetimeActionActionArgs:
    def __init__(__self__, *,
                 action_type: pulumi.Input[str]):
        """
        :param pulumi.Input[str] action_type: The Type of action to be performed when the lifetime trigger is triggerec. Possible values include `AutoRenew` and `EmailContacts`. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "action_type", action_type)

    @property
    @pulumi.getter(name="actionType")
    def action_type(self) -> pulumi.Input[str]:
        """
        The Type of action to be performed when the lifetime trigger is triggerec. Possible values include `AutoRenew` and `EmailContacts`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "action_type")

    @action_type.setter
    def action_type(self, value: pulumi.Input[str]):
        pulumi.set(self, "action_type", value)


@pulumi.input_type
class CertifiateCertificatePolicyLifetimeActionTriggerArgs:
    def __init__(__self__, *,
                 days_before_expiry: Optional[pulumi.Input[int]] = None,
                 lifetime_percentage: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[int] days_before_expiry: The number of days before the Certificate expires that the action associated with this Trigger should run. Changing this forces a new resource to be created. Conflicts with `lifetime_percentage`.
        :param pulumi.Input[int] lifetime_percentage: The percentage at which during the Certificates Lifetime the action associated with this Trigger should run. Changing this forces a new resource to be created. Conflicts with `days_before_expiry`.
        """
        if days_before_expiry is not None:
            pulumi.set(__self__, "days_before_expiry", days_before_expiry)
        if lifetime_percentage is not None:
            pulumi.set(__self__, "lifetime_percentage", lifetime_percentage)

    @property
    @pulumi.getter(name="daysBeforeExpiry")
    def days_before_expiry(self) -> Optional[pulumi.Input[int]]:
        """
        The number of days before the Certificate expires that the action associated with this Trigger should run. Changing this forces a new resource to be created. Conflicts with `lifetime_percentage`.
        """
        return pulumi.get(self, "days_before_expiry")

    @days_before_expiry.setter
    def days_before_expiry(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "days_before_expiry", value)

    @property
    @pulumi.getter(name="lifetimePercentage")
    def lifetime_percentage(self) -> Optional[pulumi.Input[int]]:
        """
        The percentage at which during the Certificates Lifetime the action associated with this Trigger should run. Changing this forces a new resource to be created. Conflicts with `days_before_expiry`.
        """
        return pulumi.get(self, "lifetime_percentage")

    @lifetime_percentage.setter
    def lifetime_percentage(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "lifetime_percentage", value)


@pulumi.input_type
class CertifiateCertificatePolicySecretPropertiesArgs:
    def __init__(__self__, *,
                 content_type: pulumi.Input[str]):
        """
        :param pulumi.Input[str] content_type: The Content-Type of the Certificate, such as `application/x-pkcs12` for a PFX or `application/x-pem-file` for a PEM. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "content_type", content_type)

    @property
    @pulumi.getter(name="contentType")
    def content_type(self) -> pulumi.Input[str]:
        """
        The Content-Type of the Certificate, such as `application/x-pkcs12` for a PFX or `application/x-pem-file` for a PEM. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "content_type")

    @content_type.setter
    def content_type(self, value: pulumi.Input[str]):
        pulumi.set(self, "content_type", value)


@pulumi.input_type
class CertifiateCertificatePolicyX509CertificatePropertiesArgs:
    def __init__(__self__, *,
                 key_usages: pulumi.Input[Sequence[pulumi.Input[str]]],
                 subject: pulumi.Input[str],
                 validity_in_months: pulumi.Input[int],
                 extended_key_usages: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subject_alternative_names: Optional[pulumi.Input['CertifiateCertificatePolicyX509CertificatePropertiesSubjectAlternativeNamesArgs']] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] key_usages: A list of uses associated with this Key. Possible values include `cRLSign`, `dataEncipherment`, `decipherOnly`, `digitalSignature`, `encipherOnly`, `keyAgreement`, `keyCertSign`, `keyEncipherment` and `nonRepudiation` and are case-sensitive. Changing this forces a new resource to be created.
        :param pulumi.Input[str] subject: The Certificate's Subject. Changing this forces a new resource to be created.
        :param pulumi.Input[int] validity_in_months: The Certificates Validity Period in Months. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] extended_key_usages: A list of Extended/Enhanced Key Usages. Changing this forces a new resource to be created.
        :param pulumi.Input['CertifiateCertificatePolicyX509CertificatePropertiesSubjectAlternativeNamesArgs'] subject_alternative_names: A `subject_alternative_names` block as defined below.
        """
        pulumi.set(__self__, "key_usages", key_usages)
        pulumi.set(__self__, "subject", subject)
        pulumi.set(__self__, "validity_in_months", validity_in_months)
        if extended_key_usages is not None:
            pulumi.set(__self__, "extended_key_usages", extended_key_usages)
        if subject_alternative_names is not None:
            pulumi.set(__self__, "subject_alternative_names", subject_alternative_names)

    @property
    @pulumi.getter(name="keyUsages")
    def key_usages(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of uses associated with this Key. Possible values include `cRLSign`, `dataEncipherment`, `decipherOnly`, `digitalSignature`, `encipherOnly`, `keyAgreement`, `keyCertSign`, `keyEncipherment` and `nonRepudiation` and are case-sensitive. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "key_usages")

    @key_usages.setter
    def key_usages(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]):
        pulumi.set(self, "key_usages", value)

    @property
    @pulumi.getter
    def subject(self) -> pulumi.Input[str]:
        """
        The Certificate's Subject. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "subject")

    @subject.setter
    def subject(self, value: pulumi.Input[str]):
        pulumi.set(self, "subject", value)

    @property
    @pulumi.getter(name="validityInMonths")
    def validity_in_months(self) -> pulumi.Input[int]:
        """
        The Certificates Validity Period in Months. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "validity_in_months")

    @validity_in_months.setter
    def validity_in_months(self, value: pulumi.Input[int]):
        pulumi.set(self, "validity_in_months", value)

    @property
    @pulumi.getter(name="extendedKeyUsages")
    def extended_key_usages(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of Extended/Enhanced Key Usages. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "extended_key_usages")

    @extended_key_usages.setter
    def extended_key_usages(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "extended_key_usages", value)

    @property
    @pulumi.getter(name="subjectAlternativeNames")
    def subject_alternative_names(self) -> Optional[pulumi.Input['CertifiateCertificatePolicyX509CertificatePropertiesSubjectAlternativeNamesArgs']]:
        """
        A `subject_alternative_names` block as defined below.
        """
        return pulumi.get(self, "subject_alternative_names")

    @subject_alternative_names.setter
    def subject_alternative_names(self, value: Optional[pulumi.Input['CertifiateCertificatePolicyX509CertificatePropertiesSubjectAlternativeNamesArgs']]):
        pulumi.set(self, "subject_alternative_names", value)


@pulumi.input_type
class CertifiateCertificatePolicyX509CertificatePropertiesSubjectAlternativeNamesArgs:
    def __init__(__self__, *,
                 dns_names: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 emails: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 upns: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] dns_names: A list of alternative DNS names (FQDNs) identified by the Certificate. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] emails: A list of email addresses identified by this Certificate. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] upns: A list of User Principal Names identified by the Certificate. Changing this forces a new resource to be created.
        """
        if dns_names is not None:
            pulumi.set(__self__, "dns_names", dns_names)
        if emails is not None:
            pulumi.set(__self__, "emails", emails)
        if upns is not None:
            pulumi.set(__self__, "upns", upns)

    @property
    @pulumi.getter(name="dnsNames")
    def dns_names(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of alternative DNS names (FQDNs) identified by the Certificate. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "dns_names")

    @dns_names.setter
    def dns_names(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "dns_names", value)

    @property
    @pulumi.getter
    def emails(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of email addresses identified by this Certificate. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "emails")

    @emails.setter
    def emails(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "emails", value)

    @property
    @pulumi.getter
    def upns(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of User Principal Names identified by the Certificate. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "upns")

    @upns.setter
    def upns(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "upns", value)


@pulumi.input_type
class CertificateCertificateArgs:
    def __init__(__self__, *,
                 contents: pulumi.Input[str],
                 password: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] contents: The base64-encoded certificate contents. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The password associated with the certificate. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "contents", contents)
        if password is not None:
            pulumi.set(__self__, "password", password)

    @property
    @pulumi.getter
    def contents(self) -> pulumi.Input[str]:
        """
        The base64-encoded certificate contents. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "contents")

    @contents.setter
    def contents(self, value: pulumi.Input[str]):
        pulumi.set(self, "contents", value)

    @property
    @pulumi.getter
    def password(self) -> Optional[pulumi.Input[str]]:
        """
        The password associated with the certificate. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "password", value)


@pulumi.input_type
class CertificateCertificateAttributeArgs:
    def __init__(__self__, *,
                 created: Optional[pulumi.Input[str]] = None,
                 enabled: Optional[pulumi.Input[bool]] = None,
                 expires: Optional[pulumi.Input[str]] = None,
                 not_before: Optional[pulumi.Input[str]] = None,
                 recovery_level: Optional[pulumi.Input[str]] = None,
                 updated: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] created: The create time of the Key Vault Certificate.
        :param pulumi.Input[bool] enabled: whether the Key Vault Certificate is enabled.
        :param pulumi.Input[str] expires: The expires time of the Key Vault Certificate.
        :param pulumi.Input[str] not_before: The not before valid time of the Key Vault Certificate.
        :param pulumi.Input[str] recovery_level: The deletion recovery level of the Key Vault Certificate.
        :param pulumi.Input[str] updated: The recent update time of the Key Vault Certificate.
        """
        if created is not None:
            pulumi.set(__self__, "created", created)
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if expires is not None:
            pulumi.set(__self__, "expires", expires)
        if not_before is not None:
            pulumi.set(__self__, "not_before", not_before)
        if recovery_level is not None:
            pulumi.set(__self__, "recovery_level", recovery_level)
        if updated is not None:
            pulumi.set(__self__, "updated", updated)

    @property
    @pulumi.getter
    def created(self) -> Optional[pulumi.Input[str]]:
        """
        The create time of the Key Vault Certificate.
        """
        return pulumi.get(self, "created")

    @created.setter
    def created(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "created", value)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        whether the Key Vault Certificate is enabled.
        """
        return pulumi.get(self, "enabled")

    @enabled.setter
    def enabled(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "enabled", value)

    @property
    @pulumi.getter
    def expires(self) -> Optional[pulumi.Input[str]]:
        """
        The expires time of the Key Vault Certificate.
        """
        return pulumi.get(self, "expires")

    @expires.setter
    def expires(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "expires", value)

    @property
    @pulumi.getter(name="notBefore")
    def not_before(self) -> Optional[pulumi.Input[str]]:
        """
        The not before valid time of the Key Vault Certificate.
        """
        return pulumi.get(self, "not_before")

    @not_before.setter
    def not_before(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "not_before", value)

    @property
    @pulumi.getter(name="recoveryLevel")
    def recovery_level(self) -> Optional[pulumi.Input[str]]:
        """
        The deletion recovery level of the Key Vault Certificate.
        """
        return pulumi.get(self, "recovery_level")

    @recovery_level.setter
    def recovery_level(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "recovery_level", value)

    @property
    @pulumi.getter
    def updated(self) -> Optional[pulumi.Input[str]]:
        """
        The recent update time of the Key Vault Certificate.
        """
        return pulumi.get(self, "updated")

    @updated.setter
    def updated(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "updated", value)


@pulumi.input_type
class CertificateCertificatePolicyArgs:
    def __init__(__self__, *,
                 issuer_parameters: pulumi.Input['CertificateCertificatePolicyIssuerParametersArgs'],
                 key_properties: pulumi.Input['CertificateCertificatePolicyKeyPropertiesArgs'],
                 secret_properties: pulumi.Input['CertificateCertificatePolicySecretPropertiesArgs'],
                 lifetime_actions: Optional[pulumi.Input[Sequence[pulumi.Input['CertificateCertificatePolicyLifetimeActionArgs']]]] = None,
                 x509_certificate_properties: Optional[pulumi.Input['CertificateCertificatePolicyX509CertificatePropertiesArgs']] = None):
        """
        :param pulumi.Input['CertificateCertificatePolicyIssuerParametersArgs'] issuer_parameters: A `issuer_parameters` block as defined below.
        :param pulumi.Input['CertificateCertificatePolicyKeyPropertiesArgs'] key_properties: A `key_properties` block as defined below.
        :param pulumi.Input['CertificateCertificatePolicySecretPropertiesArgs'] secret_properties: A `secret_properties` block as defined below.
        :param pulumi.Input[Sequence[pulumi.Input['CertificateCertificatePolicyLifetimeActionArgs']]] lifetime_actions: A `lifetime_action` block as defined below.
        :param pulumi.Input['CertificateCertificatePolicyX509CertificatePropertiesArgs'] x509_certificate_properties: A `x509_certificate_properties` block as defined below. Required when `certificate` block is not specified.
        """
        pulumi.set(__self__, "issuer_parameters", issuer_parameters)
        pulumi.set(__self__, "key_properties", key_properties)
        pulumi.set(__self__, "secret_properties", secret_properties)
        if lifetime_actions is not None:
            pulumi.set(__self__, "lifetime_actions", lifetime_actions)
        if x509_certificate_properties is not None:
            pulumi.set(__self__, "x509_certificate_properties", x509_certificate_properties)

    @property
    @pulumi.getter(name="issuerParameters")
    def issuer_parameters(self) -> pulumi.Input['CertificateCertificatePolicyIssuerParametersArgs']:
        """
        A `issuer_parameters` block as defined below.
        """
        return pulumi.get(self, "issuer_parameters")

    @issuer_parameters.setter
    def issuer_parameters(self, value: pulumi.Input['CertificateCertificatePolicyIssuerParametersArgs']):
        pulumi.set(self, "issuer_parameters", value)

    @property
    @pulumi.getter(name="keyProperties")
    def key_properties(self) -> pulumi.Input['CertificateCertificatePolicyKeyPropertiesArgs']:
        """
        A `key_properties` block as defined below.
        """
        return pulumi.get(self, "key_properties")

    @key_properties.setter
    def key_properties(self, value: pulumi.Input['CertificateCertificatePolicyKeyPropertiesArgs']):
        pulumi.set(self, "key_properties", value)

    @property
    @pulumi.getter(name="secretProperties")
    def secret_properties(self) -> pulumi.Input['CertificateCertificatePolicySecretPropertiesArgs']:
        """
        A `secret_properties` block as defined below.
        """
        return pulumi.get(self, "secret_properties")

    @secret_properties.setter
    def secret_properties(self, value: pulumi.Input['CertificateCertificatePolicySecretPropertiesArgs']):
        pulumi.set(self, "secret_properties", value)

    @property
    @pulumi.getter(name="lifetimeActions")
    def lifetime_actions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['CertificateCertificatePolicyLifetimeActionArgs']]]]:
        """
        A `lifetime_action` block as defined below.
        """
        return pulumi.get(self, "lifetime_actions")

    @lifetime_actions.setter
    def lifetime_actions(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['CertificateCertificatePolicyLifetimeActionArgs']]]]):
        pulumi.set(self, "lifetime_actions", value)

    @property
    @pulumi.getter(name="x509CertificateProperties")
    def x509_certificate_properties(self) -> Optional[pulumi.Input['CertificateCertificatePolicyX509CertificatePropertiesArgs']]:
        """
        A `x509_certificate_properties` block as defined below. Required when `certificate` block is not specified.
        """
        return pulumi.get(self, "x509_certificate_properties")

    @x509_certificate_properties.setter
    def x509_certificate_properties(self, value: Optional[pulumi.Input['CertificateCertificatePolicyX509CertificatePropertiesArgs']]):
        pulumi.set(self, "x509_certificate_properties", value)


@pulumi.input_type
class CertificateCertificatePolicyIssuerParametersArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str]):
        """
        :param pulumi.Input[str] name: The name of the Certificate Issuer. Possible values include `Self` (for self-signed certificate), or `Unknown` (for a certificate issuing authority like `Let's Encrypt` and Azure direct supported ones). Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the Certificate Issuer. Possible values include `Self` (for self-signed certificate), or `Unknown` (for a certificate issuing authority like `Let's Encrypt` and Azure direct supported ones). Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)


@pulumi.input_type
class CertificateCertificatePolicyKeyPropertiesArgs:
    def __init__(__self__, *,
                 exportable: pulumi.Input[bool],
                 key_type: pulumi.Input[str],
                 reuse_key: pulumi.Input[bool],
                 curve: Optional[pulumi.Input[str]] = None,
                 key_size: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[bool] exportable: Is this certificate exportable? Changing this forces a new resource to be created.
        :param pulumi.Input[str] key_type: Specifies the type of key, such as `RSA` or `EC`. Changing this forces a new resource to be created.
        :param pulumi.Input[bool] reuse_key: Is the key reusable? Changing this forces a new resource to be created.
        :param pulumi.Input[str] curve: Specifies the curve to use when creating an `EC` key. Possible values are `P-256`, `P-256K`, `P-384`, and `P-521`. This field will be required in a future release if `key_type` is `EC` or `EC-HSM`. Changing this forces a new resource to be created.
        :param pulumi.Input[int] key_size: The size of the key used in the certificate. Possible values include `2048`, `3072`, and `4096` for `RSA` keys, or `256`, `384`, and `521` for `EC` keys. This property is required when using RSA keys. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "exportable", exportable)
        pulumi.set(__self__, "key_type", key_type)
        pulumi.set(__self__, "reuse_key", reuse_key)
        if curve is not None:
            pulumi.set(__self__, "curve", curve)
        if key_size is not None:
            pulumi.set(__self__, "key_size", key_size)

    @property
    @pulumi.getter
    def exportable(self) -> pulumi.Input[bool]:
        """
        Is this certificate exportable? Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "exportable")

    @exportable.setter
    def exportable(self, value: pulumi.Input[bool]):
        pulumi.set(self, "exportable", value)

    @property
    @pulumi.getter(name="keyType")
    def key_type(self) -> pulumi.Input[str]:
        """
        Specifies the type of key, such as `RSA` or `EC`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "key_type")

    @key_type.setter
    def key_type(self, value: pulumi.Input[str]):
        pulumi.set(self, "key_type", value)

    @property
    @pulumi.getter(name="reuseKey")
    def reuse_key(self) -> pulumi.Input[bool]:
        """
        Is the key reusable? Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "reuse_key")

    @reuse_key.setter
    def reuse_key(self, value: pulumi.Input[bool]):
        pulumi.set(self, "reuse_key", value)

    @property
    @pulumi.getter
    def curve(self) -> Optional[pulumi.Input[str]]:
        """
        Specifies the curve to use when creating an `EC` key. Possible values are `P-256`, `P-256K`, `P-384`, and `P-521`. This field will be required in a future release if `key_type` is `EC` or `EC-HSM`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "curve")

    @curve.setter
    def curve(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "curve", value)

    @property
    @pulumi.getter(name="keySize")
    def key_size(self) -> Optional[pulumi.Input[int]]:
        """
        The size of the key used in the certificate. Possible values include `2048`, `3072`, and `4096` for `RSA` keys, or `256`, `384`, and `521` for `EC` keys. This property is required when using RSA keys. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "key_size")

    @key_size.setter
    def key_size(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "key_size", value)


@pulumi.input_type
class CertificateCertificatePolicyLifetimeActionArgs:
    def __init__(__self__, *,
                 action: pulumi.Input['CertificateCertificatePolicyLifetimeActionActionArgs'],
                 trigger: pulumi.Input['CertificateCertificatePolicyLifetimeActionTriggerArgs']):
        """
        :param pulumi.Input['CertificateCertificatePolicyLifetimeActionActionArgs'] action: A `action` block as defined below.
        :param pulumi.Input['CertificateCertificatePolicyLifetimeActionTriggerArgs'] trigger: A `trigger` block as defined below.
        """
        pulumi.set(__self__, "action", action)
        pulumi.set(__self__, "trigger", trigger)

    @property
    @pulumi.getter
    def action(self) -> pulumi.Input['CertificateCertificatePolicyLifetimeActionActionArgs']:
        """
        A `action` block as defined below.
        """
        return pulumi.get(self, "action")

    @action.setter
    def action(self, value: pulumi.Input['CertificateCertificatePolicyLifetimeActionActionArgs']):
        pulumi.set(self, "action", value)

    @property
    @pulumi.getter
    def trigger(self) -> pulumi.Input['CertificateCertificatePolicyLifetimeActionTriggerArgs']:
        """
        A `trigger` block as defined below.
        """
        return pulumi.get(self, "trigger")

    @trigger.setter
    def trigger(self, value: pulumi.Input['CertificateCertificatePolicyLifetimeActionTriggerArgs']):
        pulumi.set(self, "trigger", value)


@pulumi.input_type
class CertificateCertificatePolicyLifetimeActionActionArgs:
    def __init__(__self__, *,
                 action_type: pulumi.Input[str]):
        """
        :param pulumi.Input[str] action_type: The Type of action to be performed when the lifetime trigger is triggerec. Possible values include `AutoRenew` and `EmailContacts`. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "action_type", action_type)

    @property
    @pulumi.getter(name="actionType")
    def action_type(self) -> pulumi.Input[str]:
        """
        The Type of action to be performed when the lifetime trigger is triggerec. Possible values include `AutoRenew` and `EmailContacts`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "action_type")

    @action_type.setter
    def action_type(self, value: pulumi.Input[str]):
        pulumi.set(self, "action_type", value)


@pulumi.input_type
class CertificateCertificatePolicyLifetimeActionTriggerArgs:
    def __init__(__self__, *,
                 days_before_expiry: Optional[pulumi.Input[int]] = None,
                 lifetime_percentage: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[int] days_before_expiry: The number of days before the Certificate expires that the action associated with this Trigger should run. Changing this forces a new resource to be created. Conflicts with `lifetime_percentage`.
        :param pulumi.Input[int] lifetime_percentage: The percentage at which during the Certificates Lifetime the action associated with this Trigger should run. Changing this forces a new resource to be created. Conflicts with `days_before_expiry`.
        """
        if days_before_expiry is not None:
            pulumi.set(__self__, "days_before_expiry", days_before_expiry)
        if lifetime_percentage is not None:
            pulumi.set(__self__, "lifetime_percentage", lifetime_percentage)

    @property
    @pulumi.getter(name="daysBeforeExpiry")
    def days_before_expiry(self) -> Optional[pulumi.Input[int]]:
        """
        The number of days before the Certificate expires that the action associated with this Trigger should run. Changing this forces a new resource to be created. Conflicts with `lifetime_percentage`.
        """
        return pulumi.get(self, "days_before_expiry")

    @days_before_expiry.setter
    def days_before_expiry(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "days_before_expiry", value)

    @property
    @pulumi.getter(name="lifetimePercentage")
    def lifetime_percentage(self) -> Optional[pulumi.Input[int]]:
        """
        The percentage at which during the Certificates Lifetime the action associated with this Trigger should run. Changing this forces a new resource to be created. Conflicts with `days_before_expiry`.
        """
        return pulumi.get(self, "lifetime_percentage")

    @lifetime_percentage.setter
    def lifetime_percentage(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "lifetime_percentage", value)


@pulumi.input_type
class CertificateCertificatePolicySecretPropertiesArgs:
    def __init__(__self__, *,
                 content_type: pulumi.Input[str]):
        """
        :param pulumi.Input[str] content_type: The Content-Type of the Certificate, such as `application/x-pkcs12` for a PFX or `application/x-pem-file` for a PEM. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "content_type", content_type)

    @property
    @pulumi.getter(name="contentType")
    def content_type(self) -> pulumi.Input[str]:
        """
        The Content-Type of the Certificate, such as `application/x-pkcs12` for a PFX or `application/x-pem-file` for a PEM. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "content_type")

    @content_type.setter
    def content_type(self, value: pulumi.Input[str]):
        pulumi.set(self, "content_type", value)


@pulumi.input_type
class CertificateCertificatePolicyX509CertificatePropertiesArgs:
    def __init__(__self__, *,
                 key_usages: pulumi.Input[Sequence[pulumi.Input[str]]],
                 subject: pulumi.Input[str],
                 validity_in_months: pulumi.Input[int],
                 extended_key_usages: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subject_alternative_names: Optional[pulumi.Input['CertificateCertificatePolicyX509CertificatePropertiesSubjectAlternativeNamesArgs']] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] key_usages: A list of uses associated with this Key. Possible values include `cRLSign`, `dataEncipherment`, `decipherOnly`, `digitalSignature`, `encipherOnly`, `keyAgreement`, `keyCertSign`, `keyEncipherment` and `nonRepudiation` and are case-sensitive. Changing this forces a new resource to be created.
        :param pulumi.Input[str] subject: The Certificate's Subject. Changing this forces a new resource to be created.
        :param pulumi.Input[int] validity_in_months: The Certificates Validity Period in Months. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] extended_key_usages: A list of Extended/Enhanced Key Usages. Changing this forces a new resource to be created.
        :param pulumi.Input['CertificateCertificatePolicyX509CertificatePropertiesSubjectAlternativeNamesArgs'] subject_alternative_names: A `subject_alternative_names` block as defined below.
        """
        pulumi.set(__self__, "key_usages", key_usages)
        pulumi.set(__self__, "subject", subject)
        pulumi.set(__self__, "validity_in_months", validity_in_months)
        if extended_key_usages is not None:
            pulumi.set(__self__, "extended_key_usages", extended_key_usages)
        if subject_alternative_names is not None:
            pulumi.set(__self__, "subject_alternative_names", subject_alternative_names)

    @property
    @pulumi.getter(name="keyUsages")
    def key_usages(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of uses associated with this Key. Possible values include `cRLSign`, `dataEncipherment`, `decipherOnly`, `digitalSignature`, `encipherOnly`, `keyAgreement`, `keyCertSign`, `keyEncipherment` and `nonRepudiation` and are case-sensitive. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "key_usages")

    @key_usages.setter
    def key_usages(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]):
        pulumi.set(self, "key_usages", value)

    @property
    @pulumi.getter
    def subject(self) -> pulumi.Input[str]:
        """
        The Certificate's Subject. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "subject")

    @subject.setter
    def subject(self, value: pulumi.Input[str]):
        pulumi.set(self, "subject", value)

    @property
    @pulumi.getter(name="validityInMonths")
    def validity_in_months(self) -> pulumi.Input[int]:
        """
        The Certificates Validity Period in Months. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "validity_in_months")

    @validity_in_months.setter
    def validity_in_months(self, value: pulumi.Input[int]):
        pulumi.set(self, "validity_in_months", value)

    @property
    @pulumi.getter(name="extendedKeyUsages")
    def extended_key_usages(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of Extended/Enhanced Key Usages. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "extended_key_usages")

    @extended_key_usages.setter
    def extended_key_usages(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "extended_key_usages", value)

    @property
    @pulumi.getter(name="subjectAlternativeNames")
    def subject_alternative_names(self) -> Optional[pulumi.Input['CertificateCertificatePolicyX509CertificatePropertiesSubjectAlternativeNamesArgs']]:
        """
        A `subject_alternative_names` block as defined below.
        """
        return pulumi.get(self, "subject_alternative_names")

    @subject_alternative_names.setter
    def subject_alternative_names(self, value: Optional[pulumi.Input['CertificateCertificatePolicyX509CertificatePropertiesSubjectAlternativeNamesArgs']]):
        pulumi.set(self, "subject_alternative_names", value)


@pulumi.input_type
class CertificateCertificatePolicyX509CertificatePropertiesSubjectAlternativeNamesArgs:
    def __init__(__self__, *,
                 dns_names: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 emails: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 upns: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] dns_names: A list of alternative DNS names (FQDNs) identified by the Certificate. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] emails: A list of email addresses identified by this Certificate. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] upns: A list of User Principal Names identified by the Certificate. Changing this forces a new resource to be created.
        """
        if dns_names is not None:
            pulumi.set(__self__, "dns_names", dns_names)
        if emails is not None:
            pulumi.set(__self__, "emails", emails)
        if upns is not None:
            pulumi.set(__self__, "upns", upns)

    @property
    @pulumi.getter(name="dnsNames")
    def dns_names(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of alternative DNS names (FQDNs) identified by the Certificate. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "dns_names")

    @dns_names.setter
    def dns_names(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "dns_names", value)

    @property
    @pulumi.getter
    def emails(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of email addresses identified by this Certificate. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "emails")

    @emails.setter
    def emails(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "emails", value)

    @property
    @pulumi.getter
    def upns(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of User Principal Names identified by the Certificate. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "upns")

    @upns.setter
    def upns(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "upns", value)


@pulumi.input_type
class CertificateIssuerAdminArgs:
    def __init__(__self__, *,
                 email_address: pulumi.Input[str],
                 first_name: Optional[pulumi.Input[str]] = None,
                 last_name: Optional[pulumi.Input[str]] = None,
                 phone: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] email_address: E-mail address of the admin.
        :param pulumi.Input[str] first_name: First name of the admin.
        :param pulumi.Input[str] last_name: Last name of the admin.
        :param pulumi.Input[str] phone: Phone number of the admin.
        """
        pulumi.set(__self__, "email_address", email_address)
        if first_name is not None:
            pulumi.set(__self__, "first_name", first_name)
        if last_name is not None:
            pulumi.set(__self__, "last_name", last_name)
        if phone is not None:
            pulumi.set(__self__, "phone", phone)

    @property
    @pulumi.getter(name="emailAddress")
    def email_address(self) -> pulumi.Input[str]:
        """
        E-mail address of the admin.
        """
        return pulumi.get(self, "email_address")

    @email_address.setter
    def email_address(self, value: pulumi.Input[str]):
        pulumi.set(self, "email_address", value)

    @property
    @pulumi.getter(name="firstName")
    def first_name(self) -> Optional[pulumi.Input[str]]:
        """
        First name of the admin.
        """
        return pulumi.get(self, "first_name")

    @first_name.setter
    def first_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "first_name", value)

    @property
    @pulumi.getter(name="lastName")
    def last_name(self) -> Optional[pulumi.Input[str]]:
        """
        Last name of the admin.
        """
        return pulumi.get(self, "last_name")

    @last_name.setter
    def last_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "last_name", value)

    @property
    @pulumi.getter
    def phone(self) -> Optional[pulumi.Input[str]]:
        """
        Phone number of the admin.
        """
        return pulumi.get(self, "phone")

    @phone.setter
    def phone(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "phone", value)


@pulumi.input_type
class KeyVaultAccessPolicyArgs:
    def __init__(__self__, *,
                 object_id: pulumi.Input[str],
                 tenant_id: pulumi.Input[str],
                 application_id: Optional[pulumi.Input[str]] = None,
                 certificate_permissions: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 key_permissions: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 secret_permissions: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 storage_permissions: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[str] object_id: The object ID of a user, service principal or security group in the Azure Active Directory tenant for the vault. The object ID must be unique for the list of access policies.
        :param pulumi.Input[str] tenant_id: The Azure Active Directory tenant ID that should be used for authenticating requests to the key vault. Must match the `tenant_id` used above.
        :param pulumi.Input[str] application_id: The object ID of an Application in Azure Active Directory.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] certificate_permissions: List of certificate permissions, must be one or more from the following: `Backup`, `Create`, `Delete`, `DeleteIssuers`, `Get`, `GetIssuers`, `Import`, `List`, `ListIssuers`, `ManageContacts`, `ManageIssuers`, `Purge`, `Recover`, `Restore`, `SetIssuers` and `Update`.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] key_permissions: List of key permissions, must be one or more from the following: `Backup`, `Create`, `Decrypt`, `Delete`, `Encrypt`, `Get`, `Import`, `List`, `Purge`, `Recover`, `Restore`, `Sign`, `UnwrapKey`, `Update`, `Verify` and `WrapKey`.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] secret_permissions: List of secret permissions, must be one or more from the following: `Backup`, `Delete`, `Get`, `List`, `Purge`, `Recover`, `Restore` and `Set`.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] storage_permissions: List of storage permissions, must be one or more from the following: `Backup`, `Delete`, `DeleteSAS`, `Get`, `GetSAS`, `List`, `ListSAS`, `Purge`, `Recover`, `RegenerateKey`, `Restore`, `Set`, `SetSAS` and `Update`.
        """
        pulumi.set(__self__, "object_id", object_id)
        pulumi.set(__self__, "tenant_id", tenant_id)
        if application_id is not None:
            pulumi.set(__self__, "application_id", application_id)
        if certificate_permissions is not None:
            pulumi.set(__self__, "certificate_permissions", certificate_permissions)
        if key_permissions is not None:
            pulumi.set(__self__, "key_permissions", key_permissions)
        if secret_permissions is not None:
            pulumi.set(__self__, "secret_permissions", secret_permissions)
        if storage_permissions is not None:
            pulumi.set(__self__, "storage_permissions", storage_permissions)

    @property
    @pulumi.getter(name="objectId")
    def object_id(self) -> pulumi.Input[str]:
        """
        The object ID of a user, service principal or security group in the Azure Active Directory tenant for the vault. The object ID must be unique for the list of access policies.
        """
        return pulumi.get(self, "object_id")

    @object_id.setter
    def object_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "object_id", value)

    @property
    @pulumi.getter(name="tenantId")
    def tenant_id(self) -> pulumi.Input[str]:
        """
        The Azure Active Directory tenant ID that should be used for authenticating requests to the key vault. Must match the `tenant_id` used above.
        """
        return pulumi.get(self, "tenant_id")

    @tenant_id.setter
    def tenant_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "tenant_id", value)

    @property
    @pulumi.getter(name="applicationId")
    def application_id(self) -> Optional[pulumi.Input[str]]:
        """
        The object ID of an Application in Azure Active Directory.
        """
        return pulumi.get(self, "application_id")

    @application_id.setter
    def application_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "application_id", value)

    @property
    @pulumi.getter(name="certificatePermissions")
    def certificate_permissions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        List of certificate permissions, must be one or more from the following: `Backup`, `Create`, `Delete`, `DeleteIssuers`, `Get`, `GetIssuers`, `Import`, `List`, `ListIssuers`, `ManageContacts`, `ManageIssuers`, `Purge`, `Recover`, `Restore`, `SetIssuers` and `Update`.
        """
        return pulumi.get(self, "certificate_permissions")

    @certificate_permissions.setter
    def certificate_permissions(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "certificate_permissions", value)

    @property
    @pulumi.getter(name="keyPermissions")
    def key_permissions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        List of key permissions, must be one or more from the following: `Backup`, `Create`, `Decrypt`, `Delete`, `Encrypt`, `Get`, `Import`, `List`, `Purge`, `Recover`, `Restore`, `Sign`, `UnwrapKey`, `Update`, `Verify` and `WrapKey`.
        """
        return pulumi.get(self, "key_permissions")

    @key_permissions.setter
    def key_permissions(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "key_permissions", value)

    @property
    @pulumi.getter(name="secretPermissions")
    def secret_permissions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        List of secret permissions, must be one or more from the following: `Backup`, `Delete`, `Get`, `List`, `Purge`, `Recover`, `Restore` and `Set`.
        """
        return pulumi.get(self, "secret_permissions")

    @secret_permissions.setter
    def secret_permissions(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "secret_permissions", value)

    @property
    @pulumi.getter(name="storagePermissions")
    def storage_permissions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        List of storage permissions, must be one or more from the following: `Backup`, `Delete`, `DeleteSAS`, `Get`, `GetSAS`, `List`, `ListSAS`, `Purge`, `Recover`, `RegenerateKey`, `Restore`, `Set`, `SetSAS` and `Update`.
        """
        return pulumi.get(self, "storage_permissions")

    @storage_permissions.setter
    def storage_permissions(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "storage_permissions", value)


@pulumi.input_type
class KeyVaultContactArgs:
    def __init__(__self__, *,
                 email: pulumi.Input[str],
                 name: Optional[pulumi.Input[str]] = None,
                 phone: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] email: E-mail address of the contact.
        :param pulumi.Input[str] name: Name of the contact.
        :param pulumi.Input[str] phone: Phone number of the contact.
        """
        pulumi.set(__self__, "email", email)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if phone is not None:
            pulumi.set(__self__, "phone", phone)

    @property
    @pulumi.getter
    def email(self) -> pulumi.Input[str]:
        """
        E-mail address of the contact.
        """
        return pulumi.get(self, "email")

    @email.setter
    def email(self, value: pulumi.Input[str]):
        pulumi.set(self, "email", value)

    @property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[str]]:
        """
        Name of the contact.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def phone(self) -> Optional[pulumi.Input[str]]:
        """
        Phone number of the contact.
        """
        return pulumi.get(self, "phone")

    @phone.setter
    def phone(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "phone", value)


@pulumi.input_type
class KeyVaultNetworkAclsArgs:
    def __init__(__self__, *,
                 bypass: pulumi.Input[str],
                 default_action: pulumi.Input[str],
                 ip_rules: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 virtual_network_subnet_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[str] bypass: Specifies which traffic can bypass the network rules. Possible values are `AzureServices` and `None`.
        :param pulumi.Input[str] default_action: The Default Action to use when no rules match from `ip_rules` / `virtual_network_subnet_ids`. Possible values are `Allow` and `Deny`.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ip_rules: One or more IP Addresses, or CIDR Blocks which should be able to access the Key Vault.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] virtual_network_subnet_ids: One or more Subnet ID's which should be able to access this Key Vault.
        """
        pulumi.set(__self__, "bypass", bypass)
        pulumi.set(__self__, "default_action", default_action)
        if ip_rules is not None:
            pulumi.set(__self__, "ip_rules", ip_rules)
        if virtual_network_subnet_ids is not None:
            pulumi.set(__self__, "virtual_network_subnet_ids", virtual_network_subnet_ids)

    @property
    @pulumi.getter
    def bypass(self) -> pulumi.Input[str]:
        """
        Specifies which traffic can bypass the network rules. Possible values are `AzureServices` and `None`.
        """
        return pulumi.get(self, "bypass")

    @bypass.setter
    def bypass(self, value: pulumi.Input[str]):
        pulumi.set(self, "bypass", value)

    @property
    @pulumi.getter(name="defaultAction")
    def default_action(self) -> pulumi.Input[str]:
        """
        The Default Action to use when no rules match from `ip_rules` / `virtual_network_subnet_ids`. Possible values are `Allow` and `Deny`.
        """
        return pulumi.get(self, "default_action")

    @default_action.setter
    def default_action(self, value: pulumi.Input[str]):
        pulumi.set(self, "default_action", value)

    @property
    @pulumi.getter(name="ipRules")
    def ip_rules(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        One or more IP Addresses, or CIDR Blocks which should be able to access the Key Vault.
        """
        return pulumi.get(self, "ip_rules")

    @ip_rules.setter
    def ip_rules(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "ip_rules", value)

    @property
    @pulumi.getter(name="virtualNetworkSubnetIds")
    def virtual_network_subnet_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        One or more Subnet ID's which should be able to access this Key Vault.
        """
        return pulumi.get(self, "virtual_network_subnet_ids")

    @virtual_network_subnet_ids.setter
    def virtual_network_subnet_ids(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "virtual_network_subnet_ids", value)


