share facebook facebook facebook twitter twitter menu hatena pocket slack

2020.02.25 TUE

AWS CloudFormationでAmazon S3のブロックパブリックアクセスを設定するのに必要なアクセス許可設定

甲斐 甲

WRITTEN BY 甲斐 甲

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のブロックパブリックアクセスを設定するのに必要なアクセス許可設定

甲斐 甲

甲斐 甲

2018/7にJOIN。 最近の好みはサーバレスです。なんでもとりあえず試します。

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。