Вопрос или проблема
Я получаю следующую ошибку, когда пытаюсь добавить 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, ошибка «Роль недействительна или не может быть принята» может возникать по нескольким причинам. Давайте разберёмся с деталями и возможными решениями.
Причины возникновения ошибки
-
Проблемы с IAM ролями:
- Сообщение об ошибке указывает на то, что роль
arn:aws:iam::xxxxxxxxxx:role/cloudformation-deployment-role
не может быть использована. Это может происходить из-за некорректных разрешений на доступ к S3 в политике IAM для этой роли. Убедитесь, что у вашей роли есть следующие разрешения:{ "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": "arn:aws:s3:::<имя_вашего_бакета>/dms/table-mappings.json" }
- Сообщение об ошибке указывает на то, что роль
-
Доступ к 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" } ] }
- Проверьте, что бакет S3 и файл
-
Проверка имени бакета:
- Убедитесь, что имя бакета (
BucketName
) правильно указано в вашей CloudFormation шаблоне. Ошибки в написании имени могут вызвать проблемы с доступом.
- Убедитесь, что имя бакета (
-
Форматирование и путь к файлу:
- Проверьте правильность пути к файлу. Убедитесь, что JSON файл корректен и корректно загружен в S3. Вы можете протестировать доступ к файлу, используя команды AWS CLI:
aws s3 cp s3://<имя_вашего_бакета>/dms/table-mappings.json .
- Это поможет удостовериться в том, что файл доступен и корректно структурирован.
- Проверьте правильность пути к файлу. Убедитесь, что JSON файл корректен и корректно загружен в S3. Вы можете протестировать доступ к файлу, используя команды AWS CLI:
Рекомендации по устранению проблемы
-
Логирование и отладка: Включите детальное логирование для вашей IAM роли, чтобы видеть, какие разрешения проверяются и действуют. Это поможет определить, где именно происходит сбой.
-
Использование консоли AWS: Проверьте доступность S3 через консоль AWS под той же учетной записью, в которой запускается CloudFormation. Это может помочь избежать ошибок, связанных с политиками.
-
Тестирование доступа к S3: После внесения изменений в политику IAM и/или политику бакета, выполните тестовые операции, чтобы убедиться, что роль действительно имеет доступ ко всем необходимым ресурсам.
Заключение
Ошибка «Роль недействительна или не может быть принята» наиболее часто связана с отсутствием необходимых разрешений для доступа к S3. Проведя аудит политики IAM, политики S3 и проверив корректность конфигурации вашего CloudFormation шаблона, вы сможете устранить эту проблему. Важно помнить о необходимости поддерживать актуальные разрешения для корректной работы с облачными сервисами.