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

Resource Access Management:例:OIDC によるロールベース SSO

最終更新日:Jun 05, 2026

OIDC を使用して Okta と Alibaba Cloud 間のロールベース SSO を設定します。これにより、Okta のアプリケーションは、一時的な STS 認証情報を使用して Alibaba Cloud のリソースにアクセスできるようになります。

前提条件

Okta で OIDC アプリケーションを登録し、その発行者 URL とクライアント ID を取得します。この例では、次の値を使用します。

  • 発行者 URL: https://dev-xxxxxx.okta.com

  • クライアント ID: 0oa294vi1vJoClev****

ステップ1:OIDC ID プロバイダーの作成

TestOidcProvider という名前の OIDC ID プロバイダーを作成します。IdP の URLhttps://dev-xxxxxx.okta.com に、クライアント ID0oa294vi1vJoClev**** に設定します。

  1. RAM 管理者として RAM コンソール にログインします。

  2. ナビゲーションペインで、Integrations > SSO を選択します。

  3. ロールベースの SSO ログイン方式 タブで、[OIDC] タブをクリックし、IdP の作成 をクリックします。

  4. IdP の作成 ページで、ID プロバイダーを設定します。

    パラメーター

    説明

    [IdP 名]

    名前は Alibaba Cloud アカウント内で一意である必要があります。

    [発行者 URL]

    外部 IdP から提供されます。https で始まり、標準の URL 形式に従う必要があります。クエリ文字列 (?)、フラグメント (#)、ユーザー認証情報 (@) を含めることはできません。

    [フィンガープリントの確認]

    発行者 URL のハイジャックや改ざんを防ぐために、外部 IdP からの HTTPS CA 証明書のサムプリントを設定します。

    発行者 URL を入力して 指紋を取得 をクリックすると、Alibaba Cloud がサムプリントを自動的に計算します。セキュリティのために、ローカルでも計算し (OpenSSL を使用して OIDC ID プロバイダーのサムプリントを取得)、比較してください。値が異なる場合、発行者 URL が侵害されている可能性があります。URL を確認し、正しいサムプリントを入力してください。

    説明

    IdP で証明書をローテーションする前に、新しい証明書のサムプリントを OIDC ID プロバイダーの設定に追加してください。少なくとも 1 日待ってから、証明書をローテーションしてください。新しい証明書で STS トークンを取得できることを確認した後、古いサムプリントを削除してください。

    [クライアント ID]

    外部 IdP は、アプリケーションを登録する際にクライアント ID を割り当てます。この ID は、発行された OIDC トークンの aud クレームに表示されます。OIDC から STS へのトークン交換中に、Alibaba Cloud はこのクライアント ID と aud クレームを照合して検証します。両者が一致した場合にのみ、ロールの引き受けに成功します。

    複数のアプリケーションが Alibaba Cloud にアクセスする場合は、複数のクライアント ID を追加します。最大:50。

    [最も早い発行時間制限]

    この時間制限より前に発行された OIDC トークンは、STS トークンと交換できません。

    デフォルト値:12 時間。有効値:1~168 時間。

    []

    ID プロバイダーの説明。

  5. IdP の作成 をクリックします。

ステップ2:OIDC 用 RAM ロールの作成

testoidc という名前の RAM ロールを作成し、ステップ 1TestOidcProvider ID プロバイダーを選択します。

  1. RAM 管理者として RAM コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、アイデンティティ > ロールを選択します。

  3. ロール ページで、ロール作成 をクリックします。

    image

  4. ロール作成 ページの右上隅にある Switch to Policy Editor をクリックします。

    image

  5. ポリシーエディターで、OIDC ID プロバイダーを指定します。

    2 つのモードが利用可能です:

    • ビジュアルエディター

      Principal セクションで、OIDC ID プロバイダーを指定します。

      image

      image

    • スクリプトエディター

      PrincipalFederated フィールドで OIDC プロバイダーを指定し、Condition を設定します。

      {
        "Version": "1",
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Federated": "acs:ram::100*******0719:oidc-provider/xiyun****"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
              "StringEquals": {
                "oidc:iss": [
                  "https://dev-xxxxxx.okta.com"
                ],
                "oidc:aud": [
                  "0oa294vi1vJoClev****"
                ]
              }
            }
          }
        ]
      }
  6. サポートされているサービスレベルの条件:

    条件キー

    説明

    必須

    oidc:iss

    OIDC 発行者の URL。 トークン内の iss クレームがこの値と一致する必要があります。

    OIDC プロバイダーの発行者 URL と共に StringEquals を使用します。

    はい

    https://dev-xxxxxx.okta.com

    oidc:aud

    OIDC オーディエンス。 トークン内の aud クレームがこの値と一致する必要があります。

    OIDC プロバイダーの 1 つ以上のクライアント ID と共に StringEquals を使用します。

    はい

    0oa294vi1vJoClev****

    oidc:sub

    OIDC サブジェクト。ロールを引き受けることができるプリンシパルを制限します。

    トークン内の sub クレームがこの条件と一致する必要があります。 最大 10 個の値を持つ任意の文字列条件演算子をサポートします。

    いいえ

    00u294e3mzNXt4Hi****

  7. ロール作成 ダイアログボックスで、ロール名 を入力し、OK をクリックします。

