다음을 통해 공유


빠른 시작: Microsoft Purview 데이터 공유 .NET SDK를 사용하여 데이터 공유 및 받기

중요

이 기능은 현재 사용 중지 중이며 Microsoft Fabric 외부 데이터 공유로 마이그레이션할 수 있도록 2025년 9월까지 지원이 제공됩니다.

이 빠른 시작에서는 .NET SDK를 사용하여 데이터를 공유하고 Azure Data Lake Storage(ADLS Gen2) 또는 Blob Storage 계정에서 공유를 받습니다. 이 문서에는 Microsoft Purview 데이터 공유 사용하여 공유를 만들고, 수락하고, 관리할 수 있는 코드 조각이 포함되어 있습니다.

데이터 공유의 작동 방식에 대한 개요는 이 짧은 데모를 watch.

참고

이 기능은 2023년 2월에 업데이트되었으며 Microsoft Purview에서 데이터 공유를 보고 관리하는 데 필요한 SDK 및 권한이 변경되었습니다.

  • 이제 Microsoft Purview에서 SDK를 사용하여 공유를 만들고 관리할 수 있는 권한이 필요하지 않습니다. (데이터를 공유하기 위해 Microsoft Purview 거버넌스 포털을 사용하려면 읽기 권한자 권한이 필요합니다.)
  • 스토리지 계정에 대한 사용 권한은 여전히 필요합니다.

업데이트된 SDK를 사용하려면 업데이트된 NuGet 패키지업데이트된 코드 조각을 참조하세요.

필수 구성 요소

Microsoft Purview 필수 구성 요소

  • Microsoft Purview 계정. 두 개의 Microsoft Purview 계정을 사용할 수도 있습니다. 하나는 데이터 공급자용이고 다른 하나는 데이터 소비자가 두 시나리오를 모두 테스트하는 데 사용할 수 있습니다.
  • 초대를 보내는 데 사용할 수 있는 받는 사람의 Azure 로그인 전자 메일 주소입니다. 받는 사람의 이메일 별칭이 작동하지 않습니다.

Azure Storage 계정 필수 구성 요소

  • Azure 구독은 AllowDataSharing 미리 보기 기능에 등록되어야 합니다. (이 미리 보기 기능을 아직 등록하지 않은 경우 2025년 9월에 Microsoft Purview 데이터 공유 사용 중지되므로 Microsoft Fabric 외부 데이터 공유를 대신 사용하는 것이 좋습니다.) 또는 지원에 문의하세요.
  • 등록 단계가 완료된 후 생성된 원본 및 대상 스토리지 계정입니다. 두 스토리지 계정은 서로 동일한 Azure 지역에 있어야 합니다. 두 스토리지 계정은 모두 ADLS Gen2 또는 Blob Storage 계정이어야 합니다. 스토리지 계정은 Microsoft Purview 계정과 다른 Azure 지역에 있을 수 있습니다.
  • 스토리지 SDK, PowerShell, CLI 및 Azure Storage Explorer 최신 버전입니다. 스토리지 REST API 버전은 2020년 2월 이상이어야 합니다.
  • 공유를 보내거나 받을 컬렉션에 스토리지 계정을 등록해야 합니다. 하나의 Microsoft Purview 계정을 사용하는 경우 두 개의 서로 다른 컬렉션 또는 동일한 컬렉션일 수 있습니다. 등록 지침은 ADLS Gen2 또는 Blob Storage 데이터 원본 페이지를 참조하세요.
  • 원본 또는 대상 스토리지 계정이 Microsoft Purview 계정인 Microsoft용 구독과 다른 Azure 구독에 있는 경우 Purview 리소스 공급자는 자산 또는 공유 소비자 매핑 자산을 추가할 때 데이터 저장소가 있는 Azure 구독에 자동으로 등록되며, 사용자가 리소스 공급자에 대해 /register/action 작업을 수행할 권한이 있는 경우에만 등록됩니다. 사용 권한은 기여자 및 소유자 역할에 포함됩니다.

    참고

    이 등록은 Azure 구독의 스토리지 계정으로 데이터를 공유하거나 수신하는 경우에만 처음 필요합니다.

필수 역할

다음은 데이터를 공유하고 공유를 받는 데 필요한 역할입니다.

Azure Storage 계정 역할 Microsoft Purview 컬렉션 역할
데이터 공급자 다음 역할 중 하나입니다.
  • 소유자
  • Storage Blob 데이터 소유자
데이터 판독기
데이터 소비자 다음 역할 중 하나입니다.
  • 참가자
  • 소유자
  • Storage Blob 데이터 기여자
  • Storage Blob 데이터 소유자
데이터 판독기

참고

Microsoft Purview 계정을 만든 경우 모든 역할이 루트 컬렉션에 자동으로 할당됩니다. Microsoft Purview 컬렉션 및 역할에 대한 자세한 내용은 Microsoft Purview 권한을 참조하세요.

Visual Studio

이 문서의 연습에서는 Visual Studio 2022를 사용합니다. Visual Studio 2013, 2015, 2017 또는 2019에 대한 절차는 약간 다를 수 있습니다.

Azure .NET SDK

컴퓨터에 Azure .NET SDK 를 다운로드하여 설치합니다.

서비스 주체 사용

