Mengontrol akses akun penyimpanan untuk kumpulan SQL tanpa server di Azure Synapse Analytics

Kueri kumpulan SQL tanpa server membaca file langsung dari Azure Storage. Izin untuk mengakses file di penyimpanan Azure dikontrol pada dua tingkat:

  • Tingkat penyimpanan - Pengguna harus memiliki izin untuk mengakses file penyimpanan mendasar. Administrator penyimpanan Anda harus mengizinkan prinsip Microsoft Azure AD untuk membaca/menulis file, atau menghasilkan kunci SAS yang akan digunakan untuk mengakses penyimpanan.
  • Tingkat layanan SQL - Pengguna harus diizinkan untuk membaca data menggunakan tabel eksternal atau untuk menjalankan fungsi OPENROWSET. Baca lebih lanjut tentang izin yang diperlukan pada bagian ini.

Artikel ini menjelaskan jenis info masuk yang dapat Anda gunakan dan bagaimana pencarian info masuk diberlakukan untuk pengguna SQL dan Microsoft Azure AD.

Izin akses penyimpanan

Kumpulan SQL tanpa server di ruang kerja Synapse Analytics dapat membaca konten file yang disimpan di penyimpanan Azure Data Lake. Anda perlu mengonfigurasi izin pada penyimpanan untuk memungkinkan pengguna yang menjalankan kueri SQL untuk membaca file. Terdapat tiga metode untuk mengaktifkan akses ke file:

  • Kontrol akses berbasis peran (RBAC) memungkinkan Anda menetapkan peran untuk beberapa pengguna Microsoft Azure AD di penyewa tempat penyimpanan Anda berada. Pembaca harus memiliki peran RBAC Storage Blob Data Reader, Storage Blob Data Contributor, atau Storage Blob Data Owner pada akun penyimpanan. Pengguna yang menulis data di penyimpanan Azure harus memiliki peran Storage Blob Data Contributor atau Storage Blob Data Owner. Harap diingat bahwa peran Storage Owner tidak mengartikan bahwa pengguna tersebut juga Storage Data Owner.
  • Daftar Kontrol Akses (ACL) memungkinkan Anda menentukan izin Baca(R), Tulis(W), dan Eksekusi(X) secara rinci pada file dan direktori di penyimpanan Azure. ACL dapat ditetapkan untuk pengguna Microsoft Azure AD. Jika pembaca ingin membaca file pada jalur di Azure Storage, pembaca harus memiliki ACL Eksekusi(X) pada setiap folder di jalur file, dan ACL Baca(R) pada file. Pelajari lebih lanjut cara mengatur izin ACL di lapisan penyimpanan.
  • Tanda tangan akses bersama (SAS) memungkinkan pembaca untuk mengakses file di penyimpanan Azure Data Lake menggunakan token berbatas waktu. Pembaca bahkan tidak perlu diautentikasi sebagai pengguna Microsoft Azure AD. Token SAS berisi izin yang diberikan kepada pembaca serta periode ketika token valid. Token SAS adalah pilihan yang baik untuk akses berbatas waktu bagi setiap pengguna yang bahkan tidak perlu berada di penyewa Microsoft Azure AD yang sama. Token SAS dapat ditentukan pada akun penyimpanan atau pada direktori tertentu. Pelajari lebih lanjut memberikan akses terbatas ke sumber daya Azure Storage menggunakan tanda tangan akses bersama.

Sebagai alternatif, Anda dapat membuat file Anda tersedia untuk umum dengan mengizinkan akses anonim. Pendekatan ini TIDAK boleh digunakan jika Anda memiliki data non-publik.

Jenis otorisasi penyimpanan yang didukung

Pengguna yang telah masuk ke kumpulan SQL tanpa server harus diizinkan untuk mengakses dan mengajukan kueri untuk file di Azure Storage jika file tidak tersedia untuk umum. Anda dapat menggunakan empat jenis otorisasi untuk mengakses penyimpanan non-publik - Identitas Pengguna, Tanda tangan akses bersama, Perwakilan Layanan, dan Identitas Terkelola.

Catatan

Pass-through Microsoft Azure AD adalah perilaku default saat Anda membuat ruang kerja.

