Ошибка неверного значения параметра в файле YAML - PullRequest
0 голосов
/ 25 октября 2018

Я работаю в организации AWS: в настоящее время создаю политики scp в организации AWS, как показано ниже:

Файл Python:

policies = config['policies']

for policy in policies:
 try:
   OUPolicy = client.create_policy(
      Description=policy['description'],
      Name= policy['Name'],
      Content=policy['content'],
      Type='SERVICE_CONTROL_POLICY'
    )

Файл YAML:

 policies:
 - Name: xyz
   description: Service Control Policies for xyz
   content:
     Version: 2012-10-17
     Statement:
     - Effect: Allow
       Resource: "*"
       Action: "*"
     - Effect: Deny
       Resource: "*"
       Action: "*

Я проверил шаблон YAML, и он в правильном формате, но все еще получает ошибку, как показано ниже:

Parameter validation failed:
Invalid type for parameter Content, value: {'Version': datetime.date(2012, 10, 17), 'Statement': [{'Effect': 'Allow', 'Resource': '*', 'Action': '*'}, {'Effect': 'Deny', 'Resource': '*', 'Action': '*'}]}, type: <class 'dict'>, valid types: <class 'str'>

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Ответ:

policies = config['policies']

for policy in policies:
 try:
   OUPolicy = client.create_policy(
      Description=policy['description'],
      Name= policy['Name'],
      Content=json.dumps(policy['content']),
      Type='SERVICE_CONTROL_POLICY'
    )
0 голосов
/ 26 октября 2018

В соответствии с документацией create_policy, которую вы показали,

Содержимое (строка) - [ОБЯЗАТЕЛЬНО] Содержимое политики, добавляемое в новую политику.Например, если вы создаете политику управления службами (SCP), эта строка должна быть текстом JSON, в котором указаны разрешения, которые администраторы в подключенных учетных записях могут делегировать своим пользователям, группам и ролям.

youнеобходимо закодировать словарь policy['content'] (который вы декодировали из документа YAML) обратно в строку JSON.

Это можно сделать, используя json.dumps :

import json

...

client.create_policy(
  ...
  Content=json.dumps(policy['content']),
  ...
)
...