メインコンテンツまでスキップ

AWS S3 の外部ロケーションに接続する (読み取り専用)

このページでは、最初にストレージ認証情報オブジェクトを作成し、次にカタログ エクスプローラーまたは SQL を使用して外部ロケーションオブジェクトを作成して、AWS S3 バケットに接続する方法について説明します。外部ロケーションを作成する前に、ストレージ資格情報を作成する必要があります。 ストレージ認証情報と外部ロケーションの詳細については、 Unity Catalogクラウド ストレージへのアクセスをどのように管理しますか?」を参照してください。 。

Databricks on Google CloudでのS3のサポートは読み取り専用です。

始める前に

前提条件 :

Databricksで外部ロケーションオブジェクトを作成する前に、AWS で外部ロケーションとして使用するS3バケットを作成する必要があります。

  • S3 バケット名にドット表記 ( incorrect.bucket.name.notationなど) を使用しないでください。AWS ではバケット名にドットを使用できますが、Databricks ではドット表記を使用した S3 バケットはサポートされていません。ドットを含むバケットは、SSL 証明書の検証の失敗により、Delta Sharing などの機能との互換性の問題を引き起こす可能性があります。詳細については、 AWS バケットの命名のベストプラクティスを参照してください。

  • 外部ロケーションパスには、標準の ASCII 文字 (文字 A–Za–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に提供するに直接進むことができます。

  1. S3バケットへのアクセスを許可するIAMロールを作成します。

    ロールの作成は2段階のプロセスです。このステップでは、ロールを作成し、 一時的な 信頼関係ポリシーとプレースホルダーの外部IDを追加し、Databricksでストレージ認証情報を作成した後に変更します。

    ロールは自己前提型である必要がある(つまり、ロール自体を信頼するように構成する必要がある)ため、ロールの作成 後に 信頼ポリシーを変更する必要があります。したがって、自己前提ステートメントを追加する前に、ロールが存在している必要があります。自己前提の役割については、この「Amazonブログ記事」を参照してください。

重要

Databricks は、自己想定されていないロール IAMに基づいて、新規および既存のストレージ資格情報をブロックします。 詳細については、「 自己引き受けロールの適用ポリシー」を参照してください。

ポリシーを作成するには、プレースホルダー外部IDを使用する必要があります。

  1. カスタム信頼ポリシー を使用してIAMロールを作成します。

  2. カスタム信頼ポリシー フィールドに、以下のポリシーJSONを貼り付けます。

    このポリシーは、アカウント間の信頼関係を確立し、Unity CatalogがDatabricksユーザーに代わってバケット内のデータにアクセスする役割を引き受けることができるようにします。これは、 PrincipalセクションのARNによって指定されます。これは、Databricksによって作成されたロールを参照する静的な値です。

    ポリシーは、プレースホルダーとして外部 ID を0000に設定します。後のステップで、これをストレージ資格情報の外部 ID に更新します。

JSON
{
"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"
}
}
}
]
}
  1. アクセス許可ポリシーの構成をスキップします。後のステップでそれを追加するために戻ります。

  2. IAMロールを保存します。

  3. S3バケットと同じアカウントに次のIAMポリシーを作成し、次の値を置き換えます:

    • <BUCKET>:S3バケットの名前。

    • <KMS-KEY>:随意。 暗号化が有効になっている場合は、S3バケットの内容を暗号化するKMSキーの名前を指定します。 暗号化が無効になっている場合は、IAMポリシーのKMSセクション全体を削除します。

注記

暗号化が有効になっている場合は、AWS の KMS キー ポリシーを更新して、Unity Catalog IAMロールへのアクセスを許可する必要があります。そうしないと、Unity Catalog はバケット内のデータにアクセスできません。キーポリシーに以下を追加し、プレースホルダを自分の値に置き換えます。

JSON
"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無視されるため、これは不要な場合があります。

JSON
{
"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の担当者にお問い合わせください。

  1. S3 バケットと同じアカウントでファイルイベントの IAM ポリシーを作成します。
注記

このステップはオプションですが、強くお勧めします。 Databricks にファイル イベントを構成するアクセス権を付与しない場合は、場所ごとにファイル イベントを手動で構成する必要があります。そうしないと、Databricks が将来リリースする可能性のある重要な機能へのアクセスが制限されます。ファイル イベントの詳細については、 「外部ロケーションのファイル イベントのセットアップ」を参照してください。

IAM ポリシーは、バケットのイベント通知構成の更新、SNS トピックの作成、SQS キューの作成、および SNS トピックへの SQS キューのサブスクライブを行うためのアクセス許可を Databricks に付与します。これらは、ファイル イベントを使用する機能に必要なリソースです。<BUCKET> を S3 バケットの名前に置き換えます。

JSON
{
"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-*"]
}
]
}
  1. IAMポリシーをIAMロールに添付します。

    ロールの [アクセス許可] タブで、作成した IAM ポリシーをアタッチします。

