使用Boto3调用Cost Explorer的GetCostAndUsage接口遇权限拒绝问题
解决Cost Explorer API调用的AccessDeniedException问题
你遇到的问题核心在于:当前配置的IAM权限只适用于AWS管理控制台,而Cost Explorer的API操作需要单独的权限授权,二者并不通用。
问题根源
你给用户授予的aws-portal:ViewUsage和aws-portal:ViewBilling权限,仅允许用户在AWS网页控制台中查看账单和使用数据,不覆盖Cost Explorer API的ce:GetCostAndUsage操作。API类的操作需要专门的ce前缀权限。
解决方案
你需要更新IAM用户(或关联角色)的权限策略,补上Cost Explorer API的访问权限,有两种常见实现方式:
添加细粒度自定义权限
修改IAM权限策略,加入以下语句:{ "Effect": "Allow", "Action": "ce:GetCostAndUsage", "Resource": "*" }注:Cost Explorer属于账户级操作,资源字段指定为
*即可。使用AWS托管策略(更便捷)
直接为用户附加AWS预定义的托管策略AmazonCostExplorerReadOnlyAccess,这个策略包含了所有Cost Explorer只读操作的权限,涵盖ce:GetCostAndUsage,适合需要完整访问Cost Explorer数据的场景。
验证修改
更新权限后,你可以补充必要参数重新测试代码(Cost Explorer API调用需要指定时间范围等必填参数):
import boto3 client = boto3.client('ce') response = client.get_cost_and_usage( TimePeriod={ 'Start': '2024-01-01', 'End': '2024-02-01' }, Granularity='MONTHLY', Metrics=['BlendedCost'] ) print(response)
此时应该能正常获取成本数据了。
内容的提问来源于stack exchange,提问作者jerry2605
相关产品推荐
相关产品推荐

