AWS EKS это отличный вариант для размещенного кластера Kubernetes.
В частности, это легко использовать для демонстраций и тренировочных сессий.
Тем не менее, аутентификация EKS основана на AWS IAM, что означает, что пользователям нужна учетная запись AWS. Аутентификация к EKS обычно включает в себя вызов aws eks get-token
командовать в вашем .kube/config
чтобы получить токен аутентификации.
Когда мы настраивали EKS для обучения Kubernetes, нам нужен был простой способ для пользователей без учетной записи AWS, чтобы получить доступ к кластеру, поэтому мы создали базовую прокси -сервис для EKS Get-Token
действие.
Camptocamp/AWS-IAM-Authenticator-Proxy
Простая http -прокси для обмена аутентификацией AWS IAM
Услуги Amazon требуют использования действительных учетных записей. Этот прокси позволяет внешним пользователям получить доступ к кластеру AWS EKS, не требуя доступа к учетным данным AWS.
Отказ от ответственности : Прокси не реализует какую -либо форму аутентификации. Вы несете ответственность за реализацию любой меры безопасности, которую вы хотите применять перед ней.
Пример использования
Чтобы предоставить доступ к кластеру AWS без учетных данных, вы можете запустить прокси с необходимыми учетными данными, а также идентификатор кластера. Например, используя Docker:
$ docker run --rm -p 8080:8080 \ -e AWS_ACCESS_KEY_ID=\ -e AWS_SECRET_ACCESS_KEY= \ -e EKS_CLUSTER_ID= \ -e PSK="mysecretstring" \ camptocamp/aws-iam-authenticator-proxy:latest
Затем вы должны иметь возможность получить токены аутентификации для вашего пользователя в http://localhost: 8080 Анкет
Если PSK пройден, вам нужно будет пройти его ценность в…
Развертывание с Docker
Прокси можно развернуть с помощью Docker, с учетными данными AWS, например:
docker run --rm -p 8080:8080 \ -e AWS_ACCESS_KEY_ID=\ -e AWS_SECRET_ACCESS_KEY= \ -e EKS_CLUSTER_ID= \ -e PSK="mysecretstring" \ camptocamp/aws-iam-authenticator-proxy:latest
Права на кластер будут зависеть от пользователя, которого вы выбрали для создания ключа доступа.
PSK не является обязательным и позволяет немного закрепить прокси.
После того, как прокси запускается, вы можете получить к нему доступ к ним по адресу http://localhost: 8080? PSK = MySecRetString , так что вы можете просто установить свой ~/.kube/config
использовать скручивание
вместо AWS
:
users: - name:user: exec: apiVersion: client.authentication.k8s.io/v1alpha1 command: curl args: - -s - "http:// :8080/?psk=mysecretstring"
Развертывание в EKS
Поскольку у вас есть кластер EKS, в первую очередь вы могли бы также развернуть прокси.
Репозиторий предоставляет для этого диаграмму руководителя в K8s
каталог проекта GitHub.
Вы можете просто создать карту со следующими значениями:
eks_cluster_id: "" psk: "mysecretstring" aws: access_key_id: " " secret_access_key: " "
Учетные данные AWS будут храниться в секрете Kubernetes и переданы в контейнер.
С использованием
Однако, поскольку мы находимся в AWS, мы также можем использовать IAM Роли для счетов обслуживания и вообще обойти клавиши доступа. Это гораздо более чистый подход.
Вот как это сделать, используя Terraform для создания роли и развертывания прокси.
Во -первых, создайте роль, связанную с OIDC:
module "iam_assumable_role_aws_iam_authenticator_proxy" { source = "terraform-aws-modules/iam/aws//modules/iam-assumable-role-with-oidc" version = "3.3.0" create_role = true number_of_role_policy_arns = 0 role_name = "aws-iam-authenticator-proxy" provider_url = replace(module.cluster.cluster_oidc_issuer_url, "https://", "") oidc_fully_qualified_subjects = ["system:serviceaccount:yournamespace:aws-iam-authenticator-proxy"] }
Замена yournamespace
с пространством имен Kubernetes, где вы будете развертывать прокси.
Теперь мы можем настроить кластер для использования карты этой роли для роли Kubernetes, которую мы хотим (например, System:: Masters , чтобы сделать его кластер администратор).
Мы создадим случайный PSK и генерируем файл KubeConfig для использования Curl
с прокси:
data "aws_vpc" "this" { id = var.vpc_id } data "aws_subnet_ids" "private" { vpc_id = data.aws_vpc.this.id tags = { "kubernetes.io/role/internal-elb" = "1" } } module "cluster" { source = "terraform-aws-modules/eks/aws" version = "13.1.0" cluster_name = var.cluster_name cluster_version = "1.18" subnets = data.aws_subnet_ids.private.ids vpc_id = var.vpc_id enable_irsa = true map_roles = [ { rolearn = module.iam_assumable_role_aws_iam_authenticator_proxy.this_iam_role_arn, username = module.iam_assumable_role_aws_iam_authenticator_proxy.this_iam_role_name, groups = ["system:masters"] }, ] worker_groups = [ { instance_type = "m5a.large" asg_desired_capacity = 2 asg_max_size = 3 } ] kubeconfig_aws_authenticator_command = "curl" kubeconfig_aws_authenticator_command_args = [ "-s", "https://${var.auth_url}/?psk=${random_password.auth_proxy_psk.result}", ] } resource "random_password" "auth_proxy_psk" { length = 16 special = false }
Наконец, мы можем развернуть прокси в Kubernetes, используя Helm:
resource "helm_release" "aws-iam-authenticator-proxy" { name = "aws-iam-authenticator-proxy" chart = "https://github.com/camptocamp/aws-iam-authenticator-proxy/tree/master/k8s" namespace = "aws-iam-authenticator-proxy" dependency_update = true create_namespace = tr values = [ << EOT eks_cluster_id: "${var.cluster_name}" psk: "${random_password.auth_proxy_psk.result}" serviceAccount: name: "aws-iam-authenticator-proxy" annotations: eks.amazonaws.com/role-arn: ${module.iam_assumable_role_aws_iam_authenticator_proxy.this_iam_role_arn} EOT ] depends_on = [ module.cluster, ] }
Вы можете добавить Вход
или настроить Сервис
использовать L4 LoadBalancer
Настройка значений руля.
Оригинал: «https://dev.to/camptocamp-ops/a-simple-auth-proxy-for-eks-24dh»