2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

FSx for NetApp ONTAP の S3 Access Points を CloudFormation で構築してみた

2
Last updated at Posted at 2026-03-28

はじめに

こんにちは、mori (@morimori) です。

2025年の re:Invent で、Amazon FSx for NetApp ONTAP が S3 Access Points に対応するアップデートが発表されました。

これにより、FSx ONTAP のボリュームに S3 Access Point を紐付けることで、既存の S3 API をそのまま使って FSx ONTAP 上のデータにアクセスできるようになりました。

自分の仕事がクラウド中心にシフトしてから、ONTAP をはじめとするオンプレミスのストレージ製品とはほとんど縁がなくなっていました。クラウドネイティブなサービスを使うことが増え、関連するアップデートも気に留めなくなっていたのですが、直近の案件でたまたま Amazon FSx for NetApp ONTAP を触る機会があり、そこで目についたのがこのアップデートです。

実際に設定する機会がありましたので、この記事ではその内容を CloudFormation を使った構築手順としてまとめさせていただきます。

S3 Access Points とは

S3 Access Points は、S3 バケットへのアクセスを管理するための名前付きネットワークエンドポイントです。バケットポリシーを直接変更せずに、Access Point ごとにアクセス制御ポリシーを定義できます。また、VPC に紐付けることでインターネットからのアクセスを遮断し、VPC 内からのみアクセスを許可する構成も取れます。

NetApp ONTAP は SVM(Storage Virtual Machine)という単位で環境を分割でき、テナントやチームごとにセキュリティ境界を設けた構成が可能です。S3 Access Point はその配下のボリューム単位で作成するため、アクセス制御を細かく分離したうえで利用できます。

制約事項

試す前に、いくつかの制約を確認しておきます。

GetObjectPutObjectListObjects / ListObjectsV2 といった基本的な S3 操作は利用できます。一方、GetBucketAcl / PutObjectAcl などの ACL 操作や、ListObjectVersionsRestoreObject などは対象外になります。詳細は公式ドキュメントを参照してください。

また、ECS on Fargate は FSx ONTAP ボリュームのネイティブマウントに対応していません。ECS から FSx ONTAP を使いたい場合は ECS on EC2 が選択肢になります。

ただし、S3 Access Points 経由であれば Fargate を含むあらゆるクライアントから S3 API でアクセスできます。アプリケーション側で AWS SDK を使うだけで、オンプレミス上の ONTAP ボリューム内のファイルを操作できるのは、実装コストの観点でも大きなメリットだと思います。

また、アクセスポイントのネットワークオリジン(Internet / VPC)は作成時にのみ指定可能で、作成後の変更はできません。VPC 制限を使う場合は設計段階で決めておく必要があります。

CloudFormation で構築する

AWS::FSx::S3AccessPointAttachment リソースを使って、FSx ONTAP ボリュームへの S3 Access Point を作成します。

AWSTemplateFormatVersion: '2010-09-09'
Description: FSx ONTAP S3 Access Point for SVM volume access

Parameters:
  # FSx ONTAP Volume ID
  VolumeId:
    Description: "FSx for ONTAP Volume ID. Format: fsvol-xxxxxxxxxxxxxxxxx"
    Type: String
    AllowedPattern: '^fsvol-[0-9a-f]{17}$'

  # File System Identity Type
  FileSystemIdentityType:
    Description: "File system identity type (UNIX or WINDOWS)"
    Type: String
    Default: UNIX
    AllowedValues:
      - UNIX
      - WINDOWS

  # UNIX User Name (required if FileSystemIdentityType is UNIX)
  UnixUserName:
    Description: "UNIX user name for file system operations (required if FileSystemIdentityType is UNIX)"
    Type: String
    Default: ""
    AllowedPattern: '^$|^[^\u0000\u0085\u2028\u2029\r\n]{1,256}$'

  # Windows User Name (required if FileSystemIdentityType is WINDOWS)
  WindowsUserName:
    Description: "Windows user name for file system operations (required if FileSystemIdentityType is WINDOWS). Can be domain\\user format."
    Type: String
    Default: ""
    AllowedPattern: '^$|^[^\u0000\u0085\u2028\u2029\r\n]{1,256}$'

  # S3 Access Point Name
  S3AccessPointName:
    Description: "Name of the S3 access point (3-50 characters, lowercase alphanumeric and hyphens only)"
    Type: String
    Default: ""
    AllowedPattern: '^$|^(?=[a-z0-9])[a-z0-9-]{1,48}[a-z0-9]$'

  # VPC Configuration (optional)
  VpcId:
    Description: "VPC ID to restrict S3 access point access (optional). If not provided, access point will be accessible from internet."
    Type: String
    Default: ""
    AllowedPattern: '^$|^vpc-[0-9a-f]{8,}$'

  # S3 Access Point Policy (optional)
  S3AccessPointPolicy:
    Description: "S3 access point policy in JSON format (optional)"
    Type: String
    Default: ""
    AllowedPattern: '^$|.*'

