Skip to content

Instantly share code, notes, and snippets.

@kenzo0107
Created September 1, 2025 14:19
Show Gist options
  • Save kenzo0107/ebadca5343d1a0d9550f4e64555acccb to your computer and use it in GitHub Desktop.
Save kenzo0107/ebadca5343d1a0d9550f4e64555acccb to your computer and use it in GitHub Desktop.

https://kb.databricks.com/security/forbidden-access-to-s3-data.html

以下は、Databricks Knowledge Base の「Forbidden error while accessing S3 data」記事を日本語に訳し、Markdown 形式でまとめた内容です(※2022年5月17日掲載)(Databricks コミュニティ)。


💡 タイトル

S3 データにアクセスしようとした際の forbidden エラー


🧩 問題の概要

DBFS マウントや Spark API を通じて S3 データにアクセスしようとしたとき、次のような例外が発生します:

com.amazonaws.services.s3.model.AmazonS3Exception: Forbidden; … Status Code: 403; Error Code: 403 Forbidden; …

(Databricks コミュニティ)


❓ 主な原因

以下のような設定や権限の問題が典型的です:

  • IAM ロールではなく、AWS キーを使っている(特に global init スクリプトで設定している)
  • Spark 設定(例:spark.hadoop.fs.s3a.secret.key)で AWS キーが IAM ロールと競合している
  • インタラクティブなクラスタ/ノートブック内で、ドライバーノードの環境変数に AWS キーを設定している
  • 以前に AWS キーで作成した DBFS マウントを、IAM ロール切り替え後もそのまま使用している
  • バケットオーナーに読み取り権限がない(クロスアカウントの ACL 関連)
  • クラスターに IAM ロールがアタッチされていない
  • IAM ロールに読み取り権限のみで、書き込み操作を行おうとしている(十分な権限がない)(Databricks コミュニティ)

✅ 解決策・ベストプラクティス

以下の対応を推奨します:

  1. AWS キーではなく IAM ロールの使用を推奨。キーは避ける。

  2. AWS キーから IAM ロールへ移行する際には、

    • 既存の DBFS マウント(AWS キーで作成されたもの)をアンマウント
    • IAM ロールを使って再マウント
  3. Global init スクリプトで AWS キーを設定しない。必要な場合はクラスタ単位で設定する init スクリプトを活用

  4. ノートブックやクラスタ Spark 設定で AWS キーを直接設定するのを避ける(Databricks コミュニティ)


🧭 補足情報・関連トピック

  • Delta Lake 書き込み時の 403 エラー Delta 形式では _delta_log ディレクトリ作成などが必要で、通常より権限も多く要求されます。IAM とバケットポリシーに以下のアクションが必要です:

    • IAM ポリシー:s3:PutObject, DeleteObject, ListBucket, GetObject, PutObjectAcl
    • バケットポリシー:GetObjectVersion, ListBucket, GetBucketLocation など(Databricks コミュニティ)
  • クロスアカウントの Unity Catalog 外部ロケーション 外部ロケーション用 S3 バケットポリシーに、削除済みの IAM ロールの ARN(もしくはロール ID)が残っていると、再作成したロールでは拒否される場合があります。ポリシー内の ARN を現在の正しい IAM ロール ARN に更新し、必要なら外部ロケーションを再作成することで解決可能です(Databricks コミュニティ)


📋 まとめ(Markdown 表)

項目 内容
発生状況 S3データに対する読み書き操作で 403 Forbidden エラー
主な原因 AWS キーの使用や設定の競合、IAM ロール未設定/権限不足など
推奨対応 IAM ロールを使う、旧マウントを解除→再マウント、グローバルスクリプト非推奨など
補足事項 Delta Lake 書き込みでは追加の S3 アクセス許可が必要、Unity Catalog 外部ロケーションでは IAM ARN 更新が必須

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment