S3 File Gatewayでのファイル閲覧をADでアクセス制御できるか

目的・やりたいこと

要件
1. AD参加のユーザーを Storage Gateway(SGW)にアクセスさせる
2. SGWに用意したフォルダごとにWindowsの共有設定を用いて、閲覧権限を設定したい(AD参加ユーザーが見れる/見れないフォルダを制御)
3. AD参加ユーザーのクライアントからは、Windows エクスプローラーのネットワーク欄からSGWのディレクトリが見れるようにしたい(NASのような使い方)

・オンプレクライアントPCからDRサーバを経由してSGWのフォルダ/ファイルにアクセスしたい
・その際にADの情報を使って閲覧/書き込みの権限制御をしたい
→AD参加はできている
→権限の制御がうまくいっていない
→ファイルリスト自体は見れるが、ファイルのプロパティを見ても権限不足と表示されて何も権限が見れない
→SGW側の問題もあるかもしれない
→別途SGWを使う話も顧客から相談が来ている

対象となる技術

条件(導入にあたっての前提事項)

  • File Gateway on EC2を利用
  • ファイル共有プロトコルはSMBを利用
  • 通信要件についてはクリア
  • File Gateway構築手順は省略

参考URL

注意事項

https://docs.aws.amazon.com/ja_jp/filegateway/latest/files3/smb-acl.html#acl-limits

  • Windows ACLは、Windows SMBクライアントを使用してファイル共有にアクセスするときに、ADが有効化されているファイル共有のみでサポート
  • ファイルゲートウェイは、任意アクセスコントロールリスト(DACL)エントリである AllowエントリおよびDenyエントリをサポート
  • SMBファイル共有のルートACL設定はゲートウェイのみであり、この設定はゲートウェイの更新と再起動後にも維持される

概要図

作業の流れ

手順概要

  1. S3ファイルゲートウェイをADドメイン参加
  2. ファイル共有の作成
  3. ADユーザーでマウント確認
  4. testフォルダをAdminだけが見れるように設定
  5. testユーザーでtestフォルダが表示されないことを確認

検証手順

1.ゲートウェイのアクション > SMB設定の編集 > Active Directory設定

2.以下のように設定

3.と、ここで結合失敗 (ネットワークエラー)が

4.それもそのはず。S3 FileGatewayのDNS設定を変更していなかった。
そこで、S3 FileGatewayのEC2インスタンスSSHログイン

% ssh admin@18.183.82.242 -i nozaki.pem

5.まずは現在のDNS設定を確認

#

    AWS Storage Gateway - Configuration

    #######################################################################
    ##  Currently connected network adapters:
    ##
    ##  eth0: 10.0.7.150    
    #######################################################################

    1: HTTP/SOCKS Proxy Configuration
    2: Network Configuration
    3: Test Network Connectivity
    4: Test S3 Connectivity
    5: View System Resource Check (0 Errors)
    6: License Information
    7: Command Prompt

    Press "x" to exit session

        Enter command: 2

    AWS Storage Gateway - Network Configuration

    1: Edit DNS Configuration
    2: View DNS Configuration
    3: Configure Hostname
    4: View Hostname Configuration

    Press "x" to exit

    Enter command: 2

    DNS Configuration


    Available adapters: eth0
    Enter network adapter: eth0

    Source: Assigned by DHCP
    DNS: 10.0.0.2
    Domain search list: ap-northeast-1.compute.internal

10.0.0.2とものの見事にデフォルトになっていた。

6.そこで下のADのIPに書き換える。

    AWS Storage Gateway - Network Configuration

    1: Edit DNS Configuration
    2: View DNS Configuration
    3: Configure Hostname
    4: View Hostname Configuration

    Press "x" to exit

    Enter command: 1

    DNS Configuration:


    Available adapters: eth0
    Enter network adapter: eth0

    Assign by DHCP [y/N]: N

    Enter primary DNS [10.0.0.2]: 10.0.10.237
    Enter secondary DNS [10.0.0.2]: 10.0.35.136

    Apply config [y/N]: y

 AWS Storage Gateway - Network Configuration

    1: Edit DNS Configuration
    2: View DNS Configuration
    3: Configure Hostname
    4: View Hostname Configuration

    Press "x" to complete your network configuration and exit

    Enter command: x

    Restarting networking...

    Restarting network (via systemctl):                [  OK  ]

    You must restart your gateway to complete the network configuration.

    Restart gateway now [y/N]: y
    Restarting...SUCCESS
    Press return to continue

