S3 Files での POSIX アクセス許可
POSIX ファイルシステムでは、すべてのファイルに所有権とアクセス許可が必要です。Amazon S3 は、IAM ポリシーとバケットポリシーによってアクセスが制御されるオブジェクトとしてデータを保存しており、ファイルの所有権またはアクセス許可属性をネイティブに保存しません。S3 Files は、所有者、グループ、ファイルのアクセス許可を含む POSIX メタデータを各 S3 オブジェクトのユーザー定義メタデータとして保存することで、この違いを埋めます。S3 Files を使用してファイルを作成または変更すると、サービスはすべてのアクセス許可メタデータを自動的に書き込みます。Amazon S3 コンソール、AWS CLI、AWS SDK などを使用して、ファイルシステム外から S3 バケットにオブジェクトが書き込まれる場合、そのオブジェクトに POSIX メタデータは存在しません。S3 Files は、これらのオブジェクトに root:root 所有権と 644 アクセス許可のデフォルト値を割り当てます。これにより、ルート以外のユーザーはファイルを読み取ることはできますが、書き込むことはできません。これらのデフォルトがお客様のアクセス要件を満たしている場合、操作は必要ありません。アプリケーションで必要な場合は、それらのオブジェクトに対するデフォルトのアクセス許可を上書きできます。このチュートリアルでは、カスタムアクセス許可を適用する方法について説明します。
S3 Files が POSIX メタデータを保存する方法
S3 Files は、POSIX 情報を各オブジェクトのユーザー定義メタデータとして保存します。次のメタデータキーは、所有権とアクセス許可を制御します。
| メタデータキー | 説明 | 値の例 |
|---|---|---|
x-amz-meta-file-owner |
POSIX ユーザー ID (UID) | 1000 |
x-amz-meta-file-group |
POSIX グループ ID (GID) | 1000 |
x-amz-meta-file-permissions |
ファイルタイプとアクセス許可ビット (8 進数) | 0100644 |
オブジェクトに POSIX メタデータがない場合、S3 Files は次のデフォルトを適用します。
ファイル: 所有者は
root:root、アクセス許可は0644(-rw-r--r--)ディレクトリ: 所有者は
0755、アクセス許可はroot:root(drwxr-xr-x)
これらのデフォルトでは、すべてのユーザーがファイルの読み取りやディレクトリのトラバースを行えますが、書き込むことができるのは所有者 (ルート) のみです。ファイルは、デフォルトでは実行可能ではありません。
既存のオブジェクトに POSIX メタデータを設定する
次の手順を使用して、バケットに既に存在するオブジェクトに POSIX の所有権とアクセス許可を適用します。
ステップ 1: ターゲットユーザーの UID と GID を特定する
この例では、ターゲットユーザーは UID 1000 の ec2-user です。
$ id ec2-user uid=1000(ec2-user) gid=1000(ec2-user) groups=1000(ec2-user)
ステップ 2: copy-object を使用してオブジェクトのメタデータを更新する
aws s3api copy-object コマンドは、更新されたメタデータを使用して、所定の場所にオブジェクトをコピーします。BUCKET_NAME と OBJECT_KEY を独自の値に置き換えます。
--metadata-directive REPLACE オプションは、オブジェクトのすべてのユーザー定義メタデータを置き換えます。REPLACE はデフォルト (binary/octet-stream) にリセットするため、オブジェクトのコンテンツタイプを保持するには --content-type を含めます。他のメタデータフィールドを使用する場合は、--metadata パラメータに含めます。
aws s3api copy-object \ --bucket BUCKET_NAME \ --key OBJECT_KEY \ --copy-source BUCKET_NAME/OBJECT_KEY \ --metadata-directive REPLACE \ --content-type CONTENT_TYPE \ --metadata '{"file-owner":"1000", "file-group":"1000", "file-permissions":"0100644"}'
ステップ 3: メタデータが適用されたことを確認する
次のコマンドを実行して、メタデータを確認します。
aws s3api head-object --bucket BUCKET_NAME --key OBJECT_KEY
レスポンスには POSIX メタデータが含まれます。
{ "AcceptRanges": "bytes", "LastModified": "Mon, 18 May 2026 14:43:00 GMT", "ContentLength": 7214, "ETag": "\"abc123...\"", "ContentType": "image/png", "Metadata": { "file-owner": "1000", "file-group": "1000", "file-permissions": "0100644" } }
ステップ 4: S3 ファイルシステムのアクセス許可を検証する
$ ls -ltr /mnt/s3files/ -rw-r--r--. 1 ec2-user ec2-user 7214 May 18 14:43 s3.png
ファイルは ec2-user によって所有され、アクセスにルートが不要になりました。
新しいアップロードでの POSIX メタデータの設定
バケットにオブジェクトをアップロードするときに、POSIX メタデータを含めることができます。
aws s3 cp を使用する
aws s3 cp localfile.txt s3://BUCKET_NAME/localfile.txt \ --metadata '{"file-owner":"1000", "file-group":"1000", "file-permissions":"0100644"}'
aws s3api put-object を使用する
aws s3api put-object \ --bucket BUCKET_NAME \ --key localfile.txt \ --body localfile.txt \ --metadata '{"file-owner":"1000", "file-group":"1000", "file-permissions":"0100644"}'
アップロードされたオブジェクトのメタデータを検証する
aws s3api head-object --bucket BUCKET_NAME --key localfile.txt
アクセス許可の値のリファレンス
次の表に、一般的な POSIX アクセス許可の値とそのユースケースを示します。
| 8 進数値 | ファイルモード | ユースケース |
|---|---|---|
0100644 |
-rw-r--r-- |
標準ファイル: 所有者は読み取り/書き込み、その他は読み取り専用 |
0100664 |
-rw-rw-r-- |
共有ファイル: 所有者とグループは読み取り/書き込み、その他は読み取り専用 |
0100755 |
-rwxr-xr-x |
実行可能: 所有者はフルアクセス、他のユーザーは読み取りと実行 |
0100666 |
-rw-rw-rw- |
ワールド書き込み可能ファイル: すべてのユーザーが読み書きできます |
0040755 |
drwxr-xr-x |
標準ディレクトリ: 所有者はフルアクセス、その他は読み取りとトラバース |
ベストプラクティス
可能な限り、S3 ファイルシステムを介してファイルをアップロードします。S3 Files では、ファイルの所有権とアクセス許可がオブジェクトメタデータとして自動的に保存されるため、追加のステップは必要ありません。S3 バケットに直接アップロードする場合は、アップロードコマンドに POSIX メタデータを含めて、適切な所有権とアクセス許可が最初から設定されていることを確認します。