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
66
クロスアカウント環境における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
48
ちょっとした「翻訳ブーム」はこうして始まった
jdkfx
0
330
フロントエンドのチューニングに挑戦してみる
jdkfx
0
180
ドキュメント翻訳で学ぶ新しい言語仕様・機能
jdkfx
1
380
フレームワークの内部構造を理解するためにフレームワークを作ってみることにした / phpcon-2021
jdkfx
2
1.2k
Other Decks in Programming
See All in Programming
FOSDEM 2026: STUNMESH-go: Building P2P WireGuard Mesh Without Self-Hosted Infrastructure
tjjh89017
0
180
それ、本当に安全? ファイルアップロードで見落としがちなセキュリティリスクと対策
penpeen
7
4k
CSC307 Lecture 06
javiergs
PRO
0
690
今こそ知るべき耐量子計算機暗号(PQC)入門 / PQC: What You Need to Know Now
mackey0225
3
390
余白を設計しフロントエンド開発を 加速させる
tsukuha
7
2.1k
atmaCup #23でAIコーディングを活用した話
ml_bear
1
150
高速開発のためのコード整理術
sutetotanuki
1
410
AIエージェント、”どう作るか”で差は出るか? / AI Agents: Does the "How" Make a Difference?
rkaga
4
2k
Lambda のコードストレージ容量に気をつけましょう
tattwan718
0
150
CSC307 Lecture 05
javiergs
PRO
0
500
AI Schema Enrichment for your Oracle AI Database
thatjeffsmith
0
330
Automatic Grammar Agreementと Markdown Extended Attributes について
kishikawakatsumi
0
200
Featured
See All Featured
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.3k
Skip the Path - Find Your Career Trail
mkilby
0
60
Why Our Code Smells
bkeepers
PRO
340
58k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
190
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.7k
Navigating Team Friction
lara
192
16k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.1k
A Soul's Torment
seathinner
5
2.3k
Testing 201, or: Great Expectations
jmmastey
46
8.1k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
130
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/
ご清聴ありがとう ございました!