S3のACL設定方法がCloudFormationとマネコンで異なるので対比してみた

S3のACL設定について、CloudFormationとマネジメントコンソールで設定方法が異なります。

マネコンでは細かくBucketACLが設定できますが、CFnでは既定ACLのみ設定が可能です。
この既定ACLをCFnで設定した場合、マネジメントコンソールでどういう設定になるのかドキュメントを読んでもよくわからなかったので、マネコンでどう表示されることになるのか試してみました。

S3のACL設定について

S3のBucketACLはマネジメントコンソールで設定できます。

CFnでもこんな風にBucketACLが設定できます。

AWS::S3::Bucket - AWS CloudFormation

AWSTemplateFormatVersion: '2010-09-09'

Resources:
  AuthenticatedReadS3:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: authenticated-read-s3-sample
      AccessControl: AuthenticatedRead

CFnのAccessControlには、既定ACLである以下の値が設定可能です。

  • AuthenticatedRead
  • AwsExecRead
  • BucketOwnerRead
  • BucketOwnerFullControl
  • LogDeliveryWrite
  • Private
  • PublicRead
  • PublicReadWrite`

既定ACLについてはこのドキュメントに記載されています。

アクセスコントロールリスト (ACL) の概要 - Amazon Simple Storage Service

が、正直読んでもいまいちわからんかったので、CFnでAccessControl値を設定するとマネコンでどういう設定になるのかの対比を作りました。

AccessControl: 設定なし

設定なしのデフォルトでは、自分だけが参照・書き込みができる状態です。

AccessControl: Private

設定なしと同じです。
ドキュメントに記載のとおり、Privateがデフォルトです。

所有者は FULL_CONTROL を取得します。他のユーザーにはアクセス許可は付与されません (デフォルト)。

AccessControl: PublicRead

パブリックになります。
Everyoneがオブジェクトを参照できる状態です。

AccessControl: PublicReadWrite

パブリックになります。
Everyoneがオブジェクトを参照・書き込みできる状態です。

AccessControl: AwsExecRead

調べてみたけど、いまいち用途がわかりませんでした。何らかのユーザーがオブジェクトを参照できる状態です。
私はよくわかっていないので設定しないようにします。(知っている方、教えてください)

AccessControl: AuthenticatedRead

パブリックになります。
Any AWS userからオブジェクトの参照ができる状態です。

AccessControl: BucketOwnerRead

設定なしと同じです。
ドキュメントに記載のとおり、作成時に指定しても無視されます。

オブジェクト所有者は FULL_CONTROL を取得します。バケット所有者は READ を取得します。バケットの作成時にこの既定 ACL を指定しても、Amazon S3 には無視されます。

AccessControl: BucketOwnerFullControl

設定なしと同じです。
ドキュメントに記載のとおり、作成時に指定しても無視されます。

オブジェクト所有者とバケット所有者はオブジェクトに対する FULL_CONTROL を取得します。バケットの作成時にこの既定 ACL を指定しても、Amazon S3 には無視されます。

AccessControl: LogDeliveryWrite

ログ配信のオブジェクトの書き込みとバケットのアクセス権限の読み取りを許可します。
ドキュメントに記載のとおり、S3サーバーアクセスのログ記録を許可する設定です。

LogDelivery グループはバケットに対する WRITE および READ_ACP アクセス許可を取得します。ログの詳細については、「Amazon S3 サーバーアクセスのログ記録」を参照してください。