Ack-acm-controller: различия между версиями
Sirmax (обсуждение | вклад) |
Sirmax (обсуждение | вклад) (→Helm) |
||
| Строка 106: | Строка 106: | ||
--assume-role-policy-document file://AWSLoadBalancerControllerIAMRole.json |
--assume-role-policy-document file://AWSLoadBalancerControllerIAMRole.json |
||
</PRE> |
</PRE> |
||
| + | |||
| + | ==Attach Policy to Role == |
||
| + | Собственно это и есть момент назначения прав - "прикрепление" политик к роли, при этом роль по сути <code>Trut Policy</code>, <BR> |
||
| + | другими словами она описывает какие <code>Service Account</code> и из какого кластера могут ей представляться ю |
||
| + | <PRE> |
||
| + | aws iam attach-role-policy \ |
||
| + | --role-name AWSLoadBalancerControllerIAMRole \ |
||
| + | --policy-arn arn:aws:iam::<ACCOUNT_ID>:policy/AWSLoadBalancerControllerIAMPolicy |
||
| + | </PRE> |
||
| + | Все очевидно |
||
| + | * <code>AWSLoadBalancerControllerIAMRole</code> соответвует <code> --policy-name AWSLoadBalancerControllerIAMPolicy ... </code> при создании политики |
||
| + | * <code>AWSLoadBalancerControllerIAMPolicy</code> соответсвует имени роли <code> --role-name AWSLoadBalancerControllerIAMRole </code> при создании роли |
||
| + | |||
=Helm= |
=Helm= |
||
Версия 13:26, 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(Trust Policy)
Эта роль по сути связывает 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
Attach Policy to Role
Собственно это и есть момент назначения прав - "прикрепление" политик к роли, при этом роль по сути Trut Policy,
другими словами она описывает какие Service Account и из какого кластера могут ей представляться ю
aws iam attach-role-policy \ --role-name AWSLoadBalancerControllerIAMRole \ --policy-arn arn:aws:iam::<ACCOUNT_ID>:policy/AWSLoadBalancerControllerIAMPolicy
Все очевидно
AWSLoadBalancerControllerIAMRoleсоответвует--policy-name AWSLoadBalancerControllerIAMPolicy ...при создании политикиAWSLoadBalancerControllerIAMPolicyсоответсвует имени роли--role-name AWSLoadBalancerControllerIAMRoleпри создании роли
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