📌
AWS CDK v2 事始め(2):S3バケットにバケットポリシーを付与する
CDK(の勉強)つづき
AWS CDKを使えるようになりたくて勉強はじめました。前回はS3バケットの作成をしました。今回はバケットポリシーを付与します。
== 2023-09-09 追記 CDK勉強まとめ ==
- AWS CDK v2 事始め(1):S3バケットを作る
- AWS CDK v2 事始め(2):S3バケットにバケットポリシーを付与する
- AWS CDK v2 事始め(3):基本構成を理解したい
-
AIによる学習:ChatGPT先生にCDK v2 (TypeScript) を教えてもらったときに使ったプロンプトパターン
- CDKのコードと知識を一気に高める方法かも
-
AWS-CDK_memo
- もろもろ作ったCDK v2 TypeScriptをgithubに格納
==================================
スクリプトの更新
lib/cdk-workshop-stack.ts
を以下のように更新します。ーーー 追加 ーーー
の箇所が追記した箇所です。(バケットポリシーはこちらを参考にさせて頂きました)
lib/cdk-workshop-stack.ts
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as s3 from 'aws-cdk-lib/aws-s3';
import * as iam from 'aws-cdk-lib/aws-iam'; // ーーー 追加 ーーー
export class CdkWorkshopStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// const BucketName01 = this.node.tryGetContext("BucketName01")
const BucketName02 = this.node.tryGetContext("BucketName02")
const bucket = new s3.Bucket(this, 'CreateBucket', {
bucketName: BucketName02,
versioned: true
});
// ーーー↓↓ 追加 ↓↓ーーー //
const bucke_policy = new iam.PolicyStatement({
effect: iam.Effect.DENY,
actions: ['s3:GetObject'],
principals: [new iam.ArnPrincipal('*')],
resources: [
bucket.bucketArn + '/*'
],
conditions: {
'StringNotLike': {
'aws:Referer': [
'https://app-name.firebaseapp.com/*',
]
},
'NotIpAddress': {
'aws:SourceIp': [
'10.10.10.10',
]
}
}
})
bucket.addToResourcePolicy(bucke_policy);
// ーーー↑↑ 追加 ↑↑ーーー //
}
}
更新箇所の確認
cdk diff
の結果です。
iam0001:~/environment/cdk-workshop (master) $ cdk diff
Stack CdkWorkshopStack
IAM Statement Changes
┌───┬────────────────────────────────┬────────┬──────────────┬───────────┬────────────────────────────────┐
│ │ Resource │ Effect │ Action │ Principal │ Condition │
├───┼────────────────────────────────┼────────┼──────────────┼───────────┼────────────────────────────────┤
│ + │ ${CreateBucket.Arn}/* │ Deny │ s3:GetObject │ AWS:* │ "StringNotLike": { │
│ │ │ │ │ │ "aws:Referer": [ │
│ │ │ │ │ │ "https://app-name.firebase │
│ │ │ │ │ │ app.com/*" │
│ │ │ │ │ │ ] │
│ │ │ │ │ │ }, │
│ │ │ │ │ │ "NotIpAddress": { │
│ │ │ │ │ │ "aws:SourceIp": [ │
│ │ │ │ │ │ "10.10.10.10" │
│ │ │ │ │ │ ] │
│ │ │ │ │ │ } │
└───┴────────────────────────────────┴────────┴──────────────┴───────────┴────────────────────────────────┘
(NOTE: There may be security-related changes not in this list. See https://github.com/aws/aws-cdk/issues/1299)
Parameters
[+] Parameter BootstrapVersion BootstrapVersion: {"Type":"AWS::SSM::Parameter::Value<String>","Default":"/cdk-bootstrap/hnb659fds/version","Description":"Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]"}
Conditions
[+] Condition CDKMetadata/Condition CDKMetadataAvailable: {"Fn::Or":[{"Fn::Or":[{"Fn::Equals":[{"Ref":"AWS::Region"},"af-south-1"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"ap-east-1"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"ap-northeast-1"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"ap-northeast-2"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"ap-south-1"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"ap-southeast-1"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"ap-southeast-2"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"ca-central-1"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"cn-north-1"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"cn-northwest-1"]}]},{"Fn::Or":[{"Fn::Equals":[{"Ref":"AWS::Region"},"eu-central-1"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"eu-north-1"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"eu-south-1"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"eu-west-1"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"eu-west-2"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"eu-west-3"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"me-south-1"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"sa-east-1"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"us-east-1"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"us-east-2"]}]},{"Fn::Or":[{"Fn::Equals":[{"Ref":"AWS::Region"},"us-west-1"]},{"Fn::Equals":[{"Ref":"AWS::Region"},"us-west-2"]}]}]}
Resources
[+] AWS::S3::Bucket CreateBucket CreateBucketEFE7EF15
[+] AWS::S3::BucketPolicy CreateBucket/Policy CreateBucketPolicyD6AB31A8
Other Changes
[+] Unknown Rules: {"CheckBootstrapVersion":{"Assertions":[{"Assert":{"Fn::Not":[{"Fn::Contains":[["1","2","3","4","5"],{"Ref":"BootstrapVersion"}]}]},"AssertDescription":"CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI."}]}}
****************************************************
*** Newer version of CDK is available [2.59.0] ***
*** Upgrade recommended (npm install -g aws-cdk) ***
****************************************************
デプロイ結果
cdk deploy
でデプロイされたS3バケットのバケットポリシーを見てみると、期待したポリシーが記載されていました。
補足
S3バケットにバケットポリシーを付与する処理について
addToResourcePolicy
でバケットポリシーを付与するらしい。
バケットポリシーの作成について
iam
のPolicyStatement
クラスを使うそうです。S3
でさがしていたのですが、ポリシーなのでiam
になるんですね。
余談
前述のcdk diff
の結果にNewer version of CDK is available [2.59.0]
とありました。
最近(←いつ?)CDKの最新バージョン2.55.1
をインストールしたはずですが、今は2.59.0
にまで上がってるようです。CDKのバージョンアップの頻度は高そうですね。
Discussion