

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 포털에 대한 사용자 지정 도메인 구성
<a name="custom-domains"></a>

기본 포털 URL 대신 자체 도메인 이름을 통해 액세스할 수 있도록 WorkSpaces Secure Browser 포털에 대한 사용자 지정 도메인을 구성할 수 있습니다. 이 기능을 사용하면 조직의 브랜딩에 맞는 도메인을 사용하여 사용자에게 보다 통합된 환경을 제공할 수 있습니다.

**개요**

사용자 지정 도메인을 사용하면 사용자 경험의 다음 측면을 개인화할 수 있습니다.
+ **브랜드 포털 액세스** - 사용자는 기본 AWS 엔드포인트 대신 조직의 도메인을 통해 포털에 액세스합니다.
+ **일관된 사용자 경험** - 조직에 맞는 친숙한 도메인 이름을 사용하여 브랜드 일관성을 유지합니다.

**참고**  
포털의 시각적 모양 및 브랜딩 요소를 사용자 지정하려면 섹션을 참조하세요[Amazon WorkSpaces Secure Browser의 브랜딩 사용자 지정](branding-customization.md).

**Topics**
+ [포털에 대한 사용자 지정 도메인 구성](configure-custom-domains.md)
+ [사용자 지정 도메인 문제 해결](custom-domains-troubleshooting.md)

# 포털에 대한 사용자 지정 도메인 구성
<a name="configure-custom-domains"></a>

## 작동 방식
<a name="custom-domains-how-it-works"></a>

사용자 지정 도메인을 구성하는 경우:
+ 사용자 지정 도메인을 사용하여 역방향 프록시를 생성하고 구성하여 트래픽을 포털 엔드포인트로 라우팅합니다.
+ 사용자는 기본 포털 엔드포인트 대신 사용자 지정 도메인을 통해 포털에 액세스합니다.
+ SSL 인증서는 프로세스 전반에 걸쳐 보안 연결을 보장합니다.

## 사전 조건
<a name="custom-domains-prerequisites"></a>

사용자 지정 도메인을 설정하기 전에 다음이 있는지 확인합니다.
+ Amazon Route53과 같은 DNS 서비스 공급자를 통해 관리하는 도메인 이름입니다.
+ WorkSpaces Secure Browser 포털. 포털 생성에 대한 자세한 내용은 섹션을 참조하세요[Amazon WorkSpaces Secure Browser용 웹 포털 생성](getting-started-step1.md).
+ AWS Certificate Manager, CloudFront 및 DNS 구성을 관리하는 데 필요한 권한이 있는지 확인합니다.

**중요**  
사용자는 적절한 포털 기능을 보장하려면 브라우저에서 사용자 지정 도메인에 대해 타사 쿠키를 활성화해야 합니다.  
포털의 보안 및 기능을 유지하려면 사용자 지정 도메인과 DNS 레코드를 소유하고 올바르게 관리해야 합니다.

**참고**  
사용자 지정 도메인에 대해 Single Sign-On 확장을 활성화하려면 사용자가 1.0.2505.6608 이상의 버전으로 브라우저에 확장을 설치해야 합니다.  
사용자는 포털에 로그인할 때 확장 프로그램을 설치하라는 메시지를 받게 됩니다. 확장 프로그램의 사용자 경험에 대한 자세한 내용은 [Amazon WorkSpaces Secure Browser용 Single Sign-On 확장 프로그램](extension.md) 섹션을 참조하십시오.

## 시작하기
<a name="custom-domains-getting-started"></a>

새 포털을 생성하거나 기존 포털을 편집할 때 사용자 지정 도메인을 포털 설정 속성으로 구성할 수 있습니다. 콘솔 AWS , SDK, CloudFormation 또는 AWS CLI 명령을 사용하여이 작업을 수행할 수 있습니다.

Amazon CloudFront 배포를 사용자 지정 도메인에서 WorkSpaces Secure Browser 포털 엔드포인트로 트래픽을 라우팅하는 역방향 프록시로 설정하는 것이 좋습니다.

**참고**  
Amazon CloudFront가 역방향 프록시 솔루션으로 권장되지만 대체 역방향 프록시 구성을 사용할 수 있습니다. Amazon CloudFront 설정 단계에 설명된 대로 필요한 오리진 및 캐시 구성 설정을 충족하는지 확인합니다.

## CloudFront를 역방향 프록시로 설정
<a name="custom-domains-getting-started"></a>

