Использование MFA с EKS kubectl & aws-iam-authenticator - PullRequest
0 голосов
/ 11 октября 2018

Я пытался заставить MFA работать с kubectl для защиты доступа к мастерам EKS в AWS.Документы, похоже, намекают на то, что это возможно, но я сталкиваюсь с проблемами и не могу их решить.

Без чего-либо особенного я могу подключиться к своему кластеру EKS:

kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   172.20.0.1   <none>        443/TCP   2d

Если я добавлю MFA в CLI AWS, выполните следующие сообщения:

Как использовать MFA с CLI AWS?

https://docs.aws.amazon.com/cli/latest/userguide/cli-roles.html

Я установилмои локальные учетные данные, например, так:

[default]
aws_access_key_id = **********************
aws_secret_access_key = **********************
region = us-west-2

[default_role]
mfa_serial = arn:aws:iam::1234567890:mfa/spanktar
role_arn = arn:aws:iam::1234567890:role/test_assumeRole
source_profile = default

... тогда я вижу, что в CLI AWS есть MFA:

aws sts get-caller-identity --profile default_role
Enter MFA code for arn:aws:iam::1234567890:mfa/spanktar: 123456
{
    "UserId": "**********************:botocore-session-1234567890",
    "Account": "1234567890",
    "Arn": "arn:aws:sts::1234567890:assumed-role/test_assumeRole/botocore-session-1234567890"
}

Затем я могу проверить:

aws sts assume-role --role-arn arn:aws:iam::1234567890:role/test_assumeRole --role-session-name default_role
{
    "Credentials": {
        "AccessKeyId": "**********************",
        "SecretAccessKey": "**********************",
        "SessionToken": "FOO",
        "Expiration": "2018-10-11T21:19:20Z"
    },
    "AssumedRoleUser": {
        "AssumedRoleId": "**********************:default_role",
        "Arn": "arn:aws:sts::1234567890:assumed-role/test_assumeRole/default_role"
    }
}

kubectl по-прежнему работает как обычно, потому что он еще не использует профиль:

kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   172.20.0.1   <none>        443/TCP   2d

Затем я настроил k8s для использования профиля, следуя этой документации

users:
- name: aws
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1alpha1
      command: aws-iam-authenticator
      env:
      - name: "AWS_PROFILE"
        value: "default_role"
      args:
        - "token"
        - "-i"
        - "test-eks-cluster"

Так что теперь, когда я пытаюсь kubectl, он запрашивает MFA, но никогда не может быть удовлетворен:

kubectl get svc
Assume Role MFA token code: 123456
Assume Role MFA token code: 123456
could not get token: AccessDenied: MultiFactorAuthentication failed with invalid MFA one time pass code.
    status code: 403, request id: 123456-cd93-11e8-80a5-1234567898765
E1011 13:22:07.385200   28191 exec.go:230] refreshing credentials: exec: exit status 1
No resources found.
error: You must be logged in to the server (Unauthorized)

Роль AWS test_assumeRole выглядит следующим образом:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::1234567890:user/spanktar"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

Соответствующая политика test_assumePolicy выглядит следующим образом:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::1234567890:role/test_assumeRole"
        }
    ]
}

Итак, вопросы:

  • Нужно ли прикреплять что-либо из этого пользователю IAM?Документы, похоже, не предлагают.
  • Что мне здесь не хватает, чтобы заставить это работать?Кажется, почти подключен правильно.

1 Ответ

0 голосов
/ 22 января 2019

У меня была та же проблема, и я справился с ней, добавив параметр -r в файл конфигурации kubectl.

В вашем случае это выглядело бы так:

users:
- name: aws
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1alpha1
      command: aws-iam-authenticator
      env:
      - name: "AWS_PROFILE"
        value: "default_role"
      args:
        - "token"
        - "-i"
        - "test-eks-cluster"
        - "-r"
        - "arn:aws:iam::1234567890:role/test_assumeRole"

Надеюсьэто работает и для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...