Comment obtenir les informations des organisations, Cost Explorer d'un autre compte AWS avec Lambda (python)

Conclusion

Voir le document ci-dessous. .. .. .. .. https://aws.amazon.com/jp/premiumsupport/knowledge-center/lambda-function-assume-iam-role/

Je ne comprends pas du tout même si je le lis, alors Avec le compte (compte A) qui contient les informations que vous souhaitez obtenir Je l'ai essayé avec le compte (compte B) auquel je veux le transmettre

Traitement côté compte A

1. Créez un rôle pour lambda dans le compte A

2. Joindre la stratégie requise pour obtenir les informations sur le rôle

CostExplorerFullAccess, AWSOrganizationsFullAccess, etc.

3. Appuyez sur Modifier la confiance dans l'onglet Approbations de résumé de rôle.

キャプチャ.PNG

4. Collez et mettez à jour la stratégie suivante.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::Numéro de compte du compte B:role/service-role/Nom du rôle du compte B"
        ],
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

Traitement côté compte B (IAM)

1. Créez un rôle pour le compte B et accordez-lui les autorisations requises.

Donner l'accès administrateur pour le moment

2. Dans l'onglet Permissions du résumé des rôles, appuyez sur Ajouter une stratégie en ligne.

3. Cliquez sur l'onglet Json, collez ce qui suit en tant que stratégie en ligne et appuyez sur Confirmer la stratégie pour appliquer

{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Allow",
        "Action": "sts:AssumeRole",
        "Resource": "arn:aws:iam::Numéro de compte du compte A:role/Compte Un nom de rôle"
    }
}

Traitement côté compte B (lambda)

La documentation de boto3 détaille comment l'obtenir. Voir ci-dessous pour plus de détails. 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):
    
  #Obtenez un ensemble d'informations d'identification de sécurité utilisées pour accéder à d'autres comptes Ressources AWS
  sts_connection = boto3.client('sts')
    acct_b = sts_connection.assume_role(
        RoleArn="arn:aws:iam::Numéro de compte du compte A:role/Compte Un nom de rôle",
        RoleSessionName="cross_acct_lambda"
    )
    ACCESS_KEY = acct_b['Credentials']['AccessKeyId']
    SECRET_KEY = acct_b['Credentials']['SecretAccessKey']
    SESSION_TOKEN = acct_b['Credentials']['SessionToken']

  #Obtenir des informations sur les organisations dans le compte A
    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)
    
    #Obtenir des informations sur CostExplorer pour le compte A
    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)
  

Recommended Posts

Comment obtenir les informations des organisations, Cost Explorer d'un autre compte AWS avec Lambda (python)
PhytoMine-I a essayé d'obtenir les informations génétiques de la plante avec Python
J'ai essayé d'obtenir les informations sur le film de l'API TMDb avec Python
Remarque: Comment obtenir le dernier jour du mois avec python (ajouté le premier jour du mois)
Comment obtenir une liste de fichiers dans le même répertoire avec python
[Introduction à Python] Comment obtenir l'index des données avec l'instruction for
Obtenez des informations équivalentes à l'onglet Réseau des outils de développement Chrome avec Python + Selenium
Comment entrer dans l'environnement de développement Python avec Vagrant
[Introduction à Python] Comment obtenir des données avec la fonction listdir
Récupérez la source de la page à charger indéfiniment avec python.
Comment obtenir la version Python
Comment démarrer avec Python
Comment obtenir l'ID de Type2Tag NXP NTAG213 avec nfcpy
[Python] Comment obtenir le premier et le dernier jour du mois
Connectez-vous à s3 avec AWS Lambda Python
Résumé de l'écriture d'AWS Lambda
[Yahoo! Weather Replacement Version] Comment obtenir des informations météo avec LINE Notify + Python
Comment couper la partie inférieure droite de l'image avec Python OpenCV
Comment obtenir la différence de date et d'heure en secondes avec Python
[Introduction à Python] Comment trier efficacement le contenu d'une liste avec le tri par liste
J'ai essayé d'obtenir le code d'authentification de l'API Qiita avec Python.
Comment résoudre le problème de l'échec de la construction lorsque CI / CD de Python Function avec AWS Amplify
Obtenez les dernières informations AMI avec l'AWS CLI
Comment spécifier des attributs avec Mock of Python
Comment obtenir des éléments de type dictionnaire de Python 2.7
Comment obtenir les fichiers dans le dossier [Python]
[AWS / Lambda] Comment charger une bibliothèque externe Python
Résumé de l'étude de Python pour utiliser AWS Lambda
Script Python pour obtenir des informations de note avec REAPER
Comment obtenir le nom de la variable lui-même en python
Ajoutez des informations au bas de la figure avec Matplotlib
[Introduction à Python] Comment itérer avec la fonction range?
[Python] Comment spécifier l'emplacement de téléchargement avec youtube-dl
Je veux AWS Lambda avec Python sur Mac!
[Python] Résumé de la façon de spécifier la couleur de la figure
[Python] Comment réécrire le style de table avec python-pptx [python-pptx]
Comment identifier l'élément avec le plus petit nombre de caractères dans une liste Python?
Comment démarrer avec Visual Studio Online ~ La fin de l'ère de la construction d'environnement ~
Comment vérifier en Python si l'un des éléments d'une liste est dans une autre liste
Comment compter le nombre d'occurrences de chaque élément de la liste en Python avec poids
Le 15e temps réel hors ligne, j'ai essayé de résoudre le problème de l'écriture avec python
Essayez d'obtenir la liste des fonctions du paquet Python> os
J'ai essayé d'obtenir les informations de localisation du bus Odakyu
Je souhaite spécifier une autre version de Python avec pyvenv
Exécutez le programme sans créer d'environnement Python! !! (Comment démarrer avec Google Colaboratory)
J'ai essayé de résoudre le problème de F02 comment écrire en temps réel hors ligne avec Python
Connaissances minimales pour démarrer avec le module de journalisation Python
[AWS] Essayez d'ajouter la bibliothèque Python à la couche avec SAM + Lambda (Python)
Je veux obtenir des informations sur le fonctionnement de Yahoo Route
Comment gratter le cours d'une action individuelle du site Web Nikkei Shimbun avec Python
Essayez d'automatiser le fonctionnement des périphériques réseau avec Python
Comment connaître le nombre de GPU de python ~ Remarques sur l'utilisation du multitraitement avec pytorch ~
Comment obtenir une liste d'exceptions intégrées pour python
Essayez d'importer dans la base de données en manipulant ShapeFile d'informations numériques sur les terres nationales avec Python
Comment utiliser Python lambda
Obtenez des informations sur l'alambic avec Python
Traitez le fichier gzip UNLOADed avec Redshift avec Python de Lambda, gzipez-le à nouveau et téléchargez-le sur S3
Un mémo d'un programme qui récupère une date à deux chiffres avec javascript, Ruby, Python ou un script shell.