Share via


웹 응용 프로그램에 대한 액세스 권한

다른 응용 프로그램처럼 웹 응용 프로그램에서도 파일 또는 데이터베이스 등의 다양한 시스템 리소스에 액세스하게 됩니다. 이 리소스는 보통 여러 사용자 및 그룹에 부여된 액세스 수준에 의해 보호됩니다.

웹 응용 프로그램에서 직접 액세스를 요청하는 사용자는 응용 프로그램 사용자가 아닐 확률이 높습니다. 대신, 사용자는 브라우저를 통해 웹 응용 프로그램과 통신하게 되고 웹 응용 프로그램에서 리소스를 요청하게 됩니다. 이러한 간접적인 액세스를 사용하면 액세스 권한 문제가 발생할 수 있습니다.

웹 응용 프로그램에서 액세스 권한을 관리할 수 있는 전략에는 여러 가지가 있습니다. 다음 단원에서는 각 옵션에 대해 간단히 설명합니다. 각 항목의 링크는 보다 더 자세한 내용이 포함된 항목으로 안내합니다.

Windows 통합 보안을 사용한 액세스

웹 응용 프로그램이 인트라넷 환경에서 실행되는 경우 즉, 모든 사용자의 컴퓨터에서 Windows가 실행되며 모든 컴퓨터가 동일한 방화벽을 사용하는 경우 응용 프로그램에서는 Windows 통합 보안을 사용하여 리소스에 액세스할 수 있습니다. 이 전략에서는 모든 사용자가 Windows에 로그온하는 동시에 인증됩니다. 인증 과정에서 해당 사용자에 대한 정보가 포함된 토큰이 생성됩니다. 이 토큰에는 사용자의 자격 증명이 포함되지 않으며 사용자가 인증되었다는 것을 나타내는 코드만 포함됩니다. 웹 응용 프로그램에서는 로컬 리소스를 요청할 때 이 토큰을 사용할 수 있습니다. 예를 들어, 로그인한 사용자가 Internet Explorer에서 Web Forms 페이지를 요청합니다. 이 요청은 IIS(인터넷 정보 서비스)에 전달된 다음 ASP.NET으로 전달됩니다. ASP.NET에서는 사용자의 인증 토큰을 사용하여 서버 컴퓨터에 있는 파일에 대한 액세스를 요청할 수 있습니다.

Windows 통합 보안은 일반적으로 웹 액세스 권한에 사용할 수 있는 가장 안전한 옵션입니다. 가능하면 응용 프로그램에서 이 옵션을 사용하도록 구성해야 합니다.

자세한 내용은 ASP.NET 인증을 참조하십시오.

ASP.NET 사용자 계정을 사용한 익명 액세스

대부분의 응용 프로그램에서 사용자는 웹 응용 프로그램에 보통 익명으로 액세스합니다. 이것은 사용자가 처음부터 인증 자격 증명을 제공하지는 않는다는 의미입니다. 이 경우 웹 응용 프로그램에서는 해당 사용자가 리소스를 요청하기 위해 사용할 특정 ID를 가장해야 합니다.

기본적으로 ASP.NET에서 익명 액세스를 허용하면 응용 프로그램은 도메인 사용자가 아닌 특수한 로컬 사용자의 컨텍스트로 실행됩니다. 이 사용자 컨텍스트는 운영 체제에 따라 달라집니다. Windows 2000 및 Windows XP에서는 응용 프로그램이 ASPNET이라는 계정으로 실행됩니다. Windows Server 2003에서는 이러한 사용자 컨텍스트를 NETWORK SERVICE라고 합니다. 이들 사용자 계정은 .NET Framework가 설치되는 동안 고유하고 강력한 암호와 함께 만들어지고 제한된 권한만 부여받습니다. ASPNET 또는 NETWORK SERVICE 사용자는 웹 응용 프로그램 실행에 필요한 특정 폴더(예: 웹 응용 프로그램에서 컴파일된 파일을 저장하는 \bin 디렉터리)만 액세스할 수 있습니다.

참고   IIS에는 익명 사용자를 특정 로컬 또는 도메인 사용자에 매핑하는 비슷한 메커니즘이 있습니다. IIS의 기능을 사용하면 ASP.NET 파일(Web Forms 페이지 및 컨트롤) 뿐 아니라 응용 프로그램의 모든 파일에 대한 익명 액세스를 다시 매핑할 수 있습니다. 자세한 내용은 Microsoft 인터넷 정보 서버 보안 개요를 참조하십시오.

