AWS ワークロードは、AWS 署名された OIDC ID トークンを交換することで、長期的なシークレットなしでAzure Databricksに対して認証できます。 推奨パスは AWS STS GetWebIdentityToken API を呼び出します。これは、ワークロードに AWS 資格情報がある場所であればどこでも機能します。
ユースケース例
- Azure Databricks API を呼び出すラムダ関数 (ジョブのトリガー、SQL ウェアハウスのクエリ)
- シークレットなしでAzure Databricksに対して認証する EC2/ECS ベースの ETL パイプライン
- エンドポイントにサービスを提供するモデルにアクセスする EKS ベースの ML ワークロード
- ある AWS アカウントのワークロードが別のチームによって管理されるAzure Databricks アカウントにフェデレーションされるクロスアカウント パターン
- AWS Secrets Manager から長期間有効な Azure Databricks の PAT またはシークレットを排除することによるセキュリティ態勢の改善
AWS の前提条件
AWS IAM ワークロードのワークロード ID フェデレーションを有効にするには、次の手順を完了する必要があります。
手順 1: AWS IAM 送信 ID フェデレーションを有効にする
AWS アカウントで送信 ID フェデレーションを有効にします。
import boto3
boto3.client('iam').enable_outbound_web_identity_federation()
これも、IAM コンソールの アカウント設定>「アウトバウンド Web ID フェデレーション」を有効にする で有効にできます。
手順 2: sts:GetWebIdentityToken アクセス許可を付与する
ワークロードの IAM ロール sts:GetWebIdentityToken に権限を付与します:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["sts:GetWebIdentityToken"],
"Resource": "*",
"Condition": {
"ForAllValues:StringEquals": {
"sts:IdentityTokenAudience": "databricks"
},
"NumericLessThanEquals": {
"sts:DurationSeconds": 300
}
}
}
]
}
Note
対象ユーザーの条件により、ロールはAzure Databricksを対象とするトークンのみを要求できます。 期間条件では、トークンの有効期間を 300 秒に制限します。 ワークロードのニーズに基づいて最大 3,600 秒の期間を調整できますが、有効期間は短くすることをお勧めします。
手順 3: アカウント固有の発行者 URL をメモする
アカウント固有の発行者 URL を取得します。
import boto3
info = boto3.client('iam').get_outbound_web_identity_federation_info()
print(info['IssuerUrl']) # https://<uuid>.tokens.sts.global.api.aws
フェデレーション ポリシーを作成する
重要
Azure Databricksフェデレーション ポリシーは、(ワークスペース レベルではなく) アカウント レベルで作成されます。 Azure Databricks CLI ホストは https://accounts.azuredatabricks.net に設定する必要があり、ユーザーはアカウント管理者である必要があります。
Databricks CLI を使用してワークロード ID フェデレーション ポリシーを作成します。 手順 3. で、発行者をアカウント固有の発行者 URL に設定します。 詳細な手順については、「 サービス プリンシパルのフェデレーション ポリシーを構成する」を参照してください。
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 トークンを取得し、Azure Databricks OAuth トークンと交換します。
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()
Note
トークン期間は 300 秒をお勧めします。 ワークロードのニーズに基づいて最大 3,600 秒を調整できます。
手動でのトークン交換の例については、「 ID プロバイダー トークンを使用した認証」を参照してください。