カスタムポリシーを使用すると、特定のアクセス制御要件を満たすことができます。Resource Access Management (RAM) コンソールでは、ビジュアルエディタまたはスクリプト編集を使用してカスタムポリシーを作成できます。このトピックでは、カスタムポリシーを作成するための基本的な概念、利用シーン、手順、構文、および例について説明します。
利用シーン
システムポリシーは粗粒度の権限を提供します。きめ細かなアクセス制御が必要な場合は、カスタムポリシーを作成できます。
たとえば、RAM ユーザーにスナップショット設定のクエリのみを許可する権限を付与するカスタムポリシーを作成できます。
操作手順
以下の例では、カスタムポリシーの作成方法を示します。
例 1:スナップショット設定のクエリ
RAM ユーザーにスナップショット設定のクエリのみを許可する権限を付与するには、次の手順を実行します。
-
[ポリシーの作成] ページに移動します。サービスとして [メディアサービス] > [ApsaraVideo Live] を選択します。
-
読み取りアクションのリストを展開します。検索ボックスに「DescribeLiveSnapshotConfig」と入力し、結果から選択します。
-
OK をクリックします。
-
ポリシー名を入力し、[OK] をクリックします。
-
RAM ユーザーを作成し、新しいポリシーをアタッチします。詳細については、「RAM ユーザーの作成と権限付与」をご参照ください。
これらの手順を完了すると、RAM ユーザーは DescribeLiveSnapshotConfig 操作を呼び出し、正しいデータを受信できます。他の操作を呼び出そうとすると、権限エラーが返されます。
例 2:IP によるスナップショット設定のクエリ
例 1 では、DescribeLiveSnapshotConfig 操作を呼び出す権限を付与します。IP アドレスによるアクセス制限など、より詳細な制御を追加するには、次の手順を実行します。
-
[ポリシー] ページに移動し、例 1 で作成したポリシーを見つけます。
-
ポリシー名をクリックして、ポリシー詳細ページを開きます。
-
ポリシーの変更 をクリックして変更ページを開き、[ビジュアルエディタ] タブを選択します。変更ページには、ポリシータイプが カスタムポリシー で、現在のバージョンが v2 であることが表示されます。[ポリシードキュメント] タブには、ポリシーの JSON コンテンツが表示され、Effect の値は Allow です。
-
[条件] セクションで、[条件の追加] をクリックします。[キー] を 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 つ以上の Statement ブロックで構成されます。各ステートメントは権限を定義し、Action、Effect、Resource、Condition などの要素を含みます。リクエストが行われると、システムは各ステートメントを評価します。Deny 効果は常に Allow 効果をオーバーライドします。リクエストは、1 つ以上の Allow ステートメントに一致し、Deny ステートメントに一致しない場合にのみ承認されます。
-
Effect
ステートメントの効果を定義します。Allow または Deny を指定できます。
-
Action
権限の API オペレーションを指定します。ApsaraVideo Live のアクションは
live:API 名のフォーマットを使用します (例:live:DescribeLiveSnapshotConfig)。複数のアクションはカンマで区切ります。複数のアクションを組み合わせて権限のセットを作成できます。詳細については、「API リファレンス」をご参照ください。
-
Resource
ポリシーが対象とするリソースを指定します。ワイルドカード (*) を使用できます。フォーマットは
acs:{ramCode}:{region}:{accountId}:{relative}です。Resource 要素には複数のリソースのリストを含めることができます。ApsaraVideo Live の場合、ramCode の有効な値は live、cdn、および live-interaction です。region フィールドは現在サポートされておらず、*に設定する必要があります。accountId はご利用のアカウント ID です。relative は特定のリソースを指定します。多くの場合 * に設定されますが、一部の操作ではリソースレベルの権限がサポートされています。例に示すように、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 でのみ許可されるべきである。
これらの要件を満たすために、リソースレベルでアクセスを制御できます。次の手順を実行します。
-
[ポリシーの作成] ページに移動します。サービスとして [メディアサービス] > [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 オペレーションによって異なります。ビジュアルエディタを使用して、きめ細かな権限を設定することを推奨します。