[アップデート] Amazon FSx for NetApp ONTAPとAmazon FSx for Windows ServerのActive Directory認証情報がAWS Secrets Manager と統合されました
Active Directoryの認証情報を直接渡したくないな
こんにちは、のんピ(@non____97)です。
皆さんはAmazon FSx for NetApp ONTAP(以降FSxN)やAmazon FSx for Windows File Server(以降FSxW)でドメイン参加する際に、ドメイン参加に必要なActive Directoryのサービスアカウントの認証情報を直接渡したくないなしたいなと思ったことはありますか? 私はあります。
従来こちらの情報は直接指定する必要がありました。CloudFormationにおいては以下記事で紹介されているように参照式で渡すこともできますが、ユーザー名とパスワードと都度指定するのが面倒です。
今回、アップデートによりAmazon FSx for NetApp ONTAPとAmazon FSx for Windows ServerのActive Directory認証情報がAWS Secrets Manager と統合されました。
これにより、先ほどの煩わしさから解放されます。
実際に触ってみました。
いきなりまとめ
- FSxWとFSxNでドメイン参加する際の認証情報をSecrets Manager経由で渡すことが可能になった
- この機能を使うためにはSecrets Managerのキーポリシーと、シークレットの暗号化で使用しているKMSキーポリシーの編集が必須
- = キーポリシーの編集ができないAWSマネージドのKMSキーは使用できない
やってみた
AWSマネジメントコンソール上からドメイン参加時の画面を確認
まず、AWSマネジメントコンソール上からドメイン参加時の画面を確認します。
FSxWでドメイン参加周りを確認すると、AWS Secrets Managerに保存 - 最も安全と記載されていました。明らかに推奨されていますね。

実際はシークレットのARNを指定するようです。
続いて、FSxNのドメイン参加周りです。

こちらもFSxWと同じですね。
ちなみにAWS CLIを確認すると、DomainJoinServiceAccountSecretでシークレットのARNを指定するようです。
DomainJoinServiceAccountSecret -> (string)
Specifies the updated Amazon Resource Name (ARN) of the Amazon Web Services Secrets Manager secret containing the self-managed Active Directory domain join service account credentials. Amazon FSx uses this account to join to your self-managed Active Directory domain.
Constraints:
- min:
64- max:
1024- pattern:
^arn:[^:]{1,63}:secretsmanager:[a-z0-9-]+:[0-9]{12}:secret:[a-zA-Z0-9/_+=.@-]+-[a-zA-Z0-9]{6}$update-storage-virtual-machine — AWS CLI 2.31.31 Command Reference
シークレットの用意
それでは、シークレットの用意をします。
シークレットの形式について、AWS公式ドキュメントには以下のように記載があることから、ドメインユーザー名はCUSTOMER_MANAGED_ACTIVE_DIRECTORY_USERNAME、パスワードはCUSTOMER_MANAGED_ACTIVE_DIRECTORY_PASSWORDで指定することが分かります。
To create a secret for Amazon FSx to access your Active Directory, use the AWS CLI command create-secret and set the following parameters:
- --name: The identifier for your secret.
- --description: A description of the secret's purpose.
- --kms-key-id: The ARN of the KMS key you created in Step 1 for encrypting the secret at rest.
- --secret-string: A JSON string containing your AD credentials in the following format:
- CUSTOMER_MANAGED_ACTIVE_DIRECTORY_USERNAME: Your AD service account username without the domain prefix, such as svc-fsx. Don't provide the domain prefix, such as CORP\svc-fsx.
- CUSTOMER_MANAGED_ACTIVE_DIRECTORY_PASSWORD: Your AD service account password
- --region: The AWS Region where your SVM will be created. This defaults to your configured region if AWS_REGION is not set.
.
.
(中略)
.
.# Set region and get account ID REGION=${AWS_REGION:-$(aws configure get region)} ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --output text) # Replace with your KMS key ARN from Step 1 KMS_KEY_ARN="arn:aws:kms:us-east-2:123456789012:key/1234542f-d114-555b-9ade-fec3c9200d8e" # Replace with your Active Directory credentials AD_USERNAME="Your_Username" AD_PASSWORD="Your_Password" # Create the secret SECRET_ARN=$(aws secretsmanager create-secret \ --name "FSxSecret" \ --description "Secret for FSx access" \ --kms-key-id "$KMS_KEY_ARN" \ --secret-string "{\"CUSTOMER_MANAGED_ACTIVE_DIRECTORY_USERNAME\":\"$AD_USERNAME\",\"CUSTOMER_MANAGED_ACTIVE_DIRECTORY_PASSWORD\":\"$AD_PASSWORD\"}" \ --region "$REGION" \ --query 'ARN' \ --output text) echo "Secret created with ARN: $SECRET_ARN" # Attach the resource policy with proper formatting aws secretsmanager put-resource-policy \ --secret-id "FSxSecret" \ --region "$REGION" \ --resource-policy "{ \"Version\": \"2012-10-17\", \"Statement\": [ { \"Effect\": \"Allow\", \"Principal\": { \"Service\": \"fsx.amazonaws.com\" }, \"Action\": [ \"secretsmanager:GetSecretValue\", \"secretsmanager:DescribeSecret\" ], \"Resource\": \"$SECRET_ARN\", \"Condition\": { \"StringEquals\": { \"aws:SourceAccount\": \"$ACCOUNT_ID\" }, \"ArnLike\": { \"aws:SourceArn\": [ \"arn:aws:fsx:$REGION:$ACCOUNT_ID:file-system/*\", \"arn:aws:fsx:$REGION:$ACCOUNT_ID:storage-virtual-machine/fs-*/svm-*\"] } } } ] }" echo "Resource policy attached successfully"Best practices for working with Active Directory - FSx for ONTAP
ネイティブなパスワードローテーション機能がある訳ではないため、シークレットのタイプはその他です。