이 자습서의 코드 조각에서는 사용자 고유의 자격 증명을 사용하거나 서비스 주체를 사용하여 인증할 수 있습니다. 서비스 주체를 설정하려면 다음 지침을 따릅니다.

  1. Microsoft Entra 애플리케이션 만들기에서 이 자습서에서 만드는 .NET 애플리케이션을 나타내는 애플리케이션을 만듭니다. 로그온 URL의 경우 문서(https://contoso.org/exampleapp)에 표시된 것처럼 더미 URL을 제공할 수 있습니다.

  2. 로그인할 값 가져오기에서애플리케이션 ID, 테넌트 ID개체 ID를 가져오고 이 자습서의 뒷부분에서 사용하는 이러한 값을 적어둡니다.

  3. 인증서 및 비밀에서 인증 키를 가져와서 이 자습서의 뒷부분에서 사용하는 이 값을 적어둡니다.

  4. 다음 역할에 애플리케이션을 할당합니다.

    사용자 Azure Storage 계정 역할 Microsoft Purview 컬렉션 역할
    데이터 공급자 다음 역할 중 하나입니다.
    • 소유자
    • Blob Storage 데이터 소유자
    Data Share 기여자
    데이터 소비자 다음 역할 중 하나입니다.
    • 참가자
    • 소유자
    • Storage Blob 데이터 기여자
    • Blob Storage 데이터 소유자
    Data Share 기여자

Visual Studio 프로젝트 만들기

다음으로 Visual Studio에서 C# .NET 콘솔 애플리케이션을 만듭니다.

  1. Visual Studio를 시작합니다.
  2. 시작 창에서 새 프로젝트>콘솔 앱 만들기를 선택합니다. .NET 버전 6.0 이상이 필요합니다.
  3. 프로젝트 이름PurviewDataSharingQuickStart를 입력합니다.
  4. 만들기를 선택하여 프로젝트를 만듭니다.

NuGet 패키지 설치

  1. 도구>NuGet 패키지 관리자>패키지 관리자 콘솔을 선택합니다.

  2. 패키지 관리 콘솔에서 이 페이지에 표시된 .NET cli add package 명령을 실행하여 NuGet 패키지 Microsoft.Azure.Analytics.Purview.Sharing NuGet 패키지를 추가합니다.

  3. 패키지 관리자 콘솔 창에서 다음 명령을 실행하여 패키지를 설치합니다.

    Install-Package Azure.Analytics.Purview.Sharing -IncludePrerelease
    Install-Package Azure.Identity
    

    "에서 프로젝트를 찾을 수 없음..."이라는 오류가 발생하는 경우 이러한 명령을 시도할 때 프로젝트에서 폴더 수준을 아래로 이동하기만 하면 됩니다. 명령을 dir 사용하여 디렉터리에 폴더를 나열한 다음 ,'프로젝트 폴더>의 cd <이름'을 사용하여 수준 아래로 프로젝트 폴더로 이동합니다. 그런 다음 다시 시도하십시오.

보낸 공유 만들기

이 스크립트는 내부 또는 외부 사용자에게 보낼 수 있는 데이터 공유를 만듭니다. 이 변수를 사용하려면 다음 변수를 작성해야 합니다.

  • SenderTenantId - 보낸 사람의 ID에 대한 Azure 테넌트 ID 입니다.
  • SenderPurviewAccountName - 데이터를 보낼 Microsoft Purview 계정의 이름입니다.
  • ShareName - 보낸 공유의 표시 이름입니다.
  • ShareDescription - (선택 사항) 보낸 공유에 대한 설명입니다.
  • SenderStorageKind - BlobAccount 또는 AdlsGen2Account.
  • SenderStorageResourceId - 데이터를 보낼 스토리지 계정의 리소스 ID 입니다.
  • SenderStorageContainer - 공유할 데이터가 저장되는 컨테이너의 이름입니다.
  • SenderPathToShare - 공유할 데이터의 파일/폴더 경로입니다.
  • UseServiceTokenCredentials - (선택 사항) 서비스 주체를 사용하여 공유를 만들려면 이를 true로 설정합니다.
  • SenderClientId - (선택 사항) 서비스 주체를 사용하여 공유를 만드는 경우 서비스 주체에 대한 애플리케이션(클라이언트) ID입니다.
  • SenderClientSecret - (선택 사항) 서비스 주체를 사용하여 공유를 만드는 경우 클라이언트 비밀/인증 키를 추가합니다.
  • SentShareID - (선택 사항) 이 옵션은 GUID여야 하며 현재 값은 자동으로 생성되지만 원하는 경우 다른 값으로 바꿀 수 있습니다.
  • ReceiverVisiblePath - (선택 사항) 수신기에서 볼 수 있는 공유의 이름입니다. 현재 GUID로 설정되어 있지만 GUID는 필요하지 않습니다.
  • SenderPurviewEndPoint - 클래식 Microsoft purview 환경을 사용하는 경우 를 사용합니다 $"https://{SenderPurviewAccountName}.purview.azure.com". 새 Microsoft Purview 환경을 사용하는 경우 https://api.purview-service.microsoft.com/
using Azure;
using Azure.Analytics.Purview.Sharing;
using Azure.Core;
using Azure.Identity;
using System.ComponentModel;

public static class PurviewDataSharingQuickStart
{
    // [REQUIRED INPUTS] Set To Actual Values.
    private static string SenderTenantId = "<Sender Identity's Tenant ID>";
    private static string SenderPurviewAccountName = "<Sender Purview Account Name>";

    private static string ShareName = "<Share Display Name>";
    private static string ShareDescription = "Share created using the SDK.";
    private static string SenderStorageKind = "<Sender Storage Account Kind (BlobAccount / AdlsGen2Account)>";
    private static string SenderStorageResourceId = "<Sender Storage Account Resource Id>";
    private static string SenderStorageContainer = "<Share Data Container Name>";
    private static string SenderPathToShare = "<File/Folder Path To Share>";

    // Set if using Service principal to create shares
    private static bool UseServiceTokenCredentials = false;
    private static string SenderClientId = "<Sender Application (Client) Id>";
    private static string SenderClientSecret = "<Sender Application (Client) Secret>";

    // [OPTIONAL INPUTS] Override Value If Desired.
    private static string SentShareId = Guid.NewGuid().ToString();
    private static string ReceiverVisiblePath = Guid.NewGuid().ToString();

    // General Configs
    private static string SenderPurviewEndPoint = $"https://{SenderPurviewAccountName}.purview.azure.com";
    private static string SenderShareEndPoint = $"{SenderPurviewEndPoint}/share";

    private static async Task Main(string[] args)
    {
        try
        {
            /// Replace all placeholder inputs above with actual values before running this program.
            /// This updated Share experience API will create Shares based on callers RBAC role on the storage account.
            /// To view/manage Shares via UX in Purview Studio. Storage accounts need to be registered (one time action) in Purview account with DSA permissions.

            Console.WriteLine($"{DateTime.Now.ToShortTimeString()}: CreateShare - START");
            await Sender_CreateSentShare();
            Console.WriteLine($"{DateTime.Now.ToShortTimeString()}: CreateShare - FINISH");
        }
        catch (Exception ex)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(ex);
            Console.ForegroundColor = Console.ForegroundColor;
        }
    }

    private static async Task<BinaryData> Sender_CreateSentShare()
    {

        TokenCredential senderCredentials = UseServiceTokenCredentials
                ? new ClientSecretCredential(SenderTenantId, SenderClientId, SenderClientSecret)
                : new DefaultAzureCredential(new DefaultAzureCredentialOptions { AuthorityHost = new Uri("https://login.windows.net"), TenantId = SenderTenantId });

        SentSharesClient? sentSharesClient = new SentSharesClient(SenderShareEndPoint, senderCredentials);

        if (sentSharesClient == null)
        {
            throw new InvalidEnumArgumentException("Invalid Sent Shares Client.");
        }

        // Create sent share
        var inPlaceSentShareDto = new
        {
            shareKind = "InPlace",
            properties = new
            {
                displayName = ShareName,
                description = ShareDescription,
                artifact = new
                {
                    storeKind = SenderStorageKind,
                    storeReference = new
                    {
                        referenceName = SenderStorageResourceId,
                        type = "ArmResourceReference"
                    },
                    properties = new
                    {
                        paths = new[]
                        {
                            new
                            {
                                receiverPath = ReceiverVisiblePath,
                                containerName = SenderStorageContainer,
                                senderPath = SenderPathToShare
                            }
                        }
                    }
                }
            },
        };

        Operation<BinaryData> sentShare = await sentSharesClient.CreateOrReplaceSentShareAsync(WaitUntil.Completed, SentShareId, RequestContent.Create(inPlaceSentShareDto));
        Console.ForegroundColor = ConsoleColor.Green;
        Console.WriteLine(sentShare.Value);
        Console.ForegroundColor = Console.ForegroundColor;
        return sentShare.Value;
    }
}

사용자에게 초대 보내기

이 스크립트는 공유에 대한 전자 메일 초대를 사용자에게 보냅니다. 서비스 주체에게 초대를 보내려면 다음 코드 예제를 참조하세요. 이 변수를 사용하려면 다음 변수를 작성해야 합니다.

  • RecipientUserEmailId - 사용자가 초대를 보낼 Email 주소입니다.
  • SenderTenantId - 공유 보낸 사람의 ID에 대한 Azure 테넌트 ID입니다.
  • SenderPurviewAccountName - 데이터를 보낼 Microsoft Purview 계정의 이름입니다.
  • SenderStorageResourceId - 데이터를 보낼 스토리지 계정의 리소스 ID 입니다.
  • SentShareDisplayName - 초대를 보내는 보낸 공유의 이름입니다.
  • UseServiceTokenCredentials - (선택 사항) 서비스 주체를 사용하여 공유를 만들려면 이를 true로 설정합니다.
  • SenderClientId - (선택 사항) 서비스 주체를 사용하여 공유를 만드는 경우 서비스 주체에 대한 애플리케이션(클라이언트) ID입니다.
  • SenderClientSecret - (선택 사항) 서비스 주체를 사용하여 공유를 만드는 경우 클라이언트 비밀/인증 키를 추가합니다.
  • InvitationId - (선택 사항) 이 옵션은 GUID여야 하며 현재 값은 자동으로 생성되지만 원하는 경우 다른 값으로 바꿀 수 있습니다.
  • SenderPurviewEndPoint - 클래식 Microsoft purview 환경을 사용하는 경우 를 사용합니다 $"https://{SenderPurviewAccountName}.purview.azure.com". 새 Microsoft Purview 환경을 사용하는 경우 https://api.purview-service.microsoft.com/
