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)
Reference
이 문제에 관하여(Lambda(pyhon)로 다른 AWS 계정의organization,CostExplorer에 대한 정보를 얻는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mtanakadesu/items/f7e0da3f9f817d6b06fd
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::アカウントBのアカウント番号:role/service-role/アカウントBのロールの名前"
],
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::アカウントAのアカウント番号:role/アカウントAのロールの名前"
}
}
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)
Reference
이 문제에 관하여(Lambda(pyhon)로 다른 AWS 계정의organization,CostExplorer에 대한 정보를 얻는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mtanakadesu/items/f7e0da3f9f817d6b06fd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)