次の方法で共有


OneLake Shared Access Signature (SAS) を作成する (プレビュー)

OneLake SAS を作成して、Microsoft Entra 資格情報でサポートされた OneLake 内のフォルダーまたはファイルへの短期間の委任されたアクセスを提供できます。 OneLake SAS を使用すると、Microsoft Entra のサポートを使用せずにアプリケーションへの一時的なアクセスを提供できるため、他の顧客アプリケーションまたは独立系ソフトウェア ベンダー (ISV) 間でデータを読み込んだり、プロキシとして機能したりすることができます。

OneLake SAS を作成するには、まず、SAS に署名するために使用するユーザー委任キーを要求する必要があります。 ユーザー委任キーを要求するには、Get User Delegation Key 操作を呼び出します。 OneLake SAS は、データ項目内のファイルとフォルダーのみへのアクセス権を付与でき、項目やワークスペースの作成や削除などの管理操作には使用できません。

OneLake SAS は、データ項目内のファイルとフォルダーのみへのアクセス権を付与でき、ワークスペースや項目の作成などの管理操作には使用できません。

OneLake SAS は、Azure Storage と互換性のあるツールやアプリケーションとの互換性を確保するために同じパラメーターを使用して、Azure Storage ユーザー委任 SAS と同様に作成されます。

重要

この機能はプレビュー中です。

アクセス許可の割り当て

ユーザー委任キーの要求は、Fabric でのテナント レベルの操作です。 ユーザー委任キーを要求するには、ユーザー委任キーを要求するユーザーまたはセキュリティ プリンシパルに、少なくとも Fabric テナント内の 1 つのワークスペースでの読み取りアクセス許可が必要です。 要求元ユーザーの ID が SAS の認証に使用されます。つまり、ユーザーには、SAS アクセスを許可するデータに対するアクセス許可が必要です。

OAuth 2.0 トークンを取得する

ユーザー委任キーを取得するには、まず Microsoft Entra ID から OAuth 2.0 トークンを要求します。 トークンに Bearer スキームを指定して、Get User Delegation Key 操作の呼び出しを承認します。 Microsoft Entra ID からの OAuth トークンの要求について詳しくは、「認証フローとアプリケーションのシナリオ」を参照してください。

ユーザー委任キーを要求する

Get User Delegation Key 操作を呼び出すと、ユーザー委任 SAS トークンのパラメーターとして使用される値のセットとしてキーが返されます。 これらのパラメーターについては、Get User Delegation Key の参照と次のセクションで説明します。

クライアントで OAuth 2.0 トークンを使用してユーザー委任キーが要求されると、クライアントに代わって OneLake によってユーザー委任キーが返されます。 このユーザー委任キーを使用して作成された SAS には、最大でクライアントに付与されるアクセス許可が付与され、SAS で明示的に付与されるアクセス許可に範囲が絞られます。

ユーザー委任キーの有効期間中は、任意の数の OneLake SAS を作成できます。 ただし、OneLake SAS とユーザー委任キーは最大 1 時間有効であり、要求側のトークンの有効期間を超えることはできません。 これらの有効期間の制限は、Azure Storage ユーザー委任 SAS の最大有効期間よりも短くなります。

ユーザー委任 SAS を作成する

次の表では、OneLake SAS トークンでサポートされているフィールドをまとめています。 以降のセクションでは、これらのパラメーターと Azure Storage SAS トークンとの違いについて詳しく説明しています。 OneLake では、Azure Storage でサポートされているすべての省略可能なパラメーターがサポートされているわけではありません。サポートされていないパラメーターで作成された OneLake SAS は拒否されます。

