Azure Synapse ワークスペースのアクセス制御を設定する方法

この記事では、Microsoft Azure Synapse ワークスペースへのアクセスを制御する方法について説明します。 これを実現するには、Azure ロール、Azure Synapse ロール、SQL アクセス許可、Git アクセス許可を組み合わせて使用します。

このガイドでは、ワークスペースを設定し、基本的なアクセス制御システムを構成します。 この情報は、さまざまな種類の Synapse プロジェクトで使用できます。 また、きめ細かな制御が必要な場合のために、より高度なオプションについても説明します。

Synapse アクセス制御は、セキュリティ グループを使用して、組織内のロールとペルソナを合わせることで簡素化できます。 これにより、ユーザーを追加および削除するだけで、セキュリティ グループへのアクセスを管理できます。

このチュートリアルを開始する前に、Azure Synapse アクセス制御の概要に関するページを参照して、Synapse Analytics で使用されるアクセス制御メカニズムについて理解してください。

アクセス制御メカニズム

Note

このガイドのアプローチは、セキュリティ グループを作成することです。 これらのセキュリティ グループにロールを割り当てる場合は、ワークスペースへのアクセスを制御するために、それらのグループ内のメンバーシップのみを管理する必要があります。

Synapse ワークスペースをセキュリティで保護するには、次の項目を構成します。

  • セキュリティ グループ。類似のアクセス要件を持つユーザーをグループ化します。
  • Azure ロール。SQL プール、Apache Spark プールと統合ランタイムを作成および管理でき、ADLS Gen2 ストレージにアクセスできるユーザーを制御します。
  • Synapse ロール。発行されたコード成果物へのアクセス、Apache Spark コンピューティング リソースと統合ランタイムの使用を制御します。
  • SQL アクセス許可。SQL プールへの管理アクセスとデータ プレーン アクセスを制御します。
  • Git アクセス許可。ワークスペースの Git サポートを構成した場合に、ソース管理のコード成果物にアクセスできるユーザーを制御します。

Synapse ワークスペースをセキュリティ保護する手順

このドキュメントでは、手順を簡素化するために、標準名を使用しています。 それらを任意の名前に置き換えてください。

設定 標準名 説明
Synapse ワークスペース workspace1 Azure Synapse ワークスペースに使用される名前。
ADLSGEN2 アカウント storage1 ワークスペースで使用する ADLS アカウント。
コンテナー container1 ワークスペースで既定で使用される STG1 内のコンテナー。
Active Directory テナント contoso Active Directory テナント名。

手順 1: セキュリティ グループを設定する

Note

プレビュー期間中は、セキュリティ グループを作成して、Azure Synapse の "Synapse SQL 管理者" および "Synapse Apache Spark 管理者" ロールにマップすることが推奨されていました。 きめ細かな Synapse RBAC ロールとスコープが新たに導入されたため、新しいオプションを使用してワークスペースへのアクセスを制御することをお勧めします。 構成の柔軟性が向上し、開発者が SQL と Spark を組み合わせて分析アプリケーションを作成することが多くあることを認識しています。 そのため、開発者はワークスペース全体ではなく、個々のリソースにアクセスする必要がある場合があります。 Synapse RBAC の詳細を確認してください。

ワークスペースに以下のセキュリティ グループを作成します。

  • workspace1_SynapseAdministrators。ワークスペースを完全に制御する必要があるユーザー向けです。 少なくとも最初は、自分をこのセキュリティ グループに追加してください。
  • workspace1_SynapseContributors。コードの開発、デバッグ、およびサービスへの発行を行う必要がある開発者向けです。
  • workspace1_SynapseComputeOperators 。Apache Spark プールと統合ランタイムを管理および監視する必要があるユーザー向けです。
  • workspace1_SynapseCredentialUsers。ワークスペース MSI (マネージド サービス ID) 資格情報を使用してオーケストレーション パイプラインをデバッグおよび実行する必要があり、パイプラインの実行をキャンセルする必要があるユーザー向けです。

これらのグループには、この後すぐにワークスペース スコープの Synapse ロールを割り当てます。

また、次のセキュリティ グループも作成します。

  • workspace1_SQLAdmins。ワークスペースの SQL プール内の SQL Active Directory 管理権限を必要とするユーザー向けのグループです。

