すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:RRSAを使用して異なるポッドに異なるクラウドサービスへのアクセスを許可する

最終更新日:Nov 17, 2024

サービスアカウントのRAMロール (RRSA) 機能を使用して、Container Service for Kubernetes (ACK) クラスターにデプロイされているさまざまなポッドにアクセス制御を適用できます。 これにより、ポッドのきめ細かいAPI権限制御が実現し、セキュリティリスクが軽減されます。 このトピックでは、ACKクラスターでRRSAを使用する方法について説明します。

目次

背景情報

Elasticコンテナインスタンスは、Elastic Compute Service (ECS) インスタンスで実行されます。 ECSインスタンスのメタデータには、Alibaba Cloud上のECSインスタンスに関する情報が含まれます。 実行中のECSインスタンスにログインしてそのメタデータを表示し、そのメタデータに基づいてECSインスタンスを設定または管理できます。 ACKクラスターにデプロイされたアプリケーションは、ECSインスタンスメタデータを使用して、異なるRAM (Resource Access Management) ロールを引き受けるために使用されるSTS (Security Token Service) トークンを取得できます。 このようにして、アプリケーションは異なるクラウドサービスのAPIを呼び出すことができます。 詳細については、「インスタンスメタデータの取得」をご参照ください。

image

クラスター内のさまざまなアプリケーションのRAM権限を制御する場合、これらのアプリケーションがECSインスタンスまたはエラスティックコンテナインスタンスのメタデータを使用して、インスタンスに割り当てられたRAMロールを引き受けるために使用されるSTSトークンを取得することを禁止できます。 ECSインスタンスまたはエラスティックコンテナインスタンスに割り当てられているRAMロールにRAMポリシーをアタッチしないこともできます。 ただし、これらのアプリケーションは、安全な方法でクラウドリソースにアクセスするためのSTSトークンを取得する必要があります。 これらの問題に対処するために、ACKはRAMに基づいて開発されたRRSA機能をリリースします。

RRSA機能を使用すると、ACKクラスター内のさまざまなアプリケーションがさまざまなRAMロールを引き受けることができます。 アプリケーションはSTSトークンを取得し、トークンを使用して特定のRAMロールを引き受け、関連するクラウドサービスにアクセスできます。 これにより、最小権限の原則が適用され、アプリケーションはAccessKeyペアを使用する必要なくAPI操作を呼び出すことができ、AccessKeyペアのリークを防止できます。

image

次の手順は、RRSAを使用してアクセス制御を実施する場合に、アプリケーションがクラウドリソースにアクセスする方法を示しています。

  1. テナントは、サービスアカウントトークンボリューム予測の機能が有効になっているポッドをデプロイします。

  2. ACKクラスターは、サービスアカウントOpenID Connect (OIDC) トークンファイルを作成し、トークンファイルをポッドにマウントします。

  3. ポッド内のアプリケーションは、OIDCトークンファイルを使用してSTSのAssumeRoleWithOIDC APIを呼び出し、RAMロールを引き受けるために使用されるSTSトークンを取得します。

    説明
    • アプリケーションでこれらの操作を実行できるようにするには、まずOIDC IDプロバイダーを作成し、ポッドで使用されるサービスアカウントが指定されたRAMロールを引き受けることを許可する必要があります。 詳細については、「AssumeRoleWithOIDC」をご参照ください。

    • OIDCトークンファイル内のOIDCトークンは一時的なトークンです。 OIDCトークンファイルから最新のトークンを読み取るようにアプリケーションを設定することを推奨します。 クラスターは、トークンの有効期限が切れる前に、OIDCトークンファイルのトークンを更新します。

  4. ポッド内のアプリケーションは、STSトークンを使用して指定されたRAMロールを引き受け、関連するクラウドサービスのAPIを呼び出します。

制限事項

RRSA機能は、Kubernetes 1.22を実行するACKクラスターのみをサポートします。 RRSA機能をサポートするACKクラスターには、ACK BasicクラスターACK ProクラスターACK Serverless BasicクラスターACK Serverless ProクラスターACK Edge Proクラスターがあります。

RRSAの有効化

  1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[クラスター情報] をクリックします。

  3. [基本情報] タブの [セキュリティと監査] セクションで、[RRSA OIDC] の横にある [有効化] をクリックします。

    image

  4. では、RRSAの有効化ダイアログボックスで、確認.

    [基本情報] セクションで、クラスターのステータスが [更新中] から [実行中] に変わった場合、クラスターのRRSA機能が有効になり、OIDCプロバイダーのURLとAlibaba Cloud Resource Name (ARN) がRRSA OIDCの横に表示されます。

