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フェデレーションを有効にしてください。
import boto3
boto3.client('iam').enable_outbound_web_identity_federation()
これは、IAMコンソールで[アカウント設定]> [「Outbound web identity federation」を有効にする]の下で有効にすることもできます。
ステップ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
}
}
}
]
}
対象者条件により、ロールはDatabricksを対象としたトークンのみを要求できるようになります。期間条件はトークンの有効期間を300秒に制限します。ワークロードのニーズに基づいて期間を最大3600秒まで調整できますが、短い有効期間が推奨されます。
ステップ 3: アカウント固有のissuer URLをメモします。
アカウント固有の発行者 URL:
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 に設定します。詳細な手順については、サービスプリンシパル フェデレーション ポリシーを構成するを参照してください。
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 トークンと交換します。
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プロバイダーのトークンで認証するを参照してください。