Amazon でのテストセットアップ WorkSpaces - AWS Management Console

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon でのテストセットアップ WorkSpaces

Amazon WorkSpaces を使用すると、 と呼ばれる仮想、クラウドベースの Windows、Amazon Linux、または Ubuntu Linux デスクトップをユーザー向けにプロビジョニングできます WorkSpaces。必要に応じてユーザーをすばやく追加または削除できます。ユーザーは、複数のデバイスまたはウェブブラウザから仮想デスクトップにアクセスできます。の詳細については WorkSpaces、「Amazon WorkSpaces 管理ガイド」を参照してください。

このセクションの例では、ユーザー環境が で実行されているウェブブラウザを使用して AWS Management Console プライベートアクセスにサインイン WorkSpace するテスト環境について説明します。次に、ユーザーは Amazon Simple Storage Service コンソールにアクセスします。これは、VPC接続されたネットワーク上のラップトップを使用して、ブラウザ AWS Management Console から にアクセスする企業ユーザーのエクスペリエンスをシミュレートする WorkSpace ことを目的としています。

このチュートリアルでは AWS CloudFormation 、 を使用してネットワーク設定と で使用する Simple Active Directory を作成および設定し、 WorkSpace を使用して をセットアップするステップバイステップの手順 WorkSpaces を示します AWS Management Console。

次の図は、 を使用してプライベートアクセス設定を WorkSpace AWS Management Console テストするためのワークフローを示しています。クライアント WorkSpace、Amazon マネージド型 VPC 、カスタマーマネージド型 の関係を示しますVPC。

Amazon を使用して AWS Management Console プライベートアクセスをテストするためのセットアップ設定 WorkSpaces。

次の AWS CloudFormation テンプレートをコピーし、手順のステップ 3 でネットワークをセットアップするために使用するファイルに保存します。

