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

Resource Access Management:SourceIdentity を使用したロールの引き受けのトレーサビリティとアクセスの制御

最終更新日:Dec 12, 2025

このトピックでは、SourceIdentity の基本概念、設定方法、アクセスポリシー、および一般的なシナリオについて説明します。また、トラブルシューティングのガイダンスも提供します。

SourceIdentity とは

SourceIdentity は、OpenAPI 操作を呼び出して RAM ロールを引き受け、一時的なセキュリティトークンサービス (STS) トークンを取得する際に、現在のセッションに設定するソース ID です。

SourceIdentity を使用する主な目的は次のとおりです:

  • ロールチェーンなどの複雑なシナリオでの ID の追跡

    ロールチェーンとは、RAM ID またはロールベース SSO を介してログインしたユーザーが、あるロールを引き受けてロールセッションを取得し、その後別の API 操作を呼び出してさらに別のロールを引き受けるシナリオです。例えば、ユーザー A → ロール B → ロール C のような場合です。ロールチェーン内の RAM ロールは、同じ Alibaba Cloud アカウントに属することも、異なるアカウントに属することもあります。

    ロールの引き受けシナリオでは、RoleSessionName を設定してソース ID を監査できます。しかし、ロールチェーンのシナリオでは、複数回のロールの引き受けの過程で RoleSessionName が変更される可能性があります。これにより、元のオペレーターの ID を正確に特定することが困難になります。

    ロールチェーンの開始時に SourceIdentity を設定すると、その値はロールセッション内で永続的に保持され、変更することはできません。これにより、複数回のロールの引き受けを経ても、ログ内で元のオペレーターの ID を追跡できるようになります。

    ロールチェーンにおける SourceIdentity の適用に関する詳細については、「ロールチェーンの例」をご参照ください。

  • 高権限ロールに対する詳細なアクセスの制御の実装

    管理者は、SourceIdentity の値またはその存在に基づいて、詳細な権限付与を設定できます。これは、複数の ID によって使用されるロールである共有ロールを使用して操作を実行する場合に役立ちます。

    例えば、管理者はアクセスポリシーで条件キーを使用して、ロールを引き受ける際に特定の SourceIdentity 値を設定することを要求できます。これにより、高権限ロールの引き受けやコアリソースへのアクセスを、特定のソース ID に制限することができます。

SourceIdentity の設定方法

以下の 3 つの API 操作のいずれかを使用して STS を呼び出し、ロールを引き受ける際に SourceIdentity を設定できます。

AssumeRole 操作の使用

AssumeRole API 操作を呼び出す際に、SourceIdentity パラメーターを使用してソース ID を指定できます。例えば、値を Alice に設定できます。これは、RAM ユーザーまたは RAM ロールが別のロールを引き受ける標準的なロールの引き受けシナリオに適用されます。

呼び出しが成功すると、SourceIdentity は応答のトップレベルフィールドとして返されます。以下に応答の例を示します。

{
  "RequestId": "6894B13B-6D71-4EF5-88FA-F3278173****",
  "AssumedRoleUser": {
    "AssumedRoleId": "34458433936495****:alice",
    "Arn": "acs:ram::123456789012****:role/alice"
  },
  "Credentials": {
    "SecurityToken": "********",
    "Expiration": "2015-04-09T11:52:19Z",
    "AccessKeySecret": "wyLTSmsyPGP1ohvvw8xYgB29dlGI8KMiH2pK****",
    "AccessKeyId": "STS.L4aBSCSJVMuKg5U1****"
  },
  "SourceIdentity": "Alice"
}

この操作の呼び出し方法の詳細については、「AssumeRole - RAM ロールの一時的な認証情報を取得」をご参照ください。

AssumeRoleWithSAML 操作の使用

SAML ロールベース SSO のシナリオでは、SourceIdentity の値は、ID プロバイダー (IdP) によって SAML アサーションで提供されます。

IdP で SAML 属性を設定し、それをユーザー名などのユーザー ID にマップできます。属性名は https://www.aliyun.com/SAML-Role/Attributes/SourceIdentity である必要があります。

