AWS WAFでアクセス制御

2016/01/19 AWS, 技術系 投稿者:

今回は2015年10月にリリースとなったAWS WAFを弄ってみたいと思います。

WAFって何?

WAFとはWeb Application Firewallのことです。

一般的なファイアウォールがIPアドレスやポートに対して制御を行うのに対し、WAFではSQLインジェクション攻撃などの、構築したWEBアプリケーションに対しての攻撃から防御する役割を担っています。

AWS WAFの特徴

AWS WAFは前回紹介したCloudFrontと組み合わせて利用します。逆に言えばCloudFrontが設定されていないとAWS WAFを使用することができません。

AWS WAFで指定できる条件は以下の3つです。

  • IPアドレスが一致した場合の制御
  • 文字列が一致した場合の制御
  • SQLインジェクション対応

また料金の詳細はAWS公式ページをご覧いただきたいのですが、公式ページの料金例では月額26USD(約3,100円)と非常に安価であることがわかります。

実際には上記に加えてCloudFrontの料金も必要になります。

AWS WAFを設定する

では実際にAWS WAFを使ってみましょう。

まずはAWS WAFへアクセスします。

waf01

設定目標

今回は特定のIPアドレスから「test」の文字列が含まれるWebページへのアクセスを遮断できるかを確認したいと思います。

設定の流れ

次画面ではAWS WAFの概要が書かれています。

waf02-1

英語ですが大体以下のような流れが説明されています。

  • 条件(Conditions)を作成
  • ルールを作成(条件を組み合わせ、拒否するのか許可するのか)
  • Web ACLを作成(複数のルールを組み合わせてグループ化する)

この画面で設定する項目はありませんので、右下のNextボタンを押して進みます。

waf02-2

Web ACL名の設定

作成するWeb ACLの名前を設定します。CloudWatch metric nameはCloudWatchを使用してグラフ化する際に必要なメトリックの名前です。

waf03

条件を作成

まずは条件(Conditions)の作成です。

ここではIPアドレス、文字列、SQLインジェクションに対して条件を設定します。

waf05

概略としては以下のような条件です。

IP match conditions アクセス元IPアドレスに対し、指定したIPアドレス(サブネット可)が含まれているか
String match conditions ホスト名やURI、User-Agent等に指定した文字列が含まれているか。
SQL injection match conditions SQLクエリーが含まれるWEBリクエスト中のヘッダーやURI、クエリー等が悪意のある攻撃でないかをチェックする。

IPアドレスの条件設定

まずは一般的なファイアウォールと同様にIPアドレスの条件を作成してみます。

「Create IP match condition」をクリック。

waf04

条件名と対象のIPアドレスを設定します。今回はわかりやすくblacklist01と名づけました。

waf07

CreateをクリックしIPアドレスの条件設定が完了です。

文字列の条件設定

今度はもう一つ文字列の条件を作成してみます。

waf06-1

IPアドレスの条件設定と違った項目が出てきました。
今回は「test」を含むURIを制御したいので以下のような設定をしました。

waf06-2

なお、各項目の概要は以下の通りです。

名称 概要 選択可能な項目
Part of the request to filter on フィルタを行いたいリクエスト Header / HTTP method / Query string / URI
Match type 文字列一致条件 Contains / Exactly matches / Starts with / Ends with / Contains word
Transformation 指定文字列の変換 None / Convert to lowercase / HTML decode Remove whitespace characters / Simplify command line / URL decode
Value is base 64 encoded 指定文字列がbase64でエンコードされているか -
Value to match 指定したい文字列 -

Nextボタンで次のステップへ進みます。

ルールの設定

ここでは先ほど作成した条件一致するか一致しないかのルールの設定を行います。

まずは「Create rule」ボタンをクリックします。

waf08

blacklistblockという名称で、「IPアドレスがblacklist01と一致する場合」で作成します。

waf09-1

更に「Add another condition」をクリックし、「文字列がwafteststring(URIにtestを含む場合)」を追加します。

waf09-2

ルールアクションの設定

作成が完了したルールのアクションを設定します。

