Azure SQL database Sync 기능

신기하지만, 
한계사항을 충분히 인지하고, 적용할 것!

 

Azure SQL 간에도 되지만, Azure SQL -- IaaS MsSQL도 가능함.

 

 

 

 

동기화 정보를 저장 테이블 생성됨 새 데이터베이스를 선택하면 선택한 서버에 동기화 정보를 저장하는 테이블과 함께 새 데이터베이스가 생성됩니다기존 데이터베이스를 사용하도록 선택하면 서버에서 사용 가능한 모든 데이터베이스가 드롭 다운에 표시되며 하나를 선택해야합니다동기화 정보를 저장하기 위해 선택한 데이터베이스에 테이블이 생성됩니다자동 동기화 켜기 를 설정하고 지정된 간격으로 데이터 변경 사항을 자동으로 동기화하도록 빈도를 설정합니다.
충돌 해결 동일한 동기화주기 내에서 Azure SQL 허브 및 멤버 데이터베이스에서 데이터가 수정되면 충돌이 발생합니다충돌 해결은 어떤 변경이 지속되어야하는지 도움이됩니다
현재 SQL Server 복제와 달리 두 가지 옵션 만 사용할 수 있습니다.


 충돌이 발생했을 때이를 해결할 사용자 정의 충돌 해결 프로그램을 가질 수 없습니다충돌 해결로 허브를 선택하면 허브 데이터베이스의 변경 사항이 유지됩니다충돌 해결로 승리 할 구성원을 선택하면 충돌이 발생할 때 구성원 데이터베이스의 변경 사항이 유지됩니다.
동기화 방향  

 

 

 

테이블추가

 

삽입 용, 삭제 용, 업데이트 용 트리거 3 개가 각 테이블에 생성되어 데이터 변경 사항을 추적하고 데이터 변경 사항과 관련된 정보를 삽입한다.

 

 

스키마 변경 복제는 미지원

, 최초 구성원 테이블만 복제됨.

 

한계
Limitation                            
  • 기본 키가있는 테이블 만 복제 할 수 있습니다.
  • 사용자 정의 데이터 유형은 지원되지 않습니다.
  • 계산 된 열은 지원되지 않습니다.
  • 기본 키가 아닌 ID 열이있는 테이블은 Azure SQL 데이터 동기화에서 지원되지 않습니다.
  • 이름은 같지만 스키마가 다른 테이블은 지원되지 않습니다.
  • ID 열을 수동으로 관리해야합니다. SQL Server 복제와 같은 자동 ID 관리가 없습니다허브와 마스터에 동일한 ID 값을 가진 행을 삽입하면 충돌 해결에 따라 삽입이 손실됩니다.
  • 스키마 변경이 아닌 데이터 동기화 만 지원합니다예를 들어 ID 값이 1 인 멤버 데이터베이스에 행을 삽입하고 허브 데이터베이스에 동일한 ID 값을 가진 삽입이있는 경우 충돌 해결이 member win으로 설정되면 Azure SQL 허브 데이터베이스에 삽입 된 행이 삭제되고 구성원에 삽입 된 행은 구성원 및 허브 데이터베이스 모두에서 유지됩니다.
  • 초기 동기화는 트리거, 외래 키 등과 같이 테이블 위에 생성 된 다른 개체가 아닌 멤버 데이터베이스에만 테이블을 생성합니다.
  • 연속 동기화는 지원되지 않습니다최소 동기화 빈도 간격은 5 입니다

 

한계사항을 충분히 인지하고, 적용할 !




Azure Private Endpoint를 사용하여 웹앱에 연결

 

출처: <https://docs.microsoft.com/ko-kr/azure/private-link/tutorial-private-endpoint-webapp-portal>

 

 

 

Azure WEbApp 대해서 외부 인터넷에서의 접속은 막고

Azure VM 에서만 접속 가능하도록 하고 싶다.

내부시스템처럼 사용하고 싶은 경우,

사내 VPN 연결 사내에서만 사용 가능

아래 예시에서, 사내와 연결된 Vnet myVNet과만 통신이 되도록 구성 가능

 