ステップ3:RAM ロールへの権限付与

ステップ 2testoidc RAM ロールに、Alibaba Cloud リソースにアクセスするために必要な権限を付与します。

  1. RAM 管理者として RAM コンソールにログインします。

  2. ナビゲーションペインで、アイデンティティ > ロール を選択します。

  3. ロール ページで、対象の RAM ロールの名前をクリックします。

  4. 権限管理 タブで対象のポリシーを見つけ、操作 列の 権限剥奪 をクリックします。

    複数のポリシーを選択し、ポリシーリストの下部にある 権限剥奪 をクリックして、複数の権限を一括で取り消すこともできます。

  5. 権限剥奪 ダイアログボックスで、権限剥奪 をクリックします。

ステップ4:Okta からの OIDC トークンの取得

Alibaba Cloud は、OIDC によるコンソールサインインをサポートしていません。代わりにプログラムによるアクセスを使用してください。認可コードフローなどの標準の OAuth 2.0 フローを通じて、Okta から OIDC トークンを取得します。

Okta の公式チュートリアル「リダイレクトと Auth JS を使用した SPA へのユーザーのサインイン」に従って、Okta から OIDC トークンを取得します。

  1. Okta のチュートリアルに従って、アプリケーションを作成し、プロジェクトを設定します。

  2. ブラウザでプロジェクトをテストします。アプリケーションは Okta のサインインページにリダイレクトします。サインインして MFA を完了すると、index.html にリダイレクトされ、ID トークンと解析されたクレームが表示されます:

    {
      "idToken": "eyJraWQiOiItbUF****",
      "claims": {
        "sub": "00uxbq0z40UYy9bm****",
        "name": "ssotest01",
        "email": "ssotest01@exampledomain.com",
        "ver": 1,
        "iss": "https://dev-xxxxxx.okta.com",
        "aud": "0oaxbqhfrfBl5lk2****",
        "iat": 1762841679,
        "exp": 1762845279,
        "jti": "ID.WYtCLmLKOlMcEh0uIe1jWH9T6M1JmotCvX3hIgLK6mA",
        "amr": [
          "mfa",
          "otp",
          "pwd",
          "okta_verify"
        ],
        "idp": "00oxbpgns1TnfLFg****",
        "nonce": "Xp0PTyQzw9ltYBY7SfhxG2ijt1wgi2jK6XLZOGbeQJQ79d0ScWYoHE5twl0QAklA",
        "preferred_username": "ssotest01@exampledomain.com",
        "auth_time": 1762841677,
        "at_hash": "wztv8ALAo2Au56Om3dya7w"
      },
      "expiresAt": 1762845279,
      "scopes": [
        "openid",
        "profile",
        "email"
      ],
      "authorizeUrl": "https://dev-xxxxxx.okta.com/oauth2/v1/authorize",
      "issuer": "https://dev-xxxxxx.okta.com",
      "clientId": "0oaxbqhfrfBl5lk2****"
    }
    説明

    次のクレームが、ステップ1:OIDC ID プロバイダーの作成での設定と一致することを確認してください。値が一致しない場合、AssumeRoleWithOIDC API の呼び出しは失敗します。

    • iss[発行者 URL] と完全に一致する必要があります。

    • aud[クライアント ID] と完全に一致する必要があります。

  3. ページから idToken の値をコピーします。

ステップ5:OIDC トークンの STS トークンへの交換

