Роль недействительна или не может быть принята, когда я добавляю Transform: AWS::Include в шаблон cloudformation.

Вопрос или проблема

Я получаю следующую ошибку, когда пытаюсь добавить Transform: AWS::Include для чтения TableMappings для задачи DMS в шаблоне cloudformation.

Не удалось создать набор изменений: Ожидание ChangeSetCreateComplete завершилось неудачей: Ожидание встретило конечное состояние сбоя: Для выражения "Status" мы получили ожидаемый путь: "FAILED" Статус: FAILED. Причина: Роль arn:aws:iam::xxxxxxxxxx:role/cloudformation-deployment-role недействительна или не может быть принята

Развертывание шаблона работает нормально, когда я добавляю json TableMappings встроенным в шаблоне, как ниже.

      TableMappings: |
          {
            "rules": [
              {
                "rule-type": "selection",
                "rule-id": "1",
                "rule-name": "1",
                "object-locator": {
                  "schema-name": "TEST",
                  "table-name": "TEST_TABLE"
                },
                "rule-action": "include",
                "filters": []
              }

Но когда я меняю TableMappings, чтобы использовать Transform: AWS::Include для чтения json из файла s3, я получаю вышеуказанную ошибку.

      TableMappings:
        Fn::Transform:
          Name: AWS::Include
          Parameters:
            Location: !Sub s3://${BucketName}/dms/table-mappings.json

Кто-нибудь знает, что может быть причиной этого?

Когда вы используете Include, Cloudformation пытается получить доступ к файлу. Так что это в основном проблема с правами для этой роли. Вы уверены, что указанная роль cloudformation имеет доступ к этому бакету? И нет ли проблем с дополнительными ACL или политиками бакета?

Ответ или решение

При использовании CloudFormation с директивой Transform: AWS::Include для чтения файла JSON из S3, ошибка «Роль недействительна или не может быть принята» может возникать по нескольким причинам. Давайте разберёмся с деталями и возможными решениями.

Причины возникновения ошибки

  1. Проблемы с IAM ролями:

    • Сообщение об ошибке указывает на то, что роль arn:aws:iam::xxxxxxxxxx:role/cloudformation-deployment-role не может быть использована. Это может происходить из-за некорректных разрешений на доступ к S3 в политике IAM для этой роли. Убедитесь, что у вашей роли есть следующие разрешения:
      {
      "Effect": "Allow",
      "Action": [
       "s3:GetObject"
      ],
      "Resource": "arn:aws:s3:::<имя_вашего_бакета>/dms/table-mappings.json"
      }
  2. Доступ к S3 и политика бакета:

    • Проверьте, что бакет S3 и файл table-mappings.json доступны для роли CloudFormation. Политика доступа к бакету может блокировать запросы, если не указано иное. Используйте следующие настройки, чтобы обеспечить доступ:
      {
      "Version": "2012-10-17",
      "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "AWS": "arn:aws:iam::xxxxxxxxxx:role/cloudformation-deployment-role"
         },
         "Action": "s3:GetObject",
         "Resource": "arn:aws:s3:::<имя_вашего_бакета>/dms/table-mappings.json"
       }
      ]
      }
  3. Проверка имени бакета:

    • Убедитесь, что имя бакета (BucketName) правильно указано в вашей CloudFormation шаблоне. Ошибки в написании имени могут вызвать проблемы с доступом.
  4. Форматирование и путь к файлу:

    • Проверьте правильность пути к файлу. Убедитесь, что JSON файл корректен и корректно загружен в S3. Вы можете протестировать доступ к файлу, используя команды AWS CLI:
      aws s3 cp s3://<имя_вашего_бакета>/dms/table-mappings.json .
    • Это поможет удостовериться в том, что файл доступен и корректно структурирован.

Рекомендации по устранению проблемы

  • Логирование и отладка: Включите детальное логирование для вашей IAM роли, чтобы видеть, какие разрешения проверяются и действуют. Это поможет определить, где именно происходит сбой.

  • Использование консоли AWS: Проверьте доступность S3 через консоль AWS под той же учетной записью, в которой запускается CloudFormation. Это может помочь избежать ошибок, связанных с политиками.

  • Тестирование доступа к S3: После внесения изменений в политику IAM и/или политику бакета, выполните тестовые операции, чтобы убедиться, что роль действительно имеет доступ ко всем необходимым ресурсам.

Заключение

Ошибка «Роль недействительна или не может быть принята» наиболее часто связана с отсутствием необходимых разрешений для доступа к S3. Проведя аудит политики IAM, политики S3 и проверив корректность конфигурации вашего CloudFormation шаблона, вы сможете устранить эту проблему. Важно помнить о необходимости поддерживать актуальные разрешения для корректной работы с облачными сервисами.

Оцените материал
Добавить комментарий

Капча загружается...