チュートリアル: インスタンスプロファイルを使用して S3 アクセスを構成する
このドキュメントは廃止されており、更新されない可能性があります。
この記事では、Amazon S3 へのアクセスを構成するための従来のパターンについて説明します。Databricks では、クラウド オブジェクト ストレージに保存されているデータへのアクセスを管理するために、Unity Catalog の外部ロケーションを使用することを推奨しています。AWS CloudFormation を使用したS3のストレージ認証情報と外部ロケーションの作成」を参照してください。
このチュートリアルでは、単一のS3バケットに対する読み取り、書き込み、更新、削除の権限を持つインスタンスを作成する方法を説明します。 単一のIAMロールとインスタンスを使用して、複数のバケットに権限を付与できます。 インスタンスオプションを使用して、 S3に対する読み取りおよびリストのアクセス許可のみを付与することもできます。
管理者はAWSでIAMを構成し、 Databricksワークスペースにリンクし、インスタンスをコンピュートに関連付けるアクセス権を特権ユーザーに付与します。 インスタンス装備が添付されたコンピュート リソースにアクセスできるすべてのユーザーは、インスタンス装備によって付与された権限を取得します。
始める前に
このチュートリアルは、ワークスペース管理者を対象としています。Databricksワークスペースを含むAWSアカウントに十分な権限があり、Databricksワークスペース管理者である必要があります。
このチュートリアルでは、以下の権限とアセットがあることを前提としています。
- Databricksワークスペースのデプロイに使用されるIAMロールを編集する権限
- AWSで新しいIAMロールを作成するための権限
- S3バケットに対する権限を編集する権限
ステップ 1: AWSコンソールを使用してインスタンスを作成する
-
AWSコンソールで、 [IAM] サービスに移動します。
-
サイドバーの「 ロール 」タブをクリックします。
-
「 ロールの作成 」をクリックします。
- [信頼されたエンティティタイプ] で、 [AWS サービス] を選択します。
- [ユースケース] で [EC2] を選択します。
- 次へ をクリックします。
- ページの下部にある 「次へ」 をクリックします。
- 「ロール名」 フィールドにロール名を入力します。
- 「 ロールの作成 」をクリックします。
-
ロールリストで、ロールをクリックします。
-
ロールにインライン ポリシーを追加します。このポリシーは、S3 バケットへのアクセスを許可します。
-
[権限] タブで、 [権限の追加] > [インライン ポリシーの作成] をクリックします。
-
JSON タブをクリックします。
-
このポリシーをコピーし、
<s3-bucket-name>バケットの名前に設定します。JSON{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": ["arn:aws:s3:::<s3-bucket-name>"]
},
{
"Effect": "Allow",
"Action": ["s3:PutObject", "s3:GetObject", "s3:DeleteObject", "s3:PutObjectAcl"],
"Resource": ["arn:aws:s3:::<s3-bucket-name>/*"]
}
]
} -
「 ポリシーの確認 」をクリックします。
-
[名前] フィールドにポリシー名を入力します。
-
「 ポリシーの作成 」をクリックします。
-
-
ロールの概要で、 ロールARN をコピーします。

