Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
20230510_FinJAWS
Search
Takuya Yonezawa
May 10, 2023
Programming
800
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
880
20260422_Midosuji_Tech
takuyay0ne
2
96
脱 雰囲気実装!AgentCoreを良い感じにWEBアプリケーションに組み込むために
takuyay0ne
3
610
20260228_JAWS_Beginner_Kansai
takuyay0ne
5
740
20260204_Midosuji_Tech
takuyay0ne
1
250
20260129_CB_Kansai
takuyay0ne
1
380
20260126_JAWS_Osaka
takuyay0ne
1
70
こんな時代だからこそ! 想定しておきたいアクセスキー漏洩後のムーブ
takuyay0ne
4
820
セキュリティは全員参加!_JAWSのイベントサイトで脅威モデリングを学んでみよう!
takuyay0ne
0
230
Other Decks in Programming
See All in Programming
Claude Code全社展開のためにやったことn選~プラグイン302個・コミッター271人を支えるために~
kenchan
5
1.6k
AI時代のPHPer生存戦略 ~「言語、もうなんでもよくない?」に本気で向き合う~
vivion
0
800
AI Engineeringは、AIプロダクトだけのものか? 〜AIがソフトウェアを作る時代の新しい当たり前〜 / No AI in your product. AI Engineering in your development.
rkaga
4
460
PHP Application における Kubernetes 内 gRPC 通信
ganchiku
0
600
テーブルをDELETEした
yuzneri
0
140
Google Apps Script で Ruby を動かす
kawahara
0
270
Claude CodeとAgentCore Gatewayを繋ぐ際の認証認可 / Authentication and authorization when connecting Claude Code with AgentCore Gateway
har1101
2
300
FDEが実現するAI駆動経営の現在地
gonta
2
290
属人化した知識を、 AIが辿れる地図にする
pkshadeck
PRO
1
190
ソフトウェアエンジニアにとっての生成AI - 特性を知って使い倒す / generative ai for software enginner
kishida
5
1.9k
わからない話を追いかけたら、プログラミング言語を作る側にいた
ydah
3
520
Foundation Models frameworkで画像分析
ryodeveloper
1
620
Featured
See All Featured
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.6k
Writing Fast Ruby
sferik
630
63k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Discover your Explorer Soul
emna__ayadi
2
1.3k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
230
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
The Invisible Side of Design
smashingmag
301
52k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Design in an AI World
tapps
1
280
Tell your own story through comics
letsgokoyo
1
1k
The Limits of Empathy - UXLibs8
cassininazir
1
610
sira's awesome portfolio website redesign presentation
elsirapls
0
320
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