У меня есть:
- учетная запись службы
- экземпляр GCE, использующий эту учетную запись службы
- изображение контейнера загружено в GCR
Кажется, я не могу предоставить этому экземпляру доступ GCR только для чтения. Все ресурсы находятся в одном проекте. Я попытался предоставить роли storage.admin
и storage.objectViewer
учетной записи службы, и в каждом случае доступ к реестру контейнеров приводит к https://eu.gcr.io/v2/<project>/<image>/manifests/latest: 401 Unauthorized
.
Во всей документации, которую я прочитал, говорится, что мне нужны storage-rw
область и storage.objectViewer
, предоставленные в ведре для GCR в этом регионе, и все они у меня есть.
Все это настраиваю с помощью Terraform. Как вы настроили доступ GCR к учетной записи службы с помощью Terraform?
Вот мой код:
locals {
gcr-region = "eu"
}
resource "google_service_account" "service_account" {
account_id = "k3s-master"
display_name = "k3s-master"
}
resource "google_project_iam_member" "project" {
role = "roles/logging.logWriter"
member = "serviceAccount:${google_service_account.service_account.email}"
}
resource "google_compute_instance" "instance" {
name = "${var.service_name}"
machine_type = "f1-micro"
allow_stopping_for_update = true
service_account {
email = "${google_service_account.service_account.email}"
scopes = [
"storage-rw",
"https://www.googleapis.com/auth/cloud-platform",
"https://www.googleapis.com/auth/compute",
]
}
boot_disk {
initialize_params {
image = "debian-9"
}
}
network_interface {
network = "${google_compute_network.k3s-network.self_link}"
access_config { }
}
}
resource "google_storage_bucket_iam_binding" "eu-binding" {
bucket = "eu.artifacts.${var.project}.appspot.com"
role = "roles/storage.objectViewer"
members = [
"serviceAccount:${google_service_account.service_account.email}",
]
}
resource "google_storage_bucket_iam_binding" "binding" {
bucket = "${var.project}.appspot.com"
role = "roles/storage.objectViewer"
members = [
"serviceAccount:${google_service_account.service_account.email}",
]
}