ルール内の全ての条件を満たす場合のアクションを「Block」に設定。
どのルールにも該当しない場合のアクションは「Allow all requests that don't match any rules」(許可)に設定します。

waf10-2

次の画面に進み、既に設定されているCloudFrontと関連付けをして完了です。

waf11

動作の検証

前回CloudFrontを設定したバーチャルドメインにWAFのACLを設定しましたので、動作検証を行います。

今回の検証は「特定のIPアドレスから「test」の文字列が含まれるWebページへのアクセスを遮断」です。

ブラックリスト登録したIPアドレスから「test」の文字列のないページへアクセス

これは問題なく表示できました。

waf15

ブラックリストに登録していないIPアドレスから「test」の文字列のあるページへアクセス

次にtestというフォルダを作成して表示できるか確認しました。表示に問題はありませんでした。

waf13

ブラックリスト登録したIPアドレスから「test」の文字列が含まれるWebページへのアクセス

今度は今回の検証目標である条件下での動作確認です。きちんとブロックされました。

waf14

まとめ

というわけで無事目標の設定を達成することができました。

今回はIPアドレスと文字列の組み合わせでしたが、ヘッダー等に含まれる文字列やSQLインジェクションなど紹介できない箇所についても検証したいと思いました。

問題点として、オリジンサーバへ直接アクセスしてしまうとhtmlファイル等が見れてしまい、意図したアクセス制御ができないためDNS等での工夫が必要かなと感じました。

今後もAWS関連の記事をアップしていきます!

カレンダー

    123
45678910
11121314151617
18192021222324
25262728293031
       
   1234
567891011
12131415161718
19202122232425
26272829   
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
  12345
6789101112
13141516171819
20212223242526
27282930   
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
    123
45678910
11121314151617
18192021222324
252627282930 
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
     12
3456789
10111213141516
17181920212223
24252627282930
31      
   1234
567891011
12131415161718
19202122232425
2627282930  
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
     12
3456789
10111213141516
17181920212223
24252627282930
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
  12345
6789101112
13141516171819
20212223242526
2728     
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
   1234
567891011
12131415161718
19202122232425
262728293031 
       
 123456
78910111213
14151617181920
21222324252627
282930    
       
     12
3456789
10111213141516
17181920212223
24252627282930
31      
   1234
567891011
12131415161718
19202122232425
2627282930  
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
  12345
6789101112
13141516171819
20212223242526
27282930   
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
    123
45678910
11121314151617
18192021222324
252627282930 
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
1234567
891011121314
15161718192021
22232425262728
2930     
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
  12345
6789101112
13141516171819
20212223242526
27282930   
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
   1234
567891011
12131415161718
19202122232425
262728293031 
       
 123456
78910111213
14151617181920
21222324252627
282930    
       
     12
3456789
10111213141516
17181920212223
24252627282930
31      
   1234
567891011
12131415161718
19202122232425
2627282930  
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
1234567
891011121314
15161718192021
22232425262728
       
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
      1
2345678
9101112131415
16171819202122
23242526272829
30      
     12
3456789
10111213141516
17181920212223
24252627282930
31      
1234567
891011121314
15161718192021
22232425262728
2930     
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
  12345
6789101112
13141516171819
20212223242526
27282930   
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
     12
3456789
10111213141516
17181920212223
242526272829 
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
    123
45678910
11121314151617
18192021222324
252627282930 
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
      1
2345678
9101112131415
16171819202122
23242526272829
30      
   1234
567891011
12131415161718
19202122232425
262728293031 
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
     12
3456789
10111213141516
17181920212223
24252627282930
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
1234567
891011121314
15161718192021
22232425262728
2930     
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
    123
45678910
11121314151617
18192021222324
25262728   
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
     12
3456789
10111213141516
17181920212223
24252627282930
31      
   1234
567891011
12131415161718
19202122232425
2627282930  
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
     12
3456789
10111213141516
17181920212223
24252627282930
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
    123
45678910
11121314151617
18192021222324
252627282930 
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
      1
2345678
9101112131415
16171819202122
23242526272829
30      
   1234
