You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Databricks Python笔记本中用assume_role+Boto3连DynamoDB遇凭证错误

解决Databricks中boto3调用assume_role的NoCredentialsError问题

原因分析

报错NoCredentialsError是因为初始化sts_client时,boto3无法找到有效的AWS凭据。Databricks运行环境不会自动加载本地AWS配置,需要通过适配Databricks的方式获取或配置凭据。

解决方法

方法1:利用Databricks Instance Profile(推荐)

如果你的Databricks集群绑定了Instance Profile(需具备Assume目标IAM角色的权限),boto3可自动使用集群的Instance Profile凭据:

%pip install boto3
import boto3

# 初始化STS客户端,自动使用集群Instance Profile凭据
sts_client = boto3.client("sts", region_name="<你的AWS区域>")

credentials = sts_client.assume_role(
    RoleArn="arn:aws:iam::<account id>:role/<role name>",
    RoleSessionName="test"
)

# 用临时凭据创建DynamoDB会话
session = boto3.Session(
    aws_access_key_id=credentials["Credentials"]['AccessKeyId'],
    aws_secret_access_key=credentials["Credentials"]['SecretAccessKey'],
    aws_session_token=credentials["Credentials"]['SessionToken'],
    region_name="<你的AWS区域>"
)

dynamodb = session.client("dynamodb")
response = dynamodb.scan(TableName='table_name', Limit=1)

注意:需确保绑定的Instance Profile拥有sts:AssumeRole权限,且目标角色的信任策略已允许该Instance Profile的ARN发起assume操作。

方法2:通过Databricks Secrets存储凭据

未使用Instance Profile时,可将AWS凭据存入Databricks Secrets,再在代码中读取:

  1. 先在Databricks中创建密钥范围(如aws),并存储access_key_id和secret_access_key两个密钥。
  2. 代码中读取并使用:
%pip install boto3
import boto3
from databricks.sdk import WorkspaceClient

w = WorkspaceClient()
# 从Databricks Secrets读取凭据
access_key = w.secrets.get(scope="aws", key="access_key_id")
secret_key = w.secrets.get(scope="aws", key="secret_access_key")

sts_client = boto3.client(
    "sts",
    aws_access_key_id=access_key,
    aws_secret_access_key=secret_key,
    region_name="<你的AWS区域>"
)

credentials = sts_client.assume_role(
    RoleArn="arn:aws:iam::<account id>:role/<role name>",
    RoleSessionName="test"
)

session = boto3.Session(
    aws_access_key_id=credentials["Credentials"]['AccessKeyId'],
    aws_secret_access_key=credentials["Credentials"]['SecretAccessKey'],
    aws_session_token=credentials["Credentials"]['SessionToken'],
    region_name="<你的AWS区域>"
)

dynamodb = session.client("dynamodb")
response = dynamodb.scan(TableName='table_name', Limit=1)

方法3:配置环境变量传递凭据

可在笔记本中设置环境变量指定凭据(不推荐硬编码,生产环境建议结合Secrets使用):

%pip install boto3
import boto3
import os

# 设置环境变量
os.environ['AWS_ACCESS_KEY_ID'] = "<你的访问密钥ID>"
os.environ['AWS_SECRET_ACCESS_KEY'] = "<你的秘密访问密钥>"
os.environ['AWS_DEFAULT_REGION'] = "<你的AWS区域>"

sts_client = boto3.client("sts")

credentials = sts_client.assume_role(
    RoleArn="arn:aws:iam::<account id>:role/<role name>",
    RoleSessionName="test"
)

session = boto3.Session(
    aws_access_key_id=credentials["Credentials"]['AccessKeyId'],
    aws_secret_access_key=credentials["Credentials"]['SecretAccessKey'],
    aws_session_token=credentials["Credentials"]['SessionToken']
)

dynamodb = session.client("dynamodb")
response = dynamodb.scan(TableName='table_name', Limit=1)

额外检查项

  • 确认目标IAM角色的信任策略已允许发起assume_role的主体(Instance Profile或用户ARN)访问。
  • 确认Databricks集群所在VPC可访问AWS STS服务(私有网络环境需配置STS VPC端点)。

内容的提问来源于stack exchange,提问作者Vinit Khandelwal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 04:22:39