ステップ 2: Databricks に IAMロールの詳細を与える

  1. Databricks で、Unity Catalog メタストアにリンクされているワークスペースにログインします。

    CREATE STORAGE CREDENTIAL権限が必要です。この権限はメタストア管理者ロールとアカウント管理者ロールの両方に含まれています。

  2. データアイコン。 「カタログ 」(Catalog) をクリックしてカタログエクスプローラーを開きます。

  3. [ 追加またはプラスアイコン]をクリックし、[ 資格情報の作成 ]をクリックします。

  4. AWS IAMロール認証情報の種類 を選択します。

  5. 資格情報の名前、クラウドテナント上のストレージの場所へのアクセスをUnity Catalogに承認するIAMロールARN、およびコメント(オプション)を入力します。

    :::

  6. 作成 をクリックします。

  7. [ ストレージ資格情報が作成されました ]ダイアログで、[ 外部ID ]をコピーします。

  8. [ 完了 ] をクリックします。

  9. (オプション)ストレージ資格情報を特定のワークスペースにバインドします。

    デフォルトでは、すべての特権ユーザーは、メタストアに接続されている任意のワークスペースでストレージ資格情報を使用できます。 特定のワークスペースからのアクセスのみを許可する場合は、 ワークスペース タブに移動し、ワークスペースを割り当てます。 「 特定のワークスペースへのストレージ資格情報の割り当て」を参照してください。

ステップ 3: IAMロール信頼関係ポリシーを更新する

AWS で、信頼関係ポリシーを変更して、ストレージ認証情報の外部 ID を追加し、自己想定します。

  1. 保存したIAMロールに戻り、[ 信頼関係 ]タブに移動します。

  2. 信頼関係ポリシーを次のように編集します。

    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権限を持っている必要があります。

  1. Databricksで、メタストアにリンクされているワークスペースにログインします。

  2. [データアイコン。 カタログ] をクリックします。

  3. [外部データ >] ボタンをクリックし、 [資格情報] タブに移動します。

    別の方法として、[カタログ] ペインの上部にある歯車アイコン 歯車アイコン。 クリックして、[ 資格情報] を選択することもできます。

  4. 検証するストレージ資格情報を選択します。

  5. [構成の検証 ] をクリックします。

  6. いずれかのチェックが失敗した場合は、 ステップ 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再構成します。

メタストアに複数のストレージ資格情報があり、それを確認したい場合は、次のノートブックを使用して、メタストア内のすべてのストレージ資格情報が自主的に機能することを確認してください。

自己想定ストレージ資格情報検証ノートブック

Open notebook in new tab

AWS S3 バケットの外部ロケーションを作成する

このセクションでは、カタログエクスプローラまたは SQLを使用して外部ロケーションを作成する方法について説明します。 S3 バケットへのアクセスを許可するストレージ認証情報がすでにあることを前提としています。

オプション 1: カタログ エクスプローラを使用して外部ロケーションを作成する

UI 内で作業する場合は、カタログエクスプローラを使用して外部ロケーションを手動で作成します。 プログラムで外部ロケーションを作成するには、 SQL を使用します。

外部ロケーションを作成するには:

  1. メタストアにアタッチされているワークスペースにログインします。

  2. サイドバーで、「データアイコン。 カタログ 」をクリックします。

  3. [外部データ >] ボタンをクリックし、 [外部ロケーション] タブに移動して、 [外部ロケーションの作成] を クリックします。

  4. [ 新しい外部ロケーションの作成 ]ダイアログで、[ 手動 ]をクリックし、[ 次へ ]をクリックします。

  5. [ 新しい外部ロケーションを手動で作成 ] ダイアログで、 外部ロケーション名 を入力します。

  6. [ ストレージの種類 ] で [ S3 ] を選択します。

  7. [ URL ] に、S3 バケットパスを入力します。たとえば、 s3://<bucket-path>です。

  8. [ ストレージ資格情報 ] で、外部ロケーションへのアクセスを許可するストレージ資格情報を選択します。

注記