RRSAを有効にすると、ACKはバックグラウンドで次の操作を実行します。

  • クラスター専用のOIDC発行者を自動的に作成します。 OIDC発行者は、ACKによって管理される。 詳細については、「OIDC発行者」をご参照ください。

  • クラスターのサービスアカウントトークンボリューム予測を有効にし、OIDC発行者の設定をクラスターの既存のservice-account-issuerパラメーターの値とマージします。 詳細については、「ServiceAccountトークンボリューム予測の使用」をご参照ください。

  • アカウント内にRAMロールIDプロバイダーを作成します。 IDプロバイダーは、シングルサインオン (SSO) にOIDC発行者を使用します。 IDプロバイダーの名前はack-rrsa-<cluster_id> です。 <cluster_id> は、クラスターのIDを示します。 詳細については、「OIDC IdPの管理」をご参照ください。

RRSAを使用する

クラスターでRRSAを有効にした後、次の手順を実行して、クラスター内のアプリケーションがRRSAを通じてSTSトークンを取得できるようにします。 STSトークンは、特定のクラウドサービスのAPIを呼び出すために使用されます。

例:

この例では、アプリケーションが作成され、クラスターに対してRRSAが有効化されているため、アプリケーションは次の操作を実行できます。指定されたRAMロールを想定し、API操作を呼び出して現在のAlibaba Cloudアカウントに属するクラスターを照会します。

サンプル設定

  • 名前空間: rrsa-demo

  • サービスアカウント: demo-sa

  • RAMロール: demo-role-for-rrsa