SQL プールを作成するときに SQL アクセス許可を構成する workspace1_SQLAdmins グループ。

基本的なセットアップには、これらの 5 つのグループで十分です。 後でセキュリティ グループを追加して、より特殊化されたアクセスを必要とするユーザーを処理したり、特定のリソースへのアクセスのみに制限したりすることができます。

Note

ヒント

個々の Synapse ユーザーは、Azure portal の Microsoft Entra ID を使用してグループ メンバーシップを表示できます。 これにより、付与されたロールを特定できます。

手順 2: ADLS Gen2 ストレージ アカウントを準備する

Synapse ワークスペースでは、次の場合に既定のストレージ コンテナーが使用されます。

  • Spark テーブル用のバッキング データ ファイルの格納
  • Spark ジョブの実行ログ
  • インストールすることにしたライブラリの管理

ストレージに関する次の情報を特定します。

  • ワークスペースに使用する ADLS Gen2 アカウント。 このドキュメントでは、それを storage1 と呼びます。 storage1 は、ワークスペースの "プライマリ" ストレージ アカウントと見なされます。

  • Synapse ワークスペースで既定で使用される storage1 内のコンテナー。 このドキュメントでは、それを container1 と呼びます。

  • [アクセス制御 (IAM)] を選択します。

  • [追加]>[ロールの割り当ての追加] を選択して、[ロールの割り当ての追加] ページを開きます。

  • 次のロールを割り当てます。 詳細な手順については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。

    設定
    Role ストレージ BLOB データ共同作成者
    アクセスの割り当て先 サービス プリンシパル
    メンバー workspace1_SynapseAdministrators、workspace1_SynapseContributors、および workspace1_SynapseComputeOperators

    Add role assignment page in Azure portal.

手順 3: Synapse ワークスペースを作成して構成する

Azure portal で、Synapse ワークスペースを作成します。

  • サブスクリプションを選択します。

  • Azure "所有者" ロールを持っているリソース グループを選択または作成します。

  • ワークスペースに workspace1 という名前を指定します

  • ストレージ アカウントとして storage1 を選択します

  • "Filesystem" として使用されているコンテナーに container1 を選択します。

  • Synapse Studio で WS1 を開きます

  • Synapse Studio で、[管理]>[アクセス制御] に移動します。 [ワークスペース スコープ] で、次のように Synapse ロールをセキュリティ グループに割り当てます。

    • "Synapse 管理者" ロールを workspace1_SynapseAdministrators に割り当てます
    • "Synapse 共同作成者" ロールを workspace1_SynapseContributors に割り当てます
    • "Synapse コンピューティング オペレーター" ロールを workspace1_SynapseComputeOperators に割り当てます

手順 4: 既定のストレージ コンテナーに対するワークスペース MSI アクセスを許可する

Azure Synapse では、パイプラインを実行してシステム タスクを実行するため、ワークスペース用に、マネージド サービス ID (MSI) で既定の ADLS Gen2 アカウントの container1 に対するアクセス権が必要です。 詳細については、「Azure Synapse ワークスペース マネージド ID」を参照してください。

  • Azure ポータルを開きます

  • ストレージ アカウント、storage1、次に container1 を見つけます。

  • [アクセス制御 (IAM)] を選択します。

  • [追加]>[ロールの割り当ての追加] を選択して、[ロールの割り当ての追加] ページを開きます。

  • 次のロールを割り当てます。 詳細な手順については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。

    設定
    Role ストレージ BLOB データ共同作成者
    アクセスの割り当て先 マネージド ID
    メンバー マネージド ID 名

    Note

    マネージド ID の名前は、ワークスペース名でもあります。

    Add role assignment page in Azure portal.

手順 5: ワークスペースの Azure 共同作成者ロールを Synapse 管理者に付与する

