1

AWSでフェデレーションアクセス用にIAMロールを作成しようとしていますが、clotoを使用してbotoまたはpowershellを使用してpythonで同じ問題を実行し続けます。awsでiamロールを作成して、assumeRolePolicyDocumentでエラーを取得しようとしています

ここで私はPythonで何をしようとしています。この参照trustPolicy.jsonは、私はそのファイルにこのコードを実行すると、私は次のエラー

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

を取得し、この

{ 
    "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" 
     } 
     } 
    ] 
} 

ように構成され

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 
) 

私が通過JSONを実行していますaws jsonバリデーターとそれを検証し、また許容される文字の正規表現を実行し、それも渡します。私はまた、手動で作成されたロールから既存の信頼ポリシーをコピーし、そのコンテンツを自分のjsonファイルに使用しようとしましたが、同じエラーも発生します。

答えて

0

AssumeRolePolicyDocumentには、URLエンコードされたファイルの内容が必要です。 これにはurllib.quote()を使用できます。

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 
) 
関連する問題