Identitas Pengguna, yang juga dikenal sebagai "pass-through Microsoft Azure AD", adalah jenis otorisasi di mana identitas pengguna Microsoft Azure AD yang masuk ke kumpulan SQL tanpa server digunakan untuk mengotorisasi akses data. Sebelum mengakses data, administrator Azure Storage harus memberikan izin kepada pengguna Microsoft Azure AD. Seperti yang ditampilkan pada tabel di bawah ini, jenis otorisasi ini tidak didukung untuk jenis pengguna SQL.

Penting

Token autentikasi AAD dapat di-cache oleh aplikasi klien. Misalnya, PowerBI meng-cache token AAD dan menggunakan kembali token yang sama selama satu jam. Kueri jangka panjang dapat gagal jika token kedaluwarsa di tengah eksekusi kueri. Jika Anda mengalami kegagalan kueri yang disebabkan oleh token akses AAD yang kedaluwarsa di tengah kueri, pertimbangkan untuk beralih ke Perwakilan Layanan, Identitas terkelola, atau Tanda tangan akses bersama.

Anda harus memiliki peran Pemilik/Kontributor/Pembaca Data Blob Penyimpanan untuk menggunakan identitas Anda untuk mengakses data. Sebagai alternatif, Anda dapat menentukan aturan ACL untuk mengakses file dan folder secara rinci. Bahkan jika Anda adalah Pemilik Akun Penyimpanan, Anda masih perlu menambahkan peran untuk diri Anda ke salah satu Data Blob Penyimpanan. Untuk mempelajari lebih lanjut mengenai kontrol akses di Azure Data Lake Store Gen2, tinjau artikel Kontrol akses di Azure Data Lake Storage Gen2.

Skenario lintas penyewa

Dalam kasus ketika Azure Storage berada di penyewa yang berbeda dari kolam SQL tanpa server Synapse, otorisasi melalui Perwakilan Layanan adalah metode yang disarankan. Otorisasi SAS juga dapat dilakukan, sementara Identitas Terkelola tidak didukung.

Jenis otorisasi yang didukung untuk pengguna database

Pada tabel di bawah ini, Anda dapat menemukan jenis otorisasi yang tersedia untuk metode masuk yang berbeda ke titik akhir Synapse Serverless SQL:

Tipe otorisasi Pengguna SQL Pengguna Azure Active Directory Perwakilan Layanan
Identitas pengguna Tidak Didukung Didukung Didukung
SAS Didukung Didukung Didukung
Perwakilan Layanan Didukung Didukung Didukung
Identitas Terkelola Didukung Didukung Didukung

Penyimpanan dan jenis otorisasi yang didukung

Anda dapat menggunakan kombinasi otorisasi berikut dan jenis Azure Storage:

Tipe otorisasi Penyimpanan Blob ADLS Gen1 ADLS Gen2
SAS Didukung Tidak didukung Didukung
Perwakilan Layanan Didukung Didukung Didukung
Identitas Terkelola Didukung Didukung Didukung
Identitas Pengguna Didukung Didukung Didukung

Penyimpanan yang dilindungi firewall

Anda dapat mengonfigurasi akun penyimpanan untuk mengizinkan akses ke kumpulan SQL tanpa server tertentu dengan membuat aturan instans sumber daya. Saat mengakses penyimpanan yang dilindungi dengan firewall, Anda dapat menggunakan Identitas Pengguna atau Identitas Terkelola.

Catatan

Fitur firewall pada Penyimpanan sedang dalam pratinjau publik dan tersedia di seluruh wilayah cloud publik.

Pada tabel di bawah ini, Anda dapat menemukan jenis otorisasi yang tersedia untuk metode masuk yang berbeda ke titik akhir Synapse Serverless SQL:

Tipe otorisasi Pengguna SQL Pengguna Azure Active Directory Perwakilan Layanan
Identitas pengguna Tidak Didukung Didukung Didukung
SAS Tidak Didukung Tidak Didukung Tidak Didukung
Perwakilan Layanan Tidak Didukung Tidak Didukung Tidak Didukung
Identitas Terkelola Didukung Didukung Didukung

Untuk mengakses penyimpanan yang dilindungi dengan firewall melalui Identitas Pengguna, Anda dapat menggunakan UI portal Microsoft Azure atau modul Az.Storage PowerShell.

