Amazon FSx for NetApp ONTAPのS3 Access Pointのポリシーでマルチバイト文字が使用できるか確認してみた
S3 Access Pointのポリシーでマルチバイト文字が使用できるか気になる
こんにちは、のんピ(@non____97)です。
皆さんはS3 Access Pointのポリシーでマルチバイト文字が使用できるか気になったことはありますか? 私はあります。
以下記事で紹介しているようにAmazon FSx for NetApp ONTAP(以降FSxN)では、ボリュームにS3 Access PointをアタッチすることでS3 APIでやりとりすることができます。
私の今までの経験上、FSxNをSMBファイルサーバーとして使用する場合は漢字などのマルチバイト文字がファイルやフォルダ名に含まれていることがほとんどです。
ということで、S3 Access Pointで制御をする際にもマルチバイト文字を考慮する必要があります。
例えば、このS3 Access Pointのこのディレクトリ配下へのアクセスは、特定のIAMロール以外は拒否するなどの場合に使用します。
以下AWS Blogsの記事ではユーザーのSIDとACLで許可されているSIDと照らし合わせてアクセスを許可/拒否する方法が紹介されていますが、非常に骨が折れます。
個人的にはざっくりとしたグループ単位での権限分離で良いのであれば、ディレクトリパスおよびS3 Access Policy単位でKnowledge Bases自体を分離して、ユーザーがアクセスする口自体を分けて提供する方が実装コストもメンテナンスコストも低いのではと考えます。
実際にS3 Access Pointのポリシーでマルチバイト文字を使用して、アクセス制御をできることを確認してみました。
やってみた
検証環境
検証環境は以下のとおりです。

先述の記事とほぼ同じものを利用します。
SVM作成時には以下のようにドメイン参加をするように設定しています。

S3アクセスポイントは以下の用意に作成しました。作成時点はまだポリシーの定義をしていません。


AWS CLIでS3 Access Pointへアクセス
AWS CLIでS3 Access Pointへアクセスしてみましょう。
現在のボリューム内のファイルは以下のとおりです。

AWS CLIでも確認してみましょう。
> aws s3 ls s3://vol1-ybt4k1rzrw9nzk8gxwrbp4as4o7d4use1a-ext-s3alias/
PRE コアラ/
2026-04-29 11:26:11 53 金沢動物園のコアラリスト.txt
> aws s3 ls s3://vol1-ybt4k1rzrw9nzk8gxwrbp4as4o7d4use1a-ext-s3alias/コアラ
PRE コアラ/
> aws s3 ls --recursive s3://vol1-ybt4k1rzrw9nzk8gxwrbp4as4o7d4use1a-ext-s3alias
2026-04-29 11:27:57 2870346 コアラ/こまち.jpeg
2026-04-29 11:25:08 40 コアラ/多摩動物公園のコアラリスト.txt
2026-04-29 11:26:11 53 金沢動物園のコアラリスト.txt
> aws s3 cp s3://vol1-ybt4k1rzrw9nzk8gxwrbp4as4o7d4use1a-ext-s3alias/金沢動物園のコアラリスト.txt -
- コロン
- たんぽぽ
- ハリー
- ポポロ%
> aws s3 cp s3://vol1-ybt4k1rzrw9nzk8gxwrbp4as4o7d4use1a-ext-s3alias/コアラ/多摩動物公園のコアラリスト.txt -
- きらら
- あずま
- きんとき%
はい、何事もなくアクセスできていますね。
この状態でS3 Access Pointにポリシーを設定します。
設定したポリシーは以下のとおりです。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyAllKoalaObjectActions",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/vol1/object/コアラ/*"
},
{
"Sid": "DenyKoalaListing",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/vol1",
"Condition": {
"StringLike": {
"s3:prefix": ["コアラ/*", "コアラ"]
}
}
}
]
}
ポリシー設定時には特にエラーは発生しませんでした。
この状態で先ほどと同じコマンドを叩いてみます。
> aws s3 ls s3://vol1-ybt4k1rzrw9nzk8gxwrbp4as4o7d4use1a-ext-s3alias/
PRE コアラ/
2026-04-29 11:26:11 53 金沢動物園のコアラリスト.txt
> aws s3 ls s3://vol1-ybt4k1rzrw9nzk8gxwrbp4as4o7d4use1a-ext-s3alias/コアラ
aws: [ERROR]: An error occurred (AccessDenied) when calling the ListObjectsV2 operation: User: arn:aws:sts::<AWSアカウントID>:assumed-role/cm-yamamoto.ryota/cm-yamamoto.ryota is not authorized to perform: s3:ListBucket on resource: "arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/vol1" with an explicit deny in a resource-based policy
> aws s3 ls --recursive s3://vol1-ybt4k1rzrw9nzk8gxwrbp4as4o7d4use1a-ext-s3alias
2026-04-29 11:27:57 2870346 コアラ/こまち.jpeg
2026-04-29 11:25:08 40 コアラ/多摩動物公園のコアラリスト.txt
2026-04-29 11:26:11 53 金沢動物園のコアラリスト.txt
> aws s3 cp s3://vol1-ybt4k1rzrw9nzk8gxwrbp4as4o7d4use1a-ext-s3alias/金沢動物園のコアラリスト.txt -
- コロン
- たんぽぽ
- ハリー
- ポポロ%
> aws s3 cp s3://vol1-ybt4k1rzrw9nzk8gxwrbp4as4o7d4use1a-ext-s3alias/コアラ/多摩動物公園のコアラリスト.txt -
download failed: s3://vol1-ybt4k1rzrw9nzk8gxwrbp4as4o7d4use1a-ext-s3alias/コアラ/多摩動物公園のコアラリスト.txt to - An error occurred (403) when calling the HeadObject operation: Forbidden
はい、ポリシーで指定したようにコアラから始まるキーを指定してアクセスしようとした場合にはエラーになりました。ということで、マルチバイト文字での制御は問題なくできます。
指定した場合にのみエラーになるのがキモですね。結果にコアラから始まるものが含まれていたとしてもそれを制御することはできません。これはポリシーがリクエストに対しての制御であり、レスポンスに対する制御ではないためです。
Bedrock Knowledge Basesとの同期
Bedrock Knowledge Basesとの同期も確認します。
ポリシー変更前に同期済みの状態でした。ポリシー変更後に同期をかけた場合は特に同期エラーにはなりませんでした。