567891011
12131415161718
19202122232425
262728293031 
       
   1234
567891011
12131415161718
19202122232425
262728    
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
  12345
6789101112
13141516171819
20212223242526
27282930   
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
    123
45678910
11121314151617
18192021222324
252627282930 
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
     12
3456789
10111213141516
17181920212223
24252627282930
31      
   1234
567891011
12131415161718
19202122232425
2627282930  
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
     12
3456789
10111213141516
17181920212223
24252627282930
       
  12345
6789101112
13141516171819
20212223242526
2728     
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
   1234
567891011
12131415161718
19202122232425
262728293031 
       
 123456
78910111213
14151617181920
21222324252627
282930    
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
  12345
6789101112
13141516171819
20212223242526
27282930   
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
    123
45678910
11121314151617
18192021222324
252627282930 
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
1234567
891011121314
15161718192021
22232425262728
29      
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
      1
2345678
9101112131415
16171819202122
23242526272829
30      
   1234
567891011
12131415161718
19202122232425
262728293031 
       
 123456
78910111213
14151617181920
21222324252627
282930    
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
  12345
6789101112
13141516171819
20212223242526
27282930   
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
      1
2345678
9101112131415
16171819202122
232425262728 
       
   1234
567891011
12131415161718
19202122232425
262728293031 
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
     12
3456789
10111213141516
17181920212223
24252627282930
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
1234567
891011121314
15161718192021
22232425262728
2930     
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
      1
2345678
9101112131415
16171819202122
23242526272829
30      
   1234
567891011
12131415161718
19202122232425
262728293031 
       
 123456
78910111213
14151617181920
21222324252627
282930    
       
     12
3456789
10111213141516
17181920212223
2425262728  
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
    123
45678910
11121314151617
18192021222324
252627282930 
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
      1
2345678
9101112131415
16171819202122
23242526272829
30      
   1234
567891011
12131415161718
19202122232425
262728293031 
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
U・Iターン転職しませんか?
ブログ
Nedia What's up!
 HOME  ブログ

CloudFrontで負荷分散

2016/01/14 AWS, 技術系 投稿者:

恒例のAWSシリーズです。今回取り上げるのはCloudFrontです。

CloudFrontって何?

CloudFrontはAWSで提供されるCDNのサービスです。

CDNはContents Delivery Networkの略で、画像や動画等のHTMLファイル等に比べてファイルサイズが大きなコンテンツを分散させ、スムーズに配信させるネットワークのことです。

ちなみにCDNはakamaiとかが有名ですね。

HTMLファイルやCSS等のテキスト系のコンテンツはは今まで通りのサーバで運用し画像を別サーバに移すことで、サーバ自体の負荷が下がるほか、画像分のApacheのプロセス数も減るので理論的には同時アクセス数も増えることになります。

CloudFrontの特徴

CloudFrontの特徴は公式ページによると以下のようになっています。

  1. 表示を高速化!
  2. 大量アクセスに対応!
  3. サーバー引っ越し不要!
  4. すぐはじめられて低価格

ちなみにサーバ環境自体はAWSを使用しているかどうかの制限はないので、自社サーバ等で表示速度に不満がある場合には検討してみても良いのではないでしょうか。

CloudFrontを使ってみる

対象バーチャルドメインの準備(AWS以外のサーバでもOK)

ではCloudFrontを実際に使ってみたいと思います。

まず、当社のWEBサーバ内にawstest.nedia.ne.jpというバーチャルドメインを作成しました。当社ホームページのTOPページのみ丸ごとコピーしたものです。

cf01

もちろんEC2でApacheを立ち上げて使ってもOKですし、以前ご紹介したようにS3で公開したページでもOKです。

CloudFrontの設定

CloudFrontにアクセスして設定を進めます。Create Distributionをクリック。

cf02

次の画面ではWebかRTMPかを選択しますが通常はWebを指定することになると思います。なおRTMPは動画等のストリーミング配信で使用されるものです。

cf03

CroudFrontのオリジンサーバ(データを格納する大元のサーバ)の設定です。

