SSO
SAML2를 통한 SSO(Single Sign-On)는 OpenReplay Enterprise Edition에서만 사용할 수 있습니다.
Identity Provider(IDP) 설정
Section titled Identity Provider(IDP) 설정Identity Provider의 대시보드에서 openreplay라는 이름의 새 앱을 만듭니다(이 아이콘을 사용할 수 있습니다). 구성 페이지에서 다음 값을 설정하세요(YOUR_DOMAIN을 올바른 값으로 바꿔야 합니다. 예: https://openreplay.mycompany.com).
| 변수 | 값 |
|---|---|
| ACS URL (Single Sign On URL 또는 Consumer URL이라고도 함) | |
| Entity ID (Audience라고도 함) | |
| Single Logout URL (SLO URL이라고도 함) | (선택 사항) |
| Name ID (‘Attribute Statements’ 또는 ‘Parameters’ 섹션에서 설정할 수 있는 경우도 있음) | Email, EmailAddress 또는 urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress (Identity Provider에 따라 다름) |
| SAML initiator | Service Provider로 설정합니다 (선택 사항) |
‘Attribute Statements’ 또는 ‘Parameters’ 섹션에서 다음 필드를 반드시 정의하세요.
| 필드 | 값 |
|---|---|
| tenantKey | 이 값은 대시보드의 ‘Preferences’ > ‘Account’에서 확인할 수 있습니다 (Cloud Dedicated 플랜을 사용하는 경우 이 속성을 추가하지 마세요) |
| firstName | user.firstName |
| lastName | user.lastName |
| internalId | Internal ID 또는 user.email (ID 관리 시스템에서의 사용자 ID) (선택 사항) |
| groups | OpenReplay에서 사용자의 역할과 관리자 권한을 나타냅니다. Identity Provider에 따라 user.role 또는 group 등을 사용할 수 있습니다 (선택 사항, 기본값 = 관리자 권한이 없는 member). IdP 쪽에서 OpenReplay 역할 관리를 간소화하려면 관리자 권한을 가진 사용자를 모아 둔 OpenReplay-admin 그룹과, ‘member’ 역할을 가진 사용자를 모아 둔 OpenReplay-member 그룹을 만들 수 있습니다 |
이제 다음 단계/섹션에 필요한 값을 모두 확보했습니다.
SSO(SAML2) 설정
Section titled SSO(SAML2) 설정Cloud dedicated 플랜을 사용하는 경우 Console로 이동하여 인스턴스를 클릭한 다음 SSO 섹션에서 변수를 설정합니다.
그렇지 않고 Enterprise Edition을 실행하는 경우에는 openreplay -e를 실행한 다음 chalice 섹션의 아래 환경 변수 주석을 해제하고 값을 수정합니다.
| 변수 | 설명 |
|---|---|
| idp_entityId | Identity Provider의 entityId이며, Issuer URL이라고도 합니다 |
| idp_sso_url | Identity Provider의 singleSignOnService이며, SAML 2.0 Endpoint (HTTP)라고도 합니다 |
| idp_x509cert | x509cert이며, 줄 바꿈이 없는 한 줄 문자열이어야 합니다. 값의 형식을 맞추려면 이 도구를 사용할 수 있습니다 |
| idp_name | Identity Provider의 이름 (선택 사항) |
| idp_sls_url | Identity Provider의 singleLogoutService이며, SLO Endpoint (HTTP)라고도 합니다 (선택 사항) |
| enforce_SSO | true로 설정하면 사용자 이름과 비밀번호를 사용하는 모든 연결이 차단됩니다 (선택 사항, 기본값=false) |
| idp_group_prefixes | IdP 그룹 이름 접두사 (선택 사항, 기본값=OpenReplay-,or-) |
그런 다음 :wq를 입력해 저장하고 종료하면 변경 사항이 적용됩니다.
OpenReplay 인증서
Section titled OpenReplay 인증서선택 사항이며, SSO 보안을 강화하기 위해 x509 인증서를 추가할 수 있습니다.
- 서버 또는 보안 머신에서 다음 명령을 실행합니다(필요에 따라 인증서 유효 기간을 변경할 수 있습니다).
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout openreplay-sso.key -out openreplay-sso.crt
- 서버에서
openreplay -e를 실행합니다 chalice섹션 아래에 다음 환경 변수를 추가합니다.
- sp_crt: 생성된 ‘openreplay-sso.crt’ 파일의 내용을 줄 바꿈 없는 한 줄 문자열로 만든 값입니다(값의 형식을 맞추려면 이 도구를 사용할 수 있습니다)
- sp_key: 생성된 ‘openreplay-sso.key’ 파일의 내용을 줄 바꿈 없는 한 줄 문자열로 만든 값입니다
:wq를 입력해 저장하고 종료하면 변경 사항이 적용됩니다- 생성된 ‘openreplay-sso.crt’ 파일을 Identity Provider의 애플리케이션 구성에 추가합니다
Okta 사용 예시
Section titled Okta 사용 예시- Okta 관리 대시보드에 로그인하여 ‘Applications’ > ‘Applications’로 이동합니다
- ‘Create new app integration’을 누른 다음 SAML 2.0을 선택하고 ‘Next’를 누릅니다
- ‘App Name’을 OpenReplay로 설정하고(애플리케이션용으로 이 아이콘을 업로드할 수 있습니다) ‘Next’를 누릅니다
- 다음과 같이 설정합니다.
- Single sign on URL:
/api/sso/saml2/acs/YOUR_DOMAIN - Audience URI (SP Entity ID):
/api/sso/saml2/metadata/YOUR_DOMAIN - Name ID format:
EmailAddress
- ‘Next’를 누르고 ‘This is an internal app that we have created’를 선택한 다음 ‘Finish’를 누릅니다
- Sign On 탭에서 아래로 스크롤하여 ‘Show legacy configuration’을 누른 다음 ‘Edit’를 누릅니다
- ‘Profile Attribute Statements’에서 아래 필드를 정의합니다.
- tenantKey: 형식은
Basic, 값은로 설정합니다. 이 값은 OpenReplay 대시보드의 ‘Preferences’ > ‘Account’에서 확인할 수 있습니다 (Cloud Dedicated 플랜을 사용하는 경우 이 속성을 추가하지 마세요)TENANT_KEY - firstName: 형식은
Basic, 값은user.firstName으로 설정합니다 - lastName: 형식은
Basic, 값은user.lastName으로 설정합니다 - internalId: 형식은
Basic, 값은user.email로 설정합니다
- ‘Group Attribute Statement’에서 아래 필드를 정의합니다(선택 사항).
- groups: 형식
Basic, 필터Match Regex, 값OpenReplay-*(필요에 따라 다른 필터와 정규식을 지정할 수도 있습니다)
- ‘save’를 누르고 오른쪽 위로 스크롤하여 ‘View Setup Instructions’를 누르면 SAML2 구성을 확인할 수 있습니다
Cloud dedicated 플랜을 사용하는 경우 Console로 이동하여 인스턴스를 클릭한 다음 SSO 섹션에서 변수를 설정합니다.
그렇지 않고 Enterprise Edition을 실행하는 경우:
- OpenReplay가 설치된 서버에 SSH로 접속하여
openreplay -e를 실행합니다 chalice섹션 아래에서 다음 환경 변수의 주석을 해제하고 값을 설정합니다.
- idp_entityId: Identity Provider Issuer
- idp_sso_url: Identity Provider Single Sign-On URL
- idp_x509cert: X.509 Certificate이며, 줄 바꿈이 없는 한 줄 문자열이어야 합니다(값의 형식을 맞추려면 이 도구를 사용할 수 있습니다)
- idp_name: Okta
- 마지막으로
:wq를 입력해 저장하고 종료하면 변경 사항이 적용됩니다
Azure Active Directory 사용 예시
Section titled Azure Active Directory 사용 예시- Azure 포털에 로그인하여 ‘Azure Active Directory’로 이동합니다
- ’+ Add’를 누르고 ‘Enterprise application’을 선택한 다음 ‘Create your own application’을 클릭합니다
- ‘App Name’을 OpenReplay로 설정하고 ‘Integrate any other application you don’t find in the gallery (Non-gallery)‘를 선택한 다음 ‘Create’를 누릅니다
- 왼쪽 메뉴에서 ‘Single sign-on’으로 이동하여 ‘Basic SAML Configuration’ 블록에 아래 값을 설정합니다.
- Identifier (Entity ID):
/api/sso/saml2/metadata/YOUR_DOMAIN - Reply URL (Assertion Consumer Service URL):
/api/sso/saml2/acs/YOUR_DOMAIN - Logout URL:
/api/sso/saml2/sls/YOUR_DOMAIN
- ‘Attribute & Claims’ 블록에 아래 클레임을 추가하고, 각 클레임의 ‘Namespace’ 필드는 비워 둡니다.
- tenantKey: 값을
로 설정합니다. 이 값은 OpenReplay 대시보드의 ‘Preferences’ > ‘Account’에서 확인할 수 있습니다 (Cloud Dedicated 플랜을 사용하는 경우 이 속성/클레임을 추가하지 마세요)TENANT_KEY - firstName: 값을
user.givenname으로 설정합니다 - lastName: 값을
user.surname으로 설정합니다 - internalId: 값을
user.mail로 설정합니다
- ‘Users and groups’로 이동하여 선택한 사용자를 애플리케이션에 할당합니다
Cloud dedicated 플랜을 사용하는 경우 Console로 이동하여 인스턴스를 클릭한 다음 SSO 섹션에서 변수를 설정합니다(값은 ‘Azure Active Directory’ > ‘OpenReplay’ > ‘Single sign-on’에서 확인할 수 있습니다).
그렇지 않고 Enterprise Edition을 실행하는 경우:
- OpenReplay가 설치된 서버에 SSH로 접속하여
openreplay -e를 실행합니다 chalice섹션 아래에서 다음 환경 변수의 주석을 해제하고 값을 설정합니다(값은 ‘Azure Active Directory’ > ‘OpenReplay’ > ‘Single sign-on’에서 확인할 수 있습니다).
- idp_entityId: Azure AD Identifier
- idp_sso_url: Login URL
- idp_sls_url: Logout URL
- idp_x509cert: X.509 Certificate이며, 줄 바꿈이 없는 한 줄 문자열이어야 합니다(값의 형식을 맞추려면 이 도구를 사용할 수 있습니다)
- idp_name: Active Directory
- 마지막으로
:wq를 입력해 저장하고 종료하면 변경 사항이 적용됩니다
Google Workspace(구 G Suite) 사용 예시
Section titled Google Workspace(구 G Suite) 사용 예시사용자 지정 속성 추가:
Section titled 사용자 지정 속성 추가:- Google Admin 콘솔에서 ‘Directory’ > ‘Users’ > ‘More options’ > ‘Manage custom attributes’로 이동합니다.
- ‘Add Custom Attribute’를 클릭합니다.
- 다음 필드를 설정합니다.
- Category: ‘OpenReplay’
- Custom fields:
- Name: ‘role’
- Info type: ‘Text’
- Visibility: ‘Visible to user and admin’
- No. of values: ‘Single-value’
- Custom fields:
- Name: ‘adminPrivileges’
- Info type: ‘Yes or No’
- Visibility: ‘Visible to user and admin’
- No. of values: ‘Single-value’
- ‘Add’를 클릭합니다
- 새 사용자 지정 속성에 값을 추가하려면 ‘Users’로 이동합니다
- 원하는 사용자를 선택합니다
- ‘User information’을 클릭한 다음 ‘OpenReplay’ 섹션을 편집합니다
- role 값을 ‘OpenReplay’에서 사용할 역할로 변경합니다(해당 역할은 OpenReplay 대시보드의 ‘Preferences’ > ‘Roles’에서 생성한 역할과 일치해야 합니다)
- 사용자에게 OpenReplay 관리자 권한을 부여하려면 adminPrivileges 값을 ‘Yes’로 변경합니다
- ‘Save’를 클릭합니다
- Google Admin 콘솔에 로그인하여 ‘Apps’로 이동합니다
- ‘Web and mobile apps’를 누른 다음 ‘Add app’ > ‘Add custom SAML app’을 클릭합니다
- ‘App name’을 OpenReplay로 설정하고(‘App icon’에는 이 아이콘을 업로드할 수 있습니다) ‘Continue’를 누릅니다
- ‘SSO URL’, ‘Entity ID’, ‘Certificate’를 복사한 다음 ‘Continue’를 클릭합니다(이 값들은 11단계에서 사용합니다)
- 다음과 같이 설정합니다.
- ACS URL:
( /api/sso/saml2/acs/YOUR_DOMAIN /TENANT_KEYTENANT_KEY는 OpenReplay 대시보드의 ‘Preferences’ > ‘Account’에서 확인할 수 있지만, Cloud Dedicated 플랜을 사용하는 경우 tenantKey 값은 비워 둡니다) - Entity ID:
/api/sso/saml2/metadata/YOUR_DOMAIN - Name ID format:
Email - Name ID:
Basic information > Primary Email
- ‘Continue’를 클릭한 다음 ‘Add Mapping’을 눌러 아래 속성을 추가합니다.
Basic information > First Name-> firstNameBasic information > Last Name-> lastNameBasic information > Primary Email-> internalIdOpenReplay > groups-> groups
- ‘Finish’를 클릭합니다
- Google Admin 콘솔에서 ‘Apps’ > ‘Web and mobile apps’로 이동하여 ‘OpenReplay’를 선택합니다
- ‘User access’를 클릭하고 ‘ON for everyone’을 선택한 다음 ‘Save’를 누릅니다
Cloud dedicated 플랜을 사용하는 경우 Console로 이동하여 인스턴스를 클릭한 다음 SSO 섹션에서 변수를 설정합니다.
그렇지 않고 Enterprise Edition을 실행하는 경우:
- OpenReplay가 설치된 서버에 SSH로 접속하여
openreplay -e를 실행합니다 chalice > env섹션 아래에서 4단계에서 확인한 값을 사용하여 다음 속성의 주석을 해제하고 값을 설정합니다.
- idp_sso_url: ‘SSO URL’ 값을 붙여넣습니다
- idp_entityId: ‘Entity ID’ 값을 붙여넣습니다
- idp_x509cert: 복사했거나 다운로드한 인증서는 이 도구를 사용하여 형식을 맞춥니다
- idp_name: 값을
G-Suite로 설정합니다 - idp_tenantKey:
(OpenReplay 대시보드의 ‘Preferences’ > ‘Account’에서 확인할 수 있습니다)TENANT_KEY
- 마지막으로
:wq를 입력해 저장하고 종료하면 변경 사항이 적용됩니다
JumpCloud 사용 예시
Section titled JumpCloud 사용 예시- JumpCloud 관리 대시보드에 로그인하여 왼쪽 메뉴에서 ‘SSO’로 이동합니다
- ’+ Add New Application’을 누른 다음 ‘Custom SAML App’을 선택합니다
- ‘Display Label’을 OpenReplay로 설정하고(애플리케이션용으로 이 아이콘을 업로드할 수 있습니다) ‘SSO’ 탭으로 이동합니다
- 다음과 같이 설정합니다.
- IdP Entity ID:
openreplay/(TENANT_KEYTENANT_KEY는 OpenReplay 대시보드의 ‘Preferences’ > ‘Account’에서 확인할 수 있지만, Cloud Dedicated 플랜을 사용하는 경우 tenantKey 값은 비워 둡니다) - SP Entity ID:
/api/sso/saml2/metadata/YOUR_DOMAIN - ACS URL:
/api/sso/saml2/acs/YOUR_DOMAIN - SAMLSubject NameID:
email - SAMLSubject NameID Format:
urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress - Signature Algorithm:
RSA-SHA256 - Sign Assertion 옵션을 선택합니다
- IDP URL:
openreplay-로 끝나도록 설정합니다(이 값은 나중에 변경할 수 없습니다. Cloud Dedicated 플랜을 사용하는 경우 tenantKey 부분은 비워 둡니다)TENANT_KEY
- OpenReplay 인증서 안내를 따랐다면 ‘Upload SP Certificate’를 눌러 생성된 ‘openreplay-sso.crt’ 파일을 업로드할 수 있으며, 그렇지 않다면 이 단계는 건너뜁니다
- ‘add attribute’ 버튼을 눌러 ‘USER ATTRIBUTE MAPPING’에서 아래 필드를 정의합니다.
- firstName: 값을
firstname으로 설정합니다 - lastName: 값을
lastname으로 설정합니다 - internalId: 값을
email로 설정합니다 - groups: 선택 사항이며, OpenReplay에서 사용자의 역할과 관리자 권한을 나타냅니다. 모든 사용자에게 동일한 상수 값이라면 다음 단계에서 정의해야 하고, 그렇지 않다면 JumpCloud의 그룹에 새 문자열 속성을 추가하여 이름을
OpenReplay-groups로 지정하고 값을 역할 이름으로 설정한 다음, SSO 구성에서 ‘Custom User or Group Attribute’를 선택하고 값을OpenReplay-groups로 설정해야 합니다.
- ‘add attribute’ 버튼을 눌러 ‘CONSTANT ATTRIBUTES’에서 아래 필드를 정의합니다.
- tenantKey: 값을
로 설정합니다. 이 값은 OpenReplay 대시보드의 ‘Preferences’ > ‘Account’에서 확인할 수 있습니다 (Cloud Dedicated 플랜을 사용하는 경우 이 속성을 추가하지 마세요)TENANT_KEY - groups: 선택 사항입니다. 이전 단계에서 정의했다면 무시하세요. OpenReplay에서 사용자의 역할과 관리자 권한을 나타내며, OpenReplay에 이미 정의된 역할 이름과 일치해야 합니다 (기본값 = 관리자 권한이 없는
member)
- 이 단계에서 ‘User Groups’ 탭으로 이동하여 OpenReplay에 접근할 사용자 그룹을 선택할 수 있으며, 나중에 해도 됩니다
- ‘activate’를 누른 다음 확인 팝업에서 ‘continue’를 누릅니다
- 새로 만든 OpenReplay 애플리케이션 아이콘을 누른 다음 왼쪽 드롭다운 ‘IDP Certificate Valid’에서 ‘Download certificate’를 선택합니다
Cloud dedicated 플랜을 사용하는 경우 Console로 이동하여 인스턴스를 클릭한 다음 SSO 섹션에서 변수를 설정합니다.
그렇지 않고 Enterprise Edition을 실행하는 경우:
- OpenReplay가 설치된 서버에 SSH로 접속하여
openreplay -e를 실행합니다 chalice섹션 아래에서 다음 환경 변수의 주석을 해제하고 값을 설정합니다.
- idp_entityId:
openreplay/TENANT_KEY - idp_sso_url:
https://sso.jumpcloud.com/saml2/openreplay-TENANT_KEY - idp_x509cert: 다운로드한 인증서이며, 줄 바꿈이 없는 한 줄 문자열이어야 합니다(값의 형식을 맞추려면 이 도구를 사용할 수 있습니다)
- idp_name: JumpCloud
- 마지막으로
:wq를 입력해 저장하고 종료하면 변경 사항이 적용됩니다
SCIM(System for Cross-domain Identity Management) 프로비저닝
Section titled SCIM(System for Cross-domain Identity Management) 프로비저닝OpenReplay는 Enterprise Edition에서 사용자 ID를 프로비저닝하는 기능을 지원합니다.
OpenReplay의 SCIM 서비스와 연동하려면 Identity Provider 대시보드에서 SCIM 프로비저닝을 활성화하기만 하면 됩니다. 원활한 연동을 위해 다음 값을 반드시 설정하세요.
| 변수 | 설명 |
|---|---|
| SCIM connector base URL | /api/sso/scim/v2/ |
| User unique identifier field name | email |
| Support provisioning actions | Push new users, Push profile updates, Push groups |
| Authentication mode | OAuth2 |
| Access token endpoint | /api/sso/scim/v2/token/ |
| Authorization endpoint | /api/sso/scim/v2/authorize/ |
| Client id | 이 값은 대시보드의 ‘Preferences’ > ‘Account’에서 확인할 수 있습니다 |
| Client secret | 이 값은 Postgres 데이터베이스에서 다음 쿼리를 실행하여 확인할 수 있습니다: SELECT tenant_secret FROM tenants WHERE tenant_key = ' |
이 값들을 설정한 후에는 Identity Provider 대시보드의 안내에 따라 연동을 테스트하고 애플리케이션을 승인합니다.
[선택 사항] openreplay -e를 실행하고 chalice/environment를 찾아 변수 SCIM_ALLOWED_REDIRECT_HOSTS에 IdP의 호스트를 정의합니다. 기본값은 .okta.com입니다. 호스트를 잘 모르거나 더 엄격한 값을 사용하고 싶다면 IdP 인증을 시도한 다음 chalice 로그에 출력된 값을 확인하세요.
이후에는 OpenReplay를 SCIM Service Provider로 사용하여 사용자 ID를 프로비저닝할 수 있습니다.
참고: OpenReplay는 SCIM Service Provider로 동작하지만, 사용자를 여러 그룹으로 나누는 것은 지원하지 않습니다(즉, 각 사용자는 하나의 그룹에만 속할 수 있습니다). 이를 지키지 않으면 사용자가 예상보다 적거나 많은 프로젝트에 할당되거나, OpenReplay 애플리케이션에서 예상보다 적거나 많은 권한을 가질 수 있습니다.
Okta 사용 예시
Section titled Okta 사용 예시SAML 2.0 애플리케이션에서 다음을 수행합니다.
SCIM 프로비저닝 추가
Section titled SCIM 프로비저닝 추가- General 탭을 클릭합니다
- App Settings 섹션에서 Edit을 클릭합니다
- Provisioning 필드에서 SCIM을 선택하고 Save를 클릭합니다
프로비저닝 옵션 선택
Section titled 프로비저닝 옵션 선택- Provisioning 탭을 클릭합니다. SCIM 연결 설정은 Settings > Integration 아래에 표시됩니다.
- Settings > Integration에서 Edit을 클릭합니다.
- 위에서 설명한 SCIM connector base URL과 사용자 고유 식별자의 필드 이름을 지정합니다.
- Supported provisioning actions에서 위에서 설명한 프로비저닝 작업을 선택합니다.
- Authentication Mode 드롭다운을 위에서 설명한 값으로 설정합니다.
- 위에서 설명한 대로 Access token endpoint, Authorization endpoint, Client id, Client secret을 설정합니다.
- Save를 클릭합니다.
- Authenticate application을 클릭합니다.
- Provisioning 탭에서 To App을 클릭합니다.
- Edit을 클릭하고
Create Users,Update User Attributes,Deactivate Users를 활성화한 다음 변경 사항을 저장합니다(저장 후에도 이 옵션들이 선택되어 있는지 확인하세요. 선택되어 있지 않다면 페이지를 새로 고치고 이 단계를 다시 수행하세요).
- 다음 단계를 시작하기 전에 Okta에서 새 그룹을 만드는 것을 권장합니다. OpenReplay에서 관리자 권한을 가진 사용자를 나열하는
OpenReplay-admin그룹과, OpenReplay에서member역할을 가진 사용자를 나열하는OpenReplay-members그룹을 만들면 됩니다. …
- Push Groups 탭으로 이동하여 + Push Groups(by name 또는 by rule)를 클릭하고, OpenReplay로 푸시할 그룹을 선택한 다음 save를 누릅니다
- 이 시점에서 푸시된 그룹은 OpenReplay의 역할과 관리자 권한을 나타내며, OpenReplay용으로 프로비저닝된 사용자 목록은 포함하지 않습니다.
- Assignmets 탭으로 이동하여 편한 방법(사용자 또는 그룹)으로 사용자를 추가합니다
응답이 https가 아닌 http로 수신됨
Section titled 응답이 https가 아닌 http로 수신됨이는 매우 흔한 문제이며, 요청에 ‘X-Forwarded-Proto’ 헤더가 없기 때문에 발생합니다. 이를 해결하려면 로드 밸런서가 해당 헤더를 OpenReplay 백엔드로 올바르게 전달하는지 확인하고, openreplay -e를 실행한 다음 ingress-nginx > config 섹션에서 use-forwarded-headers: true 줄의 주석을 해제합니다.