本ドキュメントでは、RAMの権限付与ポリシーの構文構造およびルールについて説明します。 日常的に使用するには、次の内容をよくお読みください。

ポリシー構造

権限付与ポリシーの構造には、ポリシーバージョン番号、及び 権限付与ステートメントリストが含まれています。 各権限付与ステートメントには次の要素を含めています:Effect(権限付与のタイプ)、Action(操作名リスト)、Resource(操作対象リスト)、及び Condition(条件)、その中でもConditionはオプションです。

ポリシーの基本的な構造:

図 1. ポリシー構造


形式のチェック(JSON)

RAMはJSON形式の説明にのみ対応しています。 ポリシーを作成、或いはアップデートする際には、RAMはまず、JSON形式が正しいかどうかをチェックします。

  • JSONの構文については、 [RFC 7159]を参考してください。
  • オンラインJSON形式のバリデータとエディターを使用して、JSONテキストの有効性を検証できます。

ポリシー構文

ポリシーで使用される文字とルール、及びポリシーの 構文説明を理解します。

文字及びルール

ポリシーに含まれるJSON文字:{ } [ ] " , :、 構文の説明に使用される特殊文字:= < > ( ) |。

文字の使用注意事項

  • 要素は複数の値に対応している場合は、コンマや省略記号を使用して区切ります。例:[ <action_string>, <action_string>, ...] ...]. 複数値に対応するすべての構文には、単一値も使用できます。 そして2つの表現は同等です: "action ": [&lt;Action_string>] と "action ": &lt;Action_string>
  • クエスチョンマークがついた要素はオプション要素であることを示しています。例:<condition_block?> >
  • 複数の値が縦線(|)で区切られている場合は、値の中のいずれか1つだけを選択できることを示しています。 たとえば:("allow" | "deny ")
  • 二重引用符で囲まれた要素は、テキスト文字列であることを示しています。 たとえば:<version_block> = "Version" : ("1")
構文の説明

ポリシー 構文の説明は次の通りです:

Policy = {
                    &lt;Version _block>,
                    &lt;Wollongong _block>
}
&lt;Version _block> = "version": ("1 ")
&lt;Direct_block> = "statement": [&lt;Statement>, &lt;Statement>,...]
&lt;Statement> = { 
&lt;Glast_block>,
&lt;Action_block>,
&lt;Think_block>,
&lt;Condition _block? >
}
&lt;Glast_block> = "effect": ("allow" | "deny ")  
&lt;Action_block> = ("action" | "notaction "): 
("*" | [&lt;Action_string>, &lt;action_string>,...])
&lt;Think_block> = ("resource" | "notresource "): 
("*" | [&lt;Think_string>, &lt;think_string>,...])
&lt;Condition _block> = "condition": &lt;condition _map>
&lt;Condition _map> = {
&lt;Maid> :{ 
&lt;Condition_key_string>: &lt;condition_value_list>,
&lt;Condition_key_string>: &lt;condition_value_list>,
...
},
&lt;Maid> :{
&lt;Condition_key_string>: &lt;condition_value_list>,
&lt;Condition_key_string>: &lt;condition_value_list>,
...
}, ...
}  
&lt;Condition_value_list> = [&lt;condition _value>, &lt;condition _value>,...]
&lt;Condition _value> = ("string" | "Number" | "Boolean ")

構文の説明は次の通りです:

  • バージョン: 現在対応しているポリシーのバージョンは1です。
  • 権限付与ステートメント:一つのポリシーには複数の権限付与ステートメントが同時に存在することが可能です。
    • 各権限付与ステートメントは、DenyまたはAllowのいずれかになります。 権限付与ステートメントには、Actionは複数の操作に対応しているリストです、Resource も複数の対象に対応しているリストです。
    • 各権限付与ステートメントは独立した条件(Condition)に対応しています。 一つの条件ブロックは複数の条件操作タイプ、及びこれらの条件の論理的組み合わせに対応しています。
  • Deny優先度:ユーザーには複数のポリシーが付与されることが可能です、これらのポリシーにAllowとDenyが同時に存在している場合は、 Denyが優先されます(Allowが認識されません)。
  • 要素の値:
    • 値が数字(Number)或いはブール(Bolean)である場合は、文字列と同じように、二重引用符で囲む必要があります。
    • 値が文字列(String)である場合は、 (*) と (?)でのファジーマッチングに対応します。
      • (*)は0以上の英字を意味します。
      • (?)は1つの英字を意味します。

      たとえば、「ecs:Describe*」はECSでのすべてのDescribeで始まる API操作の名称を意味しています。

ポリシー要素の使用ルール

ポリシー構文での各要素の使用ルールを理解します。

Effect (権限付与のタイプ)

Effectの値はAllow、或いはDenyです。 たとえば:"effect": "allow"

Action (操作名リスト)

Actionは複数の値に対応しています、その値はクラウドサービスにより定義されたAPI操作名です。形式は次の通りです:
<service-name>:<action-name>

説明:

  • service-name::Alibaba Cloudプロダクトの名称、例:ecs, rds, slb, oss, otsなど。
  • action-name:Serviceに関連付けられた操作インターフェイスの名称。

説明の例:

"Action": ["oss:ListBuckets", "ecs:Describe*", "rds:Describe*"]

