はじめに
ONTAPでは、ONTAP S3と呼ばれるオブジェクトストレージ機能を提供できます。この機能は、Amazon Web Services (AWS) のSimple Storage Service (S3) と同じプロトコルを使用することで、データの保存、取得、管理をシンプルなAPI呼び出しで行えるようにします。これにより、アプリケーションの開発者はクラウドネイティブなデータアクセスパターンをオンプレミス環境で利用できるようになります。
また、既存のONTAP環境に統合されることで、高い可用性、セキュリティ、パフォーマンスを提供し、エンタープライズレベルのオブジェクトストレージソリューションを実現します。本記事では、オンプレミス環境でONTAP S3の設定をCLIで実施する手順について記載します。
なお、ONTAP S3利用時のベストプラクティスについては、S3 in ONTAP best practicesをご参照ください。
何をしたい?できる?
- ONTAPにオブジェクトストレージ用のSVMの作成
- 作成するBacketにVersioningを有効化
- LinuxからAWSのS3コマンドを使用してS3アクセスの実施
S3用の仮想ストレージ(SVM)作成の流れ
基本的な設定作業の流れは下図の通りになります。
本記事では図の1~3の物理的な設定は完了済と想定しての記載で、仮想ストレージであるSVMからの作成について記載致します。
Aggregate作成や物理Networkの設定については確認したい際は、過去記事を参照頂ければと思います。
記事における環境情報
本記事では、以下の環境で実施した内容となります。
- Red Hat Enterprise Linux : 8.10
- ONTAP : 9.15.1
環境のイメージとしては以下の通りです。
実施手順
1. 仮想ストレージの作成
> vserver create -vserver s3_test -subtype default -data-services data-s3-server -language C.UTF-8
[Job 102] Job succeeded:
Vserver creation completed.
2. HTTPS疎通に関する証明書関連処理の実施
本記事では、社内の検証環境における手順例となっている為、
信頼性には欠けますが自ら発行する自己署名証明書を利用した形で実施します。
2-1. SSL自己署名証明書を作成(ルート認証局の証明書)
本記事では、自己署名デジタル証明書を作成してインストールします。
自己署名デジタル証明書は、サーバ認証、認証局(CA)として動作する他の証明書への署名、またはSSLクライアントとしてのONTAPで使用できます。
但し、CAによって署名された証明書ほどセキュアではないため、実稼働環境では推奨されません。
> security certificate create -vserver s3_test -type root-ca -common-name s3_test_ca
The certificate's generated name for reference: s3_test_ca_180724491D358AA4_s3_test_ca
2-2. CSRを生成し、コンソールに表示
CSR(証明書署名要求)は、デジタル証明書を発行してもらうために認証局(CA)に送信されるメッセージとなり、次の手順で必要となります。ここではCertificate Signing Requestを控えておきます。
> security certificate generate-csr -common-name s3_test.demo.netapp.com
Certificate Signing Request :
-----BEGIN CERTIFICATE REQUEST-----
MIICpzCCAY8
(中略)
KqYMPI+wrfmF3dY=
-----END CERTIFICATE REQUEST-----
Private Key :
-----BEGIN PRIVATE KEY-----
MIIEvAIBADAN
(中略)
J1VfKuxg==
-----END PRIVATE KEY-----
Note: Keep a copy of your certificate request and private key for future reference.
2-3. CSRに署名
2-2で作成したCSRに署名し、2-1で作成した自己署名ルートCA証明書を使用してデジタル証明書を生成します。
コマンド実行後に表示される"Enter certificate signing request (CSR): Press when done"の後に2-2で表示されたCSR要求を貼り付けます。
> security certificate sign -vserver s3_test -ca s3_test_ca -ca-serial 180724491D358AA4 -expire-days 356
Enter certificate signing request (CSR): Press <Enter> when done
-----BEGIN CERTIFICATE REQUEST-----
MIICpzCCAY8
(中略)
KqYMPI+wrfmF3dY=
-----END CERTIFICATE REQUEST-----
Signed Certificate :
-----BEGIN CERTIFICATE-----
MIIDQjCCAiqgAwIBAgIIGAbUKvxl0sEwDQYJKoZIhvcNAQELBQAwIjETMBEGA1UE
(中略)
f1e3VQ/NsvtR37cdfEKEQb/WlNPSaQ==
-----END CERTIFICATE-----
設定内容を確認します。
> security certificate show -vserver s3_test -common-name s3_test_ca -type root-ca -instance
Vserver: s3_test
Certificate Name: s3_test_ca_180724491D358AA4_s3_test_ca
FQDN or Custom Common Name: s3_test_ca
Serial Number of Certificate: 180724491D358AA4
Certificate Authority: s3_test_ca
Type of Certificate: root-ca
Size of Requested Certificate(bits): 2048
Certificate Start Date: Tue Nov 12 06:21:18 2024
Certificate Expiration Date: Wed Nov 12 06:21:18 2025
Public Key Certificate: -----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgII
(中略)
dRb/HENw==
-----END CERTIFICATE-----
Country Name (2 letter code): US
State or Province Name (full name):
Locality Name (e.g. city):
Organization Name (e.g. company):
Organization Unit (e.g. section):
Email Address (Contact Name):
Protocol: SSL
Hashing Function: SHA256
Subtype: -
3. LIFの作成
S3アクセス用のIPを付与する為にLIFの作成を実施します。
LIFの作成時には、IPの他に普段の通信経路となるコントローラとPortを指定を行い、S3利用としてservice-policyの作成を実施します。
3-1. Service-policyの作成
Advanced ModeでS3アクセス用のPolicy作成を実施します。
> set advanced
Warning: These advanced commands are potentially dangerous; use them only when directed to do so by NetApp personnel.
Do you want to continue? {y|n}: y
*> net int service-policy create -vserver s3_test -policy policy01 -services data-core,data-s3-server
3-2. LIFの作成
3-1で作成したPolicyを指定してLIFの作成を実施します。
*> net int create -vserver s3_test -lif data01 -service-policy policy01 -home-port e0f -home-node cluster2-01 -address 192.168.0.161 -netmask 255.255.255.0
(network interface create)
4. Object Storeの作成
Object Store Serverの作成を実施します。
なお、Object StoreとBucketの違いは以下の通りとなります。
-
Object Store
データをObjectとして保存するストレージシステム全体
データの保存、管理、アクセスを行うためのインフラ全体を意味 -
Bucket
Object Store内のデータを整理するためのコンテナ
各バケットには、複数のオブジェクトが含まれる
Bucketは、特定のプロジェクト、ユーザー、またはアプリに関連するデータをグループ化するため利用
4-1. Server Typeの証明書名の確認
本記事では、HTTPSアクセスのみ有効となる形で作成しますが、HTTPS利用にあたってObject Store Serverの作成時に指定する証明書名は、サーバCA証明書(中間またはルートCA証明書)ではなく、サーバ証明書(エンドユーザまたはリーフ証明書)の名前にする必要があります。
# serverTypeの証明書名の確認
*> security certificate show -vserver s3_test
Vserver Serial Number Certificate Name Type
---------- --------------- -------------------------------------- ------------
s3_test 180724480147EEF9
s3_test_180724480147EEF9 server
Certificate Authority: s3_test
Expiration Date: Wed Nov 12 06:21:13 2025
s3_test 180724491D358AA4
s3_test_ca_180724491D358AA4_s3_test_ca root-ca
Certificate Authority: s3_test_ca
Expiration Date: Wed Nov 12 06:21:18 2025
s3_test 180724491D358AA4
s3_test_ca_180724491D358AA4 client-ca
Certificate Authority: s3_test_ca
Expiration Date: Wed Nov 12 06:21:18 2025
s3_test 180724491D358AA4
s3_test_ca server-ca
Certificate Authority: s3_test_ca
Expiration Date: Wed Nov 12 06:21:18 2025
4 entries were displayed.
4-2. Object Store Serverの作成
本記事では、HTTPSアクセスのみ有効となる形で作成します。
その為、HTTPは有効化しないで進めます。
# Object Store Serverの作成
*> vserver object-store-server create -vserver s3_test -object-store-server s3_test.demo.netapp.com -status-admin up -certificate-name s3_test_180724480147EEF9
# Object Store Serverの状態確認
*> vserver object-store-server show
Vserver: s3_test
Object Store Server Name: s3_test.demo.netapp.com
Administrative State: up
HTTP Enabled: false
Listener Port For HTTP: 80
HTTPS Enabled: true
Secure Listener Port For HTTPS: 443
Certificate for HTTPS Connections: s3_test_180724480147EEF9
Default UNIX User: pcuser
Default Windows User: -
Maximum Value for Key TTL: -
Comment:
5. Bucket作成、User作成、権限設定
5-1. Bucket作成
ONTAP S3は、FlexGroupをベースにBucketを提供されます。
Bucket作成時に利用する対象Aggregateとサイズを指定する事でBacketを作成する事ができます。
*> vserver object-store-server bucket create -vserver s3_test -bucket bk001 -aggr-list aggr1_node1,aggr1_node2 -size 10g
[Job 112] Job succeeded: Successful
5-2. Bucket Versioningを有効化
本記事ではONTAP9.11.1以降で利用可能なBucket Versioningを有効化する為、Backet作成後にmodifyを実施します。
Bucket Versioningは、オブジェクトの複数のバージョンを保持クライアント側で削除済みオブジェクトをリストアしたり、以前のバージョンのオブジェクトを読み出したりすることが可能となりますが、有効にすると一時停止のみで無効には出来ない機能となります。
*> object-store-server bucket modify -bucket bk001 -versioning-state enabled
(vserver object-store-server bucket modify)
[Job 141] Job succeeded: Successful
object-store-server bucket show -vserver s3_test -instance
(vserver object-store-server bucket show)
Vserver: s3_test
Bucket :bk001
Type :s3
Versioning :enabled
Uuid :65ebb7b9-a0bf-11ef-bb53-00505681bd7f
Volume :fg_oss_1731392927
Size :10GB
Logical Used Size :0KB
Object Count :0
Encryption :false
Comment :
Qos Policy Group :-
Role :standalone
Bucket Protected :false
Bucket Protected On ONTAP :false
Bucket Protected On Cloud :false
Bucket Protected on External Cloud :false
NAS Path :-
Object Lock Retention Mode :no-lock
Object Lock Default Retention Period :-
5-3. S3アクセス用のユーザ作成
Object StoreまたはBucketにアクセスする為のユーザ作成を実施します。
ユーザ作成時に表示されるSecret Keyは後で再確認ができない為、ユーザ作成時に
Access KeyとSecret Keyを合わせて控えておきます。
*> vserver object-store-server user create -vserver s3_test -user s3user
Vserver: s3_test
User: s3user
Access Key: 123456789
Secret Key: abcdfrghijklmnopqrstuvwxyz
Warning: The secret key won't be displayed again. Save this key for future use.
5-4. S3アクセス用のグループ作成とObject Storeへの権限設定
本記事の設定では、SVM上に作成したBucketをS3クライアント側からは参照はできるが、作成や削除はできないように、デフォルトで用意されているreadOnlyAccessというPolicyを紐づけて利用します。
#Read OnlyのPolocy確認
*> vserver object-store-serve policy statement show -policy readOnlyAccess
Vserver Policy Index Effect Actions Resources
--------- ------------ ------ ------ ---------------- -----------------
s3_test
readOnlyAccess 1 allow GetObject, *
ListBucket,
GetBucketAcl,
GetObjectAcl,
ListAllMyBuckets
,
ListBucketMultip
artUploads,
ListMultipartUpl
oadParts,
GetObjectTagging
,
GetBucketLocatio
n,
GetBucketVersion
ing,
ListBucketVersio
ns,
GetBucketPolicy,
GetLifecycleConf
iguration,
GetObjectRetenti
on,
GetBucketObjectL
ockConfiguration
Sid: ReadOnlyPolicyStatementForPolicyReadOnlyAccess
# グループ作成時に作成したS3用のユーザとPolicyの紐づけ
*> vserver object-store-server group create -vserver s3_test -name group01 -users s3user -comment "" -policies ReadOnlyAccess
5-5. Backetへ権限設定
BacketへのアクセスPolicyを設定します。
本記事の設定では、作成したBucketに対してファイルのUploadや一覧参照、削除ができるような設定を適用しています。
*> object-store-server bucket policy statement create -bucket bk001 -effect allow -action GetObject,PutObject,DeleteObject,ListBucket -vserver s3_test -resource bk001,bk001/*
(vserver object-store-server bucket policy statement create)
*> object-store-server bucket policy statement show
(vserver object-store-server bucket policy statement show)
Vserver Bucket Index Effect Action Principal Resource
----------- ---------- ----- ------ ------------ --------------- --------------
s3_test
bk001 1 allow GetObject, - bk001, bk001/*
PutObject,
DeleteObject
, ListBucket
6. LinuxからのAWS CLIを利用したONTAP S3へのアクセス確認
設定したONTAP S3のBucketに対してアクセス確認を実施します。
本記事では、LinuxにAWS CLIをInstallしてアクセス確認を実施します。
ここからの操作はLinux上における内容になります
6-1. AWS CLIのInstall
# awscliのInstall
> pip3 install awscli
Collecting awscli
Downloading awscli-1.24.10-py3-none-any.whl (3.9 MB)
|████████████████████████████████| 3.9 MB 5.2 MB/s
Requirement already satisfied: PyYAML<5.5,>=3.10 in /usr/lib64/python3.6/site-packages (from awscli) (3.12)
Collecting s3transfer<0.6.0,>=0.5.0
Downloading s3transfer-0.5.2-py3-none-any.whl (79 kB)
|████████████████████████████████| 79 kB 18.2 MB/s
(中略)
# Versionの確認
> aws --version
aws-cli/1.24.10 Python/3.6.8 Linux/4.18.0-553.el8_10.x86_64 botocore/1.26.10
6-2. AWS CLIにアクセスキー情報を設定
手順5-3でONTAP上にて実施した、S3アクセス用のユーザ作成時に表示されたAccess KeyとSecret Keyの入力を実施します。
Amazon S3およびONTAP S3の使い分けが必要な場合には、AWS CLIを使ったAmazon S3とONTAP S3の操作を参照頂ければと思います。
> aws configure
AWS Access Key ID [None]: 123456789
AWS Secret Access Key [None]: abcdfrghijklmnopqrstuvwxyz
Default region name [None]:
Default output format [None]:
6-3. S3へフォルダ作成とFileのUpload
ONTAPに作成したBucketへのアクセスを実施します。
自己証明書を使ってHTTPSアクセスをできるようにしている為、CERTIFICATE_VERIFY_FAILED エラーでアクセスできない事を回避する為、--no-verify-sslオプションをつけて操作を実施します。(Warningは出るが、アクセスを試すことができる)
# Bucket上にフォルダを作成
> aws --no-verify-ssl --endpoint-url https://192.168.0.161/ s3api put-object --bucket bk001 --key "folder/"
/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py:1068: InsecureRequestWarning: Unverified HTTPS request is being made to host '192.168.0.161'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings
InsecureRequestWarning,
{
"ETag": "\"d41d8cd98f00b204e9800998ecf8427e\""
}
# UploadするサンプルFileの作成
> cat sample.txt
Tue Nov 12 05:41:07 EST 2024
# サンプルFileのUpload
> aws --no-verify-ssl --endpoint-url https://192.168.0.161/ s3 cp sample.txt s3://bk001/folder/
(Warning省略)
upload: ./sample.txt to s3://bk001/folder/sample.txt
# Bucket上のFile一覧の確認
> aws --no-verify-ssl --endpoint-url https://192.168.0.161/ s3 ls s3://bk001/folder/
(Warning省略)
2024-11-12 02:14:45 0
2024-11-12 05:41:24 29 sample.txt
6-4. Versioningを確認
ファイルを更新しUploadして、Versioningされているかの確認を実施します。
# LinuxでFileの作成
> date > verion-test.txt
> cat verion-test.txt
Thu Nov 14 00:20:43 EST 2024
# 作成したFileのS3へのUpload
> aws --no-verify-ssl --endpoint-url https://192.168.0.161/ s3 cp verion-test.txt s3://bk001/folder/
(Warning省略)
upload: ./verion-test.txt to s3://bk001/folder/verion-test.txt
# Linux上のFileを更新
> date >>verion-test.txt
> cat verion-test.txt
Thu Nov 14 00:20:43 EST 2024
Thu Nov 14 00:21:52 EST 2024
# 更新したFileのS3へのUpload
> aws --no-verify-ssl --endpoint-url https://192.168.0.161/ s3 cp verion-test.txt s3://bk001/folder/
(Warning省略)
upload: ./verion-test.txt to s3://bk001/folder/verion-test.txt
# UploadされたFileのVersion確認
> aws --no-verify-ssl --endpoint-url https://192.168.0.161/ s3api list-object-versions --bucket bk001 --prefix "folder/verion-test.txt"
(Warning省略)
{
"Versions": [
{
"ETag": "75a1dfd731954e86ee8d5a77a44888e1",
"Size": 58,
"StorageClass": "STANDARD",
"Key": "folder/verion-test.txt",
"VersionId": "OTc2MjM4MDAwLnYxLjIuMTczMTU2MTcyNS4u",
"IsLatest": true,
"LastModified": "2024-11-14T05:22:05.976Z"
},
{
"ETag": "79dc7114110ade4fa21e9b76422cb1db",
"Size": 29,
"StorageClass": "STANDARD",
"Key": "folder/verion-test.txt",
"VersionId": "NjI2MjY3MDAwLnYxLjIuMTczMTU2MTY3Ny4u",
"IsLatest": false,
"LastModified": "2024-11-14T05:21:17.626Z"
}
]
}