AWS如何通过boto3为非组织存量账号开启IAM用户及角色的账单访问权限
非组织账号通过boto3开启IAM身份访问Billing and Cost Management权限步骤
前置说明
非组织独立账号默认禁止所有IAM身份访问账单与成本管理相关接口/控制台,必须先通过根账号开启全局IAM访问账单开关,再为对应IAM用户/角色绑定权限策略,两个步骤缺一不可。开关开启后仅拥有对应账单权限的IAM身份可访问相关资源,不会直接放开所有IAM身份的访问权限。
步骤1:开启全局IAM账单访问开关
调用boto3的account客户端的put_iam_access_to_billing接口完成配置,注意该操作仅支持根账号或被根账号授权的特殊身份调用:
import boto3 # 此处必须传入根账号的身份凭证(AKSK/临时凭证等),普通IAM身份默认无权限执行该操作 account_client = boto3.client('account') response = account_client.put_iam_access_to_billing( IamAccessToBilling='ACTIVE' ) # 返回200即为开启成功 print(response['ResponseMetadata']['HTTPStatusCode'])
如果后续需要关闭该开关,仅需将参数值改为INACTIVE即可。
步骤2:为目标IAM用户/角色绑定账单访问权限
你可以直接使用AWS托管的账单策略,也可以根据业务需要自定义最小权限策略,两种场景的示例如下:
- 给IAM用户绑定全量账单访问托管权限
import boto3 iam_client = boto3.client('iam') response = iam_client.attach_user_policy( UserName='替换为目标IAM用户名', PolicyArn='arn:aws:iam::aws:policy/job-function/Billing' )
- 给IAM角色绑定自定义只读成本查询权限
import json import boto3 iam_client = boto3.client('iam') # 1. 创建自定义最小权限策略,仅允许查询成本和账单基础数据 custom_policy = { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ce:GetCostAndUsage", "ce:GetCostForecast", "billing:Get*" ], "Resource": "*" } ] } policy_resp = iam_client.create_policy( PolicyName='CustomBillingReadOnlyAccess', PolicyDocument=json.dumps(custom_policy), Description='自定义账单只读访问权限' ) # 2. 将策略绑定到目标IAM角色 iam_client.attach_role_policy( RoleName='替换为目标IAM角色名', PolicyArn=policy_resp['Policy']['Arn'] )
验证配置是否生效
使用目标IAM身份的凭证调用成本查询接口,正常返回数据即为配置成功:
import boto3 ce_client = boto3.client('ce') resp = ce_client.get_cost_and_usage( TimePeriod={'Start': '2024-01-01', 'End': '2024-01-31'}, Granularity='MONTHLY', Metrics=['UnblendedCost'] ) print(resp['ResultsByTime'])
内容的提问来源于stack exchange,提问作者Roman Shnyrev
相关产品推荐
相关产品推荐