ドキュメントには以下のようにカスタマーKMSキーを使うように記載がありますが、一旦無視します。
For Encryption Key, create a new key, don't use the AWS default KMS key. Be sure to create the AWS KMS key in the same Region that contains the SVM that you want to join to your Active Directory.
シークレットの名前を入力します。ドキュメントにはリソースポリシーを定義するように記載されていますが、そちらは一旦無視します。

ローテーションはできないためローテーション設定は行いません。

設定内容を確認してシークレットを作成します。

作成したシークレットを確認します。

ドメイン参加
実際にドメイン参加してみます。
SVMを事前に用意していたので、このSVMのSMBサーバーをドメイン参加させます。

SMBサーバーのNetBIOS名やドメイン名、AD DCのIPアドレス、シークレットなどの各種情報を入力し確認をクリックします。

すると、以下のようにシークレット取得時にエラーになってしまいました。
Amazon FSx faced a problem while attempting to fetch Secret value from the Secret arn:aws:secretsmanager:us-east-1:<AWSアカウントID>:secret:non-97/fsx/service-account-lamyQS. Make sure you have provided necessary permissions for the FSx Service Principal to fetch the Secret value from your Secret.

これはKMSキーポリシーやシークレットポリシーでFSxのサービスプリンシパルからの操作を許可していなかったためです。
KMSキーのキーポリシーの修正
KMSキーのキーポリシーを修正します。
現在シークレットで使用しているデフォルトのKMSキーはキーポリシーを修正することは仕様としてできません。
そのためカスタマーマネージドのKMSキーを使用する必要があります。
カスタマーマネージドのKMSキーを用意して、以下のようにキーポリシーを指定します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<AWSアカウントID>:root"
},
"Action": "kms:*",
"Resource": "*"
},
{
"Effect": "Allow",
"Principal": {
"Service": "fsx.amazonaws.com"
},
"Action": [
"kms:Decrypt",
"kms:DescribeKey"
],
"Resource": "arn:aws:kms:us-east-1:<AWSアカウントID>:key/ecd9c622-3e01-4b05-b257-4829174f71c0",
"Condition": {
"StringEquals": {
"aws:SourceAccount": "<AWSアカウントID>",
"kms:ViaService": "secretsmanager.us-east-1.amazonaws.com",
"kms:EncryptionContext:SecretARN": "arn:aws:secretsmanager:us-east-1:<AWSアカウントID>:secret:non-97/fsx/service-account-lamyQS*"
},
"ArnLike": {
"aws:SourceArn": [
"arn:aws:fsx:us-east-1:<AWSアカウントID>:file-system/*",
"arn:aws:fsx:us-east-1:<AWSアカウントID>:storage-virtual-machine/fs-*/svm-*"
]
}
}
}
]
}

