この記事では、Microsoft Azure Synapse ワークスペースへのアクセスを制御する方法について説明します。 これを実現するには、Azure ロール、Azure Synapse ロール、SQL アクセス許可、Git アクセス許可を組み合わせて使用します。
このガイドでは、ワークスペースを設定し、基本的なアクセス制御システムを構成します。 この情報は、さまざまな種類の Synapse プロジェクトで使用できます。 また、きめ細かな制御が必要な場合のために、より高度なオプションについても説明します。
Synapse アクセス制御は、セキュリティ グループを使用して、組織内のロールとペルソナを合わせることで簡素化できます。 これにより、ユーザーを追加および削除するだけで、セキュリティ グループへのアクセスを管理できます。
このチュートリアルを開始する前に、Azure Synapse アクセス制御の概要に関するページを参照して、Synapse Analytics で使用されるアクセス制御メカニズムについて理解してください。
アクセス制御メカニズム
注
このガイドのアプローチは、セキュリティ グループを作成することです。 これらのセキュリティ グループにロールを割り当てる場合は、ワークスペースへのアクセスを制御するために、それらのグループ内のメンバーシップのみを管理する必要があります。
Synapse ワークスペースをセキュリティで保護するには、次の項目を構成します。
- セキュリティ グループ。類似のアクセス要件を持つユーザーをグループ化します。
- Azure ロール。SQL プール、Apache Spark プールと統合ランタイムを作成および管理でき、ADLS Gen2 ストレージにアクセスできるユーザーを制御します。
- Synapse ロール。発行されたコード成果物へのアクセス、Apache Spark コンピューティング リソースと統合ランタイムの使用を制御します。
- SQL アクセス許可。SQL プールへの管理アクセスとデータ プレーン アクセスを制御します。
- Git アクセス許可。ワークスペースの Git サポートを構成した場合に、ソース管理のコード成果物にアクセスできるユーザーを制御します。
Synapse ワークスペースをセキュリティ保護する手順
このドキュメントでは、手順を簡素化するために、標準名を使用しています。 それらを任意の名前に置き換えてください。
設定 | 標準名 | 説明 |
---|---|---|
Synapse ワークスペース | workspace1 |
Azure Synapse ワークスペースに使用される名前。 |
ADLSGEN2 アカウント | storage1 |
ワークスペースで使用する ADLS アカウント。 |
コンテナー | container1 |
ワークスペースが既定で使う storage1 内のコンテナー。 |
Microsoft Entra ID テナント | contoso |
Microsoft Entra ID テナントの名前。 |
サービス プリンシパル | SERVICEPRINCIPAL |
Microsoft Entra ID テナント内のサービス プリンシパル。 |
手順 1: セキュリティ グループを設定する
ヒント
詳細なオプションを使ってワークスペースへのアクセスを制御し、ワークスペース全体ではなく、個々のリソースへのアクセスを開発者に許可することをお勧めします。 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 つのグループで十分です。 後でセキュリティ グループを追加して、より特殊化されたアクセスを必要とするユーザーを処理したり、特定のリソースへのアクセスのみに制限したりすることができます。
注
- セキュリティ グループの作成方法については、この記事の Microsoft Entra ID を使用した基本グループの作成とメンバーの追加に関するセクションをご覧ください。
- 別のセキュリティ グループからセキュリティ グループを追加する方法については、この記事の Microsoft Entra ID を使用した別のグループからのグループの追加または削除に関するセクションをご覧ください。
- セキュリティ グループを作成するときは、[グループの種類] が [セキュリティ] であることを確認します。 Microsoft 365 グループは、Azure SQL ではサポートされていません。
ヒント
個々の Synapse ユーザーは、Azure portal の Microsoft Entra ID を使用してグループ メンバーシップを表示できます。 これにより、付与されたロールを特定できます。
手順 2: ADLS Gen2 ストレージ アカウントを準備する
Synapse ワークスペースでは、次の場合に既定のストレージ コンテナーが使用されます。
- Spark テーブル用のバッキング データ ファイルの格納
- Spark ジョブの実行ログ
- インストールすることにしたライブラリの管理
ストレージに関する次の情報を特定します。
ワークスペースに使用する ADLS Gen2 アカウント。 このドキュメントでは、それを
storage1
と呼びます。storage1
は、ワークスペースの "プライマリ" ストレージ アカウントと見なされます。Synapse ワークスペースで既定で使用される
storage1
内のコンテナー。 このドキュメントでは、それをcontainer1
と呼びます。[アクセス制御 (IAM)] を選択します。
[追加]>[ロールの割り当ての追加] を選択して、[ロールの割り当ての追加] ページを開きます。
次のロールを割り当てます。 詳細な手順については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。
設定 値 役割 ストレージ BLOB データ共同作成者 アクセスの割り当て先 SERVICEPRINCIPAL
メンバー workspace1_SynapseAdministrators、workspace1_SynapseContributors、および workspace1_SynapseComputeOperators
手順 3: Synapse ワークスペースを作成して構成する
Azure portal で、Synapse ワークスペースを作成します。
サブスクリプションを選択します。
Azure "所有者" ロールを持っているリソース グループを選択または作成します。
ワークスペースに
workspace1
という名前を指定しますストレージ アカウントとして
storage1
を選択します"Filesystem" として使用されているコンテナーに
container1
を選択します。Synapse Studio で
workspace1
を開きますSynapse Studio で、[管理]>[アクセス制御] に移動します。 [ワークスペース スコープ] で、次のように Synapse ロールをセキュリティ グループに割り当てます。
- "Synapse 管理者" ロールを
workspace1_SynapseAdministrators
に割り当てます - "Synapse 共同作成者" ロールを
workspace1_SynapseContributors
に割り当てます - "Synapse コンピューティング オペレーター" ロールを
workspace1_SynapseComputeOperators
に割り当てます
- "Synapse 管理者" ロールを
手順 4: 既定のストレージ コンテナーに対するワークスペース MSI アクセスを許可する
Azure Synapse では、パイプラインを実行してシステム タスクを実行するため、ワークスペース用に、マネージド サービス ID (MSI) で既定の ADLS Gen2 アカウントの container1
に対するアクセス権が必要です。 詳細については、「Azure Synapse ワークスペース マネージド ID」を参照してください。
Azure ポータルを開きます
ストレージ アカウント、
storage1
、次にcontainer1
を見つけます。[アクセス制御 (IAM)] を選択します。
[追加]> を選択して、[ロールの割り当ての追加] ページを開きます。
次のロールを割り当てます。 詳細な手順については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。
設定 値 役割 ストレージ BLOB データ共同作成者 アクセスの割り当て先 マネージド ID メンバー マネージド ID 名 注
マネージド ID の名前は、ワークスペース名でもあります。
手順 5: ワークスペースの Azure 共同作成者ロールを Synapse 管理者に付与する
SQL プール、Apache Spark プール、統合ランタイムを作成するには、ユーザーは少なくともワークスペースに対する Azure 共同作成者ロールを持っている必要があります。 共同作成者ロールでは、一時停止やスケーリングなど、リソースの管理もユーザーに許可されます。 Azure portal または Synapse Studio を使って SQL プール、Apache Spark プール、統合ランタイムを作成するには、リソース グループ レベルでの共同作成者ロールが必要です。
Azure ポータルを開きます
ワークスペース
workspace1
を見つけます[アクセス制御 (IAM)] を選択します。
[追加]> を選択して、[ロールの割り当ての追加] ページを開きます。
次のロールを割り当てます。 詳細な手順については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。
設定 値 役割 共同作成者 ([特権管理者ロール] の下に表示されます) アクセスの割り当て先 SERVICEPRINCIPAL
メンバー workspace1_SynapseAdministrators
手順 6: SQL Active Directory 管理者ロールを割り当てる
"ワークステーションの作成者" は、ワークスペースの "SQL Active Directory 管理者" として自動的に割り当てられます。 このロールは、1 人のユーザーまたは 1 つのグループにのみ付与できます。 この手順では、ワークスペースの SQL Active Directory 管理者を workspace1_SQLAdmins
セキュリティ グループに割り当てます。 これにより、このグループには、ワークスペース内のすべての SQL プールとデータベースに対する高い特権を持つ管理者アクセス権が付与されます。
- Azure ポータルを開きます
-
workspace1
に移動します - [設定] で [Microsoft Entra ID] を選択します。
-
[管理者の設定] を選択し、
workspace1_SQLAdmins
を選択します
注
手順 6 は省略可能です。
workspace1_SQLAdmins
グループに権限の低いロールを付与することもできます。
db_owner
またはその他の SQL ロールを割り当てるには、各 SQL データベースでスクリプトを実行する必要があります。
手順 7: SQL プールへのアクセス権を付与する
既定では、Synapse 管理者には、ワークスペース内のサーバーレス SQL プールの SQL db_owner
ロールが与えられます。
他のユーザーの SQL プールへのアクセスは、SQL アクセス許可で制御されます。 SQL アクセス許可を割り当てるには、作成後に各 SQL データベースで SQL スクリプトを実行する必要があります。 これらのスクリプトを実行する必要がある例を次に示します。
サーバーレス SQL プール (組み込み) およびそのデータベースへのアクセス権をユーザーに付与するため。
専用 SQL プール データベースへのアクセス権をユーザーに付与するため。 SQL スクリプトの例については、この記事の後半で説明します。
専用 SQL プール データベースへのアクセス権を付与するには、ワークスペースの作成者または
workspace1_SynapseAdministrators
グループの任意のメンバーがスクリプトを実行できます。サーバーレス SQL プール (組み込み) へのアクセス権を付与するには、
workspace1_SQLAdmins
グループまたはworkspace1_SynapseAdministrators
グループの任意のメンバーがスクリプトを実行できます。
ヒント
SQL プールごとに次の手順を実行して、すべての SQL データベースへのアクセス権を付与できます。 セクション「ワークスペース スコープのアクセス許可を構成する」はルールの例外であり、ワークスペース レベルでユーザーに sysadmin ロールを割り当てることができます。
手順 7a: サーバーレス SQL プール (組み込み)
このセクションのスクリプトの例を使用すると、サーバーレス SQL プール Built-in
内の個々のデータベースまたはすべてのデータベースにアクセスするためのアクセス許可をユーザーに付与できます。
注
スクリプトの例で、alias はアクセス権を付与するユーザーまたはグループのエイリアスに置き換えます。 ___domain は使用している会社のドメインに置き換えます。
データベース スコープのアクセス許可を構成する
この例で説明する手順を使用して、単一のサーバーレス SQL データベースへのアクセス権をユーザーに付与できます。
ログインを作成します。
master
データベース コンテキストに変更します。--In the master database CREATE LOGIN [alias@___domain.com] FROM EXTERNAL PROVIDER;
データベースにユーザーを作成します。 コンテキストをデータベースに変更します。
-- In your database CREATE USER alias FROM LOGIN [alias@___domain.com];
データベース内の指定したロールのメンバーとしてユーザーを追加します (この場合、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 スクリプト エディターで次の手順を使用します。
次のコマンドを実行して、データベースにユーザーを作成します。 ターゲット データベースを "接続先" ドロップダウンから選択します。
--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
データベースにアクセスするためのロールをユーザーに付与します。
--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: ネットワークのセキュリティ
ワークスペースをセキュリティで保護するための最後の手順として、ワークスペース ファイアウォールを使用してネットワーク アクセスをセキュリティで保護する必要があります。
- マネージド仮想ネットワークを使用しても、または使用しなくても、公衆ネットワークからワークスペースに接続できます。 詳細については、接続設定に関するページを参照してください。
- 公衆ネットワークからのアクセスは、公衆ネットワーク アクセス機能またはワークスペース ファイアウォールを有効にすることで制御できます。
- または、マネージド プライベート エンドポイントおよびプライベート リンクを使用してワークスペースに接続できます。 Azure Synapse Analytics のマネージド仮想ネットワークのない Azure Synapse ワークスペースでは、マネージド プライベート エンドポイント経由で接続できません。
手順 10: Completion
これで、ワークスペースが完全に構成され、セキュリティ保護されました。
より高度なシナリオをサポートする
このガイドでは、基本的なアクセス制御システムのセットアップに重点を置いてきました。 さらに高度なシナリオをサポートするには、他のセキュリティ グループを作成し、いっそうきめ細かいロールをより具体的なスコープでそれらのグループに割り当てます。 次のケースについて考えてみましょう。
CI/CD を含む高度な開発シナリオのためにワークスペースの Git サポートを有効にする。 Git モードでは、Git のアクセス許可と Synapse RBAC によって、ユーザーが作業ブランチに変更をコミットできるかどうかが決定されます。 サービスへの発行は、コラボレーション ブランチからのみ行われます。 作業ブランチで更新プログラムの開発とデバッグを行う必要はあっても、ライブ サービスに変更を発行する必要はない開発者向けに、セキュリティ グループの作成を検討してください。
開発者のアクセスを特定のリソースに限定する。 特定のリソースへのアクセスのみを必要とする開発者向けには、他のさらにきめ細かいセキュリティ グループを作成します。 これらのグループに、特定の Spark プール、統合ランタイム、または資格情報をスコープとする適切な Azure Synapse ロールを割り当てます。
オペレーターによるコード成果物へのアクセスを制限する。 Synapse コンピューティング リソースの動作状態を監視し、ログを表示する必要はあっても、コードにアクセスしたりサービスに更新を発行したりする必要はないオペレーター向けに、セキュリティ グループを作成してください。 これらのグループに、特定の Spark プールと統合ランタイムをスコープとする "コンピューティング オペレーター" ロールを割り当てます。
ローカル認証を無効化する。 Microsoft Entra 認証のみを許可することにより、SQL プールなどの Azure Synapse リソースへのアクセスを一元管理できます。 ワークスペース内のすべてのリソースに対するローカル認証は、ワークスペースの作成時またはその後に無効にできます。 Microsoft Entra のみの認証の詳細については、Azure Synapse Analytics でのローカル認証の無効化に関する記事を参照してください。