Open Caoimhin89 opened 2 years ago
Доброго дня, Caoimhin89.
Да, у нас был баг в этом месте, но мы его уже исправили. В версии провайдера 0.75.0
эта ошибка будет поправлена.
Как временное решение, если с версией 0.73.0
проблем нет, можно воспользоваться ей.
Для этого надо выставить её в вашем файле как-то так:
required_providers {
yandex = {
source = "yandex-cloud/yandex"
version = "0.73.0"
}
}
после чего выполнить команду terraform init -upgrade
С 73 версией та же беда
Версия 0.80.0. При установке lifecycle_rule
ошибка сохраняется.
Привет, @salemgolemugoo @Windemiatrix! Для решения проблем предлагаю вам создать обращение в нашей службе поддержки и уже в индивидуальном порядке мы сможем помочь найти проблему и решить её.
На данный момент следующий план выполняется успешно на версии 0.80.0:
terraform {
required_providers {
yandex = {
source = "yandex-cloud/yandex"
version = "0.80.0"
}
}
required_version = ">= 0.13"
backend "s3" {
endpoint = "storage.yandexcloud.net"
bucket = "xxx"
region = "ru-central1-a"
key = "state.tfstate"
access_key = "xxxx"
secret_key = "xxxx"
skip_region_validation = true
skip_credentials_validation = true
}
}
locals {
cloud_id = "xxx"
folder_id = "xxx"
zone = "ru-central1-a"
}
provider "yandex" {
cloud_id = local.cloud_id
folder_id = local.folder_id
zone = local.zone
service_account_key_file = file("terra-key.json")
}
resource "yandex_iam_service_account" "sa" {
folder_id = local.folder_id
description = "Service account for terraform"
name = "sa"
}
resource "yandex_resourcemanager_folder_iam_member" "sa-editor" {
folder_id = local.folder_id
role = "storage.editor"
member = "serviceAccount:${yandex_iam_service_account.sa.id}"
}
resource "yandex_iam_service_account_static_access_key" "keys" {
service_account_id = yandex_iam_service_account.sa.id
description = "Access keys for object storage"
}
resource "yandex_storage_bucket" "backups" {
bucket = "xxx"
access_key = yandex_iam_service_account_static_access_key.keys.access_key
secret_key = yandex_iam_service_account_static_access_key.keys.secret_key
lifecycle_rule {
prefix = "config/"
enabled = true
noncurrent_version_transition {
days = 30
storage_class = "COLD"
}
noncurrent_version_expiration {
days = 90
}
}
}
Логи:
yandex_iam_service_account.sa: Creating...
yandex_iam_service_account.sa: Creation complete after 2s [id=xxx]
yandex_resourcemanager_folder_iam_member.sa-editor: Creating...
yandex_iam_service_account_static_access_key.keys: Creating...
yandex_iam_service_account_static_access_key.keys: Creation complete after 1s [id=xxx]
yandex_storage_bucket.backups: Creating...
yandex_resourcemanager_folder_iam_member.sa-editor: Creation complete after 2s [id=xxx/storage.editor/serviceAccount:xxx]
yandex_storage_bucket.backups: Still creating... [10s elapsed]
yandex_storage_bucket.backups: Still creating... [20s elapsed]
yandex_storage_bucket.backups: Still creating... [30s elapsed]
yandex_storage_bucket.backups: Still creating... [40s elapsed]
yandex_storage_bucket.backups: Still creating... [50s elapsed]
yandex_storage_bucket.backups: Still creating... [1m0s elapsed]
yandex_storage_bucket.backups: Creation complete after 1m3s [id=xxx]
Возможно, AccessDenied в вашем случае имеет какую-то другую природу.
Здравствуйте!
Аналогичная проблема. В каталоге права storage.admin
, при попытке создать бакет из terraform, получаю ошибку:
yandex_storage_bucket.stat-event-code: Still creating... [50s elapsed]
yandex_storage_bucket.stat-event-code: Still creating... [1m0s elapsed]
╷
│ Error: handling lifecycle_rule: Error putting S3 lifecycle: AccessDenied: Access Denied
│ status code: 403, request id: 20ff976ddfec84c3, host id:
│
│ with yandex_storage_bucket.stat-event-code,
│ on main.tf line 76, in resource "yandex_storage_bucket" "stat-event-code":
│ 76: resource "yandex_storage_bucket" "stat-event-code" {
│
При этом, бакет создаётся, но без lifecycle_rule, и не сохраняется в состоянии terraform. Более того, я могу создать lifecycle_rule из web-интерфейса для этого же бакета.
terraform version
Terraform v1.3.0
on darwin_amd64
+ provider registry.terraform.io/yandex-cloud/yandex v0.82.0
Код выглядит вот так:
resource "yandex_storage_bucket" "stat-event-code" {
access_key = yandex_iam_service_account_static_access_key.sa-static-key.access_key
secret_key = yandex_iam_service_account_static_access_key.sa-static-key.secret_key
bucket = "stat-event-code"
folder_id = data.yandex_resourcemanager_folder.folder.id
max_size = 50048576
server_side_encryption_configuration {
rule {
apply_server_side_encryption_by_default {
kms_master_key_id = yandex_kms_symmetric_key.s3-key.id
sse_algorithm = "aws:kms"
}
}
}
anonymous_access_flags {
read = false
list = false
}
versioning {
enabled = false
}
lifecycle_rule {
id = "static-event"
enabled = true
prefix = "static-event"
expiration {
days = 7
}
}
}
При операциях через terraform:
server_side_encryption_configuration
versioning
lifecycle_rule
403 AccessDenied
, но эти же операции без проблем отрабатывают в веб-интерфейсе. Проблема решена в моём случае. Изменение параметров происходит от имени пользователя, статический ключ которого указан в параметрах access_key/secret_key
, а не от того пользователя, от которого запускается tf.
Собственно, невнимательно прочитал доку к провайдеру.
_For extended API usage, such as setting max_size, folder_id, anonymous_access_flags, default_storageclass and https parameters for bucket, will be used default authorization method, i.e. IAM / OAuth token from provider block will be used. This might be a little bit confusing in cases when separate service account is used for managing buckets because in this case buckets will be accessed by two different accounts that might have different permissions for buckets.
Storage Bucket успешно создан, но потом я получаю такую ошибку: 403 - error getting current policy.
Мой код:
После terraform apply, выводит на экран следующий текст:
Я что-то не так делаю или это bug?