Share via


Tárfiók-hozzáférés szabályozása kiszolgáló nélküli SQL-készlethez az Azure Synapse Analyticsben

A kiszolgáló nélküli SQL-készlet lekérdezései közvetlenül az Azure Storage-ból olvassák be a fájlokat. Az Azure Storage-fájlok elérésére vonatkozó engedélyek két szinten vannak szabályozva:

  • Tárolási szint – A felhasználónak engedéllyel kell rendelkeznie a mögöttes tárolófájlok eléréséhez. A tárolási rendszergazdának engedélyeznie kell a Microsoft Entra-tag számára a fájlok olvasását/írását, vagy közös hozzáférésű jogosultságkód (SAS) kulcsot kell létrehoznia, amelyet a tárterület eléréséhez használnak.
  • SQL szolgáltatásszint – A felhasználónak engedélyt kellett adnia az adatok külső tábla használatával történő olvasására vagy a OPENROWSET függvény végrehajtására. A szükséges engedélyekről ebben a szakaszban tájékozódhat bővebben.

Ez a cikk a használható hitelesítő adatok típusait és a hitelesítő adatok keresésének módját ismerteti az SQL- és a Microsoft Entra-felhasználók számára.

Tárolóengedélyek

A Synapse Analytics-munkaterület kiszolgáló nélküli SQL-készletei beolvashatják az Azure Data Lake Storage-ban tárolt fájlok tartalmát. A tárolási engedélyeket úgy kell konfigurálnia, hogy egy SQL-lekérdezést végrehajtó felhasználó elolvashassa a fájlokat. A fájlokhoz való hozzáférés engedélyezésének három módja van:

  • A szerepköralapú hozzáférés-vezérlés (RBAC) lehetővé teszi, hogy szerepkört rendeljen egy Microsoft Entra-felhasználóhoz abban a bérlőben, ahol a tárterület található. Az olvasónak tagja kell lennie a Tárblobadat-olvasó, a Storage Blob-adatszolgáltató vagy a Tárblobadat-tulajdonos szerepkörnek a tárfiókban. Az Azure Storage-ban adatokat író felhasználónak a Storage Blob Data Közreműködő vagy a Storage Blob Data Owner szerepkör tagjának kell lennie. A Tártulajdonos szerepkör nem jelenti azt, hogy a felhasználó egyben Storage-adattulajdonos is.
  • A hozzáférés-vezérlési listák (ACL) segítségével részletes Olvasási (R), Write(W) és Execute(X) engedélyeket határozhat meg az Azure Storage-ban található fájlokra és könyvtárakra. Az ACL-t hozzárendelheti a Microsoft Entra felhasználóihoz. Ha az olvasók egy Azure Storage-beli elérési úton szeretnének olvasni egy fájlt, akkor Execute(X) ACL-lel kell rendelkezniük a fájl elérési útjának minden mappájához, és Read(R) ACL-lel a fájlhoz. További információ az ACL-engedélyek tárolási rétegen való beállításáról.
  • A közös hozzáférésű jogosultságkód (SAS) lehetővé teszi az olvasó számára az Azure Data Lake Storage fájljainak elérését az időkorlátos jogkivonat használatával. Az olvasót nem is kell Microsoft Entra-felhasználóként hitelesíteni. A SAS-token az olvasónak adott engedélyeket és a token érvényességi időintervallumát tartalmazza. Az SAS-jogkivonat jó választás az időkorlátos hozzáféréshez olyan felhasználók számára, amelyeknek nem is kell ugyanabban a Microsoft Entra-bérlőben lenniük. A SAS-token meghatározható a tárfiókra vagy adott könyvtárakra. További információk korlátozott hozzáférés biztosításáról az Azure Storage-erőforrásokhoz közös hozzáférésű jogosultságkódok használatával.

Másik lehetőségként nyilvánosan elérhetővé teheti a fájlokat a névtelen hozzáférés engedélyezésével. Ezt a megközelítést NEM szabad használni abban az esetben, ha rendelkezik nem nyilvános adatokkal.

Támogatott tárterület-engedélyezési típusok