using Azure;
using Azure.Analytics.Purview.Sharing;
using Azure.Core;
using Azure.Identity;
using System.ComponentModel;
using System.Text.Json;

public static class PurviewDataSharingQuickStart
{
    // [REQUIRED INPUTS] Set To Actual Values.
    private static string RecipientUserEmailId = "<Target User's Email Id>";

    private static string SenderTenantId = "<Sender Indentity's Tenant ID>";
    private static string SenderPurviewAccountName = "<Sender Purview Account Name>";
    private static string SenderStorageResourceId = "<Sender Storage Account Resource Id>";

    // Set if using Service principal to send invitation
    private static bool UseServiceTokenCredentials = false;
    private static string SenderClientId = "<Sender Application (Client) Id>";
    private static string SenderClientSecret = "<Sender Application (Client) Secret>";

    private static string SentShareDisplayName = "<Name of share you're sending an invite for.>";
    private static string InvitationId = Guid.NewGuid().ToString();

    // General Configs
    private static string SenderPurviewEndPoint = $"https://{SenderPurviewAccountName}.purview.azure.com";
    private static string SenderShareEndPoint = $"{SenderPurviewEndPoint}/share";
    private static int StepCounter = 0;

    private static async Task Main(string[] args)
    {
        try
        {

            Console.WriteLine($"{DateTime.Now.ToShortTimeString()}: SendtoUser - START");
            await Sender_CreateUserRecipient();
            Console.WriteLine($"{DateTime.Now.ToShortTimeString()}: SendtoUser - FINISH");
        }
        catch (Exception ex)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(ex);
            Console.ForegroundColor = Console.ForegroundColor;
        }
    }

    public static async Task<List<T>> ToResultList<T>(this AsyncPageable<T> asyncPageable)
    {
        List<T> list = new List<T>();

        await foreach (T item in asyncPageable)
        {
            list.Add(item);
        }

        return list;
    }

    private static async Task<BinaryData> Sender_CreateUserRecipient()
    {

        TokenCredential senderCredentials = UseServiceTokenCredentials
                ? new ClientSecretCredential(SenderTenantId, SenderClientId, SenderClientSecret)
                : new DefaultAzureCredential(new DefaultAzureCredentialOptions { AuthorityHost = new Uri("https://login.windows.net"), TenantId = SenderTenantId });

        SentSharesClient? sentSharesClient = new SentSharesClient(SenderShareEndPoint, senderCredentials);

        if (string.IsNullOrEmpty(RecipientUserEmailId))
        {
            throw new InvalidEnumArgumentException("Invalid Recipient User Email Id.");
        }

        // Create user recipient and invite
        var invitationData = new
        {
            invitationKind = "User",
            properties = new
            {
                expirationDate = DateTime.Now.AddDays(7).ToString(),
                notify = true, // Send invitation email
                targetEmail = RecipientUserEmailId
            }
        };

        var allSentShares = await sentSharesClient.GetAllSentSharesAsync(SenderStorageResourceId).ToResultList();

        Console.ForegroundColor = ConsoleColor.Yellow;
        Console.WriteLine("{0}. {1}...", ++StepCounter, "Get a Specific Sent Share");
        Console.ForegroundColor = Console.ForegroundColor;

        var mySentShare = allSentShares.First(sentShareDoc =>
        {
            var doc = JsonDocument.Parse(sentShareDoc).RootElement;
            var props = doc.GetProperty("properties");
            return props.GetProperty("displayName").ToString() == SentShareDisplayName;
        });

        Console.ForegroundColor = ConsoleColor.Green;
        Console.WriteLine("My Sent Share Id: " + JsonDocument.Parse(mySentShare).RootElement.GetProperty("id").ToString());
        Console.ForegroundColor = Console.ForegroundColor;

        var SentShareId = JsonDocument.Parse(mySentShare).RootElement.GetProperty("id").ToString();

        var sentInvitation = await sentSharesClient.CreateSentShareInvitationAsync(SentShareId, InvitationId, RequestContent.Create(invitationData));

        Console.ForegroundColor = ConsoleColor.Green;
        Console.WriteLine(sentInvitation.Content);
        Console.ForegroundColor = Console.ForegroundColor;

        return sentInvitation.Content;
    }
}

서비스에 초대 보내기

이 스크립트는 공유에 대한 이메일 초대를 서비스 주체에게 보냅니다. 사용자에게 초대를 보내려면 이전 샘플을 참조하세요. 이 변수를 사용하려면 다음 변수를 작성해야 합니다.

  • RecipientApplicationTenantId - 수신 서비스 주체에 대한 Azure 테넌트 ID입니다.
  • RecipientApplicationObjectId - 수신 서비스 주체의 개체 ID입니다.
  • SenderTenantId - 공유 보낸 사람의 ID에 대한 Azure 테넌트 ID입니다.
  • SenderPurviewAccountName - 데이터를 보낼 Microsoft Purview 계정의 이름입니다.
  • SenderStorageResourceId - 데이터를 보낼 스토리지 계정의 리소스 ID 입니다.
  • SentShareDisplayName - 초대를 보내는 보낸 공유의 이름입니다.
  • UseServiceTokenCredentials - (선택 사항) 서비스 주체를 사용하여 공유를 만들려면 이를 true로 설정합니다.
  • SenderClientId - (선택 사항) 서비스 주체를 사용하여 공유를 만드는 경우 서비스 주체에 대한 애플리케이션(클라이언트) ID입니다.
  • SenderClientSecret - (선택 사항) 서비스 주체를 사용하여 공유를 만드는 경우 클라이언트 비밀/인증 키를 추가합니다.
  • InvitationId - (선택 사항) 이 옵션은 GUID여야 하며 현재 값은 자동으로 생성되지만 원하는 경우 다른 값으로 바꿀 수 있습니다.
  • SenderPurviewEndPoint - 클래식 Microsoft purview 환경을 사용하는 경우 를 사용합니다 $"https://{SenderPurviewAccountName}.purview.azure.com". 새 Microsoft Purview 환경을 사용하는 경우 https://api.purview-service.microsoft.com/
using Azure;
using Azure.Analytics.Purview.Sharing;
using Azure.Core;
using Azure.Identity;
using System.ComponentModel;
using System.Text.Json;

public static class PurviewDataSharingQuickStart
{
    // [REQUIRED INPUTS] Set To Actual Values.
    private static string RecipientApplicationTenantId = "<Target Application's Tenant Id>";
    private static string RecipientApplicationObjectId = "<Target Application's Object Id>";

    private static string SentShareDisplayName = "<Name of share you're sending an invite for.>";
    private static string InvitationId = Guid.NewGuid().ToString();

    private static string SenderTenantId = "<Sender Indentity's Tenant ID>";
    private static string SenderPurviewAccountName = "<Sender Purview Account Name>";

    private static string SenderStorageResourceId = "<Resource ID for storage account that has been shared>";

    // Set if using Service principal to send invitation
    private static bool UseServiceTokenCredentials = false;
    private static string SenderClientId = "<Sender Application (Client) Id>";
    private static string SenderClientSecret = "<Sender Application (Client) Secret>";

    // General Configs
    private static string SenderPurviewEndPoint = $"https://{SenderPurviewAccountName}.purview.azure.com";
    private static string SenderShareEndPoint = $"{SenderPurviewEndPoint}/share";