프라이빗 엔드포인트 만들기

      1. 왼쪽 메뉴에서 모든 리소스 > mywebapp 을 차례로 선택하거나 만드는 중에 선택한 이름을 선택합니다.
      2. 웹앱 개요에서 설정 > 네트워킹 을 차례로 선택합니다.
      3. 네트워킹 에서 프라이빗 엔드포인트 연결 구성 을 선택합니다.
      4. 프라이빗 엔드포인트 연결 화면에서 + 추가 를 선택합니다.
      5. 프라이빗 엔드포인트 추가 화면에서 다음 정보를 입력하거나 선택합니다.

설정

Name

mywebappendpoint 를 입력합니다.

Subscription

구독을 선택합니다.

가상 네트워크

myVNet 을 선택합니다.

서브넷

mySubnet 을 선택합니다.

프라이빗 DNS 영역과 통합

 를 선택합니다.

테이블 8

      1. 확인 을 선택합니다.

 

출처: <https://docs.microsoft.com/ko-kr/azure/private-link/tutorial-private-endpoint-webapp-portal>

 

      1. NSLOOKUP 내부아이피 반환 확인

Server:  UnKnown

Address:  168.63.129.16

 

Non-authoritative answer:

Name:    mywebapp8675.privatelink.azurewebsites.net

Address:  10.1.0.5

