AWS S3 に接続するためのストレージ認証情報を作成する

この記事では、AWS S3 に接続するためにUnity Catalogでストレージ認証情報を作成する方法について説明します。

テーブルとボリュームを保持する基盤となるクラウド ストレージへのアクセスを管理するために、Unity Catalog は次のオブジェクト タイプを使用します。

  • ストレージ資格情報は、クラウドストレージにアクセスするための長期的なクラウド資格情報をカプセル化します。

  • 外部ロケーションには、ストレージ資格情報とクラウドストレージパスへの参照が格納されています。

詳細については、 Unity Catalogを使用してクラウドオブジェクトストレージに接続する」を参照してください。

Unity Catalog は、 Databricks on AWSの 2 つのクラウド ストレージ オプション、AWS S3 バケットと Cloudflare R2 バケットをサポートしています。 Cloudflare R2は主に、データエグレス料金を回避したいDelta Sharingユースケースを対象としています。 S3 は、他のほとんどのユースケースに適しています。 この記事では、S3 のストレージ認証情報の作成に焦点を当てます。 Cloudflare R2 については、「Cloudflare R2 に接続するためのストレージ資格情報を作成する」を参照してください。

S3 バケットにアクセスするためのストレージ認証情報を作成するには、S3 バケット パスへのアクセス (読み取り、または読み取りと書き込み) を承認する IAM ロールを作成し、ストレージ認証情報定義でその IAM ロールを参照します。

要件

Databricksにおいて:

  • Unity Catalogが有効化されたDatabricksワークスペース

  • CREATE STORAGE CREDENTIAL ワークスペースにアタッチされているUnity Catalogメタストアに対する権限。 アカウント管理者とメタストア管理者には、デフォルトでこの権限が与えられます。

AWSアカウントにおいて:

  • データにアクセスするワークスペースと同じリージョンにある S3 バケット

    バケット名にドット表記を含めることはできません(例:incorrect.bucket.name.notation)。バケットの命名方法の詳細については、「AWSバケットの命名規則」を参照してください。

  • IAMロールを作成する権限

ステップ1:IAMロールを作成する

AWSで、ユーザーにアクセスを許可するS3バケットへのアクセスを許可するIAMロールを作成します。このIAMロールは、S3バケットと同じアカウントで定義する必要があります。

ヒント

このアクセスを許可するIAMロールを既に作成している場合は、このステップをスキップして、「 ステップ2:DatabricksにIAMロールの詳細を付与する」に進んでください。

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

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

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

    重要

    2024 年 9 月 20 日より、Databricks は新しいストレージ資格情報に対する自己仮定要件の適用を開始します。 2025 年 1 月 20 日より、Databricks は自己仮定ではない既存のストレージ資格情報のブロックを開始します。 詳細については、 「自己引き受けロール強制ポリシー」を参照してください。

    ポリシーを作成するには、プレースホルダー外部 ID を使用する必要があります。 AWS リソースへのアクセス権をサードパーティーに付与するには、AWS で外部 ID が必要です。

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

    2. [ Custom Trust Policy ] フィールドに、次のポリシー JSON を貼り付けます。

      このポリシーは、アカウント間の信頼関係を確立し、Unity Catalog が Databricks ユーザーに代わってバケット内のデータにアクセスする役割を引き受けることができるようにします。 これは、 Principalセクションの ARN によって指定されます。 これは、Databricks によって作成されたロールを参照する静的な値です。 ポリシーは Databricks AWS ARN arn:aws:iam::414351767826:role/unity-catalog-prod-UCMasterRole-14S5ZJVKOTYTLを使用します。 Databricks on AWS GovCloudで Databricksを使用している場合はDatabricks on AWS GovCloud ARN arn:aws-us-gov:iam::044793339203:role/unity-catalog-prod-UCMasterRole-1QRFA8SGY15OJ の Databricks を使用してください。

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

      {
        "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"
            }
          }
        }]
      }
      
    3. アクセス許可ポリシーの構成をスキップします。この構成は、後のステップで追加します。

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

  2. 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"
              ],
              "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 アカウント チームにお問い合わせください。

  3. IAMポリシーをIAMロールにアタッチします。

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

