Не удается создать задание передачи хранилища Google с помощью Terraform

Я пытаюсь создать задание передачи хранилища через Terraform как:

resource "google_storage_transfer_job" "goout_storage_backup" {
  description = "my-transfer-job"
  project = "my-project"
  transfer_spec {
    object_conditions {
      max_time_elapsed_since_last_modification = "86400s"
    }
    transfer_options {
      delete_objects_from_source_after_transfer  = false
      delete_objects_unique_in_sink              = false
      overwrite_objects_already_existing_in_sink = true
    }
    gcs_data_source {
      bucket_name = "source"
    }
    gcs_data_sink {
      bucket_name = "target"
    }
  }
  schedule {
    schedule_start_date {
      year  = 1970
      month = 01
      day   = 1
    }
    start_time_of_day {
      hours   = 4
      minutes = 27
      seconds = 0
      nanos   = 42
    }
  }
}

С помощью этого скрипта легко управлять моими существующими заданиями, однако Terraform отказывается создавать какие-либо новые задания передачи:

Ошибка: googleapi: ошибка 400: не удалось получить местоположение источника корзины Google Cloud Storage (GCS) из-за недостаточных разрешений. Убедитесь, что предоставлены необходимые разрешения., FailedPrecondition

Однако мой пользователь owner, и я также безуспешно пытался назначить Storage Transfer Admin и Storage Admin.


person Vojtěch    schedule 23.06.2021    source источник
comment
Вы запускаете это из Cloud Build или из интерфейса командной строки? Ведра источника и приемника относятся к одному проекту? Если они находятся в разных проектах, правильно ли вы получили разрешение на оба проекта?   -  person rk92    schedule 23.06.2021
comment
Это происходит как в экземпляре gcloud, так и на моем локальном хосте. Ковши находятся в одном проекте.   -  person Vojtěch    schedule 23.06.2021
comment
Можете ли вы запустить команду gsutil cp между этими сегментами, чтобы передать что-то вроде тестового файла? Пример команды после создания file1.txt будет gsutil cp gs://<BUCKET1>/file1.txt gs://<BUCKET2>/. Я также видел, что блок ресурсов может принимать входные данные project. Если вы еще не объявили проект, в котором находятся сегменты, вы можете попробовать установить project = <PROJECT_ID>.   -  person rk92    schedule 24.06.2021
comment
Да, конечно. Я также могу создавать и уничтожать ведра с помощью Terraform.   -  person Vojtěch    schedule 24.06.2021
comment
Просто хотел подтвердить, значит, у вас есть проект, определенный в этом блоке ресурсов? Я не видел этого в вашем коде выше.   -  person rk92    schedule 24.06.2021
comment
Я добавил в код поле проекта с тем же результатом.   -  person Vojtěch    schedule 24.06.2021
comment
Не могли бы вы заглянуть в эту ссылку, чтобы узнать, поможет ли она? stackoverflow.com/a/53022262/13291468   -  person rk92    schedule 24.06.2021
comment
Интересный. Учетной записи службы переводов, похоже, НЕТ, однако переводы выполняются каждый день правильно. Я просмотрел настройки задания переноса, но нет конфигурации соответствующей учетной записи службы. Я попытался погуглить их, и мне кажется, что он не должен работать даже без своей служебной учетной записи. Как это возможно?   -  person Vojtěch    schedule 25.06.2021
comment
Хорошо - учетная запись службы не указана в списке учетных записей службы, однако она назначена сегментам. В любом случае - это помогло - похоже, что Terraform не будет создавать разрешения для учетной записи службы, тогда как создание вручную в консоли будет.   -  person Vojtěch    schedule 25.06.2021
comment
Хорошо, что это было хотя бы частично решено. Итак, вы исправили это, вручную добавив учетные записи служб через консоль, или вы просто вручную создали новый проект? Для проекта, на который вы ссылались в своем исходном сообщении, был ли предоставлен Terraform? Можете ли вы показать этот код и входные данные?   -  person rk92    schedule 25.06.2021
comment
Я просто вручную добавил учетную запись службы передачи в исходную и целевую корзины, что исправило это.   -  person Vojtěch    schedule 26.06.2021