Aliases:  mywebapp8675.azurewebsites.net

 

      1. 웹앱의 URL(https://<webapp-name>.azurewebsites.net)을 입력합니다.
      2. 기본 웹앱 페이지가 표시되는지 확인합니다.

 

출처: <https://docs.microsoft.com/ko-kr/azure/private-link/tutorial-private-endpoint-webapp-portal>

 

주의사항.

물론 Production 환경에서는 낮은 SKU의 웹앱을 사용하지 않겠지만,

위와 같은 구성을 위해서는 최소 Standard WebApp (앱서비스플랜)이 필요함 




 

Database

지원되는 버전

MariaDB

10.2-10.3

MySQL

5.6-8.0

Postgres

9.5-11

기본 계층

최소한의 컴퓨팅 및 I/O 성능이 필요한 가벼운 워크로드에 가장 적합합니다.

Pgsql 경우 2 코어까지
스토리지는
조금 크게 가능함(별도 과금임)

범용 계층

컴퓨팅과 메모리가 적절하게 균형이 맞춰져 있으며 스케일링 가능한 I/O 처리량이 필요한 대부분의 워크로드에 적합합니다.

메모리 최적화 계층

고성능이 필요하고 높은 동시성과 함께 빠른 트랜잭션 처리

메모리 내 속도가 필요한 워크로드에 적합합니다.

 

 

먼저

Azure Database for PostgreSQL

 

싱글        

단일 데이터베이스

하이퍼스케일

울트라 하이 퍼포먼스가 필요할
서버그룹
= 코디네이터 노드 +다수 작업자 노드(최대 20)

 

az postgres server create --resource-group myresourcegroup --name mydemoserver `

 

--location westus --admin-user myadmin --admin-password <server_admin_password> `

 

--sku-name GP_Gen4_2 --version 9.6

 

Azure Database for MySQL 및 Azure Database for MariaDB

고가용성이 서비스와 함께 제공 SLA 99.99%( 43 11)

 

읽기 복제본을 사용하여 읽기 워크로드를 쉽게 스케일 아웃 가능

 

복제본의 과금도 발생하는 것임., 주의




PaaS 웹앱 개발 시 고려해야되는 항목 중 하나

스케일 아웃과 밀접한 관계가 있는 사용자 세션관리 부분

 

크게 아래와 같이 두가지로 나눠지며

결국 규모가 커짐에 따라 서버 기반의 인증 방식은 한계가 예상되어 왔음

서버인증

전통적인 방식
서버 측에서 사용자들의 정보를 기억
하고 있어야 한다. -> 세션을 저장 유지

메모리나 디스크 또는 데이터베이스 세션저장소에 세션정보 저장
->
메모리의 한계, 데이터베이스 부하?
서버 spec up 혹은 서버 수량 up 필요

세션분산 설계가 필요(복잡)
Sateful 

세션관리에 사용하는 쿠키가 단일/서브 도메인에서만 작동함(CORS)

, 도메인이 여러 개라면 쿠키도 여러 관리 필요

쿠키 자체의 보안 취약점

CORS(Cross Origin Resource Sharing)란 브라우저의 현재 웹 페이지에서 다른 페이지에 있는 자원(Resource)을 뜻한다.

CORS 방식의 기술은 보안에 취약

토큰기반 인증

인증된 사용자에게 토큰을 발급하고, 다음 요청부터는 헤더에 토큰을 같이 요청하도록함
상태유지
안함 Stateless
-> Scale out
용이함
토큰은
클라이언트에 저장됨
토큰환경
취약점 대비 필요(ex. 토큰에 선택적인 권한만 부여하여 저장)
CORS
문제(여러 도메인), 어떤 디바이스건 문제 없음
최근에는
Json 포맷인 JWT 주로 사용 (Json Web Token)
OAuth의 경우 Facebook, Google  이용 로그인도 가능

 

JWT를 static 변수(매번 불러오지 않도록)와 로컬 스토리지에 저장

로그아웃을 할 경우 로컬 스토리지에 저장된 JWT 데이터를 제거

Header, Payload, Signature의 3 부분으로 구성




 

 

요건 : 하나의 앱서비스플랜, 웹앱 3 

       웹앱 간에 통신을 아래와 같이 구성하고 싶음 

 

 

해결책 

 

 

 

  1. 가상네트워크, 서브넷 생성 

  2. Vnet - 서비스엔드포인트-Microsoft.Web으로 추가 

  3. 웹앱(App X)-Networking - Vnet Integration 클릭 

  4. 1번에서 만든 Vnet 선택 

  5. 웹앱(App X)-Networking-액세스제한 설정 

규칙 : 0.0.0.0/0 거부 

규칙 : Vnet 허용 




데이터베이스를 복구해보자 

 

1. 실수로 Azure SQL database를 삭제했을 때 

분명히 삭제실수는 일어난다.

'데이터베이스 서버' 개요 블레이드에 보면 삭제된 데이터베이스 메뉴

 백업을 선택하고 이름을 다시 정해준  복원하면 된다. 

단, 데이터베이스 서버를 삭제하면  방법을   없다. =>최대한 빨리 Azure 기술지원 티켓

 

 

 

2. 데이터가 깨지거나, 일부 데이터를 날렸을 때, 이전 백업으로 돌아가야 할 때 

어떤 이유에 의해서 또는 실수로 데이터 자체에 문제가 생길  있다.

특정 기간 데이터를 지우거나, 테이블을 날려버린 상황

 데이터베이스를 선택하고 '개요' 블레이드에서 복원 버튼 클릭

원하는 복원 지점 , 날짜와 시각 지정 후  다음 데이터베이스 이름을 지정한  확인

"새로운 데이터베이스가 생성되면서 복원"

(중요),  새로운 데이터베이스가 생성된다. 즉, 복원작업 후 지워야된다. 비용발생

 

3. 데이터센터의 데이터베이스 서비스에 장애가 발생하면 

활성지역 복제를 설정해 놨다면 보조 지역을 선택하고 '페일오버' 조치 끝

그리고 애플리케이션에서 Connection String 변경 

 

 

백업이 있다면 데이터베이스를 새로 만들면서 복원을   있다. 데이터베이스 만들기 블레이드에서 소스선택을 '백업'으로 지정하고 백업을 찾아서 만들  있다. 

 

4. 재해복구 훈련 

빠른 복구를 위해서, 주기적으로 사전에 복구훈련 필요하다. 

전화가 마구 울리고 있을때 문서찾을 시간이 있는가~~~

문제상황 가정하여 훈련이 필요.

 

관련문서: Azure SQL 데이터베이스의 비즈니스 연속성 개요 

 

 

 

 




azure sql database의 장점은 아래와 같은 빌트인 백업기능 뿐 아니라,

- 비싼 ent 버전 sql 사는데, 목돈이 들어가지 않고,

사용한만큼 유연하게 스펙을 변경하면 사용할 수 있다는 장점.

개발할때는 최소 스펙만 가져가고, 프로덕션 때에는 스펙을 올리면 된다.

- 보통 온프레미스는 구매할 때 모든 정신을 집중해서, 적정 스펙을 정해야 되지만(물론 업체가 하겠지)

  auzre sql은 언제든지 스펙 변경이 가능한 장점

- 온프레미스는 나중에 문제생길 것을 대비하여, 매우 over spec으로 구매해야되지만,

  azure sql은 그러지 않아도 됨.

 

 

 

PaaS Sql database 빌트인 백업기능

-자동백업

-장기백업보존

-활성지역복제

-수동백업(BACPAC)

 

 

 

 

1. 자동백업 

매주 전체 백업, 매시간 증분백업과 5분간격으로 트랜젝션 로그 백업 자동으로 진행한다.

(단, 가격 정책 계층에 따라서 백업의 보존기간이 다름)

- 기본(Basic) 7

- 표준(Stadard) 프리미엄(Premium) 35

- 보존위치는 '쌍을 이루는 데이터센터' 저장 : 한국 중부 - 남부

복원 누르면 복원지점 확인가능

 

2. 장기 백업 보존 

최대 10 동안 백업을 보관   있다.

데이터베이스 서버에 메뉴가 있다.  

 

3. 활성 지역 복제 

백업이 아니라 Replication.

다른 데이터센터에 똑같은 보조 데이터베이스를 만들고 지속적으로 싱크

원본 데이터베이스에 문제가 생기면 수초 이내 빠른 복구(Fail over) 가능 

보조 데이터베이스를 읽기가능으로 설정해놓으면 데이터 읽기를 분산 가능

 

 

4. 수동으로 백업 

데이터베이스 내보내기 기능을 이용하여 BACPAC 파일로 수동 백업 가능

해당 파일은 azure 스토리지에 저장

라이브 데이터베이스에서 내보내기를 하기가 부담스럽다면 복사를 하고 내보내기를 하면된다.

포탈에서도 가능하고, SSMS(SQL Server Management Server), PowerShell로도 가능

 

 




'기술(Azure 만...) > [MS]Azure PaaS' 카테고리의 다른 글

웹앱간 통신 제한 시나리오  (0) 2020.07.15
azure sql database 복구 복원  (0) 2020.05.03
보안코딩 가이드, 스캔 방법  (0) 2020.01.13
linux 웹앱---Azure storage 매핑  (0) 2019.11.02
웹앱 스케일링  (0) 2019.09.02

Security Code Scan - static code analyzer for .NET
https://security-code-scan.github.io/#Rules

 

Security Code Scan

Quick Facts Two modes: for Developers and Auditors. Detects various security vulnerability patterns: SQL Injection, Cross-Site Scripting (XSS), Cross-Site Request Forgery (CSRF), XML eXternal Entity Injection (XXE), etc. Taint analysis to track user input

security-code-scan.github.io

 

 

SCS0001 - Command Injection
If a malicious user controls either the FileName or Arguments, he might be able to execute unwanted commands or add unwanted argument. This behavior would not be possible if input parameter are validate against a white-list of characters.

SCS0003 - XPath Injection

The dynamic value passed to the XPath query should be validated.Risk

If the user input is not properly filtered, a malicious user could extend the XPath query.

SCS0007 - XML eXternal Entity Injection (XXE)

The XML parser is configured incorrectly. The operation could be vulnerable to XML eXternal Entity (XXE) processing.

SCS0018 - Path Traversal

A path traversal attack (also known as directory traversal) aims to access files and directories that are stored outside the expected directory.By manipulating variables that reference files with “dot-dot-slash (../)” sequences and its variations or by using absolute file paths, it may be possible to access arbitrary files and directories stored on file system including application source code or configuration and critical system files

 

등등 각종 취약점 코드 detect 




Azure StorageBlob 저장소의 컨테이너 

Azure PaaS App Service 특정 디렉터리에 마운트 가능  

 

  1. Storage Account 생성하고 마운트  컨테이너를 생성합니다. 

 

 

  1. App Service Configuration / Path mappings 메뉴에서 + New Azure Storage Mount 항목을 클릭합니다. 

  2. Blob 저장소와 컨테이너를 선택하고, Mount path 컨테이너를 마운트  디렉터리 위치를 지정합니다. 

 

 *<추가> 

동일 구독  Blob 저장소 아니라도 가능 

다른 구독이라면, Advanced 항목을 선택하고 직접Access Key 지정 방식 으로 사용 

 

  1. 상단의 Save 버튼을 클릭하여 저장합니다. 

 

  1. Mount path 지정한 위치에 blobfuse 어댑터로 추가된 항목이 보일 것입니다. 

 

Blob 저장소의 마운트가 완료되었다면 Server.xml 수정하여 해당 디렉터리를 가상 디렉터리로 매핑 

사용자지정 tomcat 으로  복사를 해와서... 

/local/usr/tomcat/conf 디렉터리를 /home/tomcat/conf 위치로 복사합니다. 

 (App Service에서는 /home 마운트  저장소 외에는 컨테이너 재시작  초기화 되어 없어짐) 

 

mkdir -p /home/tomcat 

cp -a /usr/local/tomcat/conf    /home/tomcat/conf 

 

/home/tomcat/conf/server.xml 열어서 아래와 같이 <Host> 하위에 <Context> 요소를 추가합니다.  

<Host name="localhost"  appBase="webapps" …> 

<Context path="/upload" docBase="/site/wwwroot/webapps/scs/upload/" /> 

 

 [추가정보] 

  • Blob 저장소를 마운트   사용되는 가상 파일 시스템 어댑터는 Blobfuse입니다. Libfuse 기반으로 오픈소스blobfuse 

https://github.com/Azure/azure-storage-fuse 

 

 

Tomcat/conf 복사해서 사용가능 

카탈리나 BASE, 카탈리나 HOME 각각에 톰캣 경로들이 들어있음. 

, 여러 개를 복제해서 사용가능하며, 디폴트 첫번째로 참조하는 경로는 /home/tomcat/conf 입니다. 

해당 경로에 tomcat conf 없다면, /local/usr/tomcat/conf 참조합니다. 

 

 

추가. 

앱서비스 스토리지 구성값 

App Service -> Configuration -> Application Settings에 WEBSITES_ENABLE_APP_SERVICE_STORAGE 항목 

False 주면,  홈 디렉터리로 컨테이너 내부의 저장소를 사용하게 되므로 인스턴스가 재시작 될 경우 파일을 보존되지 않을 수 있습니다. 

인스턴스(컨테이너) 재시작  home 하위 디렉터리를 제외하고는 초기화됨. 




웹앱 스케일링 관련 의문항목 

  1. L4 묶어지는 웹앱이라면 문제없을  

  2. 기본적으로 사용자 세션이 동일한 인스턴스로 유지되는 설계라면 문제없음. 

DB 정보만 쿼리하던지, insert 하는 로직이라면 

 

세션이 계속해서 유지되어야 하는 어플리케이션이라면? 

코드 레벨 어떤 작업 필요한지? 

 

 

오토스케일링 

메트릭 : cpu , 메모리, Data in, Disk queue  다양함 

 

"반응형 자동 크기조정" 

 

 

자동확장  

  1. 스케일  : 플랜을 높은 플랜으로… 

  2. 스케일 아웃 : 특정 메트릭 수치에 따른 인스턴스 수량 증가 

 

갑작스런 Burst 워크로드에 대응이 안될  있음. 

(Burst 시간 기준은 모르겠음) 

-> 어느 정도 기본 인스턴스의 감은 가지고 사전준비를 해놔야  . 

인스턴스 개수를 미리 늘려놓는다던지 

 

 

 

 

규칙추가  선택가능한 메트릭 

 

시간집계 Rule 

평균을 권장 (시간경과에 따라 집계된 값의 평균) 

너무 신속한 반응, 빠른 진동을 방지하기 위해서 : 멀미남 

 

 

이런식임…. 

최근의 메트릭 통계도 같이 보여줌. 보고 판단... 

 

액션에 따라 개수/백분율 지정 가능 

조정이   휴지기간 시간도 지정가능함. -> 빠른 진동을 방지하기 위한 장치 

단어의 의미에 대해서 자세히 파악필요... 

 

설정 가능 액션리스트 

 

 

과도한 비용발생을 막기위한 장치 : 최대 개수 지정 

 

 

Scal OUT 룰만 만들지 말고, IN/OUT 두개를 만들자 

 

 

 

 개의 기준이 아니라, 여러  가능함. 

  1. CPU percentage 

  2. 요일/ 일자 기준으로 

AND 조건일  OR 조건일까? => 안겹치게 해야될 ?? 

 

기본값 룰이 30%보다  경우 동작하는 룰이라면 

밑에 룰은 50%보다  경우로 정의 

 

 

 




+ Recent posts