条件

ポリシー・ステートメントのオプションの条件要素は、IAMで指定された属性に基づいてアクセスを制限します。

条件は、指定されたパラメータに基づいてリソースを返します。たとえば、条件を使用して、名前に特定の文字が含まれるリソースを返します。

単一条件の構文: variable =|!= value

複数条件の構文: any|all {<condition>,<condition>,...}

一連の条件に対して論理ORを作成するには、anyを使用します。一連の条件に対して論理ANDを作成するには、allを使用します。

重要

条件照合では、大/小文字が区別される名前は無視されます。たとえば、BucketAという名前のバケットの条件も、bucketAという名前のバケットと一致します。

  • String:
    • 'johnsmith@example.com'
    • 'ocid1.compartment.oc1.exampleuniqueID' (値を囲む一重引用符が必要です)
  • パターン:
    • /hr*/ (「hr」で始まる文字列と一致)

    • /*hr/ (「hr」で終わる文字列と一致する)

    • /*hr*/ (「hr」を含む文字列と一致)

ノート

次の例では、条件を指定する文では、GroupAdminsにすべてのユーザーおよびグループをリストできません。完全性のために、inspect動詞を含む文が追加されます。「拒否されたリクエストのリクエスト結果に適用できない変数」を参照してください。

例:

  • 単一条件:

    1つのリソース・タイプ(グループ)の単一条件

    Allow group GroupAdmins to manage groups in tenancy where target.group.name = /A-Users-*/
    Allow group GroupAdmins to inspect groups in tenancy

    多くのリソース・タイプ(ユーザーおよびグループ)に対する単一条件

    Allow group GroupAdmins to inspect users in tenancy
    Allow group GroupAdmins to use users in tenancy where target.group.name != 'Administrators'
    Allow group GroupAdmins to inspect groups in tenancy
    Allow group GroupAdmins to use groups in tenancy where target.group.name != 'Administrators'

    1つのリソース(グループ)の多くの条件

    Allow group NetworkAdmins to manage virtual-network-family in tenancy where target.compartment.id != 'ocid1.compartment.oc1.exampleuniqueID'
  • 複数の条件

    次のポリシーにより、GroupAdminsは、A-Adminsグループ自体を除き、名前が「A-」で始まるグループを作成、更新または削除できます:

    Allow group GroupAdmins to manage groups in tenancy where  all {target.group.name=/A-*/,target.group.name!='A-Admins'}
    Allow group GroupAdmins to inspect groups in tenancy

拒否されたリクエストのリクエスト結果に適用できない変数

変数が受信リクエストに適用されない場合、条件はリクエストをfalseとして評価し、リクエストは拒否されます。たとえば、Administrators以外のグループのユーザーを追加または削除する基本的なポリシー・ステートメントを次に示します。

Allow group GroupAdmins to use users in tenancy where target.group.name != 'Administrators'

Allow group GroupAdmins to use groups in tenancy where target.group.name != 'Administrators'

GroupAdminsのユーザーが、ListUsersUpdateUser(ユーザーの説明を変更できる)などのユーザーに対して一般的なAPI操作をコールしようとした場合、それらのAPI操作はuse usersでカバーされていても、リクエストは拒否されます。use usersのポリシー・ステートメントの例には、target.group.name変数が含まれていますが、ListUsersまたはUpdateUserリクエストではグループは指定されていません。target.group.nameが指定されなかったため、リクエストは拒否されます。

API操作に特定のグループが含まれない場合に一般ユーザーにアクセス権を付与するには、付与するアクセス・レベルを付与するが、条件を含まない別の文を追加する必要があります。たとえば、ListUsersへのアクセス権を付与するには、次の文のような文が必要です。

Allow group GroupAdmins to inspect users in tenancy

あるいは、UpdateUserへのアクセス権を付与する場合、次のステートメントが必要です(use動詞にはinspect動詞の機能が含まれているため、ListUsersも対象)。

Allow group GroupAdmins to use users in tenancy

この一般的な概念では、ターゲット変数を含むその他のリソース・タイプ(ListGroupsなど)も適用されます。

タグ・ベースのアクセス制御

条件およびタグ変数のセットを使用して、リソースに適用されるタグに基づいてアクセスを定義するポリシーを記述します。アクセスを、リクエストしているリソース(ポリシー内のグループまたは動的グループ)またはリクエストのターゲット(リソースのまたはコンパートメント)に存在するタグに基づいて制御することができます。タグベースのアクセス制御により、ポリシーに対する柔軟性が得られ、コンパートメント、グループおよびリソースにまたがるアクセスを定義できます。タグによってアクセスの範囲を指定するポリシーを記述する方法の詳細は、タグを使用したアクセスの管理を参照してください。