

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

# Amazon WorkMail에서 가용성 설정 구성
<a name="enable_interop_wm"></a>

Amazon WorkMail에서 가용성 설정을 구성하여 외부 시스템을 쿼리하고, 일정 관리 기능을 제공하고, 일정에 약속 없음/있음 정보를 가져올 수 있습니다. Amazon WorkMail은 원격 시스템에서 약속 없음/있음 정보를 가져오는 두 가지 모드를 지원합니다.
+ **Exchange 웹 서비스(EWS)** - 이 구성에서 Amazon WorkMail은 EWS 프로토콜을 사용하여 Exchange 서버 또는 다른 WorkMail 조직에 가용성 정보를 쿼리합니다. 이는 가장 간단한 구성이지만 공용 인터넷을 통해 Exchange 서버의 EWS 엔드포인트에 액세스할 수 있어야 합니다.
+ **사용자 지정 가용성 공급자(CAP)** - 이 구성에서 관리자는 지정된 이메일 도메인에 대한 사용자 가용성 정보를 가져오도록 AWS Lambda 함수를 구성할 수 있습니다. 이메일 서버 플랫폼에 따라 Amazon WorkMail과 함께 CAP를 사용하면 다음과 같은 이점이 있습니다.
  + WorkMail용 방화벽을 열 필요 없이 내부 EWS에서 사용자 가용성을 확보할 수 있습니다.
  + Google Workspace(이전의 G Suite) 와 같이 Exchange가 아니거나 EWS가 아닌 시스템에서 사용자 가용성을 확보할 수 있습니다.