역방향 프록시 설정을 완료하려면 다음이 필요합니다.
+ 를 통한 SSL 인증서 AWS Certificate Manager (ACM)
+ Amazon CloudFront 배포
+ DNS 레코드
+ 사용자 지정 도메인으로 구성된 포털

**SSL 인증서**

아직 없는 경우 다음 단계에 따라 ACM을 통해 요청합니다.

1. 에서 ACM 콘솔로 이동합니다[https://console.aws.amazon.com/acm](https://console.aws.amazon.com/acm).
**중요**  
CloudFront에서 인증서를 저장해야 하므로 미국 동부(버지니아 북부) 리전을 사용합니다.

1. 인증서 요청:
   + 새 ACM 사용자의 경우: **인증서 프로비저닝**에서 **시작하기를** 선택합니다.
   + 기존 ACM 사용자의 경우: **인증서 요청을 선택합니다.**

1. **퍼블릭 인증서 요청을** 선택한 다음 **인증서 요청을** 선택합니다.
**참고**  
기존 인증서를 가져올 수도 있습니다. 자세한 내용은 [ACM 사용 설명서의 ACM으로 인증서 가져오기](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html)를 참조하세요. ** 

1. 기본 도메인 이름(예: **myportal.example.com**)을 입력합니다.

1. 검증 방법을 선택합니다.
   + **DNS 검증**(Route 53 사용자에게 권장) - 호스팅 영역에서 자동 레코드 세트 생성을 허용합니다. 자세한 내용은 *ACM 사용 설명서*의 [DNS 검증](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-validate-dns.html)을 참조하세요.
   + **이메일 검증** - 자세한 내용은 *ACM 사용 설명서*의 [이메일 검증](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-validate-email.html)을 참조하세요.

1. 설정을 검토하고 **확인 및 요청을** 선택합니다.

**CloudFront 배포**

CloudFront 배포를 생성하여 사용자 지정 도메인의 요청을 포털 엔드포인트로 프록시합니다.

1. 에서 CloudFront 콘솔로 이동합니다[https://console.aws.amazon.com/cloudfront](https://console.aws.amazon.com/cloudfront).

1. **배포 생성**(Create Distribution)을 선택합니다.
   + **배포 이름**: 배포의 이름을 입력합니다.
   + **배포 유형**: 단일 웹 사이트 또는 앱
**참고**  
사용자 지정 도메인이 동일한 AWS 계정의 Route 53에서 관리되는 경우 CloudFront에서 자동으로 DNS를 관리할 수 있습니다. 사용자 지정 도메인을 입력하고 “도메인 확인”을 클릭합니다. 다른 DNS 공급자의 도메인이 있는 경우이 단계를 건너뛰고 나중에 도메인을 구성합니다.

1. 오리진 설정을 구성합니다.
   + **오리진 유형**: 기타
   + **사용자 지정 오**리진: 포털 엔드포인트 *<portalId>*.workspaces-web.com 입력합니다.
   + **오리진 경로**: 비워 둡니다(기본값).

1. 오리진 설정 사용자 지정:
   + 사용자 지정 헤더 추가
**중요**  
사용자 지정 도메인을 통한 포털 액세스는이 헤더가 프록시 요청에 있는 경우에만 작동합니다. 헤더 이름과 값이 언급된 대로 정확히 지정되었는지 확인합니다.
     + **헤더 이름**: workspacessecurebrowser-custom-domain
     + **값**: 사용자 지정 도메인(예: **myportal.example.com**)
   + **프로토콜**: HTTPS 전용
   + **HTTPS 포트**: 443(기본값 유지)
   + **최소 원래 SSL 프로토콜**: TLSv1.2(기본값)
   + **오리진 IP 주소 유형**: IPv4 전용(Amazon WorkSpaces Secure Browser는이 관리 안내서 작성 시 IPv6를 지원하지 않습니다.)

1. 캐시 설정 사용자 지정:
   + **최종 사용자 프로토콜 정책**: HTTP를 HTTPS로 리디렉션
   + **허용된 HTTP 메**서드: GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE
   + **캐시 정책**: CachingDisabled
   + **오리진 요청 정책**: AllViewerExceptHostHeader
**중요**  
사용자 지정 도메인을 통한 포털 액세스는 오리진 요청 정책이 AllViewerExceptHostHeader로 설정된 경우에만 작동합니다. 이름에서 알 수 있듯이이 정책은 요청 헤더에서 호스트 헤더만 필터링하고 나머지 모든 헤더를 오리진으로 전달합니다.

1. 원하는 경우 WAF를 구성할 수 있지만이 설정을 위해 필요하지는 않습니다.

1. TLS 인증서 가져오기에서 1단계에서 생성한 TLS 인증서를 선택합니다.

1. 설정을 검토하고 **배포 생성을** 선택합니다.

**DNS 레코드**

호스팅 영역이 동일한 AWS 계정에 있는 경우 Cloudfront는 Route 53의 DNS 레코드를 업데이트하여 지정된 도메인에서 2단계에서 생성된 배포로 트래픽을 라우팅할 수 있습니다.

1. CloudFront 설정으로 이동

1. “도메인을 CloudFront로 라우팅”을 클릭합니다.

1. "라우팅 자동 설정"을 클릭합니다.

다른 서비스 공급자 또는 다른 AWS 계정에서 사용자 지정 도메인에 대한 DNS를 구성한 경우 도메인의 트래픽을 배포로 라우팅하도록 DNS 공급자를 구성합니다. 다음 단계에서는 Route 53을 사용하여 이를 수행하는 방법을 설명합니다.

1. 에서 Amazon Route 53 콘솔을 엽니다[https://console.aws.amazon.com/route53](https://console.aws.amazon.com/route53).

1. 액세스 DNS 관리:
   + 이 AWS 계정에서 Route 53를 처음 사용하는 경우 Amazon Route 53 개요 페이지가 열립니다. DNS 관리에서 **지금 시작하기를** 선택합니다.
   + 이 AWS 계정으로 이전에 Route 53를 사용한 경우 다음 단계로 진행합니다.

1. 탐색 창에서 **호스팅 영역(Hosted zones)**을 선택합니다.

1. 호스팅 영역이 아직 없는 경우 호스팅 영역을 생성합니다.
   + 인터넷 트래픽을 리소스로 라우팅하려면 *Amazon Route 53 개발자 안내서*의 [퍼블릭 호스팅 영역 생성을](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingHostedZone.html) 참조하세요.
   + VPC에서 트래픽을 라우팅하려면 *Amazon Route 53 개발자 안내서*의 [프라이빗 호스팅 영역 생성을](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zone-private-creating.html) 참조하세요.

1. **호스팅 영역** 페이지에서 관리하려는 호스팅 영역의 이름을 선택합니다.

1. [**Create Record Set**]를 선택합니다.

1. 도메인에 대한 항목을 생성합니다(예: **myportal.example.com**).
   + **유형**: A – IPv4 주소
   + **별칭**]: 예
   + **별칭 대상**: CloudFront 배포 URL

   기타 모든 설정은 기본값을 유지합니다.

**참고**  
Route 53을 사용하여 도메인의 DNS를 관리하지 않는 경우 DNS 서비스 공급자를 사용하고 도메인을 가리키는 DNS 항목을 CloudFront 배포의 URL에 추가합니다.

**또는 다음 CloudFormation 템플릿을 사용하여 CloudFront 배포를 생성할 수 있습니다.**

이 CloudFormation 템플릿은 CloudFront 배포를 자동으로 생성하고, 역방향 프록시 설정을 구성하고, 선택적으로 Route53 DNS 레코드를 생성합니다.

**Example workspaces-web-custom-domain-template.yaml**  

```
AWSTemplateFormatVersion: '2010-09-09'
Description: 'CloudFront Distribution for custom domain configuration with existing AWS WorkSpaces Secure Browser Portal'

Parameters:
  PortalEndpoint:
    Type: String
    Description: 'The endpoint of your existing WorkSpaces Web Portal (e.g., abc123.workspaces-web.com)'
    AllowedPattern: '^[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)?\.workspaces-web\.com$'
    ConstraintDescription: 'Must be a valid WorkSpaces Web portal endpoint'
  
  CustomDomainName:
    Type: String
    Description: 'Custom domain name for the portal (e.g., myportal.example.com)'
    AllowedPattern: '^([a-zA-Z0-9]?((?!-)([A-Za-z0-9-]*[A-Za-z0-9])\.)+[a-zA-Z0-9]+)$'
    ConstraintDescription: 'Must be a valid domain name'
  
  CertificateArn:
    Type: String
    Description: 'ARN of the validated SSL certificate in ACM (must be in us-east-1 region for CloudFront)'
    AllowedPattern: 'arn:aws:acm:us-east-1:[0-9]{12}:certificate/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}'
    ConstraintDescription: 'Must be a valid ACM certificate ARN in us-east-1 region'
  
  CreateRoute53Record:
    Type: String
    Description: 'Create Route53 record for custom domain (requires existing hosted zone)'
    Default: 'No'
    AllowedValues:
      - 'Yes'
      - 'No'
  
  HostedZoneId:
    Type: String
    Description: 'Route53 Hosted Zone ID for the custom domain (required if creating Route53 record)'
    Default: ''

Conditions:
  ShouldCreateRoute53Record: !And
    - !Equals [!Ref CreateRoute53Record, 'Yes']
    - !Not [!Equals [!Ref HostedZoneId, '']]

Resources:
  # CloudFront Distribution
  CloudFrontDistribution:
    Type: AWS::CloudFront::Distribution
    Properties:
      DistributionConfig:
        Aliases:
          - !Ref CustomDomainName
        Comment: !Sub 'CloudFront distribution for WorkSpaces Web Portal - ${CustomDomainName}'
        Enabled: true
        HttpVersion: http2
        IPV6Enabled: false  # WorkSpaces Secure Browser does not support IPv6
        PriceClass: PriceClass_All
        
        # Origin Configuration
        Origins:
          - Id: WorkSpacesWebOrigin
            DomainName: !Ref PortalEndpoint
            CustomOriginConfig:
              HTTPSPort: 443
              OriginProtocolPolicy: https-only
              OriginSSLProtocols:
                - TLSv1.2
            OriginCustomHeaders:
              - HeaderName: workspacessecurebrowser-custom-domain
                HeaderValue: !Ref CustomDomainName
        
        # Default Cache Behavior
        DefaultCacheBehavior:
          TargetOriginId: WorkSpacesWebOrigin
          ViewerProtocolPolicy: https-only
          AllowedMethods:
            - GET
            - HEAD
            - OPTIONS
            - PUT
            - POST
            - PATCH
            - DELETE
          Compress: false
          # Cache Policy: CachingDisabled (using predefined managed policy)
          CachePolicyId: 4135ea2d-6df8-44a3-9df3-4b5a84be39ad
          # Origin Request Policy: AllViewerExceptHostHeader (using predefined managed policy)
          OriginRequestPolicyId: b689b0a8-53d0-40ab-baf2-68738e2966ac
        
        # SSL Configuration
        ViewerCertificate:
          AcmCertificateArn: !Ref CertificateArn
          SslSupportMethod: sni-only
          MinimumProtocolVersion: TLSv1.2_2021
      
      Tags:
        - Key: Name
          Value: !Sub '${AWS::StackName}-cloudfront'

  # Route 53 Record (optional - requires hosted zone to exist)
  Route53Record:
    Type: AWS::Route53::RecordSet
    Condition: ShouldCreateRoute53Record
    Properties:
      HostedZoneId: !Ref HostedZoneId
      Name: !Ref CustomDomainName
      Type: A
      AliasTarget:
        DNSName: !GetAtt CloudFrontDistribution.DomainName
        HostedZoneId: Z2FDTNDATAQYW2  # CloudFront Hosted Zone ID
        EvaluateTargetHealth: false

Outputs:
  PortalEndpoint:
    Description: 'WorkSpaces Web Portal endpoint used as origin'
    Value: !Ref PortalEndpoint
    Export:
      Name: !Sub '${AWS::StackName}-PortalEndpoint'
  
  CustomDomainEndpoint:
    Description: 'Custom domain endpoint for the portal'
    Value: !Sub 'https://${CustomDomainName}'
    Export:
      Name: !Sub '${AWS::StackName}-CustomDomainEndpoint'
  
  CloudFrontDistributionId:
    Description: 'CloudFront Distribution ID'
    Value: !Ref CloudFrontDistribution
    Export:
      Name: !Sub '${AWS::StackName}-CloudFrontDistributionId'
  
  CloudFrontDomainName:
    Description: 'CloudFront Distribution Domain Name'
    Value: !GetAtt CloudFrontDistribution.DomainName
    Export:
      Name: !Sub '${AWS::StackName}-CloudFrontDomainName'
  
  CertificateArn:
    Description: 'SSL Certificate ARN used by CloudFront'
    Value: !Ref CertificateArn
    Export:
      Name: !Sub '${AWS::StackName}-CertificateArn'

Metadata:
  AWS::CloudFormation::Interface:
    ParameterGroups:
      - Label:
          default: "Existing Portal Configuration"
        Parameters:
          - PortalEndpoint
      - Label:
          default: "Custom Domain Configuration"
        Parameters:
          - CustomDomainName
          - CertificateArn
          - CreateRoute53Record
          - HostedZoneId
    ParameterLabels:
      PortalEndpoint:
        default: "Portal Endpoint"
      CustomDomainName:
        default: "Custom Domain Name"
      CertificateArn:
        default: "SSL Certificate ARN"
      CreateRoute53Record:
        default: "Create Route53 Record"
      HostedZoneId:
        default: "Hosted Zone ID"
```

이 템플릿을 사용하려면:

1. 위의 템플릿을 로 저장 `workspaces-web-custom-domain-template.yaml`

1. 특정 파라미터 값과 함께 AWS 콘솔, AWS CLI 또는 AWS SDK를 사용하여 배포

1. 배포 후 아래 4단계에 설명된 대로 사용자 지정 도메인으로 포털을 구성합니다.

**포털 구성**

 AWS 콘솔, UpdatePortal API 또는 update-portal AWS CLI 명령을 사용하여 사용자 지정 도메인을 포털 설정 속성으로 등록합니다.

1. WorkSpaces Secure Browser 콘솔([https://console.aws.amazon.com/workspaces-web/home](https://console.aws.amazon.com/workspaces-web/home))을 엽니다.

1. 탐색 창에서 **웹 포털**을 선택합니다.

1. 구성할 웹 포털을 선택하고 **편집**을 선택합니다.

1. 포털 설정에서 사용자 지정 도메인을 추가합니다.

1. 포털 구성을 저장합니다.

**구성 테스트**

구성을 테스트하려면 다음 단계를 따릅니다.

1. 웹 브라우저를 열고 사용자 지정 도메인의 URL(예: **https://myportal.example.com**)로 이동합니다.

1. 모든 것이 올바르게 설정된 경우 포털의 로그인 페이지가 표시됩니다.

1. 그런 다음 브라우저에 포털 URL을 입력합니다. IdP에 로그인한 후 사용자 지정 도메인으로 리디렉션되어야 합니다.

1. 마지막으로 IdP에 로그인하고 포털의 애플리케이션 타일을 클릭합니다. 사용자 지정 도메인으로 리디렉션되어야 합니다.

# 사용자 지정 도메인 문제 해결
<a name="custom-domains-troubleshooting"></a>

사용자가 원격 브라우저 세션에서 사용자 지정 도메인을 통한 포털 액세스에 문제가 있는 경우 다음 문제 해결 단계를 사용하여 일반적인 문제를 식별하고 해결합니다.

**Topics**
+ [일반적인 오류 메시지](common-errors.md)

# 일반적인 오류 메시지
<a name="common-errors"></a>

다음은 사용자 지정 도메인을 설정할 때 발생하는 일반적인 오류 메시지와 해결 방법입니다.

## 잘못된 CSRF 토큰 오류
<a name="custom-domains-csrf-error"></a>

이 오류는 Secure Browser가 CloudFront 설정을 통해 요청을 제대로 수신하지 못할 때 발생합니다.

이 문제를 해결하려면:
+ CloudFront 배포에서 사용자 지정 오리진 설정을 확인합니다.
+ 사용자 지정 헤더의 이름이 사용자 지정 도메인(https:// 또는 쿼리 파라미터 제외)`workspacessecurebrowser-custom-domain`과 정확히 일치하는지 확인합니다.
+ 로컬 브라우저에서 캐시를 지웁니다.
+ CloudFront에서 캐시를 무효화합니다.

## 502 잘못된 게이트웨이 오류
<a name="custom-domains-502-error"></a>

이 오류는 일반적으로 캐시 구성 문제를 나타냅니다.

이 문제를 해결하려면:
+ CloudFront 배포의 캐시 설정을 확인합니다.
+ 캐시 정책이 로 설정되어 있는지 확인합니다`CachingDisabled`.
+ 오리진 요청 정책이 로 설정되어 있는지 확인합니다`AllViewerExceptHostHeader`.
+ 로컬 브라우저에서 캐시를 지웁니다.
+ CloudFront에서 캐시를 무효화합니다.

## 액세스 거부 오류
<a name="custom-domains-403-error"></a>

사용자 지정 도메인이 잘못 구성된 경우이 오류가 발생할 수 있습니다.

이 문제를 해결하려면:
+ CloudFront 배포의 오리진 설정을 확인합니다.
+ 오리진이 올바른 포털 URL로 설정되어 있는지 확인합니다.
+ 포털이 올바른 사용자 지정 도메인으로 구성되어 있는지 확인합니다.
+ 로컬 브라우저에서 캐시를 지웁니다.
+ CloudFront에서 캐시를 무효화합니다.