Creación del rol de IAM del controlador de CSI de Amazon EBS - Amazon EKS

Ayude a mejorar esta página

¿Quiere contribuir a esta guía del usuario? Desplácese hasta el final de esta página y seleccione Editar esta página en GitHub. Sus contribuciones ayudarán a que nuestra guía del usuario sea mejor para todos.

Creación del rol de IAM del controlador de CSI de Amazon EBS

El complemento CSI de Amazon EBS requiere permisos de IAM para realizar llamadas a las API de AWS en su nombre. Para obtener más información, consulte Configurar el permiso del controlador en GitHub.

nota

Los Pods tendrán acceso a los permisos asignados al rol de IAM, a menos que bloquee el acceso al IMDS. Para obtener más información, consulte Prácticas recomendadas de seguridad para Amazon EKS.

Requisitos previos

El siguiente procedimiento muestra cómo crear un rol de IAM y asociarle la política administrada de AWS. Puede utilizar la eksctl, la AWS Management Console o la AWS CLI.

nota

Los pasos específicos de este procedimiento están diseñados para usar el controlador como complemento de Amazon EKS. Se necesitan diferentes pasos para usar el controlador como complemento autoadministrado. Para obtener más información, consulte Configurar los permisos de los controladores en GitHub.

eksctl
Para crear el rol de IAM del complemento CSI de Amazon EBS con la eksctl
  1. Cree un rol de IAM y asóciele una política. AWS mantiene una política administrada de AWS, pero también puede crear su propia política personalizada. Puede crear un rol de IAM y asociar la política administrada de AWS con el siguiente comando. Reemplace my-cluster por el nombre del clúster. El comando implementa una pila de AWS CloudFormation que crea un rol de IAM y le adjunta la política de IAM. Si su clúster está en las Regiones de AWS GovCloud de AWS (EE. UU. Este) o GovCloud de AWS (EE. UU. Oeste), sustituya arn:aws: con arn:aws-us-gov:.

    eksctl create iamserviceaccount \ --name ebs-csi-controller-sa \ --namespace kube-system \ --cluster my-cluster \ --role-name AmazonEKS_EBS_CSI_DriverRole \ --role-only \ --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \ --approve
  2. Si utiliza una clave de KMS personalizada para el cifrado en los volúmenes de Amazon EBS, personalice el rol de IAM según sea necesario. Por ejemplo, haga lo siguiente:

    1. Copie y pegue el siguiente código en un nuevo archivo kms-key-for-encryption-on-ebs.json. Reemplace custom-key-arn con el ARN de la clave de KMS personalizado.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": ["custom-key-arn"], "Condition": { "Bool": { "kms:GrantIsForAWSResource": "true" } } }, { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": ["custom-key-arn"] } ] }
    2. Cree la política. Puede cambiar KMS_Key_For_Encryption_On_EBS_Policy a un nombre diferente. Sin embargo, si lo hace, asegúrese de hacerlo también en pasos posteriores.

      aws iam create-policy \ --policy-name KMS_Key_For_Encryption_On_EBS_Policy \ --policy-document file://kms-key-for-encryption-on-ebs.json
    3. Adjunte una política de IAM y adjunte la política de IAM al rol con el siguiente comando. Reemplace 111122223333 por su ID de cuenta. Si su clúster está en las Regiones de AWS GovCloud de AWS (EE. UU. Este) o GovCloud de AWS (EE. UU. Oeste), sustituya arn:aws: con arn:aws-us-gov:.

      aws iam attach-role-policy \ --policy-arn arn:aws:iam::111122223333:policy/KMS_Key_For_Encryption_On_EBS_Policy \ --role-name AmazonEKS_EBS_CSI_DriverRole
AWS Management Console
Para crear el rol de IAM del complemento CSI de Amazon EBS con la AWS Management Console
  1. Abra la consola de IAM en https://console.aws.amazon.com/iam/.

  2. En el panel de navegación izquierdo, seleccione Roles.

  3. En la página Roles, elija Crear rol.

  4. En la página Seleccionar entidad de confianza, haga lo siguiente:

    1. En la sección Tipo de entidad de confianza, elija Identidad web.

    2. En Identity provider (Proveedor de identidades), elija la URL del proveedor de OpenID Connect para su clúster (como se muestra en Overview [Información general] en Amazon EKS).

    3. En Audiencia, elija sts.amazonaws.com.

    4. Elija Siguiente.

  5. En la página Agregar permisos, haga lo siguiente:

    1. En el cuadro Filtrar políticas, escriba AmazonEBSCSIDriverPolicy.

    2. Marque la casilla situada a la izquierda del nombre de la AmazonEBSCSIDriverPolicy que obtuvo en la búsqueda.

    3. Elija Siguiente.

  6. En la página Nombrar, revisar y crear, haga lo siguiente:

    1. En Nombre del rol, ingrese un nombre único para su rol, por ejemplo, AmazonEKS_EBS_CSI_DriverRole.

    2. En Agregar etiquetas (Opcional), de manera opcional, agregue metadatos al rol asociando etiquetas como pares de clave-valor. Para obtener más información sobre el uso de etiquetas en IAM, consulte Etiquetado de recursos de IAM en la Guía de usuario de IAM.

    3. Seleccione Crear rol.

  7. Una vez creado el rol, seleccione el rol en la consola para abrirlo y editarlo.

  8. Elija la pestaña Relaciones de confianza y, a continuación, Editar política de confianza.

  9. Busque la línea que se parezca a la siguiente:

    "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com"

    Agregue una coma al final de la línea anterior y, luego, agregue la siguiente línea después de la anterior. Reemplace region-code por la Región de AWS en la que se encuentra el clúster. Reemplace EXAMPLED539D4633E53DE1B71EXAMPLE con el ID del proveedor OIDC del clúster.

    "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:ebs-csi-controller-sa"
  10. Elija Actualizar política para terminar.

  11. Si utiliza una clave de KMS personalizada para el cifrado en los volúmenes de Amazon EBS, personalice el rol de IAM según sea necesario. Por ejemplo, haga lo siguiente:

    1. En el panel de navegación izquierdo, elija Policies (Políticas).

    2. En la página Políticas, seleccione Crear una política.

    3. En la página Crear política, elija la pestaña JSON.

    4. Copie y pegue el siguiente código en el editor y reemplace custom-key-arn con el ARN de la clave KMS personalizado.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": ["custom-key-arn"], "Condition": { "Bool": { "kms:GrantIsForAWSResource": "true" } } }, { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": ["custom-key-arn"] } ] }
    5. Elija Siguiente: etiquetas.

    6. En la página Agregar etiquetas (opcional), elija Siguiente: revisar.

    7. Para Nombre, escriba un nombre único para la política (por ejemplo, KMS_Key_For_Encryption_On_EBS_Policy).

    8. Elija Crear política.

    9. En el panel de navegación izquierdo, seleccione Roles.

    10. Elija AmazonEKS_EBS_CSI_DriverRole en la consola para abrirlo y editarlo.

    11. En la lista desplegable Agregar permisos, seleccione Asociar políticas.

    12. En el cuadro Filtrar políticas, escriba KMS_Key_For_Encryption_On_EBS_Policy.

    13. Marque la casilla situada a la izquierda del nombre de la KMS_Key_For_Encryption_On_EBS_Policy que obtuvo en la búsqueda.

    14. Seleccione Asociar políticas.