A kiszolgáló nélküli SQL-készletbe bejelentkezett felhasználóknak engedélyezni kell a fájlok elérését és lekérdezését az Azure Storage-ban, ha a fájlok nem érhetők el nyilvánosan. A nem nyilvános tárolóhoz négy engedélyezési típus használható: felhasználói identitás, közös hozzáférésű jogosultságkód, szolgáltatásnév és felügyelt identitás.

Megjegyzés:

Munkaterület létrehozásakor a Microsoft Entra átengedése az alapértelmezett viselkedés.

A felhasználói identitás, más néven a "Microsoft Entra átengedése" olyan engedélyezési típus, amelyben a kiszolgáló nélküli SQL-készletbe bejelentkezett Microsoft Entra-felhasználó identitását használják az adathozzáférés engedélyezéséhez. Az adatok elérése előtt az Azure Storage-rendszergazdának engedélyeket kell adnia a Microsoft Entra-felhasználónak. Ahogy az adatbázis-felhasználók táblájának támogatott engedélyezési típusai is jelzik, az SQL-felhasználó típusa nem támogatott.

Fontos

Előfordulhat, hogy az ügyfélalkalmazások gyorsítótáraznak egy Microsoft Entra hitelesítési jogkivonatot. A Power BI például gyorsítótárazza a Microsoft Entra-jogkivonatokat, és egy órán keresztül újra felhasználja ugyanazt a jogkivonatot. A hosszú ideig futó lekérdezések meghiúsulhatnak, ha a jogkivonat a lekérdezés végrehajtásának közepén lejár. Ha a lekérdezés közepén lejáró Microsoft Entra hozzáférési jogkivonat által okozott lekérdezési hibákat tapasztal, fontolja meg a szolgáltatásnévre, a felügyelt identitásra vagy a közös hozzáférésű jogosultságkódra való váltást.

Az adatok eléréséhez a Storage Blob Data Owner, a Storage Blob Data Contributor vagy a Storage Blob Data Reader szerepkör tagjának kell lennie. Másik lehetőségként részletes ACL-szabályokat is megadhat a fájlok és mappák eléréséhez. Még ha Ön is egy tárfiók tulajdonosa, akkor is hozzá kell adnia magát a Storage Blob-adatok egyik szerepköréhez. Ha többet szeretne megtudni az Azure Data Lake Store Gen2 hozzáférés-vezérléséről, tekintse át az Azure Data Lake Storage Gen2-ben található hozzáférés-vezérlést.

Bérlők közötti forgatókönyvek

Azokban az esetekben, amikor az Azure Storage a Synapse kiszolgáló nélküli SQL-készletétől eltérő bérlőben van, a szolgáltatásnévn keresztüli engedélyezés ajánlott módszer. SAS-engedélyezés is lehetséges, míg a felügyelt identitás nem támogatott.

Engedélyezési típus Tűzfallal védett tároló nem tűzfallal védett tároló
SAS Támogatott Támogatott
Szolgáltatásnév Nem támogatott Támogatott

Megjegyzés:

Ha az Azure Storage-t Azure Storage-tűzfal védi, a szolgáltatásnév nem támogatott.

Támogatott engedélyezési típusok adatbázis-felhasználók számára

Az alábbi táblázat a különböző bejelentkezési metódusokhoz elérhető Azure Storage-engedélyezési típusokat biztosít egy kiszolgáló nélküli Azure Synapse Analytics SQL-végponton:

Engedélyezés típusa SQL-felhasználó Microsoft Entra-felhasználó Egyszerű szolgáltatás
Felhasználói identitás Nem támogatott Támogatott Támogatott
SAS Támogatott Támogatott Támogatott
Egyszerű szolgáltatás Támogatott Támogatott Támogatott
Felügyelt identitás Támogatott Támogatott Támogatott

Támogatott tárolók és engedélyezési típusok

Az engedélyezési típusok és az Azure Storage-típusok alábbi kombinációit használhatja:

Engedélyezés típusa Blob Storage ADLS Gen1 ADLS Gen2
SAS Támogatott Nem támogatott Támogatott
Egyszerű szolgáltatás Támogatott Támogatott Támogatott
Felügyelt identitás Támogatott Támogatott Támogatott
Felhasználói identitás Támogatott Támogatott Támogatott

Bérlők közötti forgatókönyvek

