AD 토큰을 포함한 가져오기 요청에 대한 AzureBob 스토리지 "인증 권한 불일치" 오류
저는 Azure Blob Storage에서 CRUD 작업을 할 수 있는 Angular 6 애플리케이션을 구축하고 있습니다.하지만 앱 내에서 구현하기 전에 우체부를 사용하여 요청을 테스트하고 해당 리소스에 대해 Angular에서 얻은 토큰을 복사하여 붙여넣고 있습니다.
테스트 목적으로 스토리지 내부에 있는 파일을 읽으려고 하면 다음과 같은 메시지가 표시됩니다.<Code>AuthorizationPermissionMismatch</Code> <Message>This request is not authorized to perform this operation using this permission.
- 모두 프로덕션 환경(개발 중이지만)
- Oauth를 통해 스토리지 리소스 전용 토큰 획득
- 우체부는 토큰 전략을 "보유자"로 가지고 있습니다.
- 응용 프로그램에 "Azure 스토리지" 위임된 권한이 부여되었습니다.
- 앱과 토큰을 획득하는 계정이 모두 zure 액세스 제어 IAM에서 "소유자"로 추가됩니다.
- 내 IP가 BLOB 저장소의 CORS 설정에 추가되었습니다.
- 스토리지 V2(범용 v2) - 표준 - 핫
- 사용되는 x-ms-version 헤더는 다음과 같습니다.
2018-03-28
왜냐하면 그게 제가 찾을 수 있는 가장 최근의 것이고 제가 방금 스토리지 계정을 만들었기 때문입니다.
앱과 계정을 소유자로 추가하는 것만으로는 부족하다는 것을 알게 되었습니다.스토리지 계정 > IAM > 역할 할당 추가로 이동하여 다음 유형의 요청에 대한 특별 권한을 추가합니다.
- 스토리지 BLOB 데이터 기여자
- 스토리지 대기열 데이터 기여자
스토리지 BLOB 데이터 기여자와 스토리지 계정 기여자가 아닌 스토리지 계정 기여자를 사용해야 합니다. 여기서 후자는 실제 스토리지 계정을 관리하는 데만 사용되며 실제 스토리지 계정에 포함된 데이터는 사용되지 않습니다.
방금 GetAccess에서 요청한 리소스를 변경하여 이 문제를 해결했습니다."https://storage.azure.com "의 TokenAsync 메서드는 다음 스니펫에 있는 내 스토리지 BLOB의 URL로 이동합니다.
public async Task<StorageCredentials> CreateStorageCredentialsAsync()
{
var provider = new AzureServiceTokenProvider();
var token = await provider.GetAccessTokenAsync(AzureStorageContainerUrl);
var tokenCredential = new TokenCredential(token);
var storageCredentials = new StorageCredentials(tokenCredential);
return storageCredentials;
}
여기서 AzureStorageContainerUrl은 https://xxxxxxxxx.blob.core.windows.net/ 으로 설정됩니다.
구독 수준에서 "스토리지 BLOB DATA XXXX" 역할을 적용하려는 경우 구독에 Azure DataBricks 네임스페이스가 있는 경우에는 작동하지 않습니다.
구독에 Azure DataBricks 네임스페이스가 포함된 경우 구독 범위에 할당된 역할이 Blob 및 큐 데이터에 대한 액세스 권한을 부여하지 못하도록 차단됩니다.
출처: https://learn.microsoft.com/en-us/azure/storage/common/storage-auth-aad-rbac-portal#determine-resource-scope
을 반드시 해야 합니다./Y
명령이 끝날 때.
Azure AD를 사용하여 스토리지를 블롭하기 위해 다음을 사용하여 연결했습니다.이 코드는 SDK V11을 사용합니다. V12에 다중 AD 계정 문제가 여전히 있기 때문입니다. https://github.com/Azure/azure-sdk-for-net/issues/8658 V12 및 V11 SDK에 대한 자세한 내용은 이 문제를 참조하십시오.
https://learn.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-dotnet-legacy
https://learn.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-dotnet
using Microsoft.Azure.Services.AppAuthentication;
using Microsoft.Azure.Storage.Auth;
using Microsoft.Azure.Storage.Blob;
using Microsoft.Azure.Storage.Queue;
[Fact]
public async Task TestStreamToContainer()
{
try
{
var accountName = "YourStorageAccountName";
var containerName = "YourContainerName";
var blobName = "File1";
var provider = new AzureServiceTokenProvider();
var token = await provider.GetAccessTokenAsync($"https://{accountName}.blob.core.windows.net");
var tokenCredential = new TokenCredential(token);
var storageCredentials = new StorageCredentials(tokenCredential);
string containerEndpoint = $"https://{accountName}.blob.core.windows.net";
var blobClient = new CloudBlobClient(new Uri(containerEndpoint), storageCredentials);
var containerClient = blobClient.GetContainerReference(containerName);
var cloudBlob = containerClient.GetBlockBlobReference(blobName);
string blobContents = "This is a block blob contents.";
byte[] byteArray = Encoding.ASCII.GetBytes(blobContents);
using (MemoryStream stream = new MemoryStream(byteArray))
{
await cloudBlob.UploadFromStreamAsync(stream);
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.ReadLine();
throw;
}
}
Pipeline(Azure Terraform니사용때할문생습했이제가formaz▁terra▁i▁(▁issue▁when▁anform▁using다니▁this▁had발습)에서 Terraform을 할 때 이 문제가 발생했습니다.TerraformTaskV3@3
) 그리고 이 오류를 받았습니다.
│ Error: Failed to get existing workspaces: containers.Client#ListBlobs: Failure responding to request: StatusCode=403 -- Original Error: autorest/azure: Service returned an error. Status=403 Code="AuthorizationPermissionMismatch"
추가Storage Blob Data Contributor
AzureDevops를 AzureSubscription에 연결하는 데 사용된 서비스 주체에 대한 역할로 문제가 해결되었습니다.
관련 문제:오류: 기존 작업영역: 컨테이너를 가져오지 못했습니다.클라이언트 #ListBlub:
언급URL : https://stackoverflow.com/questions/52769758/azure-blob-storage-authorization-permission-mismatch-error-for-get-request-wit
'code' 카테고리의 다른 글
지정한 VM 설치를 찾을 수 없음: 표준 VM 유형, 이름 jre7 (0) | 2023.05.18 |
---|---|
열거형을 열거하는 방법? (0) | 2023.05.18 |
LINQ를 사용하여 순서 유지 (0) | 2023.05.18 |
명령 프롬프트 / Windows Powershell(Windows 10)에서 UTF-8 인코딩(CHCP 65001) 사용 (0) | 2023.05.18 |
postgresql 포트 혼란 5433 또는 5432? (0) | 2023.05.18 |