けたたましくエラーが出ていますがAWS公式ドキュメントを信じます。
キーポリシー変更後、シークレットで使用しているKMSキーを変更します。

先ほどキーポリシーを変更したKMSキーを指定します。

シークレットを暗号化する際に使用するKMSキーが更新されて、新しいシークレットのバージョンが追加されたことを確認します。

シークレットのリソースポリシーの修正
この状態で再度ドメイン参加をトライしても同様のエラーで先に進みませんでした。
シークレットのリソースポリシーを修正しましょう。
具体的には以下のように設定をしました。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "fsx.amazonaws.com"
},
"Action": [
"secretsmanager:GetSecretValue",
"secretsmanager:DescribeSecret"
],
"Resource": "arn:aws:secretsmanager:us-east-1:<AWSアカウントID>:secret:non-97/fsx/service-account-lamyQS",
"Condition": {
"StringEquals": {
"aws:SourceAccount": "<AWSアカウントID>"
},
"ArnLike": {
"aws:SourceArn": [
"arn:aws:fsx:us-east-1:<AWSアカウントID>:file-system/*",
"arn:aws:fsx:us-east-1:<AWSアカウントID>:storage-virtual-machine/fs-*/svm-*"
]
}
}
}
]
}
ドメイン参加 (2回目)
改めてドメイン参加を行います。
すると、更新中になりました。

一方で、10分ほど待ってもドメイン参加しているように見えません。

コンピューターオブジェクトも指定のOUに作成されていません。

処理が動いていないのかと思い、同じパラメーターで再度ドメイン参加しようとしたところ、今度はUnable to perform the storage virtual machine update. There is an update already in progressと表示されてしまいました。

ということで、処理は動いているようです。
しかし、時間ももったいないです。新規SVMを作成し、そのSVMのSMBサーバーをドメイン参加させます。

マネジメントコンソール上からはドメイン参加できたように見えます。

AD DCにRDP接続すると確かにSMBサーバーのコンピューターオブジェクトが作成されていました。

参加時刻的にも一致しています。