Description: | AWS Management Console Private Access. Parameters: ​ VpcCIDR: Type: String Default: 172.16.0.0/16 Description: CIDR range for VPC ​ PublicSubnet1CIDR: Type: String Default: 172.16.1.0/24 Description: CIDR range for Public Subnet A ​ PublicSubnet2CIDR: Type: String Default: 172.16.0.0/24 Description: CIDR range for Public Subnet B ​ PrivateSubnet1CIDR: Type: String Default: 172.16.4.0/24 Description: CIDR range for Private Subnet A ​ PrivateSubnet2CIDR: Type: String Default: 172.16.5.0/24 Description: CIDR range for Private Subnet B ​ # Amazon WorkSpaces is available in a subset of the Availability Zones for each supported Region. # https://docs.aws.amazon.com/workspaces/latest/adminguide/azs-workspaces.html Mappings: RegionMap: us-east-1: az1: use1-az2 az2: use1-az4 az3: use1-az6 us-west-2: az1: usw2-az1 az2: usw2-az2 az3: usw2-az3 ap-south-1: az1: aps1-az1 az2: aps1-az2 az3: aps1-az3 ap-northeast-2: az1: apne2-az1 az2: apne2-az3 ap-southeast-1: az1: apse1-az1 az2: apse1-az2 ap-southeast-2: az1: apse2-az1 az2: apse2-az3 ap-northeast-1: az1: apne1-az1 az2: apne1-az4 ca-central-1: az1: cac1-az1 az2: cac1-az2 eu-central-1: az1: euc1-az2 az2: euc1-az3 eu-west-1: az1: euw1-az1 az2: euw1-az2 eu-west-2: az1: euw2-az2 az2: euw2-az3 sa-east-1: az1: sae1-az1 az2: sae1-az3 ​ Resources: ​ iamLambdaExecutionRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - lambda.amazonaws.com Action: - 'sts:AssumeRole' ManagedPolicyArns: - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole Policies: - PolicyName: describe-ec2-az PolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Action: - 'ec2:DescribeAvailabilityZones' Resource: '*' MaxSessionDuration: 3600 Path: /service-role/ ​ fnZoneIdtoZoneName: Type: AWS::Lambda::Function Properties: Runtime: python3.8 Handler: index.lambda_handler Code: ZipFile: | import boto3 import cfnresponse ​ def zoneId_to_zoneName(event, context): responseData = {} ec2 = boto3.client('ec2') describe_az = ec2.describe_availability_zones() for az in describe_az['AvailabilityZones']: if event['ResourceProperties']['ZoneId'] == az['ZoneId']: responseData['ZoneName'] = az['ZoneName'] cfnresponse.send(event, context, cfnresponse.SUCCESS, responseData, str(az['ZoneId'])) def no_op(event, context): print(event) responseData = {} cfnresponse.send(event, context, cfnresponse.SUCCESS, responseData, str(event['RequestId'])) ​ def lambda_handler(event, context): if event['RequestType'] == ('Create' or 'Update'): zoneId_to_zoneName(event, context) else: no_op(event,context) Role: !GetAtt iamLambdaExecutionRole.Arn ​ getAZ1: Type: "Custom::zone-id-zone-name" Properties: ServiceToken: !GetAtt fnZoneIdtoZoneName.Arn ZoneId: !FindInMap [ RegionMap, !Ref 'AWS::Region', az1 ] getAZ2: Type: "Custom::zone-id-zone-name" Properties: ServiceToken: !GetAtt fnZoneIdtoZoneName.Arn ZoneId: !FindInMap [ RegionMap, !Ref 'AWS::Region', az2 ] ​ ######################### # VPC AND SUBNETS ######################### ​ AppVPC: Type: 'AWS::EC2::VPC' Properties: CidrBlock: !Ref VpcCIDR InstanceTenancy: default EnableDnsSupport: true EnableDnsHostnames: true ​ PublicSubnetA: Type: 'AWS::EC2::Subnet' Properties: VpcId: !Ref AppVPC CidrBlock: !Ref PublicSubnet1CIDR MapPublicIpOnLaunch: true AvailabilityZone: !GetAtt getAZ1.ZoneName PublicSubnetB: Type: 'AWS::EC2::Subnet' Properties: VpcId: !Ref AppVPC CidrBlock: !Ref PublicSubnet2CIDR MapPublicIpOnLaunch: true AvailabilityZone: !GetAtt getAZ2.ZoneName ​ PrivateSubnetA: Type: 'AWS::EC2::Subnet' Properties: VpcId: !Ref AppVPC CidrBlock: !Ref PrivateSubnet1CIDR AvailabilityZone: !GetAtt getAZ1.ZoneName ​ PrivateSubnetB: Type: 'AWS::EC2::Subnet' Properties: VpcId: !Ref AppVPC CidrBlock: !Ref PrivateSubnet2CIDR AvailabilityZone: !GetAtt getAZ2.ZoneName ​ InternetGateway: Type: AWS::EC2::InternetGateway ​ InternetGatewayAttachment: Type: AWS::EC2::VPCGatewayAttachment Properties: InternetGatewayId: !Ref InternetGateway VpcId: !Ref AppVPC ​ NatGatewayEIP: Type: AWS::EC2::EIP DependsOn: InternetGatewayAttachment ​ NatGateway: Type: AWS::EC2::NatGateway Properties: AllocationId: !GetAtt NatGatewayEIP.AllocationId SubnetId: !Ref PublicSubnetA ​ ######################### # Route Tables ######################### ​ PrivateRouteTable: Type: 'AWS::EC2::RouteTable' Properties: VpcId: !Ref AppVPC ​ DefaultPrivateRoute: Type: AWS::EC2::Route Properties: RouteTableId: !Ref PrivateRouteTable DestinationCidrBlock: 0.0.0.0/0 NatGatewayId: !Ref NatGateway ​ PrivateSubnetRouteTableAssociation1: Type: 'AWS::EC2::SubnetRouteTableAssociation' Properties: RouteTableId: !Ref PrivateRouteTable SubnetId: !Ref PrivateSubnetA ​ PrivateSubnetRouteTableAssociation2: Type: 'AWS::EC2::SubnetRouteTableAssociation' Properties: RouteTableId: !Ref PrivateRouteTable SubnetId: !Ref PrivateSubnetB ​ PublicRouteTable: Type: AWS::EC2::RouteTable Properties: VpcId: !Ref AppVPC ​ DefaultPublicRoute: Type: AWS::EC2::Route DependsOn: InternetGatewayAttachment Properties: RouteTableId: !Ref PublicRouteTable DestinationCidrBlock: 0.0.0.0/0 GatewayId: !Ref InternetGateway ​ PublicSubnetARouteTableAssociation1: Type: AWS::EC2::SubnetRouteTableAssociation Properties: RouteTableId: !Ref PublicRouteTable SubnetId: !Ref PublicSubnetA ​ PublicSubnetBRouteTableAssociation2: Type: AWS::EC2::SubnetRouteTableAssociation Properties: RouteTableId: !Ref PublicRouteTable SubnetId: !Ref PublicSubnetB ​ ​ ######################### # SECURITY GROUPS ######################### ​ VPCEndpointSecurityGroup: Type: 'AWS::EC2::SecurityGroup' Properties: GroupDescription: Allow TLS for VPC Endpoint VpcId: !Ref AppVPC SecurityGroupIngress: - IpProtocol: tcp FromPort: 443 ToPort: 443 CidrIp: !GetAtt AppVPC.CidrBlock ######################### # VPC ENDPOINTS ######################### ​ VPCEndpointGatewayS3: Type: 'AWS::EC2::VPCEndpoint' Properties: ServiceName: !Sub 'com.amazonaws.${AWS::Region}.s3' VpcEndpointType: Gateway VpcId: !Ref AppVPC RouteTableIds: - !Ref PrivateRouteTable VPCEndpointInterfaceSignin: Type: 'AWS::EC2::VPCEndpoint' Properties: VpcEndpointType: Interface PrivateDnsEnabled: false SubnetIds: - !Ref PrivateSubnetA - !Ref PrivateSubnetB SecurityGroupIds: - !Ref VPCEndpointSecurityGroup ServiceName: !Sub 'com.amazonaws.${AWS::Region}.signin' VpcId: !Ref AppVPC VPCEndpointInterfaceConsole: Type: 'AWS::EC2::VPCEndpoint' Properties: VpcEndpointType: Interface PrivateDnsEnabled: false SubnetIds: - !Ref PrivateSubnetA - !Ref PrivateSubnetB SecurityGroupIds: - !Ref VPCEndpointSecurityGroup ServiceName: !Sub 'com.amazonaws.${AWS::Region}.console' VpcId: !Ref AppVPC ​ ######################### # ROUTE53 RESOURCES ######################### ​ ConsoleHostedZone: Type: "AWS::Route53::HostedZone" Properties: HostedZoneConfig: Comment: 'Console VPC Endpoint Hosted Zone' Name: 'console.aws.amazon.com' VPCs: - VPCId: !Ref AppVPC VPCRegion: !Ref "AWS::Region" ConsoleRecordGlobal: Type: AWS::Route53::RecordSet Properties: HostedZoneId: !Ref 'ConsoleHostedZone' Name: 'console.aws.amazon.com' AliasTarget: DNSName: !Select ['1', !Split [':', !Select ['0', !GetAtt VPCEndpointInterfaceConsole.DnsEntries]]] HostedZoneId: !Select ['0', !Split [':', !Select ['0', !GetAtt VPCEndpointInterfaceConsole.DnsEntries]]] Type: A ​ GlobalConsoleRecord: Type: AWS::Route53::RecordSet Properties: HostedZoneId: !Ref 'ConsoleHostedZone' Name: 'global.console.aws.amazon.com' AliasTarget: DNSName: !Select ['1', !Split [':', !Select ['0', !GetAtt VPCEndpointInterfaceConsole.DnsEntries]]] HostedZoneId: !Select ['0', !Split [':', !Select ['0', !GetAtt VPCEndpointInterfaceConsole.DnsEntries]]] Type: A ConsoleS3ProxyRecordGlobal: Type: AWS::Route53::RecordSet Properties: HostedZoneId: !Ref 'ConsoleHostedZone' Name: 's3.console.aws.amazon.com' AliasTarget: DNSName: !Select ['1', !Split [':', !Select ['0', !GetAtt VPCEndpointInterfaceConsole.DnsEntries]]] HostedZoneId: !Select ['0', !Split [':', !Select ['0', !GetAtt VPCEndpointInterfaceConsole.DnsEntries]]] Type: A ConsoleSupportProxyRecordGlobal: Type: AWS::Route53::RecordSet Properties: HostedZoneId: !Ref 'ConsoleHostedZone' Name: "support.console.aws.amazon.com" AliasTarget: DNSName: !Select ['1', !Split [':', !Select ['0', !GetAtt VPCEndpointInterfaceConsole.DnsEntries]]] HostedZoneId: !Select ['0', !Split [':', !Select ['0', !GetAtt VPCEndpointInterfaceConsole.DnsEntries]]] Type: A ExplorerProxyRecordGlobal: Type: AWS::Route53::RecordSet Properties: HostedZoneId: !Ref 'ConsoleHostedZone' Name: "resource-explorer.console.aws.amazon.com" AliasTarget: DNSName: !Select ['1', !Split [':', !Select ['0', !GetAtt VPCEndpointInterfaceConsole.DnsEntries]]] HostedZoneId: !Select ['0', !Split [':', !Select ['0', !GetAtt VPCEndpointInterfaceConsole.DnsEntries]]] Type: A ConsoleRecordRegional: Type: AWS::Route53::RecordSet Properties: HostedZoneId: !Ref 'ConsoleHostedZone' Name: !Sub "${AWS::Region}.console.aws.amazon.com" AliasTarget: DNSName: !Select ['1', !Split [':', !Select ['0', !GetAtt VPCEndpointInterfaceConsole.DnsEntries]]] HostedZoneId: !Select ['0', !Split [':', !Select ['0', !GetAtt VPCEndpointInterfaceConsole.DnsEntries]]] Type: A ​ SigninHostedZone: Type: "AWS::Route53::HostedZone" Properties: HostedZoneConfig: Comment: 'Signin VPC Endpoint Hosted Zone' Name: 'signin.aws.amazon.com' VPCs: - VPCId: !Ref AppVPC VPCRegion: !Ref "AWS::Region" SigninRecordGlobal: Type: AWS::Route53::RecordSet Properties: HostedZoneId: !Ref 'SigninHostedZone' Name: 'signin.aws.amazon.com' AliasTarget: DNSName: !Select ['1', !Split [':', !Select ['0', !GetAtt VPCEndpointInterfaceSignin.DnsEntries]]] HostedZoneId: !Select ['0', !Split [':', !Select ['0', !GetAtt VPCEndpointInterfaceSignin.DnsEntries]]] Type: A SigninRecordRegional: Type: AWS::Route53::RecordSet Properties: HostedZoneId: !Ref 'SigninHostedZone' Name: !Sub "${AWS::Region}.signin.aws.amazon.com" AliasTarget: DNSName: !Select ['1', !Split [':', !Select ['0', !GetAtt VPCEndpointInterfaceSignin.DnsEntries]]] HostedZoneId: !Select ['0', !Split [':', !Select ['0', !GetAtt VPCEndpointInterfaceSignin.DnsEntries]]] Type: A ​ ######################### # WORKSPACE RESOURCES ######################### ADAdminSecret: Type: AWS::SecretsManager::Secret Properties: Name: "ADAdminSecret" Description: "Password for directory services admin" GenerateSecretString: SecretStringTemplate: '{"username": "Admin"}' GenerateStringKey: password PasswordLength: 30 ExcludeCharacters: '"@/\' ​ WorkspaceSimpleDirectory: Type: AWS::DirectoryService::SimpleAD DependsOn: AppVPC DependsOn: PrivateSubnetA DependsOn: PrivateSubnetB Properties: Name: "corp.awsconsole.com" Password: '{{resolve:secretsmanager:ADAdminSecret:SecretString:password}}' Size: "Small" VpcSettings: SubnetIds: - Ref: PrivateSubnetA - Ref: PrivateSubnetB ​ VpcId: Ref: AppVPC ​ ​ Outputs: PrivateSubnetA: Description: Private Subnet A Value: !Ref PrivateSubnetA ​ PrivateSubnetB: Description: Private Subnet B Value: !Ref PrivateSubnetB ​ WorkspaceSimpleDirectory: Description: Directory to be used for Workspaces Value: !Ref WorkspaceSimpleDirectory ​ WorkspacesAdminPassword: Description : "The ARN of the Workspaces admin's password. Navigate to the Secrets Manager in the AWS Console to view the value." Value: !Ref ADAdminSecret
注記