AssumeRoleWithOIDC API を呼び出して、ステップ4で取得した OIDC トークンを STS トークンに交換します。

リクエストの例:

package demo;
import com.aliyun.auth.credentials.provider.AnonymousCredentialProvider;
import com.aliyun.sdk.service.sts20150401.models.*;
import com.aliyun.sdk.service.sts20150401.*;
import com.google.gson.Gson;
import darabonba.core.client.ClientOverrideConfiguration;
import java.util.concurrent.CompletableFuture;


public class AssumeRoleWithOIDC {
  public static void main(String[] args) throws Exception {

    // 匿名アクセス方式 (API のサポートが必要)
    AnonymousCredentialProvider provider = AnonymousCredentialProvider.create();

    // クライアントの設定
    AsyncClient client = AsyncClient.builder()
      .region("cn-hangzhou") // リージョン ID
      .credentialsProvider(provider)
      // エンドポイントや HTTP リクエストパラメーターなど、クライアントレベルの設定を上書きします。
      .overrideConfiguration(
        ClientOverrideConfiguration.create()
        // エンドポイントについては、https://api.aliyun.com/product/Sts をご参照ください
        .setEndpointOverride("sts.cn-hangzhou.aliyuncs.com")
      )
      .build();

    String idToken = "eyJraWQiOiItbUF****"; // OIDC ID トークン
    // API リクエストのパラメーター設定
    AssumeRoleWithOIDCRequest assumeRoleWithOIDCRequest = AssumeRoleWithOIDCRequest.builder()
      .OIDCToken(idToken)
      .roleArn("acs:ram::173305794806****:role/testoidc")
      .OIDCProviderArn("acs:ram::173305794806****:oidc-provider/Okta")
      .roleSessionName("test-oidc-session")
      .build();
    // API を非同期に呼び出します。
    CompletableFuture<AssumeRoleWithOIDCResponse> response = client.assumeRoleWithOIDC(assumeRoleWithOIDCRequest);
    // API リクエストの戻り値を同期的に取得します
    AssumeRoleWithOIDCResponse resp = response.get();
    System.out.println("RequestId: " + resp.getBody().getRequestId());
    System.out.println("Assume role ARN: " + resp.getBody().getAssumedRoleUser().getArn());
    System.out.println("Credentials AccessKeyId: " + resp.getBody().getCredentials().getAccessKeyId());
    System.out.println("Credentials AccessKeySecret: " + resp.getBody().getCredentials().getAccessKeySecret());
    System.out.println("Success response: " + new Gson().toJson(resp.getBody()));

    // 最後に、クライアントを閉じます
    client.close();
  }

}

レスポンスの例:

RequestId: 5EB6E605-15EA-5D96-941D-2C62DC99****
Assume role ARN: acs:ram::173305794806****:role/testoidc/test-oidc-session
Credentials AccessKeyId: STS.NZXMTBGTTHLW74AMVYKou****
Credentials AccessKeySecret: FdrYjJwTCfFfMdY4APdHsjGL9fH5RSZCtRyYMJED****
Success response:
{
    "assumedRoleUser": {
        "arn": "acs:ram::173305794806****:role/testoidc/test-oidc-session",
        "assumedRoleId": "30048007026011****:test-oidc-session"
    },
    "credentials": {
        "accessKeyId": "STS.NZXMTBGTTHLW74AMVYKou****",
        "accessKeySecret": "FdrYjJwTCfFfMdY4APdHsjGL9fH5RSZCtRyYMJED****",
        "expiration": "2025-11-11T08:01:03Z",
        "securityToken": "CAISwwJ1q6Ft5B2yfSjI****"
    },
    "OIDCTokenInfo": {
        "clientIds": "0oaxbqhfrfBl5lk2****",
        "expirationTime": "2025-11-11T07:14:39Z",
        "issuanceTime": "2025-11-11T06:14:39Z",
        "issuer": "https://dev-xxxxxx.okta.com",
        "subject": "00uxbq0z40UYy9bm****",
        "verificationInfo": "Success"
    },
    "requestId": "5EB6E605-15EA-5D96-941D-2C62DC99****"
}

Credentials オブジェクトには STS トークンが含まれています。

ステップ6:STS トークンを使用したリソースへのアクセス

ステップ5で取得した STS トークンを使用して、ロールの権限の範囲内で Alibaba Cloud のリソースにアクセスします。