Lambda(pyhon)로 다른 AWS 계정의organization,CostExplorer에 대한 정보를 얻는 방법

결론


다음 문서를 참조하십시오...
https://aws.amazon.com/jp/premiumsupport/knowledge-center/lambda-function-assume-iam-role/
읽어도 전혀 모르겠어요.
원하는 정보가 있는 계정 (계정 A) 과
어떤 상태에서 그걸 주고 싶은 계좌를 만들어 봤어요.

계정 A측 처리


1. 계정 A로 lambda용 캐릭터 만들기


2. 정보를 얻는 데 필요한 정책을 첨부한다


CostExplorer Full Access, A WSOrganization Full Access 등

3. 캐릭터 개요의 신뢰 관계 라벨을 누르는 신뢰 관계의 편집.



4. 다음 정책을 붙여넣고 업데이트합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::アカウントBのアカウント番号:role/service-role/アカウントBのロールの名前"
        ],
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

계정 B 측 처리(IAM)


1. 계정 B의 역할을 만들고 필요한 권한을 준다.


어쨌든 AdministratorAccess를 먼저 드리겠습니다.

2. 스크롤 개요의 접근 권한 탭에서 압축 내연 정책에 따라 추가


3. Json 탭을 클릭하여 내부 정책으로 아래 내용에 따라 붙여넣기 정책을 확인하고 적응

{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Allow",
        "Action": "sts:AssumeRole",
        "Resource": "arn:aws:iam::アカウントAのアカウント番号:role/アカウントAのロールの名前"
    }
}

계정 B 측 처리 (lambda)


boto 3 문서에 획득 방법이 상세하게 기재되어 있습니다.
자세한 내용은 아래를 참조하시오.
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sts.html
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/organizations.html
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ce.html#CostExplorer.Client.get_cost_forecast
https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_GetCostAndUsage.html
import boto3

def lambda_handler(event, context):

  #他アカウントAWSリソースへのアクセスに使用するセキュリティ認証情報のセットを取得
  sts_connection = boto3.client('sts')
    acct_b = sts_connection.assume_role(
        RoleArn="arn:aws:iam::アカウントAのアカウント番号:role/アカウントAのロールの名前",
        RoleSessionName="cross_acct_lambda"
    )
    ACCESS_KEY = acct_b['Credentials']['AccessKeyId']
    SECRET_KEY = acct_b['Credentials']['SecretAccessKey']
    SESSION_TOKEN = acct_b['Credentials']['SessionToken']

  #アカウントAのorganizations の情報取得
    organizations = boto3.client(
        'organizations',
        aws_access_key_id=ACCESS_KEY,
        aws_secret_access_key=SECRET_KEY,
        aws_session_token=SESSION_TOKEN,
    )

    responses = []
    res = {}
    while True:
        if 'NextToken' in res:
            res = organizations.list_accounts(NextToken = res['NextToken'])
        else:
            res = organizations.list_accounts()
        responses += res['Accounts']
        if 'NextToken' not in res:
            break

    print(responses)

    #アカウントAのCostExplorer の情報取得
    ce = boto3.client(
        'ce', 
        region_name='us-east-1',
        aws_access_key_id=ACCESS_KEY,
        aws_secret_access_key=SECRET_KEY,
        aws_session_token=SESSION_TOKEN,
    )
    response = ce.get_cost_and_usage(
        TimePeriod = {"Start": "2020-10-01", "End": "2020-11-01"},
        Granularity = 'MONTHLY', 
        Metrics = ["UnblendedCost"],
        GroupBy=[{'Type': 'DIMENSION','Key': 'LINKED_ACCOUNT'}]
    ) 

    print(response)

좋은 웹페이지 즐겨찾기