A identidade da carga de trabalho permite que você atribua identidades e autorizações distintas e granulares para cada aplicativo em seu cluster. A identidade da carga de trabalho é a maneira recomendada para aplicativos em execução no GKE na AWS acessarem a AWS e Google Cloud serviços. Para obter mais informações, consulte Identidade da carga de trabalho .
Este tópico explica como criar um provedor OIDC, provisionar contas de serviço e testar uma carga de trabalho de exemplo usando a identidade da carga de trabalho. Esta página é para administradores de identidade e conta, operadores e desenvolvedores que desejam criar e gerenciar políticas relacionadas a permissões de usuário. Para saber mais sobre funções comuns e tarefas de exemplo que mencionamos em Google Cloud conteúdo, consulte Funções e tarefas comuns do usuário do GKE Enterprise .
Crie um provedor AWS IAM OIDC para seu cluster
Para usar a identidade da carga de trabalho com seu cluster, primeiro crie um provedor OIDC do IAM da AWS que faça referência ao seu cluster. Se você já possui um provedor OIDC do IAM para o seu cluster, pode pular esta seção.
Para criar o provedor, siga estas etapas:
Determine o URI do emissor do OIDC para seu cluster:
gcloud container aws clusters describe CLUSTER_NAME \ --location=GOOGLE_CLOUD_LOCATION \ --format='value(workloadIdentityConfig.issuerUri)'
Substitua o seguinte:
-
CLUSTER_NAME
: o nome do seu cluster -
GOOGLE_CLOUD_LOCATION
: o nome do Google Cloudlocal a partir do qual este pool de nós será gerenciado, conforme definido em Google Cloud regiões de gestão
A saída inclui o URI do emissor do OIDC do seu cluster. Salve esse valor para a próxima etapa.
-
Em seguida, crie um provedor AWS IAM OIDC que faça referência ao seu cluster com o seguinte comando:
aws iam create-open-id-connect-provider \ --url ISSUER_URI \ --client-id-list sts.amazonaws.com \ --thumbprint-list 08745487e891c19e3078c1f2a07e452950ef36f6
Substitua
ISSUER_URI
pelo URI do emissor da etapa anterior.A impressão digital do Google Cloud o serviço que atende o URI do emissor é sempre
08745487e891c19e3078c1f2a07e452950ef36f6
.
Configurar uma função do AWS IAM com uma política do IAM anexada
Para configurar uma função do AWS IAM e anexar uma política a ela, siga estas etapas:
Determine o host emissor removendo o prefixo
https://
do URI do emissor. Por exemplo, se o seu URI forhttps://oidc-provider.com/v1/projects/pid/locations/us-west1/awsClusters/awscluster
, o host seráoidc-provider.com/v1/projects/pid/locations/us-west1/awsClusters/awscluster
. Salve este valor. Você precisará dele mais tarde.Determine o Amazon Resource Name (ARN) do provedor executando:
aws iam list-open-id-connect-providers --output=text \ --query 'OpenIDConnectProviderList[?ends_with(Arn, `ISSUER_HOST`) == `true`].Arn'
Substitua
ISSUER_HOST
pelo nome do host do URI do emissor do cluster.Em seguida, crie uma política de confiança para fornecer credenciais OIDC à conta de serviço do Kubernetes. Crie um arquivo chamado
trust-policy.json
com o seguinte conteúdo:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "PROVIDER_ARN" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "ISSUER_HOST:sub": "system:serviceaccount:NAMESPACE:KSA_NAME" } } } ] }
Substitua o seguinte:
-
PROVIDER_ARN
: o ARN do provedor IAM OIDC do cluster -
ISSUER_HOST
: o nome do host do URI do emissor para o cluster. -
NAMESPACE
: o namespace do Kubernetes onde o aplicativo é executado -
KSA_NAME
: a conta de serviço do Kubernetes (KSA) a ser usada para o aplicativo
-
Crie uma função do AWS IAM:
aws iam create-role --role-name=AWS_ROLE_NAME \ --assume-role-policy-document file://trust-policy.json
Substitua
AWS_ROLE_NAME
pelo nome da função do AWS IAM para o aplicativo.Anexe uma política do AWS IAM à função:
aws iam attach-role-policy --role-name=AWS_ROLE_NAME \ --policy-arn=AWS_POLICY_ARN
Substitua o seguinte:
-
AWS_ROLE_NAME
: o nome da função do AWS IAM para o aplicativo
Por exemplo, para criar uma função chamada
ec2-readonly
, com aarn:aws:iam::aws:policy/AmazonEC2ReadOnlyAccess
, execute o seguinte comando:aws iam attach-role-policy --role-name=ec2-readonly \ --policy-arn=arn:aws:iam::aws:policy/AmazonEC2ReadOnlyAccess
-
Implantar um aplicativo de amostra
Para testar a identidade da carga de trabalho, siga estas etapas para implantar um aplicativo de exemplo:
Determine o ARN da função:
aws iam get-role --role-name=AWS_ROLE_NAME --query 'Role.Arn'
Substitua
AWS_ROLE_NAME
.Crie um manifesto para um namespace, KSA e pod do Kubernetes. Copie o seguinte manifesto em um arquivo chamado
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
Substitua o seguinte:
-
NAMESPACE
-
KSA_NAME
-
AWS_ROLE_ARN
: o ARN da função AWS IAM para o aplicativo -
AWS_REGION
: a região AWS do cluster
-
Aplique o manifesto:
kubectl apply -f workload-identity-test.yaml
Aguarde alguns minutos para que o Pod inicie e prossiga para a próxima seção.
Verifique se o aplicativo de exemplo está funcionando
Para verificar se o aplicativo de exemplo pode acessar a API do EC2, observe os logs do pod:
kubectl logs -f aws-cli-example -n NAMESPACE
Se o Pod puder acessar a API do EC2, a saída incluirá informações sobre zonas de disponibilidade do EC2 e será semelhante ao seguinte:
-------------------------------------------------
| 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 ||
|+---------------------+-----------------------+|
Limpar
Para remover este aplicativo de exemplo, siga estas etapas:
Exclua o manifesto do aplicativo de exemplo do seu cluster:
kubectl delete -f workload-identity-test.yaml
Desvincule a política do AWS IAM da função:
aws iam detach-role-policy --role-name AWS_ROLE_NAME \ --policy-arn arn:aws:iam::aws:policy/AmazonEC2ReadOnlyAccess
Substitua
AWS_ROLE_NAME
pelo nome da função do AWS IAM para o aplicativo.Excluir a função do AWS IAM:
aws iam delete-role --role-name AWS_ROLE_NAME
Substitua
AWS_ROLE_NAME
pelo nome da função do AWS IAM para o aplicativo.Exclua o provedor AWS IAM OIDC:
aws iam delete-open-id-connect-provider --open-id-connect-provider-arn PROVIDER_ARN
Substitua
PROVIDER_ARN
pelo ARN do provedor IAM OIDC do cluster.
O que vem a seguir
- Saiba mais sobre como usar a identidade da carga de trabalho com os serviços do Google Cloud .