ステップ 2:IAMロールの詳細をDatabricksに渡す

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

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

  2. カタログ アイコン カタログ」 をクリックします

  3. [ カタログ ] ウィンドウの上部にある [追加アイコンまたはプラスアイコン 追加 ] アイコンをクリックし、メニューから [ ストレージ認証情報の追加] を選択します。

    このオプションは、 CREATE STORAGE CREDENTIAL 権限がない場合には表示されません。

    または、クイック アクセスページで[外部データ >]ボタンをクリックし、 [ストレージ資格情報] タブに移動して[資格情報の作成]を選択します。

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

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

    ヒント

    Databricks でインスタンスプロファイルを既に定義している場合は、[インスタンスプロファイル のコピー ] をクリックして、その インスタンスプロファイル の IAMロール ARN をコピーできます。インスタンスプロファイルの IAMロールには、Databricks ユーザーに代わってバケットにアクセスするために、Databricks がロールを引き受けることができるクロスアカウントの信頼関係が必要です。 IAMロールポリシーと信頼関係の要件の詳細については、「 ステップ 1: IAMロールを作成する」を参照してください。

  6. (オプション)このストレージ資格情報を使用する外部ロケーションへの読み取り専用アクセス権をユーザーに付与する場合は、[詳細オプション]で[読み取り専用] を選択します。 詳細については、「 ストレージ資格情報を読み取り専用としてマークする」を参照してください。

  7. 作成」をクリックします。

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

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

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

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

  11. このストレージ資格情報を参照する外部ロケーションを作成します

Databricks Terraformプロバイダーdatabricks_storage_credentialを使用して、ストレージ資格情報を作成することもできます。

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

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

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

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

    次の ARN を「Allow」ステートメントに追加します。 <YOUR-AWS-ACCOUNT-ID><THIS-ROLE-NAME>を実際のアカウント ID と IAMroll の値に置き換えます。

    "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-UCMasterRole-14S5ZJVKOTYTL",
              "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 ロール トラストロール ポリシー 変更を加えた後、IAMIAM がストレージ資格情報として使用されるように適切に構成されていることを確認します。

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

  2. カタログ アイコン カタログ」 をクリックします

  3. [クイック アクセス]ページで、 [外部データ >]ボタンをクリックし、 [ストレージ資格情報]タブに移動します。

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

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

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

  6. いずれかのチェックが失敗した場合は、ステップ 3: IAMロール ポリシーを更新するに戻り、 IAMロールの信頼ポリシーを確認して正しく構成します。

自己責任役割執行ポリシー

2023 年 6 月 30 日、 AWS IAMロールの信頼ポリシーを更新し、 IAMロールが STS:AssumeRole 呼び出しに対して明示的に自己信頼することを要求しました。 その結果、 Databricks 、ストレージ認証情報のAWS IAMロールが自己想定型であることが求められ、自己想定型でないストレージ認証情報は間もなく禁止される予定です。 詳細については、このコミュニティ ブログ記事を参照してください。

、2024 年 9 月 20 日より、Databricks 自己完結型ではないAWSIAM ロールを使用したストレージ認証情報の作成を禁止します。非自己仮定型IAMロールを使用した既存のストレージ認証情報は引き続き機能しますが、それらのロールを使用して新しいストレージ認証情報を作成することはできません。

2025 年 1 月 20 日より、 Databricks 、非自己仮定型IAMロールによる既存のストレージ資格情報の使用をブロックし始めます。 これにより、自己仮定型ではない資格情報を使用して実行されるワークロードとジョブが破損する可能性があります。

ストレージ認証情報のAWS IAMロールが自己想定であるかどうかを確認するには、 「ステップ 4: ストレージ認証情報を検証する」の手順に従います。 自己想定ロールのチェックが失敗した場合は、ステップ 3: IAMロール ポリシーを更新し、それ自体を信頼するようにIAMロールの信頼ポリシーを再構成します。

メタストア内に確認するストレージ資格情報が複数ある場合は、次のノートブックを使用して、メタストア内のすべてのストレージ資格情報の自己仮定機能を検証します。

自己満足型ストレージ認証情報検証ノートブック

ノートブックを新しいタブで開く

(オプション) 特定のワークスペースにストレージ認証情報を割り当てる

プレビュー

この機能は パブリックプレビュー版です。

デフォルトでは、ストレージ資格情報はメタストア内のすべてのワークスペースからアクセスできます。 つまり、ユーザーにそのストレージ資格情報に対する権限 ( CREATE EXTERNAL LOCATIONなど) が付与されている場合、そのユーザーはメタストアに接続されている任意のワークスペースからその権限を行使できます。 ワークスペースを使用してユーザー データ アクセスを分離する場合は、特定のワークスペースからのみストレージ資格情報へのアクセスを許可することをお勧めします。 この機能は、ワークスペース バインディングまたはストレージ資格情報の分離と呼ばれます。

ストレージ資格情報を特定の ワークスペース にバインドする一般的なユース ケースは、クラウド管理者が 本番運用 クラウド アカウント 資格情報を使用してストレージ資格情報を構成し、 Databricksユーザーがこの資格情報を使用して 本番運用 ワークスペース にのみ外部ロケーションを作成できるようにするシナリオです。

