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»