    private static async Task Main(string[] args)
    {
        try
        {

            Console.WriteLine($"{DateTime.Now.ToShortTimeString()}: SendtoService - START");
            await Sender_CreateServiceRecipient();
            Console.WriteLine($"{DateTime.Now.ToShortTimeString()}: SendtoService - FINISH");
        }
        catch (Exception ex)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(ex);
            Console.ForegroundColor = Console.ForegroundColor;
        }
    }

    public static async Task<List<T>> ToResultList<T>(this AsyncPageable<T> asyncPageable)
    {
        List<T> list = new List<T>();

        await foreach (T item in asyncPageable)
        {
            list.Add(item);
        }

        return list;
    }

    private static async Task<BinaryData> Sender_CreateServiceRecipient()
    {

        TokenCredential senderCredentials = UseServiceTokenCredentials
                ? new ClientSecretCredential(SenderTenantId, SenderClientId, SenderClientSecret)
                : new DefaultAzureCredential(new DefaultAzureCredentialOptions { AuthorityHost = new Uri("https://login.windows.net"), TenantId = SenderTenantId });

        SentSharesClient? sentSharesClient = new SentSharesClient(SenderShareEndPoint, senderCredentials);

        if (!Guid.TryParse(RecipientApplicationTenantId, out Guid _))
        {
            throw new InvalidEnumArgumentException("Invalid Recipient Service Tenant Id.");
        }

        if (!Guid.TryParse(RecipientApplicationObjectId, out Guid _))
        {
            throw new InvalidEnumArgumentException("Invalid Recipient Service Object Id.");
        }

        // Create service recipient
        var invitationData = new
        {
            invitationKind = "Service",
            properties = new
            {
                expirationDate = DateTime.Now.AddDays(5).ToString(),
                targetActiveDirectoryId = RecipientApplicationTenantId,
                targetObjectId = RecipientApplicationObjectId
            }
        };


        var allSentShares = await sentSharesClient.GetAllSentSharesAsync(SenderStorageResourceId).ToResultList();
        var mySentShare = allSentShares.First(sentShareDoc =>
        {
            var doc = JsonDocument.Parse(sentShareDoc).RootElement;
            var props = doc.GetProperty("properties");
            return props.GetProperty("displayName").ToString() == SentShareDisplayName;
        });

        var SentShareId = JsonDocument.Parse(mySentShare).RootElement.GetProperty("id").ToString();

        var sentInvitation = await sentSharesClient.CreateSentShareInvitationAsync(SentShareId, InvitationId, RequestContent.Create(invitationData));
        Console.ForegroundColor = ConsoleColor.Green;
        Console.WriteLine(sentInvitation.Content);
        Console.ForegroundColor = Console.ForegroundColor;
        return sentInvitation.Content;
    }

}

보낸 공유 나열

이 스크립트는 특정 스토리지 리소스에 대해 전송된 모든 공유를 나열합니다. 이 변수를 사용하려면 다음 변수를 작성해야 합니다.

  • SenderTenantId - 공유 보낸 사람의 ID에 대한 Azure 테넌트 ID입니다.
  • SenderPurviewAccountName - 데이터를 보낸 Microsoft Purview 계정의 이름입니다.
  • SenderStorageResourceId - 공유가 전송된 스토리지 계정의 리소스 ID 입니다.
  • UseServiceTokenCredentials - (선택 사항) 서비스 주체를 사용하여 공유를 만들려면 이를 true로 설정합니다.
  • SenderClientId - (선택 사항) 서비스 주체를 사용하여 공유를 만드는 경우 서비스 주체에 대한 애플리케이션(클라이언트) ID입니다.
  • SenderClientSecret - (선택 사항) 서비스 주체를 사용하여 공유를 만드는 경우 클라이언트 비밀/인증 키를 추가합니다.
  • SenderPurviewEndPoint - 클래식 Microsoft purview 환경을 사용하는 경우 를 사용합니다 $"https://{SenderPurviewAccountName}.purview.azure.com". 새 Microsoft Purview 환경을 사용하는 경우 https://api.purview-service.microsoft.com/
using Azure;
using Azure.Analytics.Purview.Sharing;
using Azure.Core;
using Azure.Identity;

public static class PurviewDataSharingQuickStart
{
    // [REQUIRED INPUTS] Set To Actual Values.
    private static string SenderTenantId = "<Sender Tenant ID>";
    private static string SenderPurviewAccountName = "<Name of the Microsoft Purview account>";
    private static string SenderStorageResourceId = "<Sender Storage Account Resource Id>";

    // Set if using Service principal to list shares
    private static bool UseServiceTokenCredentials = false;
    private static string SenderClientId = "<Sender Application (Client) Id>";
    private static string SenderClientSecret = "<Sender Application (Client) Secret>";

    // General Configs
    private static string SenderPurviewEndPoint = $"https://{SenderPurviewAccountName}.purview.azure.com";
    private static string SenderShareEndPoint = $"{SenderPurviewEndPoint}/share";

    private static async Task Main(string[] args)
    {


        try
        {
            TokenCredential senderCredentials = UseServiceTokenCredentials
                ? new ClientSecretCredential(SenderTenantId, SenderClientId, SenderClientSecret)
                : new DefaultAzureCredential(new DefaultAzureCredentialOptions { AuthorityHost = new Uri("https://login.windows.net"), TenantId = SenderTenantId });

            SentSharesClient? sentSharesClient = new SentSharesClient(SenderShareEndPoint, senderCredentials);

            var allSentShares = await sentSharesClient.GetAllSentSharesAsync(SenderStorageResourceId).ToResultList();
            Console.WriteLine(allSentShares);
        }
        catch (Exception ex)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(ex);
            Console.ForegroundColor = Console.ForegroundColor;
        }
    }

    public static async Task<List<T>> ToResultList<T>(this AsyncPageable<T> asyncPageable)
    {
        List<T> list = new List<T>();

        await foreach (T item in asyncPageable)
        {
            list.Add(item);
        }

        return list;
    }
}

모든 공유 받는 사람 나열

이 스크립트는 특정 공유에 대한 모든 받는 사람을 나열합니다. 이 변수를 사용하려면 다음 변수를 작성해야 합니다.

  • SenderTenantId - 공유 보낸 사람의 ID에 대한 Azure 테넌트 ID입니다.
  • SenderPurviewAccountName - 데이터를 보낸 Microsoft Purview 계정의 이름입니다.
  • SentShareDisplayName - 받는 사람을 나열하는 보낸 공유의 이름입니다.
  • SenderStorageResourceId - 데이터를 보낼 스토리지 계정의 리소스 ID 입니다.
  • UseServiceTokenCredentials - (선택 사항) 서비스 주체를 사용하여 공유를 만들려면 이를 true로 설정합니다.
  • SenderClientId - (선택 사항) 서비스 주체를 사용하여 공유를 만드는 경우 서비스 주체에 대한 애플리케이션(클라이언트) ID입니다.
  • SenderClientSecret - (선택 사항) 서비스 주체를 사용하여 공유를 만드는 경우 클라이언트 비밀/인증 키를 추가합니다.
  • SenderPurviewEndPoint - 클래식 Microsoft purview 환경을 사용하는 경우 를 사용합니다 $"https://{SenderPurviewAccountName}.purview.azure.com". 새 Microsoft Purview 환경을 사용하는 경우 https://api.purview-service.microsoft.com/
using Azure;
using Azure.Analytics.Purview.Sharing;
using Azure.Core;
using Azure.Identity;
using System.Text.Json;

public static class PurviewDataSharingQuickStart
{
    // [REQUIRED INPUTS] Set To Actual Values.
    private static string SentShareDisplayName = "<Name of share you're listing recipients for.>";
    private static string SenderTenantId = "<Sender Tenant ID>";
    private static string SenderPurviewAccountName = "<Name of the Microsoft Purview account>";

    private static string SenderStorageResourceId = "<Sender Storage Account Resource Id>";

    // Set if using Service principal to list recipients
    private static bool UseServiceTokenCredentials = false;
    private static string SenderClientId = "<Sender Application (Client) Id>";
    private static string SenderClientSecret = "<Sender Application (Client) Secret>";

    // General Configs
    private static string SenderPurviewEndPoint = $"https://{SenderPurviewAccountName}.purview.azure.com";
    private static string SenderShareEndPoint = $"{SenderPurviewEndPoint}/share";

