カスタムポリシーを作成して、きめ細かい権限管理を実装できます。
作成方法
Resource Access Management (RAM) は、WYSIWYG 形式のビジュアルエディターを提供します。エフェクト、サービス、アクション、リソース、条件を選択して、カスタムポリシーを生成できます。組み込みのインテリジェントな検証機能により、ポリシーが有効かつ効果的であることを保証します。この方法は直感的で分かりやすいです。
RAM は JSON スクリプトエディターを提供します。ポリシーの構文と構造に従ってカスタムポリシーを作成する必要があります。この方法は柔軟性が高く、ポリシーの構文に精通している場合に適しています。
ポリシーテンプレートのインポート:RAM は、システム管理者、財務担当者、ネットワーク管理者など、一般的なシナリオ向けのポリシーテンプレートを提供します。適切なポリシーテンプレートをインポートし、わずかな変更を加えるだけで、カスタムポリシーを迅速に作成できます。
システムポリシーのインポート:システムポリシーをインポートし、ビジネスニーズに合わせて変更できます。これは、標準化されたテンプレートからカスタムポリシーを便利かつ迅速に作成する方法です。
ビジュアルエディターの使用
RAM 管理者として RAM コンソールにログインします。
左側のナビゲーションペインで、 を選択します。
ポリシー ページで、ポリシーの作成 をクリックします。
ポリシーの作成 ページで、視覚化 タブをクリックします。
ビジュアルエディターには、エフェクト (必須、[許可] または [拒否] に設定できます。デフォルト:[許可])、サービス (必須)、アクション (必須)、リソース (必須)、および 条件 (任意) のフィールドを含むステートメントフォームが表示されます。アクション、リソース、および 条件を設定する前に、サービスを選択する必要があります。ページ下部の [ステートメントの追加] をクリックして、さらにステートメントを追加できます。
ポリシーを設定します。
ポリシーの基本要素の詳細については、「ポリシーの基本要素」をご参照ください。
効果 セクションで、許可 または 却下 を選択します。
サービス セクションで、サービスを選択します。
説明コンソールには、ビジュアルエディターがサポートするサービスが表示されます。
操作 セクションで、全部操作 または 指定操作 を選択します。
前の手順で選択したサービスに基づいて、利用可能なアクションがシステムによって自動的に一覧表示されます。指定操作 を選択した場合は、特定のアクションを選択する必要があります。
リソース セクションで、すべてのリソース または 指定资源 を選択します。
選択したアクションに基づいて、利用可能なリソースタイプがシステムによって自動的に一覧表示されます。指定资源 を選択した場合は、リソースを追加 をクリックして ARN を指定する必要があります。すべて選択 機能を使用すると、設定項目のすべてのリソースをすばやく選択できます。
説明UI 上では、関連するアクションの ARN が 必須 としてマークされます。ポリシーが正しく機能するように、これらの ARN を指定してください。
条件 セクションで、条件を追加 をクリックして条件を設定します。
条件には、Alibaba Cloud の共通条件とサービス固有の条件が含まれます。設定したサービスとアクションに基づいて、利用可能な条件がシステムによって自動的に一覧表示されます。条件キーを選択し、その値を設定するだけです。
ステートメントを追加 をクリックし、上記の手順を繰り返して複数のステートメントを設定します。
ページ上部の 最適化 をクリックしてから 行う をクリックし、ポリシーの高度な最適化を実行します。
高度なポリシー最適化機能は、次のタスクを実行します:
互換性のないアクションのリソースまたは条件を分割します。
リソースの範囲を絞り込みます。
重複するステートメントを削除するか、ステートメントをマージします。
ポリシーの作成 ページで、OK をクリックします。
ポリシーの作成 ダイアログボックスで、[ポリシー名] と 説明 を入力し、OK をクリックします。
スクリプトエディターの使用
RAM 管理者として RAM コンソールにログインします。
左側のナビゲーションペインで、 を選択します。
ポリシー ページで、ポリシーの作成 をクリックします。
ポリシーの作成 ページで、JSON タブをクリックします。
ページには JSON エディターが表示されます。デフォルトのポリシーテンプレートには、
Version要素 ("1"に設定) とStatement配列が含まれています。各ステートメントには、Effect(デフォルトは"Allow")、Action、Resource、およびCondition要素が含まれます。ActionとResource要素を入力する必要があります。ポリシーの内容を入力します。
ポリシーの構文と構造の詳細については、「ポリシーの構文と構造」をご参照ください。
ページ上部の 最適化 をクリックしてから 行う をクリックし、ポリシーの高度な最適化を実行します。
高度なポリシー最適化機能は、次のタスクを実行します:
互換性のないアクションのリソースまたは条件を分割します。
リソースの範囲を絞り込みます。
重複するステートメントを削除するか、ステートメントをマージします。
ポリシーの作成 ページで、OK をクリックします。
ポリシーの作成 ダイアログボックスで、[ポリシー名] と 説明 を入力し、OK をクリックします。
一般的なカスタムポリシーの例
以下の例は、スクリプトエディターを使用して、一般的な認可シナリオのカスタムポリシーを設定する方法を示しています。
アカウントレベルの操作の認可
RAM ユーザーや AccessKey の作成などのアカウントレベルの操作では、Resource 要素を "*" に設定し、認可範囲を [Alibaba Cloud アカウント全体] に設定する必要があります。これらの操作は、特定のリソースグループに制限することはできません。
次の例では、RAM ユーザーと AccessKey を作成する権限を付与します:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ram:CreateUser",
"ram:CreateAccessKey"
],
"Resource": "*"
}
]
}このポリシーを RAM ユーザーにアタッチする場合、認可範囲を [Alibaba Cloud アカウント全体] に設定する必要があります。範囲を特定のリソースグループに設定すると、ポリシーはアカウントレベルの操作に対しては有効になりません。
RAM ユーザーが自身のパスワードを変更することを許可する
次の例では、RAM ユーザーが自身のログオンパスワードを変更するために必要な最小権限を付与します:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "ram:ChangePassword",
"Resource": "*"
}
]
}この目的のために AliyunRAMFullAccess を付与しないでください。AliyunRAMFullAccess は、すべての RAM リソースに対する完全な管理権限を提供し、これはパスワード変更に必要な最小権限をはるかに超えています。
特定のリソースへの読み取り専用アクセス
次の例では、特定の Elastic Compute Service (ECS) インスタンスへの読み取り専用アクセスを許可します。i-xxx を実際のインスタンス ID に置き換えてください。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "ecs:Describe*",
"Resource": "acs:ecs:*:*:instance/i-xxx"
}
]
}ARN 形式では、リソースタイプとリソース ID の間にスラッシュ (/) が必要です。たとえば、instancei-xxx ではなく instance/i-xxx を使用します。
Simple Log Service のきめ細かい認可
次の例では、Simple Log Service でログをクエリし、ストアビューを作成する権限を付与します。exampleproject と examplelogstore を実際のプロジェクト名と Logstore 名に置き換えてください。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"log:GetLogStoreLogs",
"log:CreateStoreView"
],
"Resource": [
"acs:log:*:*:project/exampleproject/logstore/examplelogstore",
"acs:log:*:*:project/exampleproject"
]
}
]
}上記の権限を付与した後に SDK 呼び出しが権限拒否エラーで失敗する場合は、log:GetProject と log:GetLogStore の権限を追加してください。これらは、主要なアクションが正しく機能するために必要な暗黙的な依存関係の権限です。
次の例では、OOS の実行を開始する権限を付与します:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "oos:StartExecution",
"Resource": "*"
}
]
}ECS のデプロイ (最小権限)
ECS インスタンスのデプロイには、複数のサービスにまたがるアクションの組み合わせが必要です。次の例では、インスタンス作成時に必要な VPC およびセキュリティグループリソースへの読み取り専用アクセスを含め、ECS インスタンスの作成に必要な最小権限を付与します:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecs:RunInstances",
"ecs:DescribeInstances",
"vpc:DescribeVpcs",
"vpc:DescribeVSwitches",
"ecs:DescribeSecurityGroups"
],
"Resource": "*"
}
]
}ecs:RunInstances:ECS インスタンスを作成して起動します。ecs:DescribeInstances:インスタンスの詳細を照会します。vpc:DescribeVpcsとvpc:DescribeVSwitches:インスタンス作成時に VPC と vSwitch を選択できます。ecs:DescribeSecurityGroups:インスタンス作成時にセキュリティグループを選択できます。
VPC ネットワーク設定 (最小権限)
次の例では、VPC と vSwitch を作成するために必要な最小権限を付与します:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"vpc:CreateVpc",
"vpc:CreateVSwitch",
"vpc:CreateSecurityGroup",
"vpc:DescribeVpcs",
"vpc:DescribeVSwitches"
],
"Resource": "*"
}
]
}vpc:CreateVpc:VPC を作成します。vpc:CreateVSwitch:vSwitch を作成します。vpc:CreateSecurityGroup:セキュリティグループを作成します。vpc:DescribeVpcsとvpc:DescribeVSwitches:ネットワークリソースを照会します。
権限拒否エラーのトラブルシューティング
RAM ユーザーがコンソールで AccessForbidden エラーまたは権限拒否メッセージを受け取った場合に問題を特定して解決するには、次の手順に従います:
ステップ 1:API 診断ツールを使用して不足している権限を特定する
Alibaba Cloud API 診断ツールを使用し、失敗したリクエストの RequestID を入力します。このツールを使用すると、不足している正確な AuthAction が特定されます。
ステップ 2:認可範囲の確認
認可範囲が操作のタイプと一致していることを確認してください:
アカウントレベルの操作 (例:
ram:CreateUser):認可範囲は [Alibaba Cloud アカウント全体] に設定する必要があります。範囲を特定のリソースグループに制限すると、これらの操作は失敗します。リソースグループ対応の操作:ポリシーが正しいリソースグループ範囲でアタッチされていることを確認するか、範囲を [Alibaba Cloud アカウント全体] に設定してください。
ステップ 3:暗黙的な依存関係の権限の確認
一部の操作では、主要なアクション以外に追加の権限が必要になる場合があります。例:
Simple Log Service のクエリ:
log:GetLogStoreLogsに加えて、log:GetProjectおよびlog:GetLogStore権限が必要になる場合があります。Milvus コンソールへのログイン:主要な管理アクションに加えて、
CreateConnectionおよびDbmConnect権限が必要です。
必要なすべての権限を特定するには、対応する Alibaba Cloud サービスの RAM 認可に関するドキュメントをご参照ください。
サイズ超過のポリシーの最適化
カスタムポリシーのポリシードキュメントは 6,144 バイトを超えることはできません。この制限を超えると、CreatePolicy API は InvalidParameter.PolicyDocument.Length エラーとメッセージ The policy document size is limited to 6144 bytes を返します。以下の方法でポリシーのサイズを削減できます。
ワイルドカードによるポリシーサイズの削減
同じプレフィックスを共有する複数のアクションをワイルドカードにまとめることで、ポリシーのサイズを大幅に削減できます。たとえば、次のポリシーを次のように変更します:
{"Action": ["oss:GetBucket", "oss:GetObject", "oss:GetBucketAcl", "oss:GetBucketLogging"]}変更後:
{"Action": ["oss:Get*"]}機能別のポリシー分割
複数の機能をカバーする大きなポリシーを個別のポリシーに分割し、それぞれを異なる RAM ユーザーまたはユーザーグループにアタッチします。たとえば、読み取り操作と書き込み操作を 2 つのポリシーに分割します:
読み取り専用ポリシー:
{"Action": ["oss:Get*", "oss:List*"]}書き込みポリシー:
{"Action": ["oss:Put*", "oss:Delete*"]}
リソース別のポリシー分割
リソースごとにポリシーを分割します。たとえば、異なる OSS バケットの権限を異なるポリシーに分離し、各ポリシーが特定のバケットのみの権限を付与するようにします。これにより、単一のポリシーが管理するリソースが多すぎるのを防ぎます。
注意事項
ビジュアルエディターでポリシーを設定する際は、すべてのアクションを選択しないでください。最小権限のアクションセットを選択して、ポリシードキュメントをできるだけ小さく保ってください。
ポリシーを分割した後は、分割後の各ポリシーを RAM ユーザーまたはユーザーグループに個別にアタッチする必要があり、管理が複雑になります。
ワイルドカードでアクションをまとめると、過剰な権限付与につながる可能性があります。ビジネスで実際に必要な権限よりも多くの権限を付与しないように、権限範囲を慎重に確認してください。
ポリシーはアタッチ後すぐに有効になります。待機する必要はありません。
ポリシーのインポート
RAM 管理者として RAM コンソールにログインします。
左側のナビゲーションペインで、 を選択します。
ポリシー ページで、ポリシーの作成 をクリックします。
ポリシーの作成 ページで、引用ポリシー をクリックします。
引用ポリシー ダイアログボックスの右上隅で、ドロップダウンリストから [ポリシーテンプレート] または システムポリシー を選択します。
ポリシーテンプレートまたはシステムポリシーを選択します。
一部のポリシーテンプレートでは、ビジネス要件に基づいてパラメーターを設定する必要があります。
インポートされたポリシーの上書きルールを選択します。
デフォルトでは、インポートされたポリシーの内容が既存の内容を完全に上書きします。[上書きせず、末尾に新しいステートメントを追加する] を選択することもできます。
インポート をクリックします。
ビジュアルエディターまたはスクリプトエディターで、インポートされたポリシーの内容を表示および変更します。
ページ上部の 最適化 をクリックしてから 行う をクリックし、ポリシーの高度な最適化を実行します。
高度なポリシー最適化機能は、次のタスクを実行します:
互換性のないアクションのリソースまたは条件を分割します。
リソースの範囲を絞り込みます。
重複するステートメントを削除するか、ステートメントをマージします。
ポリシーの作成 ページで、OK をクリックします。
ポリシーの作成 ダイアログボックスで、[ポリシー名] と 説明 を入力し、OK をクリックします。
よくある質問
ビジュアルエディターで特定の権限が見つからない、またはポリシーの保存に失敗するのはなぜですか?
この問題は、以下の理由で発生する可能性があります:
アクションがビジュアルエディターでサポートされていない、またはまだリストされていない
oos:StartExecution や swas-open:* のようなワイルドカードパターンなど、新しくリリースされた、または下位レベルの API アクションの一部は、ビジュアルエディターで利用できない場合があります。また、ビジュアルエディターが特定のリソース制限下でワイルドカードパターンを適切に処理できない場合もあります。この問題を解決するには、[スクリプトエディター] タブをクリックし、アクション名を手動で入力してください。
アクション名のスペルミス
一部の API アクション名には、単数形と複数形の違いがあります。たとえば、正しいアクション名は ecs:ReInitDisks であり、ecs:ReInitDisk ではありません。対応する Alibaba Cloud サービスの API リファレンスで正確なアクション名を確認してください。
システムポリシーが同期されていない
AliyunAccountCenterFullAccess などの特定のシステムポリシーが見つからない場合は、そのシステムポリシーの公式 JSON コンテンツを見つけ、[スクリプトエディター] を使用してカスタムポリシーとして再作成してください。
JSON 形式の検証の失敗
JSON の構文が正しいことを確認してください。よくある間違いは次のとおりです:
単一のステートメントで
Resourceフィールドを複数回定義している。複数のリソースを指定するには、単一のResourceフィールド内に JSON 配列としてリストしてください。例:"Resource": ["acs:ecs:*:*:instance/i-aaa", "acs:ecs:*:*:instance/i-bbb"]。不正な ARN 形式を使用している。ARN が
acs:<service>:<region>:<account-id>:<resource-type>/<resource-id>のパターンに従っていることを確認してください。
FullAccess またはカスタムポリシーを付与した後、コンソールにアクセスしたり操作を実行したりできないのはなぜですか?
この問題は、以下の理由で発生する可能性があります:
コンソールアクセスの依存関係
一部の製品コンソールでは、ビジネス固有の権限に加えて、PowerUserAccess などの基本的なコンソールアクセス権限が必要です。ビジネス固有の FullAccess ポリシーを付与するだけでは、コンソールページをロードするのに十分でない場合があります。必要な基本アクセスポリシーを RAM ユーザーにアタッチしてください。
認可範囲の不一致
ポリシーをアタッチする際に選択した認可範囲が、ポリシー内の Resource 定義と一致していることを確認してください。たとえば、OceanBase などのサービスのインスタンスレベルの操作では、認可範囲を [Alibaba Cloud アカウント全体] に設定し、ポリシーでインスタンスの ARN を指定する必要があります。
ポリシーの優先度と競合
別のポリシーの Deny ステートメントが Allow 権限を上書きしていないか、またはカスタムポリシーとシステムポリシーの間に競合が存在しないかを確認してください。MQTT パブリックネットワークアクセスなどの複雑なシナリオで、カスタムポリシーが有効にならない場合は、公式に推奨されているシステムポリシー (例:AliyunMQFullAccess) を試して接続性を確認してから、カスタムポリシーのトラブルシューティングをさらに進めてください。