cf04

  • Origin Domain Name:ここで指定したサーバが大元のデータを格納するサーバとなります。
  • Origin Path:Origin Domain Nameで指定したサーバ内で更にパスを指定するときに使用します。今回は空欄。
  • Origin ID:Origin Domain Nameを入力すると自動的に入力されます。
  • Origin Protocol Policy:オリジンサーバのプロトコル指定。今回はHTTPのみなのでHTTP Onlyを選択。
  • HTTP Port:HTTPポート。通常は80。
  • HTTPS Port:HTTPSポート。通常は443。

以降はデフォルトのまま設定しました。

次のページに進むと10分ほどで設定が完了します。Domain Nameのところにあるのが今回CDNとして使用するドメイン名になります。

cf05

動作の確認

これでWebページが丸ごとCDNにコピーされました。

例えば
http://awstest.nedia.ne.jp/img/bnr_blog.png
で表示されている画像が
http://d4u76n627nig5.cloudfront.net/img/bnr_blog.png
で表示できればOKとなります。

cf06

無事表示できましたね。

どれくらいのサーバで負荷分散しているのか

試しにNSLOOKUPコマンドで指定されたドメイン名を正引きしてみたところ、NSLOOKUPを行う度に表示されるIPアドレスが変わるので、多くのサーバが使われているんだなぁということが分かります。

cf07

最後にHTMLソースで画像のパスをCloudFront指定のドメイン名に変更すれば完了です。

まとめ

サーバ管理者としての視点から考えると、やはりサーバの負荷が減るので健全なサーバ運用が期待できるのではないかと感じました。

特に画像系のコンテンツが大量にあるとI/Oで足を引っ張られてしまうこともあるので、高負荷なサイトでは導入検討をしても良いのではないかと思います。

また、実は検証段階でEC2等で運用しているドメインでないとCloudFrontは運用できないという先入観がありましたが、実際に弊社管理下のサーバでも運用ができることが分かったので、導入の敷居は低いのではないかと思いました。

CloudFrontはまだ終わりません。次回は今回設定したCloudFrontにWAFを設定したいと思います。

カレンダー

    123
45678910
11121314151617
18192021222324
25262728293031
       
   1234
567891011
12131415161718
19202122232425
26272829   
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
  12345
6789101112
13141516171819
20212223242526
27282930   
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
    123
45678910
11121314151617
18192021222324
252627282930 
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
     12
3456789
10111213141516
17181920212223
24252627282930
31      
   1234
567891011
12131415161718
19202122232425
2627282930  
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
     12
3456789
10111213141516
17181920212223
24252627282930
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
  12345
6789101112
13141516171819
20212223242526
2728     
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
   1234
567891011
12131415161718
19202122232425
262728293031 
       
 123456
78910111213
14151617181920
21222324252627
282930    
       
     12
3456789
10111213141516
17181920212223
24252627282930
31      
   1234
567891011
12131415161718
19202122232425
2627282930  
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
  12345
6789101112
13141516171819
20212223242526
27282930   
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
    123
45678910
11121314151617
18192021222324
252627282930 
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
1234567
891011121314
15161718192021
22232425262728
2930     
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
  12345
6789101112
13141516171819
20212223242526
27282930   
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
   1234
567891011
12131415161718
19202122232425
262728293031 
       
 123456
78910111213
14151617181920
21222324252627
282930    
       
     12
3456789
10111213141516
17181920212223
24252627282930
31      
   1234
567891011
12131415161718
19202122232425
2627282930  
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
1234567
891011121314
15161718192021
22232425262728
       
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
      1
2345678
9101112131415
16171819202122
23242526272829
30      
     12
3456789
10111213141516
17181920212223
24252627282930
31      
1234567
891011121314
15161718192021
22232425262728
2930     
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
  12345
6789101112
13141516171819
20212223242526
27282930   
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
     12
3456789
10111213141516
17181920212223
242526272829 
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
    123
45678910
11121314151617
18192021222324
252627282930 
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
      1
2345678
9101112131415
16171819202122
23242526272829
30      
   1234