ONTAP CLIから管理アクティビティの監査ログを確認して、ドメイン参加する様子も確認できました。
::> security audit log show -fields timestamp, node, application, vserver, username, input, state, message -state Error|Success -timestamp >"Thu Nov 06 13:12:58 2025"
timestamp node application vserver username input state message
-------------------------- ------------------------- ----------- ---------------------- ----------------- ------------------------- ------- -------
"Thu Nov 06 13:15:04 2025" FsxId07c27efc1a91f5866-02 ssh FsxId07c27efc1a91f5866 fsx-control-plane set -privilege diagnostic Success -
"Thu Nov 06 13:15:04 2025" FsxId07c27efc1a91f5866-02 internal FsxId07c27efc1a91f5866 root 8003e900000006c3:8003e900000006c5 :: FsxId07c27efc1a91f5866:ssh :: 52.87.48.44:unknown :: FsxId07c27efc1a91f5866:fsx-control-plane:admin :: system node run -node * -command "wafl bufstats" :: Success: 2 entries were acted on.
Success -
"Thu Nov 06 13:15:04 2025" FsxId07c27efc1a91f5866-02 ssh FsxId07c27efc1a91f5866 fsx-control-plane Logging out Success -
"Thu Nov 06 13:15:05 2025" FsxId07c27efc1a91f5866-02 http FsxId07c27efc1a91f5866 fsx-control-plane POST /api/private/cli : {"input":"set -privilege diagnostic ; system node run -node * -command \"wafl bufstats\""}
Success -
"Thu Nov 06 13:15:05 2025" FsxId07c27efc1a91f5866-02 ssh FsxId07c27efc1a91f5866 fsx-control-plane set -privilege diagnostic Success -
"Thu Nov 06 13:15:05 2025" FsxId07c27efc1a91f5866-02 ssh FsxId07c27efc1a91f5866 fsx-control-plane security login unlock -username diag
Success -
"Thu Nov 06 13:15:05 2025" FsxId07c27efc1a91f5866-02 internal FsxId07c27efc1a91f5866 root 8003e900000006cc:8003e900000006cf :: FsxId07c27efc1a91f5866:ssh :: 52.87.48.44:unknown :: FsxId07c27efc1a91f5866:fsx-control-plane:admin :: system node systemshell -node * -command "top -d 1 -s 1" :: Success: 2 entries were acted on.
Success -
"Thu Nov 06 13:15:05 2025" FsxId07c27efc1a91f5866-02 ssh FsxId07c27efc1a91f5866 fsx-control-plane Logging out Success -
"Thu Nov 06 13:15:05 2025" FsxId07c27efc1a91f5866-02 http FsxId07c27efc1a91f5866 fsx-control-plane POST /api/private/cli : {"input":"set -privilege diagnostic ; security login unlock -username diag;systemshell -node * -command \"top -d 1 -s 1\""}
Success -
"Thu Nov 06 13:17:30 2025" FsxId07c27efc1a91f5866-01 http FsxId07c27efc1a91f5866 fsx-control-plane POST /api/svm/svms/?return_records=true : {"name":"svm-test","subtype":"default","aggregates":[{"name":"aggr1","uuid":"5e28baa3-baf9-11f0-b480-0d903000a7d4"}],"nfs":{"enabled":true},"cifs":{"enabled":true},"iscsi":{"enabled":true},"fcp":{"enabled":false},"nvme":{"enabled":false},"ip_interfaces":[{"name":"iscsi_1","ip":{"address":"10.0.0.247","netmask":"24"},"location":{"home_node":{"name":"FsxId07c27efc1a91f5866-01"},"broadcast_domain":{"name":"Fsx"}},"service_policy":"default-data-blocks"},{"name":"iscsi_2","ip":{"address":"10.0.0.110","netmask":"24"},"location":{"home_node":{"name":"FsxId07c27efc1a91f5866-02"},"broadcast_domain":{"name":"Fsx"}},"service_policy":"default-data-blocks"},{"name":"nfs_smb_management_1","ip":{"address":"10.0.0.222","netmask":"24"},"location":{"home_node":{"name":"FsxId07c27efc1a91f5866-01"},"broadcast_domain":{"name":"Fsx"}},"service_policy":...
Success -
"Thu Nov 06 13:17:50 2025" FsxId07c27efc1a91f5866-01 http FsxId07c27efc1a91f5866 fsx-control-plane PATCH /api/network/ip/interfaces/f66accb8-bb12-11f0-b480-0d903000a7d4 : {"location":{"auto_revert":true}}
Success -
"Thu Nov 06 13:17:50 2025" FsxId07c27efc1a91f5866-01 http FsxId07c27efc1a91f5866 fsx-control-plane POST /api/protocols/nfs/export-policies/ : {"svm":{"uuid":"f27491fa-bb12-11f0-b480-0d903000a7d4"},"name":"fsx-root-volume-policy","rules":[{"index":1,"protocols":["any"],"superuser":["any"],"clients":[{"match":"0.0.0.0/0"}],"ro_rule":["any"],"rw_rule":["never"]}]}
Success -
"Thu Nov 06 13:17:51 2025" FsxId07c27efc1a91f5866-01 http FsxId07c27efc1a91f5866 fsx-control-plane PATCH /api/storage/volumes/f585f901-bb12-11f0-9d91-b3fa51bb32b8 : {"nas":{"export_policy":{"name":"fsx-root-volume-policy"},"security_style":"ntfs"}}
Success -
timestamp node application vserver username input state message
-------------------------- ------------------------- ----------- ---------------------- ----------------- ------------------------- ------- -------
"Thu Nov 06 13:17:51 2025" FsxId07c27efc1a91f5866-01 http FsxId07c27efc1a91f5866 fsx-control-plane PATCH /api/protocols/nfs/export-policies/17179869185 : {"rules":[{"index":1,"protocols":["any"],"superuser":["any"],"clients":[{"match":"0.0.0.0/0"}],"ro_rule":["any"],"rw_rule":["any"]}]}
Success -
"Thu Nov 06 13:17:51 2025" FsxId07c27efc1a91f5866-01 http FsxId07c27efc1a91f5866 fsx-control-plane PATCH /api/network/ip/service-policies/f60beb4c-bb12-11f0-9d91-b3fa51bb32b8 : {"services":["data_nfs","data_dns_server","data_s3_server","data_cifs","management_https","data_core","management_ssh"]}
Success -
"Thu Nov 06 13:17:51 2025" FsxId07c27efc1a91f5866-01 http FsxId07c27efc1a91f5866 fsx-control-plane PATCH /api/network/ip/service-policies/f61011ee-bb12-11f0-9d91-b3fa51bb32b8 : {"services":["management_ldap_client","management_nis_client","data_iscsi","data_fpolicy_client","data_core","management_ad_client","management_dns_client"]}
Success -
"Thu Nov 06 13:17:51 2025" FsxId07c27efc1a91f5866-01 http FsxId07c27efc1a91f5866 fsx-control-plane PATCH /api/network/ip/service-policies/f60ebeed-bb12-11f0-9d91-b3fa51bb32b8 : {"services":["management_ldap_client","management_nis_client","data_iscsi","data_fpolicy_client","data_core","management_ad_client","management_dns_client"]}
Success -
"Thu Nov 06 13:17:51 2025" FsxId07c27efc1a91f5866-01 http FsxId07c27efc1a91f5866 fsx-control-plane PATCH /api/network/ip/interfaces/f6364ce0-bb12-11f0-b480-0d903000a7d4 : {"location":{"failover":"home_port_only"},"service_policy":{"name":"default-data-iscsi","uuid":"f61011ee-bb12-11f0-9d91-b3fa51bb32b8"}}
Success -
"Thu Nov 06 13:17:52 2025" FsxId07c27efc1a91f5866-01 http FsxId07c27efc1a91f5866 fsx-control-plane PATCH /api/network/ip/interfaces/f6577ccb-bb12-11f0-9d91-b3fa51bb32b8 : {"location":{"failover":"home_port_only"},"service_policy":{"name":"default-data-iscsi","uuid":"f61011ee-bb12-11f0-9d91-b3fa51bb32b8"}}
Success -
"Thu Nov 06 13:17:52 2025" FsxId07c27efc1a91f5866-01 http FsxId07c27efc1a91f5866 fsx-control-plane POST /api/network/ip/routes/ : {"svm":{"uuid":"f27491fa-bb12-11f0-b480-0d903000a7d4"},"destination":{"address":"0.0.0.0","netmask":"0"},"gateway":"10.0.0.1"}
Success -
"Thu Nov 06 13:17:53 2025" FsxId07c27efc1a91f5866-01 http FsxId07c27efc1a91f5866 fsx-control-plane POST /api/name-services/dns/ : {"domains":["corp.non-97.net"],"servers":["10.0.0.139"],"svm":{"uuid":"f27491fa-bb12-11f0-b480-0d903000a7d4"}}
Success -
"Thu Nov 06 13:17:53 2025" FsxId07c27efc1a91f5866-01 http FsxId07c27efc1a91f5866 fsx-control-plane POST /api/protocols/cifs/services/ : {"svm":{"uuid":"f27491fa-bb12-11f0-b480-0d903000a7d4"},"name":"SVM-TEST","enabled":true,"ad_domain":{"fqdn":"corp.non-97.net","user":"FSxServiceAccount","password":***,"organizational_unit":"OU=FSxForONTAP,DC=corp,DC=non-97,DC=net"}}
Success -
timestamp node application vserver username input state message
-------------------------- ------------------------- ----------- ---------------------- ----------------- ------------------------- ------- -------
"Thu Nov 06 13:18:03 2025" FsxId07c27efc1a91f5866-01 http FsxId07c27efc1a91f5866 fsx-control-plane PATCH /api/private/cli/vserver/services/name-service/dns/dynamic-update/?vserver=svm-test : {"vserver_fqdn":"SVM-TEST.corp.non-97.net","use_secure":true,"is_enabled":true}
Success -
"Thu Nov 06 13:18:04 2025" FsxId07c27efc1a91f5866-01 http FsxId07c27efc1a91f5866 fsx-control-plane POST /api/private/cli/vserver/services/name-service/dns/dynamic-update/record/add : {"vserver":"svm-test","lif":"nfs_smb_management_1"}
Success -
"Thu Nov 06 13:18:04 2025" FsxId07c27efc1a91f5866-01 http FsxId07c27efc1a91f5866 fsx-control-plane POST /api/private/cli/vserver/cifs/users-and-groups/local-group/add-members : {"vserver":"svm-test","group_name":"BUILTIN\\Administrators","member_names":["corp.non-97.net\\Domain Admins"]}
Error Cannot add "CORP.NON-97.NET\Domain Admins" to group "BUILTIN\Administrators". Reason: duplicate entry.
"Thu Nov 06 13:18:06 2025" FsxId07c27efc1a91f5866-01 http FsxId07c27efc1a91f5866 fsx-control-plane PATCH /api/protocols/nfs/services/f27491fa-bb12-11f0-b480-0d903000a7d4 : {"protocol":{"v4_grace_seconds":60}}
Success -
"Thu Nov 06 13:18:06 2025" FsxId07c27efc1a91f5866-01 http FsxId07c27efc1a91f5866 fsx-control-plane PATCH /api/protocols/nfs/services/f27491fa-bb12-11f0-b480-0d903000a7d4 : {"protocol":{"v4_id_domain":"ec2.internal"}}
Success -
27 entries were displayed.
また、SMBサーバーがドメイン参加していることも確認できました。
::> vserver show
Admin Operational Root
Vserver Type Subtype State State Volume Aggregate
----------- ------- ---------- ---------- ----------- ---------- ----------
svm-test data default running running svm_test_ aggr1
root
svm1 data default running running svm1_root aggr1
2 entries were displayed.
::> cifs show
Server Status Domain/Workgroup Authentication
Vserver Name Admin Name Style
----------- --------------- --------- ---------------- --------------
svm-test SVM-TEST up CORP domain
::> cifs show -instance
Vserver: svm-test
CIFS Server NetBIOS Name: SVM-TEST
NetBIOS Domain/Workgroup Name: CORP
Fully Qualified Domain Name: CORP.NON-97.NET
Organizational Unit: OU=FSxForONTAP,DC=corp,DC=non-97,DC=net
Default Site Used by LIFs Without Site Membership:
Workgroup Name: -
Authentication Style: domain
CIFS Server Administrative Status: up
CIFS Server Description:
List of NetBIOS Aliases: -
やはり、最初のSVMはSMBサーバーがドメイン参加できていないようです。
ちなみに、AWSマネジメントコンソール上では以下のように使用しているシークレットが表示されていました。

AWS側からドメイン参加する際にはSecrets Managerとの統合機能を使おう
Amazon FSx for NetApp ONTAPとAmazon FSx for Windows ServerのActive Directory認証情報がAWS Secrets Manager と統合されたアップデートを紹介しました。
AWS側からドメイン参加する際にはSecrets Managerとの統合機能を使いましょう。
特に、私のように検証で何回もドメイン参加をする人からすると、機微である認証情報を都度コピペする必要がなくなるのは嬉しいです。
この記事が誰かの助けになれば幸いです。
以上、クラウド事業本部 コンサルティング部の のんピ(@non____97)でした!