    private static async Task Main(string[] args)
    {
        try
        {
            TokenCredential senderCredentials = UseServiceTokenCredentials
                ? new ClientSecretCredential(SenderTenantId, SenderClientId, SenderClientSecret)
                : new DefaultAzureCredential(new DefaultAzureCredentialOptions { AuthorityHost = new Uri("https://login.windows.net"), TenantId = SenderTenantId });

            SentSharesClient? sentSharesClient = new SentSharesClient(SenderShareEndPoint, senderCredentials);

            var allSentShares = await sentSharesClient.GetAllSentSharesAsync(SenderStorageResourceId).ToResultList();
            var mySentShare = allSentShares.First(sentShareDoc =>
            {
                var doc = JsonDocument.Parse(sentShareDoc).RootElement;
                var props = doc.GetProperty("properties");
                return props.GetProperty("displayName").ToString() == SentShareDisplayName;
            });

            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("My Sent Share Id: " + JsonDocument.Parse(mySentShare).RootElement.GetProperty("id").ToString());
            Console.ForegroundColor = Console.ForegroundColor;

            var SentShareId = JsonDocument.Parse(mySentShare).RootElement.GetProperty("id").ToString();

            var allRecipients = await sentSharesClient.GetAllSentShareInvitationsAsync(SentShareId).ToResultList();
            Console.WriteLine(allRecipients);

        }
        catch (Exception ex)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(ex);
            Console.ForegroundColor = Console.ForegroundColor;
        }
    }

    public static async Task<List<T>> ToResultList<T>(this AsyncPageable<T> asyncPageable)
    {
        List<T> list = new List<T>();

        await foreach (T item in asyncPageable)
        {
            list.Add(item);
        }

        return list;
    }
}

받는 사람 삭제

이 스크립트는 받는 사람에 대한 공유 초대 및 공유를 제거합니다. 이 변수를 사용하려면 다음 변수를 작성해야 합니다.

  • SenderTenantId - 공유 보낸 사람의 ID에 대한 Azure 테넌트 ID입니다.
  • SenderPurviewAccountName - 데이터를 보낸 Microsoft Purview 계정의 이름입니다.
  • SentShareDisplayName - 받는 사람을 제거하는 보낸 공유의 이름입니다.
  • SenderStorageResourceId - 데이터를 보낼 스토리지 계정의 리소스 ID 입니다.
  • RecipientUserEmailId - 삭제하려는 사용자의 Email 주소입니다.
  • UseServiceTokenCredentials - (선택 사항) 서비스 주체를 사용하여 공유를 만들려면 이를 true로 설정합니다.
  • SenderClientId - (선택 사항) 서비스 주체를 사용하여 공유를 만드는 경우 서비스 주체에 대한 애플리케이션(클라이언트) ID입니다.
  • SenderClientSecret - (선택 사항) 서비스 주체를 사용하여 공유를 만드는 경우 클라이언트 비밀/인증 키를 추가합니다.
  • SenderPurviewEndPoint - 클래식 Microsoft purview 환경을 사용하는 경우 를 사용합니다 $"https://{SenderPurviewAccountName}.purview.azure.com". 새 Microsoft Purview 환경을 사용하는 경우 https://api.purview-service.microsoft.com/
using Azure;
using Azure.Analytics.Purview.Sharing;
using Azure.Core;
using Azure.Identity;
using System.Text.Json;

public static class PurviewDataSharingQuickStart
{
    // [REQUIRED INPUTS] Set To Actual Values.
    private static string SentShareDisplayName = "<Name of share you're removing a recipient for.>";
    private static string SenderTenantId = "<Sender Tenant ID>";
    private static string SenderPurviewAccountName = "<Name of the Microsoft Purview account>";
    private static string RecipientUserEmailId = "<Target User's Email Id>";

    private static string SenderStorageResourceId = "<Sender Storage Account Resource Id>";

    // Set if using Service principal to delete recipients
    private static bool UseServiceTokenCredentials = false;
    private static string SenderClientId = "<Sender Application (Client) Id>";
    private static string SenderClientSecret = "<Sender Application (Client) Secret>";

    // General Configs
    private static string SenderPurviewEndPoint = $"https://{SenderPurviewAccountName}.purview.azure.com";
    private static string SenderShareEndPoint = $"{SenderPurviewEndPoint}/share";

    private static async Task Main(string[] args)
    {
        try
        {
            TokenCredential senderCredentials = UseServiceTokenCredentials
                ? new ClientSecretCredential(SenderTenantId, SenderClientId, SenderClientSecret)
                : new DefaultAzureCredential(new DefaultAzureCredentialOptions { AuthorityHost = new Uri("https://login.windows.net"), TenantId = SenderTenantId });

            SentSharesClient? sentSharesClient = new SentSharesClient(SenderShareEndPoint, senderCredentials);

            var allSentShares = await sentSharesClient.GetAllSentSharesAsync(SenderStorageResourceId).ToResultList();

            var mySentShare = allSentShares.First(sentShareDoc =>
            {
                var doc = JsonDocument.Parse(sentShareDoc).RootElement;
                var props = doc.GetProperty("properties");
                return props.GetProperty("displayName").ToString() == SentShareDisplayName;
            });

            var SentShareId = JsonDocument.Parse(mySentShare).RootElement.GetProperty("id").ToString();

            var allRecipients = await sentSharesClient.GetAllSentShareInvitationsAsync(SentShareId).ToResultList();

            var recipient = allRecipients.First(recipient =>
            {
                var doc = JsonDocument.Parse(recipient).RootElement;
                var props = doc.GetProperty("properties");
                return props.TryGetProperty("targetEmail", out JsonElement rcpt) && rcpt.ToString() == RecipientUserEmailId;
            });

            var recipientId = JsonDocument.Parse(recipient).RootElement.GetProperty("id").ToString();

            await sentSharesClient.DeleteSentShareInvitationAsync(WaitUntil.Completed, SentShareId, recipientId);

            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("Remove Id: " + JsonDocument.Parse(recipient).RootElement.GetProperty("id").ToString());
            Console.WriteLine("Complete");
            Console.ForegroundColor = Console.ForegroundColor;

        }

        catch (Exception ex)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(ex);
            Console.ForegroundColor = Console.ForegroundColor;
        }
    }

    public static async Task<List<T>> ToResultList<T>(this AsyncPageable<T> asyncPageable)
    {
        List<T> list = new List<T>();

        await foreach (T item in asyncPageable)
        {
            list.Add(item);
        }

        return list;
    }
}

보낸 공유 삭제

이 스크립트는 보낸 공유를 삭제합니다. 이 변수를 사용하려면 다음 변수를 작성해야 합니다.

  • SenderTenantId - 공유 보낸 사람의 ID에 대한 Azure 테넌트 ID입니다.
  • SenderPurviewAccountName - 데이터를 보낸 Microsoft Purview 계정의 이름입니다.
  • SentShareDisplayName - 받는 사람을 나열하는 보낸 공유의 이름입니다.
  • SenderStorageResourceId - 데이터를 보낼 스토리지 계정의 리소스 ID 입니다.
  • UseServiceTokenCredentials - (선택 사항) 서비스 주체를 사용하여 공유를 만들려면 이를 true로 설정합니다.
  • SenderClientId - (선택 사항) 서비스 주체를 사용하여 공유를 만드는 경우 서비스 주체에 대한 애플리케이션(클라이언트) ID입니다.
  • SenderClientSecret - (선택 사항) 서비스 주체를 사용하여 공유를 만드는 경우 클라이언트 비밀/인증 키를 추가합니다.
  • SenderPurviewEndPoint - 클래식 Microsoft purview 환경을 사용하는 경우 를 사용합니다 $"https://{SenderPurviewAccountName}.purview.azure.com". 새 Microsoft Purview 환경을 사용하는 경우 https://api.purview-service.microsoft.com/
using Azure;
using Azure.Analytics.Purview.Sharing;
using Azure.Core;
using Azure.Identity;
using System.Text.Json;

public static class PurviewDataSharingQuickStart
{
    // [REQUIRED INPUTS] Set To Actual Values.
    private static string SenderTenantId = "<Sender Tenant ID>";
    private static string SenderPurviewAccountName = "<Name of the Microsoft Purview account>";
    private static string SentShareDisplayName = "<Name of share you're removing.>";

    private static string SenderStorageResourceId = "<Sender Storage Account Resource Id>";

    // Set if using Service principal to delete share
    private static bool UseServiceTokenCredentials = false;
    private static string SenderClientId = "<Sender Application (Client) Id>";
    private static string SenderClientSecret = "<Sender Application (Client) Secret>";

    // General Configs
    private static string SenderPurviewEndPoint = $"https://{SenderPurviewAccountName}.purview.azure.com";
    private static string SenderShareEndPoint = $"{SenderPurviewEndPoint}/share";

    private static async Task Main(string[] args)
    {
        try
        {
            TokenCredential senderCredentials = UseServiceTokenCredentials
                ? new ClientSecretCredential(SenderTenantId, SenderClientId, SenderClientSecret)
                : new DefaultAzureCredential(new DefaultAzureCredentialOptions { AuthorityHost = new Uri("https://login.windows.net"), TenantId = SenderTenantId });

            SentSharesClient? sentSharesClient = new SentSharesClient(SenderShareEndPoint, senderCredentials);

            var allSentShares = await sentSharesClient.GetAllSentSharesAsync(SenderStorageResourceId).ToResultList();

            var mySentShare = allSentShares.First(sentShareDoc =>
            {
                var doc = JsonDocument.Parse(sentShareDoc).RootElement;
                var props = doc.GetProperty("properties");
                return props.GetProperty("displayName").ToString() == SentShareDisplayName;
            });

            var SentShareId = JsonDocument.Parse(mySentShare).RootElement.GetProperty("id").ToString();

            await sentSharesClient.DeleteSentShareAsync(WaitUntil.Completed, SentShareId);

            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("Remove Id: " + SentShareId);
            Console.WriteLine("Complete");
            Console.ForegroundColor = Console.ForegroundColor;

        }
        catch (Exception ex)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(ex);
            Console.ForegroundColor = Console.ForegroundColor;
        }
    }

    public static async Task<List<T>> ToResultList<T>(this AsyncPageable<T> asyncPageable)
    {
        List<T> list = new List<T>();

        await foreach (T item in asyncPageable)
        {
            list.Add(item);
        }

        return list;
    }
}

받은 공유 만들기

이 스크립트를 사용하면 데이터 공유를 받을 수 있습니다. 이 변수를 사용하려면 다음 변수를 작성해야 합니다.

  • ReceiverTenantId - 공유 데이터를 수신하는 사용자/서비스의 Azure 테넌트 ID입니다.
  • ReceiverPurviewAccountName - 데이터를 받을 Microsoft Purview 계정의 이름입니다.
  • ReceiverStorageKind - BlobAccount 또는 AdlsGen2Account.
  • ReceiverStorageResourceId - 데이터를 받을 스토리지 계정의 리소스 ID 입니다.
  • ReceiverStorageContainer - 공유 데이터가 저장될 컨테이너의 이름입니다.
  • ReceiverTargetFolderName - 공유 데이터가 저장될 폴더 경로입니다.
  • ReceiverTargetMountPath - 폴더에 데이터를 저장하는 데 사용할 탑재 경로입니다.
  • UseServiceTokenCredentials - (선택 사항) 서비스 주체를 사용하여 공유를 받으려면 이를 true로 설정합니다.
  • ReceiverClientId - (선택 사항) 서비스 주체를 사용하여 공유를 수신하는 경우 서비스 주체에 대한 애플리케이션(클라이언트) ID입니다.
  • ReceiverClientSecret - (선택 사항) 서비스 주체를 사용하여 공유를 수신하는 경우 클라이언트 비밀/인증 키를 추가합니다.
  • ReceivedShareId - (선택 사항) 이 옵션은 GUID여야 하며 현재 값은 자동으로 생성되지만 원하는 경우 다른 값으로 바꿀 수 있습니다.
  • ReceiverVisiblePath - (선택 사항) 받은 공유의 경로에 사용할 이름입니다.
  • ReceivedShareDisplayName - (선택 사항) 받은 공유의 표시 이름입니다.
  • ReceiverPurviewEndPoint - 클래식 Microsoft purview 환경을 사용하는 경우 를 사용합니다 $"https://{ReceiverPurviewAccountName}.purview.azure.com". 새 Microsoft Purview 환경을 사용하는 경우 https://api.purview-service.microsoft.com/
using Azure;
using Azure.Analytics.Purview.Sharing;
using Azure.Core;
using Azure.Identity;
using System.ComponentModel;
using System.Text.Json;

public static class PurviewDataSharingQuickStart
{
    // [REQUIRED INPUTS] Set To Actual Values.
    private static string ReceiverTenantId = "<Receiver Indentity's Tenant ID>";
    private static string ReceiverPurviewAccountName = "<Receiver Purview Account Name>";

    private static string ReceiverStorageKind = "<Receiver Storage Account Kind (BlobAccount / AdlsGen2Account)>";
    private static string ReceiverStorageResourceId = "<Receiver Storage Account Resource Id>";
    private static string ReceiverStorageContainer = "<Container Name To Receive Data Under>";
    private static string ReceiverTargetFolderName = "<Folder Name to Received Data Under>";
    private static string ReceiverTargetMountPath = "<Mount Path to store Received Data Under>";

    //Use if using a service principal to receive a share
    private static bool UseServiceTokenCredentials = false;
    private static string ReceiverClientId = "<Receiver Caller Application (Client) Id>";
    private static string ReceiverClientSecret = "<Receiver Caller Application (Client) Secret>";

    // [OPTIONAL INPUTS] Override Values If Desired.
    private static string ReceivedShareId = Guid.NewGuid().ToString();
    private static string ReceiverVisiblePath = "ReceivedSharePath";

    private static string ReceivedShareDisplayName = "ReceivedShare";

    // General Configs
    private static string ReceiverPurviewEndPoint = $"https://{ReceiverPurviewAccountName}.purview.azure.com";
    private static string ReceiverShareEndPoint = $"{ReceiverPurviewEndPoint}/share";

    private static async Task Main(string[] args)
    {
        try
        {


            Console.WriteLine($"{DateTime.Now.ToShortTimeString()}: CreateReceivedShare - START");
            await Receiver_CreateReceivedShare();
            Console.WriteLine($"{DateTime.Now.ToShortTimeString()}: CreateReceivedShare - FINISH");
        }
        catch (Exception ex)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(ex);
            Console.ForegroundColor = Console.ForegroundColor;
        }
    }

    private static async Task<BinaryData> Receiver_CreateReceivedShare()
    {

        TokenCredential receiverCredentials = UseServiceTokenCredentials
            ? new ClientSecretCredential(ReceiverTenantId, ReceiverClientId, ReceiverClientSecret)
            : new DefaultAzureCredential(new DefaultAzureCredentialOptions { AuthorityHost = new Uri("https://login.windows.net"), TenantId = ReceiverTenantId });

        ReceivedSharesClient? receivedSharesClient = new ReceivedSharesClient(ReceiverShareEndPoint, receiverCredentials);

        if (receivedSharesClient == null)
        {
            throw new InvalidEnumArgumentException("Invalid Received Shares Client.");
        }

        var results = await receivedSharesClient.GetAllDetachedReceivedSharesAsync().ToResultList();
        var detachedReceivedShare = results;

        if (detachedReceivedShare == null)
        {
            throw new InvalidOperationException("No received shares found.");
        }



        var myReceivedShare = detachedReceivedShare.First(recShareDoc =>
        {
            var doc = JsonDocument.Parse(recShareDoc).RootElement;
            var props = doc.GetProperty("properties");
            return props.GetProperty("displayName").ToString() == ReceivedShareDisplayName;
        });

        var ReceivedShareId = JsonDocument.Parse(myReceivedShare).RootElement.GetProperty("id").ToString();


        var attachedReceivedShareData = new
        {
            shareKind = "InPlace",
            properties = new
            {
                displayName = ReceivedShareDisplayName,
                sink = new
                {
                    storeKind = ReceiverStorageKind,
                    properties = new
                    {
                        containerName = ReceiverStorageContainer,
                        folder = ReceiverTargetFolderName,
                        mountPath = ReceiverTargetMountPath
                    },
                    storeReference = new
                    {
                        referenceName = ReceiverStorageResourceId,
                        type = "ArmResourceReference"
                    }
                }
            }
        };

        var receivedShare = await receivedSharesClient.CreateOrReplaceReceivedShareAsync(WaitUntil.Completed, ReceivedShareId, RequestContent.Create(attachedReceivedShareData));

        Console.ForegroundColor = ConsoleColor.Green;
        Console.WriteLine(receivedShare.Value);
        Console.ForegroundColor = Console.ForegroundColor;

        return receivedShare.Value;
    }

    public static async Task<List<T>> ToResultList<T>(this AsyncPageable<T> asyncPageable)
    {
        List<T> list = new List<T>();

        await foreach (T item in asyncPageable)
        {
            list.Add(item);
        }

        return list;
    }
}

받은 모든 공유 나열

이 스크립트는 스토리지 계정에서 받은 모든 공유를 나열합니다. 이 변수를 사용하려면 다음 변수를 작성해야 합니다.

  • ReceiverTenantId - 공유 데이터를 수신하는 사용자/서비스의 Azure 테넌트 ID입니다.
  • ReceiverPurviewAccountName - 데이터가 수신된 Microsoft Purview 계정의 이름입니다.
  • ReceiverStorageResourceId - 데이터가 공유된 스토리지 계정의 리소스 ID 입니다.
  • UseServiceTokenCredentials - (선택 사항) 서비스 주체를 사용하여 공유를 받으려면 이를 true로 설정합니다.
  • ReceiverClientId - (선택 사항) 서비스 주체를 사용하여 공유를 수신하는 경우 서비스 주체에 대한 애플리케이션(클라이언트) ID입니다.
  • ReceiverClientSecret - (선택 사항) 서비스 주체를 사용하여 공유를 수신하는 경우 클라이언트 비밀/인증 키를 추가합니다.
  • ReceiverPurviewEndPoint - 클래식 Microsoft purview 환경을 사용하는 경우 를 사용합니다 $"https://{ReceiverPurviewAccountName}.purview.azure.com". 새 Microsoft Purview 환경을 사용하는 경우 https://api.purview-service.microsoft.com/
using Azure;
using Azure.Analytics.Purview.Sharing;
using Azure.Core;
using Azure.Identity;

public static class PurviewDataSharingQuickStart
{
    // [REQUIRED INPUTS] Set To Actual Values.
    private static string ReceiverTenantId = "<Receiver Indentity's Tenant ID>";
    private static string ReceiverPurviewAccountName = "<Receiver Purview Account Name>";

    private static string ReceiverStorageResourceId = "<Storage Account Resource Id that is housing shares>";

    //Use if using a service principal to list shares
    private static bool UseServiceTokenCredentials = false;
    private static string ReceiverClientId = "<Receiver Caller Application (Client) Id>";
    private static string ReceiverClientSecret = "<Receiver Caller Application (Client) Secret>";

    // General Configs
    private static string ReceiverPurviewEndPoint = $"https://{ReceiverPurviewAccountName}.purview.azure.com";
    private static string ReceiverShareEndPoint = $"{ReceiverPurviewEndPoint}/share";

    private static async Task Main(string[] args)
    {
        try
        {
            TokenCredential receiverCredentials = UseServiceTokenCredentials
            ? new ClientSecretCredential(ReceiverTenantId, ReceiverClientId, ReceiverClientSecret)
            : new DefaultAzureCredential(new DefaultAzureCredentialOptions { AuthorityHost = new Uri("https://login.windows.net"), TenantId = ReceiverTenantId });

            ReceivedSharesClient? receivedSharesClient = new ReceivedSharesClient(ReceiverShareEndPoint, receiverCredentials);

            var allReceivedShares = await receivedSharesClient.GetAllAttachedReceivedSharesAsync(ReceiverStorageResourceId).ToResultList();
            Console.WriteLine(allReceivedShares);
        }
        catch (Exception ex)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(ex);
            Console.ForegroundColor = Console.ForegroundColor;
        }
    }

    public static async Task<List<T>> ToResultList<T>(this AsyncPageable<T> asyncPageable)
    {
        List<T> list = new List<T>();

        await foreach (T item in asyncPageable)
        {
            list.Add(item);
        }

        return list;
    }
}

받은 공유 업데이트

이 스크립트를 사용하면 수신된 공유에 대한 스토리지 위치를 업데이트할 수 있습니다. 받은 공유를 만드는 것과 마찬가지로 데이터를 보관할 스토리지 계정에 대한 정보를 추가합니다. 이 변수를 사용하려면 다음 변수를 작성해야 합니다.

  • ReceiverTenantId - 공유 데이터를 수신하는 사용자/서비스의 Azure 테넌트 ID입니다.
  • ReceiverPurviewAccountName - 데이터를 받을 Microsoft Purview 계정의 이름입니다.
  • ReceiverStorageKind - BlobAccount 또는 AdlsGen2Account.
  • ReceiverStorageResourceId - 데이터가 공유된 스토리지 계정의 리소스 ID 입니다.
  • ReAttachStorageResourceId - 데이터를 받을 스토리지 계정의 리소스 ID 입니다.
  • ReceiverStorageContainer - 공유 데이터가 저장될 컨테이너의 이름입니다.
  • ReceiverTargetFolderName - 공유 데이터가 저장될 폴더 경로입니다.
  • ReceiverTargetMountPath - 폴더에 데이터를 저장하는 데 사용할 탑재 경로입니다.
  • ReceivedShareDisplayName - 받은 공유의 표시 이름입니다.
  • UseServiceTokenCredentials - (선택 사항) 서비스 주체를 사용하여 공유를 받으려면 이를 true로 설정합니다.
  • ReceiverClientId - (선택 사항) 서비스 주체를 사용하여 공유를 수신하는 경우 서비스 주체에 대한 애플리케이션(클라이언트) ID입니다.
  • ReceiverClientSecret - (선택 사항) 서비스 주체를 사용하여 공유를 수신하는 경우 클라이언트 비밀/인증 키를 추가합니다.
  • ReceiverPurviewEndPoint - 클래식 Microsoft purview 환경을 사용하는 경우 를 사용합니다 $"https://{ReceiverPurviewAccountName}.purview.azure.com". 새 Microsoft Purview 환경을 사용하는 경우 https://api.purview-service.microsoft.com/
using Azure;
using Azure.Analytics.Purview.Sharing;
using Azure.Core;
using Azure.Identity;
using System.ComponentModel;
using System.Text.Json;

public static class PurviewDataSharingQuickStart
{
    // [REQUIRED INPUTS] Set To Actual Values.
    private static string ReceiverTenantId = "<Receiver Indentity's Tenant ID>";
    private static string ReceiverPurviewAccountName = "<Receiver Purview Account Name>";

    private static string ReceiverStorageKind = "<Receiver Storage Account Kind (BlobAccount / AdlsGen2Account)>";
    private static string ReceiverStorageResourceId = "<Storage Account Resource Id for the account where the share is currently attached.>";
    private static string ReAttachStorageResourceId = "<Storage Account Resource Id For Reattaching Received Share>";
    private static string ReceiverStorageContainer = "<Container Name To Receive Data Under>";
    private static string ReceiverTargetFolderName = "<Folder Name to Received Data Under>";
    private static string ReceiverTargetMountPath = "<Mount Path to Received Data Under>";

    private static string ReceivedShareDisplayName = "<Display name of your received share>";

    //Use if using a service principal to update the share
    private static bool UseServiceTokenCredentials = false;
    private static string ReceiverClientId = "<Receiver Caller Application (Client) Id>";
    private static string ReceiverClientSecret = "<Receiver Caller Application (Client) Secret>";

    // General Configs
    private static string ReceiverPurviewEndPoint = $"https://{ReceiverPurviewAccountName}.purview.azure.com";
    private static string ReceiverShareEndPoint = $"{ReceiverPurviewEndPoint}/share";