Azokban az esetekben, amikor az Azure Storage az Azure Synapse Analytics kiszolgáló nélküli SQL-készletétől eltérő bérlőben van, a szolgáltatásnévn keresztüli engedélyezés ajánlott módszer. Közös hozzáférésű jogosultságkód-engedélyezés is lehetséges. A felügyelt szolgáltatás identitása nem támogatott.

Engedélyezési típus Tűzfallal védett tároló nem tűzfallal védett tároló
SAS Támogatott Támogatott
Egyszerű szolgáltatás Nem támogatott Támogatott

Megjegyzés:

Ha az Azure Storage-t egy Azure Storage-tűzfal védi, és egy másik bérlőben van, a szolgáltatásnév nem támogatott. Ehelyett használjon közös hozzáférésű jogosultságkódot (SAS).

Tűzfallal védett tároló

Egy erőforráspéldány-szabály létrehozásával konfigurálhatja a tárfiókokat egy adott kiszolgáló nélküli SQL-készlethez való hozzáférés engedélyezéséhez. A tűzfallal védett tároló elérésekor használja a felhasználói identitást vagy a felügyelt identitást.

Megjegyzés:

Az Azure Storage tűzfalfunkciója nyilvános előzetes verzióban érhető el, és minden nyilvános felhőrégióban elérhető.

Az alábbi táblázat az Azure Synapse Analytics kiszolgáló nélküli SQL-végpontjába való különböző bejelentkezési metódusokhoz nyújt elérhető tűzfalvédett Azure Storage-engedélyezési típusokat:

Engedélyezés típusa SQL-felhasználó Microsoft Entra-felhasználó Egyszerű szolgáltatás
Felhasználói identitás Nem támogatott Támogatott Támogatott
SAS Nem támogatott Nem támogatott Nem támogatott
Egyszerű szolgáltatás Nem támogatott Nem támogatott Nem támogatott
Felügyelt identitás Támogatott Támogatott Támogatott

Ha felhasználói identitáson keresztül szeretné elérni a tűzfallal védett tárolót, használhatja az Azure Portalt vagy az Az.Storage PowerShell-modult.

Azure Storage-tűzfal konfigurálása az Azure Portalon keresztül

  1. Keresse meg a tárfiókot az Azure Portalon.
  2. A fő navigációs menüben válassza a Hálózatkezelés lehetőséget a Gépház alatt.
  3. Az Erőforráspéldányok szakaszban adjon hozzá egy kivételt az Azure Synapse-munkaterülethez.
  4. Válassza ki Microsoft.Synapse/workspaces erőforrástípusként.
  5. Válassza ki a munkaterület nevét példánynévként.
  6. Válassza a Mentés parancsot.

Az Azure Storage tűzfalkonfigurációja a PowerShell használatával

Ezeket a lépéseket követve konfigurálhatja a tárfiókot, és kivételt adhat az Azure Synapse-munkaterülethez.

  1. Nyissa meg a PowerShellt, vagy telepítse a PowerShellt.

  2. Telepítse az Az.Storage modul és az Az.Synapse modul legújabb verzióit, például a következő szkriptben:

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

    Fontos

    Győződjön meg arról, hogy legalább a 3.4.0-s verziót használja. Az Az.Storage-verziót a következő paranccsal ellenőrizheti:

    Get-Module -ListAvailable -Name Az.Storage | Select Version
    
  3. Csatlakozás az Azure-bérlőhöz:

    Connect-AzAccount
    
  4. Változók definiálása a PowerShellben:

    • Erőforráscsoport neve – ezt az Azure Portalon találja a tárfiók áttekintésében .
    • Fiók neve – a tűzfalszabályok által védett tárfiók neve.
    • Bérlőazonosító – ezt az Azure Portalon, a Microsoft Entra ID-ban, a Tulajdonságok területen, a Bérlő tulajdonságai területen találja.
    • Munkaterület neve – Az Azure Synapse-munkaterület neve.
        $resourceGroupName = "<resource group name>"
        $accountName = "<storage account name>"
        $tenantId = "<tenant id>"
        $workspaceName = "<Azure 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
    

    Fontos

    A PowerShell-szkript által visszaadott értéknek $resourceid meg kell egyeznie a sablonnal: /subscriptions/{subscription-id}/resourcegroups/{resource-group}/providers/Microsoft.Synapse/workspaces/{name-of-workspace}Fontos, hogy kisbetűs erőforráscsoportokat írjon.

  5. Azure Storage-fiók hálózati szabályának hozzáadása:

        $parameters = @{
            ResourceGroupName = $resourceGroupName
            Name = $accountName
            TenantId = $tenantId 
            ResourceId = $resourceId
        }
    
        Add-AzStorageAccountNetworkRule @parameters
    
  6. Ellenőrizze, hogy a tárfiók hálózati szabálya alkalmazva lett-e a tárfiók tűzfalán. Az alábbi PowerShell-szkript az $resourceid előző lépések változóját hasonlítja össze a tárfiók hálózati szabályának kimenetével.

        $parameters = @{
            ResourceGroupName = $resourceGroupName
            Name = $accountName
        }
    
        $rule = Get-AzStorageAccountNetworkRuleSet @parameters
        $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
            }
        }
    

