Workload Identity memungkinkan Anda menetapkan identitas dan otorisasi yang berbeda secara terperinci untuk setiap aplikasi di cluster Anda. Workload Identity adalah cara yang direkomendasikan agar aplikasi yang berjalan dalam GKE di AWS dapat mengakses layanan AWS dan Google Cloud. Google Cloud Untuk mengetahui informasi selengkapnya, lihat Workload identity.
Topik ini menjelaskan cara membuat penyedia OIDC, menyediakan akun layanan, dan menguji contoh workload menggunakan workload identity. Halaman ini ditujukan bagi Admin identitas dan akun, Operator, dan Developer yang ingin membuat dan mengelola kebijakan terkait izin pengguna. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam konten, lihat Peran dan tugas pengguna GKE umum. Google Cloud
Membuat penyedia OIDC AWS IAM untuk cluster Anda
Untuk menggunakan workload identity dengan cluster, Anda harus membuat penyedia OIDC AWS IAM yang mereferensikan cluster terlebih dahulu. 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 node pool ini akan dikelola, seperti yang ditentukan dalam Google Cloud wilayah pengelolaan
Output-nya mencakup URI penerbit OIDC cluster Anda. Simpan nilai ini untuk langkah berikutnya.
Selanjutnya, buat penyedia OIDC AWS IAM 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 dari Google Cloud layanan yang melayani 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
, hostnya 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 tepercaya 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
Buat peran AWS IAM:
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:
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 beban kerja, 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
.Buat manifes untuk Namespace, KSA, dan Pod Kubernetes. 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 AWS IAM 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 berikutnya.
Memverifikasi bahwa aplikasi contoh berfungsi
Untuk memverifikasi bahwa aplikasi contoh dapat mengakses EC2 API, lihat log pod:
kubectl logs -f aws-cli-example -n NAMESPACE
Jika Pod dapat mengakses EC2 API, outputnya akan menyertakan informasi tentang zona ketersediaan EC2 dan akan 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 sampel 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 AWS IAM:
aws iam delete-open-id-connect-provider --open-id-connect-provider-arn PROVIDER_ARN
Ganti
PROVIDER_ARN
dengan ARN penyedia IAM OIDC untuk cluster.