Class Directory


  • public class Directory
    extends com.pulumi.resources.CustomResource
    Provides a WorkSpaces directory in AWS WorkSpaces Service. > **NOTE:** AWS WorkSpaces service requires [`workspaces_DefaultRole`](https://docs.aws.amazon.com/workspaces/latest/adminguide/workspaces-access-control.html#create-default-role) IAM role to operate normally. ## Example Usage
     
     package generated_program;
     
     import com.pulumi.Context;
     import com.pulumi.Pulumi;
     import com.pulumi.core.Output;
     import com.pulumi.aws.ec2.Vpc;
     import com.pulumi.aws.ec2.VpcArgs;
     import com.pulumi.aws.ec2.Subnet;
     import com.pulumi.aws.ec2.SubnetArgs;
     import com.pulumi.aws.directoryservice.inputs.DirectoryVpcSettingsArgs;
     import com.pulumi.aws.iam.IamFunctions;
     import com.pulumi.aws.iam.inputs.GetPolicyDocumentArgs;
     import com.pulumi.aws.iam.inputs.GetPolicyDocumentStatementArgs;
     import com.pulumi.aws.iam.inputs.GetPolicyDocumentStatementPrincipalArgs;
     import com.pulumi.aws.iam.Role;
     import com.pulumi.aws.iam.RoleArgs;
     import com.pulumi.aws.iam.RolePolicyAttachment;
     import com.pulumi.aws.iam.RolePolicyAttachmentArgs;
     import com.pulumi.aws.workspaces.inputs.DirectoryCertificateBasedAuthPropertiesArgs;
     import com.pulumi.aws.workspaces.inputs.DirectorySamlPropertiesArgs;
     import com.pulumi.aws.workspaces.inputs.DirectorySelfServicePermissionsArgs;
     import com.pulumi.aws.workspaces.inputs.DirectoryWorkspaceAccessPropertiesArgs;
     import com.pulumi.aws.workspaces.inputs.DirectoryWorkspaceCreationPropertiesArgs;
     import com.pulumi.resources.CustomResourceOptions;
     import java.util.ArrayList;
     import java.util.Arrays;
     import java.util.Map;
     import java.io.File;
     import java.nio.file.Files;
     import java.nio.file.Paths;
     
     public class App {
         public static void main(String[] args) {
             Pulumi.run(App::stack);
         }
     
         public static void stack(Context ctx) {
             var exampleVpc = new Vpc("exampleVpc", VpcArgs.builder()
                 .cidrBlock("10.0.0.0/16")
                 .build());
     
             var exampleA = new Subnet("exampleA", SubnetArgs.builder()
                 .vpcId(exampleVpc.id())
                 .availabilityZone("us-east-1a")
                 .cidrBlock("10.0.0.0/24")
                 .build());
     
             var exampleB = new Subnet("exampleB", SubnetArgs.builder()
                 .vpcId(exampleVpc.id())
                 .availabilityZone("us-east-1b")
                 .cidrBlock("10.0.1.0/24")
                 .build());
     
             var exampleDirectory = new com.pulumi.aws.directoryservice.Directory("exampleDirectory", com.pulumi.aws.directoryservice.DirectoryArgs.builder()
                 .vpcSettings(DirectoryVpcSettingsArgs.builder()
                     .vpcId(exampleVpc.id())
                     .subnetIds(                
                         exampleA.id(),
                         exampleB.id())
                     .build())
                 .name("corp.example.com")
                 .password("#S1ncerely")
                 .size("Small")
                 .build());
     
             final var workspaces = IamFunctions.getPolicyDocument(GetPolicyDocumentArgs.builder()
                 .statements(GetPolicyDocumentStatementArgs.builder()
                     .principals(GetPolicyDocumentStatementPrincipalArgs.builder()
                         .type("Service")
                         .identifiers("workspaces.amazonaws.com")
                         .build())
                     .actions("sts:AssumeRole")
                     .build())
                 .build());
     
             var workspacesDefault = new Role("workspacesDefault", RoleArgs.builder()
                 .name("workspaces_DefaultRole")
                 .assumeRolePolicy(workspaces.json())
                 .build());
     
             var workspacesDefaultServiceAccess = new RolePolicyAttachment("workspacesDefaultServiceAccess", RolePolicyAttachmentArgs.builder()
                 .role(workspacesDefault.name())
                 .policyArn("arn:aws:iam::aws:policy/AmazonWorkSpacesServiceAccess")
                 .build());
     
             var workspacesDefaultSelfServiceAccess = new RolePolicyAttachment("workspacesDefaultSelfServiceAccess", RolePolicyAttachmentArgs.builder()
                 .role(workspacesDefault.name())
                 .policyArn("arn:aws:iam::aws:policy/AmazonWorkSpacesSelfServiceAccess")
                 .build());
     
             var exampleC = new Subnet("exampleC", SubnetArgs.builder()
                 .vpcId(exampleVpc.id())
                 .availabilityZone("us-east-1c")
                 .cidrBlock("10.0.2.0/24")
                 .build());
     
             var exampleD = new Subnet("exampleD", SubnetArgs.builder()
                 .vpcId(exampleVpc.id())
                 .availabilityZone("us-east-1d")
                 .cidrBlock("10.0.3.0/24")
                 .build());
     
             var example = new com.pulumi.aws.workspaces.Directory("example", com.pulumi.aws.workspaces.DirectoryArgs.builder()
                 .certificateBasedAuthProperties(DirectoryCertificateBasedAuthPropertiesArgs.builder()
                     .certificateAuthorityArn("arn:aws:acm-pca:us-east-1:123456789012:certificate-authority/12345678-1234-1234-1234-123456789012")
                     .status("ENABLED")
                     .build())
                 .samlProperties(DirectorySamlPropertiesArgs.builder()
                     .userAccessUrl("https://sso.example.com/")
                     .status("ENABLED")
                     .build())
                 .selfServicePermissions(DirectorySelfServicePermissionsArgs.builder()
                     .changeComputeType(true)
                     .increaseVolumeSize(true)
                     .rebuildWorkspace(true)
                     .restartWorkspace(true)
                     .switchRunningMode(true)
                     .build())
                 .workspaceAccessProperties(DirectoryWorkspaceAccessPropertiesArgs.builder()
                     .deviceTypeAndroid("ALLOW")
                     .deviceTypeChromeos("ALLOW")
                     .deviceTypeIos("ALLOW")
                     .deviceTypeLinux("DENY")
                     .deviceTypeOsx("ALLOW")
                     .deviceTypeWeb("DENY")
                     .deviceTypeWindows("DENY")
                     .deviceTypeZeroclient("DENY")
                     .build())
                 .workspaceCreationProperties(DirectoryWorkspaceCreationPropertiesArgs.builder()
                     .customSecurityGroupId(exampleAwsSecurityGroup.id())
                     .defaultOu("OU=AWS,DC=Workgroup,DC=Example,DC=com")
                     .enableInternetAccess(true)
                     .enableMaintenanceMode(true)
                     .userEnabledAsLocalAdministrator(true)
                     .build())
                 .directoryId(exampleDirectory.id())
                 .subnetIds(            
                     exampleC.id(),
                     exampleD.id())
                 .tags(Map.of("Example", "true"))
                 .build(), CustomResourceOptions.builder()
                     .dependsOn(                
                         workspacesDefaultServiceAccess,
                         workspacesDefaultSelfServiceAccess)
                     .build());
     
         }
     }
     
     
    ### WorkSpaces Pools
     
     package generated_program;
     
     import com.pulumi.Context;
     import com.pulumi.Pulumi;
     import com.pulumi.core.Output;
     import com.pulumi.aws.workspaces.Directory;
     import com.pulumi.aws.workspaces.DirectoryArgs;
     import com.pulumi.aws.workspaces.inputs.DirectoryActiveDirectoryConfigArgs;
     import com.pulumi.aws.workspaces.inputs.DirectoryWorkspaceAccessPropertiesArgs;
     import com.pulumi.aws.workspaces.inputs.DirectoryWorkspaceCreationPropertiesArgs;
     import com.pulumi.aws.workspaces.inputs.DirectorySamlPropertiesArgs;
     import java.util.ArrayList;
     import java.util.Arrays;
     import java.util.Map;
     import java.io.File;
     import java.nio.file.Files;
     import java.nio.file.Paths;
     
     public class App {
         public static void main(String[] args) {
             Pulumi.run(App::stack);
         }
     
         public static void stack(Context ctx) {
             var example = new Directory("example", DirectoryArgs.builder()
                 .activeDirectoryConfig(DirectoryActiveDirectoryConfigArgs.builder()
                     .domainName("example.internal")
                     .serviceAccountSecretArn(exampleAwsSecretsmanagerSecret.arn())
                     .build())
                 .workspaceAccessProperties(DirectoryWorkspaceAccessPropertiesArgs.builder()
                     .deviceTypeAndroid("ALLOW")
                     .deviceTypeChromeos("ALLOW")
                     .deviceTypeIos("ALLOW")
                     .deviceTypeLinux("DENY")
                     .deviceTypeOsx("ALLOW")
                     .deviceTypeWeb("DENY")
                     .deviceTypeWindows("DENY")
                     .deviceTypeZeroclient("DENY")
                     .build())
                 .workspaceCreationProperties(DirectoryWorkspaceCreationPropertiesArgs.builder()
                     .customSecurityGroupId(exampleAwsSecurityGroup.id())
                     .defaultOu("OU=AWS,DC=Workgroup,DC=Example,DC=com")
                     .enableInternetAccess(true)
                     .build())
                 .samlProperties(DirectorySamlPropertiesArgs.builder()
                     .relayStateParameterName("RelayState")
                     .userAccessUrl("https://sso.example.com/")
                     .status("ENABLED")
                     .build())
                 .subnetIds(            
                     exampleC.id(),
                     exampleD.id())
                 .workspaceType("POOLS")
                 .workspaceDirectoryName("Pool directory")
                 .workspaceDirectoryDescription("WorkSpaces Pools directory")
                 .userIdentityType("CUSTOMER_MANAGED")
                 .build());
     
         }
     }
     
     
    ### IP Groups
     
     package generated_program;
     
     import com.pulumi.Context;
     import com.pulumi.Pulumi;
     import com.pulumi.core.Output;
     import com.pulumi.aws.workspaces.IpGroup;
     import com.pulumi.aws.workspaces.IpGroupArgs;
     import com.pulumi.aws.workspaces.Directory;
     import com.pulumi.aws.workspaces.DirectoryArgs;
     import java.util.ArrayList;
     import java.util.Arrays;
     import java.util.Map;
     import java.io.File;
     import java.nio.file.Files;
     import java.nio.file.Paths;
     
     public class App {
         public static void main(String[] args) {
             Pulumi.run(App::stack);
         }
     
         public static void stack(Context ctx) {
             var exampleIpGroup = new IpGroup("exampleIpGroup", IpGroupArgs.builder()
                 .name("example")
                 .build());
     
             var example = new Directory("example", DirectoryArgs.builder()
                 .directoryId(exampleAwsDirectoryServiceDirectory.id())
                 .ipGroupIds(exampleIpGroup.id())
                 .build());
     
         }
     }
     
     
    ### VPC Endpoint Streaming
     
     package generated_program;
     
     import com.pulumi.Context;
     import com.pulumi.Pulumi;
     import com.pulumi.core.Output;
     import com.pulumi.aws.ec2.SecurityGroup;
     import com.pulumi.aws.ec2.SecurityGroupArgs;
     import com.pulumi.aws.AwsFunctions;
     import com.pulumi.aws.inputs.GetRegionArgs;
     import com.pulumi.aws.ec2.VpcEndpoint;
     import com.pulumi.aws.ec2.VpcEndpointArgs;
     import com.pulumi.aws.workspaces.Directory;
     import com.pulumi.aws.workspaces.DirectoryArgs;
     import com.pulumi.aws.workspaces.inputs.DirectoryWorkspaceAccessPropertiesArgs;
     import com.pulumi.aws.workspaces.inputs.DirectoryWorkspaceAccessPropertiesAccessEndpointConfigArgs;
     import com.pulumi.aws.workspaces.inputs.DirectoryWorkspaceAccessPropertiesAccessEndpointConfigAccessEndpointArgs;
     import com.pulumi.aws.vpc.SecurityGroupIngressRule;
     import com.pulumi.aws.vpc.SecurityGroupIngressRuleArgs;
     import java.util.ArrayList;
     import java.util.Arrays;
     import java.util.Map;
     import java.io.File;
     import java.nio.file.Files;
     import java.nio.file.Paths;
     
     public class App {
         public static void main(String[] args) {
             Pulumi.run(App::stack);
         }
     
         public static void stack(Context ctx) {
             var workspacesStreaming = new SecurityGroup("workspacesStreaming", SecurityGroupArgs.builder()
                 .name("workspaces-streaming-endpoint")
                 .vpcId(exampleAwsVpc.id())
                 .build());
     
             final var current = AwsFunctions.getRegion(GetRegionArgs.builder()
                 .build());
     
             var workspaces = new VpcEndpoint("workspaces", VpcEndpointArgs.builder()
                 .vpcId(exampleAwsVpc.id())
                 .serviceName(String.format("com.amazonaws.%s.highlander", current.region()))
                 .vpcEndpointType("Interface")
                 .subnetIds(            
                     exampleA.id(),
                     exampleB.id())
                 .securityGroupIds(workspacesStreaming.id())
                 .privateDnsEnabled(true)
                 .build());
     
             var example = new Directory("example", DirectoryArgs.builder()
                 .workspaceAccessProperties(DirectoryWorkspaceAccessPropertiesArgs.builder()
                     .accessEndpointConfig(DirectoryWorkspaceAccessPropertiesAccessEndpointConfigArgs.builder()
                         .accessEndpoints(DirectoryWorkspaceAccessPropertiesAccessEndpointConfigAccessEndpointArgs.builder()
                             .accessEndpointType("STREAMING_WSP")
                             .vpcEndpointId(workspaces.id())
                             .build())
                         .internetFallbackProtocols("PCOIP")
                         .build())
                     .deviceTypeWindows("ALLOW")
                     .build())
                 .directoryId(exampleAwsDirectoryServiceDirectory.id())
                 .build());
     
             var workspacesStreamingTcp443 = new SecurityGroupIngressRule("workspacesStreamingTcp443", SecurityGroupIngressRuleArgs.builder()
                 .securityGroupId(workspacesStreaming.id())
                 .cidrIpv4(exampleAwsVpc.cidrBlock())
                 .fromPort(443)
                 .toPort(443)
                 .ipProtocol("tcp")
                 .build());
     
             var workspacesStreamingTcp4195 = new SecurityGroupIngressRule("workspacesStreamingTcp4195", SecurityGroupIngressRuleArgs.builder()
                 .securityGroupId(workspacesStreaming.id())
                 .cidrIpv4(exampleAwsVpc.cidrBlock())
                 .fromPort(4195)
                 .toPort(4195)
                 .ipProtocol("tcp")
                 .build());
     
             var workspacesStreamingUdp443 = new SecurityGroupIngressRule("workspacesStreamingUdp443", SecurityGroupIngressRuleArgs.builder()
                 .securityGroupId(workspacesStreaming.id())
                 .cidrIpv4(exampleAwsVpc.cidrBlock())
                 .fromPort(443)
                 .toPort(443)
                 .ipProtocol("udp")
                 .build());
     
             var workspacesStreamingUdp4195 = new SecurityGroupIngressRule("workspacesStreamingUdp4195", SecurityGroupIngressRuleArgs.builder()
                 .securityGroupId(workspacesStreaming.id())
                 .cidrIpv4(exampleAwsVpc.cidrBlock())
                 .fromPort(4195)
                 .toPort(4195)
                 .ipProtocol("udp")
                 .build());
     
         }
     }
     
     
    ## Import Using `pulumi import`, import WorkSpaces directory using the directory ID. For example: ```sh $ pulumi import aws:workspaces/directory:Directory main d-4444444444 ```
    • Constructor Detail

      • Directory

        public Directory​(java.lang.String name)
        Parameters:
        name - The _unique_ name of the resulting resource.
      • Directory

        public Directory​(java.lang.String name,
                         @Nullable
                         DirectoryArgs args)
        Parameters:
        name - The _unique_ name of the resulting resource.
        args - The arguments to use to populate this resource's properties.
      • Directory

        public Directory​(java.lang.String name,
                         @Nullable
                         DirectoryArgs args,
                         @Nullable
                         com.pulumi.resources.CustomResourceOptions options)
        Parameters:
        name - The _unique_ name of the resulting resource.
        args - The arguments to use to populate this resource's properties.
        options - A bag of options that control this resource's behavior.
    • Method Detail

      • activeDirectoryConfig

        public com.pulumi.core.Output<java.util.Optional<DirectoryActiveDirectoryConfig>> activeDirectoryConfig()
        Returns:
        Configuration for Active Directory integration when `workspaceType` is set to `POOLS`. Defined below.
      • alias

        public com.pulumi.core.Output<java.lang.String> alias()
        Returns:
        The directory alias.
      • certificateBasedAuthProperties

        public com.pulumi.core.Output<DirectoryCertificateBasedAuthProperties> certificateBasedAuthProperties()
        Returns:
        Configuration of certificate-based authentication (CBA) integration. Requires SAML authentication to be enabled. Defined below.
      • customerUserName

        public com.pulumi.core.Output<java.lang.String> customerUserName()
        Returns:
        The user name for the service account.
      • directoryId

        public com.pulumi.core.Output<java.lang.String> directoryId()
        Returns:
        The directory identifier for registration in WorkSpaces service.
      • directoryName

        public com.pulumi.core.Output<java.lang.String> directoryName()
        Returns:
        The name of the directory.
      • directoryType

        public com.pulumi.core.Output<java.lang.String> directoryType()
        Returns:
        The directory type.
      • dnsIpAddresses

        public com.pulumi.core.Output<java.util.List<java.lang.String>> dnsIpAddresses()
        Returns:
        The IP addresses of the DNS servers for the directory.
      • iamRoleId

        public com.pulumi.core.Output<java.lang.String> iamRoleId()
        Returns:
        The identifier of the IAM role. This is the role that allows Amazon WorkSpaces to make calls to other services, such as Amazon EC2, on your behalf.
      • ipGroupIds

        public com.pulumi.core.Output<java.util.List<java.lang.String>> ipGroupIds()
        Returns:
        The identifiers of the IP access control groups associated with the directory.
      • region

        public com.pulumi.core.Output<java.lang.String> region()
        Returns:
        Region where this resource will be [managed](https://docs.aws.amazon.com/general/latest/gr/rande.html#regional-endpoints). Defaults to the Region set in the provider configuration.
      • registrationCode

        public com.pulumi.core.Output<java.lang.String> registrationCode()
        Returns:
        The registration code for the directory. This is the code that users enter in their Amazon WorkSpaces client application to connect to the directory.
      • samlProperties

        public com.pulumi.core.Output<DirectorySamlProperties> samlProperties()
        Returns:
        Configuration of SAML authentication integration. Defined below.
      • selfServicePermissions

        public com.pulumi.core.Output<DirectorySelfServicePermissions> selfServicePermissions()
        Returns:
        Permissions to enable or disable self-service capabilities when `workspaceType` is set to `PERSONAL`.. Defined below.
      • subnetIds

        public com.pulumi.core.Output<java.util.List<java.lang.String>> subnetIds()
        Returns:
        The identifiers of the subnets where the directory resides.
      • tags

        public com.pulumi.core.Output<java.util.Optional<java.util.Map<java.lang.String,​java.lang.String>>> tags()
        Returns:
        A map of tags assigned to the WorkSpaces directory. If configured with a provider `defaultTags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
      • tagsAll

        public com.pulumi.core.Output<java.util.Map<java.lang.String,​java.lang.String>> tagsAll()
        Returns:
        A map of tags assigned to the resource, including those inherited from the provider `defaultTags` configuration block.
      • tenancy

        public com.pulumi.core.Output<java.lang.String> tenancy()
        Returns:
        Tenancy of the WorkSpaces directory. Valid values are `DEDICATED` or `SHARED`.
      • userIdentityType

        public com.pulumi.core.Output<java.lang.String> userIdentityType()
        Returns:
        Specifies the user identity type for the WorkSpaces directory. Valid values are `CUSTOMER_MANAGED`, `AWS_DIRECTORY_SERVICE`, `AWS_IAM_IDENTITY_CENTER`. > **Note:** When `workspaceType` is set to `POOLS`, the `directoryId` is automatically generated and cannot be manually set.
      • workspaceAccessProperties

        public com.pulumi.core.Output<DirectoryWorkspaceAccessProperties> workspaceAccessProperties()
        Returns:
        Specifies which devices and operating systems users can use to access their WorkSpaces. Defined below.
      • workspaceCreationProperties

        public com.pulumi.core.Output<DirectoryWorkspaceCreationProperties> workspaceCreationProperties()
        Returns:
        Default properties that are used for creating WorkSpaces. Defined below.
      • workspaceDirectoryDescription

        public com.pulumi.core.Output<java.util.Optional<java.lang.String>> workspaceDirectoryDescription()
        Returns:
        The description of the WorkSpaces directory when `workspaceType` is set to `POOLS`.
      • workspaceDirectoryName

        public com.pulumi.core.Output<java.util.Optional<java.lang.String>> workspaceDirectoryName()
        Returns:
        The name of the WorkSpaces directory when `workspaceType` is set to `POOLS`.
      • workspaceSecurityGroupId

        public com.pulumi.core.Output<java.lang.String> workspaceSecurityGroupId()
        Returns:
        The identifier of the security group that is assigned to new WorkSpaces.
      • workspaceType

        public com.pulumi.core.Output<java.util.Optional<java.lang.String>> workspaceType()
        Returns:
        Specifies the type of WorkSpaces directory. Valid values are `PERSONAL` and `POOLS`. Default is `PERSONAL`.
      • get

        public static Directory get​(java.lang.String name,
                                    com.pulumi.core.Output<java.lang.String> id,
                                    @Nullable
                                    DirectoryState state,
                                    @Nullable
                                    com.pulumi.resources.CustomResourceOptions options)
        Get an existing Host resource's state with the given name, ID, and optional extra properties used to qualify the lookup.
        Parameters:
        name - The _unique_ name of the resulting resource.
        id - The _unique_ provider ID of the resource to lookup.
        state -
        options - Optional settings to control the behavior of the CustomResource.