設定が完了すると、IdP によって発行される SAML 応答には、次の SAML アサーションが含まれます。この例では、ユーザーのユーザープリンシパル名 (UPN) プレフィックスが SourceIdentity の値にマップされていると仮定します。

<Attribute Name="https://www.aliyun.com/SAML-Role/Attributes/SourceIdentity">      
  <AttributeValue>upn_prefix</AttributeValue>
</Attribute>

呼び出しが成功した場合の応答は、AssumeRole 操作の応答と同じです。この操作の呼び出し方法の詳細については、「AssumeRoleWithSAML - SAML ロールベース SSO 中に RAM ロールの一時的な認証情報を取得する」をご参照ください。

AssumeRoleWithOIDC 操作の使用

OpenID Connect (OIDC) ロールベース SSO のシナリオでは、SourceIdentity の値は、IdP によって ID トークン (OIDC トークンとも呼ばれる) 内のクレームとして提供されます。

IdP でカスタム ID トークンクレームを設定し、それをユーザー名などのユーザー ID にマップできます。クレーム名は https://www.aliyun.com/source_identity である必要があります。例:

設定が完了すると、IdP によって発行される ID トークンには、次のクレームが含まれます。この例では、ユーザーの UPN プレフィックスが SourceIdentity の値にマップされていると仮定します。

{
  "https://www.aliyun.com/source_identity": "upn_prefix"
}

呼び出しが成功した場合の応答は、AssumeRole 操作の応答と同じです。この操作の呼び出し方法の詳細については、「AssumeRoleWithOIDC - OIDC ロールベース SSO 中に RAM ロールの一時的な認証情報を取得する」をご参照ください。

フォーマット要件

  • 値の長さは 2~64 文字である必要があります。

  • 値には、文字、数字、および次の特殊文字を含めることができます:=,.@-_

  • 値には、acs:aliyun:alibabacloud: など、Alibaba Cloud が予約したプレフィックスは使用できません。

権限設定と条件制御

ID ベースのアクセスポリシーとロール信頼ポリシーを組み合わせることで、SourceIdentity の使用を正確に制御できます。

権限操作

名前

タイプ

範囲

機能

sts:SetSourceIdentity

権限操作

  • ID ベースのアクセスポリシー

  • ロール信頼ポリシー

ロールを引き受ける際に SourceIdentity を設定する権限を付与します。

権限操作の設定例

RAM ユーザーや RAM ロールなどの ID が AssumeRole を呼び出す際に SourceIdentity を設定できるようにするには、プリンシパルのID ベースのアクセスポリシーと、ターゲットロールのロール信頼ポリシーの両方で sts:SetSourceIdentity 権限を付与する必要があります。Action ブロックに sts:SetSourceIdentity を追加します。

  • ID ベースのアクセスポリシーの例 (プリンシパルに付与):

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "sts:AssumeRole",
            "sts:SetSourceIdentity"
          ],
          "Resource": "acs:ram::ACCOUNT_ID:role/TARGET_ROLE"
        }
      ]
    }
  • ロール信頼ポリシーの例 (引き受けられるロールに設定):

    {
      "Statement": [
        {
          "Action": [
            "sts:AssumeRole",
            "sts:SetSourceIdentity"
          ],
          "Effect": "Allow",
          "Principal": {
            "RAM": [
              "acs:ram::ACCOUNT_ID:root"
            ]
          }
        }
      ],
      "Version": "1"
    }

ロールベース SSO シナリオにおける権限操作の設定例

AssumeRoleWithSAML または AssumeRoleWithOIDC 操作を呼び出してロールを引き受ける場合、ターゲットロールのロール信頼ポリシーsts:SetSourceIdentity 権限を付与するだけで済みます。次の例は、SAML ロールベース SSO のポリシーを示しています。

{
  "Statement": [
    {
      "Action": [
        "sts:AssumeRole",
        "sts:SetSourceIdentity"
      ],
      "Condition": {
        "StringEquals": {
          "saml:recipient": [
            "https://signin.aliyun.com/saml-role/sso"
          ]
        }
      },
      "Effect": "Allow",
      "Principal": {
        "Federated": [
          "acs:ram::ACCOUNT_ID:saml-provider/PROVIDER_NAME"
        ]
      }
    }
  ],
  "Version": "1"
}
重要

