RAM ロールを引き受けることで、一時的にそのロールの権限を取得して Alibaba Cloud のリソースにアクセスできます。RAM ロールは、コンソール、Alibaba Cloud CLI、または Security Token Service (STS) の API オペレーションを呼び出すことで引き受けることができます。
ロールの引き受けとは
RAM ユーザーとは異なり、RAM ロールはコンソールに直接ログインするためには使用できません。まず RAM ユーザーとして、またはシングルサインオン (SSO) を通じてコンソールにログインし、その後、対象の RAM ロールに切り替える必要があります。このプロセスをロールの引き受けと呼びます。
コンソールで ID を切り替えると、元の ID の権限は一時的に停止され、代わりに引き受けた RAM ロールの権限で操作することになります。引き受ける RAM ロールは、ログインしている RAM ユーザーと同じ Alibaba Cloud アカウントに属することも、別のアカウントに属することもあります (クロスアカウントでのロールの引き受け)。
仕組み
以下の例は、ロールの引き受けの仕組みを示しています。この例では、RAM ユーザー Alice が RAM ロール prod-role を引き受け、そのロールとして OSS にアクセスします。
RAM ロールの引き受けをリクエスト: RAM ユーザー Alice は、Alibaba Cloud の Security Token Service (STS) に対して、RAM ロール
prod-roleのための一時的な認証情報 (STS トークン) をリクエストします。RAM は、Alice の ID (例えば、AccessKey ペアを使用) を検証し、Alice がロールを引き受ける権限 (sts:AssumeRole) を持っているか、またprod-roleの信頼ポリシーが Alice による引き受けを許可しているか (Principalが Alice と一致するか) を確認します。STS トークンの取得: 検証が成功すると、Alice は STS から返された STS トークンを取得します。
ロールとしてクラウドリソースにアクセス: Alice は STS トークンを使用して、RAM ロール
prod-roleとして OSS などのクラウドリソースにアクセスします。これらのリクエストは、RAM ロールprod-roleのアクセスポリシー (例えば、oss:*) に基づいて評価されます。Alice の元の認証情報は引き続き有効であり、STS トークンで行われたリクエストのみがロールの権限を使用します。
ロールの引き受け方法
以下の方法で RAM ロールを引き受けることができます。
コンソールでの ID の切り替え — RAM ユーザーが Alibaba Cloud 管理コンソールにログインした後、[ID の切り替え] 機能を使用して対象のロールに切り替えます。この方法は、このトピックで詳しく説明します。
API オペレーションの呼び出し — 管理者または開発者が Alibaba Cloud CLI、SDK、または OpenAPI を使用して
AssumeRoleオペレーション (またはAssumeRoleWithSAMLなどの他のロール引き受けオペレーション) を呼び出し、STS トークンを取得します。この方法は、このトピックで詳しく説明します。ロールベース SSO — ユーザーは、自社の ID プロバイダー (IdP) を使用して、ロールベース SSO (SAML 2.0 プロトコルに基づく) を通じてコンソールにログインします。コンソールへのログインが完了すると、ユーザーはすでに RAM ロールを引き受けた状態になります。
Alibaba Cloud リソースへのロールのバインド — ロールを特定の Alibaba Cloud リソース (ECS インスタンス、Function Compute、ACK/ACS Pod など) にバインドまたは関連付け、Alibaba Cloud プラットフォームの組み込み機能を使用してロールの引き受けを完了します。詳細については、「Alibaba Cloud 上のアプリケーションから Alibaba Cloud リソースへのアクセス」をご参照ください。
最後の 2 つのシナリオについては、このトピックでは詳しく説明しません。使用方法については、上記の関連ドキュメントをご参照ください。
RAM ロールの引き受け方法
シナリオに基づいて方法を選択してください。利用可能なすべてのロール引き受け方法については、「ロールの引き受け方法」をご参照ください。
コンソールでの手動操作 — コンソールで RAM ロールに切り替えて、インタラクティブに操作を実行します。
プログラムまたはサービスのための自動化 — STS のオペレーションを呼び出して STS トークンを取得し、そのトークンを使用してプログラムで Alibaba Cloud リソースにアクセスします。
コマンドラインでのインタラクティブな操作 — Alibaba Cloud CLI を使用して、RAM ロールとして操作を実行します。
前提条件
RAM ロールを引き受ける前に、以下の要件が満たされていることを確認してください。
対象の RAM ロール — 対象の RAM ロールが利用可能であり、その信頼ポリシーが元の ID によるロールの引き受けを許可していること。例えば、信頼ポリシーの
Principalキーワードが元の ID と一致している必要があります。元の ID の権限 — 元の ID に、対象のロールを引き受ける権限が付与されていること。システムポリシー
AliyunSTSAssumeRoleAccessまたはsts:AssumeRoleオペレーションを含むカスタムポリシーを元の ID にアタッチします。システムポリシーAliyunSTSAssumeRoleAccessは、RAM ユーザーがすべての RAM ロールを引き受けることを許可します。権限付与の詳細については、「RAM ユーザーへの権限付与」をご参照ください。ロールベース SSO ログイン — ロールベース SSO を通じてログインした場合、すでに RAM ロールとしてログインしています。別のロールに切り替えるには、現在のロールが対象のロールを引き受ける権限を持っていることを確認してください。例えば、ロールベース SSO ログイン後の ID がロール A で、ロール B に切り替えたい場合、ロール A にはロール B の引き受けを許可するアクセスポリシーが必要です。
AccessKey ペア (API および CLI のみ) — プログラムによる認証のために、RAM ユーザーの AccessKey ペアが準備されていること。詳細な手順については、「プログラムによるアクセスのための AccessKey ペアの作成と使用」をご参照ください。
コンソールでの RAM ロールの引き受け
RAM ユーザーとして、またはロールベース SSO を通じてコンソールにログインした後、ID を切り替えることで RAM ロールを引き受けることができます。
操作手順1. RAM ユーザーとして、またはロールベース SSO を通じて RAM コンソールにログインします。
右上隅のプロフィール画像にポインターを合わせ、[ID の切り替え] をクリックします。
[ロールの切り替え] ページで、引き受けたい RAM ロールの情報を入力します。
a. アカウントエイリアス/デフォルトドメイン名/Alibaba Cloud アカウント ID:RAM ロールを所有するアカウントのアカウントエイリアス、デフォルトドメイン名、または Alibaba Cloud アカウント ID のいずれかを入力します。クロスアカウントで切り替える場合は、対象アカウントの Alibaba Cloud アカウント ID を入力します。
b. ロール名:引き受けたい RAM ロールの名前。管理者に問い合わせるか、RAM コンソールの [ID 管理] > [ロール] ページで確認してください。
[送信] をクリックします。
ID が切り替わると、RAM ロールとしてコンソールを操作します。コンソールの右上隅にあるプロフィール画像エリアには、現在の ID とログイン ID (元の ID) が表示されます。パネルには、現在の ID タイプを識別するための RAM ロール ラベルが含まれています。下部には、[ログイン ID に戻る] ボタンと [サインアウト] ボタンがあります。
(任意) 元のログイン ID に戻るには、コンソールの右上隅にあるプロフィール画像にポインターを合わせ、[ログイン ID に戻る] をクリックします。切り替え後、RAM ロールの権限は無効になり、元の ID の権限が復元されます。
以下の表は、ログイン ID と現在の ID の表示形式を説明しています。
| ログインシナリオ | ログイン ID | 現在の ID |
| RAM ユーザーログイン | <RAM ユーザー名> | <ロール名>/<RAM ユーザー名> |
| ロールベース SSO ログイン (初回) | 表示されません | <ロール名>/<ロールセッション名> |
| ロールベース SSO ログイン後の ID 切り替え | <SSO ロール名>/<RoleSessionName> | <切り替え後のロール名>/<RoleSessionName> |
フィールドの説明
RoleName:現在引き受けているロールの名前。RoleSessionName:セッション名。RAM ユーザーがログインした場合は RAM ユーザー名です。ロールベース SSO ログインでは、IdP によって提供され、ID を切り替えても変更されません。
例
ユーザー Tom (UPN: tom@example.com、UPN はユーザープリンシパル名) が、ロールベース SSO を通じてロール test-saml-role1 としてコンソールにログインし、その後ロール alice-testrole に切り替えます。RoleSessionName がユーザーの UPN であると仮定すると、ログイン ID と現在の ID は次のようになります。
ログイン ID:
test-saml-role1/tom@example.com現在の ID:
alice-testrole/tom@example.com
API オペレーションの呼び出しによる RAM ロールの引き受け
STS のオペレーションを呼び出して RAM ロールを引き受け、引き受けたロールの STS トークンを取得できます。プログラムやサービスが STS トークンを使用して Alibaba Cloud リソースにアクセスすると、引き受けたロールの権限の範囲内で操作を実行できます。
ロール引き受けオペレーション
以下の表は、STS のロール引き受けオペレーションを説明しています。呼び出し元の認証情報または ID フェデレーションの方法に基づいてオペレーションを選択してください。
| API | 説明 |
| AssumeRole | RAM ロールを引き受けるための STS トークンを取得します。AccessKey ペアや STS トークンなどの認証情報を使用するロール引き受けシナリオに適用されます。 |
| AssumeRoleWithSAML | SAML アサーションを使用して STS トークンを取得します。SAML ロールベース SSO シナリオに適用されます。 |
| AssumeRoleWithOIDC | OpenID Connect (OIDC) トークンを使用して STS トークンを取得します。OIDC ロールベース SSO シナリオに適用されます。 |
上記のオペレーションを呼び出す際には、RoleArn パラメーターを使用して、引き受けたい RAM ロールを指定する必要があります。ARN のフォーマットは acs:ram::<Alibaba Cloud アカウント ID>:role/<ロール名> です。
また、Policy パラメーター (セッションポリシー) を渡して、現在のロールセッション内で引き受けたロールの権限をさらに制限することもできます。
必要な権限
必要な権限は、ロールの引き受けに使用するオペレーションによって異なります。
AssumeRole オペレーションを使用する場合、呼び出し元には
sts:AssumeRoleオペレーションの権限が付与されている必要があります。例えば、AliyunSTSAssumeRoleAccessシステムポリシーを呼び出し元にアタッチできます。AssumeRoleWithSAML または AssumeRoleWithOIDC オペレーションを使用する場合、対象の RAM ロールの信頼ポリシーで信頼できる SAML または OIDC IdP を正しく設定するだけで済みます。外部 ID に RAM アクセスポリシーを別途割り当てる必要はありません。
Alibaba Cloud SDK を使用してロール引き受けオペレーションを呼び出し、RAM ロールを引き受けることができます。サンプルコードについては、「AccessKey ペアとRamRoleArnを使用して STS トークンを取得する (Python SDK)」などの関連 SDK ドキュメントをご参照ください。
STS トークンが機能することを確認するには、それを使用して STS の GetCallerIdentity オペレーションを呼び出します。応答には、引き受けたロールの ARN が含まれます。
Alibaba Cloud CLI を使用した RAM ロールの引き受け
以下の例は、Alibaba Cloud CLI を使用して RAM ロール admin-role を引き受け、そのロールとして管理タスクを完了する方法を示しています。
Alibaba Cloud CLI の認証情報を設定します。この例では、RAM ユーザーの AccessKey ペアを認証方式として使用してロールの引き受けを完了する
RamRoleArnモードを使用します。aliyun configure --profile RamRoleArnProfile --mode RamRoleArnプロンプトに従って、AccessKey ID、AccessKey Secret、引き受けたいロールの ARN、ロールセッション名、その他の情報を入力します。パラメーターと使用方法の詳細については、「Alibaba Cloud CLI の認証情報の設定」をご参照ください。
Configuring profile 'RamRoleArnProfile' in 'RamRoleArn' authenticate mode... Access Key Id []: <yourAccessKeyID> Access Key Secret []: <yourAccessKeySecret> Sts Region []: cn-shanghai Ram Role Arn []: acs:ram::012345678910****:role/admin-role Role Session Name []: user-name External ID []: abcd1234 Expired Seconds [900]: 900 Default Region Id []: cn-shanghai Default Output Format [json]: json (Only support json) Default Language [zh|en] en: en Saving profile[RamRoleArnProfile] ...Done.Expired Secondsは、CLI プロンプトに表示されるデフォルト値の 900 秒 (15 分) を維持します。この値は、AssumeRole*オペレーションのDurationSecondsパラメーターのデフォルト値 (3,600 秒) とは異なります。認証が完了したら、プロファイルを使用して必要なコマンドを実行します。コマンドの実行に使用される ID は、AccessKey ペアを所有する RAM ユーザーではなく、引き受けた RAM ロール
admin-roleです。aliyun ram ListUsers --profile RamRoleArnProfilealiyun sts GetCallerIdentity --profile RamRoleArnProfile。応答には、引き受けたロールの ARN が含まれます。 引き受けたロールとして別の RAM ロールを引き受けるには、「ロールチェーン」をご参照ください。
ロールの引き受けが失敗した場合
管理者が対象の RAM ロールに sts:ExternalId や sts:SourceIdentity などの特別な条件ルールを設定している場合、または対象のロールが特定の RAM ユーザーなどの特定のプリンシパルのみを信頼している場合、ロールの引き受けが失敗することがあります。
ロールの引き受けが失敗した場合、または API 呼び出しが権限関連のエラーを返した場合は、元の ID に付与されたアクセスポリシーと対象ロールの信頼ポリシーを確認してください。
クロスアカウントでのロールの引き受け
クロスアカウントでのロールの引き受けにより、ある Alibaba Cloud アカウントの ID (RAM ユーザーまたは RAM ロール) を使用して、別の Alibaba Cloud アカウントの RAM ロールを引き受け、そのアカウントのリソースにアクセスできます。
クロスアカウントでのロールの引き受けには、以下の条件が必要です。
対象のロールは、ソースアカウント、またはソースアカウントの RAM ユーザーまたは RAM ロールを信頼している必要があります。これは、対象ロールの信頼ポリシーの
Principalキーワードによって定義されます。元の ID には
詳細については、「クロスアカウントでのロールの引き受けの実行」をご参照ください。sts:AssumeRoleオペレーションの権限が必要です。
ロールチェーン
ロールチェーンとは、RAM ID (またはロールベース SSO ID) が 1 つのロールを引き受けた後、そのロールとしてさらに他のロールを引き受け続けるプロセスです。ロールチェーンは、このトピックで説明されている標準的なロール引き受けメカニズムに基づいています。
ロール A がロール B を引き受け続けることを許可するには、ロール A に sts:AssumeRole オペレーションの権限が付与され、ロール B がロール A を信頼している必要があります。
以下の例では、Alibaba Cloud CLI を使用してロールチェーンを実演します。
「CLI を使用した RAM ロールの引き受け」の例に従って、Alibaba Cloud CLI を設定し、ロール
admin-role(ソースロール) を引き受けます。システムポリシー
AliyunSTSAssumeRoleAccessをロールadmin-roleに追加します。対象の RAM ロールを作成します。例えば、
target-roleという名前を付けます。対象ロールの信頼ポリシーを変更し、Principalキーワードで ID をadmin-roleとして指定します。{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "RAM": [ "acs:ram::<ACCOUNT_ID>:role/admin-role" ] } } ], "Version": "1" }ChainableProfile モードを使用して Alibaba Cloud CLI を設定します。
aliyun configure --profile ChainableProfile --mode ChainableRamRoleArnプロンプトに従って、ソースプロファイル名、継続して引き受けるロールの Amazon リソースネーム (ARN)、およびその他の情報を入力します。
Configuring profile 'ChainableProfile' in 'ChainableRamRoleArn' authenticate mode... Source Profile []: RamRoleArnProfile Sts Region []: cn-shanghai Ram Role Arn []: acs:ram::012345678910****:role/target-role Role Session Name []: user-name External ID []: abcd1234 Expired Seconds [900]: 900 Default Region Id []: cn-shanghai Default Output Format [json]: json (json のみサポート) Default Language [zh|en] zh: en Saving profile[ChainableProfile] ...Done.認証が完了したら、次のコマンドを実行して現在の呼び出し元の ID 情報を表示します。応答には、対象ロールの ARN が含まれます。
ロールチェーンのシナリオでは、監査ログを通じて最初のロール呼び出し元の ID を追跡することが困難になります。ベストプラクティスとして、「ロールの引き受けの監査を有効にする」ことを推奨します。aliyun sts GetCallerIdentity --profile ChainableProfile
ロールセッションの期間
ロールセッションとは、RAM ユーザーや他の信頼できるエンティティなどのプリンシパルがロールの引き受けに成功した後に確立される、時間制限のあるアクセスセッションです。ロールセッションの期間は、そのロールとして操作を実行できる時間を制御します。セッションが期限切れになった後は、再度ロールを引き受けて新しいセッションを取得する必要があります。
コンソール
| 決定要因 | デフォルト値 | 有効範囲 | 説明 |
| 最大セッション期間 | 1 時間 | 1 〜 12 時間 | 各ロールごとに個別に設定可能。 |
| ログインセッションの有効期限 | 6 時間 | 1 〜 24 時間 | すべての RAM ユーザーと RAM ロールに影響するグローバル設定。 |
有効なセッション期間は、上記の 2 つの要因のうち短い方です。例えば、ログインセッションの有効期限が 8 時間に設定され、ロール A の最大セッション期間が 1 時間に設定されている場合、ロール A に切り替えた後のセッション期間は 1 時間になります。セッションが期限切れになったら、再度 ID を切り替えてロールを引き受けます。
OpenAPI
| 決定要因 | デフォルト値 | 有効範囲 | 説明 |
| 最大セッション期間 | 1 時間 | 1 〜 12 時間 | 各ロールごとに個別に設定可能。 |
DurationSeconds パラメーター | 3,600 秒 (1 時間) | 900 秒 (15 分) 〜 最大セッション期間 | AssumeRole* オペレーションを呼び出す際に指定。 |
| SAML 応答/OIDC トークン の有効性 | IdP によって決定 (通常は 1 時間) | IdP によって決定 | AssumeRoleWithSAML または AssumeRoleWithOIDC オペレーションを通じて STS トークンを取得する、ロールベース SSO シナリオのみ。 |
有効なセッション期間は、上記の要因のうち短い方です。セッションが期限切れになった後は、再度 AssumeRole* オペレーションを呼び出してロールを引き受けます。
最大セッション期間とログインセッションの有効期限の設定方法については、「RAM ロールの最大セッション期間の設定」および「ログインセッションの有効期限の設定」をご参照ください。
よくある質問
ユーザーが特定の RAM ロールのみを引き受けられるように制限するにはどうすればよいですか
システムポリシー AliyunSTSAssumeRoleAccess は、すべての RAM ロールの引き受けを許可します。ロールの引き受けを特定の RAM ロールに制限するには、元の ID にカスタムアクセスポリシーを設定し、対象ロールの信頼ポリシーを変更します。詳細については、「特定の RAM ユーザーが特定の RAM ロールを引き受けることを制限するにはどうすればよいですか」をご参照ください。
Alibaba Cloud アカウントは RAM ロールを引き受けることができますか
いいえ。Alibaba Cloud アカウント (ルートアカウント) は、コンソールで RAM ロールに切り替えることも、AssumeRole オペレーションを呼び出して RAM ロールを引き受けることもできません。
ロールの引き受けによって取得した一時的な認証情報が漏洩した場合はどうすればよいですか
ロールの引き受けによって取得した一時的な認証情報が漏洩した場合、発行済みのすべての STS トークンを取り消すことができます。詳細については、「STS トークンが漏洩した場合はどうすればよいですか」をご参照ください。