ストレージ資格情報オブジェクトがないが、S3 バケットへのアクセスを許可するAWS IAMロールがある場合は、 [+ 新しいストレージ資格情報の作成 ] を選択して、このダイアログ内でストレージ資格情報オブジェクトを作成できます。

  1. (オプション)ユーザに外部ロケーションへの読み取り専用アクセス権を付与する場合は、[ 詳細オプション] をクリックし、[ 読み取り専用の使用に制限] を選択します。この設定は後で変更できます。詳細については、 外部ロケーションを読み取り専用としてマークする を参照してください。

  2. (オプション)外部ロケーションがレガシーワークロードの移行を目的としている場合は、[ 詳細オプション ] をクリックし、 フォールバックモード を有効にします。

    外部 ロケーションでフォールバック モードを有効にするを参照してください。

  3. (オプション)S3 バケットで SSE 暗号化が必要な場合は、Unity Catalog の外部テーブルとボリュームが S3 バケット内のデータにアクセスできるように暗号化アルゴリズムを構成できます。

    手順については、「 外部ロケーションでの暗号化アルゴリズムの設定 (AWS S3 のみ)」を参照してください。

  4. (オプション) ファイル イベントは、セットアップを簡素化し、ファイル到着トリガーやAuto Loaderファイル通知などの機能のパフォーマンスと容量を向上させるために、 デフォルト によって有効になっています。 資格情報が正しく構成されていない場合、検証が失敗する可能性があります。認証情報の設定の詳細については、 「外部ロケーションのファイル イベントの設定」を参照してください。 ファイル イベント機能を使用する予定がない場合でも、場所を強制的に作成することを選択できます。

    ファイル イベントの種類を変更するには、 [詳細オプション] をクリックし、 [ファイル イベントの種類] ドロップダウン リストからオプションを選択します。

    • 自動 (推奨) : ストレージ キューとイベント サブスクリプションは、そのライフサイクル全体を通じて自動的に作成および管理されます。
    • 提供 : ストレージ キューは組織によって提供されます。組織がクラウド リソースと安全管理を所有および構成する必要がある場合は、このオプションを選択します。
  5. 作成 をクリックします。

  6. (オプション)外部ロケーションを特定のワークスペースにバインドします。

    デフォルトでは、すべての特権ユーザーは、メタストアに接続されている任意のワークスペースで外部ロケーションを使用できます。 特定のワークスペースからのアクセスのみを許可する場合は、 ワークスペース タブに移動し、ワークスペースを割り当てます。 「 特定のワークスペースへの外部ロケーションの割り当て」を参照してください。

  7. [ 権限] タブに移動して、外部ロケーションを使用する権限を付与します。

    外部ロケーションを使用するには、次の権限を付与する必要があります。

    • 外部ロケーションを使用して、メタストア、カタログ、またはスキーマにマネージドストレージロケーションを追加するには、 CREATE MANAGED LOCATION 特権を付与します。
    • 外部テーブルまたはボリュームを作成するには、 CREATE EXTERNAL TABLE または CREATE EXTERNAL VOLUMEを付与します。
    1. 付与 をクリックします。
    2. <external location>に付与 」ダイアログで、[ プリンシパル ]フィールドでユーザー、グループ、またはサービスプリンシパルを選択し、付与する権限を選択します。
    3. 付与 をクリックします。

オプション 2: SQL を使用して外部ロケーションを作成する

SQLを使用して外部ロケーションを作成するには、ノートブックまたはSQLクエリエディタで次のコマンドを実行します。プレースホルダの値を置き換えます。

  • <location-name>: 外部ロケーションの名前。ハイフン (-) などの特殊文字が含まれているlocation_name場合は、バッククォート (` `) で囲む必要があります。「名前」を参照してください。
  • <bucket-path>:この外部ロケーションがアクセスを許可するクラウドテナント内のパス。 たとえば、 s3://mybucket
  • <storage-credential-name>: バケットからの読み取りとバケットへの書き込みを承認するストレージ認証情報の名前。ストレージ資格情報名にハイフン (-) などの特殊文字が含まれている場合は、バッククォート (` `) で囲む必要があります。
SQL
CREATE EXTERNAL LOCATION [IF NOT EXISTS] `<location-name>`
URL '<bucket-path>'
WITH ([STORAGE] CREDENTIAL `<storage-credential-name>`)
[COMMENT '<comment-string>'];

外部ロケーションへのアクセスを特定のワークスペースに制限する場合は、アカウント (ワークスペース バインディングまたは外部ロケーション分離とも呼ばれます) は、「 特定のワークスペースへの外部ロケーションの割り当て」を参照してください。

次のステップ