Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何通过api获取假定角色的信息?_Python 3.x_Amazon S3_Aws Lambda_Aws Sdk - Fatal编程技术网

Python 3.x 如何通过api获取假定角色的信息?

Python 3.x 如何通过api获取假定角色的信息?,python-3.x,amazon-s3,aws-lambda,aws-sdk,Python 3.x,Amazon S3,Aws Lambda,Aws Sdk,我有一个函数,可以将帐户的成本写入CSV。现在我想使用假定角色查询所有其他帐户。不幸的是,他只写Lambda函数所在帐户的成本。将所有进一步的成本写入CSV文件有什么不对?这是我认为应该是的代码。我没有考虑CSV的功能,因为它工作得非常完美 import boto3 import re import csv import os def lambda_handler(event,context): #get data from environment start = os.en

我有一个函数,可以将帐户的成本写入CSV。现在我想使用假定角色查询所有其他帐户。不幸的是,他只写Lambda函数所在帐户的成本。将所有进一步的成本写入CSV文件有什么不对?这是我认为应该是的代码。我没有考虑CSV的功能,因为它工作得非常完美

import boto3
import re
import csv
import os

def lambda_handler(event,context):

    #get data from environment
    start = os.environ['Start']
    end = os.environ['End']

    response = client.get_cost_and_usage(
        TimePeriod={
            'Start': start,
            'End': end
        },
        Granularity='MONTHLY',
        Metrics=['BlendedCost'],
        GroupBy=[
            {
                'Type': 'TAG',
                'Key': 'Project












您必须首先承担目标客户中的角色

  • 通过使用STS检索临时凭据来承担跨帐户角色
  • 使用这些凭据创建boto3会话
  • 使用此会话获取客户端
  • 以下函数处理步骤1和2

    def assume_role(aws_account_number, role_name):
        sts_client = boto3.client('sts')
    
        partition = sts_client.get_caller_identity()['Arn'].split(":")[1]
    
        response = sts_client.assume_role(
            RoleArn='arn:{}:iam::{}:role/{}'.format(
                partition,
                aws_account_number,
                role_name
            ),
            RoleSessionName='MySession'
        )
    
        # Create a boto3 session by using the temporary credentials
        session = boto3.Session(
            aws_access_key_id=response['Credentials']['AccessKeyId'],
            aws_secret_access_key=response['Credentials']['SecretAccessKey'],
            aws_session_token=response['Credentials']['SessionToken']
        )
    
        print("Assumed session for {}.".format(aws_account_number))
    
        return session
    
    
    最后一步是让您的客户机使用此会话

    session = assume_role('123456789012', 'MyCrossAccountRoleName')
    client = session.client('ce')
    
    在进行跨帐户请求时,最好增加3秒的时间