Konfigurasi melalui portal Microsoft Azure

  1. Cari Akun Penyimpanan Anda di portal Microsoft Azure.
  2. Buka Jejaring pada bagian Pengaturan.
  3. Pada Bagian "Instans sumber daya" tambahkan pengecualian untuk ruang kerja Synapse Anda.
  4. Pilih Microsoft.Synapse/workspaces sebagai jenis Sumber Daya.
  5. Pilih nama ruang kerja Anda sebagai nama Instans.
  6. Klik Simpan.

Konfigurasi melalui PowerShell

Ikuti langkah-langkah berikut untuk mengonfigurasi firewall akun penyimpanan Anda dan menambahkan pengecualian untuk ruang kerja Synapse.

  1. Buka PowerShell atau instal PowerShell

  2. Instal modul Az.Storage 3.4.0 dan Az.Synapse 0.7.0:

    Install-Module -Name Az.Storage -RequiredVersion 3.4.0
    Install-Module -Name Az.Synapse -RequiredVersion 0.7.0
    

    Penting

    Pastikan Anda menggunakan versi 3.4.0. Anda dapat memeriksa versi Az.Storage Anda dengan menjalankan perintah ini:

    Get-Module -ListAvailable -Name  Az.Storage | select Version
    
  3. Sambungkan ke Penyewa Azure Anda:

    Connect-AzAccount
    
  4. Tentukan variabel di PowerShell:

    • Nama grup sumber daya - Anda dapat menemukan nama grup sumber daya di portal Microsoft Azure pada ringkasan akun Penyimpanan.
    • Nama Akun - nama akun penyimpanan yang dilindungi oleh aturan firewall.
    • ID Penyewa - Anda dapat menemukan ID Penyewa pada informasi penyewa di Azure Active Directory di portal Microsoft Azure.
    • Nama Ruang Kerja - Nama ruang kerja Synapse.
        $resourceGroupName = "<resource group name>"
        $accountName = "<storage account name>"
        $tenantId = "<tenant id>"
        $workspaceName = "<synapse workspace name>"
    
        $workspace = Get-AzSynapseWorkspace -Name $workspaceName
        $resourceId = $workspace.Id
        $index = $resourceId.IndexOf("/resourceGroups/", 0)
        # Replace G with g - /resourceGroups/ to /resourcegroups/
        $resourceId = $resourceId.Substring(0,$index) + "/resourcegroups/" + $resourceId.Substring($index + "/resourceGroups/".Length)
        $resourceId
    

    Penting

    Pastikan bahwa id sumber daya cocok dengan templat ini dalam cetakan variabel resourceId.

    Penting untuk menulis resourcegroups dalam huruf kecil. Contoh id sumber daya:

    /subscriptions/{subscription-id}/resourcegroups/{resource-group}/providers/Microsoft.Synapse/workspaces/{name-of-workspace}
    
  5. Tambahkan aturan Jaringan Penyimpanan:

        Add-AzStorageAccountNetworkRule -ResourceGroupName $resourceGroupName -Name $accountName -TenantId $tenantId -ResourceId $resourceId
    
  6. Verifikasi bahwa aturan diterapkan di akun penyimpanan Anda:

        $rule = Get-AzStorageAccountNetworkRuleSet -ResourceGroupName $resourceGroupName -Name $accountName
        $rule.ResourceAccessRules | ForEach-Object { 
            if ($_.ResourceId -cmatch "\/subscriptions\/(\w\-*)+\/resourcegroups\/(.)+") { 
                Write-Host "Storage account network rule is successfully configured." -ForegroundColor Green
                $rule.ResourceAccessRules
            } else {
                Write-Host "Storage account network rule is not configured correctly. Remove this rule and follow the steps in detail." -ForegroundColor Red
                $rule.ResourceAccessRules
            }
        }
    

Kredensial

