Catalog Explorer または SQL を使用して AWS S3 に接続する
このページでは、最初にストレージ認証情報オブジェクトを作成し、次にカタログエクスプローラーまたは SQL を使用して外部ロケーションオブジェクトを作成することで、AWS S3 バケットに接続する方法について説明します。外部ロケーションを作成する前に、ストレージ資格情報を作成する必要があります。
セットアップ プロセスをより自動化するために、Databricks では、 AWS CloudFormation クイックスタート テンプレート を使用して、これらのオブジェクトの両方を作成することをお勧めします。
始める前に
前提条件 :
Databricksで外部ロケーションオブジェクトを作成する前に、AWS で外部ロケーションとして使用するS3バケットを作成する必要があります。
-
S3 バケット名にドット表記 (
incorrect.bucket.name.notation
など) を使用しないでください。AWS ではバケット名にドットを使用できますが、Databricks ではドット表記を使用した S3 バケットはサポートされていません。ドットを含むバケットは、SSL 証明書の検証の失敗により、Delta Sharing などの機能との互換性の問題を引き起こす可能性があります。詳細については、 AWS バケットの命名のベストプラクティスを参照してください。 -
外部ロケーションパスには、標準の ASCII 文字 (文字
A–Z
、a–z
、 数字0–9
、および/
、_
、-
などの一般的な記号のみを含める必要があります。 -
バケットに S3 アクセスコントロールリストをアタッチすることはできません。
-
別のUnity Catalogメタストアで外部ロケーションとして既に定義されているパスをS3で使用しないでください。複数のメタストアから 1 つの外部 S3 の場所にあるデータを安全に読み取ることはできますが、複数のメタストアから同じ S3 の場所に書き込むと、整合性の問題が発生する可能性があります。
Databricks のアクセス許可の要件 :
- メタストアに対する
CREATE STORAGE CREDENTIAL
特権が必要です。メタストア管理者は、メタストアをデフォルトでCREATE STORAGE CREDENTIAL
しています。 - 外部ロケーションで参照されるメタストアとストレージ資格情報の両方に対する
CREATE EXTERNAL LOCATION
特権が必要です。 メタストア管理者は、メタストアをデフォルトでCREATE EXTERNAL LOCATION
しています。
AWS のアクセス許可要件 :
- IAMロールを作成するには、
iam:CreateRole
権限が必要です。
AWS S3 バケットにアクセスするストレージ認証情報を作成する
外部ロケーションを作成する前に、 S3 バケットへのアクセスを許可するストレージ認証情報が必要です。 ストレージ認証情報をすでにお持ちの場合は、 AWS S3 バケットの外部ロケーションの作成にスキップできます。
ステップ 1: Create an IAMロール
AWSで、ユーザーにアクセスを許可するS3バケットへのアクセスを許可するIAMロールを作成します。このIAMロールは、S3バケットと同じアカウントで定義する必要があります。
このアクセス権を提供するIAMロールをすでに作成している場合は、このステップをスキップして、ステップ 2: IAMロールの詳細をDatabricksに提供するに直接進むことができます。
-
S3バケットへのアクセスを許可するIAMロールを作成します。
ロールの作成は2段階のプロセスです。このステップでは、ロールを作成し、 一時的な 信頼関係ポリシーとプレースホルダーの外部IDを追加し、Databricksでストレージ認証情報を作成した後に変更します。
ロールは自己前提型である必要がある(つまり、ロール自体を信頼するように構成する必要がある)ため、ロールの作成 後に 信頼ポリシーを変更する必要があります。したがって、自己前提ステートメントを追加する前に、ロールが存在している必要があります。自己前提の役割については、この「Amazonブログ記事」を参照してください。
Databricks は、自己想定されていないロール IAMに基づいて、新規および既存のストレージ資格情報をブロックします。 詳細については、「 自己引き受けロールの適用ポリシー」を参照してください。
ポリシーを作成するには、プレースホルダー外部IDを使用する必要があります。
-
カスタム信頼ポリシー を使用してIAMロールを作成します。
-
カスタム信頼ポリシー フィールドに、以下のポリシーJSONを貼り付けます。
このポリシーは、アカウント間の信頼関係を確立し、Unity CatalogがDatabricksユーザーに代わってバケット内のデータにアクセスする役割を引き受けることができるようにします。これは、
Principal
セクションのARNによって指定されます。これは、Databricksによって作成されたロールを参照する静的な値です。ポリシーは、プレースホルダーとして
0000
外部 ID を設定します。これは、後のステップでストレージ資格情報の外部 ID に更新します。 Databricks on AWS GovCloud(FedRAMP High)を使用する場合、ポリシーは若干異なります。
- Databricks on AWS
- Databricks on AWS GovCloud
- Databricks on AWS GovCloud DoD
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": ["arn:aws:iam::414351767826:role/unity-catalog-prod-UCMasterRole-14S5ZJVKOTYTL"]
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "0000"
}
}
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": ["arn:aws-us-gov:iam::044793339203:role/unity-catalog-prod-UCMasterRole-1QRFA8SGY15OJ"]
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "0000"
}
}
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": ["arn:aws-us-gov:iam::170661010020:role/unity-catalog-prod-UCMasterRole-1DI6DL6ZP26AS"]
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "0000"
}
}
}
]
}
-
アクセス許可ポリシーの構成をスキップします。後のステップでそれを追加するために戻ります。
-
IAMロールを保存します。
-
S3バケットと同じアカウントに次のIAMポリシーを作成し、次の値を置き換えます:
-
<BUCKET>
:S3バケットの名前。 -
<KMS-KEY>
:随意。 暗号化が有効になっている場合は、S3バケットの内容を暗号化するKMSキーの名前を指定します。 暗号化が無効になっている場合は、IAMポリシーのKMSセクション全体を削除します。
-
暗号化が有効になっている場合は、AWS の KMS キー ポリシーを更新して、Unity Catalog IAMロールへのアクセスを許可する必要があります。そうしないと、Unity Catalog はバケット内のデータにアクセスできません。キーポリシーに以下を追加し、プレースホルダを自分の値に置き換えます。
"Principal": {
"AWS": "arn:aws:iam::<AWS-ACCOUNT-ID>:role/<UNITY-CATALOG-IAM-ROLE>"
}
「 Unity Catalog を使用して S3 の暗号化を構成する」を参照してください。
-
<AWS-ACCOUNT-ID>
:AWSアカウントのアカウントID(Databricksアカウントではありません)。 -
<AWS-IAM-ROLE-NAME>
:前のステップで作成したAWS IAMロールの名前。
この IAM ポリシーは、読み取りおよび書き込みアクセスを許可します。読み取りアクセスのみを付与するポリシーを作成することもできます。ただし、ストレージ資格情報を読み取り専用としてマークでき、このIAMロールによって付与された書き込みアクセスDatabricks無視されるため、これは不要な場合があります。
{
"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 Catalogに対してより制限の厳しいIAMポリシーが必要な場合は、Databricksの担当者にお問い合わせください。
- S3 バケットと同じアカウントでファイルイベントの IAM ポリシーを作成します。
このステップはオプションですが、強くお勧めします。 ユーザーに代わってファイル イベントを構成するための Databricks アクセス権を付与しない場合は、場所ごとにファイル イベントを手動で構成する必要があります。そうしないと、Databricks が将来リリースする可能性のある重要な機能へのアクセスが制限されます。詳細については、 情報 ファイルイベントについては、「 (推奨) 外部ロケーションのファイルイベントを有効にする」を参照してください。
IAM ポリシーは、バケットのイベント通知構成の更新、SNS トピックの作成、SQS キューの作成、および SNS トピックへの SQS キューのサブスクライブを行うためのアクセス許可を 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: Databricks に IAMロールの詳細を与える
-
Databricks で、Unity Catalog メタストアにリンクされているワークスペースにログインします。
CREATE STORAGE CREDENTIAL
権限が必要です。この権限はメタストア管理者ロールとアカウント管理者ロールの両方に含まれています。 -
「カタログ 」(Catalog) をクリックしてカタログエクスプローラーを開きます。
-
[
]をクリックし、[ 資格情報の作成 ]をクリックします。
-
AWS IAMロール の 認証情報の種類 を選択します。
-
資格情報の名前、クラウドテナント上のストレージの場所へのアクセスをUnity Catalogに承認するIAMロールARN、およびコメント(オプション)を入力します。
Databricksでインスタンスプロファイルをすでに定義している場合は、「 インスタンスプロファイルをコピー」 をクリックして、そのインスタンスプロファイルのIAMロールARNをコピーします。インスタンスプロファイルの IAMロールには、 Databricks ユーザーがユーザーに代わってバケットにアクセスするためにロールを引き受けることができるアカウント間の信頼関係 Databricks 必要があります。 詳細については、 IAMロール ポリシーと信頼関係の要件については、「 ステップ 1: IAMロールを作成する」を参照してください。
-
(オプション)このストレージ資格情報を使用する外部ロケーションへの読み取り専用アクセス権をユーザーに付与する場合は、[ 詳細オプション ] で [読み取り専用の使用に制限 ] を選択します。 この設定は後で変更できます。詳細については、「 ストレージ資格情報を読み取り専用としてマークする」を参照してください。
-
作成 をクリックします。
-
[ ストレージ資格情報が作成されました ]ダイアログで、[ 外部ID ]をコピーします。
-
[ 完了 ] をクリックします。
-
(オプション)ストレージ資格情報を特定のワークスペースにバインドします。
デフォルトでは、すべての特権ユーザーは、メタストアに接続されている任意のワークスペースでストレージ資格情報を使用できます。 特定のワークスペースからのアクセスのみを許可する場合は、 ワークスペース タブに移動し、ワークスペースを割り当てます。 「 特定のワークスペースへのストレージ資格情報の割り当て」を参照してください。
ステップ 3: IAMロール信頼関係ポリシーを更新する
AWS で、信頼関係ポリシーを変更して、ストレージ認証情報の外部 ID を追加し、自己想定します。
-
保存したIAMロールに戻り、[ 信頼関係 ]タブに移動します。
-
信頼関係ポリシーを次のように編集します。
JSON{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::414351767826:role/unity-catalog-prod-UCMasterRole-14S5ZJVKOTYTL",
"arn:aws:iam::<YOUR-AWS-ACCOUNT-ID>:role/<THIS-ROLE-NAME>"
]
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "<STORAGE-CREDENTIAL-EXTERNAL-ID>"
}
}
}
]
}このポリシーでは、次の値を置き換えます。
<YOUR-AWS-ACCOUNT-ID>
: AWS アカウント ID。<THIS-ROLE-NAME>
: この IAMの名前はロールです。<STORAGE-CREDENTIAL-EXTERNAL-ID>
: 前のステップでコピーしたストレージ資格情報の外部 ID。
ステップ 4: ストレージ資格情報を検証する
ステップ 3: IAMロール信頼関係ポリシーの更新 でIAMロール信頼ポリシーを変更した後、IAMロールがストレージ資格情報として使用するように適切に構成されていることを確認します。
構成を検証するには、ストレージ認証情報の所有者、メタストア管理者であるか、ストレージ認証情報に対するCREATE EXTERNAL LOCATION
権限を持っている必要があります。
-
Databricksで、メタストアにリンクされているワークスペースにログインします。
-
[
カタログ] をクリックします。
-
[ クイック アクセス ] ページで、[ 外部データ> ] ボタンをクリックし、[ 資格情報] タブに移動します。
別の方法として、[カタログ] ペインの上部にある歯車アイコン
クリックして、[ 資格情報] を選択することもできます。
-
検証するストレージ資格情報を選択します。
-
[構成の検証 ] をクリックします。
-
いずれかのチェックが失敗した場合は、 ステップ 3: IAMロールの信頼関係ポリシーを更新 し、 IAMロールの信頼ポリシーを確認して正しく構成します。
ストレージ資格情報が検証されたら、それを使用して 外部ロケーションを作成できます。
自己引き受けロール適用ポリシー
2023 年 6 月 30 日、 AWS は IAMロール トラスト ポリシーを更新 し、 IAMロールが STS:AssumeRole
コールに対して明示的に自己信頼することを要求しました。 そのため、 Databricks ストレージ資格情報のロール AWS IAM自己想定する必要があります。 詳しくはこちらの コミュニティブログ記事をご覧ください。
2025 年 1 月 20 日、Databricks は、自己想定されていないIAMロールを使用して、既存のストレージ資格情報の使用をブロックし始めました。 この禁止により、自己想定されていない資格情報を使用して実行されるワークロードとジョブが中断される可能性があります。
ストレージ資格情報の AWS IAMロールが自己想定であるかどうかを確認するには、「 ステップ 4: ストレージ資格情報を検証する」の手順に従います。 「自己引き受けロール」 チェックが失敗した場合は、「ステップ 3: IAMロールの信頼関係を更新する」ポリシーを再確認し、ロールの信頼ポリシーを信頼するようにIAM再構成します。
メタストアに複数のストレージ資格情報があり、それを確認したい場合は、次のノートブックを使用して、メタストア内のすべてのストレージ資格情報が自主的に機能することを確認してください。
自己想定ストレージ資格情報検証ノートブック
:::::
AWS S3 バケットの外部ロケーションを作成する
このセクションでは、カタログエクスプローラまたは SQLを使用して外部ロケーションを作成する方法について説明します。 S3 バケットへのアクセスを許可するストレージ認証情報がすでにあることを前提としています。
ストレージ認証情報をまだお持ちでない場合は Databricks 、 AWS CloudFormation クイックスタートテンプレート を使用して、ストレージ認証情報と外部ロケーションの両方を作成することをお勧めします。 代わりにストレージ認証情報を手動で作成するには、「 AWS S3 バケットにアクセスするストレージ認証情報の作成」を参照してください。
オプション 1: カタログ エクスプローラを使用して外部ロケーションを作成する
UI 内で作業する場合は、カタログエクスプローラを使用して外部ロケーションを手動で作成します。 プログラムで外部ロケーションを作成するには、 SQL を使用します。
外部ロケーションを作成するには:
-
メタストアにアタッチされているワークスペースにログインします。
-
サイドバーで、「
カタログ 」をクリックします。
-
クイック アクセス ページで、 外部データ > ボタンをクリックし、 外部ロケーション タブに移動して、 外部ロケーションの作成 をクリックします。
-
[ 新しい外部ロケーションの作成 ]ダイアログで、[ 手動 ]をクリックし、[ 次へ ]をクリックします。
AWS クイックスタートオプションの詳細については、「 AWS CloudFormation クイックスタートテンプレートを使用して AWS S3 に接続する」を参照してください。
-
[ 新しい外部ロケーションを手動で作成 ] ダイアログで、 外部ロケーション名 を入力します。
-
[ ストレージの種類 ] で [ S3 ] を選択します。
-
[ URL ] に、S3 バケットパスを入力します。たとえば、
s3://<bucket-path>
です。 -
[ ストレージ資格情報 ] で、外部ロケーションへのアクセスを許可するストレージ資格情報を選択します。
ストレージ資格情報オブジェクトがないが、S3 バケットへのアクセスを許可するAWS IAMロールがある場合は、 [+ 新しいストレージ資格情報の作成 ] を選択して、このダイアログ内でストレージ資格情報オブジェクトを作成できます。
-
(オプション)ユーザに外部ロケーションへの読み取り専用アクセス権を付与する場合は、[ 詳細オプション] をクリックし、[ 読み取り専用の使用に制限] を選択します。この設定は後で変更できます。詳細については、 外部ロケーションを読み取り専用としてマークする を参照してください。
-
(オプション)外部ロケーションがレガシーワークロードの移行を目的としている場合は、[ 詳細オプション ] をクリックし、 フォールバックモード を有効にします。
外部 ロケーションでフォールバック モードを有効にするを参照してください。
-
(オプション)S3 バケットで SSE 暗号化が必要な場合は、Unity Catalog の外部テーブルとボリュームが S3 バケット内のデータにアクセスできるように暗号化アルゴリズムを構成できます。
手順については、「 外部ロケーションでの暗号化アルゴリズムの設定 (AWS S3 のみ)」を参照してください。
-
(オプション)外部ロケーションの変更通知をサブスクライブするには、「 詳細オプション」 をクリックし、「 ファイル・イベントの有効化」 を選択します。
ファイル イベントは、セットアップを簡素化し、ファイル到着トリガーや Auto Loader ファイル通知などの機能のパフォーマンスと容量を向上させます。 このステップはオプションですが、強くお勧めします。
詳細については、「 (推奨)外部ロケーションのファイルイベントを有効にする」を参照してください。
-
作成 をクリックします。
-
(オプション)外部ロケーションを特定のワークスペースにバインドします。
デフォルトでは、すべての特権ユーザーは、メタストアに接続されている任意のワークスペースで外部ロケーションを使用できます。 特定のワークスペースからのアクセスのみを許可する場合は、 ワークスペース タブに移動し、ワークスペースを割り当てます。 「 特定のワークスペースへの外部ロケーションの割り当て」を参照してください。
-
[ 権限] タブに移動して、外部ロケーションを使用する権限を付与します。
外部ロケーションを使用するには、次の権限を付与する必要があります。
-
外部ロケーションを使用して、メタストア、カタログ、またはスキーマにマネージドストレージロケーションを追加するには、
CREATE MANAGED LOCATION
特権を付与します。 -
外部テーブルまたはボリュームを作成するには、
CREATE EXTERNAL TABLE
またはCREATE EXTERNAL VOLUME
を付与します。
- 付与 をクリックします。
- 「
<external location>
に付与 」ダイアログで、[ プリンシパル ]フィールドでユーザー、グループ、またはサービスプリンシパルを選択し、付与する権限を選択します。 - 付与 をクリックします。
-
オプション 2: SQL を使用して外部ロケーションを作成する
SQLを使用して外部ロケーションを作成するには、ノートブックまたはSQLクエリエディタで次のコマンドを実行します。プレースホルダの値を置き換えます。
<location-name>
: 外部ロケーションの名前。ハイフン (-
) などの特殊文字が含まれているlocation_name
場合は、バッククォート (<bucket-path>
:この外部ロケーションがアクセスを許可するクラウドテナント内のパス。 たとえば、s3://mybucket
。<storage-credential-name>
: バケットからの読み取りとバケットへの書き込みを承認するストレージ認証情報の名前。ストレージ資格情報名にハイフン (-
) などの特殊文字が含まれている場合は、バッククォート (
CREATE EXTERNAL LOCATION [IF NOT EXISTS] `<location-name>`
URL '<bucket-path>'
WITH ([STORAGE] CREDENTIAL `<storage-credential-name>`)
[COMMENT '<comment-string>'];
外部ロケーションへのアクセスを特定のワークスペースに制限する場合は、アカウント (ワークスペース バインディングまたは外部ロケーション分離とも呼ばれます) は、「 特定のワークスペースへの外部ロケーションの割り当て」を参照してください。
次のステップ
- 外部ロケーションを使用する権限を他のユーザーに付与します。 「 外部ロケーションの管理」を参照してください。
- 外部ロケーションを使用して管理対象ストレージの場所を定義します。 「 Unity Catalog でマネージド ストレージの場所を指定する」を参照してください。
- 外部ロケーションを使用して外部テーブルを定義します。 「 外部テーブルの操作」を参照してください。
- 外部ロケーションを使用して外部ボリュームを定義します。「 Unity Catalog ボリュームとは」を参照してください。