SAS フィールド名 SAS トークン パラメーター 状態 説明
signedVersion sv 必須 署名フィールドの作成に使用されるサービスのバージョンを示します。 OneLake では、バージョン '2020-02-10'、'2020-12-06' より後のすべてのバージョン、および '2020-02-10' より前のバージョンがサポートされています。
signedResource sr 必須 共有アクセス署名を使用してアクセスできるリソースを指定します。 OneLake には、BLOB (b) とディレクトリ (d) のみが適用されます。
signedStart st 省略可能 Shared Access Signature が有効になる時刻。 ISO 8601 UTC 形式。
signedExpiry se 必須 Shared Access Signature の有効期限が切れる時刻
signedPermissions sp 必須 SAS がリソースに対して実行できる操作を示します。 詳細については、「アクセス許可を指定する」セクションを参照
signedObjectId skoid 必須 Microsoft Entra セキュリティ プリンシパルを識別します。
signedtenantId sktid 必須 セキュリティ プリンシパルが定義されている Microsoft Entra テナントを指定します。
signedKeyStartTime skt 省略可能 署名キーが開始する時刻 (UTC)。 Get User Delegation Key 操作で返されます。
signedKeyExpiryTime ske 必須 署名キーが終了する時刻 (UTC)。 Get User Delegation Key 操作で返されます。
signedKeyVersion skv 必須 ユーザー委任キーの取得に使用されるストレージ サービスのバージョン。 Get User Delegation Key 操作で返されます。 OneLake では、バージョン 2020-02-10 以前、および 2020-12-06 より後のバージョンがサポートされています
signedKeyService sks 必須 ユーザー委任キーの有効なサービス。 OneLake では、Blob Storage (sks=b) のみがサポートされます。
signature sig 必須 署名は、SHA256 アルゴリズムを使用して署名対象文字列とキーを計算した後に、Base64 エンコードでエンコードしたハッシュ ベースのメッセージ認証コード (HMAC) 値です。
signedAuthorizedObjectId saoid サポートされていない OneLake SAS はこの機能をサポートしていません。
signedUnauthorizedObjectId suoid サポートされていない OneLake SAS はこの機能をサポートしていません。
signedCorrelationId suoid サポートされていない OneLake SAS では、このパラメーターはサポートされていません。
signedDirectoryDepth sdd 省略可能 署名対象文字列の canonicalizedResource フィールドで指定されたディレクトリのルート フォルダー内のディレクトリ数を示します。 sr=d の場合にのみサポートされます。
signedEncryptionScope ses サポートされていない OneLake SAS は現在、カスタム暗号化スコープをサポートしていません。
signedIP sip サポートされていない OneLake SAS は現在、IP フィルター処理をサポートしていません
signedProtocol spr 省略可能 OneLake は https 要求のみをサポートします。
Cache-Control 応答ヘッダー rscc サポートされていない OneLake SAS では、このパラメーターはサポートされていません。
Content-Disposition 応答ヘッダー rscd サポートされていない OneLake SAS では、このパラメーターはサポートされていません。
Content-Encoding 応答ヘッダー rsce サポートされていない OneLake SAS では、このパラメーターはサポートされていません。
Content-Language 応答ヘッダー rscl サポートされていない OneLake SAS では、このパラメーターはサポートされていません。
Content Type 応答ヘッダー rsct サポートされていない OneLake SAS では、このパラメーターはサポートされていません。

アクセス許可を指定する

SAS トークンの signedPermissions (sp) フィールドに指定されたアクセス許可は、SAS を所有しているクライアントがリソースに対して実行できる操作を示します。

クライアントが同じ SAS で複数の操作を実行できるようにするために、アクセス許可を組み合わせることができます。 SAS を作成するときは、次の順序でアクセス許可を含める必要があります: racwdxltmeop

有効なアクセス許可設定の例には、rwrdrlwdwlrl などがあります。 アクセス許可を複数回指定することはできません。

既存の Azure Storage ツールと同等にするために、OneLake では Azure Storage と同じアクセス許可形式を使用します。 OneLake は、signedPermissions で SAS に付与されたアクセス許可、Fabric での署名 ID のアクセス許可、および該当する場合は任意の OneLake データ アクセス ロールを評価します。 アクセス許可の設定やワークスペースの削除などの一部の操作は、通常、Azure Storage API を介して OneLake で許可されないため、そのアクセス許可 (sp=op) を付与しても、OneLake SAS でこれらの操作を実行できないことに注意してください。

権限 URI の略記 リソース 許可される操作
既読 r ディレクトリ、BLOB コンテナーまたはディレクトリ内の BLOB のコンテンツ、ブロックリスト、プロパティ、メタデータを読み取ります。 コピー操作のコピー元として BLOB を使用します。
追加 a ディレクトリ、BLOB 追加 BLOB にブロックを追加します。
作成 c ディレクトリ、BLOB 新しい BLOB を書き込むか、BLOB のスナップショットを作成するか、BLOB を新しい BLOB にコピーします。
書き込み w ディレクトリ、BLOB コンテンツ、プロパティ、メタデータ、またはブロックリストの作成または書き込みを行います。 BLOB のスナップショットの作成または BLOB のリースを行います。 コピー操作のコピー先として BLOB を使用します。
削除​​ d ディレクトリ、BLOB BLOB を削除する
バージョンの削除 x BLOB BLOB バージョンを削除します。
完全削除 y BLOB BLOB スナップショットまたはバージョンを完全に削除します。
リスト l Directory 非再帰的にBLOB を一覧表示します。
タグ t BLOB BLOB のタグを読み取るか書き込みます。
移動 m ディレクトリ、BLOB BLOB またはディレクトリ、およびその内容を新しい場所に移動します。
実行 e ディレクトリ、BLOB システム プロパティを取得し、ストレージ アカウントに対して階層型名前空間が有効になっている場合は BLOB の POSIX ACL を取得します。
所有権 o ディレクトリ、BLOB 所有者または所有グループを設定します。 OneLake ではサポートされていません
アクセス許可 P ディレクトリ、BLOB アクセス許可を設定します。 OneLake ではサポートされていません
Set Immutability Policy i BLOB BLOB の不変性ポリシーまたは訴訟ホールドを設定または削除します。

署名を指定する

signature (sig) フィールドは、クライアントが Shared Access Signature を使用して行った要求の承認に使用されます。 署名対象文字列は、要求を承認するために検証する必要のあるフィールドから作成された一意の文字列です。 署名は、SHA256 アルゴリズムを使用して署名対象文字列とキーを計算した後に、bBase65 エンコードを使用してエンコードした HMAC 値です。

