[Storage Gateway] EC2からS3バケットをAD認証でSMBマウントしてみた~2021年冬~

2021.12.12

こんにちは、リサリサです。

先日、EC2 から S3バケットを ゲストアクセスで SMBマウントしてみたのですが、今日は AD認証でマウントしてみました。

はじめに

構成は以下のようになります。

Managed Microsoft AD を作り、EC2 と Storage Gateway をドメイン参加させて、SMB でファイル共有していきます。

やってみた

事前準備

マウント先となるS3バケットを作っておきます。今回は「filegateway-lisalisa」という名前にしました。

Managed Microsoft ADの作成

CloudFormation で作ってしまいました。

「corp.lisalisa.com」というディレクトリ名で、Standard エディションで作りました。

AWSTemplateFormatVersion: "2010-09-09"
Description:
  Simple AD create

Parameters:
  PJPrefix:
    Type: String
    Default: test
  Env:
    Type: String
    AllowedValues:
      - dev
      - prd
    Default: dev
  VPCID:
    Type: "AWS::EC2::VPC::Id"
    Description: "Select at your VPC."
  SubnetID1:
    Type: "AWS::EC2::Subnet::Id"
    Description: "Select at private subnet in your selected VPC."
  SubnetID2:
    Type: "AWS::EC2::Subnet::Id"
    Description: "Select at private subnet in your selected VPC."
  DirectoryName:
    Type: "String"
    Default: "corp.lisalisa.com"
  Password:
    Type: "String"

Resources:
  MicrosoftAD:
    Type: AWS::DirectoryService::MicrosoftAD
    Properties: 
      # エイリアスの有無
      # http://<alias>.awsapps.com。などのディレクトリのアクセスURLを作成するために使用
      # エイリアスを作成した後は、削除したり再利用したりすることはできないため、この操作はどうしても必要な場合にのみ使用
      CreateAlias: False
      # MicrosoftADのエディション。Standard or Enterprise
      Edition: Standard
      # ディレクトリのシングルサインオンを有効にするかどうか。省略:False
      EnableSso: False
      # corp.example.com。などのディレクトリの完全修飾名。
      Name: !Ref DirectoryName
      # ディレクトリ管理者のパスワード
      Password: !Ref Password
      # ディレクトリのNetBIOS名(CORP。など)。
      ShortName: CORP
      VpcSettings: 
        SubnetIds: 
          - !Ref SubnetID1
          - !Ref SubnetID2
        VpcId: !Ref VPCID

# 別のスタックで利用するためにOutputしておく
Outputs:
  MicrosoftAD:
    Value: !Ref MicrosoftAD
    Export:
      Name: !Sub "${PJPrefix}-${Env}-AD"
  MicrosoftADDirectoryName:
    Value: !Ref DirectoryName
    Export:
      Name: !Sub "${PJPrefix}-${Env}-AD-DirectoryName"

DHCP オプションセットの設定

Storage Gateway 用の EC2 の DNS サーバーの設定をするために、DHCP オプションの設定をしておきます。

DHCP オプションセットはアタッチした VPC 内の EC2 インスタンスにまとめて DNS サーバーや NTP サーバーなどの設定をすることができるものです。

VPC のコンソールから「DHCP オプションセット」を開いて、「DHCP オプションセットの作成」をします。

さっき作った AD の DNS アドレスを控えておきます。 (すみません、何度が作り直しているので、値が合っていません…そのまま入力してください。)

ドメイン名、ドメインネームサーバー (今控えた AD の DNS アドレス)、ついでに NTP サーバーを指定したら、「DHCP オプションセットを作成」します。

VPC の「DHCP オプションセットを編集」します。

今作った DHCP オプションセットを指定して、「変更を保存」します。これで、この VPC に作成する EC2 は全て、今設定した DNS サーバーと NTP サーバーがデフォルトで設定されるようになります。

マウント対象のEC2を作成

今回は、OS は Windows2019、インスタンスタイプは t3.micro で作成しました。

こちらも CloudFormationで作成しましたが、全文は割愛します。今回は今作った AD に参加したかったので、作成の際に「インスタンス結合ディレクトリ」で参加しておきましたので、その部分のテンプレートだけ記載しておきます。

      SsmAssociations:
        - AssociationParameters:
          - Key: directoryId
            Value:
              - Fn::ImportValue: !Sub "${PJPrefix}-${Env}-SimpleAD"
          - Key: directoryName
            Value:
              - Fn::ImportValue: !Sub "${PJPrefix}-${Env}-SimpleAD-DirectoryName"
          DocumentName: AWS-JoinDirectoryServiceDomain

コンソールから作成する場合は、「インスタンスの詳細の設定」で作成した Simple AD を選択します。

Storage Gateway 用の EC2 と Storage Gateway の作成

NFS マウントの時と同じなので、下記記事の「Storage Gatewayの作成①」から「Storage Gatewayの作成②」を参照ください。

セキュリティグループに追加で SSH も開けておきます。

※Storage Gateway 用の EC2 も AD に参加させたいのですが、「インスタンス結合ディレクトリ」では参加させられなかったので、「インスタンス結合ディレクトリ」は指定せず作成します。

SMB のファイル共有を作成

ファイルゲートウェイを選択して、「ファイル共有の作成」をクリックします。

S3 バケット名を指定して、オブジェクトのアクセスで「SMB」を選択します。他はデフォルトのまま進めます。

デフォルトのまま進めます。

AD認証かゲストアクセスが選択できます。「Active Directory」を選択します。Managed Microsoft AD のデフォルトの管理ユーザーは「Admin」です。ドメインユーザーを「Admin」、パスワードは AD 作成の際に指定したものを入力します。

確認画面に進んだら、AD 結合 が出来ています。エラー(接続エラーや、パスワードが違うなどの認証エラーなど)があると、「Acrive Directory のステータス」が以下のような表示になり、確認画面に進みません。オンプレの VM など、DHCP オプションセットで DNS の設定ができない環境の場合、別途 DNS の設定が必要になります。

「Acrive Directory のステータス」も「結合済み」になってます。「作成」を押して、ファイル共有を作成します。

マウントする

ファイル共有から確認できる以下のコマンドでマウントできるのですが、今回はUIでやってみます。

ファイルエクスプローラーを開いて「ネットワークドライブの割り当て」⇒「ネットワークドライブの割り当て」をクリックします。

※以下のようにリボンが表示されていない場合は、「表示」の右側辺りを右クリックして、「リボンの最小化」の選択を外すと表示されます。

好きなドライブと、ファイル名は「\[File Gateway IP][SMB File Share Name]」を指定します。今回だと「\10.2.0.128\filegateway-lisalisa」になります。

資格情報の入力を求められるので、AD の Admin ユーザーでログインしてみます。

Z:ドライブが出来ました!

test ファイルを置いてみます。

S3 でも確認できました。AD 認証で SMB 共有できました!

参考

[Storage Gateway] ファイルゲートウェイを SimpleAD でアクセス制御する | DevelopersIO

SMB ファイル共有の作成 - AWS Storage Gateway

「インスタンス結合ディレクトリ」ってなに?EC2のLaunch時にドメイン結合ディレクトリを使ってみた | DevelopersIO

クライアントへの SMB ファイル共有のマウント - AWS Storage Gateway