Resource (操作対象のリスト)

Resourceは一般的に操作対象を意味しています。例:ECS 仮想マシンインスタンス、OSS ストア対象。 Alibaba Cloudサービスのリソース名は次のように指定されます:

acs:<service-name>:<region>:<account-id>:<relative-id>

説明

  • acs: Aliyun Cloud Serviceのイニシャル、Alibaba Cloudのパブリッククラウドプラットフォームを意味しています。
  • service-name: Alibaba Cloud が提供するオープンサービスの名称です 例:ecs、oss、テーブルストアなど)。
  • region:リージョン情報です。 このオプションに対応していない場合は、代わりにワイルドカード “*” を使用します。
  • Account-ID:アカウントID、例: 1234567890123456、 “*”で置き換えることも可能です。
  • relative-id:サービス関連のリソースです。 その意味は特定のServiceにより 指定されます。 この形式の説明部分はファイルパスに似たようなツリー構造に対応しています。 OSSを例に、 relative-id = “mybucket/dir1/object1.jpg” はOSS対象を意味しています。

説明の例:

"Resource": ["acs:ecs:*:*:instance/inst-001", "acs:ecs:*:*:instance/inst-002", "acs:oss:*:*:mybucket", "acs:oss:*:*:mybucket/*"]
Condition (条件)

条件ブロック(Condition Block) は1つまたは複数の条件節で構成されています。、 条件節は、アクションタイプ、キーワード、および条件値で構成されます。 アクションタイプとキーワードは、次の文で詳述されます。

条件ブロック判定ロジック

次の図は、条件が満たされているかどうかを判断する基準を示しています。

図 2. 条件を満たしているかどうかを判断する基準


詳細のルールは次の通りです:

  • 一つの条件キーワードは一つまたは複数の値に対応します。 条件を判断している場合、条件キーワードの値が指定している値のいずれかとマッチした場合、その条件が満たされたと判定します。
  • 同一条件操作タイプの条件節の複数の条件キーワードが同時にマッチした場合は、その条件節が満たされたと判定します。
  • 条件ブロックは、すべての条件節が満たされた場合にのみ、満たされたと判定します。
条件操作タイプ

次の条件に対応しています:String型、Numeric型、日付型(日付及び時間)、 Boolean型、及びIPアドレス型。

これらの条件操作タイプは、それぞれ次の方法に対応しています:

String Numeric Date and time Boolean IP address
Stringequals Numericequals Dateequals bool IPaddress
Stringnotes Numericnotequals Datenotequals - Notipaddress
Stringequalsignorecase Numericlessthan Datelessthan - -
Stringnotequalsignorecase Numericlessthanequals Datelessthanequals - -
Stringlike Numericgreaterthan Dategreaterthan - -
Stringnotlike Numericgreaterthanequals Dategreaterthanequals - -
条件キー(Condition-key)

Alibaba Cloudに保留された条件キーワードは、次の命名形式を採用しています:

acs:<conditon-key>

Ali Cloud Serviceに保留された共通条件キーワードは次のとおりです:

共通条件キーワード データ型 説明
acs: CurrentTime Date and time Web ServerがISO8601形式でリクエストを受信した時刻です。 例:2012-11-11T23: 59: 59Z
acs: SecureTransport Boolean リクエストがHTTPSなどの安全なチャネルを通して送信されているかどうか。
acs: SourceIp IP address リクエストを送信したコンソールのIPアドレス。
ACS: mfapresent Boolean ユーザーログイン(2段階認証)中に多要素認証が使用されているかどうか。

クラウドプロダクトはプロダクトレベルの条件キーワードを定義することができます、その形式は次のようになります:

<service-name>:<condition-key>

一部のクラウドプロダクトは次のように条件キーワードを定義しています:

プロダクト名称 条件キーワード データ型 説明
ECS ecs:tag/<tag-key> String ECSリソースのタグキーワード、ユーザーによりカスタマイズ可能
RDS rds:ResourceTag/<tag-key> String RDSリソースのタグキーワード、ユーザーによりカスタマイズ可能
OSS oss:Delimiter String OSSが対象名をグループ化するセパレータ
oss:Prefix String OSS対象名のプレフィックス

ポリシーの例

次のポリシーには2つの権限付与ステートメントを含めています:

  • 最初の権限付与ステートメントは、中国東部1(杭州)におけるすべてのECSリソースに 対する確認の権限を付与します(ecs:Describe*4);
  • 2番目の権限付与ステートメントはOSSのMybucketバケット内の対象への読み取りアクセス権限を付与します(oss:ListObjects,oss:GetObject)、 そしてアクセス元のIPは 42.120.88.10と42.120.66.0/24であるように制限をかけます。
{
    Version: "1 ",
    "Statement ":[
        {
            "Effect": "allow ",
            "Action": "ECs: Describe *",
            "Resource": "ACS: ECs: CN-Hangzhou :*:*"
        },
        {
            "Effect": "allow ",
            "Action ":[
                "Oss: maid ",
                "Oss: GetObject"
            ],
            "Resource ":[
                "ACS: OSS: *: mybucket ",
                "ACS: OSS: *: mybucket /*"
            ],
            "Condition ":{
                "IPaddress ":{
                    "ACS: sourceip": ["maid", "maid/24"]
                }
            }
        }
    ]
}