キュー・ポリシー

Oracle Cloud Infrastructure Identity and Access Management (IAM)サービスを使用して、キューのポリシーを作成します。

このトピックでは、キュー・サービスへのアクセスを制御するポリシーの記述に関する詳細を説明します。

ポリシーを記述する場合、キュー・サービスでは次の方法を使用した認証がサポートされることに注意してください。

  • ユーザー名および認証トークン: REST APIとSTOMPプロトコルの両方でサポートされます。
  • インスタンス・プリンシパル: REST APIでのみサポートされます(コンピュート・インスタンスは動的グループに割り当てる必要があります)。

ポリシー構文の概要

ポリシー・ステートメント全体の構文:

allow <subject> to <verb>
                    <resource-type> in <location> where <condition>
                

たとえば、次のように指定できます。

  • <subject> として、グループまたは動的グループの名前またはOCID。または、any-userを使用して、テナンシ内のすべてのユーザーを含めることができます。

  • <subject> に1つ以上の権限のアクセス権を付与するため、 <verb> として、inspectreaduseおよびmanage

    inspectreadusemanageと進むに連れて、アクセス権のレベルは一般に高くなり、付与される権限は累積されます。たとえば、useには、readに加えて更新する権限が含まれます。

  • resource-type にはリソースのファミリ(virtual-network-familyなど)。または、vcnssubnetsなど、ファミリ内の個々のリソースを指定できます。

  • <location> として、コンパートメントの名前またはOCID。または、tenancyを使用して、テナンシ全体を含めることができます。

  • <condition> に1つ以上の条件。アクセス権を付与するためには、これが満たされる必要があります。複数の条件では、anyまたはallを使用できます。

    1つの条件は1つ以上の変数で構成されます。変数は、リクエスト自体(request.operationなど)またはリクエストで処理されるリソース(target.queue.idなど)に関連するものを使用できます。たとえば、グループが特定のワークスペースのみを管理できるようにするには:

    allow group <group-name> to manage queues in compartment <compartment-name> where target.queue.id = '<queue-ocid>'

    または、グループがテナンシ内のすべてのキュー・リソースを管理できるようにするには:

    allow group <group-name> to manage queues in tenancy

ポリシーの作成の詳細は、ポリシーの開始およびポリシー参照を参照してください。

リソース・タイプ

ユーザーにキュー・リソースへのアクセス権を付与するには、キュー・リソース・タイプを含むIAMポリシーを作成します。

すべてのキュー・リソースにアクセスするには、queuesリソース・タイプを使用します。

ユーザーがキューを管理しないが、キューに作成したりキューから消費したりする場合は、次の個別のリソース・タイプを使用します:

  • queue-push
  • queue-pull

詳細は、ポリシーの例を参照してください。

サポートされている変数

キュー・サービスでは、すべての一般的な変数に加えて、ここにリストされている変数がサポートされています。

OCIサービスでサポートされる一般的な変数の詳細は、すべてのリクエストの一般的な変数を参照してください。

変数 変数タイプ ソース
target.queue.id エンティティ(OCID) リクエスト
target.queue.name 文字列 リクエスト

動詞+リソース・タイプの組合せの詳細

ポリシーの作成には、様々なOracle Cloud Infrastructure動詞およびリソース・タイプを使用できます。

次の表に、キューの各動詞でカバーされている権限およびAPI操作を示します。アクセスのレベルは、inspectからreadusemanageの順に累積します。表のセルのプラス記号(+)は、そのすぐ上のセルと比較して増分アクセスを示しますが、「追加なし」は増分アクセスを示しません。

queue
動詞 権限 全部カバーされるAPI 一部カバーされるAPI
inspect

QUEUE_INSPECT

ListQueues

ListWorkRequests

ListWorkRequestErrors

ListWorkRequestLogs

なし

read

INSPECT +

QUEUE_READ

INSPECT +

GetQueue

GetWorkRequest

GetStats

ListChannels

なし

use

READ +

QUEUE_UPDATE

QUEUE_PRODUCE

QUEUE_CONSUME

READ +

UpdateQueue

