개체 ID를 가진 클라이언트에 'Microsoft' 작업을 수행할 수 있는 권한이 없습니다.Data Factory / 데이터 팩토리 / 데이터 라인 / 읽기' 범위 초과
푸른색 함수에서 프로그래밍 방식으로 데이터 팩토리 파이프라인을 호출하려고 했습니다.에러에 이은 투척입니다.
링크: http://eatcodelive.com/2016/02/24/starting-an-azure-data-factory-pipeline-from-c-net/
인증 실패:오브젝트 ID가 XXX829e05'XXXX-XXXXXXXXXXXX인 클라이언트 'XXX-XXXX'에는 Microsoft' 액션을 수행할 권한이 없습니다.범위 '/subscriptions/XXXX-4bf5-84c6-3a352XXXXXX/resourcegroups/ffsrg/providers/Microsoft에서 DataFactors/dataapipe lines/read'를 참조하십시오.Data Factory / 데이터 팩토리 / ADFTestFFFS/데이터피플라인/ADFTutorial Pipeline Custom' 입니다.
비슷한 문제를 검색하려고 했지만, 검색 결과 중 어느 것도 제 문제에 대한 해결책을 제시하지 못했습니다. 무엇이 문제인지 안내해주실 수 있나요?
목표는 파일이 BLOB에 추가될 때마다 데이터 팩토리 파이프라인을 실행하는 것입니다.그래서 우리는 그 결과를 얻기 위해 blob 트리거를 사용하여 azure 함수에서 데이터 팩토리 파이프라인을 호출하려고 합니다.
3단계: Access Control IAM을 클릭한 다음
Add를 클릭합니다.
4단계: Add Permission 창에서 역할의 기여자를 선택합니다.Select 입력 상자에 Azure AD(Azure Active Directory에서 생성)에서 생성한 앱 이름을 입력하고 선택합니다.저는 Azure Resource
Management를 만들었습니다.
5단계: 성공적으로 권한을 부여한 후 구독 창에서 새로 고침을 클릭하면 목록에 앱이 표시됩니다.아래의 예를 참조해 주세요.
참고 항목: Azure 자원 그룹 및 RBAC 사용 시 일반적인 문제 https://blogs.msdn.microsoft.com/azure4fun/2016/10/20/common-problem-when-using-azure-resource-groups-rbac/
이 문제는 새로운 구독에서 발생할 가능성이 높으며 일반적으로 해당 구독에서 이전에 특정 리소스 유형이 만들어지지 않은 경우에 발생합니다.
서브스크립션 관리자는 종종 서브스크립션레벨에서 자원 그룹 소유자에게 컨트리뷰터 권한을 부여하여 이 문제를 해결합니다.이는 서브스크립션레벨이 아닌 자원 그룹레벨로 액세스를 분리하는 전략과 모순됩니다.
근본 원인
일부 관리자는 일부 리소스가 이러한 리소스를 생성하기 위해 구독 수준에 대한 액세스 권한이 필요하며 리소스 그룹 수준에서 '소유자' 권한이 충분하지 않다고 말합니다.그건 사실이 아니에요.
한 걸음 물러서서 먼저 이 모든 것이 어떻게 작동하는지 알아보겠습니다.
리소스 관리자 모델을 사용하여 리소스를 프로비저닝하려면 해당 리소스 생성을 지원하는 리소스 공급자가 있어야 합니다.예를 들어 가상 머신을 프로비저닝하려면 Microsoft가 필요합니다.그러기 전에 먼저 서브스크립션에서 Compute' 리소스 공급자를 사용할 수 있습니다.
리소스 공급자는 구독 수준에만 등록됩니다.
다행히 Azure Resource Manager(ARM)는 이를 파악할 수 있을 만큼 인텔리전트합니다.새 Azure 리소스가 프로비저닝되면 해당 리소스 유형에 필요한 리소스 공급자가 아직 구독에 등록되지 않은 경우 ARM이 대신 등록하려고 시도합니다.이 작업(자원 공급자 등록)을 수행하려면 구독 수준에 대한 액세스 권한이 필요합니다.
기본적으로는 새로운 azure 서브스크립션은 일반적으로 사용되는 리소스 공급자 목록에 미리 등록됩니다.예를 들어 IoTHUB에 대한 리소스 제공자는 이러한 리소스 제공자가 아닙니다.
사용자에게 특정 리소스 그룹에만 소유자 권한이 부여된 경우 해당 사용자가 리소스 제공자를 처음 등록해야 하는 리소스를 프로비저닝하려고 하면 작업이 실패합니다.위의 경우 IoThub을 프로비저닝하려고 할 때 이렇게 됩니다.
즉, 사용자가 소유자 권한을 가진 자원 그룹 내에 HDInsight, IoTHub, SQLDW 등의 자원을 작성할 수 있도록 서브스크립션레벨에 액세스 권한을 부여할 필요는 없습니다.이러한 자원에 대한 자원 프로바이더가 이미 등록되어 있는 경우만 가능합니다.
Microsoft 의 조작을 실행할 권한이 없는 에러가 표시됩니다.DataFactory/Datafactories/dataapipe lines/read'는 데이터 팩토리에 대한 관련 권한이 없기 때문에 파이프라인 범위를 초과합니다.
데이터 팩토리 리소스 또는 하위 리소스를 만들고 관리하려면 "Contributor" / "Data Factory Contributor" 권한이 있어야 합니다.다음 링크의 파란색 RBAC 역할에 대한 자세한 내용은 다음과 같습니다.
https://learn.microsoft.com/en-us/azure/active-directory/role-based-access-built-in-roles
고객은 Azure Function 내부에서 ADF 클라이언트를 사용하려고 하므로 ADF 클라이언트 인증에는 AAD 애플리케이션과 서비스 주체 사용을 권장합니다.AAD 응용 프로그램 및 서비스 주체 작성 절차는 다음 URL에서 확인할 수 있습니다.
ADF 클라이언트에서 서비스 주체 사용을 위한 코드 샘플과 다음 링크에 있는 Active Directory 응용 프로그램 및 서비스 주체 작성 방법에 대한 지침을 따르십시오.
최근에 같은 메시지에서 이 문제가 발생했는데, 사용자가 다른 구독으로 로그인했기 때문에 발생한 것임을 발견했습니다(2개).az login --subscription을 사용하여 문제를 해결했습니다.
같은 에러 메세지로 같은 문제가 발생하는 다른 유저의 경우, 「az login」후, 「Owner」로서 자원 그룹을 작성하려고 했을 때에 같은 에러가 표시되었을 때에, 다음과 같이 해결했습니다.
az account set --subscription "Azure Subscription 1"
기본적으로는 서브스크립션이 설정되지 않았기 때문에 발생합니다.상세한 것에 대하여는, https://learn.microsoft.com/en-us/cli/azure/manage-azure-subscriptions-azure-cli#get-the-active-subscription 를 참조해 주세요.
솔루션:
- 1단계: Azure Active 디렉토리에 앱을 등록합니다.
- 2단계: 동일한 앱에 'Data Factory Contributor' 역할을 할당합니다.전원 셸을 사용하면, 이것을 실현할 수 있습니다.
저는 아래 코드가 좋습니다.Azure credential로 로그인 후 전원 셸에서 시험해 보십시오.
구현:
- 순서 1:
$azureAdApplication = New-AzureRmADApplication -DisplayName <AppName> -HomePage <URL> -IdentifierUris <URL with domain> -Password <Password> - 순서 2:
New-AzureRmRoleAssignment -RoleDefinitionName "Data Factory Contributor" -ServicePrincipalName $azureAdApplication.ApplicationId
다음 게시물을 팔로우하십시오.https://learn.microsoft.com/en-us/azure/azure-resource-manager/resource-group-create-service-principal-portal
이 투고에서는 역할이 "Reader"로 지정되며, "Owner"가 아닌 "Owner"로 지정됩니다.그렇지 않으면 전개 시 권한 오류가 발생합니다.
PowerShell의 다음 명령을 사용하여 https://www.nwcadence.com/blog/resolving-authorizationfailed-2016에 게시하여 해결했습니다.
Get-AzureRmResourceProvider -ListAvailable | Select-Object ProviderNamespace | Foreach-Object { Register-AzureRmResourceProvider -ProviderName $_.ProviderNamespace}
Enterprise Application > Object ID를 찾아서 해결했습니다(App Reg > Application Id를 사용하지 않는 것은 이상합니다).
https://parpaul.cloud/vari/02/03/azure-data-factory-vari-error/
언급URL : https://stackoverflow.com/questions/42134892/the-client-with-object-id-does-not-have-authorization-to-perform-action-microso
'programing' 카테고리의 다른 글
| "이 응용 프로그램은 백그라운드 스레드에서 자동 레이아웃 엔진을 수정하고 있습니다" 오류가 표시됩니까? (0) | 2023.04.21 |
|---|---|
| Bash 구문 오류: 예기치 않은 파일 끝 (0) | 2023.04.21 |
| 스레드 세이프 Collection View는 어디서 구할 수 있나요? (0) | 2023.04.21 |
| Excel에서 웹 페이지로 복사/붙여넣기 (0) | 2023.04.21 |
| 실행 시 WPF 버튼의 이미지가 표시되지 않음 (0) | 2023.04.21 |