ワークスペース バインディングの詳細については、 「(オプション) 特定のワークスペースに外部ロケーションを割り当てる」および「特定のワークスペースへのカタログ アクセスを制限する」を参照してください。

注:

ストレージ資格情報に対する権限が実行されるときに、ワークスペース バインディングが参照されます。 たとえば、ユーザーがストレージ資格情報を使用して外部ロケーションを作成した場合、ストレージ資格情報のワークスペース バインディングは、外部ロケーションが作成された場合にのみチェックされます。 外部ロケーションが作成されると、ストレージ資格情報で構成されたワークスペース バインディングとは独立して機能します。

ストレージ資格情報を1つ以上のワークスペースにバインドする

特定のワークスペースにストレージ資格情報を割り当てるには、カタログ エクスプローラーまたは Databricks CLI を使用できます。

必要なアクセス許可: メタストア管理者またはストレージ資格情報の所有者。

注:

メタストア管理者は、カタログ エクスプローラーを使用してメタストア内のすべてのストレージ資格情報を表示できます。また、ストレージ資格情報の所有者は、ストレージ資格情報が現在のワークスペースに割り当てられているかどうかに関係なく、メタストア内で所有するすべてのストレージ資格情報を表示できます。 ワークスペースに割り当てられていないストレージ資格情報はグレー表示されます。

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

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

  3. [ カタログ ] ウィンドウの上部にある [ 歯車アイコン ] 歯車アイコンをクリックし、[ ストレージ認証情報] を選択します。

    または、クイック アクセスページで[外部データ >]ボタンをクリックし、 [ストレージ資格情報]タブに移動します。

  4. ストレージ資格情報を選択し、 「ワークスペース」タブに移動します。

  5. ワークスペースタブで、 [すべてのワークスペースにアクセス権がある]チェックボックスをオフにします。

    ストレージ資格情報がすでに 1 つ以上のワークスペースにバインドされている場合、このチェックボックスはすでにオフになっています。

  6. 「ワークスペースへの割り当て」をクリックし、割り当てるワークスペースを入力または検索します。

アクセスを取り消すには、ワークスペースタブに移動し、ワークスペースを選択して、 「取り消し」をクリックします。 すべてのワークスペースからのアクセスを許可するには、 「すべてのワークスペースにアクセス権を与える」チェックボックスをオンにします。

ワークスペースにストレージ資格情報を割り当てるには、2 つのDatabricks CLIコマンド グループと 2 つのステップが必要です。

次の例では、 <profile-name> Databricks 認証構成プロファイルの名前に置き換えます。 個人アクセストークンを生成したワークスペースのワークスペースインスタンス名とワークスペース ID に加えて、個人アクセストークンの値も含める必要があります。 Databricks個人アクセストークン認証を参照してください。

  1. storage-credentialsコマンド グループのupdateコマンドを使用して、ストレージ資格情報のisolation modeISOLATEDに設定します。

    databricks storage-credentials update <my-storage-credential> \
    --isolation-mode ISOLATED \
    --profile <profile-name>
    

    デフォルトのisolation-modeは、メタストアにアタッチされているすべてのワークスペースに対してOPENです。

  2. workspace-bindingsコマンド グループのupdate-bindingsコマンドを使用して、ワークスペースをストレージ資格情報に割り当てます。

    databricks workspace-bindings update-bindings storage-credential <my-storage-credential> \
    --json '{
      "add": [{"workspace_id": <workspace-id>}...],
      "remove": [{"workspace_id": <workspace-id>}...]
    }' --profile <profile-name>
    

    ワークスペース バインディングを追加または削除するには、 "add"プロパティと"remove"プロパティを使用します。

    注:

    読み取り専用バインディング (BINDING_TYPE_READ_ONLY) は、ストレージ資格情報には使用できません。 したがって、ストレージ資格情報のバインドに binding_type を設定する理由はありません。

ストレージ資格情報のすべてのワークスペース割り当てを一覧表示するには、 workspace-bindingsコマンド グループのget-bindingsコマンドを使用します。

databricks workspace-bindings get-bindings storage-credential <my-storage-credential> \
--profile <profile-name>

ワークスペースからストレージ資格情報のバインドを解除する

Catalog Explorer または workspace-bindings CLIコマンド グループを使用してストレージ資格情報へのワークスペース アクセスを取り消す手順については、「ストレージ資格情報を 1 つ以上のワークスペースにバインドする」を参照してください。

次のステップ

ストレージ資格情報を使用するアクセス許可を表示、更新、削除、および他のユーザーに付与できます。 「 ストレージ資格情報の管理」を参照してください。

ストレージ資格情報を使用して外部ロケーションを定義できます。 「AWS S3 に接続するためのストレージ認証情報を作成する」を参照してください。