Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
20230510_FinJAWS
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Takuya Yonezawa
May 10, 2023
Programming
810
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
20230510_FinJAWS
Takuya Yonezawa
May 10, 2023
More Decks by Takuya Yonezawa
See All by Takuya Yonezawa
20260516_SecJAWS_Days
takuyay0ne
5
1k
20260422_Midosuji_Tech
takuyay0ne
2
130
脱 雰囲気実装!AgentCoreを良い感じにWEBアプリケーションに組み込むために
takuyay0ne
3
720
20260228_JAWS_Beginner_Kansai
takuyay0ne
5
790
20260204_Midosuji_Tech
takuyay0ne
1
270
20260129_CB_Kansai
takuyay0ne
1
410
20260126_JAWS_Osaka
takuyay0ne
1
78
こんな時代だからこそ! 想定しておきたいアクセスキー漏洩後のムーブ
takuyay0ne
4
850
セキュリティは全員参加!_JAWSのイベントサイトで脅威モデリングを学んでみよう!
takuyay0ne
0
240
Other Decks in Programming
See All in Programming
wkhtmltopdfの次どうするか問題2026
willnet
2
1.9k
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
15
8.4k
IBM Bob でAI駆動開発『QC-Playbook』
ichirokano2
0
110
なぜCTOを降りてFDEを選んだのか?〜なぜプロダクト企業がFDEで顧客の現場に踏み込むのか〜
gonta
1
200
HTML-in-Canvasで作る未来のWeb UI表現
clockmaker
5
4.9k
phperだってパンチカードでコーディングしたい
o0h
PRO
0
320
Railsバージョンを4倍にした話
optim
0
180
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
370
Web Framework Benchmark Battle 2026, Any%
a_matsuda
2
880
作れる、でも消せるか?──安全に「枯らして消す」機能削除術 / Drain, Then Delete
chobishiba
2
220
複雑なUIコンポーネントとの ⻑い付き合い⽅:波及するバグからテスト戦略を経て、安全な再設計へ
mixplace
0
390
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
360
Featured
See All Featured
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
630
The untapped power of vector embeddings
frankvandijk
2
1.9k
Statistics for Hackers
jakevdp
799
230k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
Automating Front-end Workflow
addyosmani
1369
210k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
370
WENDY [Excerpt]
tessaabrams
14
40k
Code Reviewing Like a Champion
maltzj
529
40k
What's in a price? How to price your products and services
michaelherold
247
13k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Become a Pro
speakerdeck
PRO
31
6.3k
Transcript
$%,ͷา͖ํ ଜ૯߹ݚڀॴ ถᖒ #-&"GPS'4*ͷ ιʔεΛಡΈղͨ͘Ίͷ
͜ͷ-5Ͱ͓͍͑ͨ͜͠ͱ #-&"GPS'4*ͷιʔείʔυΛಡΈղ֦͘ு͢ΔͨΊʹ͓͖ͬͯ͘ϙΠϯτ ࠔͬͨͱ͖ʹࢀর͢ΔͰ͋Ζ͏$%,ެࣜϦϑΝϨϯεͷಡΈํ $%,Λ5ZQF4DSJQUͰ։ൃ͢Δͷා͘ͳ͍ʂ ͜ͷ-5Ͱ͓͑͠ͳ͍͜ͱ #-&"GPS'4*ͷߏཁૉઃܭࢥʢطʹղઆࡁΈͷͣɻɻʣ #-&"GPS'4*ͷݕূͯ͠Έͨ ͡Ίʹ
͜Εʂ ʹଜ૯߹ݚڀॴʹ৽ଔೖࣾɻۚ༥ۀքͷ͓٬༷͚ʹ ϑϩϯτγεςϜͷߏஙΤϯϋϯεΛ୲ͨ͠ޙʹδϣϒνΣϯδɻ ݱࡏ࢈ۀۀքͷ͓٬༷͚ʹ"84ڥશൠͷઃܭߏஙΛ୲ɻ 8&#։ൃ͔Β"84౷੍ɺΫϥυΨΠυϥΠϯࡦఆͳͲԿͰΓ·͢ ͖ͳ"84αʔϏε4". "QQMJDBUJPO$PNQPTFS $PEF1JQFMJOF
͖ͳٕज़/FYUKT 5BJMXJOE$44 %PDLFS LT 3BODIFS झຯ֨ಆٕʢΓ·͢ݟ·͢ʣɺ͓ՈLTʢ͔Θ͍͍ʣ UBLVZBZPOF ถᖒ 5BLVZB:POF[BXB
"84$%,ʢ$MPVE%FWFMPQNFOU,JUʣ ϓϩάϥϛϯάݴޠΛ༻ͯ͠"84্ͷϦιʔεΛఆٛ͢Δ͜ͱ͕Ͱ͖Δ *B$ʢ*OGSBTUSVDUVSFBT$PEFʣπʔϧ ར༻Մೳͳݴޠ1ZUIPOɺ5ZQF4DSJQUɺ+BWBɺ(PMBOH 044ͱͯ͠(JU)VCͰެ։͞Ε͓ͯΓɺ׆ൃʹ։ൃ͞Ε͍ͯΔ $%,ιʔεΛϏϧυ$MPVE'PSNBUJPOͱͯ͠Ϧιʔε͕ߏங͞ΕΔ ϦιʔεఆٛͷநʹԠͯ͡---ͱ͍͏ϨΠϠʔ͕ଘࡏ
-ɿநΊʢ$MPVE'PSNBUJPOͱରԠɻ಄จࣈ͕$GOʓʓʣ -ɿநߴΊʢ"84ͷϕετϓϥΫςΟεΛ͋Δఔඪ४औΓࠐΈࡁΈʣ -ɿෳϦιʔεԣஅʢ"-#ͱ&$4λεΫΛηοτͰ࡞ͳͲʣ "84$%, ˞ IUUQTHJUIVCDPNBXTBXTDEL
"84$%,ʢ$MPVE%FWFMPQNFOU,JUʣ ϓϩάϥϛϯάݴޠΛ༻ͯ͠"84্ͷϦιʔεΛఆٛ͢Δ͜ͱ͕Ͱ͖Δ *B$ʢ*OGSBTUSVDUVSFBT$PEFʣπʔϧ ར༻Մೳͳݴޠ1ZUIPOɺ5ZQF4DSJQUɺ+BWBɺ(PMBOH 044ͱͯ͠(JU)VCͰެ։͞Ε͓ͯΓɺ׆ൃʹ։ൃ͞Ε͍ͯΔ $%,ιʔεΛϏϧυ$MPVE'PSNBUJPOͱͯ͠Ϧιʔε͕ߏங͞ΕΔ ϦιʔεఆٛͷநʹԠͯ͡---ͱ͍͏ϨΠϠʔ͕ଘࡏ
-ɿநΊʢ$MPVE'PSNBUJPOͱରԠɻ಄จࣈ͕$GOʓʓʣ -ɿநߴΊʢ"84ͷϕετϓϥΫςΟεΛ͋Δఔඪ४औΓࠐΈࡁΈʣ -ɿෳϦιʔεԣஅʢ"-#ͱ&$4λεΫΛηοτͰ࡞ͳͲʣ "84$%, ˞ IUUQTHJUIVCDPNBXTBXTDEL Ͳͷݴޠ͏ͷ͕Φεεϝʁ🤔
ʘ5ZQF4DSJQUΛ͏͠ʂʗ
$%,PO5ZQF4DSJQUͷਪ͠ϙΠϯτ ͦͦ$%,͕5ZQF4DSJQUͰॻ͔Ε͍ͯΔͱ͍͏҆৺ײ ಉ͡։ൃݴޠͱͳΔͨΊɺಠ֦ࣗு͕؆୯ʢͩͱࢥ͏ʣ ࣮ํ໋໊نଇʹࠔͬͨΒ$%,ͷιʔείʔυΛோΊͯࢀߟʹͰ͖Δ ଟ͘ͷ5ZQF4DSJQU࣮ྫαϯϓϧίʔυ͕ωοτ্ʹ͋Δ 5ZQF4DSJQUͷܕิ͕ൈ܈ͷ։ൃମݧ $%,ͷެࣜυΩϡϝϯτͷαϯϓϧ͕ͦͦ5ZQF4DSJQU ଞͷ/PEFKTύοέʔδͱͷੑ͕˓ ࢲ͕$%,PO5ZQF4DSJQUΛਪ͢ཧ༝
$%,PO5ZQF4DSJQUͷਪ͠ϙΠϯτ ͦͦ$%,͕5ZQF4DSJQUͰॻ͔Ε͍ͯΔͱ͍͏҆৺ײ ಉ͡։ൃݴޠͱͳΔͨΊɺಠ֦ࣗு͕؆୯ʢͩͱࢥ͏ʣ ࣮ํ໋໊نଇʹࠔͬͨΒ$%,ͷιʔείʔυΛோΊͯࢀߟʹͰ͖Δ ଟ͘ͷ5ZQF4DSJQU࣮ྫαϯϓϧίʔυ͕ωοτ্ʹ͋Δ 5ZQF4DSJQUͷܕิ͕ൈ܈ͷ։ൃମݧ $%,ͷެࣜυΩϡϝϯτͷαϯϓϧ͕ͦͦ5ZQF4DSJQU ଞͷ/PEFKTύοέʔδͱͷੑ͕˓ ࢲ͕$%,PO5ZQF4DSJQUΛਪ͢ཧ༝
5ZQF4DSJQUʹ͍ͭͯগ͠ิ +BWBTDSJQUʹܕͱ͍͏֓೦Λ࣋ͨͤͨ"MU+4ʢBMUFSOBUJWF+BWB4DSJQUʣ ੩తܕ͚ݴޠͰ͋Δʢ5ZQFͱݴΘΕΔॴҎʣ Ϗϧυ࣌ʹɺมʹ͓͔͠ͳ͕ೖ͍ͬͯΕΤϥʔ͕ى͖ΔʢFYJOUܕͷมʹTUSJOHܕΛೖͨ͠ʣ ಈతܕ͚ͩͱɺϏϧυˠ࣮ߦ·ͰΒͳ͍ͱΤϥʔ͕ى͜Δ͔Ͳ͏͔͔Βͳ͍ ࢲ͕$%,PO5ZQF4DSJQUΛਪ͢ཧ༝
5ZQF4DSJQUʹ͍ͭͯগ͠ิ $%,PO5ZQF4DSJQUͰͷܕνΣοΫྫ -Ͱͷ4όέοτ࡞ ࢲ͕$%,PO5ZQF4DSJQUΛਪ͢ཧ༝ const testBucket = new s3.Bucket(this,'TestBucket',{
versioned: true, }); ܕνΣοΫ0, const testBucket = new s3.Bucket(this,'TestBucket',{ versioned: "123", }); ܕνΣοΫ/( WFSTJPOFE CPPMFBO·ͨVOEF fi OFE ͡Όͳ͍ͱμϝʂ
$%,PO5ZQF4DSJQUͷਪ͠ϙΠϯτ ͦͦ$%,͕5ZQF4DSJQUͰॻ͔Ε͍ͯΔͱ͍͏҆৺ײ ಉ͡։ൃݴޠͱͳΔͨΊɺಠ֦ࣗு͕؆୯ʢͩͱࢥ͏ʣ ࣮ํ໋໊نଇʹࠔͬͨΒ$%,ͷιʔείʔυΛோΊͯࢀߟʹͰ͖Δ ଟ͘ͷ5ZQF4DSJQU࣮ྫαϯϓϧίʔυ͕ωοτ্ʹ͋Δ 5ZQF4DSJQUͷܕิ͕ൈ܈ͷ։ൃମݧ $%,ͷެࣜυΩϡϝϯτͷαϯϓϧ͕ͦͦ5ZQF4DSJQU ଞͷ/PEFKTύοέʔδͱͷੑ͕˓ ࢲ͕$%,PO5ZQF4DSJQUΛਪ͢ཧ༝
$%,PO5ZQF4DSJQUͰͷإΑΓݟΔެࣜυΩϡϝϯτ ެࣜυΩϡϝϯτͷαϯϓϧίʔυجຊతʹ5ZQF4DSJQUલఏͳͷͰɺ߹Θ͓ͤͯ͘ͱ٢ ࢲ͕$%,PO5ZQF4DSJQUΛਪ͢ཧ༝ ˞ IUUQTEPDTBXTBNB[PODPNDELBQJWEPDTBXTDPOTUSVDUMJCSBSZIUNM
$%,PO5ZQF4DSJQUͷਪ͠ϙΠϯτ ͦͦ$%,͕5ZQF4DSJQUͰॻ͔Ε͍ͯΔͱ͍͏҆৺ײ ಉ͡։ൃݴޠͱͳΔͨΊɺಠ֦ࣗு͕؆୯ʢͩͱࢥ͏ʣ ࣮ํ໋໊نଇʹࠔͬͨΒ$%,ͷιʔείʔυΛோΊͯࢀߟʹͰ͖Δ ଟ͘ͷ5ZQF4DSJQU࣮ྫαϯϓϧίʔυ͕ωοτ্ʹ͋Δ 5ZQF4DSJQUͷܕิ͕ൈ܈ͷ։ൃମݧ $%,ͷެࣜυΩϡϝϯτͷαϯϓϧ͕ͦͦ5ZQF4DSJQU ଞͷ/PEFKTύοέʔδͱͷੑ͕˓ ࢲ͕$%,PO5ZQF4DSJQUΛਪ͢ཧ༝
#-&"GPS'4*ͷϦϙδτϦΛ͍ͯΈ·͠ΐ͏ VTFSDBTFTCBTFDUMPHHJOHQBDLBHFKTPO ࢲ͕$%,PO5ZQF4DSJQUΛਪ͢ཧ༝ "devDependencies": { "@types/jest": "^27.5.2", "@types/node": "18.7.14",
"@typescript-eslint/eslint-plugin": "^5.38.0", "@typescript-eslint/parser": "^5.38.0", "cdk-nag": "^2.15.38", "eslint": "^8.23.1", "eslint-config-prettier": "^8.5.0", "lint-staged": "^13.0.3", "prettier": "^2.7.1", "simple-git-hooks": "^2.8.0", "standard-version": "^9.5.0", "typescript": "^4.8.3" },
#-&"GPS'4*ͷϦϙδτϦΛ͍ͯΈ·͠ΐ͏ VTFSDBTFTCBTFDUMPHHJOHQBDLBHFKTPO ࢲ͕$%,PO5ZQF4DSJQUΛਪ͢ཧ༝ "devDependencies": { "@types/jest": "^27.5.2", "@types/node": "18.7.14",
"@typescript-eslint/eslint-plugin": "^5.38.0", "@typescript-eslint/parser": "^5.38.0", "cdk-nag": "^2.15.38", "eslint": "^8.23.1", "eslint-config-prettier": "^8.5.0", "lint-staged": "^13.0.3", "prettier": "^2.7.1", "simple-git-hooks": "^2.8.0", "standard-version": "^9.5.0", "typescript": "^4.8.3" }, ͳʹΒ$%,ͬΆ͘ͳ͍ ύοέʔδఆ͕ٛɺɺ φχίϨ 🤔
#-&"GPS'4*Ͱ࠾༻͞Ε͍ͯΔ/PEFKTύοέʔδൈਮ &4-JOU +BWB4DSJQU5ZQF4DSJQU͚ͷ੩తղੳπʔϧɻ ߏจΤϥʔϓϩδΣΫτݻ༗ͷίʔσΟϯάنʹҧ͢Δ߹ʹ/(Λग़ͯ͘͠ΕΔɻ ղੳఆٛFTMJOUSDKTPOʹهࡌ͞Ε͍ͯΔ 1SFUUJFS ෳݴޠʹରԠͨ͠ιʔείʔυϑΥʔϚολʢιʔείʔυΛܗͯ͘͠ΕΔʣ ϑΥʔϚοτఆٛQSFUUJFSSDKTPOʹهࡌ͞Ε͍ͯΔ MJOUTUBHFE
HJUDPNNJU࣌ʹԿ͔͠ΒͷॲཧΛτϦΨʔ͢Δ͜ͱ͕Մೳ #-&"GPS'4*ͰԼه͕ઃఆ͞Ε͍ͯΔ ᶃγʔΫϨοτใͷεΩϟϯ ᶄ&4-JOUͰͷ੩తղੳ ᶅ1SFUUJFSʹΑΔࣗಈϑΥʔϚοςΟϯά ࢲ͕$%,PO5ZQF4DSJQUΛਪ͢ཧ༝ "lint-staged": { "*": [ "git-secrets --scan" ], "*.(ts|tsx|js|jsx)": [ "npx eslint --fix" ], "*.(ts|tsx|js|jsx|json|html|yml|yaml|md|graphql|css|scss|less|vue|flow)": [ "npx prettier --write" ] }
#-&"GPS'4*Ͱ࠾༻͞Ε͍ͯΔ/PEFKTύοέʔδൈਮ &4-JOU +BWB4DSJQU5ZQF4DSJQU͚ͷ੩తղੳπʔϧɻ ߏจΤϥʔϓϩδΣΫτݻ༗ͷίʔσΟϯάنʹҧ͢Δ߹ʹ/(Λग़ͯ͘͠ΕΔɻ ղੳఆٛFTMJOUSDKTPOʹهࡌ͞Ε͍ͯΔ 1SFUUJFS ෳݴޠʹରԠͨ͠ιʔείʔυϑΥʔϚολʢιʔείʔυΛܗͯ͘͠ΕΔʣ ϑΥʔϚοτఆٛQSFUUJFSSDKTPOʹهࡌ͞Ε͍ͯΔ MJOUTUBHFE
HJUDPNNJU࣌ʹԿ͔͠ΒͷॲཧΛτϦΨʔ͢Δ͜ͱ͕Մೳ #-&"GPS'4*ͰԼه͕ઃఆ͞Ε͍ͯΔ ᶃγʔΫϨοτใͷεΩϟϯ ᶄ&4-JOUͰͷ੩తղੳ ᶅ1SFUUJFSʹΑΔࣗಈϑΥʔϚοςΟϯά ࢲ͕$%,PO5ZQF4DSJQUΛਪ͢ཧ༝ "lint-staged": { "*": [ "git-secrets --scan" ], "*.(ts|tsx|js|jsx)": [ "npx eslint --fix" ], "*.(ts|tsx|js|jsx|json|html|yml|yaml|md|graphql|css|scss|less|vue|flow)": [ "npx prettier --write" ] } #-&"GPS'4*Ͱ$%,PO5ZQFTDSJQU։ൃ ʹඞཁͳమ൘ύοέʔδ͕ඪ४Ͱೖ͍ͬͯΔͷͰ ͦͷ··͏͚ͩ͡Ό͍ͬͨͳ͍ʂ
#-&"GPS'4*ͷίʔυΛগ͍ͯ͠Έ·͠ΐ͏ VTFDBTFTCBTFDUMPHHJOHMJCCMFBGTJTCVDLFUTUBDLUT͔ΒҰ෦ൈਮ $%,PO5ZQF4DSJQU։ൃ͋Δ͋Δ import { aws_s3 as s3 }
from 'aws-cdk-lib'; export class S3BucketStack extends cdk.Stack { constructor(scope: Construct, id: string, props: cdk.StackProps) { const logsBucket = new s3.Bucket(this, 'logsBucket', { accessControl: s3.BucketAccessControl.PRIVATE, blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL, versioned: true, removalPolicy: cdk.RemovalPolicy.RETAIN, serverAccessLogsBucket: archiveLogsBucket, encryption: s3.BucketEncryption.S3_MANAGED, enforceSSL: true, });
#-&"GPS'4*ͷίʔυΛνϥݟ VTFDBTFTCBTFDUMPHHJOHMJCCMFBGTJTCVDLFUTUBDLUT͔ΒҰ෦ൈਮ $%,PO5ZQF4DSJQU։ൃ͋Δ͋Δ import { aws_s3 as s3 }
from 'aws-cdk-lib'; export class S3BucketStack extends cdk.Stack { constructor(scope: Construct, id: string, props: cdk.StackProps) { const logsBucket = new s3.Bucket(this, 'logsBucket', { accessControl: s3.BucketAccessControl.PRIVATE, blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL, versioned: true, removalPolicy: cdk.RemovalPolicy.RETAIN, serverAccessLogsBucket: archiveLogsBucket, encryption: s3.BucketEncryption.S3_MANAGED, enforceSSL: true, }); BXTDELMJCͷBXT@TϞδϡʔϧΛ Tͱ͍͏ผ໊Ͱར༻͢ΔΑʂ OPEF@NPEVMFTBXTDELMJCBXTT ͔ΒΠϯϙʔτ
#-&"GPS'4*ͷίʔυΛνϥݟ VTFDBTFTCBTFDUMPHHJOHMJCCMFBGTJTCVDLFUTUBDLUT͔ΒҰ෦ൈਮ $%,PO5ZQF4DSJQU։ൃ͋Δ͋Δ import { aws_s3 as s3 }
from 'aws-cdk-lib'; export class S3BucketStack extends cdk.Stack { constructor(scope: Construct, id: string, props: cdk.StackProps) { const logsBucket = new s3.Bucket(this, 'logsBucket', { accessControl: s3.BucketAccessControl.PRIVATE, blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL, versioned: true, removalPolicy: cdk.RemovalPolicy.RETAIN, serverAccessLogsBucket: archiveLogsBucket, encryption: s3.BucketEncryption.S3_MANAGED, enforceSSL: true, }); 4όέοτΛ ࡞ͬͯΔίʔυͬΆ͍͚Ͳɺ ͲΜͳόέοτ࡞ͬͯΜͷʁ🤔
ͷإΑΓݟΔ$%,υΩϡϝϯτ $%,PO5ZQF4DSJQU։ൃ͋Δ͋Δ
ͷإΑΓݟΔ$%,υΩϡϝϯτ #VDLFUΫϥεͷϓϩύςΟ $%,PO5ZQF4DSJQU։ൃ͋Δ͋Δ
ͷإΑΓݟΔ$%,υΩϡϝϯτ #VDLFUΫϥεͷϓϩύςΟ $%,PO5ZQF4DSJQU։ൃ͋Δ͋Δ /BNFͷඌʹ ͕͍͍ͯΔͷ໌ࣔ͠ͳͯ͘ $%,ͰΑ͠ͳʹઃఆͯ͘͠ΕΔ
ͷإΑΓݟΔ$%,υΩϡϝϯτ #VDLFUΫϥεͷϓϩύςΟ $%,PO5ZQF4DSJQU։ൃ͋Δ͋Δ σϑΥϧτ$MPVE'PSNBUJPOελοΫଆͰ Α͠ͳʹઃఆ͓ͯͥ͘͠ʂ
ʘಡΈղ͖ํ͕͔Ε#-&"GPS'4*ා͘ͳ͍ʂʗ
͋͞ɺ#-&"GPS'4*ͷιʔεͷੈք%FFQ%JWFʂ IUUQTHJUIVCDPNBXTTBNQMFTCBTFMJOFFOWJSPONFOUPOBXTGPS fi OBODJBMTFSWJDFTJOTUJUVUF