手順

  1. ack-pod-identity-webhookコンポーネントをインストールします。

    1. [クラスター] ページで、クラスターの名前をクリックします。 左側のナビゲーションウィンドウで、[操作]> [アドオン] を選択します。

    2. On theアドオンページをクリックし、セキュリティタブで、ack-pod-identity-webhookを見つけ、インストールカードの右下にあります。

    3. 表示されるメッセージで、情報を確認し、OK.

  2. demo-role-for-rrsaという名前のRAMロールを作成します。

    1. にログインします。RAMコンソールをAlibaba Cloudアカウントに置き換えます。

    2. 左側のナビゲーションウィンドウで、[ID] > [ロール] を選択します。 [ロール] ページで、[ロールの作成] をクリックします。

    3. では、ロールの作成パネル、選択IdP[信頼できるエンティティ] を選択し、次へ.

    4. On theロールの設定ウィザードページで、次のパラメーターを設定し、OK.

      下表に、各パラメーターを説明します。

      パラメーター

      説明

      RAMロール名

      値をdemo-role-for-rrsaに設定します。

      RAMロールの説明を入力します。 このパラメーターはオプションです。

      IdPタイプ

      [OIDC] を選択します。

      IdPの選択

      IdPを選択します。 IdPは、ack-rrsa-<cluster_id> 形式で命名される。 <cluster_id> は、クラスターのIDを示します。

      条件

      • oidc:iss: デフォルト値を使用します。

      • oidc:aud: sts.aliyuncs.comを選択します。

      • oidc:sub: 条件演算子をStringEqualsに設定し、値をsystem:serviceaccount:<namespace >:< serviceAccountName> に設定します。

        • <namespace>: アプリケーションの名前空間を指定します。

        • <serviceAccountName>: サービスアカウントの名前を指定します。

        この例では、system:serviceaccount:rrsa-demo:demo-saと入力します。

  3. ステップ2で作成したRAMロールにAliyunCSReadOnlyAccessポリシーをアタッチして、アプリケーションに必要な権限を付与します。 詳細については、「RAMロールへの権限の付与」をご参照ください。

  4. アプリケーションをデプロイします。 SDKデモの詳細については、「RRSAのOIDCトークン認証をサポートするAlibaba Cloud SDKのデモ」をご参照ください。

    1. 次の要件に基づいて、demo.yamlという名前のファイルを作成します。

      次のサンプルYAMLテンプレートでは、pod-identity.alibabacloud.com/injection: 'on' ラベルが名前空間に追加され、pod-identity.alibabacloud.com/role-name: demo-role-for-rrsaアノテーションがサービスアカウントに追加され、ack-pod-identity-webhookの自動注入機能が有効になっています。 ack-pod-identity-webhookを構成する方法の詳細については、「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.0.0
            imagePullPolicy: "Always"
            args:
              - rrsa
              - demo
            name: demo
        restartPolicy: OnFailure
    2. 次のコマンドを実行して、アプリケーションをデプロイします。

      kubectl apply -f demo.yaml
  5. 次のコマンドを実行して、ack-pod-identity-webhookがアプリケーション用に作成されたポッドに必要な設定を挿入したかどうかを確認します

    kubectl -n rrsa-demo get pod demo -o yaml

    期待される出力

    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
        image: registry.cn-hangzhou.aliyuncs.com/acs/ack-ram-tool:1.0.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

    出力は、ack-pod-identity-webhookが次の設定をポッドに注入したことを示しています。

    カテゴリ

    設定アイテム

    説明

    環境変数。

    ALIBABA_CLOUD_ROLE_ARN

    仮定するRAMロールのARN。

    ALIBABA_CLOUD_OIDC_PROVIDER_ARN

    OIDC IdPのARN。

    ALIBABA_CLOUD_OIDC_TOKEN_FILE

    OIDCトークンファイルのパス。

    VolumeMount

    rrsa-oidc-token

    OIDCトークンをマウントするための設定。

    ボリューム

    rrsa-oidc-token

    OIDCトークンをマウントするための設定。

  6. 次のコマンドを実行して、アプリケーションのログを印刷します。

    kubectl -n rrsa-demo logs demo

    クラスターのリストが出力に表示されます。

    cluster id: cf***, cluster name: foo*
    cluster id: c8***, cluster name: bar*
    cluster id: c4***, cluster name: foob*
  7. オプション: RAMロールからAliyunCSReadOnlyAccessシステムポリシーをデタッチします。 詳細については、「RAMロールからの権限の削除」をご参照ください。

    30秒待ってから次のコマンドを実行して、アプリケーションのログを再度印刷します。

    kubectl -n rrsa-demo logs demo

    次のエラーメッセージは、アプリケーションに必要な権限がないことを示しています。

       StatusCode: 403
       Code: StatusForbidden
       Message: code: 403, STSToken policy Forbidden for action cs:DescribeClusters request id: E78A2E2D-***
       Data: {"accessDeniedDetail":{"AuthAction":"cs:DescribeClusters","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:DescribeClusters","requestId":"E78A2E2D-***","status":403,"statusCode":403}

アプリケーションテンプレートを手動で変更してRRSAを有効にする

アプリケーションテンプレートで、必要なOIDCトークンファイルを環境変数として手動で指定できます。 これにより、ack-pod-identity-webhookをインストールせずにRRSAを有効にできます。

次のテンプレートに例を示します。

サンプルコードの表示

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: <oid_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.0.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
重要

上記のテンプレートの次のフィールドを変更します。

  • <oid_provider_arn> を、クラスターが使用するOIDCプロバイダーのARNに置き換えます。 ARNは、ACKコンソールのクラスター詳細ページの [基本情報] タブで取得できます。

  • <role_arn> を、アプリケーションが使用するRAMロールのARNに置き換えます。 ARNは、RAMコンソール[ロール] ページで取得できます。

  • audienceパラメーターをsts.aliyuncs.comに設定します。 この値は、RRSA機能が有効になったときに自動的に作成されるOIDC IdPで設定されたクライアントのIDです。 値は、STSのAssumeRoleWithOIDC操作を呼び出すためにSDKによって使用されるドメイン名ではありません。 SDKを使用するときに、適切なSTSドメイン名を指定できます。

  • expirationSecondsを600から43200までの値に設定します。 単位は秒です。 43200より大きい値を指定した場合、OIDCトークンの有効期間は43,200秒 (12時間) のままです。

変更されたテンプレートに基づいてアプリケーションを再デプロイした後、アプリケーションは、テンプレートで指定したOIDCトークンファイル、RAMロールARN、およびOIDCプロバイダーARNを使用して、STSのAssumeRoleWithOIDC操作を呼び出し、特定のRAMロールを引き受けるために使用されたSTSトークンを取得できます。 このようにして、アプリケーションはさまざまなクラウドサービスのAPI操作を呼び出すことができます。 OIDCトークンファイルは環境変数ALIBABA_CLOUD_OIDC_TOKEN_FILEに指定され、RAMロールARNは環境変数ALIBABA_CLOUD_ROLE_ARNに指定され、OIDCプロバイダARNは環境変数ALIBABA_CLOUD_OIDC_PROVIDER_ARNに指定されます。 アプリケーションがファイルを使用するとき、アプリケーションはOIDCトークンファイルから最新のOIDCトークンを読み取ります。 SDKデモの詳細については、「RRSAのOIDCトークン認証をサポートするAlibaba Cloud SDKのデモ」をご参照ください。 詳細については、「AssumeRoleWithOIDC」をご参照ください。

既存のRAMロールを使用し、RAMロールに必要な権限を付与する

アプリケーションで既存のRAMロールを使用する場合は、次のテンプレートに基づいてRAMロールの信頼ポリシーを変更する必要があります。 これにより、アプリケーションはサービスアカウントを使用してRAMロールを引き受け、STSトークンを取得できます。 詳細については、「RAMロールの信頼ポリシーの編集」をご参照ください。

Statement設定の例:

{
  "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>"
    ]
  }
}
重要

