2. Azure Application Registration의 필요성과 활용 시기
앱 등록이란?
- 클라우드에서 애플리케이션을 안전하게 만들고, 구성하고, 관리하고, 모니터링하는 프로세스이다.
- 앱 등록은 인증 및 관련 요구 사항에 플랫폼을 사용하는 애플리케이션의 기본 진입점이다.
- 애플리케이션을 등록하면 앱과 Microsoft ID 플랫폼 간에 신뢰 관계가 설정되며, 이 신뢰는 단방향이다.
- 앱은 Microsoft ID 플랫폼을 신뢰하지만 반대로는 신뢰하지 않는다.
- 일단 만들어진 애플리케이션 개체는 서로 다른 테넌트 간에 이동시킬 수 없다.
- 새로운 테넌트에서 애플리케이션을 다시 등록하고, 기존 테넌트에서 사용하던 모든 역할 및 권한을 새로 등록한 애플리케이션에 매핑해야 한다.
- 앱 등록시 제로트러스트 원칙에 입각해 등록하는것이 바람직하다.
제로 트러스트의 원칙
하루에도 수십건의 보안 문제가 터져나오고, 반대로 환경의 복잡성은 증가하고 있는 오늘날 이러한 보안 문제를 예방하고 추가로 모바일 인력을 수용하며, 위치에 관계없이 사용자-디바이스-애플리케이션-데이터를 보호하고자 나타난 새로운 보안 모델이다. 위반을 가정하고, 각 요청을 제어되지 않은 네트워크에서 시작한 것으로 확인하는 보안 모델이며, 아래와 같은 지침이 있다.
- 명시적으로 확인: 사용 가능한 모든 데이터 요소에 따라 항상 인증하고 권한을 부여한다.
- 최소 권한 액세스 사용: JIT/JEA(Just-In-Time and Just-Enough-Access), 위험 기반 적응 정책 및 데이터 보호를 사용하여 사용자 액세스를 제한한다.
- 위반 가정: 폭발 반경 및 세그먼트 액세스를 최소화한다. 엔드투엔드 암호화를 확인하고, 분석을 사용하여 가시성을 확보하고, 위협 탐지를 추진하고, 방어를 향상시킨다.
앱 등록의 필요성
앱 등록은 애플리케이션이 Azure AD와 통합되어 인증 및 권한 부여를 관리할 수 있도록 한다. 이를 통해 애플리케이션이 보안적으로 사용자 데이터를 접근하고 관리할 수 있다.
- 보안 강화: 애플리케이션이 Azure AD를 통해 인증 및 권한 부여를 받음으로써, 보안 수준을 높일 수 있다. 이를 통해 사용자 데이터와 리소스를 안전하게 보호할 수 있다.
- 중앙 집중식 관리: Azure AD를 통해 애플리케이션의 접근 권한을 중앙에서 관리할 수 있어, 관리가 용이하고 효율적이다.
- 확장성: 다양한 애플리케이션과 서비스가 Azure AD와 통합되어, 확장성과 유연성을 높일 수 있다. 이를 통해 다양한 비즈니스 요구사항을 충족할 수 있다.
- 자동화 및 모니터링: 애플리케이션의 배포 및 관리를 자동화하고, 모니터링 도구와 통합하여 리소스의 상태를 실시간으로 모니터링할 수 있다.
- 규정 준수: Azure AD를 통해 애플리케이션이 규정 준수 요구사항을 충족할 수 있도록 지원한다. 이를 통해 법적 및 규제 요구사항을 준수할 수 있다.
앱 등록 활용 시기
- 애플리케이션 개발 초기: 개발 초반, Azure AD와 통합하여 인증 및 권한 부여를 설정한다. 이를 통해 보안적으로 사용자 데이터를 관리할 수 있다.
- 멀티 테넌트 애플리케이션 개발 시: 여러 조직에서 사용할 수 있는 멀티 테넌트 애플리케이션을 개발할 때, 각 테넌트의 사용자 계정을 지원하기 위해 앱 등록이 필요하다.
- 보안 및 규정 준수 요구 시: 애플리케이션이 특정 보안 표준이나 규정 준수 요구사항을 충족해야 할 때, Azure AD와의 통합을 통해 이를 관리할 수 있다.
- 자동화 및 모니터링 필요 시: 애플리케이션의 배포 및 관리를 자동화하고, 모니터링 도구와 통합하여 리소스의 상태를 실시간으로 모니터링할 때 유용하다.
취약점에 관해
Application Registration은 중앙 관리형 구조이다. 이는 여러 장점을 제공하나, 몇 가지 잠재적 위험 요소 또한 존재함을 의미한다. 아래와 같은 취약점이 있을 수 있다.
- 단일 실패지점: 중앙 관리형 시스템은 SPOF를 가질 수 있다. 만약 Azure AD에 문제가 발생하면, 모든 애플리케이션이 영향을 받을 수 있습니다.
- 권한 남용: 중앙 관리자가 과도한 권한을 가지게 되면, 권한 남용의 위험이 있다. 예를 들어, 잘못된 설정이나 권한 부여로 인해 보안 취약점이 발생할 수 있다.
- 보안 취약점: 중앙 관리형 시스템은 해커의 주요 타겟이 될 수 있다. 실제로 최근 Microsoft Entra ID에서 취약점이 발견되기도 하였다.
그렇다면 중앙 관리형에 대한 위협에 대해 어떻게 이를 방지할 것인가? Azure의 경우, 모든 공격 시도를 막는 것은 애초에 불가능하기에 공격 발생시 피해를 최소화 하는 방안을 선택하였다.
- MFA 사용: 다중 인증을 통해 보안 수준을 높이고, 단일 실패 지점의 영향을 최소화한다.
- 권한 분리: RBAC을 통해 권한을 분리하고, 최소 권한 원칙을 적용하여 권한 남용을 방지한다.
- 정기적인 보안 평가: 정기적으로 보안 평가와 취약점 스캔을 수행하여, 잠재적인 보안 취약점을 사전에 발견하고 대응한다.
- 보안 업데이트 적용: 최신 보안 패치를 신속하게 적용하여, 알려진 취약점을 해결한다.
앱을 추가하고 등록할 수 있는 사용자는?
- 관리자 및 테넌트가 허용하는 경우, 사용자 및 개발자는 Azure Portal에서 애플리케이션을 등록하여 애플리케이션 개체를 만들 수 있다.
- 기본적으로 디렉터리의 모든 사용자는 개발하는 애플리케이션 개체를 등록할 수 있다.
- 애플리케이션 개체 개발자는 어떤 애플리케이션을 공유할 것이며, 동의를 통해 조직 데이터에 액세스할 수 있도록 할지를 결정한다.
- 디렉터리의 첫 번째 사용자가 애플리케이션에 로그인하고 동의를 부여하면 시스템은 테넌트에 모든 사용자 동의 정보를 저장하는 서비스 주체를 만든다.
- Microsoft Entra ID는 사용자가 인증하기 전에 테넌트에 새로 등록된 앱에 대한 서비스 주체를 자동으로 만든다.
- 적어도 애플리케이션 관리자 또는 클라우드 애플리케이션 관리자 역할이 할당된 사용자는 특정 애플리케이션 작업을 수행할 수 있다.
- ex) 앱 갤러리에서 애플리케이션 추가 및 애플리케이션 프록시를 사용하도록 애플리케이션 구성
- 개발자의 경우 Microsoft ID 플랫폼을 사용해 앱을 등록하고, 엔드포인트에 요청을 전송하여 Microsoft ID 플랫폼과 통신한다.
애플리케이션 등록 속성의 구성요소
- 이름, 로고 및 게시자
- 리디렉션 URI: 인증 후 사용자를 리디렉션할 URI이다. 주로 웹 애플리케이션에서 사용된다.
- 클라이언트 시크릿 및 인증서: 애플리케이션이 Azure AD와 통신할 때 사용하는 인증정보이다.
- API 종속성(OAuth): 애플리케이션이 특정 API에 접근할 수 있도록 권한을 설정한다.
- Delegated permissions(사용자가 로그인한 상태에서 애플리케이션이 API에 접근)
- Application permissions(애플리케이션 자체가 API에 접근)
- 게시된 API/리소스/범위(OAuth): 애플리케이션이 제공하는 API를 다른 애플리케이션이 사용할 수 있도록 설정한다. 이를 통해 다른 애플리케이션이 해당 API에 접근할 수 있는 권한을 요청할 수 있다.
- 앱 역할: 애플리케이션 내에서 RBAC를 설정해 사용자나 다른 애플리케이션이 특정 역할을 수행할 수 있도록 한다.
- SSO(Single Sign-On), 사용자 프로비저닝 및 프록시에 대한 메타데이터 및 구성
'지원되는 계정 유형'을 선택하여 어떤 유형의 사용자 계정을 애플리케이션이 지원할지를 정의한다.
애플리케이션을 등록할 때 애플리케이션(클라이언트) ID라는 고유 식별자를 받게 되고, 이 ID는 애플리케이션을 고유하게 식별하는 값으로 Azure AD와의 통신에서 중요한 역할을 한다.
앱 등록 지침
- Microsoft ID 플랫폼 통합 검사 목록을 사용하여 앱의 품질과 보안을 유지한다.
- 리디렉션 URI을 올바르게 정의한다.
- 도메인 인수를 방지하기 위해 소유권에 대한 앱 등록의 리디렉션 URI를 확인한다.
- 리디렉션 URI는 알고 소유한 도메인에 있어야 한다.
- 불필요하고 사용되지 않는 URI를 정기적으로 검토하고 제거한다.
- 프로덕션 앱에서는 https가 아닌 URI를 사용하지 않는것이 좋다.
- 항상 테넌트에서 등록된 앱에 대한 앱 및 서비스 주체 소유자를 정의하고 유지 관리한다.
- 여러 앱에 대해 동일한 앱 등록을 사용하지 않는다.
- 앱 등록을 분리하면 최소 권한 액세스를 사용하도록 설정하고, 위반 시 영향을 줄일 수 있다.
- 웹앱 및 API에 대해 별도의 앱 등록을 사용한다.
- 웹 API에 더 높은 사용 권한 집합이 있는 경우 클라이언트 앱이 상속하지 않도록 하는 데 도움이 된다.
- 필요한 경우에만 애플리케이션을 다중 테넌트 앱으로 정의한다.
- 다중 테넌트 앱은 사용자 이외의 테넌트에서 프로비저닝할 수 있기 때문에 원치 않는 액세스를 필터링하려면 더 많은 관리 오버헤드가 필요하다.
-앱을 다중 테넌트 앱으로 개발하려는 경우가 아니면 AzureADMyOrg의 SignInAudience 값으로 설정한다.
- 다중 테넌트 앱은 사용자 이외의 테넌트에서 프로비저닝할 수 있기 때문에 원치 않는 액세스를 필터링하려면 더 많은 관리 오버헤드가 필요하다.