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
940
20260422_Midosuji_Tech
takuyay0ne
2
120
脱 雰囲気実装!AgentCoreを良い感じにWEBアプリケーションに組み込むために
takuyay0ne
3
640
20260228_JAWS_Beginner_Kansai
takuyay0ne
5
770
20260204_Midosuji_Tech
takuyay0ne
1
260
20260129_CB_Kansai
takuyay0ne
1
400
20260126_JAWS_Osaka
takuyay0ne
1
74
こんな時代だからこそ! 想定しておきたいアクセスキー漏洩後のムーブ
takuyay0ne
4
830
セキュリティは全員参加!_JAWSのイベントサイトで脅威モデリングを学んでみよう!
takuyay0ne
0
230
Other Decks in Programming
See All in Programming
モジュールの視点からSwiftを読み解く #iosdc
s_shimotori
0
180
GKE で Pod の見方を変えたら、スケールアウト時の挙動を真に捉えられた話
stkk
0
130
マイコン向けの軽量Ruby「PicoRuby」で各種デバイスを制御するネイティブアプリの実現手法
bash0c7
0
410
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
380
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
190
cdk deploy JawsSonic #MARATHONしながらAWSリソースをデプロイしてみよう
akihisaikeda
2
140
App Intentsのビルドプロセスを支える技術
kntkymt
0
390
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
180
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
3
350
WebAssembly in Android Apps 〜 WASMはJNIの夢を見るか
keiji
1
110
Omarchy Tokyo やると聞いて UMPC 買ってセットアップしてきた
mtsmfm
0
150
Go × SIMDで高速化するベクトル検索 ~ルーフラインモデルでSIMDが効く境界を探れ! ~
po3rin
1
1.7k
Featured
See All Featured
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
530
Heart Work Chapter 1 - Part 1
lfama
PRO
10
36k
RailsConf 2023
tenderlove
30
1.5k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
400
From π to Pie charts
rasagy
1
370
Technical Leadership for Architectural Decision Making
baasie
3
570
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Making the Leap to Tech Lead
cromwellryan
135
10k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
330
How to Ace a Technical Interview
jacobian
281
24k
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