Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

Azure Web Role의 AppPool 실행 권한을 Local System으로 바꾸는 방법

검색해 보면 이에 대해 다음의 글이 나옵니다.

Programmatically Changing the AppPool Identity in a Windows Azure Web Role
; http://www.wadewegner.com/2011/01/programmatically-changing-the-apppool-identity-in-a-windows-azure-web-role/

위의 소스 코드에서는 AppPool의 이름을 알아야 하는데, 문제는 Azure에서 기본적으로 만드는 AppPool의 이름이 예상할 수 없다는 점입니다. 그러니까, 대충 다음과 같이 AppPool 이름이 할당됩니다.

azure_web_role_identity_1.png

그런데, 위의 그림을 가만 보면 우리가 쓰는 AppPool 이외의 것은 어차피 사용하지도 않기 때문에 굳이 특정 AppPool의 이름을 바꾸려는 것보다는 모든 AppPool을 바꿔도 상관없다는 가정을 할 수 있습니다.

따라서, 다음과 같이 Console EXE 프로그램을 만들어 줄 수 있습니다.

using System;
using System.DirectoryServices;
using System.Threading;

class Program
{
    static int Main(string[] args)
    {
        string settingsDelay = Environment.GetEnvironmentVariable("SETTINGS_DELAY");
        if (string.IsNullOrEmpty(settingsDelay) == true)
        {
            return 0;
        }

        int delay = int.Parse(settingsDelay);
        Thread.Sleep(delay * 1000);

        var metabasePath = "IIS://localhost/W3SVC/AppPools";

        using (DirectoryEntry appPools = new DirectoryEntry(metabasePath))
        {
            foreach (DirectoryEntry appPool in appPools.Children)
            {
                if (appPool != null)
                {
                    appPool.InvokeSet("AppPoolIdentityType", new Object[] { 0 }); // 0 == LOCAL SYSTEM
                    appPool.Invoke("SetInfo", null);

                    appPool.CommitChanges();
                }
            }
        }

        return 0;
    }
}

그리고 .csdef에 예전에 설명했던 것처럼,

Azure Cloud Service 배포시 사용자 정의 작업을 추가하는 방법
; https://www.sysnet.pe.kr/2/0/11022

IIS - appcmd.exe를 이용해 특정 페이지에 클라이언트 측 인증서를 제출하도록 설정하는 방법
; https://www.sysnet.pe.kr/2/0/11125

권한이 상승된 Task로 등록해 주면 됩니다.

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="..." xmlns="..." schemaVersion="2015-04.2.6">
  <WebRole name="..." vmsize="...">
    <Startup>
      ...[생략]...
      <Task commandLine="MakeLocalSystem.exe" executionContext="elevated" taskType="background">
        <Environment>
          <Variable name="SETTINGS_DELAY" value="5" />
        </Environment>
      </Task>
      ...[생략]...
    </Startup>
    ...[생략]...
  </WebRole>
</ServiceDefinition>




참고로, "Programmatically Changing the AppPool Identity in a Windows Azure Web Role" 글에서는 이 작업을 RoleEntryPoint 클래스의 OnStart에 실어서 하는 걸로 나옵니다.

RoleEntryPoint
; https://docs.microsoft.com/en-us/previous-versions/azure/reference/ee758619(v=azure.100)

RoleEntryPoint를 상속받은 클래스를 Azure Web Role 프로젝트에 포함한 경우, Azure는 별도의 WaIISHost.exe(Windows Azure Web Role Entry Point Host) 프로세스를 실행시켜 사용자가 정의한 RoleEntryPoint 상속 클래스를 만들어 실행해 줍니다. 재미있는 것은 이 프로세스의 실행 계정이 "NETWORK SERVICE"라는 점입니다. 의미인즉, 이 실행 권한으로는 AppPool의 계정 변경을 할 수 없다는 것입니다.

