チュートリアル: インスタンスプロファイルを使用した S3 アクセスの設定
この記事では、Amazon S3 へのアクセスを設定するためのレガシーパターンについて説明します。 Databricks は、 Unity Catalog 外部ロケーションを使用して、クラウドオブジェクトストレージに保存されているデータへのアクセスを管理することをお勧めします。 「Unity Catalog を使用してクラウド オブジェクト ストレージとサービスに接続する」を参照してください。
このチュートリアルでは、1 つの S3 バケットに対して読み取り、書き込み、更新、および削除のアクセス許可を持つインスタンスプロファイルを作成する方法について説明します。 1 つの IAMロールとインスタンスプロファイルを使用して、複数のバケットに権限を付与できます。 インスタンスプロファイルを使用して、S3 に対する読み取り権限とリスト権限のみを付与することもできます。
管理者はIAM AWSDatabricksで ロールを設定し、 ワークスペースにリンクし、インスタンスプロファイルをコンピュートに関連付けるためのアクセス権を特権ユーザーに付与します。インスタンスプロファイルがアタッチされたコンピュート リソースにアクセスできるすべてのユーザーは、インスタンスプロファイルによって付与された特権を取得します。
始める前に
このチュートリアルは、ワークスペース管理者を対象としています。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バケットの 暗号化IAM を有効にする場合は、設定で指定されたKMS キーの キーユーザー として ロールを追加する必要があります。「 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: デプロイを作成したIAM ロールを見つけるDatabricks
Databricksデプロイを作成したIAMロールがわからない場合は、次の手順を実行します:
- アカウント管理者として、アカウントコンソールにログインします。
- [ワークスペース] に移動し、ワークスペース名をクリックします。
- [資格情報] ボックスで、[ロール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インスタンスプロファイルと連携させるには、インスタンスプロファイルに関連付けられたロールARNを IAMロール プロファイル ARN フィールドに明示的に指定する必要があります。
これは、インスタンスプロファイルに関連付けられたロール名 (ロール ARN の最後のスラッシュの後のテキスト) とインスタンスプロファイル名 (インスタンスプロファイル ARN の最後のスラッシュの後のテキスト) が一致しない場合にのみ必要なステップです。 これがあなたに当てはまるかどうかを確認するには:
-
AWS コンソールで、 IAM サービスの [ロール] タブに移動します。 アカウント内の IAMロールが一覧表示されます。
-
このセクションで先ほどご覧いただいた [ インスタンスプロファイル ] フィールドの [ データセキュリティ ] セクションにあるDatabricks SQL管理設定のインスタンスプロファイル名と一致する名前のロールをクリックします。
-
サマリー領域で、[ Role ARN ] フィールドと [インスタンスプロファイル] ARNs フィールドを見つけて、一致するかどうかを確認します。
-
ARN IAM一致しない場合は、ロールARN を [ロール] フィールドに貼り付けます。名前が一致する場合は、 IAMロール ARN フィールドを設定する必要はありません。
-
IAM 認証情報のパススルーを設定する場合にのみ、「 メタインスタンスプロファイル 」プロパティを選択します。
-
-
Databricks は、インスタンスプロファイル ARN が構文的にも意味的にも正しいことを検証します。 セマンティックの正確性を検証するために、 Databricks は、このインスタンスプロファイルを使用してクラスターを起動してドライ実行を行います。 このドライ実行でエラーが発生すると、UI で検証エラーが発生します。 インスタンスプロファイルに
tag-enforcement
ポリシーが含まれている場合、インスタンスプロファイルの検証は失敗し、正当なインスタンスプロファイルを追加できない可能性があります。 検証が失敗し、インスタンスプロファイルを追加する場合は、[ 検証をスキップ ] チェックボックスをオンにします。 -
[ 追加 ] をクリックします。
インスタンスプロファイルの管理
ワークスペース管理者は、インスタンスプロファイルへのアクセスを管理、管理、および更新できます。 「Databricksのインスタンスプロファイルの管理」を参照してください。