Ошибка неверного значения параметра в файле YAML

Я работаю в организации 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 ответа

Решение

Согласно документации create_policy что вы показали,

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

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

Вы можете сделать это используя json.dumps:

import json

...

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

Ответ:

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'
    )

Другие вопросы по тегам