Translated ['src/pentesting-cloud/azure-security/az-privilege-escalation

This commit is contained in:
Translator
2025-02-20 00:44:16 +00:00
parent 892695807d
commit b5dc48938e
9 changed files with 267 additions and 163 deletions
-1
View File
File diff suppressed because one or more lines are too long
@@ -31,13 +31,23 @@ az mysql flexible-server update \
--name <server_name> \
--admin-password <password_to_update>
```
또한 비공개 엔드포인트가 아닌 곳에서 접근하려면 공 액세스를 활성화해야 합니다. 활성화하려면:
또한 비공개 엔드포인트가 아닌 곳에서 접근하려면 공 액세스를 활성화해야 합니다. 활성화하려면:
```bash
az mysql flexible-server update --resource-group <resource_group_name> --server-name <server_name> --public-access Enabled
```
### `Microsoft.DBforMySQL/flexibleServers/read`, `Microsoft.DBforMySQL/flexibleServers/write`, `Microsoft.DBforMySQL/flexibleServers/backups/read`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
이 권한을 사용하면 백업에서 MySQL 서버를 복원할 수 있습니다:
```bash
az mysql flexible-server restore \
--resource-group <resource_group_name> \
--name <restore_server_name> \
--source-server <server_name> \
--yes
```
### `Microsoft.DBforMySQL/flexibleServers/read`, `Microsoft.DBforMySQL/flexibleServers/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`, `Microsoft.DBforMySQL/flexibleServers/administrators/write` && `Microsoft.DBforMySQL/flexibleServers/administrators/read`
이 권한을 사용하면 MySQL Flexible Server에 대한 Azure Active Directory (AD) 관리자를 구성할 수 있습니다. 이는 자신 또는 다른 계정을 AD 관리자으로 설정하여 MySQL 서버에 대한 전체 관리 권한을 부여함으로써 악용될 수 있습니다. flexible-server에 사용자가 할당된 관리 ID가 있어야 합니다.
이 권한을 사용하면 MySQL Flexible Server에 대한 Azure Active Directory (AD) 관리자를 구성할 수 있습니다. 이는 자신 또는 다른 계정을 AD 관리자으로 설정하여 MySQL 서버에 대한 전체 관리 권한을 부여함으로써 악용될 수 있습니다. flexible-server에 사용자가 할당된 관리 ID가 있어야 한다는 점이 중요합니다.
```bash
az mysql flexible-server ad-admin create \
--resource-group <ResourceGroupName> \
@@ -24,20 +24,66 @@ az postgres flexible-server create \
--tier <PricingTier> \
--version <PostgreSQLVersion>
```
예를 들어, 이 권한은 PostgreSQL 비밀번호를 변경할 수 있게 해주며, 이는 물론 PostgreSQL 인증이 활성화된 경우에 유용합니다.
예를 들어, 이 권한은 PostgreSQL 비밀번호를 변경할 수 있게 해주며, 이는 PostgreSQL 인증이 활성화된 경우에 유용합니다.
```bash
az postgres flexible-server update \
--resource-group <resource_group_name> \
--name <server_name> \
--admin-password <password_to_update>
```
또한 비공개 엔드포인트가 아닌 곳에서 접근하려면 공용 액세스를 활성화해야 합니다. 활성화하려면:
또한, 권한을 통해 할당된 ID를 활성화하고 서버에 연결된 관리 ID로 작업할 수 있습니다. 여기에서 Azure PostgreSQL 유연한 서버가 지원하는 모든 확장을 찾을 수 있습니다 [https://learn.microsoft.com/en-us/azure/cosmos-db/postgresql/reference-extensions](https://learn.microsoft.com/en-us/azure/cosmos-db/postgresql/reference-extensions). 이러한 확장을 사용하려면 일부 서버 매개변수(azure.extensions)를 변경해야 합니다. 예를 들어 Azure Storage에 액세스할 수 있는 관리 ID와 함께 다음과 같이 합니다:
먼저 매개변수를 변경하고 할당된 ID가 활성화되어 있는지 확인합니다:
```bash
az postgres flexible-server parameter set \
--resource-group <YourResourceGroupName> \
--server-name <YourServerName> \
--name azure.extensions \
--value "AZURE_STORAGE"
az postgres flexible-server identity update \
--resource-group <YourResourceGroupName> \
--server-name <YourServerName> \
--system-assigned Enabled
```
```sql
CREATE EXTENSION IF NOT EXISTS azure_storage;
CREATE EXTERNAL DATA SOURCE ManagedIdentity
SELECT azure_storage.account_add('<storage-account>', '<storage-key>');
SELECT *
FROM azure_storage.blob_get(
'<storage-account>',
'<container>',
'message.txt',
decoder := 'text'
) AS t(content text)
LIMIT 1;
```
또한 비공식 엔드포인트에서 액세스하려면 공용 액세스를 활성화해야 합니다. 활성화하려면:
```bash
az postgres flexible-server update --resource-group <resource_group_name> --server-name <server_name> --public-access Enabled
```
### `Microsoft.DBforPostgreSQL/flexibleServers/read`, `Microsoft.DBforPostgreSQL/flexibleServers/write`, `Microsoft.DBforPostgreSQL/flexibleServers/backups/read`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
이 권한을 사용하면 다음을 통해 백업에서 서버를 복원할 수 있습니다:
```bash
az postgres flexible-server restore \
--resource-group <RESOURCE_GROUP> \
--name <NEW_SERVER_NAME> \
--source-server <SOURCE_SERVER_NAME> \
--restore-time "<ISO8601_TIMESTAMP>" \
--yes
```
### `Microsoft.DBforPostgreSQL/flexibleServers/read`, `Microsoft.DBforPostgreSQL/flexibleServers/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`, `Microsoft.DBforPostgreSQL/flexibleServers/administrators/write` && `Microsoft.DBforPostgreSQL/flexibleServers/administrators/read`
이 권한을 사용하면 PostgreSQL Flexible Server에 대한 Azure Active Directory (AD) 관리자를 구성할 수 있습니다. 이는 자신 또는 다른 계정을 AD 관리자으로 설정하여 PostgreSQL 서버에 대한 전체 관리 권한을 부여함으로써 악용될 수 있습니다. 기존 주체를 업데이트하는 것은 아직 지원되지 않으므로, 생성된 것이 있다면 먼저 삭제해야 합니다.
이 권한을 사용하면 PostgreSQL Flexible Server에 대한 Azure Active Directory (AD) 관리자를 구성할 수 있습니다. 이는 자신 또는 다른 계정을 AD 관리자으로 설정하여 PostgreSQL 서버에 대한 전체 관리 권한을 부여함으로써 악용될 수 있습니다. 기존 주체를 업데이트하는 것은 아직 지원되지 않으므로, 생성된 경우 먼저 삭제해야 합니다.
유연한 서버에 사용하기 위해 사용자 할당 관리 ID가 있는 것이 중요합니다.
```bash
@@ -12,7 +12,7 @@ SQL Database에 대한 자세한 정보는 다음을 확인하세요:
### `Microsoft.Sql/servers/read` && `Microsoft.Sql/servers/write`
이 권한을 가진 사용자는 Azure SQL 서버를 업데이트하거나 생성하고, 관리 자격 증명을 포함한 중요한 구성을 수정하여 권한 상승을 수행할 수 있습니다. 이 권한은 사용자가 SQL 서버 관리자 비밀번호를 포함한 서버 속성을 업데이트할 수 있게 하여, 무단 접근 또는 서버에 대한 제어를 가능하게 합니다. 또한 새로운 서버를 생성할 수 있어, 악의적인 목적으로 그림자 인프라를 도입할 수 있습니다. "Microsoft Entra Authentication Only"가 비활성화된 환경에서는 SQL 기반 인증을 악용하여 무제한 접근을 얻을 수 있으므로 특히 중요해집니다.
이 권한을 가진 사용자는 Azure SQL 서버를 업데이트하거나 생성하고, 관리 자격 증명을 포함한 중요한 구성을 수정하여 권한 상승을 수행할 수 있습니다. 이 권한은 사용자가 SQL 서버 관리자 비밀번호를 포함한 서버 속성을 업데이트할 수 있게 하여, 무단 접근 또는 서버에 대한 제어를 가능하게 합니다. 또한 새로운 서버를 생성할 수 있어, 악의적인 목적을 위한 그림자 인프라를 도입할 수 있습니다. "Microsoft Entra Authentication Only"가 비활성화된 환경에서는 SQL 기반 인증을 악용하여 무제한 접근을 얻을 수 있으므로 특히 중요해집니다.
```bash
# Change the server password
az sql server update \
@@ -44,6 +44,11 @@ az sql server update \
```
```sql
CREATE DATABASE SCOPED CREDENTIAL [ManagedIdentityCredential]
WITH IDENTITY = 'Managed Identity';
GO
CREATE EXTERNAL DATA SOURCE ManagedIdentity
WITH (
TYPE = BLOB_STORAGE,
@@ -62,7 +67,7 @@ GO
```
### `Microsoft.Sql/servers/firewallRules/write`
공격자는 Azure SQL 서버의 방화벽 규칙을 조작하여 무단 액세스를 허용할 수 있습니다. 이를 통해 특정 IP 주소 또는 전체 IP 범위, 공용 IP를 포함하여 서버를 열 수 있으며, 악의적인 행위자에게 접근을 가능하게 합니다. 이 사후 활용 활동은 기존 네트워크 보안 제어를 우회하거나 지속성을 확립하거나 민감한 리소스를 노출시켜 환경 내에서 수평 이동을 촉진하는 데 사용될 수 있습니다.
공격자는 Azure SQL 서버의 방화벽 규칙을 조작하여 무단 액세스를 허용할 수 있습니다. 이를 통해 특정 IP 주소 전체 IP 범위, 공용 IP를 포함하여 서버를 열 수 있으며, 악의적인 행위자에게 접근을 가능하게 합니다. 이 사후 활용 활동은 기존 네트워크 보안 제어를 우회하거나 지속성을 확립하거나 민감한 리소스를 노출시켜 환경 내에서 수평 이동을 촉진하는 데 사용될 수 있습니다.
```bash
# Create Firewall Rule
az sql server firewall-rule create \
@@ -85,7 +90,7 @@ az sql server firewall-rule update \
### `Microsoft.Sql/servers/ipv6FirewallRules/write`
이 권한을 사용하면 Azure SQL Server에서 IPv6 방화벽 규칙을 생성, 수정 또는 삭제할 수 있습니다. 이는 공격자나 권한이 있는 사용자가 기존 네트워크 보안 구성을 우회하고 서버에 무단으로 접근할 수 있게 할 수 있습니다. 모든 IPv6 주소에서 트래픽을 허용하는 규칙을 추가함으로써, 공격자는 서버를 외부 접근에 열 수 있습니다.
이 권한을 사용하면 Azure SQL Server에서 IPv6 방화벽 규칙을 생성, 수정 또는 삭제할 수 있습니다. 이는 공격자나 권한이 있는 사용자가 기존 네트워크 보안 구성을 우회하고 서버에 무단으로 접근할 수 있게 할 수 있습니다. 모든 IPv6 주소에서 트래픽을 허용하는 규칙을 추가함으로써, 공격자는 서버를 외부 접근에 열 수 있습니다.
```bash
az sql server firewall-rule create \
--server <server_name> \
@@ -99,7 +104,7 @@ az sql server firewall-rule create \
### `Microsoft.Sql/servers/administrators/write` && `Microsoft.Sql/servers/administrators/read`
이 권한을 사용하면 Azure SQL Server 환경에서 SQL 데이터베이스에 접근하고 중요한 정보를 검색하여 권한 상승을 할 수 있습니다. 아래 명령어를 사용하면 공격자 권한이 있는 사용자가 자신 또는 다른 계정을 Azure AD 관리자 계정으로 설정할 수 있습니다. "Microsoft Entra Authentication Only"가 활성화된 경우 서버 및 해당 인스턴스에 접근할 수 있습니다. SQL 서버의 Azure AD 관리자를 설정하는 명령어는 다음과 같습니다:
이 권한을 사용하면 Azure SQL Server 환경에서 SQL 데이터베이스에 접근하고 중요한 정보를 검색하여 권한 상승을 할 수 있습니다. 아래 명령어를 사용하면 공격자 또는 권한이 있는 사용자가 자신 또는 다른 계정을 Azure AD 관리자 계정으로 설정할 수 있습니다. "Microsoft Entra Authentication Only"가 활성화된 경우 서버 및 해당 인스턴스에 접근할 수 있습니다. SQL 서버의 Azure AD 관리자를 설정하는 명령어는 다음과 같습니다:
```bash
az sql server ad-admin create \
--server <server_name> \
@@ -121,4 +126,20 @@ az sql server azure-ad-only-auth disable \
--server <server_name> \
--resource-group <resource_group_name>
```
### Microsoft.Sql/servers/databases/dataMaskingPolicies/write
SQL 데이터베이스의 데이터 마스킹 정책을 수정(또는 비활성화)합니다.
```bash
az rest --method put \
--uri "https://management.azure.com/subscriptions/<your-subscription-id>/resourceGroups/<your-resource-group>/providers/Microsoft.Sql/servers/<your-server>/databases/<your-database>/dataMaskingPolicies/Default?api-version=2021-11-01" \
--body '{
"properties": {
"dataMaskingState": "Disable"
}
}'
```
### Row Level Security 제거
관리자로 로그인하면, 관리자 자신과 다른 사용자의 정책을 제거할 수 있습니다.
```sql
DROP SECURITY POLICY [Name_of_policy];
```
{{#include ../../../banners/hacktricks-training.md}}
@@ -8,10 +8,12 @@
Azure Cosmos DB는 문서, 관계형, 키-값, 그래프 및 열 패밀리 데이터 모델을 사용하여 실제 데이터를 모델링하기 위한 여러 데이터베이스 API를 제공합니다. 이 API는 NoSQL, MongoDB, PostgreSQL, Cassandra, Gremlin 및 Table입니다.
CosmosDB의 주요 측면 중 하나는 Azure Cosmos Account입니다. **Azure Cosmos Account**는 데이터베이스에 대한 진입점 역할을 합니다. 계정은 글로벌 분배, 일관성 수준 및 사용할 특정 API(예: NoSQL)와 같은 주요 설정을 결정합니다. 계정을 통해 데이터가 여러 지역에서 저지연 액세스를 위해 사용 가능하도록 글로벌 복제를 구성할 수 있습니다. 또한 성능과 데이터 정확성 간의 균형을 맞추는 일관성 수준을 선택할 수 있으며, 옵션은 Strong에서 Eventual consistency까지 다양합니다.
CosmosDB의 주요 측면 중 하나는 Azure Cosmos Account입니다. **Azure Cosmos Account**는 데이터베이스에 대한 진입점 역할을 합니다. 계정은 글로벌 분배, 일관성 수준 및 사용할 특정 API(예: NoSQL)와 같은 주요 설정을 결정합니다. 계정을 통해 여러 지역에서 데이터에 대한 저지연 액세스를 보장하기 위해 글로벌 복제를 구성할 수 있습니다. 또한 성능과 데이터 정확성 간의 균형을 맞추는 일관성 수준을 선택할 수 있으며, 옵션은 Strong에서 Eventual consistency까지 다양합니다.
### NoSQL (sql)
Azure Cosmos DB NoSQL API는 JSON을 데이터 형식으로 사용하는 문서 기반 API입니다. JSON 객체를 쿼리하기 위한 SQL 유사 쿼리 구문을 제공하여 구조화된 데이터 및 반구조화된 데이터 작업에 적합합니다. 서비스의 엔드포인트는:
Azure Cosmos DB는 **사용자 할당 ID**와 **시스템 할당 관리 ID**를 지원하며, 이는 자동으로 생성되어 리소스의 수명 주기에 연결되어 다른 서비스에 연결할 때 안전한 토큰 기반 인증을 허용합니다—단, 해당 서비스에 적절한 역할 할당이 있어야 합니다. 그러나 Cosmos DB는 Azure Blob Storage와 같은 외부 데이터 소스를 직접 쿼리하는 내장 메커니즘이 없습니다. SQL Server의 외부 테이블 기능과 달리, Cosmos DB는 데이터가 네이티브 쿼리 기능으로 쿼리될 수 있도록 Azure Data Factory, 데이터 마이그레이션 도구 또는 사용자 지정 스크립트와 같은 외부 도구를 사용하여 컨테이너에 수집되어야 합니다.
### NoSQL
Azure Cosmos DB NoSQL API는 JSON을 데이터 형식으로 사용하는 문서 기반 API입니다. 이는 JSON 객체를 쿼리하기 위한 SQL 유사 쿼리 구문을 제공하여 구조화된 데이터 및 반구조화된 데이터 작업에 적합합니다. 서비스의 엔드포인트는:
```bash
https://<Account-Name>.documents.azure.com:443/
```
@@ -19,7 +21,13 @@ https://<Account-Name>.documents.azure.com:443/
계정 내에서 하나 이상의 데이터베이스를 생성할 수 있으며, 이는 컨테이너의 논리적 그룹으로 작용합니다. 데이터베이스는 리소스 관리 및 사용자 권한의 경계 역할을 합니다. 데이터베이스는 컨테이너 간에 프로비저닝된 처리량을 공유하거나 개별 컨테이너에 전용 처리량을 할당할 수 있습니다.
#### 컨테이너
데이터 저장의 핵심 단위는 컨테이너로, JSON 문서를 보유하며 효율적인 쿼리를 위해 자동으로 인덱싱됩니다. 컨테이너는 탄력적으로 확장 가능하며, 사용자 정의 파티션 키에 의해 결정된 파티션에 분산됩니다. 파티션 키는 최적의 성능과 고른 데이터 분포를 보장하는 데 중요합니다. 예를 들어, 컨테이너는 고객 데이터를 저장할 수 있으며, "customerId" 파티션 키로 사용될 수 있습니다.
데이터 저장의 핵심 단위는 컨테이너로, JSON 문서를 보유하고 있으며 효율적인 쿼리를 위해 자동으로 인덱싱됩니다. 컨테이너는 탄력적으로 확장 가능하며, 사용자 정의 파티션 키에 의해 결정된 파티션에 분산됩니다. 파티션 키는 최적의 성능과 고른 데이터 분포를 보장하는 데 중요합니다. 예를 들어, 컨테이너는 "customerId" 파티션 키로 하여 고객 데이터를 저장할 수 있습니다.
#### 주요 기능
**글로벌 배포**: 지역 간 복제를 위한 Geo-Redundancy를 활성화 또는 비활성화하고, 가용성을 향상시키기 위한 다중 지역 쓰기를 지원합니다.
**네트워킹 및 보안**: 공용(모든/선택 네트워크) 또는 개인 엔드포인트 간의 연결을 제공합니다. TLS 1.2 암호화로 보안 연결을 지원합니다. 리소스에 대한 제어된 접근을 위해 CORS(교차 출처 리소스 공유)를 지원합니다.
**백업 및 복구**: 주기적, 지속적(7일) 또는 지속적(30일) 백업 정책을 통해 구성 가능한 간격과 보존 기간으로 백업합니다.
**데이터 암호화**: 기본 서비스 관리 키 또는 고객 관리 키(CMK)를 통한 암호화(CMK 선택은 되돌릴 수 없습니다).
#### 열거
@@ -42,21 +50,21 @@ az cosmosdb identity show --resource-group <ResourceGroupName> --name <AccountNa
# CosmoDB (NoSQL)
## List the SQL databases under an Azure Cosmos DB account.
## List the NoSQL databases under an Azure Cosmos DB account.
az cosmosdb sql database list --resource-group <ResourceGroupName> --account-name <AccountName>
## List the SQL containers under an Azure Cosmos DB SQL database.
## List the NoSQL containers under an Azure Cosmos DB NoSQL database.
az cosmosdb sql container list --account-name <AccountName> --database-name <DatabaseName> --resource-group <ResourceGroupName>
## List all SQL role assignments under an Azure Cosmos DB
## List all NoSQL role assignments under an Azure Cosmos DB
az cosmosdb sql role assignment list --resource-group <ResourceGroupName> --account-name <AccountName>
## List all SQL role definitions under an Azure Cosmos DB
## List all NoSQL role definitions under an Azure Cosmos DB
az cosmosdb sql role definition list --resource-group <ResourceGroupName> --account-name <AccountName>
## List the SQL stored procedures under an Azure Cosmos DB
## List the NoSQL stored procedures under an Azure Cosmos DB
az cosmosdb sql stored-procedure list --account-name <AccountName> --container-name <ContainerName> --database-name <DatabaseName> --resource-group <ResourceGroupName>
## List the SQL triggers under an Azure Cosmos DB SQL container.
## List the NoSQL triggers under an Azure Cosmos DB NoSQL container.
az cosmosdb sql trigger list --account-name <AccountName> --container-name <ContainerName> --database-name <DatabaseName> --resource-group <ResourceGroupName>
## List the SQL user defined functions under an Azure Cosmos DB SQL container
## List the NoSQL user defined functions under an Azure Cosmos DB NoSQL container
az cosmosdb sql user-defined-function list --account-name <AccountName> --container-name <ContainerName> --database-name <DatabaseName> --resource-group <ResourceGroupName>
```
@@ -175,15 +183,26 @@ container.create_item(item)
print("Document inserted.")
```
### MongoDB
MongoDB NoSQL API는 JSON과 유사한 BSON(이진 JSON)을 데이터 형식으로 사용하는 문서 기반 API입니다. 이는 집계 기능을 갖춘 쿼리 언어를 제공하여 구조화된, 반구조화된 및 비구조화된 데이터 작업에 적합합니다. 서비스의 엔드포인트는 일반적으로 다음 형식을 따릅니다:
MongoDB NoSQL API는 JSON과 유사한 BSON(이진 JSON)을 데이터 형식으로 사용하는 문서 기반 API입니다. 이 API는 집계 기능을 갖춘 쿼리 언어를 제공하여 구조화된, 반구조화된 및 비구조화된 데이터 작업에 적합합니다. 서비스의 엔드포인트는 일반적으로 다음 형식을 따릅니다:
```bash
mongodb://<hostname>:<port>/<database>
```
#### 데이터베이스
MongoDB에서는 인스턴스 내에 하나 이상의 데이터베이스를 생성할 수 있습니다. 각 데이터베이스는 컬렉션의 논리적 그룹으로 작용하며, 리소스 조직 및 관리를 위한 경계를 제공합니다. 데이터베이스는 서로 다른 애플리케이션이나 프로젝트를 위해 데이터를 논리적으로 분리하고 관리하는 데 도움을 줍니다.
MongoDB에서는 인스턴스 내에 하나 이상의 데이터베이스를 생성할 수 있습니다. 각 데이터베이스는 컬렉션의 논리적 그룹으로 작용하며 리소스 조직 및 관리를 위한 경계를 제공합니다. 데이터베이스는 서로 다른 애플리케이션이나 프로젝트를 위해 데이터를 논리적으로 분리하고 관리하는 데 도움을 줍니다.
#### 컬렉션
MongoDB에서 데이터 저장의 핵심 단위는 컬렉션으로, 문서를 보유하 효율적인 쿼리 및 유연한 스키마 설계를 위해 설계되었습니다. 컬렉션은 탄력적으로 확장 가능하며, 분산 설정에서 여러 노드에 걸쳐 높은 처리량 작업을 지원할 수 있습니다.
MongoDB에서 데이터 저장의 핵심 단위는 컬렉션으로, 문서를 보유하 효율적인 쿼리 및 유연한 스키마 설계를 위해 설계되었습니다. 컬렉션은 탄력적으로 확장 가능하며 분산 설정에서 여러 노드에 걸쳐 높은 처리량 작업을 지원할 수 있습니다.
#### 요청 단위(RU) 유형의 주요 기능
**글로벌 분산**: 지역 간 복제를 위한 Geo-Redundancy를 활성화하거나 비활성화하고 가용성을 개선하기 위한 다중 지역 쓰기를 지원합니다.
**네트워킹 및 보안**: 공용(모든/선택 네트워크) 또는 개인 엔드포인트 간의 연결을 제공합니다. TLS 1.2 암호화를 통한 안전한 연결을 지원합니다. 리소스에 대한 제어된 접근을 위해 CORS(교차 출처 리소스 공유)를 지원합니다.
**백업 및 복구**: 주기적, 지속적(7일, 무료) 또는 지속적(30일, 유료) 백업 정책을 통해 구성 가능한 간격과 보존 기간으로 백업합니다.
**데이터 암호화**: 기본 서비스 관리 키 또는 고객 관리 키(CMK)를 통한 암호화(CMK 선택은 되돌릴 수 없습니다).
#### vCore 클러스터 유형의 주요 기능
**글로벌 분산**: 고가용성과 장애 조치를 지원하기 위해 다른 Azure 지역에 읽기 복제본을 활성화합니다. 복제본 이름, 지역 및 샤드당 저장소를 구성합니다.
**네트워킹 및 보안**: 할당된 공용 IP와 개인 접근을 통해 공용 접근을 지원합니다. 기본적으로 공용 IP는 허용되지 않도록 방화벽 규칙을 사용하여 연결을 제한합니다.
**암호화된 연결**: 안전한 데이터 전송을 위해 TLS 암호화를 시행합니다.
#### 열거
@@ -310,7 +329,7 @@ print(f"Inserted document with ID: {result.inserted_id}")
* 여기 DB의 나머지 부분, 테이블, 카산드라, 그렘린...
* 포스트 익스플로잇 "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read" 및 역할 정의를 살펴보세요. 여기서 권한 상승이 있을 수 있습니다.
* 복원 작업을 살펴보세요.
* 복원 살펴보기
@@ -4,14 +4,19 @@
## 기본 정보
Azure Logic Apps는 Microsoft Azure에서 제공하는 클라우드 기반 서비스로, 개발자가 **다양한 서비스**, 데이터 소스 및 애플리케이션을 통합하는 워크플로를 **생성하고 실행**할 수 있게 해줍니다. 이러한 워크플로는 **비즈니스 프로세스를 자동화**하고, 작업을 조정하며, 다양한 플랫폼 간 데이터 통합을 수행하도록 설계되었습니다.
Azure Logic Apps는 Microsoft Azure에서 제공하는 클라우드 기반 서비스로, 개발자가 **다양한 서비스**, 데이터 소스 및 애플리케이션을 통합하는 워크플로를 **생성하고 실행**할 수 있게 해줍니다. 이러한 워크플로는 **비즈니스 프로세스를 자동화**하고, 작업을 조정하며, 다양한 플랫폼 간 데이터 통합을 수행하도록 설계되었습니다.
Logic Apps는 **광범위한 사전 구축된 커넥터**를 사용하여 워크플로를 생성할 수 있는 시각적 디자이너를 제공하므로, Office 365, Dynamics CRM, Salesforce 등 다양한 서비스에 쉽게 연결하고 상호작용할 수 있습니다. 또한 특정 요구에 맞는 사용자 정의 커넥터를 생성할 수도 있습니다.
Logic Apps는 **광범위한 사전 구축된 커넥터**를 사용하여 워크플로를 생성할 수 있는 시각적 디자이너를 제공합니다. 이를 통해 Office 365, Dynamics CRM, Salesforce 등 다양한 서비스에 쉽게 연결하고 상호작용할 수 있습니다. 또한 특정 요구에 맞는 사용자 정의 커넥터를 생성할 수도 있습니다.
Logic App을 생성할 때는 워크플로 상태, 실행 기록 및 아티팩트를 저장하는 외부 스토리지 계정을 생성하거나 연결해야 합니다. 이 스토리는 모니터링을 위한 진단 설정으로 구성할 수 있으며, 네트워크 접근 제한으로 보안을 강화하거나 가상 네트워크에 통합하여 인바운드 및 아웃바운드 트래픽을 제어할 수 있습니다.
### 관리형 ID
Logic Apps는 **시스템 할당 관리형 ID**가 생명 주기에 연결되어 있습니다. 활성화되면 Azure RBAC와 함께 사용할 수 있는 고유한 객체(주체) ID를 받게 되어 다른 Azure 서비스에 안전하게 접근할 수 있는 필요한 권한을 부여합니다. 이는 ID가 Microsoft Entra ID를 통해 인증되기 때문에 코드에 자격 증명을 저장할 필요가 없음을 의미합니다. 또한, 여러 리소스 간에 공유할 수 있는 **사용자 할당 관리형 ID**도 사용할 수 있습니다. 이러한 ID는 워크플로와 Logic Apps가 외부 시스템과 안전하게 상호작용할 수 있도록 하여, 필요한 접근 제어 및 권한이 Azure의 보안 프레임워크를 통해 중앙에서 관리되도록 합니다.
### 예시
- **데이터 파이프라인 자동화**: Logic Apps는 Azure Data Factory와 결합하여 **데이터 전송 및 변환 프로세스**를 자동화할 수 있습니다. 이는 Azure SQL Database와 Azure Blob Storage와 같은 다양한 데이터 저장소 간에 데이터를 이동하고 변환하는 확장 가능하고 신뢰할 수 있는 데이터 파이프라인을 생성하는 데 유용하며, 분석 및 비즈니스 인텔리전스 작업에 도움을 줍니다.
- **Azure Functions와 통합**: Logic Apps는 Azure Functions와 함께 작동하여 **필요에 따라 확장되는 정교한 이벤트 기반 애플리케이션을 개발**하고 다른 Azure 서비스와 원활하게 통합할 수 있습니다. 사용 사례의 예로는 Logic App을 사용하여 Azure Storage 계정의 변경과 같은 특정 이벤트에 응답하여 Azure Function을 트리거하는 것이 있으며, 이를 통해 동적 데이터 처리가 가능합니다.
- **데이터 파이프라인 자동화**: Logic Apps는 Azure Data Factory와 결합하여 **데이터 전송 및 변환 프로세스**를 자동화할 수 있습니다. 이는 Azure SQL Database와 Azure Blob Storage와 같은 다양한 데이터 저장소 간에 데이터를 이동하고 변환하는 확장 가능하고 신뢰할 수 있는 데이터 파이프라인을 생성하는 데 유용하며, 분석 및 비즈니스 인텔리전스 작업을 지원합니다.
- **Azure Functions와 통합**: Logic Apps는 Azure Functions와 함께 작동하여 **필요에 따라 확장되는 정교한 이벤트 기반 애플리케이션을 개발**하고 다른 Azure 서비스와 원활하게 통합할 수 있습니다. 예를 들어, Logic App을 사용하여 Azure Storage 계정의 변경과 같은 특정 이벤트에 응답하여 Azure Function을 트리거하는 사용 사례가 있습니다. 이를 통해 동적 데이터 처리가 가능합니다.
### LogicAPP 시각화
@@ -23,7 +28,7 @@ Logic Apps는 **광범위한 사전 구축된 커넥터**를 사용하여 워크
### SSRF 보호
**Logic App이 SSRF에 취약하더라도**, Logic Apps는 메타데이터에서 자격 증명에 접근할 수 없으므로 자격 증명에 접근할 수 없습니다.
**Logic App이 SSRF에 취약하더라도**, Logic Apps가 이를 허용하지 않기 때문에 메타데이터에서 자격 증명에 접근할 수 없습니다.
예를 들어, 다음과 같은 것은 토큰을 반환하지 않습니다:
```bash
@@ -35,12 +40,16 @@ curl -XPOST 'https://prod-44.westus.logic.azure.com:443/workflows/2d8de4be6e9741
여러 호스팅 옵션이 있습니다:
* **소비형**
- **다중 테넌트**: 공유 컴퓨팅 리소스를 제공하며, 퍼블릭 클라우드에서 운영되고, 작업당 요금 모델을 따릅니다. 이는 경량 및 비용 효율적인 작업에 이상적입니다.
- **다중 테넌트**: 공유 컴퓨팅 리소스를 제공하며, 퍼블릭 클라우드에서 운영되고, 작업당 요금 모델을 따릅니다. 이는 경량 및 비용 효율적인 작업에 적합합니다.
* **표준**
- **워크플로우 서비스 계획**: 네트워킹을 위한 VNET 통합이 있는 전용 컴퓨팅 리소스와 워크플로우 서비스 계획 인스턴스당 요금을 부과합니다. 이는 더 많은 제어가 필요한 요구가 은 작업에 적합합니다.
- **앱 서비스 환경 V3**: 완전한 격리 및 확장성을 갖춘 전용 컴퓨팅 리소스입니다. 또한 네트워킹을 위해 VNET과 통합되며, 환경 내의 앱 서비스 인스턴스를 기반으로 한 요금 모델을 사용합니다. 이는 높은 격리가 필요한 기업 규모의 애플리케이션에 이상적입니다.
- **워크플로우 서비스 계획**: 네트워킹을 위한 VNET 통합이 있는 전용 컴퓨팅 리소스와 워크플로우 서비스 계획 인스턴스당 요금을 부과합니다. 이는 더 많은 제어가 필요한 요구가 은 작업에 적합합니다.
- **앱 서비스 환경 V3**: 완전한 격리 및 확장성을 갖춘 전용 컴퓨팅 리소스입니다. 또한 네트워킹을 위해 VNET과 통합되며, 환경 내의 앱 서비스 인스턴스를 기반으로 한 요금 모델을 사용합니다. 이는 높은 격리가 필요한 기업 규모의 애플리케이션에 적합합니다.
- **하이브리드**: 로컬 처리 및 다중 클라우드 지원을 위해 설계되었습니다. 고객 관리형 컴퓨팅 리소스를 로컬 네트워크 접근과 함께 허용하며, Kubernetes 이벤트 기반 자동 확장(KEDA)을 활용합니다.
### 워크플로우
Azure Logic Apps의 워크플로우는 다양한 서비스 간의 작업을 조정하는 핵심 자동화 프로세스입니다. 워크플로우는 트리거(이벤트 또는 일정)로 시작되며, 이후 API 호출, 데이터 처리 또는 다른 Azure 서비스와의 상호작용과 같은 일련의 작업을 실행합니다. 워크플로우는 디자이너를 사용하여 시각적으로 정의하거나 코드(JSON 정의)를 통해 정의할 수 있으며, az logic workflow create, az logic workflow show 및 az logic workflow update와 같은 명령을 통해 관리됩니다. 또한 외부 리소스와의 권한 및 통합을 안전하게 관리하기 위해 신원 관리(신원 하위 그룹을 통해)를 지원합니다.
### 열거
{{#tabs }}
@@ -137,6 +146,8 @@ Get-AzLogicAppTriggerHistory -ResourceGroupName "<ResourceGroupName>" -Name "<Lo
{{#endtab }}
{{#endtabs }}
### 통합 계정
**통합 계정**은 Azure Logic Apps의 기능입니다. 통합 계정은 EDI, AS2 및 XML 스키마 관리를 포함한 고급 B2B 기능을 활성화하여 기업 수준의 통합을 용이하게 합니다. 통합 계정은 Logic Apps에 사용되는 다음 아티팩트를 저장하는 Azure의 컨테이너입니다:
@@ -251,7 +262,7 @@ Get-AzIntegrationAccountSchema -ResourceGroupName <resource-group-name> -Integra
## 권한 상승
로직 앱 권한 상승과 동일합니다:
로직 앱 권한 상승과 동일:
{{#ref}}
../az-privilege-escalation/az-logic-apps-privesc.md
@@ -3,22 +3,22 @@
{{#include ../../../banners/hacktricks-training.md}}
## Azure MySQL
Azure Database for MySQL는 MySQL Community Edition을 기반으로 완전 관리형 관계형 데이터베이스 서비스로, 다양한 애플리케이션 요구에 대한 확장성, 보안 및 유연성을 제공하도록 설계되었습니다. 두 가지 배포 모델이 있습니다:
Azure Database for MySQL는 MySQL Community Edition을 기반으로 하는 완전 관리형 관계형 데이터베이스 서비스로, 다양한 애플리케이션 요구에 대한 확장성, 보안 및 유연성을 제공니다. 두 가지 배포 모델이 있습니다:
* **Single Server** (은 퇴역 경로에 있음):
- 비용 효율적이고 관리하기 쉬운 MySQL 배포를 위해 최적화됨.
- 자동 백업, 고가용성 및 기본 모니터링 기능 포함.
- 예측 가능한 작업 부하를 가진 애플리케이션에 적합.
* **Flexible Server**:
- 데이터베이스 관리 및 구성에 대한 더 많은 제어 제공.
- 데이터베이스 관리 및 구성에 대한 더 많은 제어 제공합니다.
- 고가용성 지원(동일 영역 및 영역 중복).
- 탄력적 확장, 패치 관리 및 작업 부하 최적화 기능 포함.
- 비용 절감을 위한 지/시작 기능 제공.
- 비용 절감을 위한 지/시작 기능 제공.
### 주요 기능
* **서버 관리**: **ad-admin** 기능은 MySQL 서버에 대한 Azure Active Directory (AAD) 관리자를 관리할 수 있게 하여 AAD 자격 증명을 통 관리 액세스를 제어하며, **identity** 기능은 Azure Managed Identities의 할당 및 관리를 가능하게 하여 Azure 리소스에 대한 안전한 자격 증명 없는 인증을 제공합니다.
* **수명 주기 관리**: 서버 시작 또는 중지, 유연한 서버 인스턴스 삭제, 구성 변경을 신속하게 적용하기 위 서버 재시작, 자동화 스크립트를 진행하기 전에 서버가 특정 조건을 충족하는지 확인하는 옵션 포함.
* **보안 및 네트워킹**: 안전한 데이터베이스 액세스를 위한 서버 방화벽 규칙 관리 및 필요에 따라 가상 네트워크 구성을 분리할 수 있음.
* **서버 관리**: **ad-admin** 기능은 MySQL 서버에 대한 Azure Entra ID 관리자를 관리할 수 있게 하여 Entra ID 자격 증명을 통 관리 액세스를 제어합니다. Mysql은 자격 증명 없이 인증하는 데 사용되는 사용자 관리 ID를 지원하며, 다른 서비스에서 사용할 수 있습니다.
* **수명 주기 관리**: 서버 시작하거나 중지하고, 유연한 서버 인스턴스 삭제하고, 구성 변경을 신속하게 적용하기 위 서버 재시작하며, 자동화 스크립트를 진행하기 전에 서버가 특정 조건을 충족하는지 확인하는 옵션 포함합니다.
* **보안 및 네트워킹**: 특정 공용 IP 주소만 허용하는 방화벽 규칙을 통해 연결을 제한하거나, 서버를 가상 네트워크에 통합하는 개인 엔드포인트를 사용하여 서버를 보호합니다. 모든 연결은 TLS 1.2 암호화로 보호됩니다. 데이터베이스, 백업 및 로그는 기본적으로 서비스 관리 키 또는 사용자 지정 키를 사용하여 암호화됩니다.
* **데이터 보호 및 백업**: 데이터 복구를 위한 유연한 서버 백업 관리 옵션, 다른 지역에서 서버를 복구하기 위한 지리적 복원 수행, 외부 사용을 위한 서버 백업 내보내기(미리 보기), 특정 시점으로 백업에서 서버 복원 기능 포함.
### 열거
@@ -97,7 +97,7 @@ Get-AzMySqlFlexibleServerLog -ResourceGroupName <resource-group-name> -ServerNam
### 연결
rdbms-connect 확장을 사용하여 데이터베이스에 접근할 수 있습니다:
rdbms-connect 확장을 사용하여 데이터베이스에 액세스할 수 있습니다:
```bash
az mysql flexible-server connect -n <server-name> -u <username> -p <password> --interactive
@@ -147,7 +147,7 @@ az mysql flexible-server deploy run \
## 할 일
* mysql flexible-server ad-admin 접근할 방법을 찾아서 이것이 권한 상승 방법인지 확인하십시오.
* mysql flexible-server ad-admin으로 접근할 방법을 찾아서 이것이 권한 상승 방법인지 확인하십시오.
@@ -6,14 +6,14 @@
**Azure Database for PostgreSQL**는 **PostgreSQL** 커뮤니티 에디션을 기반으로 하는 완전 관리형 **관계형 데이터베이스 서비스**입니다. 다양한 애플리케이션 요구에 대한 확장성, 보안 및 유연성을 제공하도록 설계되었습니다. Azure MySQL과 유사하게 PostgreSQL은 두 가지 배포 모델을 제공합니다:
* **Single Server** (퇴역 경로에 있음):
- 간단하고 비용 효율적인 PostgreSQL 배포를 위해 최적화되었습니다.
- 자동 백업, 기본 모니터링 및 고가용성을 제공합니다.
- 예측 가능한 작업 부하를 가진 애플리케이션에 적합합니다.
- 간단하고 비용 효율적인 PostgreSQL 배포를 위해 최적화.
- 자동 백업, 기본 모니터링 및 고가용성 기능을 갖춤.
- 예측 가능한 작업 부하를 가진 애플리케이션에 적합.
* **Flexible Server**:
- 데이터베이스 관리 및 구성에 대한 더 큰 제어를 제공합니다.
- 동일한 영역 및 영역 간의 고가용성을 지원합니다.
- 탄력적 확장, 자동 유지 관리 및 비용 절감 기능을 제공합니다.
- 비용 최적화를 위해 서버를 시작하고 중지할 수 있습니다.
- 데이터베이스 관리 및 구성에 대한 더 큰 제어를 제공.
- 동일한 영역 및 영역 간의 고가용성을 지원.
- 탄력적 확장, 자동 유지 관리 및 비용 절감 기능을 갖춤.
- 비용 최적화를 위해 서버를 시작하고 중지할 수 있.
### 주요 기능
@@ -21,8 +21,9 @@
* **활성 모니터링**: 데이터베이스 성능을 추적하고 개선하기 위한 상세한 메트릭 및 로그에 접근합니다.
* **서버 중지/시작**: 사용자가 서버를 중지하고 시작할 수 있습니다.
* **자동 백업**: 최대 35일 동안 구성 가능한 보존 기간을 가진 내장된 일일 백업.
* **역할 기반 접근**: Azure Active Directory를 통해 사용자 권한 및 관리 접근을 제어합니다.
* **보안 및 네트워킹**: 안전한 데이터베이스 접근을 위한 서버 방화벽 규칙을 관리하고 필요에 따라 가상 네트워크 구성을 분리할 수 있습니다.
* **역할 기반 액세스**: Azure Active Directory를 통해 사용자 권한 및 관리 액세스를 제어합니다.
* **보안 및 네트워킹**: 안전한 데이터베이스 액세스를 위한 서버 방화벽 규칙을 관리하고 필요에 따라 가상 네트워크 구성을 분리할 수 있습니다.
* **관리형 ID**: 서버가 자격 증명을 저장하지 않고 다른 Azure 서비스와 안전하게 인증할 수 있도록 합니다. 시스템 할당 관리형 ID를 통해 다른 서비스에 접근할 수 있으며, 사용자 할당 관리형 ID로 다른 서비스에 의해 접근될 수 있습니다.
### 열거
@@ -93,7 +94,7 @@ Get-AzPostgreSqlServer -ResourceGroupName <resource-group-name>
### 연결
rdbms-connect 확장을 사용하여 데이터베이스에 접근할 수 있습니다:
rdbms-connect 확장을 사용하여 데이터베이스에 액세스할 수 있습니다:
```bash
az postgres flexible-server connect -n <server-name> -u <username> -p <password> --interactive
@@ -8,146 +8,94 @@ Azure SQL은 **Azure 클라우드의 SQL Server 데이터베이스 엔진**을
Azure SQL은 네 가지 주요 제공 사항으로 구성됩니다:
1. **Azure SQL Server**: Azure SQL Server는 SQL Server 데이터베이스의 배포 및 관리를 단순화하는 관리형 관계형 데이터베이스 서비스로, 내장된 보안 및 성능 기능을 제공합니다.
2. **Azure SQL Database**: 이는 **완전 관리형 데이터베이스 서비스**로, Azure 클라우드에서 개별 데이터베이스를 호스팅할 수 있습니다. 고유한 데이터베이스 패턴을 학습하고 맞춤형 추천 및 자동 조정을 제공하는 내장된 지능을 제공합니다.
3. **Azure SQL Managed Instance**: 이는 대규모 전체 SQL Server 인스턴스 범위 배포를 위한 것입니다. 최신 SQL Server 온프레미스(Enterprise Edition) 데이터베이스 엔진과 거의 100% 호환성을 제공하며, 일반적인 보안 문제를 해결하는 네이티브 가상 네트워크(VNet) 구현과 온프레미스 SQL Server 고객에게 유리한 비즈니스 모델을 제공합니다.
4. **Azure SQL Server on Azure VMs**: 이는 서비스로서의 인프라(IaaS)이며, 온프레미스에서 실행되는 서버처럼 **운영 체제 SQL Server 인스턴스에 대한 제어**를 원하는 마이그레이션에 가장 적합합니다.
1. **Azure SQL Server**: SQL Server 데이터베이스의 **배포 및 관리**를 위해 필요한 서버입니다.
2. **Azure SQL Database**: Azure 클라우드에서 개별 데이터베이스를 호스팅할 수 있는 **완전 관리형 데이터베이스 서비스**입니다.
3. **Azure SQL Managed Instance**: 더 큰 규모 전체 SQL Server 인스턴스 범위 배포를 위한 것입니다.
4. **Azure SQL Server on Azure VMs**: 운영 체제 SQL Server 인스턴스에 대한 **제어**를 원하는 아키텍처에 가장 적합합니다.
### Azure SQL Server
### SQL Server 보안 기능
Azure SQL Server는 데이터 작업을 위해 Transact-SQL을 사용하는 관계형 데이터베이스 관리 시스템(RDBMS)으로, 기업 수준의 시스템을 처리하도록 설계되었습니다. 성능, 보안, 확장성 및 다양한 Microsoft 애플리케이션과의 통합을 위한 강력한 기능을 제공합니다. Azure SQL 데이터베이스는 이 서버에 의존하며, 이는 데이터베이스에 접근하기 위한 진입점입니다.
**네트워크 접근:**
#### Network
- 공용 엔드포인트(특정 네트워크에 대한 접근 제한 가능).
- 개인 엔드포인트.
- 도메인 이름에 따라 연결을 제한할 수도 있습니다.
- Azure 서비스가 접근할 수 있도록 허용할 수도 있습니다(예: 포털에서 쿼리 편집기를 사용하거나 Azure VM이 연결하도록 허용).
**Network Connectivity**: 공용 엔드포인트 또는 개인 엔드포인트를 통해 액세스를 활성화할지 선택합니다. No access를 선택하면 수동으로 구성될 때까지 엔드포인트가 생성되지 않습니다:
- No access: 엔드포인트가 구성되지 않아 수동으로 설정될 때까지 수신 연결이 차단됩니다.
- Public endpoint: 방화벽 규칙 및 기타 보안 구성에 따라 공용 인터넷을 통한 직접 연결을 허용합니다.
- Private endpoint: 개인 네트워크에 대한 연결을 제한합니다.
**인증 방법:**
**Connection Policy**: 클라이언트가 SQL 데이터베이스 서버와 통신하는 방법을 정의합니다:
- Default: Azure 내부의 모든 클라이언트 연결(Private Endpoints를 사용하는 경우 제외)에 대해 Redirect 정책을 사용하고, Azure 외부의 연결에 대해 Proxy 정책을 사용니다.
- Proxy: 모든 클라이언트 연결을 Azure SQL Database 게이트웨이를 통해 라우팅합니다.
- Redirect: 클라이언트가 데이터베이스를 호스팅하는 노드에 직접 연결합니다.
- Microsoft **Entra 전용** 인증: 서비스에 접근할 Entra 주체를 지정해야 합니다.
- **SQL 및 Microsoft Entra** 인증: 사용자 이름과 비밀번호를 사용하는 전통적인 SQL 인증과 Microsoft Entra가 함께 사용니다.
- **SQL 전용** 인증: 데이터베이스 사용자만을 통해 접근을 허용합니다.
#### Authentication Methods
Azure SQL은 데이터베이스 액세스를 보호하기 위해 다양한 인증 방법을 지원합니다:
SQL 인증이 허용되는 경우 관리 사용자(사용자 이름 + 비밀번호)를 지정해야 하며, Entra ID 인증이 선택된 경우 최소한 하나의 관리 접근 권한이 있는 주체를 지정해야 합니다.
- **Microsoft Entra-only authentication**: 중앙 집중식 ID 관리 및 단일 로그인에 대해 Microsoft Entra(구 Azure AD)를 사용합니다.
- **Both SQL and Microsoft Entra authentication**: 전통적인 SQL 인증과 Microsoft Entra를 함께 사용할 수 있습니다.
- **SQL authentication**: SQL Server 사용자 이름과 비밀번호에만 의존합니다.
**암호화:**
#### Security features
- "투명 데이터 암호화"라고 하며, 데이터베이스, 백업 및 로그를 정지 상태에서 암호화합니다.
- 항상 기본적으로 Azure 관리 키가 사용되지만, 고객 관리 암호화 키(CMEK)도 사용할 수 있습니다.
**관리형 ID:**
SQL 서버는 **Managed Identities**를 가지고 있습니다. 관리형 ID는 서버가 자격 증명을 저장하지 않고도 다른 Azure 서비스에 안전하게 인증할 수 있도록 합니다. 이는 시스템 할당 관리형 ID를 통해 다른 서비스에 접근할 수 있으며, 사용자 할당 관리형 ID를 통해 다른 ID로 접근할 수 있습니다. SQL이 접근할 수 있는 서비스에는 Azure Storage Account(V2), Azure Data Lake Storage Gen2, SQL Server, Oracle, Teradata, MongoDB 또는 MongoDB용 Cosmos DB API, Generic ODBC, Bulk Operations 및 S3 호환 객체 저장소가 포함됩니다.
- 시스템 및 사용자 관리 MI를 할당할 수 있습니다.
- 암호화 키에 접근하는 데 사용됩니다(사용되는 경우 CMEK) 및 데이터베이스의 다른 서비스에 접근합니다.
- 여러 UMI가 할당된 경우 사용할 기본 UMI를 지정할 수 있습니다.
- 테넌트 간 접근을 위한 연합 클라이언트 ID를 구성할 수 있습니다.
SQL 서버가 가진 다른 보안 기능은 다음과 같습니다:
**Microsoft Defender:**
- **Firewall Rules**: 방화벽 규칙은 트래픽을 제한하거나 허용하여 서버에 대한 액세스를 제어합니다. 이는 데이터베이스 자체의 기능이기도 합니다.
- **Transparent Data Encryption (TDE)**: TDE는 데이터베이스, 백업 및 로그를 암호화하여 저장 중에도 데이터가 손상되지 않도록 보호합니다. 서비스 관리 키 또는 고객 관리 키로 수행할 수 있습니다.
- **Microsoft Defender for SQL**: Microsoft Defender for SQL을 활성화하여 서버에 대한 취약성 평가 및 고급 위협 보호를 제공합니다.
- "잠재적인 데이터베이스 취약점을 완화하고 비정상적인 활동을 감지하는 데 유용합니다."
- Defender에 대해서는 별도의 수업에서 다룰 것입니다(여러 다른 Azure 서비스에서 활성화할 수 있습니다).
#### Deployment Models
**백업:**
- 백업 빈도는 보존 정책에서 관리됩니다.
Azure SQL Database는 다양한 요구에 맞는 유연한 배포 옵션을 지원합니다:
**삭제된 데이터베이스:**
- 기존 백업에서 삭제된 DB를 복원할 수 있습니다.
- **Single Database**:
- 전용 리소스를 가진 완전히 격리된 데이터베이스입니다.
- 마이크로서비스 또는 단일 데이터 소스가 필요한 애플리케이션에 적합합니다.
- **Elastic Pool**:
- 여러 데이터베이스가 풀 내에서 리소스를 공유할 수 있습니다.
- 여러 데이터베이스에 걸쳐 사용 패턴이 변동하는 애플리케이션에 비용 효율적입니다.
## Azure SQL Database
### Azure SQL Database
**Azure SQL Database**는 **완전 관리형 데이터베이스 플랫폼 서비스(PaaS)**로, 확장 가능하고 안전한 관계형 데이터베이스 솔루션을 제공합니다. 최신 SQL Server 기술을 기반으로 하며, 인프라 관리의 필요성을 없애 클라우드 기반 애플리케이션에 인기 있는 선택입니다.
**Azure SQL Database**는 **완전 관리형 데이터베이스 플랫폼으로서의 서비스(PaaS)**로, 확장 가능하고 안전한 관계형 데이터베이스 솔루션을 제공합니다. 최신 SQL Server 기술을 기반으로 하며, 인프라 관리의 필요성을 없애 클라우드 기반 애플리케이션에 인기 있는 선택입니다.
SQL 데이터베이스를 생성하려면 호스팅될 SQL 서버를 지정해야 합니다.
#### Key Features
### SQL 데이터베이스 보안 기능
- **Always Up-to-Date**: 최신 안정 버전의 SQL Server에서 실행되며, 새로운 기능과 패치를 자동으로 받습니다.
- **PaaS Capabilities**: 내장된 고가용성, 백업 및 업데이트.
- **Data Flexibility**: 관계형 및 비관계형 데이터(예: 그래프, JSON, 공간 및 XML)를 지원합니다.
- **항상 최신 상태**: 최신 안정 버전의 SQL Server에서 실행되며 새로운 기능과 패치를 자동으로 받습니다.
- **상속된 SQL Server 보안 기능:**
- 인증(SQL 및/또는 Entra ID)
- 할당된 관리형 ID
- 네트워크 제한
- 암호화
- 백업
-
- **데이터 중복성:** 옵션은 로컬, 존, 지리적 또는 지리적-존 중복입니다.
- **원장:** 데이터의 무결성을 암호학적으로 검증하여 변조가 감지되도록 합니다. 재무, 의료 및 민감한 데이터를 관리하는 모든 조직에 유용합니다.
#### Network
SQL 데이터베이스는 **탄력적 풀**의 일부가 될 수 있습니다. 탄력적 풀은 여러 데이터베이스를 관리하기 위한 비용 효율적인 솔루션으로, 구성 가능한 컴퓨팅(eDTUs) 및 저장소 리소스를 공유하며, 가격은 데이터베이스 수가 아닌 할당된 리소스에만 기반합니다.
**Network Connectivity**: 공용 엔드포인트 또는 개인 엔드포인트를 통해 액세스를 활성화할지 선택합니다. No access를 선택하면 수동으로 구성될 때까지 엔드포인트가 생성되지 않습니다:
- No access: 엔드포인트가 구성되지 않아 수동으로 설정될 때까지 수신 연결이 차단됩니다.
- Public endpoint: 방화벽 규칙 및 기타 보안 구성에 따라 공용 인터넷을 통한 직접 연결을 허용합니다.
- Private endpoint: 개인 네트워크에 대한 연결을 제한합니다.
#### Azure SQL 열 수준 보안(마스킹) 및 행 수준 보안
**Connection Policy**: 클라이언트가 SQL 데이터베이스 서버와 통신하는 방법을 정의합니다:
- Default: Azure 내부의 모든 클라이언트 연결(Private Endpoints를 사용하는 경우 제외)에 대해 Redirect 정책을 사용하고, Azure 외부의 연결에 대해 Proxy 정책을 사용합니다.
- Proxy: 모든 클라이언트 연결을 Azure SQL Database 게이트웨이를 통해 라우팅합니다.
- Redirect: 클라이언트가 데이터베이스를 호스팅하는 노드에 직접 연결합니다.
**Azure SQL의 동적** 데이터 마스킹은 **민감한 정보를 보호하기 위해** 무단 사용자로부터 숨기는 기능입니다. 실제 데이터를 변경하는 대신 표시된 데이터를 동적으로 마스킹하여 신용 카드 번호와 같은 민감한 세부 정보가 가려지도록 합니다.
#### Security Features
**동적 데이터 마스킹**은 마스킹되지 않은 사용자(이 사용자들은 지정되어야 함)와 관리자를 제외한 모든 사용자에게 영향을 미칩니다. 동적 데이터 마스킹에서 면제되는 SQL 사용자를 지정하는 구성 옵션이 있으며, **관리자는 항상 제외됩니다**.
- **Microsoft Defender for SQL**: 취약성 평가 및 고급 위협 보호를하는 기능을 활성화할 수 있습니다.
- **Ledger**: 데이터의 무결성을 암호학적으로 검증하여 변조가 감지되도록 합니다.
- **Server Identity**: 중앙 집중식 액세스를 가능하게 하는 시스템 할당 및 사용자 할당 관리형 ID를 사용합니다.
- **Transparent Data Encryption Key Management**: 애플리케이션에 변경 없이 데이터베이스, 백업 및 로그를 저장 중에 암호화합니다. 각 데이터베이스에서 암호화를 활성화할 수 있으며, 데이터베이스 수준에서 구성된 경우 이러한 설정이 서버 수준 구성을 무시합니다.
- **Always Encrypted**: 데이터 소유권과 데이터 관리를 분리하는 고급 데이터 보호 기능 모음입니다. 이를 통해 높은 권한을 가진 관리자나 운영자가 민감한 데이터에 접근할 수 없도록 보장합니다.
#### Purchasing Models / Service Tiers
- **vCore-based**: 컴퓨팅, 메모리 및 저장소를 독립적으로 선택합니다. 일반 목적, 비즈니스 크리티컬(OLTP 앱에 대한 높은 복원력 및 성능) 및 최대 128TB 저장소로 확장됩니다.
- **DTU-based**: 컴퓨팅, 메모리 및 I/O를 고정 계층으로 묶습니다. 일반 작업에 대한 균형 잡힌 리소스입니다.
- Standard: 일반 작업에 대한 균형 잡힌 리소스입니다.
- Premium: 요구가 많은 작업에 대한 높은 성능입니다.
#### Scalable performance and pools
- **Single Databases**: 각 데이터베이스는 격리되어 있으며 전용 컴퓨팅, 메모리 및 저장소 리소스를 가집니다. 리소스는 다운타임 없이 동적으로(상향 또는 하향) 확장할 수 있습니다(1128 vCores, 32GB4TB 저장소, 최대 128TB).
- **Elastic Pools**: 여러 데이터베이스 간에 리소스를 공유하여 효율성을 극대화하고 비용을 절감합니다. 리소스는 전체 풀에 대해 동적으로 확장할 수도 있습니다.
- **Service Tier Flexibility**: 일반 목적 계층에서 단일 데이터베이스로 소규모로 시작합니다. 필요에 따라 비즈니스 크리티컬 또는 하이퍼스케일 계층으로 업그레이드합니다.
- **Scaling Options**: 동적 확장 또는 자동 확장 대안.
#### Built-In Monitoring & Optimization
- **Query Store**: 성능 문제를 추적하고, 주요 리소스 소비자를 식별하며, 실행 가능한 권장 사항을 제공합니다.
- **Automatic Tuning**: 자동 인덱싱 및 쿼리 계획 수정과 같은 기능으로 성능을 사전 최적화합니다.
- **Telemetry Integration**: Azure Monitor, Event Hubs 또는 Azure Storage를 통한 모니터링을 지원하여 맞춤형 통찰력을 제공합니다.
#### Disaster Recovery & Availability
- **Automatic backups**: SQL Database는 데이터베이스의 전체, 차등 및 트랜잭션 로그 백업을 자동으로 수행합니다.
- **Point-in-Time Restore**: 백업 보존 기간 내의 과거 상태로 데이터베이스를 복구합니다.
- **Geo-Redundancy**
- **Failover Groups**: 데이터베이스를 그룹화하여 지역 간 자동 장애 조치를 통해 재해 복구를 간소화합니다.
**Azure SQL 행 수준 보안(RLS)**은 **사용자가 볼 수 있거나 수정할 수 있는 행을하는 기능**으로, 각 사용자가 자신과 관련된 데이터만 볼 수 있도록 보장합니다. 필터 또는 차단 조건으로 보안 정책을 생성함으로써 조직은 데이터베이스 수준에서 세밀한 접근을 시행할 수 있습니다.
### Azure SQL Managed Instance
**Azure SQL Managed Instance**는 SQL Server와 거의 100% 호환성을 제공하는 플랫폼으로서의 서비스(PaaS) 데이터베이스 엔진으로, 대부분의 관리 작업(예: 업그레이드, 패치, 백업, 모니터링)을 자동으로 처리합니다. 최소한의 변경으로 온프레미스 SQL Server 데이터베이스를 마이그레이션하기 위한 클라우드 솔루션을 제공합니다.
**Azure SQL Managed Instances**는 더 큰 규모의 전체 SQL Server 인스턴스 범위 배포를 위한 것입니다. 최신 SQL Server 온프레미스(Enterprise Edition) 데이터베이스 엔진과 거의 100% 호환성을 제공하며, 일반적인 보안 문제를 해결하는 네이티브 가상 네트워크(VNet) 구현과 온프레미스 SQL Server 고객에게 유리한 비즈니스 모델을 제공합니다.
#### Service Tiers
### Azure SQL 가상 머신
- **General Purpose**: 표준 I/O 및 대기 시간 요구 사항이 있는 애플리케이션을 위한 비용 효율적인 옵션입니다.
- **Business Critical**: 중요한 작업을 위한 낮은 I/O 대기 시간을 가진 고성능 옵션입니다.
**Azure SQL Virtual Machines**는 **운영 체제**와 SQL Server 인스턴스를 제어할 수 있게 해주며, SQL 서버를 실행하는 VM 서비스에서 VM이 생성됩니다.
#### Advanced Security Features
SQL 가상 머신이 생성될 때 SQL 서버를 호스팅할 VM의 **모든 설정을 선택할 수 있습니다**(VM 수업에서 보여준 대로).
- 이는 VM이 일부 VNet에 접근하고, **관리형 ID가 연결**될 수 있으며, 파일 공유가 마운트될 수 있음을 의미합니다… SQL에서 VM으로의 **피벗**이 매우 흥미로워집니다.
- 또한, SQL이 특정 키 볼트에 접근할 수 있도록 **앱 ID 및 비밀을 구성**할 수 있으며, 이 키 볼트는 민감한 정보를 포함할 수 있습니다.
* **Threat Protection**: 의심스러운 활동 및 SQL 인젝션 공격에 대한 고급 위협 보호 경고. 준수를 위한 데이터베이스 이벤트 추적 및 로깅을 위한 감사 기능.
* **Access Control**: 중앙 집중식 ID 관리를 위한 Microsoft Entra 인증. 세분화된 액세스 제어를 위한 행 수준 보안 및 동적 데이터 마스킹.
* **Backups**: 시점 복원 기능이 있는 자동 및 수동 백업.
자동 SQL 업데이트, 자동 백업, Entra ID 인증 및 다른 SQL 서비스의 대부분의 기능과 같은 것들을 구성할 수도 있습니다.
### Azure SQL Virtual Machines
**Azure SQL Virtual Machines**는 온프레미스에서 실행되는 서버처럼 **운영 체제 및 SQL Server 인스턴스에 대한 제어**를 원하는 마이그레이션에 가장 적합합니다. 다양한 머신 크기와 SQL Server 버전 및 에디션을 폭넓게 선택할 수 있습니다.
#### Key Features
**Automated Backup**: SQL 데이터베이스에 대한 백업을 예약합니다.
**Automatic Patching**: 유지 관리 창 동안 Windows 및 SQL Server 업데이트 설치를 자동화합니다.
**Azure Key Vault Integration**: SQL Server VM에 대해 Key Vault를 자동으로 구성합니다.
**Defender for Cloud Integration**: 포털에서 Defender for SQL 권장 사항을 확인합니다.
**Version/Edition Flexibility**: VM을 재배포하지 않고도 SQL Server 버전 또는 에디션 메타데이터를 변경할 수 있습니다.
#### Security Features
**Microsoft Defender for SQL**: 보안 통찰력 및 경고.
**Azure Key Vault Integration**: 자격 증명 및 암호화 키의 안전한 저장.
**Microsoft Entra (Azure AD)**: 인증 및 액세스 제어.
## Enumeration
## 열거
{{#tabs}}
{{#tab name="az cli"}}
@@ -216,6 +164,30 @@ az sql midb show --resource-group <res-grp> --name <name>
# Lis all sql VM
az sql vm list
az sql vm show --resource-group <res-grp> --name <name>
# List schema by the database
az rest --method get \
--uri "https://management.azure.com/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Sql/servers/<serverName>/databases/<databaseName>/schemas?api-version=2021-11-01"
# Get tables of a database with the schema
az rest --method get \
--uri "https://management.azure.com/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Sql/servers/<serverName>/databases/<databaseName>/schemas/<schemaName>/tables?api-version=2021-11-01"
# Get columns of a database
az rest --method get \
--uri "https://management.azure.com/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Sql/servers/<serverName>/databases/<databaseName>/columns?api-version=2021-11-01"
# Get columns of a table
az rest --method get \
--uri "https://management.azure.com/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Sql/servers/<serverName>/databases/<databaseName>/schemas/<schemaName>/tables/<tableName>/columns?api-version=2021-11-01"
# Get DataMaskingPolicies of a database
az rest --method get \
--uri "https://management.azure.com/subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.Sql/servers/getstorageserver/databases/masktest/dataMaskingPolicies/Default?api-version=2021-11-01"
az rest --method get \
--uri "https://management.azure.com/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Sql/servers/<serverName>/databases/<databaseName>/dataMaskingPolicies/Default/rules?api-version=2021-11-01"
```
{{#endtab}}
@@ -260,7 +232,32 @@ Get-AzSqlVM
{{#endtab}}
{{#endtabs}}
### SQL 쿼리 연결 및 실행
추가로 데이터베이스 내에서 Dynamic Data Masking 및 Row Level 정책을 열거하려면 다음 쿼리를 사용할 수 있습니다:
```sql
--Enumerates the masked columns
SELECT
OBJECT_NAME(mc.object_id) AS TableName,
c.name AS ColumnName,
mc.masking_function AS MaskingFunction
FROM sys.masked_columns AS mc
JOIN sys.columns AS c
ON mc.object_id = c.object_id
AND mc.column_id = c.column_id
--Enumerates Row level policies
SELECT
sp.name AS PolicyName,
sp.is_enabled,
sp.create_date,
sp.modify_date,
OBJECT_NAME(sp.object_id) AS TableName,
sp2.predicate_definition AS PredicateDefinition
FROM sys.security_policies AS sp
JOIN sys.security_predicates AS sp2
ON sp.object_id = sp2.object_id;
```
### Connect and run SQL queries
예제 [Az WebApp 열거하기](az-app-services.md)에서 연결 문자열(자격 증명 포함)을 찾을 수 있습니다:
```bash
@@ -281,7 +278,7 @@ $Connection.Close()
invoke-sql 'Select Distinct TABLE_NAME From information_schema.TABLES;'
```
데이터베이스에 접근하기 위해 sqlcmd를 사용할 수도 있습니다. 서버가 공용 연결을 허용하는지 아는 것이 중요합니다 `az sql server show --name <server-name> --resource-group <resource-group>` 그리고 방화벽 규칙이 우리의 IP 접근 허용하는지도 확인해야 합니다:
데이터베이스에 접근하기 위해 sqlcmd를 사용할 수도 있습니다. 서버가 공용 연결을 허용하는지 아는 것이 중요합니다 `az sql server show --name <server-name> --resource-group <resource-group>` 그리고 방화벽 규칙이 우리의 IP 접근할 수 있도록 허용하는지도 확인해야 합니다:
```bash
sqlcmd -S <sql-server>.database.windows.net -U <server-user> -P <server-passworkd> -d <database>
```