Paylaşılan düğüm kimlik bilgileri yerine, kısa ömürlü STS belirteçleri ile her pod için özel bir RAM rolü atayın.
RRSA iki temel güvenlik özelliği sunar:
En az ayrıcalık: RAM izinlerini belirli bir hizmet hesabına sınırlayarak yalnızca bu hesabı kullanan podların ilgili kaynaklara erişmesini sağlar. Bu yaklaşım, statik AccessKey çiftlerine duyulan ihtiyacı ortadan kaldırır.
Kimlik bilgisi izolasyonu: Podlar, aynı düğümdeki diğer podlar tarafından kullanılan kimlik bilgilerine erişemez. RRSA olmadan, bir düğümdeki tüm podlar altta yatan Elastic Compute Service (ECS) örnek rolünün izinlerini paylaşır.
RRSA'nın çalışma prensibi
RRSA olmadan, bir düğümdeki tüm podlar örnek meta verileri aracılığıyla ECS örnek rolünün izinlerini paylaşır; bu durum önemli bir güvenlik riski oluşturur.
RRSA, bir RAM rolünü Kubernetes hizmet hesabına bağlayarak bu sorunu çözer. Bir pod başlatıldığında, hizmet hesabına özel bir OpenID Connect (OIDC) belirteci alır, AssumeRoleWithOIDC API'sini çağırır ve bulut API erişimi için rol kapsamındaki bir STS belirteci elde eder.
Kimlik doğrulama akışı şu şekildedir:
Belirteç enjeksiyonu: Bir pod başlatıldığında, ACK hizmet hesabı belirteci birim yansıtma özelliğini kullanarak pod'un hizmet hesabına özel bir OIDC belirteci dosyasını monte eder.
Rol üstlenme: Uygulama, bu OIDC belirtecini kullanarak
AssumeRoleWithOIDCAPI'sini çağırır.STS kimlik bilgilerini alma: Alibaba Cloud RAM, OIDC belirtecini kümenin OIDC sağlayıcısına göre doğrular ve rol kapsamındaki STS kimlik bilgilerini döndürür.
Kaynaklara erişim: Pod, yetkili Alibaba Cloud API'lerine erişmek için kısa ömürlü STS kimlik bilgilerini kullanır.
OIDC belirteçleri kısa ömürlüdür. Her kimlik doğrulama isteğinde belirteci dosyadan okuyun; önbelleğe almayın. ACK, süre dolmadan önce belirteçleri otomatik olarak yeniler.
RRSA etkinleştirildiğinde ACK otomatik olarak şunları yapar:
Küme için özel bir OIDC yayıncısı oluşturur.
Küme için hizmet hesabı belirteci birim yansıtma özelliğini etkinleştirir.
Hesabınızda, kümenin OIDC yayıncısı ile tek oturum açma (SSO) için yapılandırılmış
ack-rrsa-<cluster_id>adlı bir RAM kimlik sağlayıcısı (IdP) oluşturur.
Başlamadan önce
RRSA'yı yapılandırmadan önce aşağıdaki gereksinimleri karşıladığınızdan emin olun:
Küme sürümü: ACK kümesi (Basic, Pro, Serverless veya Edge) Kubernetes 1,22 veya üzeri bir sürümde çalışmalıdır.
İzinler: ACK konsolu ve RAM konsolu üzerinde yönetici erişiminiz bulunmalıdır.
Belirteç geçerlilik sınırı: RRSA etkinleştirildikten sonra yeni oluşturulan Hizmet Hesabı belirteçlerinin maksimum geçerlilik süresi 12 saattir.
Adım 1: Kümeniz için RRSA'yı etkinleştirin
RRSA'yı küme oluşturma sırasında veya küme çalışır durumdayken etkinleştirebilirsiniz. ACK Serverless kümeleri için RRSA'yı küme oluşturulduktan sonra küme ayrıntıları sayfasından etkinleştirin.
Küme oluşturma sırasında etkinleştirin
ACK yönetilen kümesi veya ACK Edge kümesi oluştururken Cluster Configurations adımına gidin, Advanced Options (Optional) seçeneğini genişletin ve RRSA OIDC yanındaki Enable öğesine tıklayın.