IdP で SourceIdentity 属性を設定した場合、その IdP に関連付けられているすべてのロールの信頼ポリシーに sts:SetSourceIdentity 操作を含める必要があります。そうしないと、権限が不十分なため、ユーザーは SSO でログインできなくなります。

条件キー

名前

タイプ

範囲

機能

sts:SourceIdentity

条件キー

  • ID ベースのアクセスポリシー

  • ロール信頼ポリシー

1 つ以上の SourceIdentity 値を関連付けます。ロール引き受けリクエスト内の SourceIdentity 値と照合して、リクエスターが特定の SourceIdentity 値を設定することを許可されているかどうかを判断するために使用されます。

acs:SourceIdentity

条件キー (グローバル)

  • ID ベースのアクセスポリシー

1 つ以上の SourceIdentity 値を関連付けます。ロールセッションに存在する SourceIdentity 値と照合し、Alibaba Cloud のリソースまたはサービスにアクセスする際に、現在のセッションに特定の SourceIdentity 値が含まれているかどうかを判断するために使用されます。

説明

現在、acs:SourceIdentity 条件キーは、STS のポリシー評価中にのみ有効です。

sts:SourceIdentityacs:SourceIdentity の条件キーの違いは次のとおりです。

  • sts:SourceIdentity は、ロールの引き受けリクエスト内の SourceIdentity 属性と照合されます。

  • acs:SourceIdentity は、ロールが正常に引き受けられた後、STS トークンを含むロールセッションに存在する SourceIdentity 属性と照合されます。

初めてロールを引き受ける場合は、ポリシー (ID ベースのアクセスポリシーとロール信頼ポリシーを含む) に sts:SourceIdentity 条件キーを設定する必要があります。この時点ではまだ有効なロールセッションが生成されていないため、acs:SourceIdentity 条件キーを使用するとロールの引き受けは失敗します。

条件制御の例

ポリシーの Condition ブロックで sts:SourceIdentity 条件キーを使用すると、ロールが引き受けられる際に特定の SourceIdentity 値を渡すことを要求できます。次のいずれかまたは両方のタイプのポリシーで条件を設定できます。

  • ID ベースのアクセスポリシーで条件を設定する:ID が特定のロールを引き受ける際に、特定の SourceIdentity 値を設定するように制限します。

  • ロール信頼ポリシーで条件を設定する任意の ID がそのロールを引き受ける際に、特定の SourceIdentity 値を設定するように制限します。

ポリシーの Action ブロックに sts:SetSourceIdentity 権限も追加する必要があることに注意してください。そうしないと、条件制御機能は機能しません。

説明

RAM ユーザーがコンソールにログインした後、SourceIdentity の設定が必要なロールを [ID の切り替え] 機能を使用して引き受けることはできません。これは、コンソールがこのパラメーターの入力をサポートしていないためです。

本番環境用の高権限 RAM ロール prod-role があるとします。管理者は、次の制御を実装する必要があります。

  1. RAM ユーザーの Alice と Bob のみが prod-role を引き受けることができます。

  2. prod-role を引き受ける際、SourceIdentity を設定する必要があり、その値はプリンシパルのユーザー名と一致する必要があります。例えば、Alice がロールを引き受ける場合、値は alice または alice@exampledomain.com に設定できます。

ステップ 1:prod-role のロール信頼ポリシーの設定

このポリシーにより、Alice と Bob のみがこのロールを引き受けることができ、リクエストには alice または bob で始まる SourceIdentity 値が含まれている必要があります。

{
  "Statement": [
    {
      "Action": [
        "sts:AssumeRole",
        "sts:SetSourceIdentity"
      ],
      "Condition": {
        "StringLike": {
          "sts:SourceIdentity": [
            "alice*",
            "bob*"
          ]
        }
      },
      "Effect": "Allow",
      "Principal": {
        "RAM": [
          "acs:ram::ACCOUNT_ID:user/alice",
          "acs:ram::ACCOUNT_ID:user/bob"
        ]
      }
    }
  ],
  "Version": "1"
}

