# coding=utf-8
# *** WARNING: this file was generated by pulumi-language-python. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import builtins as _builtins
import warnings
import sys
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
if sys.version_info >= (3, 11):
    from typing import NotRequired, TypedDict, TypeAlias
else:
    from typing_extensions import NotRequired, TypedDict, TypeAlias
from . import _utilities
from . import outputs
from ._inputs import *

__all__ = ['MwsCustomerManagedKeysArgs', 'MwsCustomerManagedKeys']

@pulumi.input_type
class MwsCustomerManagedKeysArgs:
    def __init__(__self__, *,
                 account_id: pulumi.Input[_builtins.str],
                 use_cases: pulumi.Input[Sequence[pulumi.Input[_builtins.str]]],
                 aws_key_info: Optional[pulumi.Input['MwsCustomerManagedKeysAwsKeyInfoArgs']] = None,
                 creation_time: Optional[pulumi.Input[_builtins.int]] = None,
                 customer_managed_key_id: Optional[pulumi.Input[_builtins.str]] = None,
                 gcp_key_info: Optional[pulumi.Input['MwsCustomerManagedKeysGcpKeyInfoArgs']] = None):
        """
        The set of arguments for constructing a MwsCustomerManagedKeys resource.
        :param pulumi.Input[_builtins.str] account_id: Account Id that could be found in the top right corner of [Accounts Console](https://accounts.cloud.databricks.com/)
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] use_cases: *(since v0.3.4)* List of use cases for which this key will be used. *If you've used the resource before, please add `use_cases = ["MANAGED_SERVICES"]` to keep the previous behaviour.* Possible values are:
               * `MANAGED_SERVICES` - for encryption of the workspace objects (notebooks, secrets) that are stored in the control plane
               * `STORAGE` - for encryption of the DBFS Storage & Cluster EBS Volumes
        :param pulumi.Input['MwsCustomerManagedKeysAwsKeyInfoArgs'] aws_key_info: This field is a block and is documented below. This conflicts with `gcp_key_info`
        :param pulumi.Input[_builtins.int] creation_time: (Integer) Time in epoch milliseconds when the customer key was created.
        :param pulumi.Input[_builtins.str] customer_managed_key_id: (String) ID of the encryption key configuration object.
        :param pulumi.Input['MwsCustomerManagedKeysGcpKeyInfoArgs'] gcp_key_info: This field is a block and is documented below. This conflicts with `aws_key_info`
        """
        pulumi.set(__self__, "account_id", account_id)
        pulumi.set(__self__, "use_cases", use_cases)
        if aws_key_info is not None:
            pulumi.set(__self__, "aws_key_info", aws_key_info)
        if creation_time is not None:
            pulumi.set(__self__, "creation_time", creation_time)
        if customer_managed_key_id is not None:
            pulumi.set(__self__, "customer_managed_key_id", customer_managed_key_id)
        if gcp_key_info is not None:
            pulumi.set(__self__, "gcp_key_info", gcp_key_info)

    @_builtins.property
    @pulumi.getter(name="accountId")
    def account_id(self) -> pulumi.Input[_builtins.str]:
        """
        Account Id that could be found in the top right corner of [Accounts Console](https://accounts.cloud.databricks.com/)
        """
        return pulumi.get(self, "account_id")

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

    @_builtins.property
    @pulumi.getter(name="useCases")
    def use_cases(self) -> pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]:
        """
        *(since v0.3.4)* List of use cases for which this key will be used. *If you've used the resource before, please add `use_cases = ["MANAGED_SERVICES"]` to keep the previous behaviour.* Possible values are:
        * `MANAGED_SERVICES` - for encryption of the workspace objects (notebooks, secrets) that are stored in the control plane
        * `STORAGE` - for encryption of the DBFS Storage & Cluster EBS Volumes
        """
        return pulumi.get(self, "use_cases")

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

    @_builtins.property
    @pulumi.getter(name="awsKeyInfo")
    def aws_key_info(self) -> Optional[pulumi.Input['MwsCustomerManagedKeysAwsKeyInfoArgs']]:
        """
        This field is a block and is documented below. This conflicts with `gcp_key_info`
        """
        return pulumi.get(self, "aws_key_info")

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

    @_builtins.property
    @pulumi.getter(name="creationTime")
    def creation_time(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        (Integer) Time in epoch milliseconds when the customer key was created.
        """
        return pulumi.get(self, "creation_time")

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

    @_builtins.property
    @pulumi.getter(name="customerManagedKeyId")
    def customer_managed_key_id(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        (String) ID of the encryption key configuration object.
        """
        return pulumi.get(self, "customer_managed_key_id")

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

    @_builtins.property
    @pulumi.getter(name="gcpKeyInfo")
    def gcp_key_info(self) -> Optional[pulumi.Input['MwsCustomerManagedKeysGcpKeyInfoArgs']]:
        """
        This field is a block and is documented below. This conflicts with `aws_key_info`
        """
        return pulumi.get(self, "gcp_key_info")

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


@pulumi.input_type
class _MwsCustomerManagedKeysState:
    def __init__(__self__, *,
                 account_id: Optional[pulumi.Input[_builtins.str]] = None,
                 aws_key_info: Optional[pulumi.Input['MwsCustomerManagedKeysAwsKeyInfoArgs']] = None,
                 creation_time: Optional[pulumi.Input[_builtins.int]] = None,
                 customer_managed_key_id: Optional[pulumi.Input[_builtins.str]] = None,
                 gcp_key_info: Optional[pulumi.Input['MwsCustomerManagedKeysGcpKeyInfoArgs']] = None,
                 use_cases: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None):
        """
        Input properties used for looking up and filtering MwsCustomerManagedKeys resources.
        :param pulumi.Input[_builtins.str] account_id: Account Id that could be found in the top right corner of [Accounts Console](https://accounts.cloud.databricks.com/)
        :param pulumi.Input['MwsCustomerManagedKeysAwsKeyInfoArgs'] aws_key_info: This field is a block and is documented below. This conflicts with `gcp_key_info`
        :param pulumi.Input[_builtins.int] creation_time: (Integer) Time in epoch milliseconds when the customer key was created.
        :param pulumi.Input[_builtins.str] customer_managed_key_id: (String) ID of the encryption key configuration object.
        :param pulumi.Input['MwsCustomerManagedKeysGcpKeyInfoArgs'] gcp_key_info: This field is a block and is documented below. This conflicts with `aws_key_info`
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] use_cases: *(since v0.3.4)* List of use cases for which this key will be used. *If you've used the resource before, please add `use_cases = ["MANAGED_SERVICES"]` to keep the previous behaviour.* Possible values are:
               * `MANAGED_SERVICES` - for encryption of the workspace objects (notebooks, secrets) that are stored in the control plane
               * `STORAGE` - for encryption of the DBFS Storage & Cluster EBS Volumes
        """
        if account_id is not None:
            pulumi.set(__self__, "account_id", account_id)
        if aws_key_info is not None:
            pulumi.set(__self__, "aws_key_info", aws_key_info)
        if creation_time is not None:
            pulumi.set(__self__, "creation_time", creation_time)
        if customer_managed_key_id is not None:
            pulumi.set(__self__, "customer_managed_key_id", customer_managed_key_id)
        if gcp_key_info is not None:
            pulumi.set(__self__, "gcp_key_info", gcp_key_info)
        if use_cases is not None:
            pulumi.set(__self__, "use_cases", use_cases)

    @_builtins.property
    @pulumi.getter(name="accountId")
    def account_id(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Account Id that could be found in the top right corner of [Accounts Console](https://accounts.cloud.databricks.com/)
        """
        return pulumi.get(self, "account_id")

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

    @_builtins.property
    @pulumi.getter(name="awsKeyInfo")
    def aws_key_info(self) -> Optional[pulumi.Input['MwsCustomerManagedKeysAwsKeyInfoArgs']]:
        """
        This field is a block and is documented below. This conflicts with `gcp_key_info`
        """
        return pulumi.get(self, "aws_key_info")

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

    @_builtins.property
    @pulumi.getter(name="creationTime")
    def creation_time(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        (Integer) Time in epoch milliseconds when the customer key was created.
        """
        return pulumi.get(self, "creation_time")

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

    @_builtins.property
    @pulumi.getter(name="customerManagedKeyId")
    def customer_managed_key_id(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        (String) ID of the encryption key configuration object.
        """
        return pulumi.get(self, "customer_managed_key_id")

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

    @_builtins.property
    @pulumi.getter(name="gcpKeyInfo")
    def gcp_key_info(self) -> Optional[pulumi.Input['MwsCustomerManagedKeysGcpKeyInfoArgs']]:
        """
        This field is a block and is documented below. This conflicts with `aws_key_info`
        """
        return pulumi.get(self, "gcp_key_info")

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

    @_builtins.property
    @pulumi.getter(name="useCases")
    def use_cases(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]:
        """
        *(since v0.3.4)* List of use cases for which this key will be used. *If you've used the resource before, please add `use_cases = ["MANAGED_SERVICES"]` to keep the previous behaviour.* Possible values are:
        * `MANAGED_SERVICES` - for encryption of the workspace objects (notebooks, secrets) that are stored in the control plane
        * `STORAGE` - for encryption of the DBFS Storage & Cluster EBS Volumes
        """
        return pulumi.get(self, "use_cases")

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


@pulumi.type_token("databricks:index/mwsCustomerManagedKeys:MwsCustomerManagedKeys")
class MwsCustomerManagedKeys(pulumi.CustomResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 account_id: Optional[pulumi.Input[_builtins.str]] = None,
                 aws_key_info: Optional[pulumi.Input[Union['MwsCustomerManagedKeysAwsKeyInfoArgs', 'MwsCustomerManagedKeysAwsKeyInfoArgsDict']]] = None,
                 creation_time: Optional[pulumi.Input[_builtins.int]] = None,
                 customer_managed_key_id: Optional[pulumi.Input[_builtins.str]] = None,
                 gcp_key_info: Optional[pulumi.Input[Union['MwsCustomerManagedKeysGcpKeyInfoArgs', 'MwsCustomerManagedKeysGcpKeyInfoArgsDict']]] = None,
                 use_cases: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 __props__=None):
        """
        This resource to configure KMS keys for new workspaces within AWS or GCP. This is to support the following features:

        * [Customer-managed keys for managed services](https://docs.databricks.com/security/keys/customer-managed-keys-managed-services-aws.html): Encrypt the workspace's managed services data in the control plane, including notebooks, secrets, Databricks SQL queries, and Databricks SQL query history  with a CMK.
        * [Customer-managed keys for workspace storage](https://docs.databricks.com/security/keys/customer-managed-keys-storage-aws.html): Encrypt the workspace's root S3 bucket and clusters' EBS volumes with a CMK.

        > This resource can only be used with an account-level provider!

        Please follow this complete runnable example with new VPC and new workspace setup. Please pay special attention to the fact that there you have two different instances of a databricks provider - one for deploying workspaces (with `host="https://accounts.cloud.databricks.com/"`) and another for the workspace you've created with MwsWorkspaces resource. If you want both creation of workspaces & clusters within workspace within the same terraform module (essentially same directory), you should use the provider aliasing feature of Pulumi. We strongly recommend having one Pulumi module for creation of workspace + PAT token and the rest in different modules.

        ## Example Usage

        > If you've used the resource before, please add `use_cases = ["MANAGED_SERVICES"]` to keep the previous behaviour.

        ### Customer-managed key for managed services

        You must configure this during workspace creation

        ### For GCP

        ```python
        import pulumi
        import pulumi_databricks as databricks

        config = pulumi.Config()
        # Account Id that could be found in the top right corner of https://accounts.gcp.databricks.com/
        databricks_account_id = config.require_object("databricksAccountId")
        # Id of a google_kms_crypto_key
        cmek_resource_id = config.require_object("cmekResourceId")
        managed_services = databricks.MwsCustomerManagedKeys("managed_services",
            account_id=databricks_account_id,
            gcp_key_info={
                "kms_key_id": cmek_resource_id,
            },
            use_cases=["MANAGED_SERVICES"])
        ```

        ### Customer-managed key for workspace storage

        ### For GCP

        ```python
        import pulumi
        import pulumi_databricks as databricks

        config = pulumi.Config()
        # Account Id that could be found in the top right corner of https://accounts.gcp.databricks.com/
        databricks_account_id = config.require_object("databricksAccountId")
        # Id of a google_kms_crypto_key
        cmek_resource_id = config.require_object("cmekResourceId")
        storage = databricks.MwsCustomerManagedKeys("storage",
            account_id=databricks_account_id,
            gcp_key_info={
                "kms_key_id": cmek_resource_id,
            },
            use_cases=["STORAGE"])
        ```

        ## Related Resources

        The following resources are used in the same context:

        * Provisioning Databricks on AWS guide.
        * MwsCredentials to configure the cross-account role for creation of new workspaces within AWS.
        * MwsLogDelivery to configure delivery of [billable usage logs](https://docs.databricks.com/administration-guide/account-settings/billable-usage-delivery.html) and [audit logs](https://docs.databricks.com/administration-guide/account-settings/audit-logs.html).
        * MwsNetworks to [configure VPC](https://docs.databricks.com/administration-guide/cloud-configurations/aws/customer-managed-vpc.html) & subnets for new workspaces within AWS.
        * MwsStorageConfigurations to configure root bucket new workspaces within AWS.
        * MwsWorkspaces to set up [AWS and GCP workspaces](https://docs.databricks.com/getting-started/overview.html#e2-architecture-1).

        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[_builtins.str] account_id: Account Id that could be found in the top right corner of [Accounts Console](https://accounts.cloud.databricks.com/)
        :param pulumi.Input[Union['MwsCustomerManagedKeysAwsKeyInfoArgs', 'MwsCustomerManagedKeysAwsKeyInfoArgsDict']] aws_key_info: This field is a block and is documented below. This conflicts with `gcp_key_info`
        :param pulumi.Input[_builtins.int] creation_time: (Integer) Time in epoch milliseconds when the customer key was created.
        :param pulumi.Input[_builtins.str] customer_managed_key_id: (String) ID of the encryption key configuration object.
        :param pulumi.Input[Union['MwsCustomerManagedKeysGcpKeyInfoArgs', 'MwsCustomerManagedKeysGcpKeyInfoArgsDict']] gcp_key_info: This field is a block and is documented below. This conflicts with `aws_key_info`
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] use_cases: *(since v0.3.4)* List of use cases for which this key will be used. *If you've used the resource before, please add `use_cases = ["MANAGED_SERVICES"]` to keep the previous behaviour.* Possible values are:
               * `MANAGED_SERVICES` - for encryption of the workspace objects (notebooks, secrets) that are stored in the control plane
               * `STORAGE` - for encryption of the DBFS Storage & Cluster EBS Volumes
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: MwsCustomerManagedKeysArgs,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        This resource to configure KMS keys for new workspaces within AWS or GCP. This is to support the following features:

        * [Customer-managed keys for managed services](https://docs.databricks.com/security/keys/customer-managed-keys-managed-services-aws.html): Encrypt the workspace's managed services data in the control plane, including notebooks, secrets, Databricks SQL queries, and Databricks SQL query history  with a CMK.
        * [Customer-managed keys for workspace storage](https://docs.databricks.com/security/keys/customer-managed-keys-storage-aws.html): Encrypt the workspace's root S3 bucket and clusters' EBS volumes with a CMK.

        > This resource can only be used with an account-level provider!

        Please follow this complete runnable example with new VPC and new workspace setup. Please pay special attention to the fact that there you have two different instances of a databricks provider - one for deploying workspaces (with `host="https://accounts.cloud.databricks.com/"`) and another for the workspace you've created with MwsWorkspaces resource. If you want both creation of workspaces & clusters within workspace within the same terraform module (essentially same directory), you should use the provider aliasing feature of Pulumi. We strongly recommend having one Pulumi module for creation of workspace + PAT token and the rest in different modules.

        ## Example Usage

        > If you've used the resource before, please add `use_cases = ["MANAGED_SERVICES"]` to keep the previous behaviour.

        ### Customer-managed key for managed services

        You must configure this during workspace creation

        ### For GCP

        ```python
        import pulumi
        import pulumi_databricks as databricks

        config = pulumi.Config()
        # Account Id that could be found in the top right corner of https://accounts.gcp.databricks.com/
        databricks_account_id = config.require_object("databricksAccountId")
        # Id of a google_kms_crypto_key
        cmek_resource_id = config.require_object("cmekResourceId")
        managed_services = databricks.MwsCustomerManagedKeys("managed_services",
            account_id=databricks_account_id,
            gcp_key_info={
                "kms_key_id": cmek_resource_id,
            },
            use_cases=["MANAGED_SERVICES"])
        ```

        ### Customer-managed key for workspace storage

        ### For GCP

        ```python
        import pulumi
        import pulumi_databricks as databricks

        config = pulumi.Config()
        # Account Id that could be found in the top right corner of https://accounts.gcp.databricks.com/
        databricks_account_id = config.require_object("databricksAccountId")
        # Id of a google_kms_crypto_key
        cmek_resource_id = config.require_object("cmekResourceId")
        storage = databricks.MwsCustomerManagedKeys("storage",
            account_id=databricks_account_id,
            gcp_key_info={
                "kms_key_id": cmek_resource_id,
            },
            use_cases=["STORAGE"])
        ```

        ## Related Resources

        The following resources are used in the same context:

        * Provisioning Databricks on AWS guide.
        * MwsCredentials to configure the cross-account role for creation of new workspaces within AWS.
        * MwsLogDelivery to configure delivery of [billable usage logs](https://docs.databricks.com/administration-guide/account-settings/billable-usage-delivery.html) and [audit logs](https://docs.databricks.com/administration-guide/account-settings/audit-logs.html).
        * MwsNetworks to [configure VPC](https://docs.databricks.com/administration-guide/cloud-configurations/aws/customer-managed-vpc.html) & subnets for new workspaces within AWS.
        * MwsStorageConfigurations to configure root bucket new workspaces within AWS.
        * MwsWorkspaces to set up [AWS and GCP workspaces](https://docs.databricks.com/getting-started/overview.html#e2-architecture-1).

        :param str resource_name: The name of the resource.
        :param MwsCustomerManagedKeysArgs args: The arguments to use to populate this resource's properties.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        ...
    def __init__(__self__, resource_name: str, *args, **kwargs):
        resource_args, opts = _utilities.get_resource_args_opts(MwsCustomerManagedKeysArgs, pulumi.ResourceOptions, *args, **kwargs)
        if resource_args is not None:
            __self__._internal_init(resource_name, opts, **resource_args.__dict__)
        else:
            __self__._internal_init(resource_name, *args, **kwargs)

    def _internal_init(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 account_id: Optional[pulumi.Input[_builtins.str]] = None,
                 aws_key_info: Optional[pulumi.Input[Union['MwsCustomerManagedKeysAwsKeyInfoArgs', 'MwsCustomerManagedKeysAwsKeyInfoArgsDict']]] = None,
                 creation_time: Optional[pulumi.Input[_builtins.int]] = None,
                 customer_managed_key_id: Optional[pulumi.Input[_builtins.str]] = None,
                 gcp_key_info: Optional[pulumi.Input[Union['MwsCustomerManagedKeysGcpKeyInfoArgs', 'MwsCustomerManagedKeysGcpKeyInfoArgsDict']]] = None,
                 use_cases: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 __props__=None):
        opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts)
        if not isinstance(opts, pulumi.ResourceOptions):
            raise TypeError('Expected resource options to be a ResourceOptions instance')
        if opts.id is None:
            if __props__ is not None:
                raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource')
            __props__ = MwsCustomerManagedKeysArgs.__new__(MwsCustomerManagedKeysArgs)

            if account_id is None and not opts.urn:
                raise TypeError("Missing required property 'account_id'")
            __props__.__dict__["account_id"] = account_id
            __props__.__dict__["aws_key_info"] = aws_key_info
            __props__.__dict__["creation_time"] = creation_time
            __props__.__dict__["customer_managed_key_id"] = customer_managed_key_id
            __props__.__dict__["gcp_key_info"] = gcp_key_info
            if use_cases is None and not opts.urn:
                raise TypeError("Missing required property 'use_cases'")
            __props__.__dict__["use_cases"] = use_cases
        super(MwsCustomerManagedKeys, __self__).__init__(
            'databricks:index/mwsCustomerManagedKeys:MwsCustomerManagedKeys',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None,
            account_id: Optional[pulumi.Input[_builtins.str]] = None,
            aws_key_info: Optional[pulumi.Input[Union['MwsCustomerManagedKeysAwsKeyInfoArgs', 'MwsCustomerManagedKeysAwsKeyInfoArgsDict']]] = None,
            creation_time: Optional[pulumi.Input[_builtins.int]] = None,
            customer_managed_key_id: Optional[pulumi.Input[_builtins.str]] = None,
            gcp_key_info: Optional[pulumi.Input[Union['MwsCustomerManagedKeysGcpKeyInfoArgs', 'MwsCustomerManagedKeysGcpKeyInfoArgsDict']]] = None,
            use_cases: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None) -> 'MwsCustomerManagedKeys':
        """
        Get an existing MwsCustomerManagedKeys resource's state with the given name, id, and optional extra
        properties used to qualify the lookup.

        :param str resource_name: The unique name of the resulting resource.
        :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[_builtins.str] account_id: Account Id that could be found in the top right corner of [Accounts Console](https://accounts.cloud.databricks.com/)
        :param pulumi.Input[Union['MwsCustomerManagedKeysAwsKeyInfoArgs', 'MwsCustomerManagedKeysAwsKeyInfoArgsDict']] aws_key_info: This field is a block and is documented below. This conflicts with `gcp_key_info`
        :param pulumi.Input[_builtins.int] creation_time: (Integer) Time in epoch milliseconds when the customer key was created.
        :param pulumi.Input[_builtins.str] customer_managed_key_id: (String) ID of the encryption key configuration object.
        :param pulumi.Input[Union['MwsCustomerManagedKeysGcpKeyInfoArgs', 'MwsCustomerManagedKeysGcpKeyInfoArgsDict']] gcp_key_info: This field is a block and is documented below. This conflicts with `aws_key_info`
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] use_cases: *(since v0.3.4)* List of use cases for which this key will be used. *If you've used the resource before, please add `use_cases = ["MANAGED_SERVICES"]` to keep the previous behaviour.* Possible values are:
               * `MANAGED_SERVICES` - for encryption of the workspace objects (notebooks, secrets) that are stored in the control plane
               * `STORAGE` - for encryption of the DBFS Storage & Cluster EBS Volumes
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))

        __props__ = _MwsCustomerManagedKeysState.__new__(_MwsCustomerManagedKeysState)

        __props__.__dict__["account_id"] = account_id
        __props__.__dict__["aws_key_info"] = aws_key_info
        __props__.__dict__["creation_time"] = creation_time
        __props__.__dict__["customer_managed_key_id"] = customer_managed_key_id
        __props__.__dict__["gcp_key_info"] = gcp_key_info
        __props__.__dict__["use_cases"] = use_cases
        return MwsCustomerManagedKeys(resource_name, opts=opts, __props__=__props__)

    @_builtins.property
    @pulumi.getter(name="accountId")
    def account_id(self) -> pulumi.Output[_builtins.str]:
        """
        Account Id that could be found in the top right corner of [Accounts Console](https://accounts.cloud.databricks.com/)
        """
        return pulumi.get(self, "account_id")

    @_builtins.property
    @pulumi.getter(name="awsKeyInfo")
    def aws_key_info(self) -> pulumi.Output[Optional['outputs.MwsCustomerManagedKeysAwsKeyInfo']]:
        """
        This field is a block and is documented below. This conflicts with `gcp_key_info`
        """
        return pulumi.get(self, "aws_key_info")

    @_builtins.property
    @pulumi.getter(name="creationTime")
    def creation_time(self) -> pulumi.Output[_builtins.int]:
        """
        (Integer) Time in epoch milliseconds when the customer key was created.
        """
        return pulumi.get(self, "creation_time")

    @_builtins.property
    @pulumi.getter(name="customerManagedKeyId")
    def customer_managed_key_id(self) -> pulumi.Output[_builtins.str]:
        """
        (String) ID of the encryption key configuration object.
        """
        return pulumi.get(self, "customer_managed_key_id")

    @_builtins.property
    @pulumi.getter(name="gcpKeyInfo")
    def gcp_key_info(self) -> pulumi.Output[Optional['outputs.MwsCustomerManagedKeysGcpKeyInfo']]:
        """
        This field is a block and is documented below. This conflicts with `aws_key_info`
        """
        return pulumi.get(self, "gcp_key_info")

    @_builtins.property
    @pulumi.getter(name="useCases")
    def use_cases(self) -> pulumi.Output[Sequence[_builtins.str]]:
        """
        *(since v0.3.4)* List of use cases for which this key will be used. *If you've used the resource before, please add `use_cases = ["MANAGED_SERVICES"]` to keep the previous behaviour.* Possible values are:
        * `MANAGED_SERVICES` - for encryption of the workspace objects (notebooks, secrets) that are stored in the control plane
        * `STORAGE` - for encryption of the DBFS Storage & Cluster EBS Volumes
        """
        return pulumi.get(self, "use_cases")

