애플리케이션 ID 및 액세스 관리
이 문서에서는 애플리케이션 소유자와 개발자가 클라우드 네이티브 애플리케이션에 대한 ID 및 액세스 관리를 디자인하는 데 사용할 수 있는 고려 사항 및 권장 사항을 설명합니다.
팀에서 클라우드 네이티브 애플리케이션을 마이그레이션하거나 만드는 경우 애플리케이션에 대한 인증 및 액세스 요구 사항을 고려해야 합니다. 이러한 요구 사항은 웹 애플리케이션이 SQL 데이터베이스에 액세스하는 경우와 같이 사용자가 애플리케이션에 인증하는 방법과 애플리케이션 리소스가 서로 인증하는 방법을 결정합니다.
플랫폼 자동화 및 DevOps 디자인 영역에서 애플리케이션 팀이 워크로드를 구독 자동 판매 전환하는 것이 좋습니다. 구독 자동 판매 프로세스의 일부로 애플리케이션 팀은 적절한 구독을 만들 수 있도록 플랫폼 팀에 ID 및 액세스 요구 사항을 제공해야 합니다. 애플리케이션 소유자는 개별 애플리케이션의 ID 및 액세스 관리를 담당합니다. 플랫폼 팀에서 제공하는 중앙 집중식 서비스를 사용하여 애플리케이션을 관리해야 합니다.
디자인 고려 사항
애플리케이션에 대한 무단 액세스 위험을 줄이려면 다음 고려 사항을 디자인에 통합합니다.
OAuth 2.0, OpenID Connect, JWT(JSON 웹 토큰) 및 SAML(보안 어설션 태그 언어)과 같은 여러 인증 및 권한 부여 표준이 있습니다. 애플리케이션에 사용할 인증 및 권한 부여 표준을 결정합니다.
플랫폼 팀에서 애플리케이션 랜딩 존을 요청하는 경우 다음과 같은 질문을 하여 적절한 구독을 만들도록 할 수 있습니다.
최종 사용자가 애플리케이션에 인증하고 액세스하려면 어떻게 해야 할까요?
애플리케이션에서 사용하는 리소스 및 서비스에 대한 RBAC(역할 기반 액세스 제어) 권한이 필요한 사람은 누구인가요?
기존 기본 제공 역할은 컨트롤 플레인 및 데이터 평면 액세스 모두에 대한 RBAC 액세스 요구 사항을 포함합니까, 아니면 새 사용자 지정 역할을 만들어야 합니까?
플랫폼 팀이 애플리케이션에 문제를 일으킬 수 있는 규정 준수 정책을 구현했나요?
어떤 애플리케이션 구성 요소가 서로 통신해야 합니까?
플랫폼 랜딩 존에 배포된 Microsoft Entra Domain Services와 같은 공유 리소스에 액세스하기 위한 요구 사항이 있나요?
Azure Key Vault 및 관리 ID
퍼블릭 클라우드 리소스의 보안 위반은 코드 또는 기타 텍스트에 포함된 유출된 자격 증명에서 발생하는 경우가 많습니다. 관리 ID 및 Key Vault 를 사용하여 프로그래밍 방식 액세스를 구현하고 자격 증명 도난 위험을 줄일 수 있습니다.
애플리케이션 또는 워크로드에 자격 증명을 안전하게 저장하기 위해 서비스가 필요한 경우 Key Vault를 사용하여 비밀, 키 및 인증서를 관리할 수 있습니다.
코드에 자격 증명이 없도록 하려면 Azure VM에서 관리 ID를 사용하여 Microsoft Entra ID 인증을 지원하는 모든 서비스에 인증할 수 있습니다. 자세한 내용은 VM에서 Azure 리소스에 대한 관리 ID를 사용하여 액세스 토큰을 획득하는 방법을 참조하세요.
관리 ID는 애플리케이션과 리소스가 Microsoft Entra ID 인증을 지원하는 리소스에 연결할 때 사용하는 자동으로 관리 ID 보안 주체를 제공합니다. 애플리케이션은 관리 ID를 사용하여 자격 증명을 관리할 필요 없이 Microsoft Entra ID 토큰을 가져올 수 있습니다.
시스템 할당 또는 사용자 할당 관리 ID를 사용할 수 있습니다.
서비스 주체 및 관리 ID가 Azure 리소스에 액세스하는 방식을 혼동하기 쉽습니다. 둘 의 차이점을 이해하려면 서비스 주체인 관리 ID를 Demystifying을 참조하세요.
가능한 경우 관리 ID를 사용하여 서비스 주체 및 Microsoft Entra ID 앱 등록을 사용하는 대신 인증을 지원합니다. 서비스 주체 및 앱 등록을 만들려면 애플리케이션 관리자 또는 애플리케이션 개발자 RBAC 역할이 있어야 합니다. 이러한 권한 있는 역할은 일반적으로 플랫폼 팀 또는 ID 팀에 할당됩니다. 관리 ID를 사용하여 플랫폼 팀이 애플리케이션 팀에 대한 서비스 주체 및 앱 등록을 만들 필요가 없습니다.
관리 ID를 사용하여 Microsoft Entra 인증을 지원하는 모든 서비스에 인증할 수 있습니다. 그러나 모든 서비스가 관리 ID를 지원하여 다른 서비스에 액세스하는 것은 아닙니다. 일부 서비스의 경우 자격 증명을 저장해야 할 수 있습니다. 자격 증명을 안전하게 저장하고, 자격 증명을 다른 서비스와 공유하지 말고, 최소 권한 원칙을 따라야 합니다. 자세한 내용은 관리 ID를 사용하여 다른 서비스에 액세스할 수 있는 Azure 서비스를 참조 하세요.
Azure VM(가상 머신)과 함께 관리 ID를 사용하여 Microsoft Entra ID 인증을 지원하는 모든 서비스에 인증할 수 있습니다. 자세한 내용은 VM에서 Azure 리소스에 대한 관리 ID를 사용하여 액세스 토큰을 획득하는 방법을 참조하세요.
구독과 지역 간에 관리 ID가 있는 리소스를 이동하는 데는 제한이 있습니다. 예를 들어 데이터 주권상의 이유로 리소스의 합병, 인수 또는 송환을 위해 구독 또는 지역 간에 리소스를 이동할 수 있습니다.
Azure 리소스에 사용자 할당 또는 시스템 할당 ID가 있는 경우 리소스를 다른 Azure 구독 또는 지역으로 전송할 수 없습니다. 리소스를 이동하기 전에 관리 ID를 삭제해야 합니다. 이동 후 관리 ID를 다시 만들고 리소스에 할당해야 합니다. 자세한 내용은 새 리소스 그룹 또는 구독으로 리소스 이동을 참조하세요.
한 디렉터리에서 다른 디렉터리로 구독을 이동하는 경우 관리 ID는 유지되지 않습니다. 리소스를 이동한 다음 관리 ID를 수동으로 다시 만들어야 합니다.
사용자 RBAC 역할 할당과 마찬가지로 리소스 에 대한 관리 ID 액세스 권한을 부여할 때 최소 권한 원칙을 따릅니다.
외부 사용자
외부 사용자, 고객 또는 파트너가 리소스에 액세스할 수 있도록 설정하는 시나리오를 평가할 수 있습니다. 이러한 시나리오에 Microsoft Entra B2B 또는 Azure AD B2C(Azure Active Directory B2C) 구성이 포함되는지 확인합니다. 자세한 내용은 Microsoft Entra 외부 ID 개요를 참조하세요.
디자인 권장 사항
애플리케이션의 ID 및 액세스 관리를 디자인할 때 다음 권장 사항을 고려합니다.
OpenID Connect
애플리케이션 팀이 CI/CD(지속적인 통합 및 지속적인 업데이트) 파이프라인을 사용하여 애플리케이션을 프로그래밍 방식으로 배포하는 경우 Azure 서비스에 대한 OpenID Connect 인증을 구성합니다. OpenID Connect는 임시 자격 증명 없는 토큰을 사용하여 Azure 서비스에 인증합니다. 자세한 내용은 워크로드 ID 페더레이션을 참조하세요.
OpenID Connect가 지원되지 않는 경우 서비스 주체를 만들고 인프라 또는 애플리케이션 코드를 배포할 수 있도록 필요한 권한을 할당합니다. 자세한 내용은 서비스 주체를 사용하여 Azure 배포 파이프라인 인증 학습 모듈 을 참조하세요.
특성 기반 액세스 제어
액세스를 추가로 제한하고 데이터에 대한 무단 액세스를 방지하려면 지원되는 ABAC(특성 기반 액세스 제어) 를 사용합니다(예: Azure Blob Storage).
가상 머신 액세스
가능한 경우 Microsoft Entra ID ID를 사용하여 Azure 가상 머신에 대한 액세스를 제어합니다. 로컬 인증 대신 Microsoft Entra ID를 사용하여 가상 머신에 대한 액세스를 제공하고 Microsoft Entra 조건부 액세스, 감사 로깅 및 MFA(Microsoft Entra 다단계 인증)를 활용합니다. 이 구성은 공격자가 안전하지 않은 로컬 인증 서비스를 악용할 위험을 줄입니다. 자세한 내용은 Microsoft Entra ID 및 OpenSSH 를 사용하여 Azure의 Linux 가상 머신에 로그인하고 암호 없는 Microsoft Entra ID를 사용하여 Azure의 Windows 가상 머신에 로그인합니다.
Microsoft ID 플랫폼
개발자는 클라우드 네이티브 애플리케이션을 빌드할 때 개발자용 Microsoft ID 플랫폼 애플리케이션의 ID 공급자로 사용해야 합니다. 이 Microsoft ID 플랫폼 개발자가 다음을 비롯한 여러 ID 유형을 인증하는 데 사용할 수 있는 OpenID Connect 표준 규격 인증 서비스를 제공합니다.
회사 또는 학교 계정, Microsoft Entra ID를 통해 프로비전
Microsoft 개인 계정(Skype, Xbox, Outlook.com)
Microsoft Entra ID를 사용하여 소셜 또는 로컬 계정
Microsoft ID 플랫폼 모범 사례 및 권장 사항 검사 목록은 애플리케이션을 Microsoft ID 플랫폼 효과적으로 통합하는 방법에 대한 지침을 제공합니다.
관리 ID
자격 증명을 사용할 필요가 없는 Azure 리소스 간에 액세스를 사용하도록 설정하려면 관리 ID를 사용합니다.
다양한 환경 또는 애플리케이션 간에 자격 증명 또는 관리 ID를 공유해서는 안 됩니다. 예를 들어 동일한 애플리케이션에 대해서도 프로덕션 리소스 및 개발/테스트 리소스에 ID를 사용하지 마세요. 애플리케이션의 각 인스턴스에 대해 별도의 자격 증명을 만들어 프로덕션 데이터에 영향을 주는 손상된 테스트 인스턴스의 가능성을 줄입니다. 또한 자격 증명을 분리하면 더 이상 필요하지 않은 경우 자격 증명을 더 쉽게 해지할 수 있습니다.
대규모로 관리 ID를 사용해야 하는 요구 사항이 있는 경우 각 지역의 각 리소스 유형에 대해 사용자 할당 관리 ID를 사용합니다. 이 방법은 ID의 변동을 방지합니다. 예를 들어 Azure Monitor 에이전트에는 모니터링되는 Azure VM에서 관리 ID가 필요하며, 이로 인해 Microsoft Entra ID가 상당한 수의 ID를 만들고 삭제할 수 있습니다. 사용자 할당 관리 ID를 한 번 만들어 여러 VM에서 공유할 수 있습니다. Azure Policy를 사용하여 이 권장 사항을 구현합니다.
Key Vault
Key Vault를 사용하여 애플리케이션에서 사용하는 비밀, 키, 인증서를 관리할 수 있습니다.
비밀(데이터 평면)과 관리 액세스(제어 평면)에 대한 액세스를 관리하려면 RBAC를 사용합니다.
Key Vault에 대한 애플리케이션 액세스를 제어하려면 관리 ID를 사용합니다.
각 지역의 각 애플리케이션 환경(개발, 사전 프로덕션, 프로덕션)에 대해 별도의 키 자격 증명 모음을 사용해야 합니다. RBAC를 사용하여 비밀, 키 및 인증서에 대한 액세스(데이터 평면 작업) 및 Key Vault(컨트롤 플레인)에 대한 액세스를 관리합니다. 애플리케이션 비밀이 있는 키 자격 증명 모음을 애플리케이션 랜딩 존에 배포합니다.
Microsoft Entra 애플리케이션 프록시
Microsoft Entra ID를 통해 원격으로 온-프레미스 인증을 사용하는 애플리케이션에 액세스하려면 Microsoft Entra 애플리케이션 프록시를 사용합니다. Microsoft Entra 애플리케이션 프록시는 이전 인증 프로토콜을 사용하는 애플리케이션을 포함하여 온-프레미스 웹 애플리케이션에 대한 보안 원격 액세스를 제공합니다. Microsoft Entra ID에 Single Sign-On을 한 후 사용자는 외부 URL 또는 내부 애플리케이션 포털을 통해 클라우드 및 온-프레미스 애플리케이션 모두에 액세스할 수 있습니다.
Microsoft Entra 애플리케이션 프록시를 단일 인스턴스로 Microsoft Entra ID 테넌트에 배포할 수 있습니다. 구성에는 최소한 애플리케이션 관리자 권한 Microsoft Entra ID 역할이 필요합니다. 조직에서 역할 할당 모델로 구독 민주화를 사용하는 경우 애플리케이션 소유자는 Microsoft Entra 애플리케이션 프록시를 구성하는 데 필요한 권한이 없을 수 있습니다. 이 경우 플랫폼 팀은 애플리케이션 소유자에 대해 Microsoft Entra 애플리케이션 프록시를 구성해야 합니다.
충분한 권한이 있는 CI/CD 배포 파이프라인을 사용하는 경우 애플리케이션 소유자는 Microsoft Graph API를 사용하여 Microsoft Entra 애플리케이션 프록시를 구성할 수 있습니다.
애플리케이션이 Kerberos와 같은 레거시 프로토콜을 사용하는 경우 애플리케이션 방문 영역에 Microsoft ID 플랫폼 구독의 도메인 컨트롤러에 대한 네트워크 연결이 있는지 확인합니다.