Conditions:
  UseUnixUser: !Equals [!Ref FileSystemIdentityType, "UNIX"]
  UseWindowsUser: !Equals [!Ref FileSystemIdentityType, "WINDOWS"]
  UseVpcConfiguration: !Not [!Equals [!Ref VpcId, ""]]
  UseAccessPointPolicy: !Not [!Equals [!Ref S3AccessPointPolicy, ""]]
  UseS3AccessPointName: !Not [!Equals [!Ref S3AccessPointName, ""]]
  UseVpcConfigurationOrPolicy: !Or
    - !Condition UseVpcConfiguration
    - !Condition UseAccessPointPolicy

Resources:
  FsxOntapS3AccessPointAttachment:
    Type: AWS::FSx::S3AccessPointAttachment
    Properties:
      Name: !If
        - UseS3AccessPointName
        - !Ref S3AccessPointName
        - fsx-ontap-s3-access-point
      Type: ONTAP
      OntapConfiguration:
        VolumeId: !Ref VolumeId
        FileSystemIdentity:
          Type: !Ref FileSystemIdentityType
          UnixUser: !If
            - UseUnixUser
            - Name: !Ref UnixUserName
            - !Ref "AWS::NoValue"
          WindowsUser: !If
            - UseWindowsUser
            - Name: !Ref WindowsUserName
            - !Ref "AWS::NoValue"
      S3AccessPoint: !If
        - UseVpcConfigurationOrPolicy
        - !If
          - UseVpcConfiguration
          - !If
            - UseAccessPointPolicy
            - VpcConfiguration:
                VpcId: !Ref VpcId
              Policy: !Ref S3AccessPointPolicy
            - VpcConfiguration:
                VpcId: !Ref VpcId
          - !If
            - UseAccessPointPolicy
            - Policy: !Ref S3AccessPointPolicy
            - !Ref "AWS::NoValue"
        - !Ref "AWS::NoValue"

Outputs:
  FsxOntapS3AccessPointAttachmentId:
    Description: "FSx ONTAP S3 Access Point Attachment ID"
    Value: !Ref FsxOntapS3AccessPointAttachment
    Export:
      Name: fsx-ontap-s3-access-point-attachment-id

  FsxOntapS3AccessPointArn:
    Description: "S3 Access Point ARN"
    Value: !GetAtt FsxOntapS3AccessPointAttachment.S3AccessPoint.ResourceARN
    Export:
      Name: fsx-ontap-s3-access-point-arn

  FsxOntapS3AccessPointAlias:
    Description: "S3 Access Point Alias (DNS alias for accessing the access point)"
    Value: !GetAtt FsxOntapS3AccessPointAttachment.S3AccessPoint.Alias
    Export:
      Name: fsx-ontap-s3-access-point-alias

パラメータの説明

パラメータ 必須 説明
VolumeId 必須 対象の FSx ONTAP ボリューム ID(fsvol-xxx 形式)
FileSystemIdentityType 必須 アクセス時のユーザー種別(UNIX or WINDOWS
UnixUserName 任意 UNIX ユーザー名(FileSystemIdentityTypeUNIX の場合に指定)
WindowsUserName 任意 Windows ユーザー名(FileSystemIdentityTypeWINDOWS の場合に指定)
S3AccessPointName 任意 Access Point 名。省略時は fsx-ontap-s3-access-point
VpcId 任意 指定すると VPC 内からのアクセスに限定。未指定の場合はインターネットからアクセス可能になるため注意
S3AccessPointPolicy 任意 S3 バケットポリシー相当の JSON

Outputs の使い方

スタックのデプロイ後、以下の値が出力されます。

  • S3 Access Point ARN — SDK や CLI からアクセスする際に --access-point オプションで指定します
  • S3 Access Point Alias<alias>.s3-accesspoint.<region>.amazonaws.com 形式の DNS エイリアス。S3 バケット名の代わりにそのまま使えます

まとめ

今回は FSx for NetApp ONTAP の S3 Access Points 対応を CloudFormation で試してみました。AWS::FSx::S3AccessPointAttachment リソースを使うだけで構築でき、VPC 制限やアクセスポリシーも合わせて設定できます。

今回は CloudFormation での構築手順を紹介しましたが、マネジメントコンソールの GUI からも数ステップで同様の設定が可能です。まず試してみたい場合は GUI から操作するのが手軽でおすすめです。

クラウドへの移行が進む一方で、Windows と Linux の混在環境や既存の NAS 資産を抱えている現場では、すべてをクラウドネイティブに置き換えることが難しいケースもあります。そういった環境では FSx for NetApp ONTAP のように SMB / NFS の両プロトコルに対応したストレージを活用することが有効な選択肢になります。今回のアップデートにより、そこに S3 API 経由のアクセスも加わったことで、アプリケーション側の実装の幅がさらに広がったと感じています。

ファイルサーバーといえば「VPC の中」「イントラネットの中」というイメージが強かったですが、SVM 単位で環境を分割しセキュリティ境界を設けたうえで、Access Point ごとにアクセスポリシーを細かく制御することで、インターネット経由での外部アカウントとの連携や、SDK を使った他 VPC・他アカウントからのアクセスも安全に実現できます。データを一箇所に集約しながら、複数の環境やアカウントから柔軟に利用できる可能性が見えたのは、個人的にとても面白いと感じたポイントでした。

インフラエンジニアとして、今後もストレージ周りを深掘りしていきたいと思います。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?