Skip to main content
Se proporciona el idioma español mediante traducción automática para su comodidad. En caso de alguna inconsistencia, el inglés precede al español.

Crea un rol de IAM y un secreto de AWS

Colaboradores netapp-aruldeepa

Puedes configurar los pods de Kubernetes para que accedan a los recursos de AWS autenticándose como un rol de AWS IAM en lugar de proporcionar credenciales explícitas de AWS.

Nota Para autenticarse utilizando un rol de AWS IAM, debe tener un clúster de Kubernetes implementado utilizando EKS.

Crear secreto de AWS Secrets Manager

Dado que Trident emitirá API contra un servidor virtual FSx para administrar el almacenamiento por usted, necesitará credenciales para hacerlo. La forma segura de transmitir esas credenciales es mediante un secreto de AWS Secrets Manager. Por lo tanto, si aún no tiene uno, deberá crear un secreto de AWS Secrets Manager que contenga las credenciales de 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, debe crear una política que otorgue a Trident los permisos que necesita.

Los siguientes ejemplos crean una política de IAM utilizando la CLI de AWS:

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 JSON de política:

{
  "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"
}

Crear identidad de pod o rol de IAM para la asociación de cuenta de servicio (IRSA)

Puede 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.

Identidad de pod

Las asociaciones de identidad de pods de Amazon EKS ofrecen la capacidad de administrar las credenciales de sus aplicaciones, de forma similar a como los perfiles de instancias de Amazon EC2 proporcionan credenciales a las instancias de Amazon EC2.

Instale Pod Identity en su clúster EKS:

Puede crear la identidad del Pod a través de la consola de AWS o utilizando el siguiente comando de la CLI de AWS:

aws eks create-addon --cluster-name <EKS_CLUSTER_NAME> --addon-name eks-pod-identity-agent

Para obtener más información, consulte"Configurar el agente de identidad de pod de Amazon EKS" .

Crear trust-relationship.json:

Cree el archivo trust-relationship.json para permitir que la entidad de servicio de EKS asuma este rol para la identidad del pod. A continuación, cree 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"
      ]
    }
  ]
}

Adjunte la política de rol al rol de IAM:

Asocie la política de rol del paso anterior al rol de IAM que se creó:

aws iam attach-role-policy \
  --policy-arn arn:aws:iam::aws:111122223333:policy/fsxn-csi-policy \
  --role-name fsxn-csi-role

Crear una asociación de identidad de pod:

Cree una asociación de identidad de pod entre el rol de 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
Rol de IAM para la asociación de cuentas de servicio (IRSA)

Utilizando la CLI de AWS:

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 trust-relationship.json archivo:

  • <account_id> - Tu ID de cuenta de AWS

  • <oidc_provider> - El OIDC de su clúster EKS. Puede obtener el proveedor oidc ejecutando:

    aws eks describe-cluster --name my-cluster --query "cluster.identity.oidc.issuer"\
      --output text | sed -e "s/^https:\/\///"

Asocia el rol de IAM con la política de IAM:

Una vez creado el rol, adjúntele la política (creada en el paso anterior) mediante este comando:

aws iam attach-role-policy --role-name my-role --policy-arn <IAM policy ARN>

Verificar que el proveedor de OICD esté asociado:

Verifique que su proveedor OIDC esté asociado con su clúster. Puedes verificarlo usando este comando:

aws iam list-open-id-connect-providers | grep $oidc_id | cut -d "/" -f4

Si la salida está vacía, utilice el siguiente comando para asociar IAM OIDC a su clúster:

eksctl utils associate-iam-oidc-provider --cluster $cluster_name --approve

Si utiliza eksctl, siga el siguiente ejemplo para crear un rol de 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