このトピックでは、RAM ユーザーまたは RAM ロールを使用して Alibaba Cloud にアクセスする際に発生するアクセス拒否エラーの解決方法について説明します。
問題の説明
RAM ユーザーや RAM ロールを含む RAM アイデンティティは、デフォルトでは権限を持ちません。明示的に権限が付与された後にのみ、特定のクラウドリソースにアクセスできます。RAM アイデンティティに対する認可には、許可 (Allow) と拒否 (Deny) の2つの効果があります。RAM アイデンティティが Alibaba Cloud リソースに対して操作を実行する際、その操作が明示的に拒否されているか、明示的に許可されていない場合にアクセス拒否エラーが発生します。後者のケースは暗黙の拒否と呼ばれます。エラーは次のように表示されます。
-
コンソールアクセスエラー:
Permission deniedというメッセージが表示されます。 -
OpenAPI コールエラー:
NoPermission、Forbidden.RAM、またはNotAuthorizedなどのエラーが返されます。
一部の Alibaba Cloud 製品は RAM 認可をサポートしていません。RAM 認可をサポートしていない製品にアクセスする際に RAM アイデンティティがアクセス拒否エラーを受け取った場合、その RAM アイデンティティはその製品のリソースにアクセスできません。
ソリューション
コンソールアクセス
コンソールのほとんどのアクセス拒否エラーポップアップには、エラー原因に加えて、詳細なエラー情報が表示されます。
次の手順に従って、アクセス拒否エラーの具体的な原因と対応する解決策を特定できます。
-
操作者を特定します。
[認証サブジェクト] が提供するオペレーター ID の詳細は次のとおりです。
-
[IDタイプ]:操作者アイデンティティのタイプで、RAM ユーザー、RAM ロール、またはフェデレーテッド SSO アイデンティティのいずれかです。
-
[アイデンティティ情報]: ID 識別子です。 RAM ユーザーの場合は UID、RAM ロールの場合はロール名とロールセッション名 (例:
RoleName:RoleSessionName)、フェデレーテッド SSO ID の場合は ID プロバイダータイプと ID プロバイダー名 (例:saml-provider/AzureAD) が表示されます。 -
[アカウント ID]: 現在の ID が属する Alibaba Cloud アカウントの UID。
-
-
操作に不足している権限を特定します。
アクション は、アクセス拒否エラーの原因となった特定のアクションを示します。このアクションを使用して、トラブルシューティングを行ったり、必要な権限を付与したりできます。
-
権限に影響するポリシータイプを特定します。
ポリシータイプ は、アクセス拒否エラーの原因となったポリシータイプを特定します。 ポリシータイプには、コントロールポリシー、セッションポリシー、ロールの信頼ポリシー、アカウントレベルのIDベースのポリシー、リソースグループレベルのIDベースのポリシーが含まれます。 詳細については、「RAM がポリシーを評価する方法」をご参照ください。
ポリシータイプによって、ポリシーの調整方法が決まります。
-
操作がコントロールポリシー (ControlPolicy) によって拒否された場合は、リソースディレクトリの管理アカウントに連絡して権限を付与してもらってください。コントロールポリシーは、リソースディレクトリ内のメンバーアクセスの権限境界を定義し、アカウント内の権限決定よりも優先されます。
-
操作がセッションポリシー (SessionPolicy) によって拒否された場合は、アカウント管理者に連絡して、AssumeRole API にアタッチされているセッションポリシーを確認してもらってください。
-
操作がロール信頼ポリシー (AssumeRolePolicy) によって拒否された場合は、アカウント管理者に連絡して、引き受けた RAM ロールの信頼ポリシーを確認してもらってください。
-
操作がアイデンティティベースのポリシー (AccountLevelIdentityBasedPolicyまたはResourceGroupLevelIdentityBasedPolicy) によって拒否された場合は、アカウント管理者に連絡して、操作者アイデンティティに付与されたアクセスポリシーを確認してもらってください。
-
-
アクセス拒否エラーが暗黙の拒否によるものか、明示的な拒否によるものかを判断します。
-
暗黙的な拒否: エラーの原因が現在の操作に権限がないことを示し、拒否タイプ に
Insufficient permissionsと表示される場合です。この場合、アカウント管理者は、Allow ステートメントに アクション を追加して権限を付与する必要があります。 -
明示的な拒否:エラー原因は、現在の操作が明示的に拒否されていることを示しており、拒否タイプ は
Explicit denyを示します。この場合、アカウント管理者は、付与された権限と、Deny ステートメントに アクション が含まれているかどうかを確認する必要があります。説明ポリシータイプがコントロールポリシーの場合、認可アクションが Allow ステートメントに含まれていない場合も、明示的な拒否が返されます。
-
また、権限診断をサポートする製品では、エラーポップアップで権限診断をクリックすると、原因と解決策を直接表示できます。
権限診断ポップアップの [解決策] エリアには、AliyunRAMFullAccess や AliyunRAMReadOnlyAccess などの適用可能なシステムポリシーが推奨され、[認可の表示]、[ポリシーの作成]、[権限の追加] などのクイックアクションが提供されます。
権限診断機能は、RAM 認可をサポートしている製品でのみ利用できます。RAM 認可をサポートしていない製品の場合、権限診断はトラブルシューティング結果を提供できません。
権限診断は事後診断ツールです。まず API コールを実行してアクセスが拒否された後、診断暗号文 (EncodedDiagnosticMessage) または RequestID を使用して拒否理由を追跡する必要があります。いずれの値も、拒否された API コールのレスポンスに含まれています。現在、権限診断は、実際のコールを行わずにリソースグループ内の RAM アイデンティティの最終的な有効権限をシミュレーションまたは検証することには対応していません。
OpenAPI 呼び出し
Alibaba Cloud SDK、CLI、または OpenAPI 開発者ポータルを使用して OpenAPI を直接呼び出す場合、エラーレスポンスにはエラーの詳細が含まれます。以下は、OpenAPI 開発者ポータルでのデバッグ中に返されたエラーレスポンスです。
{
"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 フィールドには、アクセス拒否エラーの詳細が含まれています。次の手順に従って、具体的な原因と対応する解決策を特定できます:
-
操作者を特定します。
-
AuthPrincipalType:操作者のアイデンティティタイプです。SubUser は RAM ユーザー、AssumedRoleUser は RAM ロール、Federated はフェデレーション SSO アイデンティティを表します。
-
AuthPrincipalDisplayName: ID 識別子。RAM ユーザーは UID、RAM ロールはロール名とロールセッション名 (例:
RoleName:RoleSessionName)、フェデレーション SSO ID は ID プロバイダータイプと ID プロバイダー名 (例:saml-provider/AzureAD) を表します。 -
AuthPrincipalOwnerId:現在のアイデンティティが属する Alibaba Cloud アカウントの UID。
-
-
操作に不足している権限を特定します。
AuthAction は、アクセス拒否エラーの原因となった特定のアクションを示します。このアクションを使用して、トラブルシューティングを行うか、必要な権限を付与できます。
-
権限に影響するポリシータイプを特定します。
PolicyType は、アクセス拒否エラーの原因となったポリシータイプを示します。ポリシータイプには、コントロールポリシー、セッションポリシー、ロール信頼ポリシー、アカウントレベルのアイデンティティベースのポリシー、リソースグループレベルのアイデンティティベースのポリシーがあります。詳細については、「RAMによるポリシーの評価方法」をご参照ください。
ポリシータイプによって、ポリシーの調整方法が決まります。
-
操作がコントロールポリシー (ControlPolicy) によって拒否された場合は、リソースディレクトリの管理アカウントに連絡して権限を付与してもらってください。コントロールポリシーは、リソースディレクトリ内のメンバーアクセスの権限境界を定義し、アカウント内の権限決定よりも優先されます。
-
操作がセッションポリシー (SessionPolicy) によって拒否された場合は、アカウント管理者に連絡して、AssumeRole API にアタッチされているセッションポリシーを確認してもらってください。
-
操作がロール信頼ポリシー (AssumeRolePolicy) によって拒否された場合は、アカウント管理者に連絡して、引き受けた RAM ロールの信頼ポリシーを確認してもらってください。
-
操作がアイデンティティベースのポリシー (AccountLevelIdentityBasedPolicyまたはResourceGroupLevelIdentityBasedPolicy) によって拒否された場合は、アカウント管理者に連絡して、操作者アイデンティティに付与されたアクセスポリシーを確認してもらってください。
-
-
アクセス拒否エラーが暗黙の拒否によるものか、明示的な拒否によるものかを判断します。
-
暗黙的な拒否: NoPermissionType は
ImplicitDenyを示します。この場合、アカウント管理者は Allow ステートメントに AuthAction を追加して権限を付与する必要があります。 -
明示的な拒否: NoPermissionType は
ExplicitDenyを示します。この場合、アカウント管理者は、付与された権限と、Deny ステートメントに AuthAction が含まれているかどうかを確認する必要があります。説明ポリシータイプがコントロールポリシーの場合、認可アクションが Allow ステートメントに含まれていない場合も、明示的な拒否が返されます。
-
さらに、権限診断をサポートする製品については、アカウント管理者に EncodedDiagnosticMessage の完全な値を渡すことができます。アカウント管理者は、RAM 権限診断ページにアクセスして原因を調査できます。アカウント管理者は ram:DecodeDiagnosticMessage 権限を持っている必要があります。
OpenAPI の呼び出しで Forbidden.RAM エラーが返された場合は、対象の製品 API が RAM 認証をサポートしているかどうかを確認してください。一部の製品 API は RAM 認証をサポートしていないため、RAM アイデンティティでは呼び出すことができません。
一般的なシナリオ:RAM ユーザーへのクラウド製品権限の付与
RAM ユーザーが ECS、OSS、RDS などのクラウド製品を操作すると、コンソールに Permission denied と表示されたり、OpenAPI コールが Forbidden.RAM エラーを返したりすることがあります。これは通常、RAM ユーザーにそのクラウド製品の操作に必要な権限が付与されていないことが原因で発生します。次の手順を実行して、RAM ユーザーに権限を付与します。
-
Alibaba Cloud アカウントを使用して、Resource Access Management (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 認可をサポートしている製品にのみ適用されます。権限を付与した後もアクセス拒否エラーが続く場合は、対応する製品のドキュメントを確認して、RAM 認可をサポートしているかどうかを確認してください。
一般的なシナリオ:ECS コンソールでインスタンスリストをエクスポートする際の権限不足
RAM ユーザーに ReadOnlyAccess システムポリシーが付与されていますが、ECS コンソールで[インスタンスリストのエクスポート]をクリックするとアクセス拒否エラーが表示されるか、User.NoPermission エラーが返されます。エラー詳細では、承認アクションは oos:StartExecution で、権限の決定は Insufficient permissions です。
ECS コンソールの「インスタンスリストのエクスポート」機能は、CloudOps Orchestration Service (OOS) を通じてエクスポートタスクを非同期に実行します。このアクションには、oos:StartExecution および oos:ListExecutions 権限が必要です。ReadOnlyAccess には、クラウド製品リソースに対する読み取り専用のクエリ権限のみが含まれており、CloudOps Orchestration Service の実行権限は含まれていません。したがって、読み取り専用権限のみを付与された RAM ユーザーは、エクスポートをトリガーできません。
RAM ユーザーに AliyunOOSFullAccess システムポリシーをアタッチするか、oos:StartExecution と oos:ListExecutions の両方の権限を付与するカスタムポリシーを作成します。その後、インスタンスリストを再度エクスポートします。
アクセス拒否エラーのトラブルシューティングを行う際、その操作にクロスプロダクトの依存関係が含まれているかどうかも確認してください。一部のコンソール操作は他のクラウドプロダクトの API を呼び出しますが、操作のエントリポイントにあるプロダクト名からこれらの依存関係を推測することはできません。エラー詳細の[承認アクション] (例: oos:StartExecution) を使用して、実際に不足している権限を特定してください。
HTTP 401 認証失敗
API の呼び出しやコンソールへのログオン時に HTTP 401 エラー (たとえば、InvalidAccessKeyId.NotFound) が発生した場合、ID を認証できません。次の手順に従ってトラブルシューティングを行ってください。
-
AccessKey の有効性を確認します。
Resource Access Management (RAM) コンソールにログオンし、AccessKey リストを確認します。AccessKey が削除されている場合は、新しい AccessKey を作成してください。
-
RAM ユーザーのステータスを確認します。
RAM ユーザーのステータスを確認し、コンソールログオンまたは対応する AccessKey が有効になっていることを確認してください。
-
Security Token Service (STS) トークンの有効期間を確認します。
STS トークンが期限切れになっていないか確認してください。期限切れの認証情報は認証失敗の原因となります。
AssumeRoleAPI を再度呼び出して、新しい STS トークンを取得してください。