Mevcut bir küme için etkinleştirin
ACK konsolunda oturum açın. Sol gezinme bölmesinde Clusters öğesine tıklayın.
Kümenizin adına tıklayın. Sol gezinme bölmesinde Cluster Information öğesine tıklayın.
-
Basic Information sekmesinde Security and Auditing bölümüne ilerleyin ve RRSA OIDC yanındaki Enable öğesine tıklayın.

Enable RRSA iletişim kutusunda Confirm öğesine tıklayın. Küme durumu Updating durumundan Running durumuna geçene kadar bekleyin. RRSA artık etkinleştirilmiştir.
OIDC sağlayıcı URL'sini ve ARN'sini alın
RRSA etkinleştirildikten sonra, Security and Auditing bölümünde RRSA OIDC yanındaki Enabled etiketinin üzerine gelin. OIDC sağlayıcısının URL'si ve Alibaba Cloud Resource Name (ARN) bilgisi görüntülenir.

RAM rollerini ve uygulama şablonlarını yapılandırırken kullanmak üzere her iki değeri de kaydedin.
Adım 2: Bir uygulamayı RRSA kullanacak şekilde yapılandırın
Örnek bir uygulamanın kurulumu iki aşamadan oluşur:
Küme düzeyinde kurulum (küme başına bir kez): RRSA'yı etkinleştirin ve
ack-pod-identity-webhookbileşenini yükleyin.Uygulama başına kurulum (her uygulama için tekrarlanır): Mevcut bir RAM rolü oluşturun veya kullanın, izinleri atayın ve uygulamayı dağıtın.
Örnek yapılandırma
|
|
|
|
|
|
|
|
|
|
|
|

