성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] How can I tell whether two programs...
[정성태] The case of the fail-fast crashes c...
[정성태] Creating Docker multi-arch images f...
[정성태] BinaryFormatter removed from .NET 9...
[정성태] Extending the Windows Shell Progres...
[우광현] 와..... 범위를 잡았으니 클라이언트가 해당 범위를 확인해본다...
[정성태] 딱히, 그것 이상으로 더 설명할 내용이 없습니다. 동적 포...
[정성태] If Windows 3.11 required a 32-bit p...
[정성태] What is a hard error, and what make...
[괴물신인] 질문작성자인데 이 글을 이제봤네요 ㄷㄷ 이 글처럼 타입별로 인...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>Azure - New-AzureRmADServicePrincipal / New-AzureRmRoleAssignment 명령어</h1> <p> 지난 글에서,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Azure - PowerShell로 Access control(IAM)에 새로운 계정 만드는 방법 ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/11479'>http://www.sysnet.pe.kr/2/0/11479</a> </pre> <br /> 계정 생성 및 권한 부여를 다음과 같은 명령어로 요약할 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > PS C:> Login-AzureRmAccount PS C:> $plainText = "TestPlainText" PS C:> $secureString = ConvertTo-SecureString $plainText -AsPlainText -Force PS C:> $sp = <span style='color: blue; font-weight: bold'>New-AzureRmADServicePrincipal</span> -DisplayName "NewUser1" -Password $secureString PS C:> <span style='color: blue; font-weight: bold'>New-AzureRmRoleAssignment</span> -ServicePrincipalName $sp.ApplicationId -RoleDefinitionName Contributor </pre> <br /> 일단 New-AzureRmADServicePrincipal은,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > New-AzureRmADServicePrincipal ; <a target='tab' href='https://docs.microsoft.com/en-us/powershell/module/azurerm.resources/new-azurermadserviceprincipal?view=azurermps-5.7.0'>https://docs.microsoft.com/en-us/powershell/module/azurerm.resources/new-azurermadserviceprincipal?view=azurermps-5.7.0</a> </pre> <br /> "Creates a <span style='color: blue; font-weight: bold'>new azure active directory</span> service principal."라는 설명에도 나오지만 Azure Active Directory에 사용자를 생성합니다. 그다음 New-AzureRmRoleAssignment는 Azure 리소스의 Access control에 권한을 부여하는 것입니다. 보시면, New-AzureRmRoleAssignment 명령어에 별도의 리소스 위치를 지정하지 않았으므로 해당 사용자는 구독 수준의 Access control에 Contributor role이 부여됩니다. <br /> <br /> 그런데 New-AzureRmADServicePrincipal 명령어의 결과를 확인할 수 있는 방법이 현재의 Azure Portal에서는 제공되지 않습니다. 즉, AAD에 생성된 계정은 Azure Portal의 AAD 메뉴에서는 볼 수 없고, 대신 New-AzureRmRoleAssignment로 Azure 리소스의 Access control에 "App" 타입으로 생성된 것을 확인할 수 있습니다.<br /> <br /> 그래도 분명히 해당 계정이 AAD에 생성되어 있는 것은 맞습니다. 왜냐하면 New-AzureRmRoleAssignment 명령을 실행하지 않은 상태에서 다음과 같이 다시 동일한 사용자 이름으로 New-AzureRmADServicePrincipal 명령을 내리면,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > PS C:\WINDOWS\system32> $sp = New-AzureRmADServicePrincipal -DisplayName "NewUser1" -Password $secureString New-AzureRmADServicePrincipal : Another object with the same value for property identifierUris already exists. At line:1 char:7 + $sp = New-AzureRmADServicePrincipal -DisplayName "NewUser1" -Password ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [New-AzureRmADServicePrincipal], Exception + FullyQualifiedErrorId : Microsoft.Azure.Commands.ActiveDirectory.NewAzureADServicePrincipalCommand </pre> <br /> 이미 등록된 유저라고 오류가 발생하기 때문입니다. 그렇다면, 문제는 해당 사용자를 어떻게 삭제하느냐입니다. "Azure Active Directory" 메뉴로 가도 목록에는 해당 사용자가 나타나지 않기 때문에 당연히 Azure Portal을 통해서는 삭제할 수 없습니다. 대신 PowerShell 명령어로 가능합니다.<br /> <br /> 이를 위해 Get-AzureRmADServicePrincipal 명령을 내려 ObjectId를 확인한 후,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > PS C:\WINDOWS\system32> Get-AzureRmADServicePrincipal -SearchString "NewUser1" ServicePrincipalNames : {http://NewUser1, 5c7c5d23-0449-4d8d-8cd8-81e75985c802} ApplicationId : 5c7c5d23-0449-4d8d-8cd8-81e75985c802 DisplayName : NewUser1 Id : <span style='color: blue; font-weight: bold'>927a257b-b08e-42c3-9d3d-e564e2b95795</span> Type : ServicePrincipal </pre> <br /> Remove-AzureRmADServicePrincipal 명령으로 삭제할 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > PS C:\WINDOWS\system32> Remove-AzureRmADServicePrincipal -ObjectId <span style='color: blue; font-weight: bold'>927a257b-b08e-42c3-9d3d-e564e2b95795</span> </pre> <br /> 이후 다음의 명령어로 실제로 삭제되었는지 확인해 볼 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Get-AzureRmADServicePrincipal -SearchString "NewUser1" </pre> <br /> 재미있는 것은, 분명히 AAD에서 삭제는 되었지만 이 상태에서 동일한 계정명으로 New-AzureRmADServicePrincipal 명령어를 실행하면 여전히 "Another object with the same value for property identifierUris already exists" 오류가 발생합니다.<br /> <br /> 이유는 간단합니다. New-AzureRmADServicePrincipal은 AAD에 사용자 계정과 함께 동일한 이름으로 Application을 생성해 두기 때문이라고 합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Creation of user fails after deletion of user with same signInName ; <a target='tab' href='https://stackoverflow.com/questions/39981988/creation-of-user-fails-after-deletion-of-user-with-same-signinname'>https://stackoverflow.com/questions/39981988/creation-of-user-fails-after-deletion-of-user-with-same-signinname</a> </pre> <br /> 그래서, Get-AzureRmADApplication 명령을 내리면 동일한 이름의 응용 프로그램 항목을 볼 수 있고 마찬가지로 출력된 ObjectId로 삭제해야 합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > PS C:\> Get-AzureRmADApplication ...[생략]... DisplayName : NewUser1 ObjectId : <span style='color: blue; font-weight: bold'>7cb013b8-945a-4bff-a445-79ab599c47e8</span> IdentifierUris : {http://NewUser1} HomePage : http://NewUser1 Type : Application ApplicationId : 5c7c5d23-0449-4d8d-8cd8-81e75985c802 AvailableToOtherTenants : False AppPermissions : ReplyUrls : {} PS C:\> Remove-AzureRmADApplication -ObjectId <span style='color: blue; font-weight: bold'>7cb013b8-945a-4bff-a445-79ab599c47e8</span> </pre> <br /> 정리해 보면, New-AzureRmADServicePrincipal은 명령어 수행 시 다음과 같은 2가지 역할을 수행합니다.<br /> <br /> <ul> <li>AAD에 사용자 계정 등록</li> <li>Application 등록</li> </ul> <br /> <hr style='width: 50%' /><br /> <br /> New-AzureRmADServicePrincipal/New-AzureRmRoleAssignment 명령어로 생성되는 3가지 항목 중에,<br /> <br /> <ol> <li>AAD에 사용자 계정 등록</li> <li>Application 등록</li> <li>Azure 구독의 리소스에 AAD 사용자에 대한 Role</li> </ol> <br /> 첫 번째 "AAD에 사용자 계정 등록" 확인은 Get-AzureRmADServicePrincipal 명령어로만 할 수 있습니다.<br /> <br /> 두 번째 "Application 등록"은 Azure Portal에서 "App registrations(앱 등록)"라는 메뉴를 통해 들어가야 하는데, 문제는 기본적으로 이 메뉴가 목록에 없다는 것입니다. 따라서 다음의 글에 설명한 데로,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Azure Portal에서 구독(Subscriptions) 메뉴가 보이지 않는 경우 ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/11496'>http://www.sysnet.pe.kr/2/0/11496</a> </pre> <br /> "모든 서비스"로 들어가 "보안 + ID" 범주의 "App registrations(앱 등록)" 메뉴를 선택해 둡니다. 그럼, 해당 메뉴를 통해 New-AzureRmADServicePrincipal 명령어로 생성한 Application 목록을 확인할 수 있습니다.<br /> <br /> 마지막으로 세 번째 "Azure 구독의 리소스에 AAD 사용자에 대한 Role" 역시 Azure Portal에서 해당 Azure 리소스에 들어가 "Access control" 메뉴를 통해 볼 수 있습니다.<br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
6919
(왼쪽의 숫자를 입력해야 합니다.)