PutMessages

GetMessages

UpdateMessage

DeleteMessage

なし

manage

USE +

QUEUE_CREATE

QUEUE_DELETE

QUEUE_MOVE

USE +

CreateQueue

DeleteQueue

MoveQueue

なし

queue-push
動詞 権限 全部カバーされるAPI 一部カバーされるAPI
inspect

なし

なし

なし

read

なし

なし

なし

use

QUEUE_PRODUCE

PutMessages

なし

manage

なし

なし

なし

queue-pull
動詞 権限 全部カバーされるAPI 一部カバーされるAPI
inspect

なし

なし

なし

read

なし

なし

なし

use

QUEUE_CONSUME

GetMessages

UpdateMessage

DeleteMessage

なし

manage

なし

なし

なし

API操作ごとに必要な権限

次の表に、キューのAPI操作を、リソース・タイプ別にグループ化して論理的な順序で示します。

リソース・タイプは、queuesqueue-pushおよびqueue-pullです。

権限の詳細は、権限を参照してください。

必要な権限
API操作 操作の使用に必要な権限
ListQueues QUEUE_INSPECT
CreateQueue QUEUE_CREATE
GetQueue QUEUE_READ
DeleteQueue QUEUE_DELETE
MoveQueue QUEUE_MOVE
UpdateQueue QUEUE_UPDATE
ListWorkRequests QUEUE_INSPECT
GetWorkRequest QUEUE_READ
ListWorkRequestErrors QUEUE_INSPECT
ListWorkRequestLogs QUEUE_INSPECT
GetStats QUEUE_READ
ListChannels QUEUE_READ
PutMessages QUEUE_PRODUCE
GetMessages QUEUE_CONSUME
UpdateMessage QUEUE_CONSUME
DeleteMessage QUEUE_CONSUME
CreateConsumerGroup QUEUE_CONSUMER_GROUP_CREATE
DeleteConsumerGroup QUEUE_CONSUMER_GROUP_DELETE
GetConsumerGroup QUEUE_CONSUMER_GROUP_READ
UpdateConsumerGroup QUEUE_CONSUMER_GROUP_UPDATE
ListConsumerGroups QUEUE_CONSUMER_GROUP_INSPECT

コンシューマ・グループのポリシー

異なるユーザーまたはアプリケーションがキューおよびコンシューマ・グループを使用できるように、権限を設定します。

キュー・ファンアウトおよびコンシューマ・グループで作業を行うために、様々なチームまたはアプリケーションに権限を付与する必要があります。いくつかの例を示します。

キューおよびコンシューマ・グループの完全管理を許可

これは、キューを作成し、ファンアウトを有効にし、すべてのコンシューマ・グループを管理する必要がある場合に使用します。

allow group QueueAdmins to manage queues in compartment <compartment-name>
allow group QueueAdmins to manage queue-consumer-groups in compartment <compartment-name>
                    

付与される権限:

  • QUEUE_CONSUMER_GROUP_CREATE
  • QUEUE_CONSUMER_GROUP_UPDATE
  • QUEUE_CONSUMER_GROUP_DELETE
  • QUEUE_CONSUMER_GROUP_READ
  • QUEUE_CONSUMER_GROUP_INSPECT

コンシューマ・グループへの読取り専用アクセスの許可

これは、コンシューマ・グループとその設定のみをユーザーが参照する場合に使用します。変更は許可されません。

 allow group QueueAuditors to inspect queue-consumer-groups in compartment <compartment-name>
allow group QueueAuditors to read queue-consumer-groups in compartment <compartment-name>
                    

付与される権限:

  • QUEUE_CONSUMER_GROUP_INSPECT
  • QUEUE_CONSUMER_GROUP_READ

コンシューマ・グループの管理を許可するがキューを許可しない

これは、コンシューマ・グループおよびフィルタを編成および設定するが、キュー自体を混乱させないようにするチームに使用します。

allow group FanoutOperators to manage queue-consumer-groups in compartment <compartment-name>
                    