ステップ 2:Alice と Bob の ID ベースのアクセスポリシーの設定

以下のポリシーは、Alice と Bob に prod-role を引き受ける権限を付与し、リクエストでそれぞれのユーザー名に一致する SourceIdentity 値を設定することを要求します。

  • Alice の ID ベースのアクセスポリシー

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "sts:AssumeRole",
            "sts:SetSourceIdentity"
          ],
          "Resource": "acs:ram::ACCOUNT_ID:role/prod-role",
          "Condition": {
            "StringLike": {
              "sts:SourceIdentity": [
                "alice*"
              ]
            }
          }
        }
      ]
    }
  • Bob の ID ベースのアクセス ポリシー

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "sts:AssumeRole",
            "sts:SetSourceIdentity"
          ],
          "Resource": "acs:ram::ACCOUNT_ID:role/prod-role",
          "Condition": {
            "StringLike": {
              "sts:SourceIdentity": [
                "bob*"
              ]
            }
          }
        }
      ]
    }

ロールベース SSO シナリオにおける条件制御の例

dev-role ロールは SAML ロールベース SSO を介してのみ引き受けることができ、従業員 ID が employeeid-aliceemployeeid-bob のユーザーに限定されているとします。IdP は、ユーザーの従業員 ID を SourceIdentity 値として SAML アサーションに追加します。

dev-role の信頼ポリシーは次のように設定されます:

{
  "Statement": [
    {
      "Action": [
        "sts:AssumeRole",
        "sts:SetSourceIdentity"
      ],
      "Condition": {
        "StringEquals": {
          "saml:recipient": [
            "https://signin.aliyun.com/saml-role/sso"
          ],
          "sts:SourceIdentity": [
            "employeeid-alice",
            "employeeid-bob"
          ]
        }
      },
      "Effect": "Allow",
      "Principal": {
        "Federated": [
          "acs:ram::ACCOUNT_ID:saml-provider/PROVIDER_NAME"
        ]
      }
    }
  ],
  "Version": "1"
}

条件制御を使用する際の推奨事項

  • 本番適用前のテスト:本番環境で SourceIdentity の強制ポリシーを直接有効にしないでください。これには、sts:SourceIdentity 条件キーが設定されたID ベースのアクセスポリシーロール信頼ポリシーが含まれます。まず、テスト用のロールとポリシーを使用して完全な検証を行ってください。設定が正しいことを確認した後、段階的にポリシーを本番環境に適用できます。

  • 事前のコミュニケーション:強制ポリシーを有効にする前に、関連するユーザーに SourceIdentity の使用方法と許可される値について通知してください。これにより、通常のビジネス運用の混乱を防ぐことができます。

ロールチェーンの例

シナリオの説明

Jenkins などの継続的インテグレーション/継続的デプロイメント (CI/CD) 自動化ツールは、RAM ロール automation-role を使用して実行されます。このロールは、Alice や Bob などの開発者が引き受けることができます。

Alice などの開発者は、このツールを使用して、本番環境の OSS バケットにアプリケーションをデプロイします。このデプロイ操作では、OSS バケットへの書き込み権限を持つ、より高い権限のロール deploy-role を引き受ける必要があります。

Alice、Bob、および automation-role は Alibaba Cloud アカウント A に属しています。deploy-role は Alibaba Cloud アカウント B に属しています。

ビジネス要件とワークフロー

automation-role は、元の呼び出し元が Alice の場合にのみ deploy-role を正常に引き受けることができます。Bob などの他のユーザーからの呼び出しリクエストは拒否される必要があります。

ワークフローは次のとおりです:

  1. Alice は AssumeRole 操作を呼び出して automation-role を引き受け、リクエストで SourceIdentityalice に設定します。

  2. automation-role が STS トークンを取得した後、再度 AssumeRole 操作を呼び出して deploy-role を引き受けます。SourceIdentity の値は自動的に渡されます。

  3. deploy-role の信頼ポリシーは、受信した SourceIdentityalice であるかどうかをチェックします。検証が成功した場合、ロールの引き受けが許可されます。