1. ack-pod-identity-webhook bileşenini yükleyin
ack-pod-identity-webhook bileşeni, OIDC belirteci dosya yolunu ve RAM rolü ARN'sini ortam değişkenleri olarak podlara otomatik olarak enjekte eder. Pod şablonlarını manuel olarak yapılandırmak isterseniz bu adımı atlayabilirsiniz. Bkz. Pod şablonlarını manuel olarak yapılandırma.
ACK konsolunda kümenizin adına tıklayın. Sol gezinme bölmesinde Add-ons öğesine tıklayın.
Add-ons sayfasında Security sekmesine tıklayın.
ack-pod-identity-webhook bileşenini bulun ve Install öğesine tıklayın.
Bilgileri onaylayın ve OK öğesine tıklayın.
2. OIDC kimlik sağlayıcısı için bir RAM rolü oluşturun veya yapılandırın
RAM rolü oluşturun
Kümenin OIDC kimlik sağlayıcısına (IdP) güvenen demo-role-for-rrsa adlı bir RAM rolü oluşturun. Bkz. OIDC IdP için RAM rolü oluşturma.
Aşağıdaki parametre değerlerini kullanın:
Parametre | Değer |
Identity Provider Type | OIDC seçeneğini seçin. |
Identity Provider |
|
Condition |
|
Role Name |
|
oidc:subkoşulu, güveni belirli bir ad alanındaki belirli bir hizmet hesabıyla sınırlar.rrsa-demovedemo-sadeğerlerini kendi ad alanınız ve hizmet hesabı adınızla değiştirin.
Mevcut bir RAM rolünü yapılandırın
Mevcut bir RAM rolünü kullanmak için, hizmet hesabının bu rolü üstlenmesine izin verecek şekilde güven ilkesini güncelleyin. Bkz. RAM rolünün güven ilkesini düzenleme.
Aşağıdaki yapıya sahip bir Statement girişi ekleyin:
{
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"oidc:aud": "sts.aliyuncs.com",
"oidc:iss": "<oidc_issuer_url>",
"oidc:sub": "system:serviceaccount:<namespace>:<service_account>"
}
},
"Effect": "Allow",
"Principal": {
"Federated": [
"<oidc_provider_arn>"
]
}
}
Yer tutucuları aşağıdaki gibi değiştirin:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Güven ilkesi güncellemelerini otomatikleştirmek için ack-ram-tool aracını kullanın:
ack-ram-tool rrsa associate-role --cluster-id <cluster_id> \
--namespace <namespace> --service-account <service_account> \
--role-name <role_name> --create-role-if-not-exist
3. RAM rolüne izinler atayın
demo-role-for-rrsa rolüne AliyunCSReadOnlyAccess ilkesini ekleyin. Bkz. RAM rolüne izin verme.
Bu işlem, uygulamaya ACK küme bilgilerine salt okunur erişim izni verir.
4. Uygulamanızı dağıtın
Aşağıdaki içeriğe sahip demo.yaml adlı bir dosya oluşturun. Ad alanı etiketi pod-identity.alibabacloud.com/injection: 'on' ve hizmet hesabı ek açıklaması pod-identity.alibabacloud.com/role-name: demo-role-for-rrsa, ack-pod-identity-webhook tarafından otomatik enjeksiyonu etkinleştirir. Bkz. ack-pod-identity-webhook.
---
apiVersion: v1
kind: Namespace
metadata:
name: rrsa-demo
labels:
pod-identity.alibabacloud.com/injection: 'on'
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: demo-sa
namespace: rrsa-demo
annotations:
pod-identity.alibabacloud.com/role-name: demo-role-for-rrsa
---
apiVersion: v1
kind: Pod
metadata:
name: demo
namespace: rrsa-demo
spec:
serviceAccountName: demo-sa
containers:
- image: registry.cn-hangzhou.aliyuncs.com/acs/ack-ram-tool:1.3.0
args:
- rrsa
- demo
name: demo
restartPolicy: OnFailure
Uygulamayı dağıtın:
kubectl apply -f demo.yaml
5. Enjekte edilen yapılandırmayı doğrulayın
ack-pod-identity-webhook bileşeninin gerekli ortam değişkenlerini ve birim bağlantılarını enjekte ettiğini onaylayın:
kubectl -n rrsa-demo get pod demo -o yaml
Beklenen çıktıda aşağıdaki enjekte edilen öğeler yer alır:
Kategori | Öğe | Açıklama |
Ortam değişkeni |
| Üstlenilecek RAM rolünün ARN'si |
| OIDC kimlik sağlayıcısının ARN'si | |
| OIDC belirteci dosyasının yolu | |
| Geçerli bölge için STS VPC uç noktası | |
| STS uç noktası için bölge tanımlayıcısı | |
| STS'ye VPC iç uç noktası üzerinden erişilip erişilmeyeceği | |
VolumeMount |
| OIDC belirtecini konteynere monte eder |
Volume |
| OIDC belirteci için yansıtılan birim kaynağı |
Doğru enjekte edilmiş bir pod belirtimi şu şekilde görünür:
apiVersion: v1
kind: Pod
metadata:
name: demo
namespace: rrsa-demo
spec:
containers:
- args:
- rrsa
- demo
env:
- name: ALIBABA_CLOUD_ROLE_ARN
value: acs:ram::1***:role/demo-role-for-rrsa
- name: ALIBABA_CLOUD_OIDC_PROVIDER_ARN
value: acs:ram::1***:oidc-provider/ack-rrsa-c***
- name: ALIBABA_CLOUD_OIDC_TOKEN_FILE
value: /var/run/secrets/ack.alibabacloud.com/rrsa-tokens/token
- name: ALIBABA_CLOUD_STS_ENDPOINT
value: sts-vpc.cn-hangzhou.aliyuncs.com
- name: ALIBABA_CLOUD_STS_REGION
value: cn-hangzhou
- name: ALIBABA_CLOUD_VPC_ENDPOINT_ENABLED
value: "true"
image: registry.cn-hangzhou.aliyuncs.com/acs/ack-ram-tool:1.3.0
imagePullPolicy: Always
name: demo
volumeMounts:
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
name: kube-api-access-4bwdg
readOnly: true
- mountPath: /var/run/secrets/ack.alibabacloud.com/rrsa-tokens
name: rrsa-oidc-token
readOnly: true
restartPolicy: OnFailure
serviceAccount: demo-sa
serviceAccountName: demo-sa
volumes:
- name: kube-api-access-4bwdg
projected:
defaultMode: 420
sources:
- serviceAccountToken:
expirationSeconds: 3607
path: token
- configMap:
items:
- key: ca.crt
path: ca.crt
name: kube-root-ca.crt
- downwardAPI:
items:
- fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
path: namespace
- name: rrsa-oidc-token
projected:
defaultMode: 420
sources:
- serviceAccountToken:
audience: sts.aliyuncs.com
expirationSeconds: 3600
path: token
6. Uygulama günlüklerini kontrol edin
Uygulama günlüğünü yazdırın:
kubectl -n rrsa-demo logs demo
Başarılı bir çalıştırma, Alibaba Cloud hesabınızdaki kümeleri listeler:
cluster id: cf***, cluster name: foo*
cluster id: c8***, cluster name: bar*
cluster id: c4***, cluster name: foob*
İsteğe bağlı: En az ayrıcalık ilkesinin uygulanmasını doğrulamak için RAM rolünden AliyunCSReadOnlyAccess ilkesini kaldırın (bkz. RAM rolünden izinleri kaldırma). 30 saniye bekleyin ve ardından günlük komutunu tekrar çalıştırın. Uygulama, aşağıdakine benzer bir 403 hatası döndürür:
StatusCode: 403
Code: StatusForbidden
Message: code: 403, STSToken policy Forbidden for action cs:DescribeClustersForRegion request id: E78A2E2D-***
Data: {"accessDeniedDetail":{"AuthAction":"cs:DescribeClustersForRegion","AuthPrincipalDisplayName":"demo-role-for-rrsa:ack-ram-tool","AuthPrincipalOwnerId":"11***","AuthPrincipalType":"AssumedRoleUser","NoPermissionType":"ImplicitDeny","PolicyType":"ResourceGroupLevelIdentityBasedPolicy"},"code":"StatusForbidden","message":"STSToken policy Forbidden for action cs:DescribeClustersForRegion","requestId":"E78A2E2D-***","status":403,"statusCode":403}
Bu durum, RRSA'nın izinleri pod düzeyinde uyguladığını doğrular.
Gelişmiş: Pod şablonlarını manuel olarak yapılandırma
ack-pod-identity-webhook bileşenini atlamak için gerekli ortam değişkenlerini ve yansıtılan birimi pod belirtimine manuel olarak ekleyin:
apiVersion: v1
kind: Pod
metadata:
name: demo
namespace: rrsa-demo
spec:
containers:
- args:
- rrsa
- demo
env:
- name: ALIBABA_CLOUD_ROLE_ARN
value: <role_arn>
- name: ALIBABA_CLOUD_OIDC_PROVIDER_ARN
value: <oidc_provider_arn>
- name: ALIBABA_CLOUD_OIDC_TOKEN_FILE
value: /var/run/secrets/ack.alibabacloud.com/rrsa-tokens/token
image: registry.cn-hangzhou.aliyuncs.com/acs/ack-ram-tool:1.3.0
imagePullPolicy: Always
name: demo
volumeMounts:
- mountPath: /var/run/secrets/ack.alibabacloud.com/rrsa-tokens
name: rrsa-oidc-token
readOnly: true
restartPolicy: OnFailure
serviceAccount: demo-sa
serviceAccountName: demo-sa
volumes:
- name: rrsa-oidc-token
projected:
defaultMode: 420
sources:
- serviceAccountToken:
audience: sts.aliyuncs.com
expirationSeconds: 3600
path: token
Yer tutucu değerlerini aşağıdaki gibi değiştirin:
|
|
|
|
|
|
|
RAM konsolundaki Roles sayfasında |
|
|
|
|
audience değerini sts.aliyuncs.com olarak ayarlayın. Bu, SDK tarafından kullanılan STS uç nokta alan adı değil, OIDC sağlayıcısının istemci kimliğidir.
expirationSeconds değerini 600 ile 43200 (saniye) arasında bir değer olarak ayarlayın. 43200 üzerindeki değerler 12 saat ile sınırlandırılır.
Yeniden dağıtımdan sonra uygulama, OIDC belirtecini ALIBABA_CLOUD_OIDC_TOKEN_FILE konumundan okur, AssumeRoleWithOIDC aracılığıyla bir STS belirteciyle değiştirir ve bulut API'lerini STS belirteci ile çağırır. Bkz. AssumeRoleWithOIDC.
SDK desteği
Alibaba Cloud SDK V2.0 RRSA OIDC belirteci kimlik doğrulamasını destekler. V2.0 tabanlı olan ve STS belirteçlerini destekleyen herhangi bir bulut hizmeti SDK'sı da RRSA'yı destekler.
Desteklenen SDK sürümleri ve demosu
|
|
|
|
|
|
Alibaba Cloud Credentials for Go 1.2.6 veya üzeri. Talimatlar için bkz. Yöntem 6: OIDCRoleArn kullanma. |
|
|
|
Alibaba Cloud Credentials for Java 0.2.10 veya üzeri. Talimatlar için bkz. Yöntem 6: OIDC rolü ARN'si. |
|
|
|
Alibaba Cloud Credentials for Python 0.3.1 veya üzeri. Talimatlar için bkz. Erişim kimlik bilgilerini yönetme. |
|
|
|
Alibaba Cloud Credentials for TypeScript/Node.js 2.2.6 veya üzeri. Talimatlar için bkz. Yöntem 6: OIDCRoleArn kullanma. |
Her dil için kimlik bilgileri belgelerine bakın — Yöntem 6: OIDC IdP'nin RAM rolünü kullanma.
Bulut hizmetlerine özel SDK demoları
Bazı bulut hizmeti SDK'ları yerel OIDC belirteci desteği sunar:
Bulut hizmeti | SDK | Demo |
Object Storage Service (OSS) | OSS Go SDK. Talimatlar için bkz. Yöntem 5: OIDC rolü ARN'si kullanma. | |
OSS Java SDK. Talimatlar için bkz. OIDCRoleARN kullanma. | ||
OSS Python SDK. Talimatlar için bkz. OIDC IdP'nin rolünü kullanma. | ||
Simple Log Service (SLS) | SLS SDK for Java. Talimatlar için bkz. Simple Log Service SDK for Java ile çalışmaya başlama. |
CLI'lar için RRSA kimlik doğrulamasını etkinleştirin
Bir pod içindeyken CLI'ları RRSA OIDC belirteci kimlik doğrulaması için yapılandırmak üzere ack-ram-tool aracını kullanın.
Alibaba Cloud CLI
Alibaba Cloud CLI v3.0.206 ve sonraki sürümler RRSA'yı destekler. region_id değerini hedef bölgenize ayarlayın.
Seçenek A: Yapılandırma dosyası. ~/.aliyun/config.json dosyasında mode değerini OIDC olarak ayarlayın:
{
"current": "rrsa",
"profiles": [
{
"name": "rrsa",
"mode": "OIDC",
"region_id": "cn-hangzhou",
"ram_session_name": "test-rrsa"
}
],
"meta_path": ""
}
Seçenek B: Doğrudan komut (yapılandırma dosyası gerekmez):
aliyun sts GetCallerIdentity --region cn-hangzhou --role-session-name=test-rrsa
Beklenen çıktı:
{
"AccountId": "11380***",
"Arn": "acs:ram::1138***:assumed-role/test-rrsa-***/test-rrsa",
"IdentityType": "AssumedRoleUser",
"PrincipalId": "33300***:test-rrsa",
"RequestId": "20F78881-F47E-5771-90D6-***",
"RoleId": "33300***"
}
Bkz. Kimlik bilgisi türleri.
ossutil 2.0
ossutil V2.1.0 ve sonraki sürümler RRSA'yı destekler. region değerini gerçek bölgenizle değiştirin.
~/.ossutilconfig dosyasında mode değerini oidcRoleArn olarak ayarlayın:
cat <<EOF > ~/.ossutilconfig
[default]
mode = oidcRoleArn
OIDCProviderArn = "${ALIBABA_CLOUD_OIDC_PROVIDER_ARN}"
OIDCTokenFilePath = "${ALIBABA_CLOUD_OIDC_TOKEN_FILE}"
roleArn = "${ALIBABA_CLOUD_ROLE_ARN}"
roleSessionName = test-rrsa
region = cn-hangzhou
EOF
ossutil 2.0 belgelerindeki Örnekler bölümüne bakın.
Simple Log Service CLI
Simple Log Service CLI, OIDC yapılandırma dosyalarını desteklemez. Kimlik bilgilerini çalışma zamanında enjekte etmek için ack-ram-tool aracını kullanın:
ack-ram-tool export-credentials -f environment-variables -- aliyunlog log list_project --region-endpoint=cn-hangzhou.log.aliyuncs.com
Terraform
Alibaba Cloud Provider V1.222.0 ve sonraki sürümlerassume_role_with_oidcözelliğini destekler.regiondeğerini hedef bölgenize ayarlayın.
Sağlayıcı yapılandırmanıza assume_role_with_oidc bloğunu ekleyin:
provider "alicloud" {
assume_role_with_oidc {
role_session_name = "terraform-with-rrsa-auth-example"
}
region = "cn-hangzhou"
}
Bkz. Terraform RRSA demosu.
Sorun giderme
SDK hataları
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|