Statement設定の次のフィールドを変更します。

  • <oidc_issuer_url> を、クラスターが使用するOIDCプロバイダーのURLに置き換えます。 URLは、ACKコンソールのクラスター詳細ページの [基本情報] タブで取得できます。

  • <oidc_provider_arn> を、クラスターが使用するOIDCプロバイダーのARNに置き換えます。 ARNは、ACKコンソールのクラスター詳細ページの [基本情報] タブで取得できます。

  • <namespace> をアプリケーションの名前空間に置き換えます。

  • <service_account> を、アプリケーションが使用するサービスアカウントに置き換えます。

ack-ram-toolツールを使用して、信頼ポリシーの変更を自動化することもできます。 サンプルコマンド:

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

RRSAのOIDCトークン認証をサポートするAlibaba Cloud SDKのデモ

SDKデモ

Alibaba Cloud SDK V2.0は、RRSAのOIDCトークン認証をサポートしています。 デフォルトでは、STSトークン認証をサポートし、Alibaba cloud SDK V2.0に基づいて開発されたすべてのクラウドサービスSDKは、RRSA OIDCトークン認証をサポートしています。 次の表に、サポートされているSDKのバージョンとデモを示します。

プログラミング言语

サポートされているSDKバージョン

デモ

Go

Alibaba Cloud Credentials for Go 1.2.6以降。 詳細については、「方法6: OIDC IdPのRAMロールの使用」をご参照ください。

SDK for Goのデモ

Java

Alibaba Cloud Credentials for Java 0.2.10以降。 詳細については、「方法6: OIDC IdPのRAMロールの使用」をご参照ください。

SDK for Javaのデモ

Python 3

Alibaba Cloud Credentials for Python 0.3.1以降。 詳細については、「方法6: OIDC IdPのRAMロールの使用」をご参照ください。

SDK for Python 3のデモ

Node.jsとTypeScript

TypeScript/Node.jsのAlibaba Cloud資格情報2.2.6以降。 詳細については、「方法7: OIDC IdPのRAMロールの使用」をご参照ください。

SDK for Node.jsおよびSDK for TypeScriptのデモ

一部のクラウドサービスSDKでは、上記の方法を参照して、API操作を呼び出すときにRRSAのOIDCトークンを認証に使用できます。 次の表に、SDKデモについて説明します。

クラウド製品

SDK

デモ

Object Storage Service (OSS)

OSS GO SDK

詳細については、「方法5: OIDCRoleARNの使用」をご参照ください。

SDK for Goのデモ

OSS Java SDK

詳細については、「アクセス資格情報の設定」をご参照ください。

SDK for Javaのデモ

OSS Python SDK

詳細については、「方法6: OIDCRoleARNの使用」をご参照ください。

SDK for Pythonのデモ

Simple Log Service

Simple Log Service SDK for Java

詳細については、「Simple Log Service SDK For Javaの使用を開始する」をご参照ください。

SDK for Javaのデモ

SDKエラーの解決策

次の表に、さまざまなエラーの解決策を示します。

エラーメッセージ

考えられる原因

解決策

{
 "Code": "AuthenticationFail.OIDCToken.Expired",
 "Message": "This JsonWebToken is expired."
}

アプリケーションで使用されるOIDCトークンの有効期限が切れています。

OIDCトークンファイルは、環境変数ALIBABA_CLOUD_OIDC_TOKEN_fileで指定します。 ファイルを使用するたびに最新のOIDCトークンを読み取る必要があります。 トークンを取得するようにアプリケーションを手動で設定するのではなく、Alibaba Cloud SDKを使用してOIDCトークンを取得することを推奨します。 詳細については、「RRSAのOIDCトークン認証をサポートするAlibaba Cloud SDKのデモ」をご参照ください。

{
 "Code": "Throttling.User",
 "Message": "Request was denied due to user flow control."
}

アプリケーションはOIDCトークンを頻繁に取得します。 その結果、動作は抑制される。

OIDCトークンを取得するためにAPI操作を頻繁に呼び出さないでください。 現在のOIDCトークンの有効期限が切れる前に、新しいOIDCトークンを取得する必要はありません。 トークンを取得するようにアプリケーションを手動で設定するのではなく、Alibaba Cloud SDKを使用してOIDCトークンを取得することを推奨します。 詳細については、「RRSAのOIDCトークン認証をサポートするAlibaba Cloud SDKのデモ」をご参照ください。