567891011
12131415161718
19202122232425
262728293031 
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
     12
3456789
10111213141516
17181920212223
24252627282930
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
1234567
891011121314
15161718192021
22232425262728
2930     
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
    123
45678910
11121314151617
18192021222324
25262728   
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
     12
3456789
10111213141516
17181920212223
24252627282930
31      
   1234
567891011
12131415161718
19202122232425
2627282930  
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
     12
3456789
10111213141516
17181920212223
24252627282930
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
    123
45678910
11121314151617
18192021222324
252627282930 
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
      1
2345678
9101112131415
16171819202122
23242526272829
30      
   1234
567891011
12131415161718
19202122232425
262728293031 
       
   1234
567891011
12131415161718
19202122232425
262728    
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
  12345
6789101112
13141516171819
20212223242526
27282930   
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
    123
45678910
11121314151617
18192021222324
252627282930 
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
     12
3456789
10111213141516
17181920212223
24252627282930
31      
   1234
567891011
12131415161718
19202122232425
2627282930  
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
     12
3456789
10111213141516
17181920212223
24252627282930
       
  12345
6789101112
13141516171819
20212223242526
2728     
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
   1234
567891011
12131415161718
19202122232425
262728293031 
       
 123456
78910111213
14151617181920
21222324252627
282930    
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
  12345
6789101112
13141516171819
20212223242526
27282930   
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
    123
45678910
11121314151617
18192021222324
252627282930 
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
1234567
891011121314
15161718192021
22232425262728
29      
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
      1
2345678
9101112131415
16171819202122
23242526272829
30      
   1234
567891011
12131415161718
19202122232425
262728293031 
       
 123456
78910111213
14151617181920
21222324252627
282930    
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
  12345
6789101112
13141516171819
20212223242526
27282930   
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
      1
2345678
9101112131415
16171819202122
232425262728 
       
   1234
567891011
12131415161718
19202122232425
262728293031 
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
     12
3456789
10111213141516
17181920212223
24252627282930
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
1234567
891011121314
15161718192021
22232425262728
2930     
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
      1
2345678
9101112131415
16171819202122
23242526272829
30      
   1234
567891011
12131415161718
19202122232425
262728293031 
       
 123456
78910111213
14151617181920
21222324252627
282930    
       
     12
3456789
10111213141516
17181920212223
2425262728  
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
    123
45678910
11121314151617
18192021222324
252627282930 
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
      1
2345678
9101112131415
16171819202122
23242526272829
30      
   1234
567891011
12131415161718
19202122232425
262728293031 
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
U・Iターン転職しませんか?
ブログ
Nedia What's up!
 HOME  ブログ

LDAPサーバ間でのデータの同期をしよう!

2016/01/07 AWS, 技術系 投稿者:

以前のOpenLDAPの記事では、OpenLDAPの導入から基本設定までを紹介しました。

今回はOpenLDAPの安定運用に欠かせないSYNCレプリケーションを使って行うLDAPサーバ間でのデータの同期方法について紹介したいと思います。

LDAPサーバ間でのデータの同期(SYNCレプリケーション)

OpenLDAPは、複数のLDAPサーバの間でのデータの同期を取る機能をサポートしています。
この機能を使うと、LDAPサーバが突然停止してしまったときに他のLDAPサーバで処理を代替したり、またLDAPクライアント側でLDAPサーバの参照先を分割することで大規模なシステムで一台のLDAPサーバに処理が集中することを防いだりすることができます。この機能をSYNCレプリケーションと呼びます。

SYNCレプリケーションでは、必要に応じてその時点の最新のデータをLDAP Content Synchronization Protocolというプロトコルを利用して複製します。
SYNCレプリケーションでは、データを保持しているサーバをプロバイダ、複製を受けるサーバをコンシューマと呼びます。

SYNCレプリケーションのタイプ

SYNCレプリケーションでは、refreshOnly と refreshAndPersistの2つのレプリケーションのタイプがあります。
どちらのレプリケーションタイプでも、プロバイダとコンシューマは、互いにsid、ridという識別番号を持ちます。
またコンシューマの状態を示すcookieと呼ばれる値を、プロバイダとコンシューマが持っています。この3つの数値を使って、レプリケーションの状態が管理されます。