SQL プール、Apache Spark プールと統合ランタイムを作成するには、ユーザーは少なくともワークスペースで Azure 共同作成者ロールを持っている必要があります。 共同作成者ロールでは、一時停止やスケーリングなど、リソースの管理もユーザーに許可されます。 Azure portal または Synapse Studio を使用して SQL プール、Apache Spark プール、統合ランタイムを作成するには、リソース グループ レベルでの共同作成者ロールが必要です。

  • Azure ポータルを開きます

  • ワークスペース workspace1 を見つけます

  • [アクセス制御 (IAM)] を選択します。

  • [追加]>[ロールの割り当ての追加] を選択して、[ロールの割り当ての追加] ページを開きます。

  • 次のロールを割り当てます。 詳細な手順については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。

    設定
    Role 共同作成者
    アクセスの割り当て先 サービス プリンシパル
    メンバー workspace1_SynapseAdministrators

    Add role assignment page in Azure portal.

手順 6: SQL Active Directory 管理者ロールを割り当てる

"ワークステーションの作成者" は、ワークスペースの "SQL Active Directory 管理者" として自動的に割り当てられます。 このロールは、1 人のユーザーまたは 1 つのグループにのみ付与できます。 この手順では、ワークスペースの SQL Active Directory 管理者を workspace1_SQLAdmins セキュリティ グループに割り当てます。 これにより、このグループには、ワークスペース内のすべての SQL プールとデータベースに対する高い特権を持つ管理者アクセス権が付与されます。

  • Azure ポータルを開きます
  • workspace1 に移動します
  • [設定][Microsoft Entra ID] を選択します。
  • [管理者の設定] を選択し、workspace1_SQLAdmins を選択します

Note

手順 6 は省略可能です。 workspace1_SQLAdmins グループに権限の低いロールを付与することもできます。 db_owner またはその他の SQL ロールを割り当てるには、各 SQL データベースでスクリプトを実行する必要があります。

手順 7: SQL プールへのアクセス権を付与する

既定では、Synapse 管理者には、ワークスペース内のサーバーレス SQL プールの SQL db_owner ロールが与えられます。

他のユーザーの SQL プールへのアクセスは、SQL アクセス許可で制御されます。 SQL アクセス許可を割り当てるには、作成後に各 SQL データベースで SQL スクリプトを実行する必要があります。 これらのスクリプトを実行する必要がある例を次に示します。

  1. サーバーレス SQL プール (組み込み) およびそのデータベースへのアクセス権をユーザーに付与するため。

  2. 専用 SQL プール データベースへのアクセス権をユーザーに付与するため。 SQL スクリプトの例については、この記事の後半で説明します。

  3. 専用 SQL プール データベースへのアクセス権を付与するには、ワークスペースの作成者または workspace1_SynapseAdministrators グループの任意のメンバーがスクリプトを実行できます。

  4. サーバーレス SQL プール (組み込み) へのアクセス権を付与するには、workspace1_SQLAdmins グループまたは workspace1_SynapseAdministrators グループの任意のメンバーがスクリプトを実行できます。

ヒント

SQL プールごとに次の手順を実行して、すべての SQL データベースへのアクセス権を付与できます。 セクション「ワークスペース スコープのアクセス許可を構成する」はルールの例外であり、ワークスペース レベルでユーザーに sysadmin ロールを割り当てることができます。

手順 7a: サーバーレス SQL プール (組み込み)

このセクションのスクリプトの例を使用すると、サーバーレス SQL プール Built-in 内の個々のデータベースまたはすべてのデータベースにアクセスするためのアクセス許可をユーザーに付与できます。

Note

スクリプトの例で、alias はアクセス権を付与するユーザーまたはグループのエイリアスに置き換えます。 domain は使用している会社のドメインに置き換えます。

データベース スコープのアクセス許可を構成する

この例で説明する手順を使用して、単一のサーバーレス SQL データベースへのアクセス権をユーザーに付与できます。

  1. ログインを作成します。 master データベース コンテキストに変更します。

    --In the master database
    CREATE LOGIN [alias@domain.com] FROM EXTERNAL PROVIDER;
    
  2. データベースにユーザーを作成します。 コンテキストをデータベースに変更します。

    -- In your database
    CREATE USER alias FROM LOGIN [alias@domain.com];
    
  3. データベース内の指定したロールのメンバーとしてユーザーを追加します (この場合、db_owner ロール)。

    ALTER ROLE db_owner ADD member alias; -- Type USER name from step 2
    

ワークスペース スコープのアクセス許可を構成する