따라서, 저 글에서 설명한 데로 하면 안 되고, .csdef + Task를 정의해 elevated 권한으로 해당 코드를 실행시켜줘야만 합니다.




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 7/17/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 181  182  183  [184]  185  186  187  188  189  190  191  192  193  194  195  ...
NoWriterDateCnt.TitleFile(s)
356정성태10/7/200622317COM 개체 관련: 19. COM의 Apartment를 이해해 보자. [8]
386light10/30/200617272    답변글 COM 개체 관련: 19.1. [답변]: COM 객체를 글로벌마샬으로 만든후, 사용한다.
355정성태10/9/200625009개발 환경 구성: 19. Internet_Zone 하위에 새로운 코드 그룹을 추가하는 예제 [4]파일 다운로드2
353정성태12/31/200633302개발 환경 구성: 18. 윈도우즈 인증서 서비스 이야기 [3]
354정성태10/23/200635893    답변글 개발 환경 구성: 18.1. 윈도우즈 인증서 서비스 설치
372정성태12/31/200637761    답변글 개발 환경 구성: 18.2. 웹 사이트에 SSL을 적용 [3]
373정성태10/24/200629138    답변글 개발 환경 구성: 18.3. 사용자 입장에서의 HTTPS 접근 (1)
374정성태10/25/200626392    답변글 개발 환경 구성: 18.4. 사용자 입장에서의 HTTPS 접근 (2)
391정성태11/7/200630541    답변글 개발 환경 구성: 18.5. 사용자 인증서 발급
392정성태11/11/200643797    답변글 개발 환경 구성: 18.6. 인증서 관리 (1) - 내보내기/가져오기
394정성태11/9/200628299    답변글 개발 환경 구성: 18.7. 인증서 관리 (2) - 개인키를 내보낼 수 있는 유형의 인증서 발급 [1]
395정성태11/9/200640397    답변글 개발 환경 구성: 18.8. 인증서 관리 (3) - 인증서 MMC 관리자 사용
414정성태12/23/200632105    답변글 개발 환경 구성: 18.9. CRL(Certificate Revocation List) 관리
428정성태12/31/200644997    답변글 개발 환경 구성: 18.10. IIS 7 - SSL 사이트 설정하는 방법 [4]
429정성태12/31/200630945    답변글 개발 환경 구성: 18.11. 서비스를 위한 인증서 설치
352정성태10/2/200620636개발 환경 구성: 17. VPC에 Linux 설치하는 방법 [1]
351정성태10/8/200623179개발 환경 구성: 16. 성태의 무식한(!) 리눅스 탐방기. [4]
349정성태9/26/200621960디버깅 기술: 10. C++/CLI에서 제공되는 명시적인 파괴자의 비밀
347정성태10/6/200625710디버깅 기술: 9. .NET IDisposable 처리 정리 [1]
346정성태9/23/200619248개발 환경 구성: 15. 툴박스에 컨트롤이 자동으로 나타나도록 해주는 옵션 설정
345정성태9/20/200618441오류 유형: 12. WCF 오류 메시지 - Error while trying to reflect on attribute 'MessageContractAttribute'
343정성태10/18/200630279개발 환경 구성: 14. SandCastle 사용법 (NDoc을 대체하는 문서화 도구) [1]파일 다운로드1
344정성태9/20/200620524    답변글 개발 환경 구성: 14.1. 오류 유형 - GAC 에 등록된 DLL 에 대한 문서화 시 오류
340정성태9/15/200619687개발 환경 구성: 13. ISO 파일을 가상 CD-ROM으로 매핑해주는 프로그램
339정성태9/14/200619190오류 유형: 11. ProtocolsSection?
338정성태2/4/200727438개발 환경 구성: 12. BUG: 웹 서비스에서 DataTable 사용하기 [2]파일 다운로드1
... 181  182  183  [184]  185  186  187  188  189  190  191  192  193  194  195  ...