このトピックでは、RAM ユーザーまたは RAM ロールが Alibaba Cloud リソースにアクセスする際に発生する権限エラーのトラブルシューティングと解決方法について説明します。
問題の説明
デフォルトでは、RAM ユーザーや RAM ロールなどの RAM プリンシパルは権限を持っていません。特定のクラウドリソースにアクセスするには、明示的に権限が付与されている必要があります。権限には許可 (Allow) または拒否 (Deny) があります。RAM プリンシパルが Alibaba Cloud リソースに対してアクションを実行する際、そのアクションが明示的な拒否の対象であるか、または明示的に許可されていない (暗黙的な拒否とも呼ばれます) 場合、アクセス拒否エラーが返されます。これらのエラーには以下が含まれます。
-
コンソールアクセスエラー:
Permission Deniedというメッセージが表示されます。 -
API コールエラー:
NoPermission、Forbidden.RAM、NotAuthorizedなどのエラーコードが返されます。
解決策
コンソールアクセス
コンソールで表示されるアクセス拒否のポップアップメッセージのほとんどは、エラーに関する詳細な診断情報が含まれています。
以下の手順に従って、エラーを診断し解決します。
-
プリンシパルを特定します。
[auth subject] セクションには、リクエストを行ったプリンシパルに関する詳細情報が表示されます。詳細には以下が含まれます。
-
IDタイプ:RAM ユーザー、RAM ロール、フェデレーションユーザーなど、プリンシパルのタイプ。
-
Identity Information:プリンシパルの一意の識別子。RAM ユーザーの場合はユーザー ID です。RAM ロールの場合は
RoleName:RoleSessionNameの形式です。フェデレーションユーザーの場合はsaml-provider/AzureADのような形式です。 -
[Account ID]:プリンシパルを所有する Alibaba Cloud アカウントの ID。
-
-
不足している権限を特定します。
Action フィールドには拒否された具体的なアクションが表示され、これを使用してトラブルシューティングや権限の付与を行うことができます。
-
関連するポリシータイプを特定します。
ポリシータイプ フィールドには、拒否の原因となったポリシーのタイプが表示されます。これには、コントロールポリシー、セッションポリシー、信頼ポリシー、アイデンティティベースのポリシー (アカウントレベルまたはリソースグループレベル) が含まれます。詳細については、「ポリシーの評価プロセス」をご参照ください。
ポリシータイプによって、ポリシーの調整方法が決まります。
-
アクションが コントロールポリシー によって拒否された場合、Resource Directory の管理アカウントの管理者に連絡して権限を付与してもらいます。コントロールポリシーは、Resource Directory 内のメンバーアカウントの権限境界を定義し、アカウント内のポリシーよりも優先されます。
-
アクションが セッションポリシー によって拒否された場合、アカウント管理者に連絡して、AssumeRole API の呼び出し時に渡されたセッションポリシーを確認してもらいます。
-
アクションが 信頼ポリシー によって拒否された場合、アカウント管理者に連絡して、引き受けた RAM ロールの信頼ポリシーを確認してもらいます。
-
アクションが アイデンティティベースのポリシー によって拒否された場合、アカウント管理者に連絡して、プリンシパルにアタッチされている権限ポリシーを確認してもらいます。
-
-
拒否が 暗黙的な拒否 か 明示的な拒否 かを判断します。
-
暗黙的な拒否:エラーメッセージにアクションが許可されていないことが示され、Denied Type フィールドに
Insufficient Permissionsと表示されます。この場合、アカウント管理者はポリシーの Allow ステートメントに Action を追加して、必要な権限を付与する必要があります。 -
明示的な拒否:エラーメッセージにアクションが明示的に拒否されたことが示され、Denied Type フィールドに
Explicit Denyと表示されます。この場合、アカウント管理者はアタッチされているポリシーを確認し、Deny ステートメントに Action が含まれているかどうかをチェックする必要があります。説明ポリシータイプがコントロールポリシーの場合、リクエストされたアクションが Allow ステートメントに含まれていなくても、明示的な拒否が返されます。
-
さらに、権限診断をサポートする製品では、エラーのポップアップで Troubleshoot をクリックすると、エラーの原因と解決策を表示できます。
権限診断ポップアップの [解決策] セクションでは、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.aliyun.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 はフェデレーションユーザーを示します。
-
AuthPrincipalDisplayName:プリンシパルの一意の識別子。RAM ユーザーの場合はユーザー ID です。RAM ロールの場合は
RoleName:RoleSessionNameの形式です。フェデレーションユーザーの場合はsaml-provider/AzureADのような形式です。 -
AuthPrincipalOwnerId:プリンシパルを所有する Alibaba Cloud アカウントの ID。
-
-
不足している権限を特定します。
AuthAction フィールドには拒否された具体的なアクションが表示され、これを使用してトラブルシューティングや権限の付与を行うことができます。
-
関連するポリシータイプを特定します。
PolicyType フィールドには、拒否の原因となったポリシーのタイプが表示されます。これには、コントロールポリシー、セッションポリシー、信頼ポリシー、アイデンティティベースのポリシー (アカウントレベルまたはリソースグループレベル) が含まれます。詳細については、「ポリシーの評価プロセス」をご参照ください。
ポリシータイプによって、ポリシーの調整方法が決まります。
-
アクションが コントロールポリシー によって拒否された場合、Resource Directory の管理アカウントの管理者に連絡して権限を付与してもらいます。コントロールポリシーは、Resource Directory 内のメンバーアカウントの権限境界を定義し、アカウント内のポリシーよりも優先されます。
-
アクションが セッションポリシー によって拒否された場合、アカウント管理者に連絡して、AssumeRole API の呼び出し時に渡されたセッションポリシーを確認してもらいます。
-
アクションが 信頼ポリシー によって拒否された場合、アカウント管理者に連絡して、引き受けた RAM ロールの信頼ポリシーを確認してもらいます。
-
アクションが アイデンティティベースのポリシー によって拒否された場合、アカウント管理者に連絡して、プリンシパルにアタッチされている権限ポリシーを確認してもらいます。
-
-
拒否が 暗黙的な拒否 か 明示的な拒否 かを判断します。
-
暗黙的な拒否:NoPermissionType フィールドに
ImplicitDenyが返されます。この場合、アカウント管理者はポリシーの Allow ステートメントに AuthAction を追加して、必要な権限を付与する必要があります。 -
明示的な拒否:NoPermissionType フィールドに
ExplicitDenyが返されます。この場合、アカウント管理者はアタッチされているポリシーを確認し、Deny ステートメントに AuthAction が含まれているかどうかをチェックする必要があります。説明ポリシータイプがコントロールポリシーの場合、リクエストされたアクションが Allow ステートメントに含まれていなくても、明示的な拒否が返されます。
-
さらに、権限診断をサポートする製品では、EncodedDiagnosticMessage フィールドの全コンテンツをアカウント管理者に提供できます。管理者はその後、このメッセージを RAM 権限診断ページで使用して問題をトラブルシューティングできます。これを行うには、アカウント管理者は ram:DecodeDiagnosticMessage 権限が必要です。
RAM ユーザーへの権限付与
RAM ユーザーが ECS、OSS、RDS などのクラウド製品を使用する際に、コンソールで Permission Denied エラーが表示されたり、API コールで Forbidden.RAM エラーが返されたりすることがあります。このエラーは通常、RAM ユーザーがそのクラウド製品に必要な権限を持っていないために発生します。RAM ユーザーに権限を付与するには、次の手順に従ってください。
-
Alibaba Cloud アカウントで RAM コンソールにログインします。
-
ナビゲーションペインで、 を選択します。
-
[ユーザー] ページで、対象の RAM ユーザーを見つけてユーザー名をクリックします。
-
権限管理 タブをクリックし、次に 権限の付与 をクリックします。
-
ポリシー検索ボックスに、対象のクラウド製品名 (例:
ECS) を入力します。対応するシステムポリシーを選択して権限を付与します。次の表は、一般的なクラウド製品とそれに対応するシステムポリシーの一覧です。
クラウド製品
フルアクセスポリシー
読み取り専用アクセスポリシー
ECS
AliyunECSFullAccess
AliyunECSReadOnlyAccess
OSS
AliyunOSSFullAccess
AliyunOSSReadOnlyAccess
RDS
AliyunRDSFullAccess
AliyunRDSReadOnlyAccess
VPC
AliyunVPCFullAccess
AliyunVPCReadOnlyAccess
SLB
AliyunSLBFullAccess
AliyunSLBReadOnlyAccess
システムポリシーの詳細については、「RAM ユーザーの権限管理」をご参照ください。