Untuk mengajukan kueri untuk file yang terletak di Azure Storage, titik akhir kumpulan SQL tanpa server Anda memerlukan info masuk yang berisi informasi autentikasi. Dua jenis info masuk yang digunakan yaitu:

  • INFO MASUK tingkat server digunakan untuk kueri ad-hoc yang dijalankan menggunakan fungsi OPENROWSET. Nama info masuk harus sesuai dengan URL penyimpanan.
  • INFO MASUK CAKUPAN DATABASE digunakan untuk tabel eksternal. Referensi tabel eksternal DATA SOURCE dengan info masuk yang harus digunakan untuk mengakses penyimpanan.

Untuk mengizinkan pengguna membuat atau menghapus izin masuk, admin dapat MEMBERIKAN/MENOLAK IZIN UBAH INFO MASUK kepada pengguna:

GRANT ALTER ANY CREDENTIAL TO [user_name];

Pengguna database yang mengakses penyimpanan eksternal harus memiliki izin untuk menggunakan info masuk.

Memberikan izin untuk menggunakan info masuk

Untuk menggunakan info masuk, pengguna harus memiliki izin REFERENCES pada info masuk tertentu. Untuk memberikan izin REFERENCES PADA storage_credential untuk specific_user, jalankan:

GRANT REFERENCES ON CREDENTIAL::[storage_credential] TO [specific_user];

Info masuk cakupan server

Info masuk cakupan server digunakan saat login SQL memanggil fungsi OPENROWSET tanpa DATA_SOURCE untuk membaca file pada beberapa akun penyimpanan. Nama info masuk cakupan server harus sesuai dengan URL dasar penyimpanan Azure (secara opsional diikuti oleh nama kontainer). Info masuk ditambahkan dengan menjalankan BUAT INFO MASUK. Anda harus memberikan argumen NAMA INFO MASUK.

Catatan

Argumen FOR CRYPTOGRAPHIC PROVIDER tidak didukung.

Nama INFO MASUK tingkat server harus sesuai dengan jalur lengkap ke akun penyimpanan (dan kontainer, secara opsional) dalam format berikut: <prefix>://<storage_account_path>[/<container_name>]. Jalur akun penyimpanan dijelaskan dalam tabel berikut ini:

Sumber Data Eksternal Prefiks Jalur akun penyimpanan
Azure Blob Storage https <storage_account>.blob.core.windows.net
Azure Data Lake Storage Gen1 https <storage_account>.azuredatalakestore.net/webhdfs/v1
Azure Data Lake Storage Gen2 https <storage_account>.dfs.core.windows.net

Info masuk cakupan server memungkinkan akses ke penyimpanan Azure menggunakan jenis autentikasi berikut:

Pengguna Microsoft Azure AD dapat mengakses setiap file di penyimpanan Azure jika mereka memiliki peran Storage Blob Data Owner, Storage Blob Data Contributor, atau Storage Blob Data Reader. Pengguna Microsoft Azure AD tidak memerlukan info masuk untuk mengakses penyimpanan.

Pengguna SQL tidak dapat menggunakan autentikasi Microsoft Azure AD untuk mengakses penyimpanan.

Info masuk cakupan database

Info masuk cakupan database digunakan saat prinsip mana pun memanggil fungsi OPENROWSET dengan DATA_SOURCE atau memilih data dari tabel eksternal yang tidak mengakses file publik. Info masuk cakupan database tidak perlu sesuai dengan nama akun penyimpanan. Info masuk ini akan secara eksplisit digunakan dalam SUMBER DATA yang menentukan lokasi penyimpanan.

Info masuk cakupan database memungkinkan akses ke penyimpanan Azure menggunakan jenis autentikasi berikut:

Pengguna Microsoft Azure AD dapat mengakses setiap file di penyimpanan Azure jika mereka setidaknya memiliki peran Storage Blob Data Owner, Storage Blob Data Contributor, atau Storage Blob Data Reader. Pengguna Microsoft Azure AD tidak memerlukan info masuk untuk mengakses penyimpanan.

CREATE EXTERNAL DATA SOURCE mysample
WITH (    LOCATION   = 'https://<storage_account>.dfs.core.windows.net/<container>/<path>'
)

Pengguna SQL tidak dapat menggunakan autentikasi Microsoft Azure AD untuk mengakses penyimpanan.

Info masuk cakupan database digunakan dalam sumber data eksternal untuk menentukan metode autentikasi yang akan digunakan untuk mengakses penyimpanan ini:

CREATE EXTERNAL DATA SOURCE mysample
WITH (    LOCATION   = 'https://<storage_account>.dfs.core.windows.net/<container>/<path>',
          CREDENTIAL = <name of database scoped credential> 
)

Contoh

Mengakses sumber data yang tersedia untuk umum

Gunakan skrip berikut ini untuk membuat tabel yang mengakses sumber data yang tersedia untuk umum.

CREATE EXTERNAL FILE FORMAT [SynapseParquetFormat]
       WITH ( FORMAT_TYPE = PARQUET)
GO
CREATE EXTERNAL DATA SOURCE publicData
WITH (    LOCATION   = 'https://<storage_account>.dfs.core.windows.net/<public_container>/<path>' )
GO

CREATE EXTERNAL TABLE dbo.userPublicData ( [id] int, [first_name] varchar(8000), [last_name] varchar(8000) )
WITH ( LOCATION = 'parquet/user-data/*.parquet',
       DATA_SOURCE = [publicData],
       FILE_FORMAT = [SynapseParquetFormat] )

Pengguna database dapat membaca konten file dari sumber data menggunakan tabel eksternal atau fungsi OPENROWSET yang mereferensikan sumber data:

SELECT TOP 10 * FROM dbo.userPublicData;
GO
SELECT TOP 10 * FROM OPENROWSET(BULK 'parquet/user-data/*.parquet',
                                DATA_SOURCE = 'mysample',
                                FORMAT='PARQUET') as rows;
GO

Mengakses sumber data menggunakan info masuk

Ubah skrip berikut ini untuk membuat tabel eksternal yang mengakses penyimpanan Azure menggunakan token SAS, identitas pengguna Microsoft Azure AD, atau identitas ruang kerja terkelola.

-- Create master key in databases with some password (one-off per database)
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Y*********0'
GO

-- Create databases scoped credential that use Managed Identity, SAS token or Service Principal. User needs to create only database-scoped credentials that should be used to access data source:

CREATE DATABASE SCOPED CREDENTIAL WorkspaceIdentity
WITH IDENTITY = 'Managed Identity'
GO
CREATE DATABASE SCOPED CREDENTIAL SasCredential
WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = 'sv=2019-10-1********ZVsTOL0ltEGhf54N8KhDCRfLRI%3D'
GO
CREATE DATABASE SCOPED CREDENTIAL SPNCredential WITH
IDENTITY = '**44e*****8f6-ag44-1890-34u4-22r23r771098@https://login.microsoftonline.com/**do99dd-87f3-33da-33gf-3d3rh133ee33/oauth2/token' 
, SECRET = '.7OaaU_454azar9WWzLL.Ea9ePPZWzQee~'
GO
-- Create data source that one of the credentials above, external file format, and external tables that reference this data source and file format:

CREATE EXTERNAL FILE FORMAT [SynapseParquetFormat] WITH ( FORMAT_TYPE = PARQUET)
GO

CREATE EXTERNAL DATA SOURCE mysample
WITH (    LOCATION   = 'https://<storage_account>.dfs.core.windows.net/<container>/<path>'
-- Uncomment one of these options depending on authentication method that you want to use to access data source:
--,CREDENTIAL = WorkspaceIdentity 
--,CREDENTIAL = SasCredential 
--,CREDENTIAL = SPNCredential
)

CREATE EXTERNAL TABLE dbo.userData ( [id] int, [first_name] varchar(8000), [last_name] varchar(8000) )
WITH ( LOCATION = 'parquet/user-data/*.parquet',
       DATA_SOURCE = [mysample],
       FILE_FORMAT = [SynapseParquetFormat] );

Pengguna database dapat membaca konten file dari sumber data menggunakan tabel eksternal atau fungsi OPENROWSET yang mereferensikan sumber data:

SELECT TOP 10 * FROM dbo.userdata;
GO
SELECT TOP 10 * FROM OPENROWSET(BULK 'parquet/user-data/*.parquet', DATA_SOURCE = 'mysample', FORMAT='PARQUET') as rows;
GO

Langkah berikutnya

Artikel yang tercantum di bawah ini akan membantu Anda mempelajari cara mengajukan kueri untuk berbagai jenis folder, jenis file, dan membuat serta menggunakan tampilan: