ACL에 저장된 다이제스트에 액세스하는 방법

적용 대상: Azure SQL Database

참고

Azure SQL Database 원장은 현재 공개 미리 보기 로 제공됩니다.

이 문서에서는 Azure ACL(Azure Confidential Ledger)에 저장된 Azure SQL Database 원장 다이제스트에 액세스하여 엔드투엔드 보안 및 무결성을 보장하는 방법을 보여 줍니다. 이 문서에서는 저장된 정보의 무결성에 액세스하고 확인하는 방법을 설명합니다.

필수 구성 요소

통합은 어떻게 작동하나요?

Azure SQL 서버는 원장 데이터베이스의 다이제스트를 주기적으로 계산하여 Azure Confidential Ledger에 저장합니다. 사용자는 언제든지 Azure Confidential Ledger에서 다이제스트를 다운로드하고 Azure SQL Database 원장에 저장된 다이제스트와 비교하여 데이터의 무결성에 대한 유효성 검사를 수행할 수 있습니다. 다음 단계에서는 이에 대해 설명합니다.

1단계 - 다이제스트 위치 찾기

참고

다이제스트를 저장하는 데 여러 Azure Confidential Ledger 인스턴스가 사용된 경우, 쿼리가 둘 이상의 행을 반환합니다. 각 행에 대해 2~6단계를 반복하여 Azure Confidential Ledger의 모든 인스턴스에서 다이제스트를 다운로드합니다.

SSMS(SQL Server Management Studio)를 사용하여 다음 쿼리를 실행합니다. 다이제스트가 저장되는 Azure Confidential Ledger 인스턴스의 엔드포인트가 출력에 표시됩니다.

SELECT * FROM sys.database_ledger_digest_locations WHERE path like '%.confidential-ledger.azure.com%

2단계 - Subledgerid 확인

우리는 쿼리 출력의 경로 열 값에 관심이 있습니다. 이는 host namesubledgerid라는 두 부분으로 구성됩니다. 예를 들어, https://contoso-ledger.confidential-ledger.azure.com/sqldbledgerdigests/ledgersvr2/ledgerdb/2021-04-13T21:20:51.0000000이라는 Url에서 host namehttps://contoso-ledger.confidential-ledger.azure.com이고 subledgeridsqldbledgerdigests/ledgersvr2/ledgerdb/2021-04-13T21:20:51.0000000입니다. 이는 4단계에서 다이제스트를 다운로드하는 데 사용합니다.

3단계 - Azure AD 토큰 가져오기

Azure Confidential Ledger API는 Azure AD(Azure Active Directory) 전달자 토큰을 호출자 ID로 허용합니다. 이 ID는 프로비저닝 중에 Azure Resource Manager를 통해 ACL에 액세스해야 합니다. SQL Database에서 장부를 사용하도록 설정한 사용자는 Azure Confidential Ledger에 대한 관리자 액세스 권한을 자동으로 부여받습니다. 토큰을 가져오려면 사용자가 Azure Portal에서 사용한 것과 동일한 계정을 사용하여 Azure CLI를 통해 인증해야 합니다. 사용자가 인증되면 DefaultAzureCredentials()를 사용하여 전달자 토큰을 검색하고 Azure Confidential Ledger API를 호출할 수 있습니다.

ACL에 대한 액세스 권한이 있는 ID를 사용하여 Azure AD에 로그인합니다.

az login

전달자 토큰을 검색합니다.

from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()

4단계 - Azure Confidential Ledger에서 다이제스트 다운로드

다음 Python 스크립트는 Azure Confidential Ledger에서 다이제스트를 다운로드합니다. 이 스크립트는 Python용 Azure Confidential Ledger 클라이언트 라이브러리를 사용합니다.

from azure.identity import DefaultAzureCredential
from azure.confidentialledger import ConfidentialLedgerClient
from azure.confidentialledger.identity_service import ConfidentialLedgerIdentityServiceClient

ledger_id = "contoso-ledger"
identity_server_url = "https://identity.confidential-ledger.core.azure.com"
sub_ledger_id = "sqldbledgerdigests/ledgersvr2/ledgerdb/2021-04-13T21:20:51.0000000"
ledger_host_url = f"https://{ledger_id}.confidential-ledger.azure.com"
initial_path = f"/app/transactions?api-version=0.1-preview&subLedgerId={sub_ledger_id}"

identity_client = ConfidentialLedgerIdentityServiceClient(identity_server_url)
network_identity = identity_client.get_ledger_identity(
    ledger_id=ledger_id
)

ledger_tls_cert_file_name = f"{ledger_id}_certificate.pem"
with open(ledger_tls_cert_file_name, "w") as cert_file:
    cert_file.write(network_identity.ledger_tls_certificate)

credential = DefaultAzureCredential()
ledger_client = ConfidentialLedgerClient(
    endpoint=ledger_host_url, 
    credential=credential,
    ledger_certificate_path=ledger_tls_cert_file_name
)

ranged_result = ledger_client.get_ledger_entries(
    sub_ledger_id=sub_ledger_id
)

entries = 0

for entry in ranged_result:
    entries += 1
    print(f"\nTransaction id {entry.transaction_id} contents: {entry.contents}")

if entries == 0:
    print("\n***No digests are found for the supplied SubledgerID.")
else:
    print("\n***No more digests were found for the supplied SubledgerID.")

5단계 - SQL Server에서 다이제스트 다운로드

참고

이는 Azure SQL Database 원장에 저장된 해시가 시간이 흐르면서 변경되지 않았는지 확인하는 방법입니다. Azure SQL Database 원장의 무결성을 완벽하게 감사하려면 원장 테이블을 확인하여 변조를 감지하는 방법을 참조하세요.

SSMS를 사용하여 다음 쿼리를 실행합니다. 이 쿼리는 Genesis의 블록 다이제스트를 반환합니다.

SELECT * FROM sys.database_ledger_blocks

6단계 - 비교

block_id를 키로 사용하여 Azure Confidential Ledger에서 검색된 다이제스트와 SQL 데이터베이스에서 반환된 다이제스트를 비교합니다. 예를 들어 block_id = 1의 다이제스트는 block_id= 2 행에서 previous_block_hash 열의 값입니다. 마찬가지로, block_id = 3의 경우 block_id = 4 행에 있는 previous_block_id 열의 값입니다. 해시 값의 불일치는 잠재적인 데이터 변조를 나타냅니다.

데이터 변조가 의심되는 경우 원장 테이블을 확인하여 변조를 감지하는 방법을 참조하여 Azure SQL Database 원장에 대한 전체 감사를 수행합니다.

다음 단계