この記事では、Microsoft Azure Synapse ワークスペースへのアクセスを制御する方法について説明します。 これを実現するには、Azure ロール、Azure Synapse ロール、SQL アクセス許可、Git アクセス許可を組み合わせて使用します。
このガイドでは、ワークスペースを設定し、基本的なアクセス制御システムを構成します。 この情報は、さまざまな種類の Synapse プロジェクトで使用できます。 また、きめ細かな制御が必要な場合のために、より高度なオプションもあります。
Synapse アクセス制御は、セキュリティ グループを使用して、組織内のロールとペルソナを合わせることで簡素化できます。 これにより、ユーザーを追加および削除するだけで、セキュリティ グループへのアクセスを管理できます。
このウォークスルーを始める前に、Azure Synapseワークスペースのアクセス制御概要を読んで、Synapse Analyticsで使用されるアクセス制御メカニズムに慣れてください。
アクセス制御メカニズム
注
このガイドのアプローチは、セキュリティ グループを作成することです。 これらのセキュリティ グループにロールを割り当てる場合は、ワークスペースへのアクセスを制御するために、それらのグループ内のメンバーシップのみを管理する必要があります。
Synapse ワークスペースをセキュリティで保護するには、次の項目を構成します。
- 類似のアクセス要件を持つユーザーをグループ化するためのセキュリティ グループ
- Azure ロールは、SQL プール、Apache Spark プールと統合ランタイムを作成および管理でき、ADLS Gen2 ストレージにアクセスできるユーザーを制御します。
- 公開済みコード成果物へのアクセス、Apache Spark コンピューティング リソースと統合ランタイムの使用を制御する Synapse ロール
- SQL アクセス許可。SQL プールへの管理アクセスとデータ プレーン アクセスを制御します。
- Git アクセス許可。ワークスペースの Git サポートを構成した場合に、ソース管理のコード成果物にアクセスできるユーザーを制御します。
Synapse ワークスペースをセキュリティ保護する手順
このドキュメントでは、手順を簡素化するために、標準名を使用しています。 それらを任意の名前に置き換えてください。
| 設定 | 標準名 | Description |
|---|---|---|
| Synapse ワークスペース | workspace1 |
Azure Synapse ワークスペースに使用される名前。 |
| ADLSGEN2 アカウント | storage1 |
ワークスペースで使用する ADLS アカウント。 |
| コンテナ | container1 |
ワークスペースが既定で使う storage1 内のコンテナー。 |
| Microsoft Entra ID テナント | contoso |
Microsoft Entra ID テナントの名前。 |
| サービス プリンシパル | SERVICEPRINCIPAL |
Microsoft Entra ID テナント内のサービス プリンシパル。 |
手順 1: セキュリティ グループを設定する
ヒント
ワークスペースへのアクセスを細かく制御する細かいオプションを使いましょう。 開発者にワークスペース全体ではなく、個別のリソースへのアクセスを許可しましょう。 Synapse RBACの詳細については、「Synapseの役割ベースアクセス制御(RBAC)とは何か?」をご覧ください。
ワークスペースに次のセキュリティ グループを作成してください:
-
workspace1_SynapseAdministrators。ワークスペースを完全に制御する必要があるユーザー向けです。 少なくとも最初は、自分をこのセキュリティ グループに追加してください。 -
workspace1_SynapseContributors。コードの開発、デバッグ、およびサービスへの発行を行う必要がある開発者向けです。 -
workspace1_SynapseComputeOperatorsApache 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と呼びます。Access control (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 Compute Operator" ロールを
workspace1_SynapseComputeOperatorsに割り当てます
- "Synapse 管理者" ロールを
手順 4: 既定のストレージ コンテナーに対するワークスペース MSI アクセスを許可する
Azure Synapse では、パイプラインを実行してシステム タスクを実行するため、ワークスペース用に、マネージド サービス ID (MSI) で既定の ADLS Gen2 アカウントの container1 に対するアクセス権が必要です。 詳細については、Azure Synapse Analyticsの管理されたアイデンティティをご覧ください。
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 Microsoft Entra ID管理者の役割を割り当てる
ワークスペースの作成者 は、ワークスペースの 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 スクリプト エディターで次の手順を使用します。
次のコマンドを実行して、データベースにユーザーを作成します。 「 Connect to 」ドロップダウンリストからターゲットデータベースを選択してください:
--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 Analytics 用 Azure Private Linkを使用して、ワークスペースに接続することもできます。 Azure Synapse Analytics のマネージド仮想ネットワークを使用しない Azure Synapse ワークスペースは、マネージド プライベート エンドポイント経由では接続できません。
手順 10: 完了
これで、ワークスペースが完全に構成され、セキュリティ保護されました。
より高度なシナリオへの対応
このガイドでは、基本的なアクセス制御システムのセットアップに重点を置いてきました。 さらに高度なシナリオをサポートするには、他のセキュリティ グループを作成し、いっそうきめ細かいロールをより具体的なスコープでそれらのグループに割り当てます。 次のケースについて考えてみましょう。
CI/CD を含む高度な開発シナリオのためにワークスペースの Git サポートを有効にする。 Git モードでは、Git のアクセス許可と Synapse RBAC によって、ユーザーが作業ブランチに変更をコミットできるかどうかが決定されます。 サービスへの発行は、コラボレーション ブランチからのみ行われます。 作業ブランチで更新プログラムの開発とデバッグを行う必要はあっても、ライブ サービスに変更を発行する必要はない開発者向けに、セキュリティ グループの作成を検討してください。
開発者のアクセスを特定のリソースに限定する。 特定のリソースへのアクセスのみを必要とする開発者向けには、他のさらにきめ細かいセキュリティ グループを作成します。 これらのグループに、特定の Spark プール、統合ランタイム、または資格情報をスコープとする適切な Azure Synapse ロールを割り当てます。
オペレーターによるコード成果物へのアクセスを制限する。 Synapse コンピューティング リソースの動作状態を監視し、ログを表示する必要はあっても、コードにアクセスしたりサービスに更新を発行したりする必要はないオペレーター向けに、セキュリティ グループを作成してください。 これらのグループに、特定の Spark プールと統合ランタイムをスコープとする "コンピューティング オペレーター" ロールを割り当てます。
ローカル認証を無効化する。 Microsoft Entra 認証のみを許可することにより、SQL プールなどの Azure Synapse リソースへのアクセスを一元管理できます。 ワークスペース内のすべてのリソースに対するローカル認証は、ワークスペースの作成時またはその後に無効にできます。 Microsoft Entra のみの認証の詳細については、Azure Synapse Analytics でのローカル認証の無効化に関する記事を参照してください。