Hitelesítő adatok

Az Azure Storage-ban található fájlok lekérdezéséhez a kiszolgáló nélküli SQL-készlet végpontjának olyan hitelesítő adatokra van szüksége, amely tartalmazza a hitelesítési adatokat. Kétféle hitelesítő adatot használunk:

  • A kiszolgálószintű hitelesítő adatok a függvény használatával OPENROWSET végrehajtott alkalmi lekérdezésekhez használatosak. A hitelesítő adatok nevének meg kell egyeznie a tár URL-címével.
  • Külső táblákhoz adatbázis-hatókörű hitelesítő adatokat használunk. Külső táblahivatkozások DATA SOURCE a tároló eléréséhez használandó hitelesítő adatokkal.

Engedélyek megadása hitelesítő adatok kezeléséhez

Hitelesítő adatok kezelésének engedélyezése:

  • Ahhoz, hogy a felhasználó kiszolgálószintű hitelesítő adatokat hozzon létre vagy elvetjen, a rendszergazdának engedélyt kell adnia a ALTER ANY CREDENTIAL főadatbázisban való bejelentkezésre. Például:

    GRANT ALTER ANY CREDENTIAL TO [login_name];
    
  • Ahhoz, hogy egy felhasználó létrehozhasson vagy elvetjen egy adatbázis-hatókörű hitelesítő adatot, a rendszergazdának meg kell adnia az CONTROL adatbázis engedélyét a felhasználói adatbázisban lévő adatbázis-felhasználónak. Például:

    GRANT CONTROL ON DATABASE::[database_name] TO [user_name];
    

Hitelesítő adatok használatára vonatkozó engedélyek megadása

A külső tárolóhoz hozzáférő adatbázis-felhasználóknak rendelkezniük kell a hitelesítő adatok használatára való jogosultsággal. A hitelesítő adatok használatához a felhasználónak rendelkeznie kell egy REFERENCES adott hitelesítő adat engedélyével.

Ha kiszolgálószintű hitelesítő adatokhoz szeretne engedélyt adni REFERENCES egy bejelentkezéshez, használja a következő T-SQL-lekérdezést a főadatbázisban:

GRANT REFERENCES ON CREDENTIAL::[server-level_credential] TO [login_name];

Ha adatbázis-hatókörű hitelesítő adatokra szeretne engedélyt adni REFERENCES egy adatbázis-felhasználó számára, használja a következő T-SQL-lekérdezést a felhasználói adatbázisban:

GRANT REFERENCES ON DATABASE SCOPED CREDENTIAL::[database-scoped_credential] TO [user_name];

Kiszolgálószintű hitelesítő adatok

A kiszolgálószintű hitelesítő adatok akkor használatosak, ha egy SQL-bejelentkezési hívás a tárfiók fájljainak olvasása nélkül DATA_SOURCE működikOPENROWSET.

A kiszolgálószintű hitelesítő adatok nevének meg kell egyeznie az Azure Storage alap URL-címével, amelyet opcionálisan egy tárolónév követ. A rendszer hozzáad egy hitelesítő adatot a CREATE CREDENTIAL futtatásával. Meg kell adnia az argumentumot CREDENTIAL NAME .

Megjegyzés:

Az FOR CRYPTOGRAPHIC PROVIDER argumentum nem támogatott.

