다음을 통해 공유


RLS에 보고서 포함

적용 대상: 앱 소유 데이터 사용자 소유 데이터

이 문서에서는 RLS를 사용하는 Power BI 콘텐츠를 표준 Power BI 앱 소유 데이터 애플리케이션에 포함하는 방법을 설명합니다.

필수 조건

RLS를 설정하는 방법에 대한 자세한 설명은 Power BI를 사용한 RLS(행 수준 보안)를 참조하세요.

RLS 역할을 정의할 때 사용하는 DAX 식에 따라 RLS 모델이 정적인지 동적인지 결정됩니다.

정적 및 동적 보안을 사용해야 하는 경우

정적 보안은 DAX 필터의 고정 값을 사용하여 각 역할을 정의합니다. 구현하는 것은 간단하지만 관련된 사용자 또는 조직이 많은 경우 유지 관리하기가 어렵습니다.

정적 보안은 각 부서가 서로 다른 데이터에 액세스해야 하는 한 명 또는 몇 명의 큰 고객에게 서비스를 제공하는 ISV에 가장 적합합니다.

동적 보안은 DAX 함수(username() 또는 userprincipalname())를 사용하여 역할을 정의합니다. 동적 보안은 더 많은 유연성을 제공하며 더 적은 수의 역할과 더 적은 유지 관리로 데이터를 관리할 수 있게 해줍니다.

정적 보안

정적 역할을 사용하면 포함 토큰을 생성할 때 Power BI에 역할을 전달하고 사용자는 해당 역할에 따라 데이터를 볼 수 있습니다. 정적 보안 역할을 만들려면 DAX 필터에 고정 값을 입력합니다.

예를 들어 미국 동부의 역할을 [Region] = "East" 같이 정의할 수 있습니다.

정적 RLS 역할을 정의하는 방법을 보여 주는 스크린샷.

john@contoso.com이 앱의 사용자라고 가정해 보겠습니다. John에게 미국 동부 역할의 데이터에 대한 액세스 권한을 부여하려고 합니다. john@contoso.com에 대한 보고서를 포함하려면 미국 동부 역할을 사용하여 포함 토큰을 생성합니다. [Region] = "East"에 대해 결과 데이터가 필터링됩니다.

참고 항목

포함 토큰을 생성할 때 사용자 이름을 제공해야 하지만 사용자 이름은 문자열일 수 있습니다. 정적 역할에는 사용자 이름에 따라 달라지지 않는 고정 값이 있으므로 ISV가 사용자의 역할을 결정하고 포함 토큰에 전달하면 전달된 사용자 이름에 관계없이 해당 역할에 따라 데이터가 필터링됩니다.

동적 보안

동적 보안은 DAX 함수(username() 또는 userprincipalname())를 사용하여 역할을 정의합니다.

사용자 소유 데이터 시나리오에서 RLS 모델은 특정 사용자의 역할에 따라 데이터를 자동으로 필터링합니다. 앱 소유 데이터를 사용하면 Power BI에서 ISV 고객의 사용자 이름을 모르기 때문에 username() 함수를 사용하여 데이터를 동적으로 필터링할 수 있습니다.

username() 함수를 사용하여 Power BI Desktop에 역할을 만듭니다. 예를 들어 CountryDynamic이라는 역할을 만들고 [CountryRegionCode] = username() 같이 정의할 수 있습니다.

동적 RLS 역할을 만드는 방법을 보여 주는 스크린샷.

jane@contoso.com 사용자에게 France의 데이터에 대한 액세스 권한을 부여하려는 경우를 가정해 보겠습니다. jane@contoso.com에 대한 포함 토큰을 생성할 때 CountryDynamic 역할의 사용자 이름으로 France 문자열을 전달합니다. 데이터는 [CountryRegionCode] = France에 따라 필터링됩니다.

{
    "accessLevel": "View",
    "identities": [
        {
            "username": "France",
            "roles": [ "CountryDynamic"],
            "datasets": [ "fe0a1aeb-f6a4-4b27-a2d3-b5df3bb28bdc" ]
        }
    ]
}

이 시나리오에서 동적 보안을 사용하는 경우 모든 지역에 하나의 역할만 있으면 됩니다. 지역 이름은 유효 ID로 사용됩니다.

포함 토큰 생성

보고서를 앱에 포함할 준비가 되면 포함 토큰을 생성해야 합니다. Embed Token API를 사용하여 토큰을 생성하려면 다음 정보를 API에 전달합니다.

  • 사용자 이름(필수) – 역할이 동적인 경우 사용자 이름 문자열이 필터로 사용됩니다. 정적 역할의 경우 사용자 이름이 RLS에 영향을 주지 않으며 문자열일 수 있습니다. 단일 사용자 이름만 나열할 수 있습니다.
  • 역할(필수) – 행 수준 보안 규칙을 적용할 때 사용되는 역할입니다. 둘 이상의 역할을 전달하는 경우 문자열 배열로 전달되어야 합니다.
  • 데이터 세트(필수) - 포함하는 항목에 적용할 수 있는 데이터 세트입니다.

이제 보고서를 앱에 포함할 수 있습니다. 보고서는 적용된 RLS에 따라 데이터를 필터링합니다.

public EmbedToken GetEmbedToken(Guid reportId, IList<Guid> datasetIds, [Optional] Guid targetWorkspaceId)
    {
        PowerBIClient pbiClient = this.GetPowerBIClient();

       // Defines the user identity and roles.
        var rlsIdentity = new EffectiveIdentity(
            username: "France",
            roles: new List<string>{ "CountryDynamic" },
            datasets: datasetIds.Select(id => id.ToString()).ToList());
        );
       
        // Create a request for getting an embed token for the rls identity defined above
        var tokenRequest = new GenerateTokenRequestV2(
            reports: new List<GenerateTokenRequestV2Report>() { new GenerateTokenRequestV2Report(reportId) },
            datasets: datasetIds.Select(datasetId => new GenerateTokenRequestV2Dataset(datasetId.ToString())).ToList(),
            targetWorkspaces: targetWorkspaceId != Guid.Empty ? new List<GenerateTokenRequestV2TargetWorkspace>() { new GenerateTokenRequestV2TargetWorkspace(targetWorkspaceId) } : null,
            identities: new List<EffectiveIdentity> { rlsIdentity }
        );

        // Generate an embed token
        var embedToken = pbiClient.EmbedToken.GenerateToken(tokenRequest);

        return embedToken;
    }

고려 사항 및 제한 사항

  • 설치에 따라 포함 토큰을 생성하기 전에 몇 가지 단계를 수행해야 할 수 있습니다. 다양한 시나리오에 대한 자세한 내용은 보안 기능을 사용하는 보고서 포함을 참조하세요.
  • 포함 토큰을 생성하는 사용자는 두 작업 영역(데이터 세트 작업 영역 및 보고서 작업 영역)의 구성원 또는 관리자여야 합니다.
  • 포함 토큰을 생성할 때 사용자 이름과 역할을 제공해야 합니다. 그렇지 않으면 서비스 주체 또는 마스터 사용자가 토큰을 생성하는지 여부에 따라 다음 이벤트 중 하나가 발생합니다.
    • 서비스 주체의 경우 토큰 생성이 실패합니다.
    • 마스터 사용자의 경우 토큰 생성이 성공하지만 데이터가 필터링되지 않습니다(모든 데이터가 반환됨).

궁금한 점이 더 있나요? Power BI 커뮤니티를 사용해 보세요.