ポリシー設定手順

ステップ 1:deploy-role の信頼ポリシーを修正する

このポリシーは、アカウント A の automation-role ロールからのロール引き受けリクエストのみを信頼し、SourceIdentity の値が alice であることを要求します。

{
  "Statement": [
    {
      "Action": [
        "sts:AssumeRole",
        "sts:SetSourceIdentity"
      ],
      "Condition": {
        "StringEquals": {
          "acs:SourceIdentity": [
            "alice"
          ]
        }
      },
      "Effect": "Allow",
      "Principal": {
        "RAM": [
          "acs:ram::ACCOUNT_A_ID:role/automation-role"
        ]
      }
    }
  ],
  "Version": "1"
}
説明

上記のロール信頼ポリシーでは、条件キーとして sts:SourceIdentity の代わりに acs:SourceIdentity が使用されています。これにより、deploy-role ロールは automation-role ロールからのアクセスリクエストのみを受け入れ、かつロールセッション内の SourceIdentityalice に設定されている場合にのみ許可されるようになります。

ステップ 2:automation-role のアクセスポリシーと信頼ポリシーの変更

  • アクセスポリシーautomation-role ロールがアカウント B の deploy-role ロールを引き受けることを許可します。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "sts:AssumeRole",
            "sts:SetSourceIdentity"
          ],
          "Resource": "acs:ram::ACCOUNT_B_ID:role/deploy-role"
        }
      ]
    }
  • 信頼ポリシー:Alice と Bob が automation-role を引き受けることを許可します。

    {
      "Statement": [
        {
          "Action": [
            "sts:AssumeRole",
            "sts:SetSourceIdentity"
          ],
          "Effect": "Allow",
          "Principal": {
            "RAM": [
              "acs:ram::ACCOUNT_A_ID:user/alice",
              "acs:ram::ACCOUNT_A_ID:user/bob"
            ]
          }
        }
      ],
      "Version": "1"
    }

ステップ 3:Alice と Bob の ID ベースのアクセスポリシーの変更

automation-role ロールを引き受けることを許可し、ユーザー名と完全に一致する SourceIdentity 値を設定することを要求します。

  • Alice の ID ベースのアクセスポリシー

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "sts:AssumeRole",
            "sts:SetSourceIdentity"
          ],
          "Resource": "acs:ram::ACCOUNT_A_ID:role/automation-role",
          "Condition": {
            "StringEquals": {
              "sts:SourceIdentity": [
                "alice"
              ]
            }
          }
        }
      ]
    }
  • Bob の ID ベースのアクセスポリシー

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "sts:AssumeRole",
            "sts:SetSourceIdentity"
          ],
          "Resource": "acs:ram::ACCOUNT_A_ID:role/automation-role",
          "Condition": {
            "StringEquals": {
              "sts:SourceIdentity": [
                "bob"
              ]
            }
          }
        }
      ]
    }

ActionTrail で SourceIdentity を表示

ActionTrail の監査ログで SourceIdentity フィールドを見つけることで、ID のトレーサビリティを実現できます。

  • AssumeRole* イベントログ内SourceIdentityresponseElements および requestParameters フィールドに表示されます。

    {
      "eventId": "9BCD28D0-7FDB-5BF2-9302-CDA6CCC5****",
      "eventVersion": 1,
      "responseElements": {
        "SourceIdentity": "alice",
        "RequestId": "9BCD28D0-7FDB-5BF2-9302-CDA6CCC5****",
        ...
      },
      ...
      "requestParameters": {
        "SourceIdentity": "alice",
        "X-Acs-Request-Id": "9BCD28D0-7FDB-5BF2-9302-CDA6CCC5****",
        ...
      },
      "serviceName": "Sts",
      "eventName": "AssumeRole",
      ...
    }
    
  • クラウドリソースへのアクセスに関するイベントログ内SourceIdentityuserIdentity.sessionContext フィールドに表示されます。

    {
      "eventId": "46B5B0A1-19F7-5A56-BE2C-0BCFE5F8****",
      "userIdentity": {
        "sessionContext": {
          "sourceIdentity": "alice",
          ...
        },
        "type": "assumed-role",
        ...
      },
      "serviceName": "Ecs",
      "eventName": "DescribeInstances",
      ...
    }