AWS CLI
Para crear el rol de IAM del complemento CSI de Amazon EBS con la AWS CLI
  1. Vea la URL del proveedor de OIDC de su clúster. Reemplace my-cluster por el nombre de su clúster. Si la salida del comando es None, revise los Requisitos previos.

    aws eks describe-cluster --name my-cluster --query "cluster.identity.oidc.issuer" --output text

    Un ejemplo de salida sería el siguiente.

    https://oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
  2. Cree el rol de IAM y otórguele la acción AssumeRoleWithWebIdentity.

    1. Copie el siguiente contenido en un archivo denominado aws-ebs-csi-driver-trust-policy.json. Reemplace 111122223333 por su ID de cuenta. Reemplace EXAMPLED539D4633E53DE1B71EXAMPLE y region-code por los valores que se devolvieron en el paso anterior. Si su clúster está en las Regiones de AWS AWS GovCloud (Este de EE. UU.) o AWS GovCloud (Oeste de EE. UU.), reemplace arn:aws: con arn:aws-us-gov:.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com", "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:ebs-csi-controller-sa" } } } ] }
    2. Cree el rol. Puede cambiar AmazonEKS_EBS_CSI_DriverRole a un nombre diferente. Si lo cambia, asegúrese de hacerlo también en pasos posteriores.

      aws iam create-role \ --role-name AmazonEKS_EBS_CSI_DriverRole \ --assume-role-policy-document file://"aws-ebs-csi-driver-trust-policy.json"
  3. Asocie una política. AWS mantiene una política administrada de AWS, pero también puede crear su propia política personalizada. Asocie la política administrada de AWS al rol con el siguiente comando. Si su clúster está en las Regiones de AWS GovCloud de AWS (EE. UU. Este) o GovCloud de AWS (EE. UU. Oeste), sustituya arn:aws: con arn:aws-us-gov:.

    aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \ --role-name AmazonEKS_EBS_CSI_DriverRole
  4. Si utiliza una clave de KMS personalizada para el cifrado en los volúmenes de Amazon EBS, personalice el rol de IAM según sea necesario. Por ejemplo, haga lo siguiente:

    1. Copie y pegue el siguiente código en un nuevo archivo kms-key-for-encryption-on-ebs.json. Reemplace custom-key-arn con el ARN de la clave de KMS personalizado.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": ["custom-key-arn"], "Condition": { "Bool": { "kms:GrantIsForAWSResource": "true" } } }, { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": ["custom-key-arn"] } ] }
    2. Cree la política. Puede cambiar KMS_Key_For_Encryption_On_EBS_Policy a un nombre diferente. Sin embargo, si lo hace, asegúrese de hacerlo también en pasos posteriores.

      aws iam create-policy \ --policy-name KMS_Key_For_Encryption_On_EBS_Policy \ --policy-document file://kms-key-for-encryption-on-ebs.json
    3. Adjunte una política de IAM y adjunte la política de IAM al rol con el siguiente comando. Reemplace 111122223333 por su ID de cuenta. Si su clúster está en las Regiones de AWS AWS GovCloud (Este de EE. UU.) o AWS GovCloud (Oeste de EE. UU.), reemplace arn:aws: con arn:aws-us-gov:.

      aws iam attach-role-policy \ --policy-arn arn:aws:iam::111122223333:policy/KMS_Key_For_Encryption_On_EBS_Policy \ --role-name AmazonEKS_EBS_CSI_DriverRole

Ahora que ha creado el rol de IAM del controlador de CSI de Amazon EBS, puede continuar con Agregar el controlador CSI de Amazon EBS. Cuando implementa el complemento en ese procedimiento, crea una cuenta de servicio que se llama ebs-csi-controller-sa y se configura para utilizarla. La cuenta de servicio está vinculada a un clusterrole de Kubernetes denominado, al que se le asignan los permisos de Kubernetes necesarios.