サービス資格情報を使用して外部クラウド サービスへのアクセスを管理する
この記事では、 から や Secrets Manager などの外部クラウド サービスへのアクセスを制御できるサービス認証情報オブジェクトを で作成する方法について説明します。Unity CatalogDatabricksAWSGlueAWSUnity Catalog のサービス資格情報は、そのようなサービスへのアクセスを許可する長期的なクラウド資格情報をカプセル化します。
サービスの資格情報は、Unity Catalog の管理されたストレージの場所または外部ストレージの場所として使用されるクラウド ストレージへのアクセスを管理するためのものではありません。 これらのユースケースでは、ストレージ認証情報を使用します。 「Unity Catalog を使用してクラウド ストレージへのアクセスを管理する」を参照してください。
サービスの資格情報はUnity Catalog 、インスタンスプロファイル の 代替手段であり、アクセスが特定のコンピュートリソースに関連付けられるのではなく、ユーザー、グループ、またはサービスプリンシパルに関連付けられるという利点があります。
AWSサービスにアクセスするためのサービス認証情報を作成するには、サービスへのアクセスを許可するIAMロールを作成し、そのIAMロールをサービス認証情報定義で参照します。
始める前に
サービス資格情報を作成する前に、次の要件を満たす必要があります。
Databricks:
- Unity Catalogが有効化されたDatabricksワークスペース
CREATE SERVICE CREDENTIAL
ワークスペースにアタッチされた Unity Catalog メタストアに対する特権。 アカウント admins と metastore admins は、デフォルトによってこの特権を持っています。 ワークスペースで Unity Catalog が自動的に有効になっている場合、ワークスペース管理者にもこの特権があります。
AWSアカウントにおいて:
- データにアクセスするワークスペースと同じリージョンにある AWS のサービス。
- IAMロールを作成する権限
AWS IAMロールを参照するサービス資格情報を作成する
このセクションでは、次の方法について説明します。
- サービスにアクセスするための 要件を満たす IAMロールを作成します。DatabricksAWS
- Databricks から AWS サービスにアクセスするために使用できるサービス資格情報のセキュリティ保護可能なオブジェクトを Unity Catalog で作成する方法。
ステップ 1: IAMロールを作成する
AWSで、ユーザーがアクセスできるようにするサービスへのアクセス権を付与するIAMロールを作成します。この IAMロールは、サービスと同じアカウントで定義されている必要があります。
IAMこのアクセス権を付与する ロールをすでに作成している場合は、この手順をスキップして、「ステップ 2:Databricks IAMロールの詳細を に指定 」に進むことができます。
-
サービスへのアクセスを許可する IAMロールを作成します。
ロールの作成は 2 段階のプロセスです。 この手順では、ロールを作成し、 一時的な 信頼関係ポリシーとプレースホルダー外部 ID を追加し、Databricks でサービス資格情報を作成した後に変更します。
ロールの作成 後に 信頼ポリシーを変更する必要があるのは、ロールが自己仮定である必要がある (つまり、それ自体を信頼するように構成する必要がある) ためです。 したがって、ロールは、自己仮定ステートメントを追加する前に存在している必要があります。 自己引き受けロールに関する情報については、この Amazon ブログの記事を参照してください。 Databricks Self-assume role enforcement ポリシーに関する情報については、「Self-assume role enforcement ポリシー」を参照してください。
ポリシーを作成するには、プレースホルダー外部IDを使用する必要があります。
-
カスタム信頼ポリシー を使用してIAMロールを作成します。
-
カスタム信頼ポリシー フィールドに、以下のポリシーJSONを貼り付けます。
このポリシーは、Unity Catalog が Databricks ユーザーに代わってサービスにアクセスするロールを引き受けることができるように、クロスアカウントの信頼関係を確立します。 これは、
Principal
セクションの ARN で指定されます。 これは、Databricks によって作成されたロールを参照する静的な値です。 ポリシーがDatabricks on AWS GovCloud と AWS GovCloud DOD では若干異なることに注意してください。このポリシーは、プレースホルダーとして外部 ID を
0000
に設定します。 これは、後の手順でサービス資格情報の外部 ID に更新します。タブ :::タブ-item[Databricks on AWS]
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"
}
}
}
]
}:::
タブ-item[Databricks on AWSGovCloud]
JSON{
"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"
}
}
}
]
}:::
タブ-item[Databricks on AWSGovCloud DoD]
JSON{
"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ロールを保存します。
-
-
サービスと同じアカウントに IAM ポリシーを作成します。
ガイドラインとして使用できる 2 つのサンプル ポリシーを次に示します。 サンプルポリシーの 1 つは、AWS Glue に接続するサービス認証情報用です。 もう 1 つは AWS Secrets Manager を参照します。 追加する実際のアクションとリソースは、接続するサービスと必要なアクセスのレベルによって異なります。 サービスの AWS IAM ドキュメントを参照してください。
sts:AssumeRole
アクションは、サービスに関係なく同じです。タブ :::タブ-item[AWS シークレットマネージャー] 次の値を置き換えます。
-
<AWS-ACCOUNT-ID>
:AWSアカウントのアカウントID(Databricksアカウントではありません)。 -
<AWS-IAM-ROLE-NAME>
:前のステップで作成したAWS IAMロールの名前。
JSON{
"Version": "2012-10-17",
"Statement": [
{
"Action": ["secretsmanager:GetResourcePolicy", "secretsmanager:GetSecretValue"],
"Resource": ["arn:aws:secretsmanager:us-west-2:111122223333:secret:aes128-1a2b3c"],
"Effect": "Allow"
},
{
"Action": ["sts:AssumeRole"],
"Resource": ["arn:aws:iam::<AWS-ACCOUNT-ID>:role/<AWS-IAM-ROLE-NAME>"],
"Effect": "Allow"
}
]
}:::
タブ-item[AWSGlue] 次の値を置き換えます。
-
<AWS-GLUE-REGION>
: AWS Glue カタログを保持している AWS アカウントのリージョン。この値と AWS アカウント ID が AWS Glue カタログ ID を構成します。 -
<AWS-ACCOUNT-ID>
:AWSアカウントのアカウントID(Databricksアカウントではありません)。 -
<AWS-IAM-ROLE-NAME>
:前のステップで作成したAWS IAMロールの名前。
-
AWS Lake Formation を使用している場合は、IAMロールに Lake Formation リソースへのアクセス権を付与する必要もあります。https://docs.aws.amazon.com/lake-formation/latest/dg/hybrid-access-mode.html を参照してください。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "GrantCatalogAccessToGlue",
"Effect": "Allow",
"Action": [
"glue:GetDatabase",
"glue:GetDatabases",
"glue:GetPartition",
"glue:GetPartitions",
"glue:GetTable",
"glue:GetTables",
"glue:GetUserDefinedFunction",
"glue:GetUserDefinedFunctions",
"glue:BatchGetPartition"
],
"Resource": ["arn:aws:glue:<AWS-GLUE-REGION>:<AWS-ACCOUNT-ID>:*"]
},
{
"Action": ["sts:AssumeRole"],
"Resource": ["arn:aws:iam::<AWS-ACCOUNT-ID>:role/<AWS-IAM-ROLE-NAME>"],
"Effect": "Allow"
}
]
}
::: :::: 3. IAMポリシーをIAMロールにアタッチします。
ロールの [Permission ] タブで、作成した IAM ポリシーをアタッチします。
ステップ 2:Databricks IAMロールの詳細を に伝える
必要な権限 : CREATE SERVICE CREDENTIAL
権限。 メタストア管理者ロールとアカウント管理者ロールの両方に、この特権が含まれています。 Unity Catalogが有効になっているワークスペースのワークスペース管理者にも、この権限が自動的に付与されます。
-
Databricksで、メタストアにリンクされているワークスペースにログインします。
-
[カタログ] をクリックします。
-
[クイック アクセス ] ページで、[ 外部データ] > ボタンをクリックし、[ 資格情報 ] タブに移動して、[ 資格情報の作成 ] を選択します。
-
[サービス資格情報 ] を選択します。
-
[資格情報名] 、クラウドIAM ARNUnity Catalogテナント上のサービスへのアクセスを に許可する ロール 、およびオプションのコメントを入力します。
-
作成 をクリックします。
-
[サービス資格情報が作成されました ] ダイアログで、 外部 ID をコピーします。
また、外部 ID は、サービス資格情報の詳細ページでいつでも表示できます。 「サービス資格情報の表示」を参照してください。
-
[ 完了 ] をクリックします。
ステップ 3: IAMロール ポリシーを更新する
AWS で、信頼関係ポリシーを変更して、サービス認証情報の外部 ID を追加し、自己仮定型にします。
-
保存したIAMロールに戻り、[ 信頼関係 ]タブに移動します。
-
信頼関係ポリシーを次のように編集します:
以下のARNを「Allow」ステートメントに追加してください。
<YOUR-AWS-ACCOUNT-ID>
と<THIS-ROLE-NAME>
を実際のアカウントIDとIAMロール値に置き換えます。"arn:aws:iam::<YOUR-AWS-ACCOUNT-ID>:role/<THIS-ROLE-NAME>"
"sts:AssumeRole"
ステートメントで、プレースホルダの外部 ID を、前のステップでコピーしたサービス資格情報の外部 ID に更新します。"sts:ExternalId": "<SERVICE-CREDENTIAL-EXTERNAL-ID>"
ポリシーは次のようになります。置換テキストは、サービス資格情報の外部 ID、アカウント 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": "<SERVICE-CREDENTIAL-EXTERNAL-ID>"
}
}
}
]
}
手順 4: サービス資格情報を検証する
「ステップ 3:IAM ロール ポリシーを更新する 」で ロール信頼ポリシー に変更を加えた後、IAMIAM ロールがサービス資格情報として使用するように適切に構成されていることを確認します。
- Databricksで、メタストアにリンクされているワークスペースにログインします。
[カタログ] をクリックします。
- [クイック アクセス ] ページで、[ 外部データ] > ボタンをクリックし、[ 資格情報 ] タブに移動します。
- 検証するサービス資格情報を選択します。
をクリックします。
- いずれかのチェックが失敗した場合は、「 ステップ 3: IAMロール ポリシーを更新する 」に戻り、 IAMロールの信頼ポリシーを確認して正しく構成します。
自己引き継ぎロールの強制ポリシー
2023 年 6 月 30 日、AWS は IAMロール信頼ポリシー を更新し、STS:AssumeRole
呼び出しに対してロールIAM明示的に自己信頼することを要求しました。その結果、Databricksは、サービス認証情報のAWS IAMロールを自己仮定することを求めており、まもなく非自己仮定サービス資格情報を禁止する予定です。 詳細については、この コミュニティのブログ記事を参照してください。
は、 2024 年 9 月 20 Databricks 日より、自己想定しない ServiceAWSIAM ロールを使用した 資格情報の作成を禁止します。非自己仮定の IAMロールを持つ既存のサービス資格情報は引き続き機能しますが、それらのロールを使用して新しいサービス資格情報を作成することはできません。
2025 年 1 月 20 日に、Databricks は、非自己想定の IAMID ロールを持つ既存のサービス資格情報の使用のブロックを開始します。 これにより、自己前提ではない資格情報を使用して実行されるワークロードやジョブが中断される可能性があります。
サービス資格情報の AWS IAMロールが自己仮定型かどうかを確認するには、「 手順 4: サービス資格情報を検証する」の手順に従います。 [Self Assume Role ] チェックが失敗した場合は、「ステップ 3: IAMロール ポリシーを更新する」に再度アクセスし、IAMロールの信頼ポリシーを自身を信頼するように再構成します。
(オプション)特定のワークスペースにサービス資格情報を割り当てる
デフォルトでは、サービス資格情報には、メタストア内のすべてのワークスペースからアクセスできます。 つまり、ユーザーにそのサービス資格情報に対する特権が付与されている場合、メタストアに接続されている任意のワークスペースからその特権を行使できます。 ワークスペースを使用してユーザー データ アクセスを分離する場合は、特定のワークスペースからのみサービス資格情報へのアクセスを許可することができます。 この機能は、ワークスペース バインドまたはサービス資格情報の分離と呼ばれます。
サービス認証情報を特定のワークスペースにバインドする一般的なユースケースは、クラウド管理者が本番運用 cloud アカウント認証情報を使用してサービス認証情報を設定し、 Databricks ユーザーがこの認証情報を使用して本番運用 ワークスペース内の外部クラウド サービスにのみアクセスするようにするシナリオです。
ワークスペースのバインドの詳細については、「 (オプション) ストレージ資格情報を特定のワークスペースに割り当てる 」および「 カタログ アクセスを特定のワークスペースに制限する」を参照してください。
サービス資格情報を 1 つ以上のワークスペースにバインドする
特定のワークスペースにサービス資格情報を割り当てるには、カタログ エクスプローラーを使用します。
必要なアクセス許可 : メタストア管理者またはサービス資格情報の所有者。
メタストア管理者は、カタログ エクスプローラーを使用してメタストア内のすべてのサービス資格情報を表示でき、サービス資格情報の所有者は、サービス資格情報が現在のワークスペースに割り当てられているかどうかに関係なく、メタストアで所有するすべてのサービス資格情報を表示できます。 ワークスペースに割り当てられていないサービス資格情報はグレー表示されます。
-
メタストアにリンクされているワークスペースにログインします。
-
サイドバーで、「
カタログ 」をクリックします。
-
[クイック アクセス ] ページで、[ 外部データ> ] ボタンをクリックし、[ 資格情報 ] タブに移動します。
-
サービス資格情報を選択し、[ ワークスペース] タブに移動します。
-
[ ワークスペース ] タブで、[ すべてのワークスペースがアクセス可能] チェックボックスをオフにします。
サービス資格情報が既に 1 つ以上のワークスペースにバインドされている場合、このチェック ボックスは既にオフになっています。
-
[ ワークスペースに割り当てる ] をクリックし、割り当てるワークスペースを入力または検索します。
アクセス権を取り消すには、[ ワークスペース ] タブに移動し、ワークスペースを選択して、[ 取り消し ] をクリックします。すべてのワークスペースからのアクセスを許可するには、[ すべてのワークスペースがアクセス可能 ] チェックボックスをオンにします。
次のステップ
- サービス資格情報を表示、更新、削除、および他のユーザーにサービス資格情報を使用するアクセス許可を付与する方法について説明します。 マネージドサービスの認証情報を参照してください。
- コードでサービス資格情報を使用する方法について説明します。 「Unity Catalog サービスの資格情報を使用して外部クラウド サービスに接続する」を参照してください。
制限
次の制限が適用されます:
-
Databricks Runtime バージョン 16.1 以下では、Python のみがサポートされています。
-
サーバレス コンピュートが Databricks Runtime 16.2 で更新されるまでは、 Python.
-
SQLウェアハウスはサポートされていません。
-
サービス資格情報に対して実行されたアクションの一部の監査イベントは、
system.access.audit
テーブルに表示されません。 サービス資格情報を作成、削除、更新、読み取り、一覧表示、または使用したユーザーに関する監査情報が利用可能になります。 Audit log システムテーブルリファレンスを参照してください。 -
サービス資格情報のプレビュー期間中、
INFORMATION_SCHEMA.STORAGE_CREDENTIALS
(非推奨) にはストレージ資格情報とサービス資格情報の両方が表示され、INFORMATION_SCHEMA.STORAGE_CREDENTIAL_PRIVILEGES
(非推奨) にはストレージ資格情報とサービス資格情報の両方に適用される特権が表示されました。 これはもはや当てはまりません。 代わりに、ストレージとサービスの両方の資格情報にINFORMATION_SCHEMA.CREDENTIALS
とINFORMATION_SCHEMA.CREDENTIAL_PRIVILEGES
を使用する必要があります。