refreshOnlyタイプでは、コンシューマは定期的にプロバイダへのポーリング(連携動作する際に、送信(あるいは処理)要求がないか確認すること) を行います。
プロバイダは、同期処理が完了すると次の同期処理のためのcookieをコンシューマに渡し、コンシューマが次の同期処理を行うまでの間の変更の履歴をこのcookieに基づいたセッションログとして管理します。コンシューマからの次のポーリングでは、このcookieの値に基づき、前の同期からの変更データが転送されます。セッションログに更新データが保管しきれなくなった場合や、セッションログに保管されていないデータの更新が必要になった場合には、すべてのデータが転送されます。

refreshAndPersistでは、基本的な同期処理の方法はrefreshOnlyと同様ですが、同期処理が完了してもコンシューマとプロバイダとの接続は切断されません。コンシューマ側の同期処理と同期処理の間に、プロバイダがコンシューマの状態を更新すべきと判断すると、プロバイダからコンシューマに更新情報メッセージが送信される場合があります。もし、プロバイダとコンシューマの間の接続が切断されると、コンシューマは次の同期処理のタイミングで再接続します。

タイプの違いについてまとめると下記の通りになります。

  • refreshOnly:コンシューマは定期的にプロバイダの389/tcpにTCPセッションを張ることでデータの同期を試みます(ポーリング方式)
  • refreshAndPersist:接続の維持が行われるため,コンシューマはプロバイダの389/tcpにセッションを張り続け、更新データの有無をリアルタイムにプロバイダから受け取ることができます(リスニング方式)

極力リアルタイムにレプリケーションを行いたい場合はrefreshAndPersistを選択し、負荷を少なくするために適度なインターバルをもってレプリケーションを行いたい場合には、refreshOnlyをするのが良いでしょう。

プロバイダ側のSYNCレプリケーション設定

SYNCレプリケーションを提供するサーバでは、SYNCレプリケーションに必要なモジュールを読み込み、機能を有効にし、セッションログの管理方法を設定する必要があります。

モジュール読み込みの設定

プロバイダでは、SYNCレプリケーションを管理するモジュールsyncprovを読み込む必要があります。モジュールの読み込みを行うには、cn=module,cn=configというエントリを作成し、読み込むモジュールを定義する必要があります。次は、モジュール管理用エントリを作成するLDIFファイルの例です。

①で指定しているのは、モジュールが保管されているディレクトリです。CentOSの場合には/usr/lib64/openldapとなります。②は、プロバイダに必要なsyncprovモジュールを読み込むための設定です。ファイルができたら、このエントリを作成します。

SYNCプロバイダの有効化

レプリケーションを行うデータベースに対して、プロバイダの設定を行います。該当のデータベースの設定エントリの配下に、プロバイダ設定用のエントリを追加します。次は、ユーザ管理用データベースにプロバイダの設定を行うためのエントリを作成するLDIFファイルの例です。

なお、以前の記事でも説明していますが、olcDatabase={2}hdb,cn=config がユーザデータを格納するための設定データが格納されているエントリとなります。

①②のように、syncprovオーバーレイ※1の設定用エントリでは、olcOverlayConfig,olcSyncProvConfigのオブジェクトクラスを使用します。
③のolcOverlayは有効にするオーバーレイの設定で、olcDatabase={1}hdb,cn=configで管理するデータベースに対して、SYNCプロバイダのオーバーレイを有効にすることを意味しています。
④は、SYNCプロバイダのオーバーレイ設定パラメータで、属性値はセッションログの最大保持数です。
※1 オーバーレイとは、OpenLDAPの機能拡張モジュールのことで、syncprovはLDAP Syncレプリケーションにおけるマスタサーバの機能を追加します。

次のように、ldapaddコマンドを使って、このエントリを作成すると、SYNCプロバイダとしての設定が完了します。

コンシューマ側のSYNCレプリケーション設定

