技術ブログ
渡部です。これは、(全部俺) Oracle Cloud Infrastructure Advent Calendar 2018の11日目のエントリです。
前日のエントリで、ポリシーステートメントの構文("Allow"の構文)を示しましたが、実はWHERE句に関する説明を割愛していました。
WHERE句を使用しなくてもポリシーステートメント("Allow"文)を作成できますが、 WHERE句を使用せずにsubject / verb / resource-type / locationを使用するだけでは、操作許可の条件指定は比較的粒度の粗い制御にとどまります。 WHERE句を使用すると、subject / verb / resource-type / locationの指定に加えて、より粒度の細かい操作許可の条件指定を行なうことができるようになります。
WHERE句には条件を指定しますが、条件を満たす操作の実行が許可されます。 条件には変数を含めます。
以下に変数を用いたポリシーステートメントの例を示します。
# バケット一覧表示とBucketAの読み込み+ダウンロードを許可
Allow group ObjectReaders to read objects in compartment ABC
where target.bucket.name='BucketA'
# バケット一覧表示とBucketAへのオブジェクトアップロードとオブジェクト一覧表示を許可
Allow group ObjectWriters to manage objects in compartment ABC
where all { target.bucket.name='BucketA',
any {request.permission='OBJECT_CREATE', request.permission='OBJECT_INSPECT'}}
# 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'
# ホーム リージョンがPhoenixのグループ メンバーだけが、IAMリソースを管理を許可
Allow group Phoenix-Admins to manage all-resources in tenancy where request.region='phx'