条件

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

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

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

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

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

重要

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

  • 文字列:
    • '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など)も適用します。

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

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