概要
- S3にアップロードするオブジェクト(ファイル)所有者についてまとめる
「オブジェクト所有者」って?
オブジェクト所有者の設定
ACLを無効にする(推奨)
-
AWSの公式で下記の様に説明されている。
バケットオーナー強制 バケットとオブジェクトのACLは無効になり、バケットオーナーであるあなたは自動的にバケット内のすべてのオブジェクトを所有し、完全に制御することができます。 バケットとその中のオブジェクトのアクセス制御は、IAMポリシーやS3バケットポリシーなどのポリシーに基づきます。 オブジェクトは、ACLを指定しないか、バケットオーナーのフルコントロールACLを使用する場合のみ、あなたのバケットにアップロードすることができます。
-
要約するとおそらく下記の様になる。
- アップロードされたオブジェクトのオーナーはバケットを作成したオーナーに設定します。
- オブジェクトへのアクセス制御はオーナーのIAMポリシーやS3のバケットポリシーがそのまま適用されます。
- オブジェクトをアップロードする時は何も指定しないでアップロードしてください。
-
「ACLを無効に設定する(推奨)」を選んだ場合、アップロードに使うIAMの権限やバケットポリシーをそのままアップロードファイルに当てはめでS3がよしなにやってくれるってことのようだ。
ACLを有効にする
-
ACLを有効にする際は更に2個の設定に分かれる。
-
バケット所有者優先
-
AWSの公式で下記の様に説明されている。
バケット所有者優先 バケットとオブジェクトのACLは受け入れられ、尊重されます。Bucket-owner-full-control Canned ACL を使ってアップロードされた新しいオブジェクトは、自動的にオブジェクトの作者ではなく、Bucket の所有者に所有されます。 この定型 ACL を持たずにアップロードされたオブジェクトは、オブジェクト ライターによって所有されます。他のすべての ACL の動作はそのままです。 この設定は、既存のオブジェクトの所有権には影響しません。 すべての Amazon S3 PUT 操作に bucket-owner-full-control 定義 ACL を含めることを要求するには、この ACL を使用してオブジェクトのアップロードのみを許可するバケット ポリシーを追加してください。
-
要約するとおそらく下記の様になる。
- ACL(アクセスコントロール)が指定された場合、そのACLの内容を使ってアップロードオブジェクトのオーナーを設定します。
- ACLを指定しなかった場合、オブジェクトを書き込んでいるオブジェクトライター(多分IAMユーザー)をオーナーとして設定します。
-
「ACLを有効にする → バケット所有者優先」を選んだ場合、ACLを指定した時はそのACLの設定を用いてオブジェクトのオーナーを設定する。ACLを指定しなかった時はファイルをアップロードしているオブジェクトライターをオブジェクトのオーナーとして設定する。
-
-
オブジェクトライター
-
AWSの公式で下記の様に説明されている。
オブジェクトライター オブジェクトは、オブジェクトライターがバケットオーナーと異なるアカウントであっても、それらをアップロードしたAWSアカウントによって所有されます。バケットオーナーであるあなたは、バケットポリシーを使って、他のAWSアカウントが所有するオブジェクトへのアクセスを許可することはできません。 オブジェクトライター、またはあなたがオブジェクトライターからオブジェクトACL経由で適切な許可を得た場合、これらのオブジェクトに対するアクセス許可をオブジェクトACLで管理します。
-
要約するとおそらく下記の様になる。
- アップロードオブジェクトのオーナーはオブジェクトを書き込んでいるオブジェクトライター(多分IAMユーザー)を設定します。
- バケットを作ったIAMユーザーとは別のIAMユーザーがオブジェクトをアップロードしてもオブジェクトをアップロードしたIAMユーザーがオブジェクトのオーナーとなります。
-
「ACLを有効にする → オブジェクトライター」を選んだ場合、とにかくオブジェクトをアップロードししたIAMユーザーがオーナーになる。
-
まとめ
- 特に理由がない限り「ACLを無効にする(推奨)」を選んでIAMロール・バケットポリシーで公開・非公開・アクセス許可などを行ったほうが良さそう。