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
クロスアカウント環境におけるAWS S3バケットへのアクセスで詰まっていた
Search
Haruki Tazoe
October 25, 2025
Programming
99
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
クロスアカウント環境におけるAWS S3バケットへのアクセスで詰まっていた
2025/10/25 JAWS-UG広島 第24回勉強会
Haruki Tazoe
October 25, 2025
More Decks by Haruki Tazoe
See All by Haruki Tazoe
PHPのプロセス制御について
jdkfx
0
77
ちょっとした「翻訳ブーム」はこうして始まった
jdkfx
0
430
フロントエンドのチューニングに挑戦してみる
jdkfx
0
210
ドキュメント翻訳で学ぶ新しい言語仕様・機能
jdkfx
1
570
フレームワークの内部構造を理解するためにフレームワークを作ってみることにした / phpcon-2021
jdkfx
2
1.3k
Other Decks in Programming
See All in Programming
個人開発者よ、Honoを使え(おじさんver)
tanahiro2010
2
240
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
1
360
dotNET_vulnclicker_intro.pdf
deka_morita
0
140
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Rails World 2026, Austin, Texas
marcoroth
0
200
設計次第でAIコードの読む量は減らせる / designing-for-code-reading
minodriven
34
16k
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
22
22k
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
15
8.2k
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
150
パーソナライズPodcastを作った話
repunit11
0
130
気持ちぃ〜角丸 Squircle
ryu1013
0
230
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
620
sbt 2.0: takeoff
eed3si9n
0
120
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
840
Embracing the Ebb and Flow
colly
88
5.2k
Unsuck your backbone
ammeep
672
58k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Designing for humans not robots
tammielis
254
26k
HDC tutorial
michielstock
2
950
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
2
410
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.1k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
630
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
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/
ご清聴ありがとう ございました!