0
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?

AWS S3コマンドの基本から応用までの使い方を全5回で整理してみる - 第3回:オブジェクトメタデータと権限管理

Last updated at Posted at 2025-08-02

第3回:オブジェクトメタデータと権限管理

はじめに

S3は、単にファイルを保存するだけでなく、それぞれのオブジェクトにメタデータと呼ばれる付加情報を付与できます。これにより、オブジェクトの用途や性質を詳細に管理できます。また、誰がどのオブジェクトにアクセスできるかを制御するアクセス権限の設定は、S3を安全に運用する上で不可欠な要素です。

第3回では、S3オブジェクトのメタデータ操作と、アクセス権限を管理する主要な方法であるバケットポリシーACL(Access Control List)について、AWS CLIを使った実践的な方法を解説します。


メタデータ操作

メタデータには、Content-Type(ファイルのMIMEタイプ)、Cache-Control(ブラウザのキャッシュ制御)、そしてユーザーが自由に定義できるカスタムメタデータがあります。

1. aws s3 cpコマンドでのメタデータ指定(--metadata

aws s3 cp コマンドでファイルをアップロードする際に、--metadata オプションを使ってカスタムメタデータを指定できます。キーと値をカンマで区切って指定します。

aws s3 cp local_file.txt s3://my-bucket/remote_file.txt --metadata "author=taro,project=qiita-blog"

このコマンドを実行すると、remote_file.txt というオブジェクトに author: taroproject: qiita-blog という2つのカスタムメタデータが設定されます。

2. aws s3 cpでのACL指定(--acl

--acl オプションを使うと、オブジェクトのアップロードと同時に、そのオブジェクトに対するアクセス権限を設定できます。代表的なACLは以下の通りです。

  • private: バケット所有者のみがアクセス可能(デフォルト)
  • public-read: 誰でもオブジェクトを読み取り可能
  • public-read-write: 誰でもオブジェクトの読み書きが可能

ウェブサイトの静的コンテンツとして公開したい場合などに public-read を指定します。

aws s3 cp public-image.jpg s3://my-bucket/images/public-image.jpg --acl public-read

3. 既存のオブジェクトのメタデータ変更(aws s3api copy-objectの利用)

S3コマンドには、既存のオブジェクトのメタデータを直接変更するコマンドは存在しません。代わりに、copy-object API を使って、同じバケット内に上書きコピーすることでメタデータを更新します。

aws s3api copy-object コマンドは、コピー元のメタデータを保持するか、新しく指定するかを選択できます。--metadata-directive REPLACE を指定することで、既存のメタデータを新しいものに置き換えることができます。

# 既存のオブジェクトのメタデータを更新
aws s3api copy-object \
--bucket my-bucket \
--key my_file.txt \
--copy-source my-bucket/my_file.txt \
--metadata "new_author=jiro" \
--metadata-directive REPLACE

このコマンドは、my-file.txt を同じ場所に上書きコピーし、メタデータを new_author: jiro に更新します。


パブリックアクセス設定

S3バケットは、デフォルトではプライベートであり、インターネットから直接アクセスすることはできません。静的ウェブサイトホスティングなど、特定のケースでパブリックアクセスを許可したい場合は、設定が必要です。

1. aws s3api put-public-access-block(バケット全体のパブリックアクセス設定)

AWSでは、意図しないパブリックアクセスを防ぐために、バケットレベルで「パブリックアクセスブロック」機能を推奨しています。デフォルトでは、すべてのパブリックアクセスがブロックされています。

もしバケットを公開したい場合は、この設定を無効にする必要があります。

{
  "BlockPublicAcls": false,
  "IgnorePublicAcls": false,
  "BlockPublicPolicy": false,
  "RestrictPublicBuckets": false
}

このJSONファイル(public_access_config.jsonなど)を準備し、以下のコマンドで設定します。

aws s3api put-public-access-block \
--bucket my-public-website-bucket \
--public-access-block-configuration file://public_access_config.json

この操作は慎重に行う必要があります。誤った設定は、機密情報の漏洩につながる可能性があります。

2. S3オブジェクトのURLの取得方法

パブリックアクセスが許可されたオブジェクトには、直接アクセスできるURLが存在します。

  • aws s3 presign: 一時的な署名付きURLを生成します。

    # 署名付きURLを1時間(3600秒)有効で生成
    aws s3 presign s3://my-private-bucket/private_file.txt --expires-in 3600
    
  • パブリックURLの構成:
    パブリックアクセスが許可されている場合、オブジェクトのURLは以下の形式で構成されます。

    https://<bucket-name>.s3.<region>.amazonaws.com/<object-key>
    

    例: https://my-bucket.s3.ap-northeast-1.amazonaws.com/images/public-image.jpg


バケットポリシーとACL

S3のアクセス権限管理には、主にバケットポリシーACLの2つの方法があります。

  • バケットポリシー: バケット全体、または特定のオブジェクト群に対して、誰にどのようなアクセスを許可・拒否するかをJSON形式で記述します。IAMユーザー、AWSアカウント、匿名ユーザーなど、様々なプリンシパル(アクセス主体)に対して詳細な制御が可能です。

  • ACL (Access Control List): 各バケットやオブジェクトに個別に設定する、シンプルで粒度の粗いアクセス制御リストです。

1. バケットポリシーの設定(aws s3api put-bucket-policy

バケットポリシーを設定するには、まずポリシーの内容をJSONファイルとして作成します。

例:特定のIAMユーザーにバケットへの読み取りアクセスを許可するポリシー

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/my-iam-user"
            },
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::my-policy-bucket",
                "arn:aws:s3:::my-policy-bucket/*"
            ]
        }
    ]
}

このポリシーを policy.json という名前で保存し、以下のコマンドで設定します。

aws s3api put-bucket-policy \
--bucket my-policy-bucket \
--policy file://policy.json

設定したポリシーを確認するには、aws s3api get-bucket-policy を使用します。

2. ACLの確認と設定

ACLは、バケットレベルとオブジェクトレベルの両方で設定できます。aws s3api get-object-aclaws s3api put-object-acl を使って設定します。

例:オブジェクトのACLを確認

aws s3api get-object-acl --bucket my-bucket --key my_file.txt

例:オブジェクトのACLを設定

--grant-read オプションなどを使って、権限を付与することができます。

# AuthenticatedUsers(AWSアカウントを持つすべてのユーザー)に読み取り権限を付与
aws s3api put-object-acl \
--bucket my-bucket \
--key my_file.txt \
--grant-read uri=http://acs.amazonaws.com/groups/global/AuthenticatedUsers

ACLはシンプルなアクセス制御には便利ですが、AWSではより詳細な制御が可能なバケットポリシーの使用を推奨しています。


まとめ

第3回では、S3オブジェクトの付加情報であるメタデータと、重要なセキュリティ機能であるアクセス権限管理について学びました。

本記事のポイント

  • aws s3 cp--metadata--acl オプションで、アップロード時にオブジェクトの情報を設定できます。
  • 既存オブジェクトのメタデータは、aws s3api copy-object を使って上書きコピーすることで変更します。
  • aws s3api put-public-access-block でバケットのパブリックアクセスを制御し、セキュリティを確保します。
  • アクセス権限管理には、詳細な設定が可能なバケットポリシーと、シンプルなACLがあります。AWS CLIを使ってこれらを適切に設定することで、安全なS3運用が可能になります。

次回の記事では、S3の運用コストを最適化するためのライフサイクル管理と、データ保全のためのバージョニングについて解説します。

0
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
0
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?