RAM ユーザーまたは RAM ロールが Alibaba Cloud にアクセスする際に発生する権限エラーを解決する方法を説明します。このトピックでは、アイデンティティは識別されているものの必要な権限がないアクセス拒否エラーと、システムが現在のアイデンティティを識別できない HTTP 401 認証失敗について説明します。
問題の説明
デフォルトでは、RAM ユーザーや RAM ロールなどの RAM アイデンティティには、いかなるアクションに対する権限もありません。明示的に権限が付与された後にのみ、特定のクラウドリソースにアクセスできます。RAM アイデンティティが Alibaba Cloud リソースに対してアクションを実行する際、次のいずれかの場合にアクセス拒否エラーが表示されます。
暗黙的な拒否:アクションを許可するポリシーが存在しません。
明示的な拒否:ポリシーの Deny ステートメントでアクションが明示的に拒否されています。
エラーは次のとおりです。
コンソールアクセスエラー:
permission deniedというメッセージが表示されます。API 呼び出しエラー:
NoPermission、Forbidden.RAM、User.NoPermission、またはNotAuthorizedなどのエラーコードが返されます。
InvalidAccessKeyId.NotFound のような HTTP 401 エラーは、上記のエラーとは異なります。 401 エラーは認証の失敗を示し、システムが現在の ID を識別できないことを意味します。 アクセス拒否エラーは認可の失敗を示し、ID は識別されているが、アクションを実行する権限がないことを意味します。 401 エラーについては、「HTTP 401 認証失敗」をご参照ください。
一部の Alibaba Cloud 製品は、RAM による認可をサポートしていません。この制限は、次のようにトラブルシューティングに影響します。
リソースアクセス:RAM アイデンティティがそのような製品に対してアクセス拒否エラーを受け取った場合、その RAM アイデンティティでは製品のリソースにアクセスできません。
権限診断:そのような製品の場合、権限診断機能はトラブルシューティング結果を提供できません。
API 呼び出し: API 操作が
Forbidden.RAMエラーを返す場合は、対象製品の API が RAM ベースの承認をサポートしているかどうかも確認してください。一部の製品 API は RAM ベースの承認をサポートしておらず、RAM ID では呼び出すことができません。システムポリシー:「RAM ユーザーへのクラウド製品権限の付与」のシステムポリシーテーブルは、RAM による認可をサポートする製品にのみ適用されます。
ソリューション
次の表は、確認された事象に基づいて適切なセクションを見つけるのに役立ちます。
| 観測される事象 | 参照先 |
| コンソールでのアクセス拒否ポップアップメッセージ | アクセス拒否エラーの診断 および コンソールアクセス |
AccessDeniedDetailSDK、CLI、または OpenAPI Developer Portal からの呼び出しで フィールドを含むエラーレスポンス | アクセス拒否エラーの診断 および API 呼び出し |
| RAM ユーザーに ECS、OSS、RDS などのクラウド製品を操作する権限が必要 | RAM ユーザーへのクラウド製品権限の付与 |
| ECS コンソールでインスタンスリストをエクスポートする際のアクセス拒否エラー | ECS コンソールでインスタンスリストをエクスポートする際の権限不足 |
InvalidAccessKeyId.NotFound などの HTTP 401 エラー | HTTP 401 認証失敗 |
アクセス拒否エラーの診断
コンソールのアクセス拒否ポップアップメッセージと API エラーレスポンスの AccessDeniedDetail フィールドの両方に、エラー詳細が示されます。これらの詳細を使用して、アクセス拒否エラーの原因と解決方法を特定できます。
オペレーターのアイデンティティを特定します。
コンソールのポップアップの 認証サブジェクト フィールドには、オペレーター ID の詳細が記載されています。 API エラーレスポンスでは、対応するフィールドは
AccessDeniedDetail内にあります。[IDタイプ] (API レスポンスでは AuthPrincipalType): オペレーターアイデンティティのタイプであり、RAM ユーザー、RAM ロール、またはフェデレーティッドアイデンティティです。API レスポンスでは、SubUser は RAM ユーザー、AssumedRoleUser は RAM ロール、Federated はフェデレーティッドアイデンティティを示します。
[アイデンティティ情報] (API レスポンスの AuthPrincipalDisplayName): ID 識別子です。RAM ユーザーは UID を示します。RAM ロールは、
RoleName:RoleSessionNameのように、ロール名とロールセッション名を示します。フェデレーティッド ID は、saml-provider/AzureADのように、ID プロバイダーのタイプと名前を示します。Account ID (API レスポンスでは AuthPrincipalOwnerId): アイデンティティが属する Alibaba Cloud アカウントの UID です。
不足している権限を特定します。
アクション フィールド (API レスポンスの AuthAction) には、アクセス拒否エラーの原因となった特定のアクションが表示されます。このアクションを使用して、トラブルシューティングを行うか、権限を付与できます。
「アクセス拒否」エラーのトラブルシューティングを行う際は、そのアクションに製品間の依存関係が含まれているかどうかも確認してください。一部のコンソールアクションは、内部的に他のクラウド製品の API を呼び出します。このような依存関係は、アクションエントリが存在する製品の名前から推測することはできません。実際に不足している権限を特定するには、エラー詳細にある
oos:StartExecutionのような[承認アクション]を使用してください。権限に影響を与えるポリシーのタイプを特定します。
ポリシータイプ フィールド (API レスポンスでは PolicyType) は、コントロールポリシー、セッションポリシー、信頼ポリシー、アカウントレベルの ID ベースのポリシー、リソースグループレベルの ID ベースのポリシーなど、アクセス拒否エラーの原因となったポリシーのタイプを示します。詳細については、「ポリシーの評価プロセス」をご参照ください。
ポリシータイプによって、ポリシーの調整方法が決まります。
アクションが コントロールポリシー (ControlPolicy) によって拒否されている場合、リソースディレクトリの管理アカウントに連絡して権限を付与してもらってください。コントロールポリシーは、リソースディレクトリ内のメンバーアカウントの権限境界を定義し、アカウント内の権限決定よりも優先されます。
アクションが セッションポリシー (SessionPolicy) によって拒否されている場合、アカウント管理者に連絡して、AssumeRole 呼び出しに添付されているセッションポリシーを確認してもらってください。
アクションが 信頼ポリシー (AssumeRolePolicy) によって拒否されている場合、アカウント管理者に連絡して、引き受けられた RAM ロールの信頼ポリシーを確認してもらってください。
アクションが アイデンティティベースのポリシー (AccountLevelIdentityBasedPolicy または ResourceGroupLevelIdentityBasedPolicy) によって拒否されている場合、アカウント管理者に連絡して、オペレーターアイデンティティに付与されているアイデンティティベースのポリシーを確認してもらってください。
アクセス拒否エラーが 暗黙的な拒否 によるものか、明示的な拒否 によるものかを判断します。
暗黙的な拒否: エラーの原因は、アクションが承認されていないことを示しており、拒否タイプ フィールドには
insufficient permissionsと表示されます。API レスポンスの NoPermissionType フィールドにはImplicitDenyと表示されます。この場合、アカウント管理者は、アクション を Allow ステートメントに追加して、アクションを実行する権限をユーザーに付与する必要があります。明示的な拒否: エラーの原因は、アクションが明示的に拒否されていることを示しており、拒否タイプ フィールドには
explicit denyと表示されます。 API レスポンスの NoPermissionType フィールドにはExplicitDenyと表示されます。 この場合、アカウント管理者は付与された権限を確認し、Deny ステートメントに アクション が含まれているかどうかをチェックする必要があります。
権限を調整した後、失敗した操作を再度実行してください。アクセス拒否エラーは発生しなくなるはずです。エラーが解消しない場合は、対象製品が RAM による認可をサポートしているかどうかを確認し、ポリシータイプを再度確認してください。
権限診断機能は事後診断ツールです。まず API コールを実行してアクセス拒否を発生させ、次に診断メッセージ (EncodedDiagnosticMessage) または RequestId を使用して、拒否の理由を遡って追跡する必要があります。どちらの値も、拒否された API コールのレスポンスから取得します。この機能は、実際のコールなしで、リソースグループ内の RAM アイデンティティの有効な権限をシミュレーションすることをサポートしていません。権限を事前にチェックするには、次のいずれかの方法を使用します。
RAM アイデンティティの既存の権限を監査し、過剰な権限を特定するには、アクセス分析 機能を使用してアナライザーを作成してください。
単一の呼び出しの前に権限が十分であるか検証するには、API 呼び出しに
DryRunパラメーターを追加します。
コンソールアクセス
コンソールのほとんどのアクセス拒否ポップアップメッセージには、エラー原因に加えて、追加のエラー詳細が表示されます。エラー詳細を読み、「アクセス拒否エラーの診断」の手順に従って、原因と解決方法を特定します。ポップアップにエラー詳細が表示されない場合は、SDK または CLI を使用して API 操作を呼び出して同じ操作を再現し AccessDeniedDetail を取得するか、拒否された呼び出しの RequestId を使用して「RAM 権限診断ページ」で拒否の理由を追跡します。
また、権限診断をサポートする製品では、エラーポップアップで権限診断をクリックすると、エラーの原因と解決策を直接表示できます。
「権限診断」ポップアップの [解決策] セクションでは、AliyunRAMFullAccess や AliyunRAMReadOnlyAccess などのアタッチ可能なシステムポリシーを推奨し、[権限の表示]、[ポリシーの作成]、[権限の追加] などのクイックアクションを提供します。
API 呼び出し
Alibaba Cloud ソフトウェア開発キット (SDK)、コマンドラインインターフェイス (CLI)、または OpenAPI Developer Portal を使用して API を直接呼び出す場合、エラーレスポンスには詳細なエラー情報が含まれます。次の例は、OpenAPI Developer Portal でのデバッグ中に返されたエラーレスポンスを示しています。
{
"RequestId": "1090E608-D26F-5A08-BAE3-80D350E9FE20",
"HostId": "ram.aliyuncs.com",
"Code": "NoPermission",
"Message": "You are not authorized to do this action. resource: acs:ram:*:xxx:user/* Action: ram:ListUsers",
"Recommend": "https://next.api.alibabacloud.com/troubleshoot?q=NoPermission&product=Ram",
"AccessDeniedDetail": {
"PolicyType": "AccountLevelIdentityBasedPolicy",
"AuthPrincipalOwnerId": "xxx",
"EncodedDiagnosticMessage": "AQIBIAAAAMDAbkn...jHF4TLvjT8hp17I0RFKObkV4=",
"AuthPrincipalType": "SubUser",
"AuthPrincipalDisplayName": "xxx",
"NoPermissionType": "ExplicitDeny",
"AuthAction": "ram:ListUsers"
}
}エラーレスポンスの AccessDeniedDetail フィールドは、アクセス拒否エラーの詳細を示します。「アクセス拒否エラーの診断」の手順に従って、エラーの原因とその解決方法を特定してください。
さらに、権限診断をサポートしている製品では、EncodedDiagnosticMessage フィールドのコンテンツ全体をアカウント管理者に提供できます。アカウント管理者は、RAM 権限診断ページに移動し、完全な EncodedDiagnosticMessage の値を入力することで、デコードされたエラーの原因と解決策を表示できます。デコードされた結果には、コンソールの権限診断ポップアップと同じ情報が表示されます。アカウント管理者は ram:DecodeDiagnosticMessage 権限を持っている必要があります。
一般的なシナリオ
RAM ユーザーへのクラウド製品権限の付与
RAM ユーザーが ECS、OSS、RDS などのクラウド製品を操作する際に、コンソールに permission denied と表示されたり、API コールで Forbidden.RAM エラーが返されたりします。これは通常、RAM ユーザーに対応するクラウド製品を操作するための権限が付与されていないことが原因です。
この手順は、RAM ユーザーが属する Alibaba Cloud アカウントを使用して実行してください。エラーを受け取った RAM ユーザーの場合は、この手順をアカウント管理者に送信してください。
Alibaba Cloud アカウントで RAM コンソールにログオンします。
左側のナビゲーションペインで、アイデンティティ管理 > ユーザー を選択します。
ユーザーリストで、対象の RAM ユーザーを見つけ、ユーザーのログオン名をクリックします。
権限管理 タブをクリックし、権限の付与 をクリックします。
ポリシー検索ボックスに、
ECSなどの対象クラウド製品名を入力します。対応するシステムポリシーを選択し、承認を確認します。
次の表は、一般的なクラウド製品とそれに対応するシステムポリシーを示しています。
| クラウド製品 | フルアクセスポリシー | 読み取り専用アクセスポリシー |
| Elastic Compute Service (ECS) | AliyunECSFullAccess | AliyunECSReadOnlyAccess |
| Object Storage Service (OSS) | AliyunOSSFullAccess | AliyunOSSReadOnlyAccess |
| ApsaraDB RDS | AliyunRDSFullAccess | AliyunRDSReadOnlyAccess |
| Virtual Private Cloud (VPC) | AliyunVPCFullAccess | AliyunVPCReadOnlyAccess |
| Server Load Balancer (SLB) | AliyunSLBFullAccess | AliyunSLBReadOnlyAccess |
システムポリシーの詳細については、「RAM ユーザーの権限を管理する」をご参照ください。
上記の表のシステムポリシーは、RAM による認可をサポートする製品にのみ適用されます。権限を付与した後もアクセス拒否エラーが解消しない場合は、対応する製品のドキュメントを確認して、その製品が RAM による認可をサポートしているかどうかを確認してください。
ECS コンソールでインスタンスリストをエクスポートする際の権限不足
症状
RAM ユーザーに ReadOnlyAccess システムポリシーが付与されています。RAM ユーザーが ECS コンソールで[インスタンスリストのエクスポート]をクリックした後も、アクセス拒否エラーが表示されるか、User.NoPermission エラーが返されます。エラー詳細では、承認アクションは oos:StartExecution で、権限の決定は insufficient permissions です。
原因
ECS コンソールのインスタンスリストのエクスポート機能は、運用管理のために CloudOps Orchestration Service (OOS) を使用してエクスポートタスクを非同期で実行するため、oos:StartExecution 権限が必要です。ReadOnlyAccess には、クラウド製品のリソースに対する読み取り専用のクエリ権限のみが含まれ、CloudOps Orchestration Service の実行権限は含まれていません。したがって、読み取り専用権限のみが付与されている RAM ユーザーは、エクスポートを実行できません。
ソリューション
RAM ユーザーに AliyunOOSFullAccess システムポリシーをアタッチするか、oos:StartExecution 権限を付与するカスタムポリシーを作成します。その後、インスタンスリストを再度エクスポートします。このシナリオは、アクセス拒否エラーの診断で説明されているプロダクト間の依存関係の例です。不足している権限は ECS ではなく、OOS のものです。
HTTP 401 認証失敗
API 操作を呼び出すかコンソールにアクセスしたときに InvalidAccessKeyId.NotFound のような HTTP 401 エラーが表示された場合、認証に失敗しています。 HTTP 401 エラーは認証の失敗を示します。これは、システムが現在のアイデンティティを識別できないことを意味します。 このエラーは、アクセスが拒否されたエラーとは別に処理してください。アクセスが拒否されたエラーは、認可の失敗、つまりアイデンティティは識別されているが、アクションを実行する権限がないことを示します。 401 エラーが発生した場合は、次の手順に従ってトラブルシューティングを行ってください。
AccessKey ペアが有効かどうかを確認します。
RAM コンソールにログオンし、AccessKey リストを表示します。AccessKey ペアが削除されている場合は、新しい AccessKey ペアを作成してください。AccessKey ペアが [無効] 状態の場合、API 呼び出しには影響しません。影響を受けるのはコンソールへのログインのみです。
RAM ユーザーのステータスを確認します。
RAM ユーザーが [有効] 状態であることを確認してください。RAM ユーザーが [無効] 状態の場合は、まず RAM ユーザーを有効にしてください。
Security Token Service トークン (STS トークン) の有効期間を確認します。
呼び出しに STS 一時認証情報を使用している場合、期限切れの認証情報は認証失敗を引き起こします。AssumeRole を再度呼び出して、新しい STS トークンを取得してください。