팀 멤버십 접근 정책
Entry, Enterprise Advanced 플랜에서 사용할 수 있습니다.
Mattermost v11.10부터 시스템 관리자와 팀 관리자는 속성 기반 접근 제어(ABAC)를 팀에 직접 적용해, 사용자 프로필 속성을 기준으로 누가 팀에 참여할 수 있는지 제어할 수 있습니다. 이는 기존 ABAC 채널 멤버십 체계를 팀 경계까지 확장한 것으로, 채널 정책을 통과하지 못한 사용자가 여전히 팀과 그 멤버 목록, 채널 구조를 볼 수 있었던 "복도 접근(hallway access)" 공백을 메웁니다.
팀 멤버십 ABAC는 채널 ABAC와 동일한 정책과 속성 규칙을 사용하지만, 팀이 공개인지 비공개인지에 따라 다르게 동작합니다.
- 공개 팀(권고 모드): 정책이 접근을 차단하지 않습니다. 누구나 자유롭게 참여할 수 있습니다. 아직 멤버가 아니면서 조건을 충족하는 사용자에게는 Browse Teams에서 Recommended 칩이 표시됩니다. 활성화한 경우 동기화가 조건을 충족하는 사용자를 자동으로 추가할 수는 있지만, 누구도 제거하지 않습니다.
- 비공개 팀(엄격 모드): 정책이 디렉터리 노출, 참여 평가, 동기화 시점의 멤버십을 통제합니다. 조건을 충족하지 못하는 사용자는 팀을 찾거나 참여할 수 없습니다. 조건을 충족하지 못하는 멤버는 다음 동기화에서 제거됩니다.
업그레이드 안내: 팀 설정의 Access 탭은 Mattermost v11.10부터 새 UI를 사용하며, 이는 ABAC 라이선스 보유 여부나 활성화 여부와 관계없이 모든 배포의 모든 팀에 영향을 줍니다. 기존의 "Allow any user to join" 체크박스는 Public Team / Private Team 선택 카드로 대체되었습니다. 자세한 내용은 Access 탭: 공개/비공개 팀 카드를 참고하세요.
Access 탭: 공개/비공개 팀 카드
이 변경은 ABAC 활성화 여부나 조직의 Enterprise Advanced 라이선스 보유 여부와 관계없이 모든 배포의 모든 Mattermost 팀에 영향을 줍니다. 업그레이드 후 Team Settings > Access(팀 설정 > 접근)를 여는 팀 관리자에게는 모두 새 UI가 보입니다. 예외는 LDAP/AD 그룹 동기화로 관리되는 팀으로, 카드 대신 고정 안내 메시지가 표시됩니다. 모드 전환을 참고하세요.
무엇이 바뀌었나: "Allow any user to join" 체크박스가 두 개의 선택 카드로 영구히 대체되었습니다.
- Public Team — 서버의 누구나 찾아서 참여할 수 있습니다.
- Private Team — 초대받은 멤버만 참여할 수 있습니다.
변경한 이유: 카드는 팀의 공개/비공개 상태를 명시적이고 모호하지 않게 만들어 줍니다. 팀 ABAC 적용은 이 상태를 근거로 권고 모드와 엄격 모드를 결정합니다.
ABAC를 쓰지 않을 때의 동작: 기존 체크박스와 기능적으로 동일합니다. Public Team은 "Allow any user to join"이 켜져 있던 상태, Private Team은 꺼져 있던 상태와 같습니다. 멤버십 정책이 없는 팀에는 그 밖의 동작 변화가 없습니다.
ABAC를 쓸 때의 동작: 카드가 적용 모드를 결정합니다. 공개 팀에는 권고 ABAC가, 비공개 팀에는 엄격 ABAC가 적용됩니다. 정책이 적용된 팀에서 모드를 바꾸면 확인 모달이 나타날 수 있습니다(아래 참고).
새 팀의 기본값: 새로 만든 팀은 기본적으로 비공개이므로, 모드를 명시적으로 선택하기 전에 할당된 정책은 엄격 적용으로 작동합니다. 팀은 언제나 기본적으로 보호되며, 권고 모드를 쓰려면 Public Team을 명시적으로 선택해야 합니다.
모드 전환
비공개 → 공개: 적용이 완화됩니다. 확인 모달 없이 바로 저장됩니다. 정책이 적용되어 있으면 팀은 즉시 권고 모드로 전환되며, 기존 멤버는 아무도 제거되지 않습니다.
공개 → 비공개: 팀 ABAC가 활성화되어 있고(Enterprise Advanced 라이선스와 Enable Attribute-Based Access Control) 해당 팀에 멤버십 정책이 할당되어 있으면, Private Team을 클릭할 때 저장 전에 확인 모달이 열립니다.
- 제목: "Switch to Private Team?"
- 본문에는 현재 멤버 중 정책 기준을 충족하지 못해 다음 동기화에서 제거될 인원수가 표시됩니다. 현재 멤버 전원이 기준을 충족하면 아무도 제거되지 않는다고 표시됩니다. 인원수를 알 수 없는 경우에는 일반적인 경고가 대신 표시됩니다.
- Cancel — 모달을 닫고 아무것도 변경하지 않습니다.
- Switch to Private — 변경을 저장하고 엄격 모드를 적용하기 위한 팀 동기화 작업을 즉시 생성합니다.
전환을 시도하는 관리자 본인이 정책 기준을 충족하지 못하면 "Cannot switch to Private Team" 오류 모달이 대신 나타나고 전환이 차단됩니다. 엄격 모드에서는 해당 관리자가 팀에서 제거되기 때문입니다. 규칙을 수정해 자신을 포함시키거나, 다른 관리자에게 전환을 요청하세요.
할당된 정책이 없으면 공개 → 비공개 전환은 모달 없이 바로 저장됩니다.
Access 탭의 다른 항목(Invite Code, Allowed Email Domain)은 이 변경의 영향을 받지 않습니다. LDAP/AD 그룹 동기화로 관리되는 팀에서는 Access 탭에 카드 대신 "Members of this team are added and removed by linked groups"라는 고정 메시지가 표시됩니다.
권고 적용과 엄격 적용
정책이 엄격하게 적용되는지 권고로 취급되는지는 오직 팀이 공개인지 비공개인지에 따라 결정됩니다. 아래 표는 각 조합의 동작을 정리한 것입니다.
| 팀 | ABAC 정책 여부 | 참여 차단 | Browse Teams | 동기화 제거 | Recommended 태그 |
|---|---|---|---|---|---|
| 공개 | 없음 | 개방 | 모두에게 표시 | 해당 없음 | 없음 |
| 공개 | 있음 — 권고 | 개방(차단 없음) | 모두에게 표시 | 건너뜀 | 있음(조건을 충족하는 비멤버) |
| 비공개 | 없음 | 초대 전용 | 멤버에게만 표시 | 해당 없음 | 없음 |
| 비공개 | 있음 — 엄격 | 조건 미충족 사용자 거부 | 조건 미충족 비멤버에게는 숨김 | 조건 미충족자 제거 | 없음 |
자동 추가는 권고 모드와 엄격 모드 양쪽 모두에 적용되는 유일한 동작입니다. 활성화하면 팀이 공개인지 비공개인지와 관계없이 동기화가 조건을 충족하는 비멤버를 추가합니다.
사전 요구 사항
팀 멤버십 정책을 구성하기 전에 다음을 준비하세요.
- 시스템 콘솔에서 사용자 속성을 구성합니다.
- System Console > System Attributes > Attribute-Based Access(시스템 콘솔 > 시스템 속성 > 속성 기반 접근)로 이동해 Enable Attribute-Based Access Control을 활성화합니다.
- 규칙을 구성하는 팀 관리자에게는
manage_team_access_rules권한이 필요합니다. 이 권한은 기본적으로 팀 관리자 역할에 포함되어 있습니다.
팀 멤버십 ABAC는 TeamMembershipAccessControl 기능 플래그로도 제어되며, 이 플래그는 Mattermost v11.10부터 기본적으로 활성화되어 있습니다. 이 플래그를 비활성화하면 채널 ABAC에는 영향을 주지 않고 팀 적용만 꺼집니다. 자체 호스팅 배포에서 기능 플래그를 다루는 방법은 Mattermost 개발자 문서를 참고하세요.
팀 멤버십 ABAC를 껐을 때 달라지는 점:
| 화면·기능 | 팀 멤버십 ABAC 켜짐 | 팀 멤버십 ABAC 꺼짐 |
|---|---|---|
| 참여 차단(비공개 팀) | 적용됨 — 조건 미충족 사용자 거부 | 평가하지 않음 — 비공개 팀은 종전대로 초대 전용 유지 |
| Browse Teams 필터 | 비공개+ABAC 팀이 조건 미충족 사용자에게 숨겨짐 | 속성 필터링 없음 — 표준 공개 여부 규칙 적용 |
| Team Membership 탭(팀 설정) | 팀 관리자와 시스템 관리자에게 표시 | 숨김 — 탭이 나타나지 않음 |
| 시스템 콘솔의 팀별 ABAC 제어 | 정책 할당 + 맞춤 규칙 패널 표시 | 숨김 |
| Recommended 태그 | 공개+ABAC 팀에서 조건을 충족하는 사용자에게 표시 | 표시되지 않음 |
| 동기화 작업 — 제거 단계 | 비공개+ABAC 팀에서 조건 미충족자 제거 | 팀 동기화 작업이 실행되지 않음 |
| 초대 모달 필터링 | 비공개+ABAC 팀에서 필터링 | 종전대로 모든 사용자 표시 |
| 공개/비공개 카드(Access 탭) | 표시됨 — 제어 대상 아님 | 여전히 표시됨 — 그룹 동기화 팀을 제외한 모든 팀에서 렌더링 |
| 채널 ABAC | 영향 없음 | 영향 없음 |
시스템 관리자 구성
팀에 멤버십 정책 할당
시스템 관리자는 팀별 시스템 콘솔 페이지에서 기존 시스템 전체 멤버십 정책을 팀에 할당합니다.
- System Console > User Management > Teams(시스템 콘솔 > 사용자 관리 > 팀)로 이동해 구성할 팀을 엽니다.
- Team Management 섹션에서 Manage membership with attribute based membership policies를 활성화합니다. Membership policies와 Team-specific membership rules 섹션은 이 토글을 켜야만 나타납니다. 그룹 동기화 팀에서는 이 토글을 사용할 수 없으며, 정책이 연결된 뒤에는 읽기 전용이 됩니다.
- Membership policies 섹션에서 Link to a policy를 선택하고 선택기에서 기존 정책을 고릅니다.
- Save를 선택합니다.
저장하기 전에 Apply membership policy 확인 모달이 나타납니다. 이 모달에는 해당 팀에 적용되는 결과만 표시됩니다.
- 현재 멤버 중 정책 기준을 충족하지 못해 다음 동기화에서 제거될 인원수. 비공개 팀에 한하며, 그 수가 0보다 클 때만 표시됩니다.
- 다음 동기화에서 추가될, 조건을 충족하는 사용자 수. 자동 추가가 활성화되어 있고 그 수가 0보다 클 때만 표시됩니다.
- 팀이 비공개인데 정책에 맞는 사용자가 하나도 없는 경우의 빈 팀 경고("Saving may result in an empty private team").
- 확인 문구: "Are you sure you want to apply the membership policy?"
정책을 제거하려면 정책 행 옆의 휴지통 아이콘을 선택하고 "Remove this team from policy" 모달에서 확인한 다음 Save를 선택합니다. 기존 멤버는 그대로 유지되며, 팀은 다음 동기화에서 표준 접근 모드로 돌아갑니다.
정책 목록의 팀 수: Membership Policies 목록 페이지에는 각 정책이 적용된 채널 수와 팀 수가 표시됩니다. 예를 들면 2 channels, 1 team처럼 표시됩니다. 값이 0인 쪽은 생략됩니다(0 channels, 1 team이 아니라 1 team).
팀별 멤버십 규칙 구성
시스템 전체 상위 정책 외에, 시스템 관리자는 팀별 시스템 콘솔 페이지에서 그 팀에만 적용되는 규칙을 직접 정의할 수 있습니다.
- System Console > User Management > Teams로 이동해 팀을 엽니다.
- Manage membership with attribute based membership policies 스위치를 활성화합니다.
- Team-specific membership rules 패널까지 스크롤합니다.
- Add attribute를 선택해 조건을 추가합니다. 각 조건에서 다음을 선택합니다.
- Attribute: 평가할 사용자 프로필 속성.
- Operator: 속성이 어떻게 일치해야 하는지. 옵션은 Is, Is not, In, Starts with, Ends with, Contains입니다. 순위 속성의 경우 Is exactly, Is at least, Is greater than, Is at most, Is less than입니다.
- Value: 요구되는 속성 값.
모든 조건은 논리 AND로 결합되므로, 사용자는 모든 조건을 충족해야 합니다.
- 필요하면 Auto-add members based on access rules를 선택합니다. 이 체크박스는 팀에 규칙이 하나 이상 있거나 상위 정책이 연결되어 있을 때 사용할 수 있습니다. 자동 추가 설정은 팀당 하나뿐이며, 연결된 정책별로 따로 구성하지 않습니다.
- Save를 선택합니다. Apply membership policy 모달이 변경 적용 전 영향 인원수를 보여 줍니다.
규칙을 저장하면 자동 추가가 꺼져 있어도 항상 즉시 팀 동기화가 실행됩니다. 비공개 팀에서는 이때 조건을 충족하지 못하게 된 멤버가 곧바로 제거되면서 규칙이 적용됩니다. 진행하기 전에 저장 모달에서 영향을 확인하세요.
팀별 규칙은 그 팀에 할당된 상위 정책과 누적 방식으로 조합됩니다. 사용자는 상위 정책과 팀별 규칙을 모두 충족해야 합니다. 팀별 규칙은 상위 정책을 완화하거나 우회할 수 없습니다.
동기화 상태 푸터(시스템 콘솔)
동기화 상태 푸터는 Team-specific membership rules 패널 하단에 렌더링됩니다. 패널 안에서 아래로 스크롤하면 확인할 수 있습니다.
- "Never synced."와 Sync now 링크 — 이 팀에 대해 아직 동기화가 실행된 적이 없습니다.
- "Last synced N minutes ago."와 Sync now 링크 — 이전 동기화 이후 상태입니다. 오래된 동기화는 시간 또는 일 단위로 표시됩니다.
- Sync now를 클릭하면 작업이 진행되는 동안 링크가 스피너와 함께 "Syncing…"으로 바뀌고, 완료되면 "Last synced just now."로 갱신됩니다.
멤버십 동기화 모니터링
시스템 관리자는 시스템 콘솔에서 팀 동기화 작업의 결과를 확인할 수 있습니다.
- System Console > System Attributes > Membership Policies로 이동해 Membership Sync Jobs 패널까지 스크롤합니다.
- 작업 행을 선택해 Sync Job Details 모달을 엽니다.
- Teams 탭을 선택합니다.
Teams 탭에는 팀별 행이 표시되며 다음 정보를 담고 있습니다.
- 정책이 적용된 각 팀의
+N added / −N removed요약. - 멤버의 50%를 초과해 제거될 팀 행에 표시되는 대량 제거 경고 표시. 이는 경고일 뿐이며 작업이 차단되지는 않습니다.
- 어떤 사용자가 추가되고 제거되었는지 보여 주는, 팀별로 펼칠 수 있는 사용자 상세 목록.
Teams 탭은 팀 동기화 작업을 직접 볼 때, 또는 팀 동기화에서 연쇄적으로 실행된 채널 동기화 작업을 볼 때만 나타납니다. 시스템 콘솔의 해당 섹션 제목은 두 작업 유형을 모두 담기 위해 "Channel access control sync jobs"에서 "Membership Sync Jobs"로 변경되었습니다.
Membership Policies 페이지의 Run Channel Sync 버튼은 채널 동기화만 실행하며 팀 동기화는 실행하지 않습니다. 팀 동기화를 실행하려면 팀별 시스템 콘솔 페이지나 Team Settings > Team Membership 탭의 Sync now 링크를 사용하세요.
팀 관리자 구성
Team Membership 탭
Mattermost v11.10부터 팀 설정에는 Info, Access, Team Membership, Channel Membership 네 개의 탭이 있습니다.
네 번째 탭의 이름은 이전에 Membership Policies였습니다. 지금은 Channel Membership으로 바뀌었고 채널 범위 정책만 다룹니다. 새로 추가된 Team Membership 탭(세 번째 탭)은 누가 팀 자체에 참여할 수 있는지를 제어하는 정책을 다룹니다.
Team Membership 탭에서 팀 관리자는 자기 팀에 적용된 시스템 정책을 확인하고 팀별 맞춤 규칙을 구성할 수 있습니다. 변경할 때마다 시스템 관리자의 개입이 필요하지 않습니다.
이 탭은 다음 조건이 모두 충족될 때만 보입니다.
- Enable Attribute-Based Access Control이 켜져 있습니다.
TeamMembershipAccessControl기능 플래그가 켜져 있습니다(기본값은 활성화).- 사용자에게
manage_team_access_rules권한이 있습니다(팀 관리자 또는 시스템 관리자).
팀 설정을 여는 방법: 사이드바에서 팀 이름 선택 → Team Settings → Team Membership 탭.
시스템 정책 표시
시스템 관리자가 팀에 시스템 수준 정책을 적용하면 Team Membership 탭 상단에 닫을 수 없는 정보 배너가 나타나며, 적용된 정책의 이름을 보여 줍니다. 상위 정책이 없으면 배너는 표시되지 않습니다.
맞춤 규칙 구성
팀 관리자는 시스템 정책 위에 추가로 적용되는 속성 규칙을 만들 수 있습니다. 이 규칙은 채널 규칙과 동일한 Basic Mode 편집기를 사용합니다.
- Add attribute를 선택합니다.
- 각 조건에 대해 속성, 연산자, 값을 선택합니다.
- 필요한 만큼 규칙을 추가합니다. 모든 규칙은 AND로 결합됩니다.
- Save를 선택해 저장 확인 모달을 엽니다.
모든 규칙을 지우고 저장하면 대신 "Remove membership rules?" 모달이 열립니다. 확인하면 팀의 속성 적용이 해제되며, 현재 멤버는 접근 권한을 그대로 유지합니다.
사용할 수 있는 연산자: Is, Is not, In, Starts with, Ends with, Contains. 순위 속성의 경우 Is exactly, Is at least, Is greater than, Is at most, Is less than입니다.
규칙을 저장하면 자동 추가가 꺼져 있어도 항상 즉시 팀 동기화가 실행됩니다. 비공개 팀에서는 규칙을 더 이상 충족하지 못하는 멤버가 제거됩니다. 저장하기 전에 확인 모달에서 영향 인원수를 검토하세요.
팀 설정의 규칙은 Basic Mode만 지원합니다. 고급 CEL 표현식은 여기서 사용할 수 없습니다. 중첩 논리나 혼합 연산자가 필요한 복잡한 규칙은 시스템 관리자가 시스템 콘솔에서 시스템 전체 상위 정책으로 만들어야 합니다.
멤버 자동 추가
Auto-add members based on access rules 체크박스는 동기화 작업이 조건을 충족하는 비멤버를 팀에 자동으로 추가할지 여부를 제어합니다.
- 이 체크박스는 규칙이 하나 이상 있거나 시스템 수준 정책이 적용되어 있을 때만 사용할 수 있습니다.
- 체크한 뒤 저장하면 즉시 백필 스캔이 실행되어, 조건을 충족하는 비멤버가 바로 추가됩니다.
- 이후 동기화에서도 새로 조건을 충족하게 된 사용자가 계속 추가됩니다.
- 자동 추가를 끄더라도 멤버가 제거되지는 않습니다. 자동 추가는 더하는 방향으로만 작동합니다. 또한 자동 추가를 끄는 동작은 동기화 작업을 실행하지 않습니다.
접근 규칙 테스트
Test access rule을 선택하면 저장하기 전에 현재 규칙에 맞는 사용자 목록을 보여 주는 미리 보기 모달이 열립니다. 이를 통해 규칙을 적용하지 않고도 의도한 범위를 확인할 수 있습니다.
현재 규칙이 편집 중인 팀 관리자 자신을 제외하게 되는 경우, Test access rule 버튼은 결과를 반환하는 대신 설명 툴팁과 함께 비활성화됩니다.
저장 확인과 안전장치
Save를 선택하면 변경을 적용하기 전에 확인 모달이 열립니다. 표시되는 내용은 팀의 모드에 따라 다릅니다.
비공개 팀(엄격):
- 현재 규칙에 맞아 접근 권한을 갖게 되는 사용자 수.
- 현재 멤버 중 규칙에 맞지 않아 영향을 받을 수 있는 인원수. 그 수가 0보다 클 때만 표시됩니다.
공개 팀(권고):
- 규칙이 권고 성격이며 누구도 차단하거나 제거하지 않는다는 안내.
- 현재 규칙에 맞는 사용자 수.
인원수는 팀의 규칙과 상위 정책을 결합한 기준으로 평가됩니다.
빈 팀 경고: 비공개 팀에서 규칙에 맞는 사용자가 하나도 없으면 모달에 강조된 경고가 표시됩니다. 저장이 차단되지는 않지만, 동기화가 실행되면 팀이 비게 됩니다.
자기 제외 차단: 비공개 팀에서 규칙이 편집 중인 팀 관리자 자신을 제외하게 되면, 확인 모달 이전에 별도의 오류 모달이 나타나 저장을 막습니다. Back to editing을 선택해 규칙을 조정하세요. 공개 팀은 예외입니다. 권고 모드는 누구도 제거하지 않기 때문입니다.
설계상 자기 제외 차단은 관리자 본인의 팀 규칙만 평가합니다. 관리자를 제외하는 시스템 수준 상위 정책은 시스템 관리자의 판단 영역이므로 여기서 차단하지 않습니다.
동기화 상태 푸터(팀 설정)
자동 추가 섹션 아래에는, 팀에 규칙이 하나 이상 있거나 상위 정책이 적용되어 있을 때 동기화 상태 푸터가 나타납니다.
- "Never synced." + Sync now 링크.
- "Last synced N minutes ago." + Sync now 링크.
- Sync now를 클릭한 뒤: 스피너와 함께 "Syncing…" → 완료 시 "Last synced just now.".
규칙도 상위 정책도 없는 빈 상태에서는 푸터가 표시되지 않습니다.
Sync now를 클릭하면 이 팀에만 적용되는 팀 동기화 작업이 생성됩니다.
최종 사용자 경험
Browse Teams
Browse Teams 디렉터리는 팀 ABAC 적용을 따릅니다.
비공개 + ABAC 팀(엄격 모드):
- 아직 멤버가 아니면서 조건을 충족하지 못하는 사용자에게는 Browse Teams에 팀이 아예 표시되지 않습니다. 흐리게 처리되거나 잠긴 상태로 보이는 것이 아니라 목록에서 사라집니다.
- 조건을 충족하는 사용자와 기존 멤버에게는 팀이 정상적으로 보입니다.
공개 + ABAC 팀(권고 모드):
- 모든 사용자에게 팀이 보입니다.
- 조건을 충족하면서 아직 멤버가 아닌 사용자에게는 팀 이름 옆에 Recommended 칩(전구 윤곽 아이콘)이 표시됩니다.
- 이미 멤버인 사용자나 정책 조건을 충족하지 못하는 사용자에게는 칩이 보이지 않습니다.
정책이 없는 팀:
- 이전과 완전히 동일하게 동작합니다. 필터링도 칩도 없습니다.
Invite People 모달
Invite People 모달은 팀의 적용 모드에 맞춰 달라집니다.
비공개 + ABAC 팀(엄격 모드):
- 팀의 멤버십 정책 조건을 충족하는 사용자만 검색 결과에 나타납니다. 조건을 충족하지 못하는 사용자는 결과가 표시되기 전에 걸러집니다.
- "Team access is restricted by user attributes"라는 제목의 안내가 관리자에게 "Only users who meet the membership requirements can be added to this team."이라고 알려 줍니다.
- 이 안내에는 정책의 속성 값 태그가 함께 표시됩니다(예: "Department: Engineering").
- 초대 링크에는 "People who use this link must meet the membership requirements to join."이라는 경고가 표시됩니다.
공개 + ABAC 팀(권고 모드):
- 모든 사용자가 검색 결과에 나타납니다. 권고 모드는 접근을 차단하지 않으므로 필터링이 없습니다.
- 그래도 "This team has membership requirements"라는 제목의 안내가 표시되며, 요건을 충족하지 못하는 사용자도 참여할 수는 있지만 자동으로 추가되지는 않는다고 설명합니다.
- 초대 링크에는 "People who use this link can join even if they do not meet the membership requirements, but will not be automatically added."이라는 경고가 표시됩니다.
정책이 없는 팀:
- 이전 동작에서 달라지는 점이 없습니다. 모든 사용자가 표시되고 안내는 나타나지 않습니다.
Add Members 흐름(관리자)
시스템 관리자나 팀 관리자가 비공개 + ABAC 팀에서 Add Members 관리자 흐름을 사용하면, 조건을 충족하지 못하는 사용자는 제출 시점이 아니라 선택 시점에 차단됩니다.
- 조건을 충족하지 못하는 후보자의 행에는 "Does not meet membership requirements" 표시가 나타나고, 키보드로도 선택할 수 없습니다.
- 조건을 충족하는 사용자만 선택에 담을 수 있으므로, 추가 작업이 중간에 실패하는 일이 없습니다.
공개 + ABAC 팀(권고 모드)에서는 제한 없이 모든 사용자를 추가할 수 있습니다.
Team Members 모달
팀에 활성화된 멤버십 정책이 있으면 Team Members 모달 상단에 안내 배너가 나타납니다.
- 비공개 팀: "Team access is restricted by user attributes" — 멤버십 요건을 충족하는 사람만 멤버가 될 수 있습니다.
- 공개 팀: "This team has membership requirements" — 요건을 충족하지 못하는 사람도 참여할 수는 있지만 자동으로 추가되지는 않습니다.
- 배너에는 정책의 속성 값 태그가 함께 표시됩니다(예: "Department: Engineering"). 보는 사람에게 열람 권한이 없는 값은 서버에서 제거되므로, 해당 값을 보유하지 않은 사용자에게는 안내 문구만 보입니다.
멤버십 알림
제거 알림: 동기화 작업이 비공개 팀에서 조건을 충족하지 못하는 멤버를 제거하면, 해당 사용자는 시스템 봇으로부터 어느 팀에서 제거되었는지 알리는 다이렉트 메시지를 받습니다. 이 메시지에는 정책 이름, 속성 값, CEL 표현식이 포함되지 않습니다.
자동 추가 알림: 동기화 작업이 조건을 충족하는 사용자를 팀에 자동으로 추가하면, 해당 사용자는 시스템 봇으로부터 어느 팀에 추가되었는지 알리는 다이렉트 메시지를 받습니다. 제거 알림과 자동 추가 알림은 서로 다른 아이콘을 사용하므로 한눈에 구분할 수 있습니다.
정책 상속과 조합
상위(시스템 수준) 정책과 팀 맞춤 규칙이 함께 적용될 때는 다음과 같이 동작합니다.
- 상위 정책은 Team Membership 탭 상단의 닫을 수 없는 정보 배너에 읽기 전용으로 표시됩니다.
- 사용자는 상위 정책과 팀 맞춤 규칙을 모두 충족해야 참여가 허용됩니다.
- 맞춤 규칙은 제한을 추가할 수만 있으며, 상위 정책을 완화하거나 우회할 수 없습니다.
- 상위 정책을 삭제해도 팀과의 연결이 해제되거나 팀 자체의 규칙이 삭제되지는 않습니다. 정책을 삭제하기 전에 각 팀에서 연결을 해제하세요.
동기화 동작
팀 동기화 배치는 다음 순서로 실행됩니다.
- 팀 멤버십 규칙 평가: 정책이 할당된 모든 팀을 대상으로 규칙을 평가합니다.
- 제거 단계(비공개 + ABAC 팀만 해당): 더 이상 조건을 충족하지 못하는 멤버를 제거합니다. 각 제거는 채널 연쇄를 유발하여 해당 사용자가 팀 내 모든 채널에서 제거됩니다. 각 제거는 시스템 봇 DM으로 사용자에게 알려지고 감사 로그에 기록됩니다. ABAC와 무관한 일반적인 팀 탈퇴는 정책에 의한 연쇄로 기록되지 않습니다.
- 자동 추가 단계(자동 추가가 활성화된 경우 모든 모드에서): 조건을 충족하는 비멤버를 팀에 추가합니다. 각 추가마다 시스템 봇 DM이 발송됩니다.
- 채널 멤버십 동기화(연쇄 실행): 채널 정책 변경을 평가하고 적용합니다. 이미 대기 중이거나 진행 중인 채널 동기화 작업이 있으면 중복 실행을 제거합니다.
대량 제거 안전장치: 동기화 단계에서 팀의 현재 멤버 중 50%를 초과해 제거하게 되는 경우, 작업은 Sync Job Details > Teams 탭에서 볼 수 있는 경고 플래그를 설정합니다. 작업이 차단되지는 않으며 모든 제거가 진행되지만, 관리자가 검토할 수 있도록 경고가 표시됩니다.
팀 동기화는 LDAP나 SAML에서 전파된 속성 변경을 처리하기 위해 일정에 따라 자동으로도 실행됩니다. 주기는 AccessControlSettings.SyncJobIntervalSeconds로 설정하며 기본값은 3600초(60분)입니다. 허용되는 최솟값은 60초이며, 변경 사항을 적용하려면 서버를 재시작해야 합니다. 같은 주기가 채널 멤버십 동기화에도 적용됩니다.
그룹 동기화와의 상호 배타성
LDAP/AD 그룹 동기화로 관리되는 팀에는 ABAC 멤버십 정책을 할당할 수 없습니다. 그룹 동기화 팀에 정책을 할당하려고 하면 오류가 반환됩니다.
팀마다 멤버십 제어 방식을 하나만 선택해야 합니다. 그룹 동기화 또는 ABAC 중 하나입니다.
문제 해결과 FAQ
Access 탭은 왜 바뀌었고 "Allow any user to join" 체크박스는 어디로 갔나요?
Mattermost v11.10부터 "Allow any user to join" 체크박스는 Access 탭의 Public Team과 Private Team 선택 카드로 영구히 대체되었습니다. 이 변경은 ABAC와 관계없이 모든 배포의 모든 팀에 적용됩니다. 카드는 기존 체크박스와 기능적으로 동일합니다. Public Team은 체크박스가 켜져 있던 상태와, Private Team은 꺼져 있던 상태와 같습니다.
팀 설정에 Team Membership 탭이 보이지 않는 이유는 무엇인가요?
이 탭에는 다음 조건이 모두 필요합니다.
- System Console > System Attributes > Attribute-Based Access에서 Enable Attribute-Based Access Control이 켜져 있어야 합니다.
TeamMembershipAccessControl기능 플래그가 켜져 있어야 합니다(기본값은 활성화).- 사용자에게
manage_team_access_rules권한이 있어야 합니다(팀 관리자 또는 시스템 관리자).
세 조건을 모두 충족했는데도 탭이 보이지 않으면 System Console > Experimental > Feature Flags나 서버 구성에서 기능 플래그가 비활성화되지 않았는지 확인하세요.
일부 사용자에게 비공개 ABAC 팀이 Browse Teams에 보이지 않는 이유는 무엇인가요?
의도된 동작입니다. 비공개 팀에 ABAC 정책이 있고 사용자가 그 정책을 충족하지 못하면, Browse Teams와 검색 결과에서 해당 팀이 완전히 숨겨집니다. 오류나 잠긴 항목이 보이는 것이 아니라 팀 자체가 나타나지 않습니다. 조건을 충족하는 사용자에게는 팀이 정상적으로 보입니다.
팀 설정에서 고급 CEL 표현식을 사용할 수 있나요?
아니요. Team Membership 탭은 Basic Mode만 사용하며, 이는 채널 설정에서 제공하는 것과 동일한 단순 속성 편집기입니다. 중첩 논리나 혼합된 && / || 연산자, 그룹화가 필요한 규칙은 시스템 관리자가 시스템 콘솔의 CEL 편집기로 시스템 전체 상위 정책을 만들어야 합니다.
그룹 동기화 팀에서 ABAC를 사용할 수 있나요?
아니요. 그룹 동기화와 ABAC는 팀 단위로 상호 배타적입니다. 팀이 그룹으로 제한되어 있으면 ABAC 정책을 할당할 때 오류가 반환됩니다. ABAC 정책을 적용하려면 먼저 그룹 동기화 구성을 제거해야 하며, 그 반대도 마찬가지입니다.
멤버십 변경은 얼마나 빨리 적용되나요?
팀 설정이나 시스템 콘솔에서 규칙을 저장하면 즉시 팀 동기화가 실행됩니다. 자동 추가가 꺼져 있을 때도 마찬가지인데, 적용(비공개 팀에서의 제거)은 자동 추가 설정과 관계없이 실행되기 때문입니다. 변경 사항은 동기화가 완료되는 즉시 적용됩니다. LDAP나 SAML의 속성 변경을 처리하기 위해 AccessControlSettings.SyncJobIntervalSeconds로 설정한 주기(기본값 60분)에 따라 예약된 동기화도 실행됩니다.
시스템 관리자 역할은 팀 ABAC 적용을 우회하나요?
아니요. 시스템 관리자를 포함한 모든 역할이 팀 ABAC 정책 평가의 대상입니다. 비공개 팀의 정책을 충족하지 못하는 시스템 관리자는 표준 UI를 통해 그 팀에 멤버로 참여할 수 없습니다. 다만 시스템 콘솔에서 해당 팀의 구성에 접근하고 변경하는 것은 여전히 가능합니다.
정책이 할당된 상태에서 팀을 공개에서 비공개로 바꾸면 어떻게 되나요?
팀 ABAC가 활성화되어 있고(Enterprise Advanced 라이선스와 Enable Attribute-Based Access Control) 팀에 정책이 할당되어 있으면, Private Team을 클릭할 때 "Switch to Private Team?" 확인 모달이 열리며 현재 멤버 중 정책 기준을 충족하지 못하는 인원수를 보여 줍니다. 전환을 확인하면 변경이 저장되고, 엄격 모드를 적용하기 위한 동기화가 즉시 실행됩니다. 조건을 충족하지 못하는 멤버는 그 동기화에서 제거됩니다.
전환을 시도하는 관리자 본인이 기준을 충족하지 못하면 "Cannot switch to Private Team" 모달과 함께 전환이 차단됩니다.
할당된 정책이 없으면 확인 없이 바로 저장됩니다.
정책이 할당된 상태에서 팀을 비공개에서 공개로 바꾸면 어떻게 되나요?
비공개에서 공개로 전환하면 항상 확인 모달 없이 바로 저장됩니다. 팀은 즉시 권고 모드로 전환되어, 조건을 충족하지 못하는 멤버를 포함한 기존 멤버가 그대로 유지되고 제거는 일어나지 않습니다. 정책은 조건을 충족하는 사용자에 대해 Recommended 태그와 선택적 자동 추가를 계속 구동합니다.
비공개 ABAC 팀에 조건을 충족하지 못하는 사용자를 추가할 수 있나요?
아니요. 적용 차단은 모든 추가 경로에 작동합니다. Invite People 모달(조건을 충족하지 못하는 사용자는 검색 결과에서 완전히 걸러집니다), Add Members 관리자 흐름(조건을 충족하지 못하는 사용자는 선택할 수 없습니다), 그리고 직접 호출하는 API 모두 해당합니다. 오류 메시지는 일반적인 문구로 표시되며 정책 이름이나 속성 정보를 노출하지 않습니다.
ABAC는 이메일 도메인 제한과 어떻게 상호작용하나요?
이메일 도메인 제한(Access 탭에서 구성)과 ABAC 규칙(Team Membership 탭)은 서로 독립적으로 적용되며, 사용자는 팀에 참여하기 위해 둘 다 충족해야 합니다. 도메인 검사가 먼저 실행되므로 도메인 때문에 거부된 사용자는 정책 평가까지 이르지 않습니다. 두 설정은 구성 시점에 서로 교차 검증되지 않으므로, 예기치 않은 접근 거부를 조사할 때는 둘을 함께 살펴보세요.
자동 추가가 꺼져 있는데도 규칙을 저장하면 동기화가 실행되는 이유는 무엇인가요?
자동 추가는 추가 단계(동기화가 조건을 충족하는 비멤버를 추가할지 여부)만 제어합니다. 적용 단계(비공개 팀에서 조건을 충족하지 못하는 멤버를 제거하는 것)는 규칙이 존재하기만 하면 자동 추가와 관계없이 실행됩니다. 이렇게 해야 새로 저장하거나 변경한 규칙이 다음 예약 동기화까지 최대 60분을 기다리지 않고 즉시 적용됩니다.