Workload identity memungkinkan Anda menetapkan identitas dan otorisasi yang berbeda dan terperinci untuk setiap aplikasi di cluster. Workload Identity adalah cara yang direkomendasikan bagi aplikasi yang berjalan dalam GKE di AWS untuk mengakses layanan AWS dan Google Cloud. Untuk mengetahui informasi selengkapnya, lihat Identitas workload.
Topik ini menjelaskan cara membuat penyedia OIDC, menyediakan akun layanan, dan menguji contoh beban kerja menggunakan identitas workload.
Membuat penyedia IAM OIDC AWS untuk cluster Anda
Untuk menggunakan identitas workload dengan cluster, pertama-tama buat penyedia OIDC IAM AWS yang mereferensikan cluster Anda. Jika sudah memiliki penyedia IAM OIDC untuk cluster, Anda dapat melewati bagian ini.
Untuk membuat penyedia, ikuti langkah-langkah berikut:
Tentukan URI penerbit OIDC untuk cluster Anda:
gcloud container aws clusters describe CLUSTER_NAME \ --location=GOOGLE_CLOUD_LOCATION \ --format='value(workloadIdentityConfig.issuerUri)'
Ganti kode berikut:
CLUSTER_NAME
: nama cluster AndaGOOGLE_CLOUD_LOCATION
: nama lokasi Google Cloud tempat kumpulan node ini akan dikelola, seperti yang ditentukan di region pengelolaan Google Cloud
Outputnya mencakup URI penerbit OIDC cluster Anda. Simpan nilai ini untuk langkah berikut.
Selanjutnya, buat penyedia OIDC IAM AWS yang mereferensikan cluster Anda dengan perintah berikut:
aws iam create-open-id-connect-provider \ --url ISSUER_URI \ --client-id-list sts.amazonaws.com \ --thumbprint-list 08745487e891c19e3078c1f2a07e452950ef36f6
Ganti
ISSUER_URI
dengan URI penerbit Anda dari langkah sebelumnya.thumbprint layanan Google Cloud yang menyalurkan URI penerbit selalu
08745487e891c19e3078c1f2a07e452950ef36f6
.
Mengonfigurasi peran IAM AWS dengan kebijakan IAM terlampir
Untuk mengonfigurasi peran IAM AWS dan melampirkan kebijakan ke peran tersebut, ikuti langkah-langkah berikut:
Tentukan host penerbit dengan menghapus awalan
https://
dari URI penerbit. Misalnya, jika URI Anda adalahhttps://oidc-provider.com/v1/projects/pid/locations/us-west1/awsClusters/awscluster
, host-nya adalahoidc-provider.com/v1/projects/pid/locations/us-west1/awsClusters/awscluster
. Simpan nilai ini. Anda nanti akan membutuhkannya.Tentukan Amazon Resource Name (ARN) penyedia dengan menjalankan:
aws iam list-open-id-connect-providers --output=text \ --query 'OpenIDConnectProviderList[?ends_with(Arn, `ISSUER_HOST`) == `true`].Arn'
Ganti
ISSUER_HOST
dengan nama host dari URI penerbit untuk cluster.Selanjutnya, buat kebijakan kepercayaan untuk memberikan kredensial OIDC ke akun layanan Kubernetes. Buat file bernama
trust-policy.json
dengan konten berikut:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "PROVIDER_ARN" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "ISSUER_HOST:sub": "system:serviceaccount:NAMESPACE:KSA_NAME" } } } ] }
Ganti kode berikut:
PROVIDER_ARN
: ARN penyedia IAM OIDC clusterISSUER_HOST
: nama host dari URI penerbit untuk cluster.NAMESPACE
: namespace Kubernetes tempat aplikasi berjalanKSA_NAME
: akun layanan Kubernetes (KSA) yang akan digunakan untuk aplikasi
Membuat peran IAM AWS:
aws iam create-role --role-name=AWS_ROLE_NAME \ --assume-role-policy-document file://trust-policy.json
Ganti
AWS_ROLE_NAME
dengan nama peran IAM AWS untuk aplikasi.Lampirkan kebijakan IAM AWS ke peran tersebut:
aws iam attach-role-policy --role-name=AWS_ROLE_NAME \ --policy-arn=AWS_POLICY_ARN
Ganti kode berikut:
-
AWS_ROLE_NAME
: nama peran IAM AWS untuk aplikasi
Misalnya, untuk membuat peran bernama
ec2-readonly
, dengan kebijakanarn:aws:iam::aws:policy/AmazonEC2ReadOnlyAccess
, jalankan perintah berikut:aws iam attach-role-policy --role-name=ec2-readonly \ --policy-arn=arn:aws:iam::aws:policy/AmazonEC2ReadOnlyAccess
-
Menerapkan aplikasi sampel
Untuk menguji identitas workload, ikuti langkah-langkah berikut untuk men-deploy aplikasi contoh:
Tentukan ARN peran:
aws iam get-role --role-name=AWS_ROLE_NAME --query 'Role.Arn'
Ganti
AWS_ROLE_NAME
.Membuat manifes untuk Kubernetes Namespace, KSA, dan Pod. Salin manifes berikut ke dalam file bernama
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
Ganti kode berikut:
NAMESPACE
KSA_NAME
AWS_ROLE_ARN
: ARN peran IAM AWS untuk aplikasiAWS_REGION
: region AWS cluster
Terapkan manifes:
kubectl apply -f workload-identity-test.yaml
Tunggu beberapa menit hingga Pod dimulai, lalu lanjutkan ke bagian berikut.
Memastikan aplikasi contoh berfungsi
Untuk memastikan bahwa aplikasi contoh dapat mengakses EC2 API, lihat log pod:
kubectl logs -f aws-cli-example -n NAMESPACE
Jika Pod dapat mengakses EC2 API, output-nya akan menyertakan informasi tentang zona ketersediaan EC2 dan terlihat mirip dengan berikut ini:
-------------------------------------------------
| 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 ||
|+---------------------+-----------------------+|
Pembersihan
Untuk menghapus aplikasi contoh ini, ikuti langkah-langkah berikut:
Hapus manifes aplikasi contoh dari cluster Anda:
kubectl delete -f workload-identity-test.yaml
Lepaskan kebijakan IAM AWS dari peran:
aws iam detach-role-policy --role-name AWS_ROLE_NAME \ --policy-arn arn:aws:iam::aws:policy/AmazonEC2ReadOnlyAccess
Ganti
AWS_ROLE_NAME
dengan nama peran IAM AWS untuk aplikasi.Hapus peran IAM AWS:
aws iam delete-role --role-name AWS_ROLE_NAME
Ganti
AWS_ROLE_NAME
dengan nama peran IAM AWS untuk aplikasi.Hapus penyedia OIDC IAM AWS:
aws iam delete-open-id-connect-provider --open-id-connect-provider-arn PROVIDER_ARN
Ganti
PROVIDER_ARN
dengan ARN dari penyedia IAM OIDC untuk cluster.