La identidad de la carga de trabajo le permite asignar identidades y autorizaciones específicas y específicas para cada aplicación de su clúster. La identidad de la carga de trabajo es la forma recomendada para que las aplicaciones que se ejecutan en GKE en AWS accedan a AWS y... Google Cloud Servicios. Para obtener más información, consulte Identidad de la carga de trabajo .
Este tema explica cómo crear un proveedor de OIDC, aprovisionar cuentas de servicio y probar una carga de trabajo de ejemplo mediante la identidad de la carga de trabajo. Esta página está dirigida a administradores de identidades y cuentas, operadores y desarrolladores que desean crear y administrar políticas relacionadas con los permisos de usuario. Para obtener más información sobre los roles comunes y las tareas de ejemplo a las que hacemos referencia en Google Cloud contenido, consulte Roles y tareas de usuario comunes de GKE Enterprise .
Cree un proveedor de AWS IAM OIDC para su clúster
Para usar la identidad de la carga de trabajo con su clúster, primero debe crear un proveedor de AWS IAM OIDC que haga referencia a su clúster. Si ya tiene un proveedor de IAM OIDC para su clúster, puede omitir esta sección.
Para crear el proveedor, siga estos pasos:
Determine el URI del emisor de OIDC para su clúster:
gcloud container aws clusters describe CLUSTER_NAME \ --location=GOOGLE_CLOUD_LOCATION \ --format='value(workloadIdentityConfig.issuerUri)'
Reemplace lo siguiente:
-
CLUSTER_NAME
: el nombre de su clúster -
GOOGLE_CLOUD_LOCATION
: el nombre de la Google CloudUbicación desde la que se administrará este grupo de nodos, como se define en Google Cloud regiones de gestión
La salida incluye el URI del emisor OIDC de su clúster. Guarde este valor para el siguiente paso.
-
A continuación, cree un proveedor OIDC de AWS IAM que haga referencia a su clúster con el siguiente comando:
aws iam create-open-id-connect-provider \ --url ISSUER_URI \ --client-id-list sts.amazonaws.com \ --thumbprint-list 08745487e891c19e3078c1f2a07e452950ef36f6
Reemplace
ISSUER_URI
con el URI de su emisor del paso anterior.La huella dactilar de la Google Cloud El servicio que atiende al URI del emisor siempre es
08745487e891c19e3078c1f2a07e452950ef36f6
.
Configurar una función de AWS IAM con una política de IAM adjunta
Para configurar una función de AWS IAM y asociarle una política, siga estos pasos:
Determine el host del emisor eliminando el prefijo
https://
de su URI. Por ejemplo, si su URI eshttps://oidc-provider.com/v1/projects/pid/locations/us-west1/awsClusters/awscluster
, el host seráoidc-provider.com/v1/projects/pid/locations/us-west1/awsClusters/awscluster
. Guarde este valor. Lo necesitará más adelante.Determine el nombre de recurso de Amazon (ARN) del proveedor ejecutando lo siguiente:
aws iam list-open-id-connect-providers --output=text \ --query 'OpenIDConnectProviderList[?ends_with(Arn, `ISSUER_HOST`) == `true`].Arn'
Reemplace
ISSUER_HOST
con el nombre de host del URI del emisor del clúster.A continuación, cree una política de confianza para proporcionar las credenciales de OIDC a la cuenta de servicio de Kubernetes. Cree un archivo llamado
trust-policy.json
con el siguiente contenido:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "PROVIDER_ARN" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "ISSUER_HOST:sub": "system:serviceaccount:NAMESPACE:KSA_NAME" } } } ] }
Reemplace lo siguiente:
-
PROVIDER_ARN
: el ARN del proveedor IAM OIDC del clúster -
ISSUER_HOST
: el nombre de host del URI del emisor para el clúster. -
NAMESPACE
: el espacio de nombres de Kubernetes donde se ejecuta la aplicación -
KSA_NAME
: la cuenta de servicio de Kubernetes (KSA) que se utilizará para la aplicación
-
Crear un rol de AWS IAM:
aws iam create-role --role-name=AWS_ROLE_NAME \ --assume-role-policy-document file://trust-policy.json
Reemplace
AWS_ROLE_NAME
con el nombre del rol de AWS IAM para la aplicación.Adjunte una política de AWS IAM al rol:
aws iam attach-role-policy --role-name=AWS_ROLE_NAME \ --policy-arn=AWS_POLICY_ARN
Reemplace lo siguiente:
-
AWS_ROLE_NAME
: el nombre del rol de AWS IAM para la aplicación
Por ejemplo, para crear un rol llamado
ec2-readonly
, con laarn:aws:iam::aws:policy/AmazonEC2ReadOnlyAccess
, ejecute el siguiente comando:aws iam attach-role-policy --role-name=ec2-readonly \ --policy-arn=arn:aws:iam::aws:policy/AmazonEC2ReadOnlyAccess
-
Implementar una aplicación de muestra
Para probar la identidad de la carga de trabajo, siga estos pasos para implementar una aplicación de muestra:
Determinar el ARN del rol:
aws iam get-role --role-name=AWS_ROLE_NAME --query 'Role.Arn'
Reemplace
AWS_ROLE_NAME
.Cree un manifiesto para un espacio de nombres de Kubernetes, una KSA y un pod. Copie el siguiente manifiesto en un archivo llamado
workload-identity-test.yaml
:apiVersion: v1 kind: Namespace metadata: name: NAMESPACE --- apiVersion: v1 kind: ServiceAccount metadata: name: KSA_NAME namespace: NAMESPACE automountServiceAccountToken: false --- apiVersion: v1 kind: Pod metadata: name: aws-cli-example namespace: NAMESPACE spec: serviceAccount: KSA_NAME containers: - name: aws-cli image: amazon/aws-cli:latest command: - /bin/bash - -c - "set -eu -o pipefail; while true; do aws ec2 describe-availability-zones; sleep 5; done" env: - name: AWS_ROLE_ARN value: AWS_ROLE_ARN - name: AWS_WEB_IDENTITY_TOKEN_FILE value: /var/run/secrets/aws-iam-token/serviceaccount/token - name: AWS_REGION value: AWS_REGION volumeMounts: - mountPath: /var/run/secrets/aws-iam-token/serviceaccount name: aws-iam-token readOnly: true volumes: - name: aws-iam-token projected: defaultMode: 420 sources: - serviceAccountToken: audience: sts.amazonaws.com expirationSeconds: 86400 path: token
Reemplace lo siguiente:
-
NAMESPACE
-
KSA_NAME
-
AWS_ROLE_ARN
: el ARN del rol de AWS IAM para la aplicación -
AWS_REGION
: la región de AWS del clúster
-
Aplicar el manifiesto:
kubectl apply -f workload-identity-test.yaml
Espere unos minutos hasta que se inicie el Pod y continúe con la siguiente sección.
Verifique que la aplicación de muestra esté funcionando
Para verificar que la aplicación de muestra pueda acceder a la API de EC2, mire los registros del pod:
kubectl logs -f aws-cli-example -n NAMESPACE
Si el pod puede acceder a la API de EC2, la salida incluye información sobre las zonas de disponibilidad de EC2 y se parece a la siguiente:
-------------------------------------------------
| DescribeAvailabilityZones |
+-----------------------------------------------+
|| AvailabilityZones ||
|+---------------------+-----------------------+|
|| GroupName | us-west-2 ||
|| NetworkBorderGroup | us-west-2 ||
|| OptInStatus | opt-in-not-required ||
|| RegionName | us-west-2 ||
|| State | available ||
|| ZoneId | usw2-az1 ||
|| ZoneName | us-west-2a ||
|+---------------------+-----------------------+|
|| AvailabilityZones ||
|+---------------------+-----------------------+|
|| GroupName | us-west-2 ||
|| NetworkBorderGroup | us-west-2 ||
|| OptInStatus | opt-in-not-required ||
|| RegionName | us-west-2 ||
|| State | available ||
|| ZoneId | usw2-az2 ||
|| ZoneName | us-west-2b ||
|+---------------------+-----------------------+|
|| AvailabilityZones ||
|+---------------------+-----------------------+|
|| GroupName | us-west-2 ||
|| NetworkBorderGroup | us-west-2 ||
|| OptInStatus | opt-in-not-required ||
|| RegionName | us-west-2 ||
|| State | available ||
|| ZoneId | usw2-az3 ||
|| ZoneName | us-west-2c ||
|+---------------------+-----------------------+|
|| AvailabilityZones ||
|+---------------------+-----------------------+|
|| GroupName | us-west-2 ||
|| NetworkBorderGroup | us-west-2 ||
|| OptInStatus | opt-in-not-required ||
|| RegionName | us-west-2 ||
|| State | available ||
|| ZoneId | usw2-az4 ||
|| ZoneName | us-west-2d ||
|+---------------------+-----------------------+|
Limpiar
Para eliminar esta aplicación de muestra, siga estos pasos:
Eliminar el manifiesto de la aplicación de muestra de su clúster:
kubectl delete -f workload-identity-test.yaml
Desvincular la política de AWS IAM del rol:
aws iam detach-role-policy --role-name AWS_ROLE_NAME \ --policy-arn arn:aws:iam::aws:policy/AmazonEC2ReadOnlyAccess
Reemplace
AWS_ROLE_NAME
con el nombre del rol de AWS IAM para la aplicación.Eliminar la función de AWS IAM:
aws iam delete-role --role-name AWS_ROLE_NAME
Reemplace
AWS_ROLE_NAME
con el nombre del rol de AWS IAM para la aplicación.Eliminar el proveedor OIDC de AWS IAM:
aws iam delete-open-id-connect-provider --open-id-connect-provider-arn PROVIDER_ARN
Reemplace
PROVIDER_ARN
con el ARN del proveedor IAM OIDC para el clúster.
¿Qué sigue?
- Obtenga información sobre cómo usar la identidad de carga de trabajo con los servicios de Google Cloud .