1

Je suis en train de créer un rôle IAM dans AWS pour un accès fédéré et de continuer à exécuter le même problème en python en utilisant boto ou powershell en utilisant le cli.Essayer de créer un rôle iam dans aws et obtenir une erreur sur le fichier supposRolePolicyDocument

Voici ce que j'essaie de faire avec python.

import boto3 

tpdoc = r'c:\folders\trustPolicy.json' 

with open(tpdoc, 'r') as tpfile: 
    data = tpfile.read() 

client = boto3.client('iam') 

response = client.create_role(
    RoleName="testrole", 
    AssumeRolePolicyDocument=data 
) 

Ce trustPolicy.json référencé est construit comme celui-ci

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
     "Action": "sts:AssumeRoleWithSAML", 
     "Effect": "Allow", 
     "Condition": { 
      "StringEquals": { 
       "SAML:aud": "https://signin.aws.amazon.com/saml" 
      } 
     }, 
     "Principal": { 
      "Federated": "arn:aws:iam::1234567890:saml-provider/myidp" 
     } 
     } 
    ] 
} 

Quand je lance ce code avec ce fichier, je reçois l'erreur suivante

ClientError: An error occurred (ValidationError) when calling the CreateRole operation: The specified value for assumeRolePolicyDocument is invalid. It must contain only printable ASCII characters.

J'ai couru le JSON par la aws json validator et il valide, et a également exécuté l'expression rationnelle pour les caractères admissibles et il passe cela aussi bien. J'ai également essayé de copier une politique de confiance existante à partir d'un rôle créé manuellement et d'utiliser ce contenu pour mon fichier json, mais cela génère la même erreur.

Répondre

0

AssumeRolePolicyDocument requiert le contenu codé URL du fichier. Nous pouvons utiliser urllib.quote() pour cela:

import boto3 
import urllib 

tpdoc = r'c:\folders\trustPolicy.json' 

with open(tpdoc, 'r') as tpfile: 
    data = tpfile.read() 

encodedPolicy = urllib.quote(data) 

client = boto3.client('iam') 

response = client.create_role(
    RoleName="testrole", 
    AssumeRolePolicyDocument=encodedPolicy 
)