A kiszolgálószintű HITELESÍTŐ ADATOK nevének meg kell egyeznie a következő formátummal: <prefix>://<storage_account_path>[/<container_name>]. A tárfiók elérési útjait az alábbi táblázat ismerteti:

Külső adatforrás Előtag Tárfiók elérési útja
Azure Blob Storage https <storage_account>.blob.core.windows.net
1. generációs Azure Data Lake Storage https <storage_account>.azuredatalakestore.net/webhdfs/v1
Azure Data Lake Storage Gen2 https <storage_account>.dfs.core.windows.net

A kiszolgálószintű hitelesítő adatok ezután a következő hitelesítési típusokkal férhetnek hozzá az Azure Storage-hoz:

A Microsoft Entra-felhasználók bármely fájlhoz hozzáférhetnek az Azure Storage-ban, ha a Storage Blob Data Owner, a Storage Blob Data Contributor vagy a Storage Blob Data Reader szerepkör tagjai. A Microsoft Entra-felhasználóknak nincs szükségük hitelesítő adatokra a tárterület eléréséhez.

Az SQL által hitelesített felhasználók nem használhatják a Microsoft Entra-hitelesítést a tároló eléréséhez. A tárterületet egy adatbázis hitelesítő adatain keresztül érhetik el felügyelt identitással, SAS-kulcssal, szolgáltatásnévvel, vagy ha nyilvános hozzáférés van a tárhoz.

Adatbázis-hatókörű hitelesítő adatok

Az adatbázis-hatókörű hitelesítő adatok akkor használatosak, ha az egyszerű hívások OPENROWSET olyan külső táblából származó adatokkal DATA_SOURCE működnek, amelyek nem férnek hozzá a nyilvános fájlokhoz. Az adatbázis hatókörébe tartozó hitelesítő adatoknak nem kell egyeznie a tárfiók nevével, a tároló helyét meghatározó ADATFORRÁSban hivatkoznak rá.

Az adatbázis-hatókörű hitelesítő adatok az alábbi hitelesítési típusok használatával teszik lehetővé az Azure Storage-hoz való hozzáférést:

A Microsoft Entra-felhasználók bármely fájlhoz hozzáférhetnek az Azure Storage-ban, ha tagjai a Storage Blob-adatok tulajdonosának, a Storage Blob-adatszolgáltatónak vagy a Storage Blob-adatolvasó szerepkörnek. A Microsoft Entra-felhasználóknak nincs szükségük hitelesítő adatokra a tárterület eléréséhez.

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

Az SQL által hitelesített felhasználók nem használhatják a Microsoft Entra-hitelesítést a tároló eléréséhez. A tárterületet egy adatbázis hitelesítő adatain keresztül érhetik el felügyelt identitással, SAS-kulcssal, szolgáltatásnévvel, vagy ha nyilvános hozzáférés van a tárhoz.

Az adatbázis hatókörébe tartozó hitelesítő adatok külső adatforrásokban vannak használva annak meghatározásához, hogy milyen hitelesítési módszert használnak a tár eléréséhez:

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

Példák

Nyilvánosan elérhető adatforrás elérése

A következő szkripttel hozzon létre egy táblát, amely hozzáfér a nyilvánosan elérhető adatforráshoz.

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] )

Az adatbázis-felhasználó az adatforrásból külső táblával vagy OPENROW Standard kiadás T függvénnyel olvashatja be a fájlok tartalmát, amely az adatforrásra hivatkozik:

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

Adatforrás elérése hitelesítő adatokkal

Módosítsa a következő szkriptet egy külső tábla létrehozásához, amely SAS-jogkivonat, a felhasználó Microsoft Entra-identitása vagy a munkaterület felügyelt identitása használatával fér hozzá az Azure Storage-hoz.

-- Create master key in databases with some password (one-off per database)
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>'
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] );

Az adatbázis-felhasználó az adatforrásból külső tábla vagy OPENROW Standard kiadás T függvény használatával olvashatja be a fájlok tartalmát, amely az adatforrásra hivatkozik:

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

Következő lépések

Ezekkel a cikkekkel megtudhatja, hogyan kérdezhet le különböző mappatípusokat, fájltípusokat, és hogyan hozhat létre és használhat nézeteket: