カスタムポリシーを使用すると、特定のアクセス制御要件を満たすことができます。RAM コンソールでは、ビジュアルエディターまたはスクリプト編集を使用してカスタムポリシーを作成できます。このトピックでは、カスタムポリシーを作成するための基本的な概念、ユースケース、手順、構文、および例について説明します。
ユースケース
システムポリシーは、粒度の粗い権限を提供します。きめ細かなアクセス制御が必要な場合は、カスタムポリシーを作成できます。
たとえば、RAM ユーザーに、スナップショット設定のクエリのみを許可するカスタムポリシーを作成できます。
操作手順
以下の例では、カスタムポリシーの作成方法を示します。
例 1:スナップショット設定のクエリ
RAM ユーザーにスナップショット設定のクエリのみを許可するには、次の手順に従います。
-
ポリシーの作成 ページに移動します。**[サービス]** で、**[Media Services]** > **[ApsaraVideo Live]** を選択します。
-
**[読み取りアクション]** リストを展開します。検索ボックスに「DescribeLiveSnapshotConfig」と入力し、結果から選択します。
-
OK をクリックします。
-
ポリシー名を入力し、**[OK]** をクリックします。
-
RAM ユーザーを作成し、新しいポリシーをアタッチします。詳細については、「RAMユーザーの作成と権限付与」をご参照ください。
これらの手順を完了すると、RAM ユーザーは DescribeLiveSnapshotConfig API を呼び出して正しいデータを受信できます。他の API を呼び出そうとすると、権限エラーが返されます。
例 2:IPアドレスによるスナップショット設定のクエリ
例 1 では、DescribeLiveSnapshotConfig API を呼び出す権限を付与します。IP アドレスによるアクセス制限など、よりきめ細かな制御を追加するには、次の手順に従います。
-
ポリシー ページに移動し、例 1 で作成したポリシーを見つけます。
-
ポリシー名をクリックして、ポリシー詳細ページを開きます。
-
ポリシーの変更 をクリックして編集ページを開き、「ビジュアルエディター」タブを選択します。 編集ページには、ポリシータイプが [カスタムポリシー] で、現在のバージョンが v2 であることが表示されます。 [ポリシードキュメント] タブには、Effect 値が Allow のポリシーの JSON コンテンツが表示されます。
-
「条件」セクションで、[条件の追加] をクリックします。キーを acs:SourceIp に、演算子を IpAddress に、値を目的の IP Address に設定します。
-
OK をクリックし、もう一度 OK をクリックして変更を保存します。
これらの手順を完了すると、指定された IP アドレスからリクエストが送信された場合にのみ、操作は成功します。それ以外の場合、リクエストは権限エラーで失敗します。
カスタムポリシーの作成方法の詳細については、「カスタムポリシーの作成」をご参照ください。
構文
ポリシーは、**ポリシー詳細ページ**の **[ポリシードキュメント]** タブに JSON 形式で記述されています。**例 2** の場合、ポリシードキュメントは次のようになります。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "live:DescribeLiveSnapshotConfig",
"Resource": "*",
"Condition": {
"IpAddress": {
"acs:SourceIp": [
"127.0.0.1"
]
}
}
}
]
}
以下に、ポリシードキュメントの要素について説明します。
-
Version
Version 要素は、ポリシーのバージョンを定義します。値は 1 である必要があります。
-
Statement
ポリシーは 1 つ以上のステートメントブロックで構成されています。各ステートメントは権限を定義し、アクション、エフェクト、リソース、条件などの要素を含みます。リクエストが行われると、システムは各ステートメントを評価します。Deny エフェクトは常に Allow エフェクトを上書きします。リクエストは、1 つ以上の Allow ステートメントに一致し、Deny ステートメントに一致しない場合にのみ承認されます。
-
Effect
ステートメントのエフェクトを定義します。Allow または Deny を指定できます。
-
Action
権限の対象となる API オペレーションを指定します。ApsaraVideo Live のアクションは、
live:API名形式です (例:live:DescribeLiveSnapshotConfig)。複数のアクションはカンマで区切ります。複数のアクションを組み合わせて、権限のセットを作成できます。利用可能なすべての API オペレーションのリストについては、「API リファレンス」をご参照ください。
-
Resource
ポリシーが対象とするリソースを指定します。ワイルドカード文字 (*) を使用できます。形式は
acs:{ramCode}:{region}:{accountId}:{relative}です。Resource 要素には、複数のリソースのリストを含めることができます。ApsaraVideo Live の場合、ramCode の有効な値は live、cdn、および live-interaction です。region フィールドは現在サポートされておらず、*に設定する必要があります。accountId はお客様のアカウント ID です。relative は特定のリソースを指定します。多くの場合 * に設定されますが、一部の API はリソースレベルの権限をサポートしています。例に示すように、Resource 要素全体を * に設定することもできます。説明ビジュアルエディターを使用すると、API オペレーションに基づいて対応する ramCode が自動的に選択されます。
-
Condition
ポリシーが有効になる条件を指定します。この要素はオプションです。
以下の条件がサポートされています。
条件
説明
値
acs:SourceIp
IP アドレスまたは CIDR ブロックを指定します。
IP アドレス。ワイルドカード文字 (*) がサポートされています。
acs:SecureTransport
リクエストが HTTPS を使用する必要があるかどうかを指定します。
true または [いいえ]
acs:MFAPresent
ユーザーが多要素認証 (MFA) を使用してログインする必要があるかどうかを指定します。
true または false
acs:CurrentTime
リクエストがサーバーで受信された時刻を指定します。
ISO 8601 形式の時刻。例: 2012-11-11T23:59:59Z。
ポリシーの基本要素と構文の詳細については、「ポリシー要素」および「ポリシーの構造と構文」をご参照ください。
スクリプト編集
ポリシーの構文を理解したら、スクリプト編集を使用してポリシーを変更することもできます。たとえば、例 2 のポリシーに IP アドレス 127.0.0.2 を追加するには、次の手順に従います。
-
ポリシー ページに移動し、例 1 で作成したポリシーを見つけます。
-
ポリシー名をクリックして、ポリシー詳細ページを開きます。
-
ポリシーの変更 をクリックして編集ページを開き、[JSON] タブを選択します。
-
acs:SourceIp配列に、IP アドレス 127.0.0.2 を追加します。 -
OK をクリックして変更を保存します。
更新されたポリシードキュメントは次のようになります。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "live:DescribeLiveSnapshotConfig",
"Resource": "*",
"Condition": {
"IpAddress": {
"acs:SourceIp": [
"127.0.0.1",
"127.0.0.2"
]
}
}
}
]
}
バージョン管理
ポリシーを以前のバージョンに戻すには、バージョン管理を使用します。ポリシー詳細ページで、バージョン タブを選択し、対象のバージョンを見つけて[デフォルトバージョンとして設定] をクリックします。
ポリシーには最大 5 つのバージョンを設定できます。
高度な使用法
カスタムポリシーを作成する、以下のビジネスシナリオを考えてみましょう。
-
AddLiveAppSnapshotConfig 操作の権限を制御したい。
-
この操作は、domainA と domainB でのみ許可されるようにします。
これらの要件を満たすために、リソースレベルでアクセスを制御できます。次の手順に従います。
-
ポリシーの作成 ページに移動します。**[サービス]** で、**[Media Services]** > **[ApsaraVideo Live]** を選択します。
-
**[書き込みアクション]** リストを展開します。検索ボックスに「AddLiveAppSnapshotConfig」と入力し、結果から選択します。
-
[リソース] セクションで、[特定のリソース] を選択し、[リソースの追加] をクリックします。[アカウント] を * に、[リソース] を domainA に設定します。この手順を繰り返して domainB を追加します。
-
OK をクリックします。
-
ポリシー名を入力し、**[OK]** をクリックします。ポリシードキュメントは次のようになります。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "live:AddLiveAppSnapshotConfig", "Resource": [ "acs:cdn:*:*:domain/domainA", "acs:cdn:*:*:domain/domainB" ] } ] } -
作成したポリシーをターゲットの RAM ユーザーにアタッチします。
これらの手順を完了すると、RAM ユーザーは domainA と domainB のスナップショット設定のみを追加できます。
リソースレベルの制御の形式は、API オペレーションによって異なります。ビジュアルエディターを使用して、きめ細かな権限を設定することを推奨します。