Serverless Framework の resources で暗号化やブロックパブリックアクセスを有効化した S3 バケットを定義する
はじめに
こんにちは、筧(@TakaakiKakei)です。
Serverless Framework には resources というプロパティがあります。 このプロパティを使用すると、serverless deploy した際に、SNS トピック や S3 バケット などのリソースを作成することができます。
Serverless Framework - AWS Infrastructure Resources
今回、Serverless Framework で S3 バケットを作成するにあたり、 バケット側の暗号化やブロックパブリックアクセスを有効化したものを作成する機会があったので、 その設定内容についてご紹介します。
前提
Serverless Framework とは
サーバレス・アプリケーションを簡単に構築するためのツールです。
Develop, deploy, troubleshoot and secure your serverless applications with radically less overhead and cost by using the Serverless Framework. The Serverless Framework consists of an open source CLI and a hosted dashboard. Together, they provide you with full serverless application lifecycle management.
Serverless Framework Documentation
serveless.yml とは
Serverless Framework のメインとなる設定ファイルです。 必要なプラグインを定義したり、今回のように AWS リソースを定義したりします。
Serverless Framework - AWS Lambda Guide - Serverless.yml Reference
結論
service: {{サービス名}} frameworkVersion: '3' provider: name: aws runtime: python3.9 stage: ${opt:stage, 'dev'} region: ${opt:region, "ap-northeast-1"} environment: ${self:custom.environment.${self:provider.stage}} custom: environment: dev: BUCKET_NAME: {{バケット名}} resources: Resources: Bucket: Type: AWS::S3::Bucket Properties: AccessControl: Private BucketName: ${self:provider.environment.BUCKET_NAME} BucketEncryption: ServerSideEncryptionConfiguration: - ServerSideEncryptionByDefault: SSEAlgorithm: AES256 OwnershipControls: Rules: - ObjectOwnership: BucketOwnerEnforced PublicAccessBlockConfiguration: BlockPublicAcls: true BlockPublicPolicy: true IgnorePublicAcls: true RestrictPublicBuckets: true VersioningConfiguration: Status: Enabled LifecycleConfiguration: Rules: - Id: Expire-30days-life-cycle-rule Status: 'Enabled' ExpirationInDays: 30
serveless.yml の関連箇所を記載しました。 ハイライトは S3 バケットのプロパティに関する箇所です。 プロパティの設定内容について以下です。
- AccessControl:
- アクセスコントロールリスト。バケット所有者に FULL_CONTROL を付与。
- BucketName:
- バケット名。各ステージの BUCKET_NAMEに定義したものを参照。
- BucketEncryption:
- バケットの暗号化。Amazon S3 マネージドキー (SSE-S3)で有効化。
- OwnershipControls:
- オブジェクト所有者。バケット所有者に強制。
- PublicAccessBlockConfiguration:
- ブロックパブリックアクセス。すべてブロック。
- VersioningConfiguration:
- バケットのバージョニング。有効化。
- LifecycleConfiguration:
- ライフサイクルルール。オブジェクト作成から30日で削除するルール。
やってみた
Serverless Framework 初心者向けに実際にデプロイまでご紹介します。
公式サイトに従い、ローカル端末に Serverless Framework をインストールしてください。
Setting Up Serverless Framework With AWS
ターミナルで以下のコマンドを実行して、バージョンが表示されればOKです。
$ serverless --version Framework Core: 3.24.0 Plugin: 6.2.2 SDK: 4.3.2
任意のプロジェクトフォルダを作成後、サービスを作成します。
$ mkdir {{プロジェクトフォルダ}} $ cd {{プロジェクトフォルダ}} $ serverless create --template aws-python3 --path .
前述した serveless.yml に書き換えます。 以下の箇所は任意のものに編集ください。
- {{サービス名}}
- {{バケット名}}
ターミナルで以下のコマンドを実行して、デプロイします。
sls deploy --stage dev
デプロイ完了したら、マネジメントコンソールを確認してみましょう。 作成した S3バケットの設定を見てみると、想定通りのバケットが作成できているはずです。
AccessControl
BucketName
省略
BucketEncryption
OwnershipControls
PublicAccessBlockConfiguration
VersioningConfiguration
LifecycleConfiguration
おわりに
最後まで読んでいただきありがとうございます。
今回は備忘録的な意味を込めてブログを書いてみました。 どなたかの役に立てば幸いです。
それではまた!