このテスト設定は、米国東部 (バージニア北部) (us-east-1) リージョンで実行するように設計されています。

ネットワークを設定するには
  1. 組織の管理アカウントにサインインして、AWS CloudFormation コンソールを開きます。

  2. [スタックの作成] を選択します。

  3. [With new resources (standard)] (新しいリソースの使用 (標準)) を選択します。以前に作成した AWS CloudFormation テンプレートファイルをアップロードし、次へ を選択します。

  4. PrivateConsoleNetworkForS3 などスタックの名前を入力し、[次へ] を選択します。

  5. VPC および サブネットには、任意の IP CIDR範囲を入力するか、指定されたデフォルト値を使用します。デフォルト値を使用する場合は、 内の既存のVPCリソースと重複していないことを確認します AWS アカウント。

  6. [スタックの作成] を選択します。

  7. スタックが作成されたら、[リソース] タブを選択して、作成されたリソースを表示します。

  8. [出力] タブを選択すると、プライベートサブネットと Workspace Simple Directory の値が表示されます。これらの値は、 を作成および設定するための次のステップのステップ 4 で使用するため、メモしておきます WorkSpace。

次のスクリーンショットは、プライベートサブネットと Workspace Simple Directory の値が表示された [出力] タブのビューを示しています。

プライベートサブネットと Workspace Simple Directory および対応する値。

