Crea un rol de IAM y un secreto de AWS
Puedes configurar pods de Kubernetes para acceder a recursos de AWS autenticándote como un rol de AWS IAM en lugar de proporcionar credenciales de AWS explícitas.
|
|
Para autenticarse mediante una función de AWS IAM, debes tener un clúster de Kubernetes implementado usando EKS. |
Crear secreto de AWS Secrets Manager
Como Trident va a emitir APIs contra un vserver de FSx para gestionar el almacenamiento por ti, necesitará credenciales para hacerlo. La forma segura de pasar esas credenciales es a través de un secreto de AWS Secrets Manager. Así que, si aún no tienes uno, tendrás que crear un secreto de AWS Secrets Manager que contenga las credenciales para la cuenta vsadmin.
Este ejemplo crea un secreto de AWS Secrets Manager para almacenar las credenciales de Trident CSI:
aws secretsmanager create-secret --name trident-secret --description "Trident CSI credentials"\
--secret-string "{\"username\":\"vsadmin\",\"password\":\"<svmpassword>\"}"
Crear política de IAM
Trident también necesita permisos de AWS para funcionar correctamente. Por lo tanto, necesitas crear una política que le dé a Trident los permisos que necesita.
Los siguientes ejemplos crean una política de IAM mediante el AWS CLI:
aws iam create-policy --policy-name AmazonFSxNCSIDriverPolicy --policy-document file://policy.json
--description "This policy grants access to Trident CSI to FSxN and Secrets manager"
Ejemplo de política JSON:
{
"Statement": [
{
"Action": [
"fsx:DescribeFileSystems",
"fsx:DescribeVolumes",
"fsx:CreateVolume",
"fsx:RestoreVolumeFromSnapshot",
"fsx:DescribeStorageVirtualMachines",
"fsx:UntagResource",
"fsx:UpdateVolume",
"fsx:TagResource",
"fsx:DeleteVolume"
],
"Effect": "Allow",
"Resource": "*"
},
{
"Action": "secretsmanager:GetSecretValue",
"Effect": "Allow",
"Resource": "arn:aws:secretsmanager:<aws-region>:<aws-account-id>:secret:<aws-secret-manager-name>*"
}
],
"Version": "2012-10-17"
}
Crea una identidad de pod o un rol de IAM para la asociación de cuentas de servicio (IRSA)
Puedes configurar una cuenta de servicio de Kubernetes para que asuma un rol de AWS Identity and Access Management (IAM) con EKS Pod Identity o IAM role for Service account association (IRSA). Cualquier pod que esté configurado para usar la cuenta de servicio podrá acceder a cualquier servicio de AWS al que el rol tenga permisos de acceso.
Las asociaciones de Amazon EKS Pod Identity proporcionan la capacidad de administrar credenciales para tus aplicaciones, de forma similar a como los perfiles de instancias de Amazon EC2 proporcionan credenciales a las instancias de Amazon EC2.
Instala Pod Identity en tu clúster EKS:
Puedes crear una identidad de Pod a través de la consola de AWS o usando el siguiente comando de la AWS CLI:
aws eks create-addon --cluster-name <EKS_CLUSTER_NAME> --addon-name eks-pod-identity-agent
Para más información consulta "Configura el agente de identidad de Amazon EKS Pod".
Crea trust-relationship.json:
Crea trust-relationship.json para permitir que EKS Service Principal asuma este rol para Pod Identity. Luego, crea un rol con esta política de confianza:
aws iam create-role \ --role-name fsxn-csi-role --assume-role-policy-document file://trust-relationship.json \ --description "fsxn csi pod identity role"
archivo trust-relationship.json:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "pods.eks.amazonaws.com"
},
"Action": [
"sts:AssumeRole",
"sts:TagSession"
]
}
]
}
Adjunta la política de rol al rol IAM:
Adjunta la política de rol del paso anterior al rol IAM que creaste:
aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:111122223333:policy/fsxn-csi-policy \ --role-name fsxn-csi-role
Crea una asociación de identidad de pod:
Crea una asociación de identidad de pod entre el rol IAM y la cuenta de servicio de Trident (trident-controller)
aws eks create-pod-identity-association \ --cluster-name <EKS_CLUSTER_NAME> \ --role-arn arn:aws:iam::111122223333:role/fsxn-csi-role \ --namespace trident --service-account trident-controller
Usando la AWS CLI:
aws iam create-role --role-name AmazonEKS_FSxN_CSI_DriverRole \ --assume-role-policy-document file://trust-relationship.json
Archivo trust-relationship.json:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::<account_id>:oidc-provider/<oidc_provider>"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"<oidc_provider>:aud": "sts.amazonaws.com",
"<oidc_provider>:sub": "system:serviceaccount:trident:trident-controller"
}
}
}
]
}
Actualiza los siguientes valores en el archivo trust-relationship.json:
-
<account_id> - Tu ID de cuenta AWS
-
<oidc_provider> - El OIDC de tu cluster EKS. Puedes obtener el oidc_provider ejecutando:
aws eks describe-cluster --name my-cluster --query "cluster.identity.oidc.issuer"\ --output text | sed -e "s/^https:\/\///"
Adjunta el rol IAM con la política IAM:
Una vez que el rol ha sido creado, adjunta la política (que fue creada en el paso anterior) al rol usando este comando:
aws iam attach-role-policy --role-name my-role --policy-arn <IAM policy ARN>
Verifica que el proveedor OICD está asociado:
Verifica que tu proveedor OIDC está asociado con tu cluster. Puedes verificarlo usando este comando:
aws iam list-open-id-connect-providers | grep $oidc_id | cut -d "/" -f4
Si la salida está vacía, usa el siguiente comando para asociar IAM OIDC a tu clúster:
eksctl utils associate-iam-oidc-provider --cluster $cluster_name --approve
Si usas eksctl, usa el siguiente ejemplo para crear una función IAM para la cuenta de servicio en EKS:
eksctl create iamserviceaccount --name trident-controller --namespace trident \
--cluster <my-cluster> --role-name AmazonEKS_FSxN_CSI_DriverRole --role-only \
--attach-policy-arn <IAM-Policy ARN> --approve