/**
 * Copyright (c) HashiCorp, Inc.
 * SPDX-License-Identifier: MPL-2.0
 */
import { Construct } from 'constructs';
import * as cdktf from 'cdktf';
export interface PrivilegedAccessManagerEntitlementConfig extends cdktf.TerraformMetaArguments {
    /**
    * The ID to use for this Entitlement. This will become the last part of the resource name.
    * This value should be 4-63 characters, and valid characters are "[a-z]", "[0-9]", and "-". The first character should be from [a-z].
    * This value should be unique among all other Entitlements under the specified 'parent'.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.36.1/docs/resources/privileged_access_manager_entitlement#entitlement_id PrivilegedAccessManagerEntitlement#entitlement_id}
    */
    readonly entitlementId: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.36.1/docs/resources/privileged_access_manager_entitlement#id PrivilegedAccessManagerEntitlement#id}
    *
    * Please be aware that the id field is automatically added to all resources in Terraform providers using a Terraform provider SDK version below 2.
    * If you experience problems setting this value it might not be settable. Please take a look at the provider documentation to ensure it should be settable.
    */
    readonly id?: string;
    /**
    * The region of the Entitlement resource.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.36.1/docs/resources/privileged_access_manager_entitlement#location PrivilegedAccessManagerEntitlement#location}
    */
    readonly location: string;
    /**
    * The maximum amount of time for which access would be granted for a request.
    * A requester can choose to ask for access for less than this duration but never more.
    * Format: calculate the time in seconds and concatenate it with 's' i.e. 2 hours = "7200s", 45 minutes = "2700s"
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.36.1/docs/resources/privileged_access_manager_entitlement#max_request_duration PrivilegedAccessManagerEntitlement#max_request_duration}
    */
    readonly maxRequestDuration: string;
    /**
    * Format: projects/{project-id|project-number} or organizations/{organization-number} or folders/{folder-number}
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.36.1/docs/resources/privileged_access_manager_entitlement#parent PrivilegedAccessManagerEntitlement#parent}
    */
    readonly parent: string;
    /**
    * additional_notification_targets block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.36.1/docs/resources/privileged_access_manager_entitlement#additional_notification_targets PrivilegedAccessManagerEntitlement#additional_notification_targets}
    */
    readonly additionalNotificationTargets?: PrivilegedAccessManagerEntitlementAdditionalNotificationTargets;
    /**
    * approval_workflow block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.36.1/docs/resources/privileged_access_manager_entitlement#approval_workflow PrivilegedAccessManagerEntitlement#approval_workflow}
    */
    readonly approvalWorkflow?: PrivilegedAccessManagerEntitlementApprovalWorkflow;
    /**
    * eligible_users block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.36.1/docs/resources/privileged_access_manager_entitlement#eligible_users PrivilegedAccessManagerEntitlement#eligible_users}
    */
    readonly eligibleUsers: PrivilegedAccessManagerEntitlementEligibleUsers[] | cdktf.IResolvable;
    /**
    * privileged_access block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.36.1/docs/resources/privileged_access_manager_entitlement#privileged_access PrivilegedAccessManagerEntitlement#privileged_access}
    */
    readonly privilegedAccess: PrivilegedAccessManagerEntitlementPrivilegedAccess;
    /**
    * requester_justification_config block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.36.1/docs/resources/privileged_access_manager_entitlement#requester_justification_config PrivilegedAccessManagerEntitlement#requester_justification_config}
    */
    readonly requesterJustificationConfig: PrivilegedAccessManagerEntitlementRequesterJustificationConfig;
    /**
    * timeouts block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.36.1/docs/resources/privileged_access_manager_entitlement#timeouts PrivilegedAccessManagerEntitlement#timeouts}
    */
    readonly timeouts?: PrivilegedAccessManagerEntitlementTimeouts;
}
export interface PrivilegedAccessManagerEntitlementAdditionalNotificationTargets {
    /**
    * Optional. Additional email addresses to be notified when a principal(requester) is granted access.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.36.1/docs/resources/privileged_access_manager_entitlement#admin_email_recipients PrivilegedAccessManagerEntitlement#admin_email_recipients}
    */
    readonly adminEmailRecipients?: string[];
    /**
    * Optional. Additional email address to be notified about an eligible entitlement.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.36.1/docs/resources/privileged_access_manager_entitlement#requester_email_recipients PrivilegedAccessManagerEntitlement#requester_email_recipients}
    */
    readonly requesterEmailRecipients?: string[];
}
export declare function privilegedAccessManagerEntitlementAdditionalNotificationTargetsToTerraform(struct?: PrivilegedAccessManagerEntitlementAdditionalNotificationTargetsOutputReference | PrivilegedAccessManagerEntitlementAdditionalNotificationTargets): any;
export declare function privilegedAccessManagerEntitlementAdditionalNotificationTargetsToHclTerraform(struct?: PrivilegedAccessManagerEntitlementAdditionalNotificationTargetsOutputReference | PrivilegedAccessManagerEntitlementAdditionalNotificationTargets): any;
export declare class PrivilegedAccessManagerEntitlementAdditionalNotificationTargetsOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string);
    get internalValue(): PrivilegedAccessManagerEntitlementAdditionalNotificationTargets | undefined;
    set internalValue(value: PrivilegedAccessManagerEntitlementAdditionalNotificationTargets | undefined);
    private _adminEmailRecipients?;
    get adminEmailRecipients(): string[];
    set adminEmailRecipients(value: string[]);
    resetAdminEmailRecipients(): void;
    get adminEmailRecipientsInput(): string[] | undefined;
    private _requesterEmailRecipients?;
    get requesterEmailRecipients(): string[];
    set requesterEmailRecipients(value: string[]);
    resetRequesterEmailRecipients(): void;
    get requesterEmailRecipientsInput(): string[] | undefined;
}
export interface PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovalsStepsApprovers {
    /**
    * Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at: https://cloud.google.com/iam/docs/principal-identifiers#v1
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.36.1/docs/resources/privileged_access_manager_entitlement#principals PrivilegedAccessManagerEntitlement#principals}
    */
    readonly principals: string[];
}
export declare function privilegedAccessManagerEntitlementApprovalWorkflowManualApprovalsStepsApproversToTerraform(struct?: PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovalsStepsApproversOutputReference | PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovalsStepsApprovers): any;
export declare function privilegedAccessManagerEntitlementApprovalWorkflowManualApprovalsStepsApproversToHclTerraform(struct?: PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovalsStepsApproversOutputReference | PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovalsStepsApprovers): any;
export declare class PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovalsStepsApproversOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string);
    get internalValue(): PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovalsStepsApprovers | undefined;
    set internalValue(value: PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovalsStepsApprovers | undefined);
    private _principals?;
    get principals(): string[];
    set principals(value: string[]);
    get principalsInput(): string[] | undefined;
}
export interface PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovalsSteps {
    /**
    * How many users from the above list need to approve.
    * If there are not enough distinct users in the list above then the workflow
    * will indefinitely block. Should always be greater than 0. Currently 1 is the only
    * supported value.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.36.1/docs/resources/privileged_access_manager_entitlement#approvals_needed PrivilegedAccessManagerEntitlement#approvals_needed}
    */
    readonly approvalsNeeded?: number;
    /**
    * Optional. Additional email addresses to be notified when a grant is pending approval.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.36.1/docs/resources/privileged_access_manager_entitlement#approver_email_recipients PrivilegedAccessManagerEntitlement#approver_email_recipients}
    */
    readonly approverEmailRecipients?: string[];
    /**
    * approvers block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.36.1/docs/resources/privileged_access_manager_entitlement#approvers PrivilegedAccessManagerEntitlement#approvers}
    */
    readonly approvers: PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovalsStepsApprovers;
}
export declare function privilegedAccessManagerEntitlementApprovalWorkflowManualApprovalsStepsToTerraform(struct?: PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovalsSteps | cdktf.IResolvable): any;
export declare function privilegedAccessManagerEntitlementApprovalWorkflowManualApprovalsStepsToHclTerraform(struct?: PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovalsSteps | cdktf.IResolvable): any;
export declare class PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovalsStepsOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    private resolvableValue?;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param complexObjectIndex the index of this item in the list
    * @param complexObjectIsFromSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string, complexObjectIndex: number, complexObjectIsFromSet: boolean);
    get internalValue(): PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovalsSteps | cdktf.IResolvable | undefined;
    set internalValue(value: PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovalsSteps | cdktf.IResolvable | undefined);
    private _approvalsNeeded?;
    get approvalsNeeded(): number;
    set approvalsNeeded(value: number);
    resetApprovalsNeeded(): void;
    get approvalsNeededInput(): number | undefined;
    private _approverEmailRecipients?;
    get approverEmailRecipients(): string[];
    set approverEmailRecipients(value: string[]);
    resetApproverEmailRecipients(): void;
    get approverEmailRecipientsInput(): string[] | undefined;
    private _approvers;
    get approvers(): PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovalsStepsApproversOutputReference;
    putApprovers(value: PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovalsStepsApprovers): void;
    get approversInput(): PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovalsStepsApprovers | undefined;
}
export declare class PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovalsStepsList extends cdktf.ComplexList {
    protected terraformResource: cdktf.IInterpolatingParent;
    protected terraformAttribute: string;
    protected wrapsSet: boolean;
    internalValue?: PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovalsSteps[] | cdktf.IResolvable;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param wrapsSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string, wrapsSet: boolean);
    /**
    * @param index the index of the item to return
    */
    get(index: number): PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovalsStepsOutputReference;
}
export interface PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovals {
    /**
    * Optional. Do the approvers need to provide a justification for their actions?
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.36.1/docs/resources/privileged_access_manager_entitlement#require_approver_justification PrivilegedAccessManagerEntitlement#require_approver_justification}
    */
    readonly requireApproverJustification?: boolean | cdktf.IResolvable;
    /**
    * steps block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.36.1/docs/resources/privileged_access_manager_entitlement#steps PrivilegedAccessManagerEntitlement#steps}
    */
    readonly steps: PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovalsSteps[] | cdktf.IResolvable;
}
export declare function privilegedAccessManagerEntitlementApprovalWorkflowManualApprovalsToTerraform(struct?: PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovalsOutputReference | PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovals): any;
export declare function privilegedAccessManagerEntitlementApprovalWorkflowManualApprovalsToHclTerraform(struct?: PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovalsOutputReference | PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovals): any;
export declare class PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovalsOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string);
    get internalValue(): PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovals | undefined;
    set internalValue(value: PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovals | undefined);
    private _requireApproverJustification?;
    get requireApproverJustification(): boolean | cdktf.IResolvable;
    set requireApproverJustification(value: boolean | cdktf.IResolvable);
    resetRequireApproverJustification(): void;
    get requireApproverJustificationInput(): boolean | cdktf.IResolvable | undefined;
    private _steps;
    get steps(): PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovalsStepsList;
    putSteps(value: PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovalsSteps[] | cdktf.IResolvable): void;
    get stepsInput(): cdktf.IResolvable | PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovalsSteps[] | undefined;
}
export interface PrivilegedAccessManagerEntitlementApprovalWorkflow {
    /**
    * manual_approvals block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.36.1/docs/resources/privileged_access_manager_entitlement#manual_approvals PrivilegedAccessManagerEntitlement#manual_approvals}
    */
    readonly manualApprovals: PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovals;
}
export declare function privilegedAccessManagerEntitlementApprovalWorkflowToTerraform(struct?: PrivilegedAccessManagerEntitlementApprovalWorkflowOutputReference | PrivilegedAccessManagerEntitlementApprovalWorkflow): any;
export declare function privilegedAccessManagerEntitlementApprovalWorkflowToHclTerraform(struct?: PrivilegedAccessManagerEntitlementApprovalWorkflowOutputReference | PrivilegedAccessManagerEntitlementApprovalWorkflow): any;
export declare class PrivilegedAccessManagerEntitlementApprovalWorkflowOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string);
    get internalValue(): PrivilegedAccessManagerEntitlementApprovalWorkflow | undefined;
    set internalValue(value: PrivilegedAccessManagerEntitlementApprovalWorkflow | undefined);
    private _manualApprovals;
    get manualApprovals(): PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovalsOutputReference;
    putManualApprovals(value: PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovals): void;
    get manualApprovalsInput(): PrivilegedAccessManagerEntitlementApprovalWorkflowManualApprovals | undefined;
}
export interface PrivilegedAccessManagerEntitlementEligibleUsers {
    /**
    * Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at "https://cloud.google.com/iam/docs/principal-identifiers#v1"
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.36.1/docs/resources/privileged_access_manager_entitlement#principals PrivilegedAccessManagerEntitlement#principals}
    */
    readonly principals: string[];
}
export declare function privilegedAccessManagerEntitlementEligibleUsersToTerraform(struct?: PrivilegedAccessManagerEntitlementEligibleUsers | cdktf.IResolvable): any;
export declare function privilegedAccessManagerEntitlementEligibleUsersToHclTerraform(struct?: PrivilegedAccessManagerEntitlementEligibleUsers | cdktf.IResolvable): any;
export declare class PrivilegedAccessManagerEntitlementEligibleUsersOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    private resolvableValue?;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param complexObjectIndex the index of this item in the list
    * @param complexObjectIsFromSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string, complexObjectIndex: number, complexObjectIsFromSet: boolean);
    get internalValue(): PrivilegedAccessManagerEntitlementEligibleUsers | cdktf.IResolvable | undefined;
    set internalValue(value: PrivilegedAccessManagerEntitlementEligibleUsers | cdktf.IResolvable | undefined);
    private _principals?;
    get principals(): string[];
    set principals(value: string[]);
    get principalsInput(): string[] | undefined;
}
export declare class PrivilegedAccessManagerEntitlementEligibleUsersList extends cdktf.ComplexList {
    protected terraformResource: cdktf.IInterpolatingParent;
    protected terraformAttribute: string;
    protected wrapsSet: boolean;
    internalValue?: PrivilegedAccessManagerEntitlementEligibleUsers[] | cdktf.IResolvable;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param wrapsSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string, wrapsSet: boolean);
    /**
    * @param index the index of the item to return
    */
    get(index: number): PrivilegedAccessManagerEntitlementEligibleUsersOutputReference;
}
export interface PrivilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccessRoleBindings {
    /**
    * The expression field of the IAM condition to be associated with the role. If specified, a user with an active grant for this entitlement would be able to access the resource only if this condition evaluates to true for their request.
    * https://cloud.google.com/iam/docs/conditions-overview#attributes.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.36.1/docs/resources/privileged_access_manager_entitlement#condition_expression PrivilegedAccessManagerEntitlement#condition_expression}
    */
    readonly conditionExpression?: string;
    /**
    * IAM role to be granted. https://cloud.google.com/iam/docs/roles-overview.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.36.1/docs/resources/privileged_access_manager_entitlement#role PrivilegedAccessManagerEntitlement#role}
    */
    readonly role: string;
}
export declare function privilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccessRoleBindingsToTerraform(struct?: PrivilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccessRoleBindings | cdktf.IResolvable): any;
export declare function privilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccessRoleBindingsToHclTerraform(struct?: PrivilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccessRoleBindings | cdktf.IResolvable): any;
export declare class PrivilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccessRoleBindingsOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    private resolvableValue?;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param complexObjectIndex the index of this item in the list
    * @param complexObjectIsFromSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string, complexObjectIndex: number, complexObjectIsFromSet: boolean);
    get internalValue(): PrivilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccessRoleBindings | cdktf.IResolvable | undefined;
    set internalValue(value: PrivilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccessRoleBindings | cdktf.IResolvable | undefined);
    private _conditionExpression?;
    get conditionExpression(): string;
    set conditionExpression(value: string);
    resetConditionExpression(): void;
    get conditionExpressionInput(): string | undefined;
    private _role?;
    get role(): string;
    set role(value: string);
    get roleInput(): string | undefined;
}
export declare class PrivilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccessRoleBindingsList extends cdktf.ComplexList {
    protected terraformResource: cdktf.IInterpolatingParent;
    protected terraformAttribute: string;
    protected wrapsSet: boolean;
    internalValue?: PrivilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccessRoleBindings[] | cdktf.IResolvable;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param wrapsSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string, wrapsSet: boolean);
    /**
    * @param index the index of the item to return
    */
    get(index: number): PrivilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccessRoleBindingsOutputReference;
}
export interface PrivilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccess {
    /**
    * Name of the resource.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.36.1/docs/resources/privileged_access_manager_entitlement#resource PrivilegedAccessManagerEntitlement#resource}
    */
    readonly resource: string;
    /**
    * The type of this resource.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.36.1/docs/resources/privileged_access_manager_entitlement#resource_type PrivilegedAccessManagerEntitlement#resource_type}
    */
    readonly resourceType: string;
    /**
    * role_bindings block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.36.1/docs/resources/privileged_access_manager_entitlement#role_bindings PrivilegedAccessManagerEntitlement#role_bindings}
    */
    readonly roleBindings: PrivilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccessRoleBindings[] | cdktf.IResolvable;
}
export declare function privilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccessToTerraform(struct?: PrivilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccessOutputReference | PrivilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccess): any;
export declare function privilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccessToHclTerraform(struct?: PrivilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccessOutputReference | PrivilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccess): any;
export declare class PrivilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccessOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string);
    get internalValue(): PrivilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccess | undefined;
    set internalValue(value: PrivilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccess | undefined);
    private _resource?;
    get resource(): string;
    set resource(value: string);
    get resourceInput(): string | undefined;
    private _resourceType?;
    get resourceType(): string;
    set resourceType(value: string);
    get resourceTypeInput(): string | undefined;
    private _roleBindings;
    get roleBindings(): PrivilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccessRoleBindingsList;
    putRoleBindings(value: PrivilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccessRoleBindings[] | cdktf.IResolvable): void;
    get roleBindingsInput(): cdktf.IResolvable | PrivilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccessRoleBindings[] | undefined;
}
export interface PrivilegedAccessManagerEntitlementPrivilegedAccess {
    /**
    * gcp_iam_access block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.36.1/docs/resources/privileged_access_manager_entitlement#gcp_iam_access PrivilegedAccessManagerEntitlement#gcp_iam_access}
    */
    readonly gcpIamAccess: PrivilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccess;
}
export declare function privilegedAccessManagerEntitlementPrivilegedAccessToTerraform(struct?: PrivilegedAccessManagerEntitlementPrivilegedAccessOutputReference | PrivilegedAccessManagerEntitlementPrivilegedAccess): any;
export declare function privilegedAccessManagerEntitlementPrivilegedAccessToHclTerraform(struct?: PrivilegedAccessManagerEntitlementPrivilegedAccessOutputReference | PrivilegedAccessManagerEntitlementPrivilegedAccess): any;
export declare class PrivilegedAccessManagerEntitlementPrivilegedAccessOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string);
    get internalValue(): PrivilegedAccessManagerEntitlementPrivilegedAccess | undefined;
    set internalValue(value: PrivilegedAccessManagerEntitlementPrivilegedAccess | undefined);
    private _gcpIamAccess;
    get gcpIamAccess(): PrivilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccessOutputReference;
    putGcpIamAccess(value: PrivilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccess): void;
    get gcpIamAccessInput(): PrivilegedAccessManagerEntitlementPrivilegedAccessGcpIamAccess | undefined;
}
export interface PrivilegedAccessManagerEntitlementRequesterJustificationConfigNotMandatory {
}
export declare function privilegedAccessManagerEntitlementRequesterJustificationConfigNotMandatoryToTerraform(struct?: PrivilegedAccessManagerEntitlementRequesterJustificationConfigNotMandatoryOutputReference | PrivilegedAccessManagerEntitlementRequesterJustificationConfigNotMandatory): any;
export declare function privilegedAccessManagerEntitlementRequesterJustificationConfigNotMandatoryToHclTerraform(struct?: PrivilegedAccessManagerEntitlementRequesterJustificationConfigNotMandatoryOutputReference | PrivilegedAccessManagerEntitlementRequesterJustificationConfigNotMandatory): any;
export declare class PrivilegedAccessManagerEntitlementRequesterJustificationConfigNotMandatoryOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string);
    get internalValue(): PrivilegedAccessManagerEntitlementRequesterJustificationConfigNotMandatory | undefined;
    set internalValue(value: PrivilegedAccessManagerEntitlementRequesterJustificationConfigNotMandatory | undefined);
}
export interface PrivilegedAccessManagerEntitlementRequesterJustificationConfigUnstructured {
}
export declare function privilegedAccessManagerEntitlementRequesterJustificationConfigUnstructuredToTerraform(struct?: PrivilegedAccessManagerEntitlementRequesterJustificationConfigUnstructuredOutputReference | PrivilegedAccessManagerEntitlementRequesterJustificationConfigUnstructured): any;
export declare function privilegedAccessManagerEntitlementRequesterJustificationConfigUnstructuredToHclTerraform(struct?: PrivilegedAccessManagerEntitlementRequesterJustificationConfigUnstructuredOutputReference | PrivilegedAccessManagerEntitlementRequesterJustificationConfigUnstructured): any;
export declare class PrivilegedAccessManagerEntitlementRequesterJustificationConfigUnstructuredOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string);
    get internalValue(): PrivilegedAccessManagerEntitlementRequesterJustificationConfigUnstructured | undefined;
    set internalValue(value: PrivilegedAccessManagerEntitlementRequesterJustificationConfigUnstructured | undefined);
}
export interface PrivilegedAccessManagerEntitlementRequesterJustificationConfig {
    /**
    * not_mandatory block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.36.1/docs/resources/privileged_access_manager_entitlement#not_mandatory PrivilegedAccessManagerEntitlement#not_mandatory}
    */
    readonly notMandatory?: PrivilegedAccessManagerEntitlementRequesterJustificationConfigNotMandatory;
    /**
    * unstructured block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.36.1/docs/resources/privileged_access_manager_entitlement#unstructured PrivilegedAccessManagerEntitlement#unstructured}
    */
    readonly unstructured?: PrivilegedAccessManagerEntitlementRequesterJustificationConfigUnstructured;
}
export declare function privilegedAccessManagerEntitlementRequesterJustificationConfigToTerraform(struct?: PrivilegedAccessManagerEntitlementRequesterJustificationConfigOutputReference | PrivilegedAccessManagerEntitlementRequesterJustificationConfig): any;
export declare function privilegedAccessManagerEntitlementRequesterJustificationConfigToHclTerraform(struct?: PrivilegedAccessManagerEntitlementRequesterJustificationConfigOutputReference | PrivilegedAccessManagerEntitlementRequesterJustificationConfig): any;
export declare class PrivilegedAccessManagerEntitlementRequesterJustificationConfigOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string);
    get internalValue(): PrivilegedAccessManagerEntitlementRequesterJustificationConfig | undefined;
    set internalValue(value: PrivilegedAccessManagerEntitlementRequesterJustificationConfig | undefined);
    private _notMandatory;
    get notMandatory(): PrivilegedAccessManagerEntitlementRequesterJustificationConfigNotMandatoryOutputReference;
    putNotMandatory(value: PrivilegedAccessManagerEntitlementRequesterJustificationConfigNotMandatory): void;
    resetNotMandatory(): void;
    get notMandatoryInput(): PrivilegedAccessManagerEntitlementRequesterJustificationConfigNotMandatory | undefined;
    private _unstructured;
    get unstructured(): PrivilegedAccessManagerEntitlementRequesterJustificationConfigUnstructuredOutputReference;
    putUnstructured(value: PrivilegedAccessManagerEntitlementRequesterJustificationConfigUnstructured): void;
    resetUnstructured(): void;
    get unstructuredInput(): PrivilegedAccessManagerEntitlementRequesterJustificationConfigUnstructured | undefined;
}
export interface PrivilegedAccessManagerEntitlementTimeouts {
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.36.1/docs/resources/privileged_access_manager_entitlement#create PrivilegedAccessManagerEntitlement#create}
    */
    readonly create?: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.36.1/docs/resources/privileged_access_manager_entitlement#delete PrivilegedAccessManagerEntitlement#delete}
    */
    readonly delete?: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.36.1/docs/resources/privileged_access_manager_entitlement#update PrivilegedAccessManagerEntitlement#update}
    */
    readonly update?: string;
}
export declare function privilegedAccessManagerEntitlementTimeoutsToTerraform(struct?: PrivilegedAccessManagerEntitlementTimeouts | cdktf.IResolvable): any;
export declare function privilegedAccessManagerEntitlementTimeoutsToHclTerraform(struct?: PrivilegedAccessManagerEntitlementTimeouts | cdktf.IResolvable): any;
export declare class PrivilegedAccessManagerEntitlementTimeoutsOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    private resolvableValue?;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string);
    get internalValue(): PrivilegedAccessManagerEntitlementTimeouts | cdktf.IResolvable | undefined;
    set internalValue(value: PrivilegedAccessManagerEntitlementTimeouts | cdktf.IResolvable | undefined);
    private _create?;
    get create(): string;
    set create(value: string);
    resetCreate(): void;
    get createInput(): string | undefined;
    private _delete?;
    get delete(): string;
    set delete(value: string);
    resetDelete(): void;
    get deleteInput(): string | undefined;
    private _update?;
    get update(): string;
    set update(value: string);
    resetUpdate(): void;
    get updateInput(): string | undefined;
}
/**
* Represents a {@link https://registry.terraform.io/providers/hashicorp/google/6.36.1/docs/resources/privileged_access_manager_entitlement google_privileged_access_manager_entitlement}
*/
export declare class PrivilegedAccessManagerEntitlement extends cdktf.TerraformResource {
    static readonly tfResourceType = "google_privileged_access_manager_entitlement";
    /**
    * Generates CDKTF code for importing a PrivilegedAccessManagerEntitlement resource upon running "cdktf plan <stack-name>"
    * @param scope The scope in which to define this construct
    * @param importToId The construct id used in the generated config for the PrivilegedAccessManagerEntitlement to import
    * @param importFromId The id of the existing PrivilegedAccessManagerEntitlement that should be imported. Refer to the {@link https://registry.terraform.io/providers/hashicorp/google/6.36.1/docs/resources/privileged_access_manager_entitlement#import import section} in the documentation of this resource for the id to use
    * @param provider? Optional instance of the provider where the PrivilegedAccessManagerEntitlement to import is found
    */
    static generateConfigForImport(scope: Construct, importToId: string, importFromId: string, provider?: cdktf.TerraformProvider): cdktf.ImportableResource;
    /**
    * Create a new {@link https://registry.terraform.io/providers/hashicorp/google/6.36.1/docs/resources/privileged_access_manager_entitlement google_privileged_access_manager_entitlement} Resource
    *
    * @param scope The scope in which to define this construct
    * @param id The scoped construct ID. Must be unique amongst siblings in the same scope
    * @param options PrivilegedAccessManagerEntitlementConfig
    */
    constructor(scope: Construct, id: string, config: PrivilegedAccessManagerEntitlementConfig);
    get createTime(): string;
    private _entitlementId?;
    get entitlementId(): string;
    set entitlementId(value: string);
    get entitlementIdInput(): string | undefined;
    get etag(): string;
    private _id?;
    get id(): string;
    set id(value: string);
    resetId(): void;
    get idInput(): string | undefined;
    private _location?;
    get location(): string;
    set location(value: string);
    get locationInput(): string | undefined;
    private _maxRequestDuration?;
    get maxRequestDuration(): string;
    set maxRequestDuration(value: string);
    get maxRequestDurationInput(): string | undefined;
    get name(): string;
    private _parent?;
    get parent(): string;
    set parent(value: string);
    get parentInput(): string | undefined;
    get state(): string;
    get updateTime(): string;
    private _additionalNotificationTargets;
    get additionalNotificationTargets(): PrivilegedAccessManagerEntitlementAdditionalNotificationTargetsOutputReference;
    putAdditionalNotificationTargets(value: PrivilegedAccessManagerEntitlementAdditionalNotificationTargets): void;
    resetAdditionalNotificationTargets(): void;
    get additionalNotificationTargetsInput(): PrivilegedAccessManagerEntitlementAdditionalNotificationTargets | undefined;
    private _approvalWorkflow;
    get approvalWorkflow(): PrivilegedAccessManagerEntitlementApprovalWorkflowOutputReference;
    putApprovalWorkflow(value: PrivilegedAccessManagerEntitlementApprovalWorkflow): void;
    resetApprovalWorkflow(): void;
    get approvalWorkflowInput(): PrivilegedAccessManagerEntitlementApprovalWorkflow | undefined;
    private _eligibleUsers;
    get eligibleUsers(): PrivilegedAccessManagerEntitlementEligibleUsersList;
    putEligibleUsers(value: PrivilegedAccessManagerEntitlementEligibleUsers[] | cdktf.IResolvable): void;
    get eligibleUsersInput(): cdktf.IResolvable | PrivilegedAccessManagerEntitlementEligibleUsers[] | undefined;
    private _privilegedAccess;
    get privilegedAccess(): PrivilegedAccessManagerEntitlementPrivilegedAccessOutputReference;
    putPrivilegedAccess(value: PrivilegedAccessManagerEntitlementPrivilegedAccess): void;
    get privilegedAccessInput(): PrivilegedAccessManagerEntitlementPrivilegedAccess | undefined;
    private _requesterJustificationConfig;
    get requesterJustificationConfig(): PrivilegedAccessManagerEntitlementRequesterJustificationConfigOutputReference;
    putRequesterJustificationConfig(value: PrivilegedAccessManagerEntitlementRequesterJustificationConfig): void;
    get requesterJustificationConfigInput(): PrivilegedAccessManagerEntitlementRequesterJustificationConfig | undefined;
    private _timeouts;
    get timeouts(): PrivilegedAccessManagerEntitlementTimeoutsOutputReference;
    putTimeouts(value: PrivilegedAccessManagerEntitlementTimeouts): void;
    resetTimeouts(): void;
    get timeoutsInput(): cdktf.IResolvable | PrivilegedAccessManagerEntitlementTimeouts | undefined;
    protected synthesizeAttributes(): {
        [name: string]: any;
    };
    protected synthesizeHclAttributes(): {
        [name: string]: any;
    };
}