先述のAWS CLIで試した場合と同じく、オブジェクト一覧を取得してそのメタデータがBedrock Knowledge Basesで登録されているものと違いがないのであれば、アクセスはしないのでしょう。
Bedrock Knowledge Basesを再作成して、再度同期を行います。
すると、以下のように同期失敗となりました。

エラーの詳細を確認すると以下のようになっており、ポリシーで許可されていないファイルにアクセスしようとしてエラーになったことが分かります。
Encountered error: User: arn:aws:sts::<AWSアカウントID>:assumed-role/AwsCdkBedrockKbWithS3Acce-KnowledgeBaseRoleA3794006-ih46MLIxVBX5/DocumentLoaderTask-YJXE7GQDPR is not authorized to perform: s3:GetObject on resource: "arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/vol1/object/コアラ/多摩動物公園のコアラリスト.txt" with an explicit deny in a resource-based policy (Service: S3, Status Code: 403, Request ID: G1CAE873CN4XQQ53, Extended Request ID: Kiz79+w0D+KwUaH1uwXtKotLOgZNDioa+H4WqLelUCq2Fy3yXkP1Lx0jSQMKjoleW7RdXZv4HBw=) (SDK Attempt Count: 1). Issue occurred while processing file: コアラ/多摩動物公園のコアラリスト.txt. Call to Customer Source did not succeed.
Encountered error: User: arn:aws:sts::<AWSアカウントID>:assumed-role/AwsCdkBedrockKbWithS3Acce-KnowledgeBaseRoleA3794006-ih46MLIxVBX5/DocumentLoaderTask-YJXE7GQDPR is not authorized to perform: s3:GetObject on resource: "arn:aws:s3:us-east-1:<AWSアカウントID>:accesspoint/vol1/object/コアラ/こまち.jpeg" with an explicit deny in a resource-based policy (Service: S3, Status Code: 403, Request ID: G1C62Q6H8RFEK8A6, Extended Request ID: hiiMFfz3AS+SP1OwPhbyn8Nc+w4XqKjC8RA8E+tHLH8OyCzqq7qhY4vINhwvXMlkMG32fZ1lOy8=) (SDK Attempt Count: 1). Issue occurred while processing file: コアラ/こまち.jpeg. Call to Customer Source did not succeed.
マルチバイト文字を使っている環境でもS3 Access Pointは問題なく使用できる
Amazon FSx for NetApp ONTAPのS3 Access Pointのポリシーでマルチバイト文字が使用できるか確認してみました。
結論、マルチバイト文字を使っている環境でもS3 Access Pointは問題なく使用できると考えます。ただし、S3 APIのクライアントがマルチバイト文字をサポートしているとは限らないので、そこは注意しましょう。
この記事が誰かの助けになれば幸いです。
以上、クラウド事業本部 コンサルティング部の のんピ(@non____97)でした!