웹 응용 프로그램에서 웹 서버 컴퓨터의 다른 리소스에 액세스해야 하는 경우 ASPNET 또는 NETWORK SERVICE 사용자에게 해당 권한을 부여할 수 있습니다. 예를 들어, 응용 프로그램을 통해 디렉터리에 파일을 작성하려면 ASPNET 또는 NETWORK SERVICE 계정에게 해당 디렉터리에 대한 쓰기 권한을 명시적으로 부여해야 합니다.

또는 ASP.NET에 대해 다른 사용자 ID를 지정하여 리소스를 요청할 때 사용할 수도 있습니다. 이름 요청을 만들 해당 사용자 이름(로컬 또는 도메인 사용자)을 지정할 수 있습니다. 자세한 내용은 ASP.NET 프로세스 ID를 참조하십시오. 또는 ASP.NET이 시스템(관리자) 컨텍스트로 실행되도록 지정할 수 있습니다.

주의   ASP.NET 응용 프로그램을 시스템 컨텍스트로 실행하면 해당 응용 프로그램은 서버에 대한 관리 권한을 갖고 실행됩니다. 이 때 사용자가 응용 프로그램에 대한 제어를 얻게 되면 서버의 여러 중요한 리소스에 자유롭게 액세스할 수 있게 됩니다.

기본적으로 사용자가 기본 사용자 컨텍스트를 사용하여 액세스할 수 없는 몇 가지 리소스가 있는데, 이러한 리소스에 액세스하려면 관리 수준의 권한이 필요합니다. 예를 들어, 응용 프로그램에서 System.Diagnostics 네임스페이스의 메서드를 사용하여 새 이벤트 로그 범주를 만들어야 하는 경우 ASPNET 또는 NETWORK SERVICE 사용자의 컨텍스트로는 해당 작업을 실행할 수 없습니다. 이 경우에는 응용 프로그램 컨텍스트를 변경하거나, ASP.NET 사용자 계정을 통해 이벤트 로그에 액세스할 수 있도록 변경 작업을 수행해야 합니다.

주의   프로세스 ID를 ASPNET 또는 NETWORK SERVICE 사용자 ID 대신에 다른 특정 사용자 이름으로 설정하려면 machine.config 파일에 저장되어 있는 해당 사용자 이름과 암호를 제공해야 합니다. 자격 증명 정보를 저장하게 되면 보안이 위협받을 가능성이 있습니다. 어떤 사용자가 machine.config에 액세스하는 데 성공하거나 웹 서버 컴퓨터에서 관리자 권한을 획득하게 되면 이러한 개인 정보를 읽거나 변경할 수 있기 때문입니다. machine.config 파일은 관리 권한을 가진 사용자를 제외한 모든 사용자에게 읽기 전용으로 설정해야 합니다. machine.config 파일에서 사용자 이름과 암호를 설정하는 것에 대한 자세한 내용은 <processModel> 요소를 참조하십시오.

제공된 자격 증명을 사용한 액세스

웹 응용 프로그램에서는 런타임에 자격 증명을 제공하여 리소스를 요청할 수 있습니다. 이 방법은 모든 리소스에 대해 가능한 방법은 아니지만 사용자 이름과 암호를 받아들이는 리소스(예: 연결 문자열을 허용하는 데이터베이스 등)에 사용할 수 있습니다.

보안 정보   연결 문자열을 사용하여 SQL Server에 액세스하는 방법(혼합 모드)은 Windows 통합 보안을 사용하는 방법보다 덜 안전합니다. 웹 서버와 SQL Server가 동일한 컴퓨터에서 실행되는 경우 Windows 통합 보안을 쉽고 안전하게 사용할 수 있습니다.

사용자에게 직접 자격 증명을 얻거나 기본, 다이제스트 또는 폼 인증 방식을 사용하여 자격 증명을 얻을 수 있습니다. 예를 들어, 어떤 사용자가 사이트의 제한된 부분에 액세스하려는 경우 응용 프로그램에서 사용자에게 사용자 이름과 암호를 입력하도록 요청할 수 있습니다. 인증에 대한 자세한 내용은 IIS 인증ASP.NET 인증을 참조하십시오.

보안 정보   응용 프로그램에서 사용자 이름과 암호를 입력하도록 요청하는 것은 잠재적으로 보안에 위협 요소가 될 수 있습니다. 자격 증명 정보가 브라우저에서 서버로 전송되어야 하는데 일반적인 HTTP 전송은 암호화되지 않습니다. 응용 프로그램에서 사용자에게 자격 증명을 입력하도록 요청할 때는 최상의 보안을 유지하기 위해 SSL(Secure Sockets Layer)을 사용해야 합니다. SSL은 정보를 브라우저에서 서버로 보내기 전에 암호화합니다. 자세한 내용은 SSL 사용을 참조하십시오.