コンシューマ側では、通常のLDAPサーバとしての設定を行った上で、プロバイダサーバへの接続方法、同期処理、複製するデータに関する設定を行う必要があります。

LDIFファイルの準備

コンシューマ設定は、同期をとるデータベースの設定エントリに、属性を追加することで行います。次は、属性を追加するLDIFファイルの例です。

LDIFファイルでは、②~⑪のようにスペースで始まる行を前の行の続きとして扱います。単語の区切りとしてのスペースも必要なため、必ず2つ以上のスペースが必要になりますので注意してください。

プロバイダへの接続の設定

①では、このコンシューマの識別番号(rid)を指定しています。ridは3桁以内の数値(つまり0 ~ 999)でなければなりません。
②~⑤はプロバイダの接続情報です。192.168.0.100がLDAPサーバのIPアドレスとなります。接続に使用するbinddnは読み取り権限があれば良いため、セキュリティを考慮してプロバイダの特権DN(rootdn)ではなく、それ以外のDNを指定することをおすすめします。ここでは、特権DNがManagerなので、別途準備したadminとしています。

同期処理の設定

⑥には、同期レプリケーションのタイプを指定します。refreshOnlyまたはrefreshAndPsersistです。
⑦はrefreshOnlyの場合に同期処理を行う間隔であり、左から日時分秒を指定します。この例では5分に一度の同期をとることを指定しています。
⑧~⑩では同期処理を行うLDAPデータの指定を行います。⑧ではLDAPデータの検索を開始するDNを指定し、⑨はデータ検索用のフィルタです。⑩は検索の対象になるスコープで、sub(サブツリーの下全部)、one(1階層下まで)、base(そのDNのみ)の3つのタイプを指定できます。
⑪は検索に失敗した場合のリトライの設定です。4つの数値は、順にリトライ間隔(秒)、リトライ回数、リトライ回数経過後の再リトライ開始までの間隔(秒)、再リトライの回数の指定です。再リトライの回数を実施しても同期がとれない場合には、同期処理を停止します。

設定の適用

用意したLDIFファイルを使って、データベースの設定を変更することで、設定が適用されます。

レプリケーションの設定は以上となります。
プロバイダ側のデータを更新し、レプリケーションによりコンシューマ側のデータが更新されているか確認してみてください。

クライアントの設定

最後にOpenLDAPサービスを利用するクライアント側の設定について説明します。

ホスト名もしくはIPアドレスで、OpenLDAPサーバをカンマ区切りで設定します。
上記の設定を行うことにより、プロバイダがダウン時に参照先がコンシューマに切り替わり、LDAP サービスは継続されるようになります。

また、上記のようにプロバイダとコンシューマの両方を参照するのではなく、LDAPクライアント側で参照先のOpenLDAPサーバを分けることで負荷分散させることが可能です。
同期の精度が求められる場合には、更新間隔を短くしてください。

まとめ

いかがでしたでしょうか?
OpenLDAPでは、今回紹介したように較的簡単な手順でレプリケーション設定を行うことが出来ます。

またOpenLDAPのバックアップは、slapcatコマンドを使って行うことが出来ます。

こちらをCronへ登録するなどすることで、バックアップの自動化も簡単に行えます。

OpenLDAPを利用したシステムが大規模化してきた場合には、バックアップとレプリケーションの両方を組み込んでおくことで、より安全な運用が可能となりますのでぜひお試しください。

それでは。

カレンダー

    123
45678910
11121314151617
18192021222324
25262728293031
       
   1234
567891011
12131415161718
19202122232425
26272829   
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
  12345
6789101112
13141516171819
20212223242526
27282930   
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
    123
45678910
11121314151617
18192021222324
252627282930 
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
     12
3456789
10111213141516
17181920212223
24252627282930
31      
   1234
567891011
12131415161718
19202122232425
2627282930  
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
     12
3456789
10111213141516
17181920212223
24252627282930
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
  12345
6789101112
13141516171819
20212223242526
2728     
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
   1234
567891011
12131415161718
19202122232425
262728293031 
       
 123456