ネットワークを作成したら、次の手順を使用して を作成してアクセスします WorkSpace。

を作成するには WorkSpace
  1. WorkSpaces コンソール を開きます。

  2. ナビゲーションペインで [ディレクトリ] を選択します。

  3. [ディレクトリ] ページで、ディレクトリのステータスが [アクティブ] であることを確認します。次のスクリーンショットは、アクティブディレクトリを含む [ディレクトリ] ページを示しています。

    [ディレクトリ] ページには、ステータスがアクティブなディレクトリのエントリが表示されます。
  4. でディレクトリを使用するには WorkSpaces、ディレクトリを登録する必要があります。ナビゲーションペインで、 を選択しWorkSpacesの作成 WorkSpacesを選択します。

  5. [ディレクトリを選択] で、前の手順で AWS CloudFormation が作成したディレクトリを選択します。[アクション] メニューで、[登録] を選択します。

  6. サブネット選択については、前の手順のステップ 9 で説明した 2 つのプライベートサブネットを選択します。

  7. [セルフサービス許可を有効化] を選択し、[登録] を選択します。

  8. ディレクトリが登録されたら、 の作成を続行します WorkSpace。登録したディレクトリを選択し、[次へ] を選択します。

  9. [ユーザーの作成] ページで、[追加ユーザーの作成] を選択します。の名前と E メールアドレスを入力して、 を使用できます WorkSpace。 WorkSpace ログイン情報がこの E メールアドレスに送信されるため、E メールアドレスが有効であることを確認します。

  10. [Next (次へ)] を選択します。

  11. [ユーザーの識別] ページで、手順 9 で作成したユーザーを選択し、[次へ] を選択します。

  12. [バンドルの選択] ページで、[Amazon Linux 2 のスタンダード][次へ] の順に選択します。

  13. 実行モードとユーザーカスタマイズにデフォルト設定を使用し、次に [ワークスペースを作成] を選択します。Pending はステータスで WorkSpace 開始され、Available約 20 分以内に に移行します。

  14. WorkSpace が利用可能になると、ステップ 9 で指定した E メールアドレスでアクセスするための手順が記載された E メールが送信されます。