7.気を取り直して再度AD参加に挑戦。今度は成功

8.ファイル共有の設定もADでユーザー認証する

Windows アクセスコントロールリストが選択されていることも確認

9.Windows踏み台にログイン後、ADユーザーでマウントできることを確認

'10.0.7.150' のユーザー名を入力してください: Admin@nozaki.com
10.0.7.150 のパスワードを入力してください:
コマンドは正常に終了しました。)

10.まずはtestフォルダをAdminだけが見れるようにする。そのためにデフォルトで設定されているEveryoneを削除するため、継承を無効化する


これでAdminだけが見れる状態に

11.一度セッションを切断して、今度はnozakiユーザーでマウント

>Net Use * /delete
これらのリモート接続が存在します:

    D:              \\10.0.36.58\cifs-share
    E:              \\10.0.7.150\nozaki-codedeploybucket
    S:              \\aaa.nozaki.com\share
    X:              \\10.0.7.150\nozaki-codedeploybucket
    Z:              \\10.0.13.3\cifs-share
                    \\TSCLIENT\Desktop
続行すると、接続は取り消されます。

この操作を続行しますか? (Y/N) [N]: Y
X: との接続にオープン ファイルや未実行のディレクトリ検索があります。

切断を続行し、強制的に閉じますか? (Y/N) [N]: Y
コマンドは正常に終了しました。

>net use X: \\10.0.7.150\nozaki-codedeploybucket
'10.0.7.150' のユーザー名を入力してください: nozaki@nozaki.com
10.0.7.150 のパスワードを入力してください:
コマンドは正常に終了しました。

12.検証の結果、フォルダにアクセスできないようにはできるが、フォルダ自体は表示されてしまうことがわかりました。
このフォルダ自体すらも見えなくする方法がないかを模索。

果たしてそんなの方法あるのだろうかと思って見つけたこのサイトが詳しい。
Windows Server上のアクセス権がない共有フォルダーを見えなくする方法
なんでもABE(Access-based Enumeration) = アクセス ベースの列挙を有効にすればよいらしい。

(参考)アクセス権のない共有フォルダをユーザーから隠したい

・セキュリティ上考慮が必要なフォルダやファイルがあることさえ,ユーザーに知られなくなるため,ファイルサーバーとしてのセキュリティレベルが向上する
・アクセス権の無いフォルダやファイルを隠すことで表示が整理される。ユーザーは、多数のフォルダやファイルが存在するディレクトリ内にあっても、容易に自分が必要なフォルダ(ファイル)を見つけられます。

でもS3 file Gatewayって阿部さんに対応してたっけ?と思ったら、Q&Aでは対応しているとのこと

Q: Simple Storage Service (Amazon S3) ファイルゲートウェイは、SMB ファイル共有のアクセスベースの列挙をサポートしていますか?

はい。SMB ファイル共有のアクセスベースの列挙を構成して、アクセス許可上、開くことができないフォルダやファイルがユーザーに表示されないようにすることができます。また、Simple Storage Service (Amazon S3) ファイルゲートウェイ上のファイル共有をユーザーが閲覧できるかどうかを制御することもできます。

13.で、よく見たらファイル共有設定の編集のファイルアクセス設定で「ファイルとディレクトリのアクセス権ベースの列挙」というのがあるではないか!ということでこれを有効に

14.改めて踏み台で12.に戻り、フォルダ表示を更新。するとtestフォルダが見えなくなっているので、検証成功!

所要時間

1時間

ユースケース

S3のファイルのアクセス制御をWindows ACLで行いたい場合