ユーザー委任 SAS の署名文字列を作成するには、要求で作成されるフィールドから署名対象文字列を作成し、その文字列を UTF-8 としてエンコードし、HMAC-SHA256 アルゴリズムを使用して署名を計算します。 署名対象文字列に含まれるフィールドは、URL でデコードされている必要があります。

署名対象文字列で必要なフィールドは、承認 (sv) フィールドに使用されるサービスのバージョンによって異なります。 次のセクションでは、OneLake SAS をサポートするバージョンの署名対象文字列の構成について説明します。

バージョン 2020-12-06 以降

StringToSign =  signedPermissions + "\n" +
                signedStart + "\n" +
                signedExpiry + "\n" +
                canonicalizedResource + "\n" +
                signedKeyObjectId + "\n" +
                signedKeyTenantId + "\n" +
                signedKeyStart + "\n" +
                signedKeyExpiry  + "\n" +
                signedKeyService + "\n" +
                signedKeyVersion + "\n" +
                signedAuthorizedUserObjectId + "\n" +
                signedUnauthorizedUserObjectId + "\n" +
                signedCorrelationId + "\n" +
                signedIP + "\n" +
                signedProtocol + "\n" +
                signedVersion + "\n" +
                signedResource + "\n" +
                signedSnapshotTime + "\n" +
                signedEncryptionScope + "\n" +
                rscc + "\n" +
                rscd + "\n" +
                rsce + "\n" +
                rscl + "\n" +
                rsct

バージョン 2020-01-10

StringToSign =  signedPermissions + "\n" +
                signedStart + "\n" +
                signedExpiry + "\n" +
                canonicalizedResource + "\n" +
                signedKeyObjectId + "\n" +
                signedKeyTenantId + "\n" +
                signedKeyStart + "\n" +
                signedKeyExpiry  + "\n" +
                signedKeyService + "\n" +
                signedKeyVersion + "\n" +
                signedAuthorizedUserObjectId + "\n" +
                signedUnauthorizedUserObjectId + "\n" +
                signedCorrelationId + "\n" +
                signedIP + "\n" +
                signedProtocol + "\n" +
                signedVersion + "\n" +
                signedResource + "\n" +
                signedSnapshotTime + "\n" +
                rscc + "\n" +
                rscd + "\n" +
                rsce + "\n" +
                rscl + "\n" +
                rsct

2020-02-10 より前のバージョン

StringToSign =  signedPermissions + "\n" +  
                signedStart + "\n" +  
                signedExpiry + "\n" +  
                canonicalizedResource + "\n" +  
                signedKeyObjectId + "\n" +
                signedKeyTenantId + "\n" +
                signedKeyStart + "\n" +
                signedKeyExpiry  + "\n" +
                signedKeyService + "\n" +
                signedKeyVersion + "\n" +
                signedAuthorizedUserObjectId + "\n" +
                signedUnauthorizedUserObjectId + "\n" +
                signedCorrelationId + "\n" +
                signedIP + "\n" +  
                signedProtocol + "\n" +  
                signedVersion + "\n" +  
                signedResource + "\n" +
                rscc + "\n" +
                rscd + "\n" +  
                rsce + "\n" +  
                rscl + "\n" +  
                rsct

正規化されたリソース

文字列の canonicalizedResource の部分は、リソースへの正規化されたパスです。 この部分には OneLake エンドポイントとリソース名が含まれている必要があります。また、URL でデコードされていなければなりません。 OneLake パスにはワークスペースを含める必要があり、ディレクトリ パスには、sdd パラメーターに対応するサブディレクトリの数を含める必要があります。

次の例は、OneLake URL を対応する正規化されたリソースに変換する方法を示しています。 OneLake では DFS と BLOB の操作とエンドポイントの両方がサポートされており、OneLake のアカウント名は常に onelake であることに注意してください。

BLOB ファイル

URL = https://onelake.blob.fabric.microsoft.com/myWorkspace/myLakehouse.Lakehouse/Files/sales.csv
canonicalizedResource = "/blob/onelake/myWorkspace/myLakehouse.Lakehouse/Files/sales.csv"

DFS ディレクトリ

URL = https://onelake.dfs.fabric.microsoft.com/myWorkspace/myLakehouse.Lakehouse/Files/
canonicalizedResource = "/blob/onelake/myWorkspace/myLakehouse.Lakehouse/Files/"

OneLake SAS の例

次の例は、OneLake SAS トークンが追加された OneLake SAS URI を示しています。 SAS トークンは、レイクハウス内の Files フォルダーに対する読み書きアクセス許可を提供します。

https://onelake.blob.fabric.microsoft.com/myWorkspace/myLakehouse.Lakehouse/Files/?sp=rw&st=2023-05-24T01:13:55Z&se=2023-05-24T09:13:55Z&skoid=<object-id>&sktid=<tenant-id>&skt=2023-05-24T01:13:55Z&ske=2023-05-24T09:13:55Z&sks=b&skv=2022-11-02&sv=2022-11-02&sr=d&sig=<signature>