사용자로부터 자격 증명을 가져온 후에는 리소스를 요청할 때 이 정보를 전달할 수 있습니다. 데이터베이스의 경우에는 보통 연결을 열 때 사용자 이름과 암호를 연결 문자열에 삽입하면 됩니다. 다른 리소스의 경우에는 사용자가 제공하는 정보에 대해 사용자 컨텍스트를 만들고 이 컨텍스트를 사용하여 리소스에 대한 액세스를 요청할 수 있는 LogonUser라는 Windows API를 호출합니다.

응용 프로그램에 직접 자격 증명을 저장하는 것이 더 편리할 때도 있습니다. 예를 들어, 사용자 이름과 암호를 하드 코딩하여 삽입한 데이터베이스 연결 문자열을 만들 수 있습니다. 자세한 내용은 명시적 자격 증명을 사용한 SQL Server 액세스를 참조하십시오.

보안 정보   자격 증명을 응용 프로그램에 하드 코딩하여 삽입하는 방법은 컴파일된 후에도 정보가 노출될 위험성이 있기 때문에 일반적으로 권장하지 않습니다. 그래도 사용자 자격 증명 정보를 응용 프로그램에 하드 코딩하여 삽입하려면 사용자에게 최소한의 리소스 액세스 권한만 부여하는 사용자 이름을 사용해야 합니다.

자격 증명을 응용 프로그램의 일부로 저장하려면 이 정보를 보호할 방법을 마련해야 합니다. 그러한 방법 중 하나는 DPAPI(Data Protection API)를 사용하는 것입니다. 자세한 내용은 MSDN 온라인(https://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsecure/html/windataprotection-dpapi.asp?frame=true)에서 기술 문서 Windows 데이터 보호를 참조하십시오.

원격 리소스 액세스(위임)

응용 프로그램에 필요한 리소스가 웹 서버가 아닌 다른 컴퓨터에 저장되어 있는 경우가 있습니다. 이 구성은 데이터베이스 등의 리소스를 사용할 때 권장되는 방법입니다. 이 경우 응용 프로그램에서는 사용자를 대신하여 원격 컴퓨터에 대해 요청을 수행해야 합니다. 이러한 프로세스를 위임이라고 합니다.

다른 리소스 요청의 경우와 마찬가지로 원격 컴퓨터에 대한 요청에는 적절한 자격 증명이 포함되어야 합니다. 응용 프로그램에서 익명 액세스를 허용하는 경우 IIS 및 ASP.NET에는 사용자의 자격 증명이 없기 때문에 원격 리소스에 액세스하기 위해 위임을 수행할 때 자격 증명을 사용할 수 없습니다. 이 경우에는 다음 방법을 사용합니다.

  • 사용자에게 명시적인 사용자 자격 증명을 입력하도록 요청한 후 이를 가져옵니다. 그런 다음 응용 프로그램에서 이 자격 증명을 원격 컴퓨터에 전달하면 됩니다. SQL Server를 사용하여 작업하는 경우에는 연결 문자열에 사용자 자격 증명을 추가할 수 있습니다. 예제를 보려면 명시적 자격 증명을 사용한 SQL Server 액세스를 참조하십시오.

  • ASPNET 또는 NETWORK SERVICE 사용자로 되어 있는 웹 응용 프로그램의 사용자 컨텍스트를 해당 자격 증명이 원격 컴퓨터에 전달될 수 있는 특정 도메인 사용자로 변경합니다. 예제를 보려면 매핑된 Windows 도메인 사용자를 사용한 SQL Server 액세스를 참조하십시오.

    **참고   **브라우저와 웹 서버가 동일한 컴퓨터에서 실행되고 사용자가 도메인 사용자로 로그온한 경우에는 IIS에 사용자의 자격 증명이 포함되어 있기 때문에 원격 컴퓨터에 대한 위임이 문제가 되지 않습니다. 이 시나리오는 테스트용으로 자주 사용되긴 하지만 실제 웹 응용 프로그램에는 거의 사용되지 않습니다. 가능하면 항상 브라우저와 웹 서버를 서로 다른 컴퓨터에서 실행하여 액세스 권한을 테스트해보는 것이 좋습니다.

참고 항목

웹 응용 프로그램 보안 소개 | 데이터베이스 보안 | 보안성 | 보안 모델 | 웹 응용 프로그램에서 SQL Server 액세스