**Topics**
+ [

## EWS 기반 가용성 공급자 구성
](#configure_available_settings)
+ [

## 사용자 지정 가용성 공급자 구성
](#Configuring_CAP)
+ [

# 사용자 지정 가용성 공급자 Lambda 함수 구축
](building_cap.md)

## EWS 기반 가용성 공급자 구성
<a name="configure_available_settings"></a>

콘솔에서 EWS 기반 가용성 설정을 구성하려면 다음 절차를 완료하세요.

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

   필요한 경우 AWS 리전을 변경합니다. 이렇게 하려면 검색 상자 오른쪽에 있는 **리전 선택** 목록을 연 다음 원하는 리전을 선택합니다. 자세한 내용은 *Amazon Web Services 일반 참조*의 [리전 및 엔드포인트](https://docs.aws.amazon.com/general/latest/gr/index.html?rande.html)를 참조하세요.

1. 탐색 창에서 **조직**을 선택한 다음 조직의 이름을 선택합니다.

1. 탐색 창에서 **조직 설정**, **상호 운용성** 탭을 선택합니다.

1. **가용성 구성 추가**를 선택하고 다음 정보를 입력합니다.
   + **유형** - EWS를 선택합니다.
   + **도메인** - WorkMail이 이 구성을 사용하여 가용성 정보를 쿼리하려고 시도하는 도메인입니다.
   + **EWS URL** - Amazon WorkMail은 이 URL을 EWS 엔드포인트에 쿼리합니다. 이 안내서의 [EWS URL 가져오기](#getting_ews_url) 섹션을 참조하세요.
   + **사용자 이메일 주소** - WorkMail이 EWS 엔드포인트 인증에 사용할 사용자의 이메일 주소입니다.
   + **암호** - WorkMail이 EWS 엔드포인트를 인증하는 데 사용할 암호입니다.

1. **저장**을 선택합니다.

### EWS URL 가져오기
<a name="getting_ews_url"></a>

Microsoft Outlook을 사용하여 Exchange용 EWS URL을 가져오려면 다음 절차를 완료하세요.

1. Exchange 환경에서 아무 사용자로나 Windows Microsoft Outlook에 로그인합니다.

1. **Ctrl** 키를 누른 상태에서 작업 표시줄에 있는 Microsoft Outlook 아이콘의 컨텍스트(마우스 오른쪽 버튼 클릭) 메뉴를 엽니다.

1. [**전자 메일 자동 구성 테스트**]를 선택합니다.

1. Microsoft Exchange 사용자의 이메일 주소와 암호를 입력하고 [**테스트**]를 선택합니다.

1. [결과] 창에서 [**가용성 서비스 URL**]의 값을 복사합니다.

PowerShell을 사용하여 교환할 EWS URL을 가져오려면 PowerShell 프롬프트에서 다음 명령을 실행합니다.

`Get-WebServicesVirtualDirectory |Select name, *url* | fl`

Amazon WorkMail의 EWS URL을 가져오려면 먼저 [Amazon WorkMail 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/workmail.html) 아래에서 EWS 도메인을 찾으세요. EWS URL - `https://"EWS domain"/EWS/Exchange.asmx`을 입력하고 “EWS 도메인”을 EWS 도메인으로 바꾸세요.

## 사용자 지정 가용성 공급자 구성
<a name="Configuring_CAP"></a>

CAP(사용자 지정 가용성 공급자)를 구성하려면 다음 절차를 완료하세요.

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

   필요한 경우 AWS 리전을 변경합니다. 이렇게 하려면 검색 상자 오른쪽에 있는 **리전 선택** 목록을 연 다음 원하는 리전을 선택합니다.

1. 탐색 창에서 **조직**을 선택한 다음 조직의 이름을 선택합니다.

1. 탐색 창에서 **조직 설정**, **상호 운용성 설정**을 선택합니다.

1. **가용성 구성 추가**를 선택하고 다음 정보를 입력합니다.
   + **유형** - **CAP Lambda**를 선택합니다.
   + **도메인** - WorkMail이 이 구성을 사용하여 가용성 정보를 쿼리하려고 시도하는 도메인입니다.
   + **ARN** - 가용성 정보를 제공하는 Lambda 함수의 ARN입니다.

CAP Lambda 함수를 구축하려면 [사용자 지정 가용성 공급자 Lambda 함수 구축](building_cap.md)을 참조하세요.

# 사용자 지정 가용성 공급자 Lambda 함수 구축
<a name="building_cap"></a>

사용자 지정 가용성 공급자(CAP)는 잘 정의된 JSON 스키마로 작성된 JSON 기반 요청 및 응답 프로토콜로 구성됩니다. Lambda 함수는 요청을 파싱하여 유효한 응답을 제공합니다.

**Topics**
+ [

## 요청 및 응답 요소
](#cap_request_response_elements)
+ [

## 액세스 권한 부여
](#granting_access)
+ [

## CAP Lambda 함수를 사용하는 Amazon WorkMail의 예
](#cap_example_github)

## 요청 및 응답 요소
<a name="cap_request_response_elements"></a>

### 요청 요소
<a name="cap_request"></a>

다음은 Amazon WorkMail 사용자의 CAP를 구성하는 데 사용되는 샘플 요청입니다.

```
{
    "requester": {
        "email": "user1@internal.example.com",
        "userName": "user1",
        "organization": "m-0123456789abcdef0123456789abcdef",
        "userId": "S-1-5-18",
        "origin": "127.0.0.1"
    },
    "mailboxes": [
        "user2@external.example.com",
        "unknown@internal.example.com"
    ],
    "window": {
        "startDate": "2021-05-04T00:00:00.000Z",
        "endDate": "2021-05-06T00:00:00.000Z"
    }
}
```

요청은 **요청자**, **사서함**, **창**의 세 섹션으로 구성됩니다. 이러한 정보는 이 설명서의 [요청자](#cap_request_requester), [사서함](#cap_request_mailboxes) 및 [창](#cap_request_window) 섹션에 설명되어 있습니다.

#### 요청자
<a name="cap_request_requester"></a>

*요청자* 섹션은 Amazon WorkMail에 원래 요청을 한 사용자에 대한 정보를 제공합니다. CAP는 이 정보를 사용하여 공급자의 행동을 변경합니다. 예를 들어 이 데이터를 사용하여 백엔드 가용성 공급자의 동일한 사용자처럼 위장하거나 응답에서 특정 세부 정보를 생략할 수 있습니다.


| 필드 | 설명 | 필수 | 
| --- | --- | --- | 
|  `Email`  |  요청자의 기본 이메일 주소입니다.  |  예  | 
|  `Username`  |  요청자의 사용자 이름입니다.  |  예  | 
|  `Organization`  |  요청자의 조직 ID입니다.  |  예  | 
|  `UserID`  |  요청자 ID입니다.  |  예  | 
|  `Origin`  |  요청자의 원격 주소입니다.  |  아니요  | 
|  `Bearer`  |  추후 사용 예약.  |  아니요  | 

#### 사서함
<a name="cap_request_mailboxes"></a>

*사서함* 섹션에는 가용성 정보가 요청된 사용자의 이메일 주소를 쉼표로 구분한 목록이 포함되어 있습니다.

#### 창
<a name="cap_request_window"></a>

*창* 섹션에는 가용성 정보가 요청되는 기간이 포함되어 있습니다. `startDate` 및 `endDate`는 모두 UTC로 지정되며 [RFC 3339](https://www.rfc-editor.org/rfc/rfc3339)에 따라 형식이 지정됩니다. 이벤트는 잘릴 것으로 예상되지 않습니다. 즉, 정의된 `StartDate` 전에 이벤트가 시작되면 원래 시작 이벤트가 사용됩니다.

### 응답 요소
<a name="cap_response"></a>

Amazon WorkMail은 CAP Lambda 함수로부터 응답을 받을 때까지 25초 동안 기다립니다. 25초 후에 Amazon WorkMail은 함수에 장애가 발생한 것으로 간주하고 EWS GetUserAvailability 응답에서 관련 사서함에 대해 오류를 생성합니다. 이렇게 해도 전체 GetUserAvailability 작업이 실패하지는 않습니다.

다음은 이 섹션의 시작 부분에 정의된 구성의 샘플 응답입니다.

```
{
    "mailboxes": [{
        "mailbox": "user2@external.example.com",
        "events": [{
            "startTime": "2021-05-03T23:00:00.000Z",
            "endTime": "2021-05-04T03:00:00.000Z",
            "busyType": "BUSY"|"FREE"|"TENTATIVE",
            "details": {  // optional
                "subject": "Late meeting",
                "location": "Chime",
                "instanceType": "SINGLE_INSTANCE"|"RECURRING_INSTANCE"|"EXCEPTION",
                "isMeeting": true,
                "isReminderSet": true,
                "isPrivate": false
            }
        }],
        "workingHours": {
            "timezone": {
                "name": "W. Europe Standard Time"
                "bias": 60,
                "standardTime": {  // optional (not needed for fixed offsets)
                    "offset": 60,
                    "time": "02:00:00",
                    "month": "JAN"|"FEB"|"MAR"|"APR"|"JUN"|"JUL"|"AUG"|"SEP"|"OCT"|"NOV"|"DEC",
                    "week": "FIRST"|"SECOND"|"THIRD"|"FOURTH"|"LAST",
                    "dayOfWeek": "SUN"|"MON"|"TUE"|"WED"|"THU"|"FRI"|"SAT"
                },
                "daylightTime": {  // optional (not needed for fixed offsets)
                    "offset": 0,
                    "time": "03:00:00",
                    "month": "JAN"|"FEB"|"MAR"|"APR"|"JUN"|"JUL"|"AUG"|"SEP"|"OCT"|"NOV"|"DEC",
                    "week": "FIRST"|"SECOND"|"THIRD"|"FOURTH"|"LAST",
                    "dayOfWeek": "SUN"|"MON"|"TUE"|"WED"|"THU"|"FRI"|"SAT"
                },                
            },
            "workingPeriods":[{
                "startMinutes": 480,
                "endMinutes": 1040,
                "days": ["SUN"|"MON"|"TUE"|"WED"|"THU"|"FRI"|"SAT"]
            }]
        }
    },{
        "mailbox": "unknown@internal.example.com",
        "error": "MailboxNotFound"
    }]
}
```

응답은 사서함 목록으로 구성된 단일 *사서함* 섹션으로 구성됩니다. 가용성이 확보된 각 사서함은 *사서함*, *이벤트* 및 *근무 시간*의 세 섹션으로 구성됩니다. 가용성 공급자가 사서함의 가용성 정보를 가져오지 못한 경우 섹션은 *사서함* 및 *오류*라는 두 섹션으로 구성됩니다. 이러한 정보는 이 설명서의 [사서함](#cap_response_mailbox), [이벤트](#cap_response_events), [근무 시간](#cap_response_workinghours), [시간대](#cap_response_timezone), [근무 기간](#cap_response_workingperiods) 및 [오류](#cap_response_error) 섹션에 설명되어 있습니다.

#### 사서함
<a name="cap_response_mailbox"></a>

*사서함* 섹션은 요청의 *사서함* 섹션에 있는 사용자의 이메일 주소입니다.

#### 이벤트
<a name="cap_response_events"></a>

*이벤트* 섹션은 요청된 창에서 발생하는 이벤트 목록입니다. 각 이벤트는 다음 매개변수로 정의됩니다.


| 필드 | 설명 | 필수 | 
| --- | --- | --- | 
|  `startTime`  |  이벤트 시작 시간은 UTC 기준이며 [RFC 3339](https://www.rfc-editor.org/rfc/rfc3339)에 따라 형식이 지정됩니다.  |  예  | 
|  `endTime`  |  이벤트 종료 시간은 UTC 기준이며 [RFC 3339](https://www.rfc-editor.org/rfc/rfc3339)에 따라 형식이 지정됩니다.  |  예  | 
|  `busyType`  |  이벤트의 약속 있음 유형입니다. 가능한 값은 `Busy`, `Free` 또는 `Tentative`입니다.  |  예  | 
|  `details`  |  이벤트의 세부 정보입니다.  |  아니요  | 
|  `details.subject`  |  이벤트의 제목입니다.  |  예  | 
|  `details.location`  |  이벤트의 위치입니다.  |  예  | 
|  `details.instanceType`  |  이벤트의 인스턴스 유형입니다. 가능한 값은 `Single_Instance`, `Recurring_Instance` 또는 `Exception`입니다.  |  예  | 
|  `details.isMeeting`  |  이벤트에 참석자가 있는지 여부를 나타내는 부울입니다.  |  예  | 
|  `details.isReminderSet`  |  이벤트에 미리 알림이 설정되어 있는지 여부를 나타내는 부울입니다.  |  예  | 
|  `details.isPrivate`  |  이벤트가 비공개로 설정되었는지 여부를 나타내는 부울입니다.  |  예  | 

#### 근무 시간
<a name="cap_response_workinghours"></a>

*근무 시간* 섹션에는 사서함 소유자의 근무 시간에 대한 정보가 포함되어 있습니다. 여기에는 *시간대* 및 *근무 기간*라는 두 개의 섹션이 있습니다.

#### 시간대
<a name="cap_response_timezone"></a>

*시간대* 하위 섹션에서는 사서함 소유자의 시간대를 설명합니다. 요청자가 다른 시간대에서 근무할 때는 사용자의 근무 시간을 올바르게 렌더링하는 것이 중요합니다. 가용성 공급자는 이름을 사용하는 대신 시간대를 명시적으로 설명해야 합니다. 표준화된 시간대 설명을 사용하면 시간대 불일치를 방지하는 데 도움이 됩니다.


| 필드 | 설명 | 필수 | 
| --- | --- | --- | 
|  `name`  |  시간대의 이름입니다.  |  예  | 
|  `bias`  |  GMT의 기본 오프셋(분 단위)입니다.  |  예  | 
|  `standardTime`  |  지정된 시간대의 표준 시간 시작입니다.  |  아니요  | 
|  `daylightTime`  |  지정된 시간대의 일광 절약 시간 시작입니다.  |  아니요  | 

`standardTime` 및 `daylightTime` 모두 정의하거나 모두 생략해야 합니다. `standardTime` 및 `daylightTime` 객체의 필드는 다음과 같습니다.


| 필드 | 설명 | 허용된 값 | 
| --- | --- | --- | 
|  `offset`  |  기본 오프셋을 기준으로 한 오프셋(분)입니다.  |  NA  | 
|  `time`  |  표준 시간과 서머타임 간의 전환이 발생하는 시간으로, `hh:mm:ss`로 지정됩니다.  |  NA  | 
|  `month`  |  표준 시간과 일광 절약 시간 간의 전환이 발생하는 달입니다.  |  `JAN`,`FEB`, `MAR`, `APR`, `JUN`, `JUL`, `AUG`, `SEP`, `OCT`, `NOV`, `DEC`  | 
|  `week`  |  표준 시간과 일광 절약 시간 간의 전환이 발생하는 지정된 달 내의 주입니다.  |  `FIRST`, `SECOND`, `THIRD`, `FOURTH`, `LAST`  | 
|  `dayOfWeek`  |  표준 시간과 일광 절약 시간 간의 전환이 발생하는 지정된 주 내의 일입니다.  |  `SUN`, `MON`, `TUE`, `WED`, `THU`, `FRI`, `SAT`  | 

#### 근무 기간
<a name="cap_response_workingperiods"></a>

*근무 기간* 섹션에는 하나 이상의 근무 기간 객체가 포함되어 있습니다. 각 기간은 하루 이상의 근무일 시작 및 종료를 정의합니다.


| 필드 | 설명 | 허용된 값 | 
| --- | --- | --- | 
|  `startMinutes`  |  근무일의 시작은 자정부터 분 단위입니다.  |  NA  | 
|  `endMinutes`  |  근무일의 종료는 자정부터 분 단위입니다.  |  NA  | 
|  `days`  |  이 기간이 적용되는 일입니다.  |  `SUN`, `MON`, `TUE`, `WED`, `THU`, `FRI`, `SAT`  | 

#### 오류
<a name="cap_response_error"></a>

*오류* 필드에는 임의의 오류 메시지가 포함될 수 있습니다. 다음 표에는 잘 알려진 코드와 EWS 오류 코드의 매핑이 나와 있습니다. 다른 모든 메시지는 `ERROR_FREE_BUSY_GENERATION_FAILED`에 매핑됩니다.


| 값 | EWS 오류 코드 | 
| --- | --- | 
|  `MailboxNotFound`  |  `ERROR_MAIL_RECIPIENT_NOT_FOUND`  | 
|  `ErrorAvailabilityConfigNotFound`  |  `ERROR_AVAILABILITY_CONFIG_NOT_FOUND`  | 
|  `ErrorServerBusy`  |  `ERROR_SERVER_BUSY`  | 
|  `ErrorTimeoutExpired`  |  `ERROR_TIMEOUT_EXPIRED`  | 
|  `ErrorFreeBusyGenerationFailed`  |  `ERROR_FREE_BUSY_GENERATION_FAILED`  | 
|  `ErrorResponseSchemaValidation`  |  `ERROR_RESPONSE_SCHEMA_VALIDATION`  | 

## 액세스 권한 부여
<a name="granting_access"></a>

 AWS Command Line Interface ()에서 다음 Lambda 명령을 실행합니다AWS CLI. 이 명령은 CAP를 구문 분석하는 Lambda 함수에 리소스 정책을 추가합니다. 이 함수는 Amazon WorkMail 가용성 서비스가 Lambda 함수를 호출할 수 있도록 합니다.

```
aws lambda add-permission \
    --region LAMBDA_REGION \
    --function-name CAP_FUNCTION_NAME \
    --statement-id AllowWorkMail \
    --action "lambda:InvokeFunction" \
    --principal availability.workmail.WM_REGION.amazonaws.com \
    --source-account WM_ACCOUNT_ID \
    --source-arn arn:aws:workmail:WM_REGION:WM_ACCOUNT_ID:organization/ORGANIZATION_ID
```

명령에서 지정된 위치에 다음 파라미터를 추가합니다.
+ *LAMBDA\$1REGION* - CAP Lambda가 배포된 리전의 이름입니다. 예를 들어 `us-east-1`입니다.
+ *CAP\$1FUNCTION\$1NAME* - CAP Lambda 함수의 이름입니다.
**참고**  
이는 CAP Lambda 함수의 이름, 별칭 또는 일부 또는 전체 ARN일 수 있습니다.
+ *WM\$1REGION* - Amazon WorkMail 조직이 Lambda 함수를 호출하는 리전의 이름입니다.
**참고**  
다음 리전만 CAP에서 사용할 수 있습니다.  
미국 동부(버지니아 북부)
US West (Oregon)
유럽(아일랜드)
+ *WM\$1ACCOUNT\$1ID* - 조직 계정의 ID입니다.
+ *ORGANIZATION\$1ID* - CAP Lambda를 호출하는 조직의 ID입니다. 예를 들어, 조직 ID: m-934ebb9eb57145d0a6cab566ca81a21f입니다.

**참고**  
*LAMBDA\$1REGION* 및 *WM\$1REGION*은 리전 간 호출이 필요한 경우에만 달라집니다. 리전 간 호출이 필요하지 않은 경우 모두 동일합니다.

## CAP Lambda 함수를 사용하는 Amazon WorkMail의 예
<a name="cap_example_github"></a>

CAP Lambda 함수를 사용하여 EWS 엔드포인트를 쿼리하는 Amazon WorkMail의 예를 보려면 *Amazon WorkMail용 서버리스 애플리케이션 GitHub 리포지토리*의 이 [AWS 샘플 애플리케이션](https://github.com/aws-samples/amazon-workmail-lambda-templates/tree/master/workmail-cap-exchange)을 참조하세요.