通过IAM SDK获取访问密钥,核心流程是创建IAM用户并授权,然后使用Python SDK调用API获取临时或长期凭证。 很多开发者初次接触云服务时,会混淆IAM密钥和访问密钥(AK/SK)的概念,实际上SDK获取密钥通常指的是获取临时安全凭证,这在自动化部署和临时授权场景中非常实用。
IAM SDK获取访问密钥的两种典型场景
根据使用场景的不同,IAM SDK获取密钥分为长期密钥和临时密钥两种方式,长期密钥适合开发测试环境,临时密钥则在生产环境中更安全。
长期密钥获取方式(直接创建AK/SK)
长期密钥通常通过云控制台手动创建,或由管理员通过IAM接口创建,SDK也可以调用IAM接口直接创建永久AK/SK,但需要调用者具备管理员权限,这种方式获取的密钥不会过期,适合本地调试、数据处理等场景,但需要妥善保管。
- 操作路径:IAM控制台 → 用户管理 → 指定用户 → 创建访问密钥。
- SDK方式:使用Python SDK调用
createPermanentAccessKey接口(需管理员账户)。 - 注意事项:长期密钥泄露风险较高,建议在非生产环境使用。
临时密钥获取方式(推荐)
临时密钥通过STS(Security Token Service)服务获取,有效期通常为15分钟到24小时,SDK调用IAM接口返回临时AK、SK和SecurityToken,配合签名使用,这种方式在云函数、容器化部署、跨账号授权等场景中广泛使用。
- 核心接口:
keystoneCreateTemporaryAccessKeyByToken(华为云)或AssumeRole(简米云)。 - 返回参数:临时AK、SK、SecurityToken、过期时间。
- 优势:即使泄露,影响范围有限;可通过权限策略精确控制访问资源。
华为云IAM SDK获取访问密钥实操步骤
下面以华为云Python SDK为例,演示如何获取临时访问密钥,整个过程分为环境准备、SDK配置和接口调用三步。
环境准备与SDK安装
确保已完成IAM用户创建和授权,需要为IAM用户授予Security Administrator或自定义策略(包含iam:credentials:createTemporaryAccessKey权限),然后安装相关SDK:
pip install huaweicloud-sdk-python-iam huaweicloud-sdk-python-core
获取临时密钥的Python代码示例
使用已有AK/SK进行认证,调用IAM接口获取临时凭证,代码核心逻辑如下:
from huaweicloudsdkcore.auth.credentials import BasicCredentials
from huaweicloudsdkiam.v3 import IamClient, KeystoneCreateTemporaryAccessKeyByTokenRequest
from huaweicloudsdkiam.v3.model import KeystoneCreateTemporaryAccessKeyByTokenRequestBody
# 认证信息(使用长期AK/SK)
credentials = BasicCredentials(ak, sk, domain_id)
# 创建IAM客户端,指定区域Endpoint
client = IamClient.new_builder().with_credentials(credentials).with_endpoint("iam.cn-north-4.myhuaweicloud.com").build()
# 构建请求体,指定用户ID和过期时间
request = KeystoneCreateTemporaryAccessKeyByTokenRequest()
request.body = KeystoneCreateTemporaryAccessKeyByTokenRequestBody(
auth={"identity": {"methods": ["token"], "token": {"id": token}}}, # 也可直接使用AK/SK认证
duration_seconds=3600
)
response = client.keystone_create_temporary_access_key_by_token(request)
- 关键参数:
duration_seconds控制密钥有效期,domain_id和user_id需要提前获取。 - 返回结果:
response.credential中包含临时AK、SK、SecurityToken和过期时间。
Python SDK获取临时密钥常见报错与解决
在实际调用中,权限不足是最常见的报错,如果提示auth failed或no permission,请检查IAM用户是否具有Security Administrator权限。区域节点配置错误也会导致调用失败,需确认Endpoint与IAM服务所在区域一致。
报错排查列表:
- 403 Forbidden:权限不足,需添加策略
iam:credentials:createTemporaryAccessKey。 - 401 Unauthorized:AK/SK或Token过期,请检查凭证有效期。
- 404 Not Found:Endpoint或API版本错误,建议使用最新SDK版本(如3.x)。
- Timeout:网络原因,可尝试更换Endpoint或重试。
IAM密钥与AK/SK的区别对比
很多刚接触云服务的人会问:IAM密钥和访问密钥是一回事吗?行业共识认为,两者定义不同,IAM密钥通常指用户登录密码或访问密钥(AK/SK),而AK/SK是访问密钥的具体形式,下表从多个维度对比常用的长期AK/SK和临时密钥:
| 对比维度 | 长期AK/SK | 临时密钥 |
|---|---|---|
| 有效期 | 永久(除非手动删除) | 15分钟至24小时 |
| 获取方式 | 控制台手动创建或IAM管理员调用API | SDK/API调用STS服务 |
| 使用场景 | 开发测试、本地数据处理 | 云函数、容器、临时授权 |
| 安全性 | 较低,需严格保管 | 较高,短期有效,可撤销 |
| 权限控制 | 固定权限,依赖用户策略 | 可附加临时权限策略,更灵活 |
业内专家指出,临时密钥在实际生产中正逐渐取代长期密钥,尤其在自动化运维和跨账号访问场景中,其安全性优势明显。
不同区域IAM密钥管理与配置
云服务中IAM服务通常有区域化部署,不同区域的Endpoint不同,例如华为云IAM的国内Endpoint有iam.cn-north-4.myhuaweicloud.com(北京四)、iam.cn-east-3.myhuaweicloud.com(华东三)等。如果跨区域使用IAM SDK获取密钥,需要明确指定目标区域的Endpoint,否则可能导致资源访问失败。
密钥管理中的权限策略配置
获取临时密钥时,可以在请求中附加临时权限策略,限制临时密钥能访问的资源范围。
{
"Statement": [
{
"Effect": "Allow",
"Action": ["obs:object:GetObject"],
"Resource": ["obs::bucket:example-bucket"]
}
]
}
- 该策略仅允许临时密钥读取指定桶中的对象,进一步缩小风险面。
- 如果不指定策略,临时密钥继承IAM用户本身的权限。
Q&A:IAM SDK获取密钥常见问题解答
问题1:Python SDK获取临时密钥时提示“policy not found”怎么办?
这类报错通常是因为IAM用户缺少iam:credentials:createTemporaryAccessKey权限,请检查用户权限策略,确保包含该操作,同时确认使用的认证凭证(AK/SK或Token)有效且未过期。
问题2:IAM密钥和AK/SK有什么区别?为什么SDK获取的密钥有多个字段?
IAM密钥是广义概念,包括登录密码和访问密钥(AK/SK),SDK获取的临时密钥包含三个字段:临时AK、临时SK和SecurityToken,其中SecurityToken是临时会话令牌,用于签名认证,这是与长期AK/SK最大的区别。
问题3:不同区域下的IAM密钥管理是否独立?能否跨区域使用?
IAM服务属于全局服务,但不同区域的IAM服务Endpoint独立,获取的临时密钥可以跨区域访问,前提是权限策略允许,例如在北京四区域获取的临时密钥,可以用于访问华东三的OBS桶,只要策略中不限制区域,但建议在Endpoint配置时选择资源所在区域,避免网络延迟。
掌握IAM SDK获取密钥,本质上是理解云服务的权限模型。 无论是华为云还是其他云厂商,核心逻辑都是通过身份认证获取临时凭证,再基于凭证访问资源,生产环境中优先使用临时密钥,并配合细粒度权限策略,是保障云上安全的最佳实践。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/533518.html