    private static async Task Main(string[] args)
    {
        try
        {

            Console.WriteLine($"{DateTime.Now.ToShortTimeString()}: UpdateReceivedShare - START");
            await Receiver_UpdateReceivedShare();
            Console.WriteLine($"{DateTime.Now.ToShortTimeString()}: UpdateReceivedShare - FINISH");
        }
        catch (Exception ex)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(ex);
            Console.ForegroundColor = Console.ForegroundColor;
        }
    }

    private static async Task<BinaryData> Receiver_UpdateReceivedShare()
    {

        TokenCredential receiverCredentials = UseServiceTokenCredentials
            ? new ClientSecretCredential(ReceiverTenantId, ReceiverClientId, ReceiverClientSecret)
            : new DefaultAzureCredential(new DefaultAzureCredentialOptions { AuthorityHost = new Uri("https://login.windows.net"), TenantId = ReceiverTenantId });

        ReceivedSharesClient? receivedSharesClient = new ReceivedSharesClient(ReceiverShareEndPoint, receiverCredentials);

        if (receivedSharesClient == null)
        {
            throw new InvalidEnumArgumentException("Invalid Received Shares Client.");
        }

        var attachedReceivedShareData = new
        {
            shareKind = "InPlace",
            properties = new
            {
                displayName = ReceivedShareDisplayName,
                sink = new
                {
                    storeKind = ReceiverStorageKind,
                    properties = new
                    {
                        containerName = ReceiverStorageContainer,
                        folder = ReceiverTargetFolderName,
                        mountPath = ReceiverTargetMountPath
                    },
                    storeReference = new
                    {
                        referenceName = ReAttachStorageResourceId,
                        type = "ArmResourceReference"
                    }
                }
            }
        };

        var allReceivedShares = await receivedSharesClient.GetAllAttachedReceivedSharesAsync(ReceiverStorageResourceId).ToResultList();

        var myReceivedShare = allReceivedShares.First(recShareDoc =>
        {
            var doc = JsonDocument.Parse(recShareDoc).RootElement;
            var props = doc.GetProperty("properties");
            return props.GetProperty("displayName").ToString() == ReceivedShareDisplayName;
        });

        Console.ForegroundColor = ConsoleColor.Green;
        Console.WriteLine("My Received Share Id: " + JsonDocument.Parse(myReceivedShare).RootElement.GetProperty("id").ToString());
        Console.ForegroundColor = Console.ForegroundColor;


        var ReceivedShareId = JsonDocument.Parse(myReceivedShare).RootElement.GetProperty("id").ToString();

        var receivedShare = await receivedSharesClient.CreateOrReplaceReceivedShareAsync(WaitUntil.Completed, ReceivedShareId, RequestContent.Create(attachedReceivedShareData));

        Console.ForegroundColor = ConsoleColor.Green;
        Console.WriteLine(receivedShare.Value);
        Console.ForegroundColor = Console.ForegroundColor;

        return receivedShare.Value;
    }

    public static async Task<List<T>> ToResultList<T>(this AsyncPageable<T> asyncPageable)
    {
        List<T> list = new List<T>();

        await foreach (T item in asyncPageable)
        {
            list.Add(item);
        }

        return list;
    }
}

받은 공유 삭제

이 스크립트는 받은 공유를 삭제합니다. 이 변수를 사용하려면 다음 변수를 작성해야 합니다.

  • ReceiverTenantId - 공유 데이터를 수신하는 사용자/서비스의 Azure 테넌트 ID입니다.
  • ReceiverPurviewAccountName - 데이터를 받을 Microsoft Purview 계정의 이름입니다.
  • ReceivedShareDisplayName - 받은 공유의 표시 이름입니다.
  • ReceiverStorageResourceId - 데이터가 공유된 스토리지 계정의 리소스 ID 입니다.
  • UseServiceTokenCredentials - (선택 사항) 서비스 주체를 사용하여 공유를 받으려면 이를 true로 설정합니다.
  • ReceiverClientId - (선택 사항) 서비스 주체를 사용하여 공유를 수신하는 경우 서비스 주체에 대한 애플리케이션(클라이언트) ID입니다.
  • ReceiverClientSecret - (선택 사항) 서비스 주체를 사용하여 공유를 수신하는 경우 클라이언트 비밀/인증 키를 추가합니다.
  • ReceiverPurviewEndPoint - 클래식 Microsoft purview 환경을 사용하는 경우 를 사용합니다 $"https://{ReceiverPurviewAccountName}.purview.azure.com". 새 Microsoft Purview 환경을 사용하는 경우 https://api.purview-service.microsoft.com/
using Azure;
using Azure.Analytics.Purview.Sharing;
using Azure.Core;
using Azure.Identity;
using System.Text.Json;

public static class PurviewDataSharingQuickStart
{
    // [REQUIRED INPUTS] Set To Actual Values.
    private static string ReceiverTenantId = "<Receiver Indentity's Tenant ID>";
    private static string ReceiverPurviewAccountName = "<Receiver Purview Account Name>";

    private static string ReceivedShareDisplayName = "<Display name of your received share>";

    private static string ReceiverStorageResourceId = "<Storage Account Resource Id for the account where the share is currently attached.>";

    //Use if using a service principal to delete share.
    private static bool UseServiceTokenCredentials = false;
    private static string ReceiverClientId = "<Receiver Caller Application (Client) Id>";
    private static string ReceiverClientSecret = "<Receiver Caller Application (Client) Secret>";

    // General Configs
    private static string ReceiverPurviewEndPoint = $"https://{ReceiverPurviewAccountName}.purview.azure.com";
    private static string ReceiverShareEndPoint = $"{ReceiverPurviewEndPoint}/share";

    private static async Task Main(string[] args)
    {
        try
        {
            TokenCredential receiverCredentials = UseServiceTokenCredentials
            ? new ClientSecretCredential(ReceiverTenantId, ReceiverClientId, ReceiverClientSecret)
            : new DefaultAzureCredential(new DefaultAzureCredentialOptions { AuthorityHost = new Uri("https://login.windows.net"), TenantId = ReceiverTenantId });

            ReceivedSharesClient? receivedSharesClient = new ReceivedSharesClient(ReceiverShareEndPoint, receiverCredentials);

            var allReceivedShares = await receivedSharesClient.GetAllAttachedReceivedSharesAsync(ReceiverStorageResourceId).ToResultList();

            var myReceivedShare = allReceivedShares.First(recShareDoc =>
            {
                var doc = JsonDocument.Parse(recShareDoc).RootElement;
                var props = doc.GetProperty("properties");
                return props.GetProperty("displayName").ToString() == ReceivedShareDisplayName;
            });

            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("My Received Share Id: " + JsonDocument.Parse(myReceivedShare).RootElement.GetProperty("id").ToString());
            Console.ForegroundColor = Console.ForegroundColor;

            var ReceivedShareId = JsonDocument.Parse(myReceivedShare).RootElement.GetProperty("id").ToString();

            await receivedSharesClient.DeleteReceivedShareAsync(WaitUntil.Completed, ReceivedShareId);

            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("Delete Complete");
            Console.ForegroundColor = Console.ForegroundColor;
        }
        catch (Exception ex)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(ex);
            Console.ForegroundColor = Console.ForegroundColor;
        }
    }
    public static async Task<List<T>> ToResultList<T>(this AsyncPageable<T> asyncPageable)
    {
        List<T> list = new List<T>();

        await foreach (T item in asyncPageable)
        {
            list.Add(item);
        }

        return list;
    }
}

리소스를 정리합니다.

빠른 시작을 위해 만든 리소스를 클린 하려면 다음 지침을 사용합니다.

  1. Microsoft Purview 포털 내에서 보낸 공유를 삭제합니다.
  2. 또한 받은 공유를 삭제합니다.
  3. 공유가 성공적으로 삭제되면 공유 데이터를 받았을 때 대상 스토리지 계정에서 만든 대상 컨테이너 및 폴더 Microsoft Purview를 삭제합니다.

다음 단계