78910111213
14151617181920
21222324252627
282930    
       
     12
3456789
10111213141516
17181920212223
24252627282930
31      
   1234
567891011
12131415161718
19202122232425
2627282930  
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
  12345
6789101112
13141516171819
20212223242526
27282930   
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
    123
45678910
11121314151617
18192021222324
252627282930 
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
1234567
891011121314
15161718192021
22232425262728
2930     
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
  12345
6789101112
13141516171819
20212223242526
27282930   
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
   1234
567891011
12131415161718
19202122232425
262728293031 
       
 123456
78910111213
14151617181920
21222324252627
282930    
       
     12
3456789
10111213141516
17181920212223
24252627282930
31      
   1234
567891011
12131415161718
19202122232425
2627282930  
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
1234567
891011121314
15161718192021
22232425262728
       
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
      1
2345678
9101112131415
16171819202122
23242526272829
30      
     12
3456789
10111213141516
17181920212223
24252627282930
31      
1234567
891011121314
15161718192021
22232425262728
2930     
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
  12345
6789101112
13141516171819
20212223242526
27282930   
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
     12
3456789
10111213141516
17181920212223
242526272829 
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
    123
45678910
11121314151617
18192021222324
252627282930 
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
      1
2345678
9101112131415
16171819202122
23242526272829
30      
   1234
567891011
12131415161718
19202122232425
262728293031 
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
     12
3456789
10111213141516
17181920212223
24252627282930
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
1234567
891011121314
15161718192021
22232425262728
2930     
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
    123
45678910
11121314151617
18192021222324
25262728   
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
     12
3456789
10111213141516
17181920212223
24252627282930
31      
   1234
567891011
12131415161718
19202122232425
2627282930  
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
     12
3456789
10111213141516
17181920212223
24252627282930
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
    123
45678910
11121314151617
18192021222324
252627282930 
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
      1
2345678
9101112131415
16171819202122
23242526272829
30      
   1234
567891011
12131415161718
19202122232425
262728293031 
       
   1234
567891011
12131415161718
19202122232425
262728    
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
  12345
6789101112
13141516171819
20212223242526
27282930   
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
    123
45678910
11121314151617
18192021222324
252627282930 
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
     12
3456789
10111213141516
17181920212223
24252627282930
31      
   1234
567891011
12131415161718
19202122232425
2627282930  
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
     12
3456789
10111213141516
17181920212223
24252627282930
       
  12345
6789101112
13141516171819
20212223242526
2728     
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
   1234
567891011
12131415161718
19202122232425
262728293031 
       
 123456
78910111213
14151617181920
21222324252627
282930    
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
  12345
6789101112
13141516171819
20212223242526
27282930   
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
    123
45678910
11121314151617
18192021222324
252627282930 
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
1234567
891011121314
15161718192021
22232425262728
29      
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
      1
2345678
9101112131415
16171819202122
23242526272829
30      
   1234
567891011
12131415161718
19202122232425
262728293031 
       
 123456
78910111213
14151617181920
21222324252627
282930    
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
  12345
6789101112
13141516171819
20212223242526
27282930   
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
      1
2345678
9101112131415
16171819202122
232425262728 
       
   1234
567891011
12131415161718
19202122232425
262728293031 
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
     12
3456789
10111213141516
17181920212223
24252627282930
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
1234567
891011121314
15161718192021
22232425262728
2930     
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
      1
2345678
9101112131415
16171819202122
23242526272829
30      
   1234
567891011
12131415161718
19202122232425
262728293031 
       
 123456
78910111213
14151617181920
21222324252627
282930    
       
     12
3456789
10111213141516
17181920212223
2425262728  
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
    123
45678910
11121314151617
18192021222324
252627282930 
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
      1
2345678
9101112131415
16171819202122
23242526272829
30      
   1234
567891011
12131415161718
19202122232425
262728293031 
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
U・Iターン転職しませんか?
群馬データセンター
群馬の法人ITサポートサービス Wide Net[ワイドネット]
Wide Netのクラウドバックアップ
クラウド型ファイル共有サービスRushDrive
ワイドオフィス