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
クロスアカウント環境におけるAWS S3バケットへのアクセスで詰まっていた
Search
Haruki Tazoe
October 25, 2025
Programming
0
20
クロスアカウント環境におけるAWS S3バケットへのアクセスで詰まっていた
2025/10/25 JAWS-UG広島 第24回勉強会
Haruki Tazoe
October 25, 2025
Tweet
Share
More Decks by Haruki Tazoe
See All by Haruki Tazoe
PHPのプロセス制御について
jdkfx
0
42
ちょっとした「翻訳ブーム」はこうして始まった
jdkfx
0
280
フロントエンドのチューニングに挑戦してみる
jdkfx
0
170
ドキュメント翻訳で学ぶ新しい言語仕様・機能
jdkfx
1
280
フレームワークの内部構造を理解するためにフレームワークを作ってみることにした / phpcon-2021
jdkfx
2
1.2k
Other Decks in Programming
See All in Programming
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
230
品質ワークショップをやってみた
nealle
0
630
Devoxx BE - Local Development in the AI Era
kdubois
0
140
AI Agent 時代的開發者生存指南
eddie
4
2.1k
エンジニアインターン「Treasure」とHonoの2年、そして未来へ / Our Journey with Hono Two Years at Treasure and Beyond
carta_engineering
0
420
Domain-centric? Why Hexagonal, Onion, and Clean Architecture Are Answers to the Wrong Question
olivergierke
3
960
CSC509 Lecture 06
javiergs
PRO
0
270
デミカツ切り抜きで面倒くさいことはPythonにやらせよう
aokswork3
0
260
What's new in Spring Modulith?
olivergierke
1
170
Developer Joy - The New Paradigm
hollycummins
1
360
CSC509 Lecture 08
javiergs
PRO
0
250
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
610
Featured
See All Featured
Designing for humans not robots
tammielis
254
26k
Unsuck your backbone
ammeep
671
58k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
658
61k
Scaling GitHub
holman
463
140k
A designer walks into a library…
pauljervisheath
209
24k
Typedesign – Prime Four
hannesfritz
42
2.8k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.7k
How to train your dragon (web standard)
notwaldorf
97
6.3k
Product Roadmaps are Hard
iamctodd
PRO
55
11k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
930
Transcript
クロスアカウント環境におけるAWS S3 バケットへのアクセスで詰まっていた 2025/10/25 JAWS-UG広島 第24回勉強会 田添春樹
アプリ開発最前線2025冬 ~サーバレス再び~
初心者による初心者向けの発表です!
自己紹介 • 名前・所属 ◦ 田添春樹 / @jdkfx ◦ 株式会社GoQSystem •
よく使う技術 ( 使っていた技術 ) ◦ PHP, JavaScript, Vue.js, Svelte … • 趣味 ◦ バイクで道の駅スタンプラリー
アジェンダ • システム構成概要について • 開発時の構成について • 問題発生と問題の切り分けの流れ • クロスアカウントアクセスについて •
問題解決
システム構成概要について
システム構成概要について • 登場人物 ◦ アカウントA: ファイルをアップロードするバケットを所有(BucketA) ◦ アカウントB:コピー先のバケットを所有(BucketB) ◦ Lambda関数:S3イベント通知を受け取り、ファイルをコピーする
システム構成概要について • 処理の流れ ◦ システムが BucketA にファイルをアップロード ▪ アプリケーションのバッチ処理が putObject
を実行 ◦ S3 のイベント通知が発火 ▪ BucketA に「ファイルがアップロードされた」ことを検知 ▪ 指定された Lambda 関数を呼び出す ◦ Lambda 関数が起動し、イベント情報を受け取る ◦ Lambda 関数内で CopyObjectCommand を実行 ▪ source = BucketA/xxx ▪ destination = BucketB/xxx ▪ S3 API を使ってオブジェクトをコピー
システム構成概要について
開発時の構成について
開発時の構成について • 最初は同一アカウント内でバケットAとバケットBを使って開発 • 特別なクロスアカウント設定がないので、もちろん動作する
ここまではうまく動作した…
問題発生
問題発生 • クロスアカウント設定を行った本番環境での動作でトラブル発生 • アカウントA → アカウントB へファイルコピーができない!
問題切り分けの流れ
問題切り分けの流れ • そもそもファイルコピーではなくそれぞれのバケットにアクセス出来るのか ◦ アカウントAからバケットAにはアクセス出来るのか → 出来た ◦ アカウントAからバケットBにはアクセス出来るのか →
出来なかった • バケット内のオブジェクトは取得出来るのか ◦ アカウントAからバケットAでオブジェクトを取得出来るのか → 出来た ◦ アカウントAからバケットBでオブジェクトを取得出来るのか → そもそもバケットにアクセス出来なかったので出来ないことは自明
問題切り分けの流れ • ファイルコピー操作によるものではなく、バケットBにアクセス出来ないと いうことが原因 • バケットBにアクセス出来ない原因を探る ◦ Bucketとして設定した変数やKeyの確認 ◦ CopySourceの中身の確認
◦ typoやファイル名などの間違いは無く、正しい値が設定されていた
クロスアカウント アクセスについて
クロスアカウントアクセスについて • AssumeRole ◦ あるAWSアカウント(アカウントA)が別のアカウント(アカウントB) の権限を一時的に借りる仕組み ◦ アカウントAはAWS STS(Security Token
Service) を使って一時的な 認証情報(セッションクレデンシャル)を取得する ◦ その間、アカウントAはアカウントBになりきって操作を行う
クロスアカウントアクセスについて
問題解決
問題解決 • AssumeRoleしたうえでもう一度検証 • そもそもファイルコピーではなくそれぞれのバケットにアクセス出来るのか ◦ アカウントAからバケットAにはアクセス出来るのか → 出来なかった ◦
アカウントAからバケットBにはアクセス出来るのか → 出来た • バケット内のオブジェクトは取得出来るのか ◦ アカウントAからバケットAでオブジェクトを取得出来るのか → そもそもバケットにアクセス出来なかったので出来ないことは自明 ◦ アカウントAからバケットBでオブジェクトを取得出来るのか → 出来た
問題切り分けの流れ • AssumeRoleしない状態での検証 • そもそもファイルコピーではなくそれぞれのバケットにアクセス出来るのか ◦ アカウントAからバケットAにはアクセス出来るのか → 出来た ◦
アカウントAからバケットBにはアクセス出来るのか → 出来なかった • バケット内のオブジェクトは取得出来るのか ◦ アカウントAからバケットAでオブジェクトを取得出来るのか → 出来た ◦ アカウントAからバケットBでオブジェクトを取得出来るのか → そもそもバケットにアクセス出来なかったので出来ないことは自明 再掲
問題解決 • アカウントAによってアクセスできていたバケットが反転 • クロスアカウント環境においてAssumeRoleをするかしないかによってアク セスできるバケットがどちらか一方になる • なぜならアカウントAがAssumeRoleをすると別のアカウントBになり切って しまうから
問題解決 • どちらか一方のアカウントのバケットにしかアクセスできない • CopyObjectCommandは引数で ◦ Bucketでコピー先のバケット名(アカウントB)、 ◦ CopySourceでコピー元のバケット名(アカウントA) を必要とする
• よって、CopyObjectCommandが使えないことが今回の問題の原因
問題解決 • 2つのS3クライアントを用意 ◦ アカウントAでバケットAにアクセスできるクライアント① ◦ アカウントAがAssumeRoleして、アカウントBのバケットBにアクセス できるクライアント② • 処理の流れ
◦ クライアント①がバケットAから getObject を実行し、ファイルを Buffer として取得 ◦ クライアント②がそのBufferを使って、バケットBへ putObject を実行 • 結果 ◦ CopyObjectCommand を使わずに、同等の処理を実現できた ◦ これにより、発生していたアクセス権限の問題が解決した
問題解決
まとめ
まとめ • 問題点/原因/解決策を振り返る ◦ 問題: クロスアカウント環境でS3へファイルコピー時にバケットアクセス失敗 ◦ 原因: クロスアカウント環境による権限の問題と、AssumeRoleによって“引き 受けたアカウント”の権限で動いていたため
◦ 解決: 2つのクライアントを用いてgetObject→putObjectに変更 • そして、IAMや権限設計を学ぶきっかけとなった
参考資料 • クロスアカウント環境におけるAWS S3バケットへのアクセスで詰まってい た ◦ https://blog.jdkfx.com/assume-role-aws-s3 • Node.js AWS
SDKでSTS AssumeRoleを行い安全にクロスアカウントアクセ スする ◦ https://zenn.dev/faycute/articles/4d1326bbf0be24 • 別アカウントのS3バケットを利用する手順 ◦ https://dev.classmethod.jp/articles/how-to-use-s3-cross-account/
ご清聴ありがとう ございました!