S3バケットの暗号化を有効にする場合は、設定で提供されたKMSキーの キー ユーザー としてIAMロールを追加する必要があります。 KMS を使用して S3 の暗号化を構成するを参照してください。
ステップ 2: ポリシーがサーバーレス リソースと連携できるようにする
このステップにより、インスタンスプロファイルがインスタンスプロファイルを使用してSQLウェアハウスを構成するためにも機能するようになります。 データ アクセス構成を参照してください。
-
役割リストで、インスタンスをクリックします。
-
[信頼関係] タブを選択します。
-
[ 信頼ポリシーの編集 ] をクリックします。
-
既存の
Statement配列内で、次の JSON ブロックを既存の信頼ポリシーの末尾に追加します。既存のポリシーを上書きしないようにしてください。JSON{
"Effect": "Allow",
"Principal": {
"AWS": ["arn:aws:iam::790110701330:role/serverless-customer-resource-role"]
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": ["databricks-serverless-<YOUR-WORKSPACE-ID1>", "databricks-serverless-<YOUR-WORKSPACE-ID2>"]
}
}
}ステートメントで変更する必要があるのは、ワークスペース ID のみです。
YOUR_WORKSPACE-IDを、このロールを使用するワークスペースの 1 つ以上のDatabricksワークスペース IDに置き換えます。
ワークスペース ID を取得するには、ワークスペースの使用時に URL を確認してください。たとえば、 https://<databricks-instance>/?o=6280049833385130では、 o=の後の数字はワークスペース ID です。
ポリシーの原則は編集しないでください 。 Principal.AWS フィールドは arn:aws:iam::790110701330:role/serverless-customer-resource-role 値を持ち続ける必要があります。これは、Databricksが管理するサーバーレスのコンピューティング・ロールを指します。
5. 「 ポリシーの確認 」をクリックします。
- [変更を保存] をクリックします。
ステップ 3: バケットポリシーを作成する
少なくとも、S3 ポリシーには、バケットへの読み取り専用アクセスを提供する ListBucket アクションと GetObject アクションが含まれている必要があります。 Delta Lake は、通常の操作中に DeleteObject と PutObject のアクセス許可を使用します。 次の例のポリシーのアクセス許可は、データの読み取りと書き込みを行うクラスターに推奨されるデフォルトです。
S3バケットにはユニバーサルに一意な名前があります。ユニバーサルな識別のためにアカウントIDは必要ありません。S3バケットを別のAWSアカウントのIAMロールやDatabricksワークスペースにリンクする場合は、S3バケットポリシーを設定する際にアカウントIDを指定する必要があります。
-
S3 コンソールに移動します。 「バケット」 リストから、ポリシーを作成するバケットを選択します。
-
[ アクセス許可 ]をクリックします。
-
バケットポリシー の下で、 編集 をクリックします。
-
ポリシーを貼り付けます。サンプルのクロスアカウント バケットIAMポリシーは次のようになります。
<aws-account-id-databricks>Databricks環境がデプロイされているAWSアカウント ID、<iam-role-for-s3-access>はインスタンス ロール、<s3-bucket-name>はバケット名に置き換えられます。JSON{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Example permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<aws-account-id-databricks>:role/<iam-role-for-s3-access>"
},
"Action": ["s3:GetBucketLocation", "s3:ListBucket"],
"Resource": "arn:aws:s3:::<s3-bucket-name>"
},
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<aws-account-id-databricks>:role/<iam-role-for-s3-access>"
},
"Action": ["s3:PutObject", "s3:GetObject", "s3:DeleteObject", "s3:PutObjectAcl"],
"Resource": "arn:aws:s3:::<s3-bucket-name>/*"
}
]
} -
保存 をクリックします。
ステップ 4: Databricksデプロイを作成したIAMロールを見つけます
どのIAMロールがDatabricksデプロイメントを作成したかわからない場合は、次の手順を実行します。
- アカウント管理者として、アカウントコンソールにログインします。
- [ワークスペース] に移動し、ワークスペース名をクリックします。
- [資格情報] ボックスで、[ロールARN]の末尾にあるロール名を書き留めます。
例えば、ロールARN arn:aws:iam::123456789123:role/finance-prodでは、ロール名はfinance-prodです。
ステップ 5: S3 IAMロールをEC2ポリシーに追加する
-
AWSコンソールで、 [IAM] サービスに移動します。
-
サイドバーの「 ロール 」タブをクリックします。
-
Databricks配置を作成したロールをクリックします
-
[権限] タブで、ポリシーをクリックします。
-
[ポリシーの編集] をクリックします。
-
次のブロックを
Statement配列の末尾に追加します。既存のポリシーを上書きしないようにしてください。<iam-role-for-s3-access>チュートリアルで作成したロールに置き換えます: インスタンスに従ってS3アクセスを構成します:JSON{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "arn:aws:iam::<aws-account-id-databricks>:role/<iam-role-for-s3-access>"
} -
「 ポリシーの確認 」をクリックします。
-
[変更を保存] をクリックします。
ステップ 6: Databricksにインスタンスを追加する
-
ワークスペース管理者として、設定ページに移動します。
-
セキュリティ タブをクリックします。
-
インスタンスプロファイル の横にある 管理 をクリックします。
-
「インスタンスを追加」 をクリックします。
-
インスタンス有利ARN 「インスタンス有利ARN フィールドに貼り付けます。 ARNお持ちでない場合は、 「チュートリアル: インスタンスを使用してS3アクセスを構成する」を参照してください。
-
サーバーレスSQLインスタンス準備と連携するには、IAMrollARN フィールドでインスタンスに関連付けられたロールARN明示的に指定する必要がある場合が IAM ARN 。
これは、インスタンスに関連付けられたロール名 (ロールARNの最後のスラッシュの後のテキスト) とインスタンス名 (インスタンス ARN の最後のスラッシュの後のテキスト) が一致しない場合にのみ必須のARNです。 これがあなたに当てはまるかどうかを確認するには:
-
AWS コンソールで、 IAM サービスの [ロール] タブに移動します。アカウント内のIAMロールが一覧表示されます。
-
このセクションで先ほどご覧いただいた [ インスタンスプロファイル ] フィールドの [ データセキュリティ ] セクションにあるDatabricks SQL管理設定のインスタンスプロファイル名と一致する名前のロールをクリックします。
-
概要領域で、「 Role ARN フィールドと 「インスタンスARNs フィールドを見つけて、それらが一致するかどうかを確認します。

-
一致しない場合は、ロールARN ARN IAM に貼り付けます。 名前が一致する場合は ARN IAM フィールドを設定する必要はありません。
-
IAM 認証情報パススルーを設定する場合のみ、 メタインスタンスプロファイル プロパティを選択します。
-
-
Databricks は、インスタンスプロファイル ARN が構文的にも意味的にも正しいことを検証します。 セマンティックの正確性を検証するために、 Databricks は、このインスタンスプロファイルを使用してクラスターを起動してドライ実行を行います。 このドライ実行でエラーが発生すると、UI で検証エラーが発生します。 インスタンスプロファイルに
tag-enforcementポリシーが含まれている場合、インスタンスプロファイルの検証は失敗し、正当なインスタンスプロファイルを追加できない可能性があります。 検証が失敗し、インスタンスプロファイルを追加する場合は、[ 検証をスキップ ] チェックボックスをオンにします。 -
[ 追加 ] をクリックします。
インスタンスプロファイルを管理する
ワークスペース管理者はインスタンスへのアクセスを管理し、更新することができます。 Databricksでのインスタンスの管理」を参照してください。