Использование MFA с EKS kubectl & aws-iam-authenticator
Я пытался заставить 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 с AWS CLI?
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
... тогда я вижу, что в AWS CLI есть 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
он просит МИД, но он никогда не может быть удовлетворен:
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? Документы, кажется, предлагают нет.
- Что мне здесь не хватает, чтобы заставить это работать? Кажется, почти правильно подключен.
0 ответов
У меня была та же проблема, и я справился с ней, добавив -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"
Я надеюсь, что это работает и для вас.