AWS CloudFormation(CFn)でAmazon S3(S3)のブロックパブリックアクセスを設定するのに必要なアクセス許可をCFnのエラーを信じたら騙されたのでメモ。
S3のブロックパブリックアクセスに関しては下記が参考になります。
Amazon S3 Block Public Access – アカウントとバケットのさらなる保護 | Amazon Web Services ブログ
https://aws.amazon.com/jp/blogs/news/amazon-s3-block-public-access-another-layer-of-protection-for-your-accounts-and-buckets/
S3パブリックアクセス設定を試してみる – Qiita
https://qiita.com/atsumjp/items/cb6ddf5e3df4bbf5e4a7
手順
テンプレートを用意
こんな感じのテンプレートを用意します。PublicAccessBlockConfiguration
でブロックパブリックアクセスの設定をします。
※BucketName
は任意に指定ください。
template.yaml
AWSTemplateFormatVersion: "2010-09-09" Resources: PublicAccessBlockTestBucket: Type: AWS::S3::Bucket Properties: BucketName: "kai-public-access-block-test" PublicAccessBlockConfiguration: BlockPublicAcls: True BlockPublicPolicy: True IgnorePublicAcls: True RestrictPublicBuckets: True
AWSマネジメントコンソールだとこんな画面で設定します。
AWSユーザーの作成
CFnでスタック作成、リソース管理するのに利用するAWSユーザーを作成して、インラインポリシーで最低限のアクセス許可をします。
インラインポリシー
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "cloudformation:CreateStack", "cloudformation:DeleteStack", "s3:CreateBucket", "s3:DeleteBucket" ], "Resource": "*" } ] }
スタック作成
ブロックパブリックアクセスを設定するためのActionは最初わからなかったので指定せずにCFnでスタック作成してみました。
> aws cloudformation create-stack \ --template-body file://template.yaml \ --stack-name kai-public-access-block-test \ --profile public-access-block-test
すると、API: s3:PutPublicAccessBlock Access Denied
ってエラーになったので、インラインポリシーのActionにs3:PutPublicAccessBlock
を指定してみると。。。
識別されないアクションとなりました(´・ω・`)
なぜー?CFnさんが嘘ついてるの?
正しい指定方法を調べてみた
調べてみると、s3:PutBucketPublicAccessBlock
が正しいみたいです。
Amazon S3 ブロックパブリックアクセスの使用 – Amazon Simple Storage Service
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/access-control-block-public-access.html
インラインポリシー
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "cloudformation:CreateStack", "cloudformation:DeleteStack", "s3:CreateBucket", "s3:DeleteBucket", "s3:PutBucketPublicAccessBlock" ], "Resource": "*" } ] }
インラインポリシーにs3:PutBucketPublicAccessBlock
を追加してスタック作成すると無事にS3バケットのブロックパブリックアクセスが設定できました。
参考
Amazon S3 Block Public Access – アカウントとバケットのさらなる保護 | Amazon Web Services ブログ
https://aws.amazon.com/jp/blogs/news/amazon-s3-block-public-access-another-layer-of-protection-for-your-accounts-and-buckets/
S3パブリックアクセス設定を試してみる – Qiita
https://qiita.com/atsumjp/items/cb6ddf5e3df4bbf5e4a7
Amazon S3 ブロックパブリックアクセスの使用 – Amazon Simple Storage Service
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/access-control-block-public-access.html
元記事はこちら
「AWS CloudFormationでAmazon S3のブロックパブリックアクセスを設定するのに必要なアクセス許可設定」