{
 "Code": "AuthenticationFail.OIDCToken.AudienceNotMatch",
 "Message": "Invalid audience."
}

アプリケーションテンプレートのaudienceパラメーターがsts.aliyuncs.comに設定されていません。

アプリケーションテンプレートを変更して、audienceパラメーターがsts.aliyuncs.comに設定されていることを確認する必要があります。

{
 "Code": "AuthenticationFail.OIDCToken.IssuerConfigurationBroken",
 "Message": "Get public keys from OIDC Provider failed, the issuer is https://kubernetes.default.svc."
}
{
 "Code": "AuthenticationFail.OIDCToken.IssuerNotMatch",
 "Message": "The issuer in the OIDC Token doesn't match the OIDC Provider registered."
}
{
 "Code": "AuthenticationFail.NoPermission",
 "Message": "No such OIDC Provider registered."
}

クラスターのRRSA機能は無効になっています。

アプリケーションが存在するクラスターのRRSA機能を有効にする必要があります。 詳細については、「RRSA機能の有効化」をご参照ください。 RRSA機能を有効にした後、RRSA機能を使用するポッドを再作成する必要があります。

{
 "Code": "EntityNotExist.Role",
 "Message": "The role not exists: acs:ram::19981***:role/***. "
}

アプリケーションが引き受けるRAMロールが存在しません。

必要なRAMロールを作成する必要があります。 詳細については、「OIDC IdPのRAMロールの作成」および「」をご参照ください。

{
  "Code": "AuthenticationFail.NoPermission",
  "Message": "There is no permission"
}

アプリケーションが引き受けるRAMロールに対して、必要な信頼ポリシーが構成されていません。

アプリケーションがRAMロールを引き受けることを許可するには、RAMロールの信頼ポリシーを変更する必要があります。 詳細については、「既存のRAMロールを使用し、RAMロールに必要な権限を付与する」をご参照ください。

RRSAのOIDCトークン認証をサポートする一般的に使用されるCLIの有効化

ack-ram-toolを使用して、一般的に使用されるCLIを有効にし、ポッドでRRSAのOIDCトークン認証をサポートできます。 次の表に、設定と例を示します。

CLI

設定方法

Alibaba Cloud CLI

RRSAのOIDCトークン認証をサポートするには、~/.aliyun/config.jsonファイルのmodeパラメーターをOIDCに設定します。

説明
  • Alibaba Cloud CLI v3.0.206以降のみがこの機能をサポートしています。

  • region_idの値を目的のリージョンに設定します。

{
  "current": "rrsa",
  "profiles": [
    {
      "name": "rrsa",
      "mode": "OIDC",
      "region_id": "cn-hangzhou",
      "ram_session_name": "test-rrsa"
    }
  ],
  "meta_path": ""
}
$ aliyun sts GetCallerIdentity
{
    "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***"
}

設定ファイルを作成せずに、Alibaba Cloud CLIで関連するコマンドを直接実行することもできます。

説明

Alibaba Cloud CLI v3.0.206以降のみがこの機能をサポートしています。

$ aliyun sts GetCallerIdentity --region cn-hangzhou --role-session-name=test-rrsa
{
	"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***"
}

シンプルなLog Service CLI

Simple Log Service CLIの設定ファイルを変更して、RRSAのOIDCトークン認証をサポートすることはできません。 Simple Log Service CLIでack-ram-tool export-credentials -f environment-variables -- aliyunlogコマンドを実行する必要があります。

$ ack-ram-tool export-credentials -f environment-variables -- aliyunlog log list_project --region-endpoint=cn-hangzhou.log.aliyuncs.com

{"count": 1, "projects": [
{"createTime": "1676282996", "description": "k8s log project, ***",
 "lastModifyTime": "1676282996", "owner": "", "projectName": "k8s-log-c0edc***", 
 "region": "cn-hangzhou", "resourceGroupId": "rg-***", "status": "Normal"}],
  "total": 24}

Terraform

RRSAのoidcトークン認証をサポートするように、設定ファイルでassume_role_with_OIDCパラメーターを設定できます。

説明
  • Alibaba Cloud Provider V1.222.0以降のみがこのパラメーターをサポートしています。

  • 設定ファイルのregionパラメーターを目的のリージョンに設定します。

provider "alicloud" {
  assume_role_with_oidc {
    role_session_name = "terraform-with-rrsa-auth-example"
  }
  region = "cn-hangzhou"
}

Terraformの例

関連ドキュメント