Ack-acm-controller: различия между версиями
Sirmax (обсуждение | вклад) |
Sirmax (обсуждение | вклад) |
||
| Строка 57: | Строка 57: | ||
==<code>IAM Role</code>== |
==<code>IAM Role</code>== |
||
| + | Эта роль по сути связывает <code>Service Account</code> <BR> |
||
| − | <PRE> |
||
| − | + | (тут это видно из части <code>"oidc.eks.us-east-1.amazonaws.com/id/12345678901285475EA0123456789012:sub": ["system:serviceaccount:kube-system:aws-acm-controller"],</code> и <code>Policy</code><BR> |
|
| + | <BR> |
||
| + | Если сказать чуть точнее то "будет связывать" - на момент создания это просто правило определяющее что с <BR> |
||
| + | такой ролью могут представляться внешний по отношению к IAM аккаунты в частности <code>aws-acm-controller</code> <BR> |
||
| + | Какие именно права им будут назначены зависит от того какие политики будут "приаттачены" |
||
<BR> |
<BR> |
||
* Создфть файл <code>AWSLoadBalancerControllerIAMRole.json</code> с содержимым (естественно ID всегда различаются) |
* Создфть файл <code>AWSLoadBalancerControllerIAMRole.json</code> с содержимым (естественно ID всегда различаются) |
||
| Строка 74: | Строка 78: | ||
"StringEquals": { |
"StringEquals": { |
||
"oidc.eks.us-east-1.amazonaws.com/id/12345678901285475EA0123456789012:sub": [ |
"oidc.eks.us-east-1.amazonaws.com/id/12345678901285475EA0123456789012:sub": [ |
||
| − | "system:serviceaccount:kube-system:aws- |
+ | "system:serviceaccount:kube-system:aws-acm-controller" |
], |
], |
||
"oidc.eks.us-east-1.amazonaws.com/id/123456789085475EA0123456789012:aud": [ |
"oidc.eks.us-east-1.amazonaws.com/id/123456789085475EA0123456789012:aud": [ |
||
Версия 13:16, 23 июня 2025
Задача
Если уже пользоваться AWS то хотелось бы получить максимум за свои деньги, и отказаться от использования Let's Encrypt,
а выписывать сертефикаты от AWS
К сожалению, жадный AWS не дает ключ от сертификата, и единственный доступный вариант использования - это ALB
acm-controller
Аналогично другим контроллерам, позволяет создавать сертефикаты (но блять без ключей, ебучий ты AWS) как ресурсы в k8s
Логика работы (коротко)
Устроено все, если смотреть обзорно, довольно просто
acm-controllerследит за появлением ресурса типаCertificate- При появлении ресурса идет в
APIи что-то там делает
TODO
Установка и настройка acm-controller
Policy
Создать файл с Policy - имя конечно не принципиально, для простоты пусть будет AWSACMControllerIAMPolicy.json
Это рекомендованная политика
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"acm:DescribeCertificate",
"acm:ImportCertificate",
"acm:RequestCertificate",
"acm:UpdateCertificateOptions",
"acm:DeleteCertificate",
"acm:AddTagsToCertificate",
"acm:RemoveTagsFromCertificate",
"acm:ListTagsForCertificate"
],
"Resource": "*"
}
]
}
Далее из файла создать политику:
aws iam create-policy \ --policy-name AWSACMControllerIAMPolicy \ --policy-document file://AWSACMControllerIAMPolicy.json
IAM Role
Эта роль по сути связывает Service Account
(тут это видно из части "oidc.eks.us-east-1.amazonaws.com/id/12345678901285475EA0123456789012:sub": ["system:serviceaccount:kube-system:aws-acm-controller"], и Policy
Если сказать чуть точнее то "будет связывать" - на момент создания это просто правило определяющее что с
такой ролью могут представляться внешний по отношению к IAM аккаунты в частности aws-acm-controller
Какие именно права им будут назначены зависит от того какие политики будут "приаттачены"
- Создфть файл
AWSLoadBalancerControllerIAMRole.jsonс содержимым (естественно ID всегда различаются)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRoleWithWebIdentity",
"Principal": {
"Federated": "arn:aws:iam::123456789012:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/12345678901285475EA0123456789012"
},
"Condition": {
"StringEquals": {
"oidc.eks.us-east-1.amazonaws.com/id/12345678901285475EA0123456789012:sub": [
"system:serviceaccount:kube-system:aws-acm-controller"
],
"oidc.eks.us-east-1.amazonaws.com/id/123456789085475EA0123456789012:aud": [
"sts.amazonaws.com"
]
}
}
}
]
}
Значения
arn:aws:iam::54XXXXXXXXXXэто ID аккаунтаoidc.eks.us-east-1.amazonaws.com/id/5918A6B3305CXXXXXXXXXXXXXXXXXXXXкак правильно называется это значение,
я не знаю, но получить его можно следующей коммандой:
aws eks describe-cluster --name education-eks-1o3RFCvh --query "cluster.identity.oidc.issuer"
education-eks-1o3RFCvh это имя кластера
Вывод команды будет примерно таким:
"https://oidc.eks.us-east-1.amazonaws.com/id/5918A6B3305CXXXXXXXXXXXXXXXXXXXX"
Создать роль из подготовленного файла iam-role.json
aws iam create-role \ --role-name AWSLoadBalancerControllerIAMRole \ --assume-role-policy-document file://AWSLoadBalancerControllerIAMRole.json
Helm
helm repo add ack https://aws.github.io/eks-charts helm repo update helm install ack-acm-controller ack/ack-acm-controller \ --namespace ack-system \ --create-namespace \ --set aws.region=us-east-1 \ --set serviceAccount.create=false \ --set serviceAccount.name=ack-acm-controller