この記事では、AWS S3 に接続するために Unity カタログでストレージ資格情報を作成する方法について説明します。 Azure Databricks での S3 のサポートは読み取り専用です。
ストレージ資格情報には、クラウド ストレージにアクセスできる長期的なクラウド資格情報が含まれています。 Unity カタログで 外部の場所 を作成して外部ストレージへのアクセスを管理する場合は、ストレージ資格情報とクラウド ストレージ パスを参照します。
ストレージ資格情報と外部の場所の詳細については、「 Unity カタログを使用してクラウド オブジェクト ストレージに接続する」を参照してください。
Unity カタログでサポートされるその他のクラウド ストレージ オプションについては、Unity カタログ でサポートされているクラウド ストレージ オプションに関する情報を参照してください。
注
クラウド間のデータ転送料金が適用される場合があります。 サーバーレス コンピューティングを使用すると、 Databricks のデータ転送と接続ポリシーに従って課金されます。
ストレージ資格情報を作成する
S3 バケットにアクセスするためのストレージ資格情報を作成するには、S3 バケットパスへのアクセスを承認し、その IAM ロールをストレージ認証情報定義で参照する AWS IAM ロールを作成します。
要求事項
Azure Databricks で:
- Unity Catalog に対して有効になっている Azure Databricks ワークスペース。
- ワークスペースにアタッチされている Unity Catalog メタストアの
CREATE STORAGE CREDENTIAL
権限。 アカウント管理者とメタストア管理者には、既定でこの特権があります。
AWS アカウントで次の手順を実行します。
次の要件を満たす S3 バケット。
- バケット名にドット表記 (たとえば、
incorrect.bucket.name.notation
) を含めることはできません。 バケットの名前付けのガイダンスの詳細については、 AWS バケットの名前付け規則を参照してください。 - バケットに S3 アクセス制御リストをアタッチすることはできません。
- バケット名にドット表記 (たとえば、
IAM ロールを作成する機能。
手順 1: IAM ロールを作成する
AWS で、ユーザーにアクセスさせる S3 バケットへのアクセスを許可する IAM ロールを作成します。 この IAM ロールは、S3 バケットと同じアカウントで定義する必要があります。
ヒント
このアクセスを提供する IAM ロールを既に作成している場合は、この手順をスキップして、 手順 2: Azure Databricks に IAM ロールの詳細を付与する手順に進むことができます。
S3 バケットへのアクセスを許可する IAM ロールを作成します。
ロールの作成は 2 段階のプロセスです。 この手順では、ロールを作成し、Azure Databricks でストレージ資格情報を作成した後に変更する 一時的 な信頼関係ポリシーとプレースホルダーの外部 ID を追加します。
ロールを作成 した後 で信頼ポリシーを変更する必要があります。ロールは自己前提である必要があるためです (つまり、ロール自体を信頼するように構成する必要があります)。 したがって、自己前提ステートメントを追加する前に、ロールが存在している必要があります。 自己仮定ロールの詳細については、この Amazon ブログ記事を参照してください。
Von Bedeutung
Databricks は、自己想定ではない IAM ロールに基づいて、新規および既存のストレージ資格情報をブロックします。 詳細については、自己認定ロール適用ポリシーを参照してください。
ポリシーを作成するには、プレースホルダーの外部 ID を使用する必要があります。
カスタム信頼ポリシーを使用して IAM ロールを作成します。
[ カスタム信頼ポリシー ] フィールドに、次のポリシー JSON を貼り付けます。
このポリシーは、Unity カタログが Databricks ユーザーに代わってバケット内のデータにアクセスするロールを引き受けることができるように、クロスアカウントの信頼関係を確立します。 これは、
Principal
セクションの ARN によって指定されます。 これは、Databricks によって作成されたロールを参照する静的な値です。このポリシーは、外部 ID をプレースホルダーとして
0000
に設定します。 これは、後の手順でストレージ資格情報の外部 ID に更新します。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": ["arn:aws:iam::414351767826:role/unity-catalog-prod-UCAzureMainRole-1AJ6UQSSB8F0Q"] }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "0000" } } } ] }
アクセス許可ポリシーの構成をスキップします。 後の手順で、もう一度追加します。
IAM ロールを保存します。
S3 バケットと同じアカウントに次の IAM ポリシーを作成し、次の値を置き換えます。
-
<BUCKET>
: S3 バケットの名前。 -
<KMS-KEY>
: 省略可能。 暗号化が有効になっている場合は、S3 バケットの内容を暗号化する KMS キーの名前を指定します。 暗号化が無効になっている場合は、IAM ポリシーの KMS セクション全体を削除します。 -
<AWS-ACCOUNT-ID>
: AWS アカウントのアカウント ID (Databricks アカウントではありません)。 -
<AWS-IAM-ROLE-NAME>
: 前の手順で作成した AWS IAM ロールの名前。
この IAM ポリシーは、読み取りと書き込みのアクセス権を付与します。 読み取りアクセスのみを許可するポリシーを作成することもできます。 ただし、ストレージ資格情報を読み取り専用としてマークでき、この IAM ロールによって付与された書き込みアクセスは無視されるため、これは不要な場合があります。
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject", "s3:ListBucket", "s3:GetBucketLocation", "s3:ListBucketMultipartUploads", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload" ], "Resource": ["arn:aws:s3:::<BUCKET>/*", "arn:aws:s3:::<BUCKET>"], "Effect": "Allow" }, { "Action": ["kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey*"], "Resource": ["arn:aws:kms:<KMS-KEY>"], "Effect": "Allow" }, { "Action": ["sts:AssumeRole"], "Resource": ["arn:aws:iam::<AWS-ACCOUNT-ID>:role/<AWS-IAM-ROLE-NAME>"], "Effect": "Allow" } ] }
注
Unity カタログに対してより制限の厳しい IAM ポリシーが必要な場合は、Azure Databricks アカウント チームにお問い合わせください。
-
S3 バケットと同じアカウントにファイル イベントの IAM ポリシーを作成します。
注
この手順は省略可能ですが、強くお勧めします。 ユーザーに代わってファイル イベントを構成するためのアクセス権を Azure Databricks に付与しない場合は、場所ごとにファイル イベントを手動で構成する必要があります。 そうでない場合は、Databricks が今後リリースする可能性のある重要な機能へのアクセスが制限されます。 ファイル イベントの詳細については、「 (推奨) 外部の場所のファイル イベントを有効にする」を参照してください。
IAM ポリシーは、バケットのイベント通知構成の更新、SNS トピックの作成、SQS キューの作成、および SQS キューの SNS トピックへのサブスクライブを行う Azure Databricks アクセス許可を付与します。 これらは、ファイル イベントを使用する機能に必要なリソースです。
<BUCKET>
を S3 バケットの名前に置き換えます。{ "Version": "2012-10-17", "Statement": [ { "Sid": "ManagedFileEventsSetupStatement", "Effect": "Allow", "Action": [ "s3:GetBucketNotification", "s3:PutBucketNotification", "sns:ListSubscriptionsByTopic", "sns:GetTopicAttributes", "sns:SetTopicAttributes", "sns:CreateTopic", "sns:TagResource", "sns:Publish", "sns:Subscribe", "sqs:CreateQueue", "sqs:DeleteMessage", "sqs:ReceiveMessage", "sqs:SendMessage", "sqs:GetQueueUrl", "sqs:GetQueueAttributes", "sqs:SetQueueAttributes", "sqs:TagQueue", "sqs:ChangeMessageVisibility", "sqs:PurgeQueue" ], "Resource": ["arn:aws:s3:::<BUCKET>", "arn:aws:sqs:*:*:csms-*", "arn:aws:sns:*:*:csms-*"] }, { "Sid": "ManagedFileEventsListStatement", "Effect": "Allow", "Action": ["sqs:ListQueues", "sqs:ListQueueTags", "sns:ListTopics"], "Resource": ["arn:aws:sqs:*:*:csms-*", "arn:aws:sns:*:*:csms-*"] }, { "Sid": "ManagedFileEventsTeardownStatement", "Effect": "Allow", "Action": ["sns:Unsubscribe", "sns:DeleteTopic", "sqs:DeleteQueue"], "Resource": ["arn:aws:sqs:*:*:csms-*", "arn:aws:sns:*:*:csms-*"] } ] }
IAM ロールに IAM ポリシーをアタッチします。
ロールの [アクセス許可 ] タブで、先ほど作成した IAM ポリシーをアタッチします。
手順 2: Azure Databricks に IAM ロールの詳細を指定する
Azure Databricks で、Unity カタログ メタストアにリンクされているワークスペースにログインします。
CREATE STORAGE CREDENTIAL
特権が必要です。 メタストア管理者ロールとアカウント管理者ロールの両方にこの特権が含まれています。[
カタログ。
[ Quick アクセス ] ページで、[ External data > ] ボタンをクリックし、[ Credentials タブに移動して、資格情報の作成 選択します。
AWS IAM ロールの資格情報の種類を選択します。
資格情報の名前、Unity カタログがクラウド テナント上のストレージの場所にアクセスすることを承認する IAM ロール ARN、およびオプションのコメントを入力します。
(省略可能) ユーザーにこのストレージ資格情報を使う外部の場所への読み取り専用アクセス権を持たせたい場合は、[詳細オプション] で [読み取り専用] を選びます。 詳細については、「ストレージ資格情報を読み取り専用 としてマークする」を参照してください。
注
Azure Databricks はストレージ資格情報を使用して S3 バケットへの読み取り専用アクセスのみを提供するため、このオプションを設定する必要はありません。
Create をクリックしてください。
[ストレージ資格情報が作成されました] ダイアログで [外部 ID] をコピーします。
完了をクリックします。
(省略可能) ストレージの資格情報を特定のワークスペースにバインドする。
既定では、特権ユーザーであれば誰でも、メタストアに接続されている任意のワークスペースでストレージ資格情報を使用できます。 特定のワークスペースからのアクセスのみを許可する場合は、[ワークスペース] タブに移動してワークスペースを割り当てます。 (省略可能) ストレージ資格情報を特定のワークスペースに割り当てるを参照してください。
Databricks Terraform プロバイダーと databricks_storage_credential を使用して、ストレージ資格情報を作成することもできます。
手順 3: IAM ロールの信頼関係ポリシーを更新する
AWS で、ストレージ資格情報の外部 ID を追加し、自己想定するように信頼関係ポリシーを変更します。
保存した IAM ロールに戻り、[ 信頼関係 ] タブに移動します。
信頼関係ポリシーを次のように編集します。
次の ARN を "Allow" ステートメントに追加します。
<YOUR-AWS-ACCOUNT-ID>
と<THIS-ROLE-NAME>
を実際のアカウント ID と IAM ロールの値に置き換えます。"arn:aws:iam::<YOUR-AWS-ACCOUNT-ID>:role/<THIS-ROLE-NAME>"
"sts:AssumeRole"
ステートメントで、プレースホルダーの外部 ID を、前の手順でコピーしたストレージ資格情報の外部 ID に更新します。"sts:ExternalId": "<STORAGE-CREDENTIAL-EXTERNAL-ID>"
ポリシーは次のようになっているはずです。ストレージ資格情報の外部ID、アカウントID、IAMロールの値を使用するように置換テキストを更新してください。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::414351767826:role/unity-catalog-prod-UCAzureMainRole-1AJ6UQSSB8F0Q", "arn:aws:iam::<YOUR-AWS-ACCOUNT-ID>:role/<THIS-ROLE-NAME>" ] }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "<STORAGE-CREDENTIAL-EXTERNAL-ID>" } } } ] }
手順 4: ストレージ資格情報を検証する
「手順 3: IAM ロールの信頼関係ポリシーを更新する」で IAM ロール信頼ポリシーに変更を加えた後、IAM ロールがストレージ資格情報として使用されるように適切に構成されていることを確認します。
注
構成を検証するには、ストレージ資格情報の所有者、メタストア管理者、またはストレージ資格情報に対する CREATE EXTERNAL LOCATION
アクセス許可が必要です。
Azure Databricks で、メタストアにリンクされているワークスペースにログインします。
[
カタログ。
[クイック アクセス] ページで、[外部データの>] ボタンをクリックし、[資格情報] タブに移動します。
代わりに、
をクリックすることもできます。[カタログ] ウィンドウの上部にある歯車アイコンをクリックし、[ 資格情報] を選択します。
検証するストレージ資格情報を選択します。
[
。
いずれかのチェックが失敗した場合は、 手順 3: IAM ロールの信頼関係ポリシーを更新 し、IAM ロールの信頼ポリシーを確認して正しく構成します。
ストレージ資格情報が検証されたら、それを使用して 外部の場所を作成できます。
自己割り当てロールの適用ポリシー
2023 年 6 月 30 日、AWS は IAM ロール信頼ポリシーを更新し、呼び出しに対して IAM ロールが明示的に自己信頼することを要求しました。 その結果、Databricks では、ストレージ資格情報の AWS IAM ロールは自己許容型である必要があります。 詳細については、この コミュニティブログの投稿を参照してください。
2025 年 1 月 20 日、Databricks は、自己想定以外の IAM ロールを使用して、既存のストレージ資格情報の使用をブロックし始めました。 この禁止により、自己仮定以外の資格情報を使用して実行されるワークロードとジョブが中断される可能性があります。
ストレージ認証情報の AWS IAM ロールが自己前提であるかどうかを確認するには、「 手順 4: ストレージ認証情報を検証する」の手順に従います。 [ロールの自己引き受け] チェックが失敗した場合は、手順 3: IAM ロールの信頼関係ポリシーを更新し、IAM ロールの信頼ポリシーを再構成して自身を信頼してください。
確認するメタストアに複数のストレージ資格情報がある場合は、次のノートブックを使用して、メタストア内のすべてのストレージ資格情報の自己仮定機能を確認します。
自律的ストレージ資格情報確認ノートブック
(省略可能)ストレージ資格情報を特定のワークスペースに割り当てる
既定では、ストレージの資格情報は、メタストア内のすべてのワークスペースからアクセスできます。 つまり、ユーザーがそのストレージの資格情報で特権 (CREATE EXTERNAL LOCATION
など) を付与されている場合、メタストアに接続されたどのワークスペースからでもその特権を行使できるということです。 ワークスペースを使用してユーザー データ アクセスを分離する場合は、特定のワークスペースからのみストレージ資格情報へのアクセスを許可できます。 この機能はワークスペースのバインディングまたはストレージの資格情報の分離として知られています。 手順については、「 (省略可能) 特定のワークスペースにストレージ資格情報を割り当てる」を参照してください。
制限事項
Azure Databricks から AWS S3 バケットへのクロスプラットフォーム アクセスは、 サーバーレスエグレス制御を使用するワークスペースではサポートされていません。
次のステップ
ストレージ資格情報を使用するためのアクセス許可を他のユーザーに表示、更新、削除、および付与します。 「ストレージの資格情報を管理する」を参照してください。
ストレージ資格情報を使用して外部の場所を定義します。 「クラウド ストレージを Azure Databricks に接続するための外部の場所の作成」を参照してください。