관리자를 위한 MDM 설정
RedirectWeb은 Apple의 Managed App Configuration을 지원하여, IT 관리자가 Jamf, Intune, Kandji 등과 같은 모바일 기기 관리(MDM) 솔루션을 통해 직원이나 학생의 기기 전체에 앱 설정을 중앙에서 배포하고 관리할 수 있도록 합니다.
이 페이지에서는 구성 가능한 키, 앱 동작, 권장 사항 및 제한 사항에 대해 설명합니다.
개요
Apple Business Manager / Apple School Manager (VPP) 배포 관련: 표준 RedirectWeb 앱은 프리미엄 인앱 결제(freemium In-App Purchase) 모델을 사용하며, 이는 VPP 대량 구매에 적합하지 않습니다. 조직에 모든 기능이 해제된 앱을 배포하려면, MDM/VPP 배포를 위해 특별히 설계된 유료 버전인 RedirectWeb Pro 앱을 구매하시기 바랍니다.
MDM을 통해 구성을 푸시함으로써 다음과 같은 작업을 수행할 수 있습니다:
- 강제 규칙(Enforced Rules): 사용자가 수정하거나 삭제할 수 없는 조직 전체의 리다이렉션 규칙을 적용합니다.
- 초기 규칙 배포: 앱 처음 실행 시 기본값으로 사용될 템플릿 규칙 세트를 배포합니다.
- UI 제어: 특정 기능(라이브러리 등)에 대한 액세스를 제한하고, 앱이 조직 관리 하에 있음을 앱 내에 명확하게 표시합니다.
- 대규모 규칙 가져오기(Fallback): 외부 서버에서 규칙을 가져와 MDM 페이로드 크기 제한을 우회합니다.
활용 사례
- 시스템 마이그레이션 중 원활한 라우팅:
레거시 내부 시스템(예:
legacy-crm.internal.local)에서 새로운 플랫폼(예:salesforce.com)으로 마이그레이션할 때,enforcedRuleSet을 배포하십시오. 직원이 이전 북마크를 사용하더라도 자동으로 새 시스템으로 리다이렉션되어 오래된 링크와 관련된 IT 지원 티켓을 줄일 수 있습니다. - 인트라넷 액세스 지원: Omnissa Web과 같은 앱별 VPN 터널을 통해 인트라넷 리소스에 쉽게 액세스할 수 있도록 커스텀 URL 스킴을 사용하는 리다이렉션 규칙을 배포합니다.
MDM 구성 푸시는 사용자가 RedirectWeb 앱을 열 때만 즉시 적용됩니다. 앱은 백그라운드 작업을 사용하여 MDM 업데이트를 브라우저 확장 프로그램에 자동으로 푸시하지만, 이는 OS에 의해 제어되는 "최선 노력(best-effort)" 실행 방식입니다. 실행 타이밍은 매우 예측하기 어려우며 작업이 아예 실행되지 않을 수도 있습니다. 따라서 클라우드 서비스 중단 시 몇 분 내에 모든 직원을 백업 사이트로 즉시 리다이렉션하려는 시도와 같이 시간이 중요한 장애 대응에는 이 기능에 의존해서는 안 됩니다.
데모
동영상에서 사용된 plist 파일은 Dictionary (<dict>) 키를 사용하는 sample-mdm.plist로 제공됩니다. 또한 동일한 데이터를 JSON 문자열 키로 사용하는 sample-mdm-json-string.plist도 있습니다.
동영상에서는 ManageEngine의 MDM을 사용하여 구성을 배포했지만, Apple의 Managed App Configuration을 지원하는 다른 MDM 솔루션에서도 동일한 구성을 사용할 수 있습니다.
Dictionary vs. JSON 문자열: Dictionary 유형이 더 타입 안정성이 높지만, 일부 MDM 솔루션(예: Omnissa Workspace ONE UEM)은 관리형 앱 구성에서 Dictionary 유형을 지원하지 않습니다. 이러한 경우 해결 방법으로 JSON 문자열 유형을 사용하는 것이 권장됩니다.
구성 가능한 키
일반적으로 plist 형식으로 MDM 콘솔을 통해 Managed App Configuration용 다음 키와 값을 배포하십시오.
| 키 이름 | 유형 | 설명 |
|---|---|---|
enforcedRuleSet | 규칙 세트 | 일반 규칙보다 높은 우선순위로 적용되는 규칙 세트입니다. 목록의 첫 번째 규칙이 우선권을 가집니다. 사용자는 이 규칙을 편집, 삭제 또는 재정렬할 수 없습니다. 앱의 글로벌 비활성화 토글과 관계없이 항상 활성 상태이며 iCloud를 통해 동기화되지 않습니다. |
enforcedRuleSetJSONString | JSON 문자열 | enforcedRuleSet과 동일하지만, 규칙 세트가 원시 JSON 문자열로 제공됩니다. 이는 관리형 앱 구성에서 Dictionary 유형을 지원하지 않는 MDM 플랫폼에 유용합니다. |
prefilledRuleSet | 규칙 세트 | 기존 규칙이 없는 사용자가 앱을 처음 실행할 때 기본 예제 규칙 대신 생성되는 규칙 세트입니다. 일단 배포되면 일반 규칙으로 작동하여 사용자가 수정, 삭제 및 iCloud 동기화를 할 수 있습니다. |
prefilledRuleSetJSONString | JSON 문자열 | prefilledRuleSet과 동일하지만, 규칙 세트가 원시 JSON 문자열로 제공됩니다. 이는 관리형 앱 구성에서 Dictionary 유형을 지원하지 않는 MDM 플랫폼에 유용합니다. |
organizationName | String | 앱 내 설정 화면 상단에 "Managed by [organizationName]"을 표시하여 사용자에게 앱이 관리되고 있음을 알립니다. |
managedConfigVersion | String | 구성에 대한 임의의 버전 문자열입니다. UI에 표시되어 문제 해결 시 IT 지원팀이 최신 MDM 페이로드가 기기에 도달했는지 확인할 수 있도록 합니다. |
showsLibrarySection | Boolean | false로 설정하면 규칙 라이브러리 기능이 숨겨지고 해당 섹션이 "조직에 의해 제한됨" 오류 메시지로 대체됩니다. |
fallback | Fallback | MDM 페이로드 크기 제한을 초과하는 경우 이를 지정하십시오. 앱은 fallbackDataURL에 지정된 URL에서 구성을 가져옵니다. |
fallbackJSONString | JSON 문자열 | fallback과 동일하지만, 대체 구성이 원시 JSON 문자열로 제공됩니다. 이는 관리형 앱 구성에서 Dictionary 유형을 지원하지 않는 MDM 플랫폼에 유용합니다. |
이 키들은 모두 선택 사항입니다.
구성 값 유형
규칙 세트
각 규칙 객체는 앱을 통해 공유/내보내기할 수 있는 것과 동일한 형식이지만, 다음과 같이 JSON에서 plist로 변환해야 합니다:
...
<key>enforcedRuleSet</key>
<dict>
<key>kind</key>
<string>RedirectList</string>
<key>bundleID</key>
<string>io.github.mshibanami.RedirectWebForSafari</string>
<key>formatVersion</key>
<string>5</string>
<key>redirects</key>
<array>
<dict>
<key>kind</key>
<string>Redirect</string>
<key>type</key>
<string>originalRedirect</string>
<key>title</key>
<string>My enforced Rule</string>
<key>sourceURLPattern</key>
<dict>
<key>type</key>
<string>wildcard</string>
<key>value</key>
<string>https://example.com/1</string>
</dict>
<key>destinationURLPattern</key>
<string>https://google.com/search?q=1</string>
</dict>
</array>
</dict>
...
Fallback
| 키 이름 | 유형 | 설명 |
|---|---|---|
fallbackDataURL | String (URL) | 규칙 세트가 포함된 JSON/XML 파일의 엔드포인트 URL입니다. |
authToken | String | fallbackDataURL에서 가져올 때 HTTP 헤더에 추가되는 인증 토큰입니다. (Authorization: Bearer [authToken] 형식으로 사용됨). |
JSON 문자열
일부 MDM 플랫폼(예: Omnissa Workspace ONE UEM)은 관리형 앱 구성에서 Dictionary (<dict>) 유형을 지원하지 않습니다. 이 문제를 해결하기 위해 JSONString으로 끝나는 키(enforcedRuleSetJSONString, prefilledRuleSetJSONString, fallbackJSONString 등)는 Dictionary 키와 동일한 데이터를 받지만, plist <string> 요소 내에 원시 JSON 문자열로 인코딩되어야 합니다.
JSON 문자열은 다음 예제와 같이 가독성을 위해 줄 바꿈과 들여쓰기를 포함하거나 압축할 수 있습니다.
...
<key>enforcedRuleSetJSONString</key>
<string>{
"kind": "RedirectList",
"bundleID": "io.github.mshibanami.RedirectWebForSafari",
"formatVersion": "5",
"redirects": [
{
"kind": "Redirect",
"type": "originalRedirect",
"title": "My enforced Rule",
"sourceURLPattern": {
"type": "wildcard",
"value": "https://example.com/1"
},
"destinationURLPattern": "https://google.com/search?q=1"
}
]
}</string>
...
Dictionary 키와 해당 JSONString 키가 모두 존재하는 경우(예: enforcedRuleSet 및 enforcedRuleSetJSONString 모두), Dictionary 키가 우선순위를 가집니다.
규칙 평가 및 충돌 해결
enforcedRuleSet이 제공되면 해당 규칙이 절대적인 우선순위로 적용됩니다.- 일반 규칙은 없지만
prefilledRuleSet이 존재하는 경우,prefilledRuleSet이 일반 규칙으로 저장됩니다. - 기본 "예제 리다이렉션 규칙"은 MDM 규칙이 구성되지 않고 일반 규칙도 없는 경우에만 생성됩니다.
Fallback URL 동작
인라인 MDM 페이로드와 fallbackDataURL을 통해 가져온 데이터 모두에 키가 존재하는 경우, 앱은 다음과 같이 충돌을 처리합니다:
- 가져오기 완료 전: 인라인 설정이 엄격하게 우선순위를 가지며 사용됩니다.
- 가져오기 성공 후:
fallbackDataURL에서 검색된 데이터가 해당 인라인 설정을 덮어씁니다. - 가져오기 실패 후: 앱은 계속해서 인라인 설정을 사용합니다.
- 독립적인 키: 인라인 페이로드에만 존재하는 키는 항상 유지됩니다.
MDM 피드백 및 상태 확인
MDM 솔루션이 지원하는 경우 MDM 피드백 채널(com.apple.feedback.managed)을 통해 구성이 성공적으로 적용되었는지 확인할 수 있습니다. 구성 처리(또는 URL 가져오기 완료) 후 앱은 다음 데이터를 반환합니다:
managedConfigVersion: 구성 시도의 버전 문자열입니다.result:success또는error중 하나입니다.messages: 해당하는 경우 상세한 오류 또는 경고 메시지를 포함하는 배열입니다.