付与される権限:

  • QUEUE_CONSUMER_GROUP_CREATE
  • QUEUE_CONSUMER_GROUP_UPDATE
  • QUEUE_CONSUMER_GROUP_DELETE
  • QUEUE_CONSUMER_GROUP_READ
  • QUEUE_CONSUMER_GROUP_INSPECT

プロデューサによるキューへのメッセージの送信を許可(コンシューマ・グループ・アクセスなし)

これは、メッセージをキューに送信(プッシュ)するだけで、グループの詳細を読み取らない、または表示しないアプリに使用します。

allow dynamic-group QueueProducers to use queue-push in compartment <compartment-name>
                    

付与される権限:

  • QUEUE_PRODUCE

コンシューマが特定のコンシューマ・グループから消費することを許可

これは、特定のコンシューマ・グループからのみメッセージをプルする必要があり、他のコンシューマ・グループが表示されないアプリケーションまたはチームに使用します。

 allow dynamic-group AppConsumers to use queue-pull in compartment <compartment-name>
 where target.consumer-group.id = '<consumer_group_ocid>'
                    

付与される権限:

  • QUEUE_CONSUME

コンシューマがコンパートメント内の任意のコンシューマ・グループから消費することを許可

これは、アプリケーションまたはサービスが同じコンパートメント内の任意のグループからメッセージをプルする必要がある場合に使用します。

allow dynamic-group SharedConsumers to use queue-pull in compartment <compartment-name>

付与される権限:

  • QUEUE_CONSUME

オペレータによるキューの検査とコンシューマ・グループの完全管理を許可

これらのポリシーは、キューの詳細を表示する必要があり、コンシューマ・グループおよびフィルタを完全に編成する必要があるユーザーに使用します。

allow group FanoutOperators to inspect queues in compartment <compartment-name>
allow group FanoutOperators to manage queue-consumer-groups in compartment <compartment-name>
                    

付与される権限:

  • キューの検査
  • QUEUE_CONSUMER_GROUP_CREATE
  • QUEUE_CONSUMER_GROUP_UPDATE
  • QUEUE_CONSUMER_GROUP_DELETE
  • QUEUE_CONSUMER_GROUP_READ
  • QUEUE_CONSUMER_GROUP_INSPECT

キュー所有者によるファンアウトの有効化およびコンシューマ・グループ管理の委任を許可

これは、キュー所有者がキューを管理し、アプリケーション・チームがコンシューマ・グループの設定を処理するチームに使用します。

キューの所有者:

allow group QueueOwners to manage queues in compartment <compartment-name>
                    

アプリケーション・チーム:

allow group AppTeams to manage queue-consumer-groups in compartment <compartment-name>
                    

付与される権限:

  • QUEUE_CONSUMER_GROUP_CREATE
  • QUEUE_CONSUMER_GROUP_UPDATE
  • QUEUE_CONSUMER_GROUP_DELETE
  • QUEUE_CONSUMER_GROUP_READ
  • QUEUE_CONSUMER_GROUP_INSPECT

ベスト・プラクティス

  • 各チームまたはアプリケーションに必要な権限のみを付与します。
  • target.consumer-group.idを使用して、グループから読み取ることができるユーザーを制限します。
  • 可能であれば、プロデューサ、コンシューマおよびファンアウト・マネージャのロールを分離します。
  • 必要なキューへのフル・キュー管理アクセス権のみを付与します。
  • 動的グループは、特別な権限を必要とするアプリケーションや自動サービスに役立ちます。

ポリシーの例

例を使用してキューIAMポリシーについて学習します。

管理者の場合、次のポリシーにより、指定したグループはキューおよび関連するキュー・サービス・リソースに対するすべての操作を実行できます:

Allow QueueManagers to manage queues in compartment <compartment_name>
                

次のポリシーを使用して、指定したグループがキューに対して生成またはキューから消費できるようにします:

Allow QueueProducers to use queue-push in compartment <compartment_name>
                
Allow QueueConsumers to use queue-pull in compartment <compartment_name>
                

次のポリシーを使用して、指定したグループがキューの詳細を検査および読取りできるようにします:

Allow QueueReaders to read queues in compartment <compartment_name>