にサインインすると WorkSpace、 AWS Management Console プライベートアクセスを使用してアクセスしていることをテストできます。

にアクセスするには WorkSpace
  1. 前の手順のステップ 14 で受信した E メールを開きます。

  2. E メールで、プロファイルをセットアップして WorkSpaces クライアントをダウンロードするために提供される一意のリンクを選択します。

  3. パスワードを設定します。

  4. 任意のクライアントをダウンロードします。

  5. クライアントをインストールして起動します。E メールに記載されている登録コードを入力して、[登録] を選択します。

  6. ステップ 3 で作成した認証情報 WorkSpaces を使用して Amazon にサインインします。

プライベートアクセス設定 AWS Management Console をテストするには
  1. から WorkSpaceブラウザを開きます。次に、AWS Management Consoleに移動し、認証情報を使用してサインインします。

    注記

    ブラウザとして Firefox を使用している場合は、ブラウザの設定で DNS 上書きを有効にする HTTPS オプションがオフになっていることを確認します。

  2. Amazon S3 コンソールを開き、 AWS Management Console プライベートアクセスを使用して接続されていることを確認します。

  3. ナビゲーションバーのロックプライベートアイコンを選択すると、使用中の VPCおよび VPCエンドポイントが表示されます。次のスクリーンショットは、ロックプライベートアイコンの場所とVPC情報を示しています。

    ロックプライベートアイコンの場所と AWS Management Console プライベートアクセス情報を示す Amazon S3 コンソール。