ワークスペース内のすべてのサーバーレス SQL プールに対するフル アクセス権を付与できます。 この例のスクリプトを master データベースで実行します。

CREATE LOGIN [alias@domain.com] FROM EXTERNAL PROVIDER;
ALTER SERVER ROLE sysadmin ADD MEMBER [alias@domain.com];

手順 7b: 専用 SQL プールを構成する

単一の専用 SQL プール データベースへのアクセス権を付与できます。 Azure Synapse SQL スクリプト エディターで次の手順を使用します。

  1. 次のコマンドを実行して、データベースにユーザーを作成します。 ターゲット データベースを "接続先" ドロップダウンから選択します。

    --Create user in the database
    CREATE USER [<alias@domain.com>] FROM EXTERNAL PROVIDER;
    -- For Service Principals you would need just the display name and @domain.com is not required
    
  2. データベースにアクセスするためのロールをユーザーに付与します。

    --Grant role to the user in the database
    EXEC sp_addrolemember 'db_owner', '<alias@domain.com>';
    

重要

db_datareader および db_datawriter データベース ロールは、db_owner 権限を付与したくない場合に、読み取りまたは書き込みアクセス許可を提供できます。 ただし、Spark ユーザーが Spark と SQL プールとの間で直接読み取りまたは書き込みを行うには、db_owner アクセス許可が必要です。

ユーザーを作成した後、サーバーレス SQL プールがストレージ アカウントに対してクエリを実行できることを確認するクエリを実行できます。

手順 8: セキュリティ グループにユーザーを追加する

これで、アクセス制御システムの初期構成が完了しました。

アクセスを管理するために、設定したセキュリティ グループにユーザーを追加したり、削除したりできるようになりました。 ユーザーを Azure Synapse ロールに手動で割り当てることができますが、これによりアクセス許可の設定の一貫性がなくなります。 代わりに、セキュリティ グループに対してユーザーを追加または削除するだけにしてください。

手順 9: ネットワークのセキュリティ

ワークスペースをセキュリティで保護するための最後の手順として、ワークスペース ファイアウォールを使用してネットワーク アクセスをセキュリティで保護する必要があります。

手順 10: Completion

これで、ワークスペースが完全に構成され、セキュリティ保護されました。

より高度なシナリオをサポートする

このガイドでは、基本的なアクセス制御システムのセットアップに重点を置いてきました。 より高度なシナリオをサポートするには、追加のセキュリティ グループを作成し、よりきめ細かいロールをより具体的なスコープでそれらのグループに割り当てます。 次のケースについて考えてみましょう。

CI/CD を含む高度な開発シナリオのためにワークスペースの Git サポートを有効にする。 Git モードでは、Git のアクセス許可と Synapse RBAC によって、ユーザーが作業ブランチに変更をコミットできるかどうかが決定されます。 サービスへの発行は、コラボレーション ブランチからのみ行われます。 作業ブランチで更新プログラムの開発とデバッグを行う必要はあっても、ライブ サービスに変更を発行する必要はない開発者向けに、セキュリティ グループの作成を検討してください。

開発者のアクセスを特定のリソースに限定する。 特定のリソースへのアクセスのみを必要とする開発者向けに、より細分化されたセキュリティ グループを作成してください。 これらのグループに、特定の Spark プール、統合ランタイム、または資格情報をスコープとする適切な Azure Synapse ロールを割り当てます。

オペレーターによるコード成果物へのアクセスを制限する。 Synapse コンピューティング リソースの動作状態を監視し、ログを表示する必要はあっても、コードにアクセスしたりサービスに更新を発行したりする必要はないオペレーター向けに、セキュリティ グループを作成してください。 これらのグループに、特定の Spark プールと統合ランタイムをスコープとする "コンピューティング オペレーター" ロールを割り当てます。

ローカル認証を無効化する。 Microsoft Entra 認証のみを許可することにより、SQL プールなどの Azure Synapse リソースへのアクセスを一元管理できます。 ワークスペース内のすべてのリソースに対するローカル認証は、ワークスペースの作成時またはその後に無効にできます。 Microsoft Entra のみの認証の詳細については、Azure Synapse Analytics でのローカル認証の無効化に関する記事を参照してください。

次のステップ