一般的なトラブルシューティング

SourceIdentity を設定する際の最も一般的な問題は、権限の不足です。以下のセクションでは、2 つの典型的なエラーシナリオとそのトラブルシューティング方法について説明します。

シナリオ 1:ID ベースのアクセスポリシーに起因する問題

エラーメッセージ

{
  "RequestId": "AC9DDEC1-3E1F-50B8-A2D1-BAA155FD****",
  "Code": "NoPermission",
  "Message": "You are not authorized to do this action. You should be authorized by RAM.",
  "AccessDeniedDetail": {
    "PolicyType": "AccountLevelIdentityBasedPolicy",
    "AuthAction": "sts:SetSourceIdentity",
    ...
  }
}

原因分析

  • "PolicyType": "AccountLevelIdentityBasedPolicy" は、エラーが呼び出し元のID ベースのアクセスポリシーに起因することを示します。

  • "AuthAction": "sts:SetSourceIdentity" は、sts:SetSourceIdentity 操作の権限が不足していることを示します。

解決策:管理者に連絡して、呼び出し元の ID ベースのアクセスポリシーを確認し、以下を確認してもらってください。

  1. ポリシーに "Action": "sts:SetSourceIdentity" が含まれていること。

  2. ポリシーの Resource 範囲に、引き受けようとしているターゲットロールが含まれていること。

  3. ポリシーに Condition ブロックが含まれている場合、リクエスト内の SourceIdentity の値が条件を満たしていることを確認してください。

シナリオ 2:ロール信頼ポリシーに起因する問題

エラーメッセージ

{
  "RequestId": "ECC91EE1-0EB0-5E79-B3F5-E54FD8B9****",
  "Code": "NoPermission",
  "Message": "You are not authorized to do this action. You should be authorized by RAM.",
  "AccessDeniedDetail": {
    "PolicyType": "AssumeRolePolicy",
    "AuthAction": "sts:SetSourceIdentity",
    ...
  }
}

原因分析

  • "PolicyType": "AssumeRolePolicy" は、エラーがターゲットロールのロール信頼ポリシーに起因することを示します。

  • "AuthAction": "sts:SetSourceIdentity" は、ターゲットロールが sts:SetSourceIdentity 操作を信頼していないことを示します。

解決策:管理者に連絡して、ターゲットロールのロール信頼ポリシーを確認し、以下を確認してもらってください。

  1. ポリシーに "Action": "sts:SetSourceIdentity" が含まれていること。

  2. ポリシーに Condition ブロックが含まれている場合、リクエスト内の SourceIdentity の値が条件を満たしていることを確認してください。

一般的なトラブルシューティングの推奨事項

  1. 範囲を絞り込むSourceIdentity の設定時に権限の問題が発生した場合は、まず SourceIdentity パラメーターを削除して再度ロールを引き受けてみてください。操作が成功した場合、問題は SourceIdentity の権限設定に関連している可能性が高いです。

  2. エラーの分析:エラーメッセージの AccessDeniedDetail セクション、特に PolicyType フィールドを注意深く読んでください。これにより、問題が ID ベースのアクセスポリシーとロール信頼ポリシーのどちらに起因するのかを迅速に判断できます。

  3. 診断ツールの使用RequestId しかない場合は、 OpenAPI Troubleshoot ツールを使用します。RequestId を入力すると、システムが詳細な診断情報を返し、権限の問題を特定するのに役立ちます。例:

    image

  4. ポリシーとリクエストの比較:特定のポリシーを特定した後、ResourceCondition の設定を注意深く確認してください。それらが、ターゲットロールの ARNSourceIdentity 値など、API リクエストのパラメーターと一致していることを確認してください。

権限の問題のトラブルシューティング方法の詳細については、「権限不足によるアクセスエラーのトラブルシューティング方法」をご参照ください。