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

AWS IAMワークロードのワークロードIDフェデレーションを有効にする

AWS ワークロードは、AWS 署名の OIDC ID トークンを交換することで、長期的なシークレットなしで Databricks に対して認証できます。推奨されるパスは、AWS STS GetWebIdentityToken API を呼び出します。これは、ワークロードに AWS 認証情報があればどこでも機能します。

ユースケース

  • Databricks APIs を呼び出す Lambda 関数 (ジョブのトリガー、SQLウェアハウスのクエリ)
  • シークレットなしでDatabricksに認証するEC2/ECSベースのETLパイプライン
  • モデルサービングエンドポイントにアクセスするEKSベースの機械学習ワークロード
  • あるAWSアカウントのワークロードが、別のチームが管理するDatabricksアカウントにフェデレートされるクロスアカウントパターン
  • AWS Secrets Managerからの長期間有効なDatabricks PATまたはシークレットの排除によるセキュリティ体制の改善

AWSの前提条件

AWS IAMワークロードのワークロードIDフェデレーションを有効にするには、次の手順を完了する必要があります。

ステップ1: AWS IAMアウトバウンドIDフェデレーションを有効にする

AWSアカウントでアウトバウンドIDフェデレーションを有効にしてください。

Python
import boto3
boto3.client('iam').enable_outbound_web_identity_federation()

これは、IAMコンソールで[アカウント設定]> [「Outbound web identity federation」を有効にする]の下で有効にすることもできます。

ステップ2: sts:GetWebIdentityToken権限を付与する

ワークロードのIAMロールにsts:GetWebIdentityToken権限を付与する:

JSON
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["sts:GetWebIdentityToken"],
"Resource": "*",
"Condition": {
"ForAllValues:StringEquals": {
"sts:IdentityTokenAudience": "databricks"
},
"NumericLessThanEquals": {
"sts:DurationSeconds": 300
}
}
}
]
}
注記

対象者条件により、ロールはDatabricksを対象としたトークンのみを要求できるようになります。期間条件はトークンの有効期間を300秒に制限します。ワークロードのニーズに基づいて期間を最大3600秒まで調整できますが、短い有効期間が推奨されます。

ステップ 3: アカウント固有のissuer URLをメモします。

アカウント固有の発行者 URL:

Python
import boto3
info = boto3.client('iam').get_outbound_web_identity_federation_info()
print(info['IssuerUrl']) # https://<uuid>.tokens.sts.global.api.aws

フェデレーションポリシーを作成

重要

Databricksフェデレーションポリシーは、アカウントレベルで作成されます(ワークスペースレベルではありません)。Databricks CLIホストはhttps://accounts.cloud.databricks.comに設定されている必要があり、ユーザーはアカウント管理者である必要があります。

Databricks CLIを使用して、ワークロード ID フェデレーション ポリシーを作成します。発行者をステップ3のお使いのアカウント固有の発行者 URL に設定します。詳細な手順については、サービスプリンシパル フェデレーション ポリシーを構成するを参照してください。

Bash
databricks account service-principal-federation-policy create ${SP_ID} --json '{
"oidc_policy": {
"issuer": "https://<uuid>.tokens.sts.global.api.aws",
"audiences": ["databricks"],
"subject": "arn:aws:iam::<account-id>:role/<workload-role-name>"
}
}'

Databricksへの認証

フェデレーション ポリシーを作成したら、Databricks SDK を使用して AWS ワークロードを認証します。次の例では、SDK の IdTokenSource パターンを使用して AWS STS トークンを取得し、Databricks OAuth トークンと交換します。

Python
import boto3
from databricks.sdk import WorkspaceClient
from databricks.sdk import oidc
from databricks.sdk.core import Config, credentials_strategy, oidc_credentials_provider


class AwsStsTokenSource(oidc.IdTokenSource):
def __init__(self, audience="databricks", region="us-east-1"):
self._audience = audience
self._region = region

def id_token(self) -> oidc.IdToken:
sts = boto3.client("sts", region_name=self._region)
resp = sts.get_web_identity_token(
Audience=[self._audience],
SigningAlgorithm="RS256",
DurationSeconds=300,
)
return oidc.IdToken(jwt=resp["WebIdentityToken"])


@credentials_strategy("aws-sts-wif", [])
def aws_sts_wif_strategy(cfg: Config):
return oidc_credentials_provider(cfg, AwsStsTokenSource())


w = WorkspaceClient(
host="https://my-workspace.cloud.databricks.com",
client_id="<service-principal-uuid>",
credentials_strategy=aws_sts_wif_strategy
)
# No secrets needed
clusters = w.clusters.list()
注記

トークンの期間は300秒が推奨されます。ワークロードのニーズに基づいて、最大3600秒まで調整できます。

手動トークン交換の例については、IDプロバイダーのトークンで認証するを参照してください。

AWS のドキュメント参照