Identity and Access Management(IAM)には、プリンシパルがアクセスできるリソースを制御するために役立ついくつかの ポリシータイプがあります。このガイドでは、イベント メッセージを Eventarc Advanced バスにパブリッシュするときに、アクセスを制御する アクセス ポリシーの使用方法について説明します。
IAM アクセス ポリシーでは、リソースへのアクセスを許可することも拒否することもできます。 ただし、IAM の許可ポリシーと拒否ポリシーとは異なり、アクセス ポリシーでは、イベント メッセージの優先度など、特定のイベント コンテキスト属性に基づいてアクセスを許可または拒否できます。
各アクセス ポリシーは、プリンシパルを識別し、ルールの適用可能性を決定する条件を定義して、きめ細かいアクセス制御を有効にする一連のルールです。たとえば、イベント コンテキスト属性に適用された Common Expression Language(CEL)式の評価に応じて、Eventarc Advanced バスへのイベント メッセージのサブセットのパブリッシュ権限を許可または拒否できます。
このガイドでは、アクセス ポリシーを作成し、ポリシー バインディングを作成して、そのポリシーを a Google Cloud プロジェクトに接続することで、アクセス ポリシーを作成して適用する方法について説明します。
始める前に
アクセス ポリシーを作成して適用する前に、イベント メッセージをパブリッシュできる Eventarc Advanced バスを 作成しておく 必要があります。
リソースへのバインディング アクセス ポリシーを無効にする (
constraints/iam.managed.disableAccessPolicyBindings)マネージド制約の適用をオフにする必要があります。デフォルトでは、このブール値の制約は新しい組織で有効になっており、IAM v3 API アクセス ポリシーをリソースにバインドできません。詳細については、 ブール値ルールでポリシーを更新するをご覧ください。次の点を考慮してください。
アクセス ポリシーは、 Google Cloud プロジェクトに適用またはバインドする必要があります。各アクセス ポリシーは、最大 5 つのプロジェクトに適用できます。各プロジェクトには、最大 5 つのアクセス ポリシーを適用できます。サポート対象の地域ごとに、 Google Cloud プロジェクトごとに 1 つのバスを作成できます。プロジェクトに適用されたアクセス ポリシーは、そのプロジェクト内の任意の Eventarc Advanced バスへのパブリッシュ アクセスを制御します。
アクセス ポリシーを使用して、Eventarc Advanced バスへのパブリッシュ アクセスを制御できますが、特定のバスからのメッセージのサブスクリプションへのアクセスを制御することはできません。サポートされている権限は
eventarc.messageBuses.publishです。アクセス制御は、 イベント コンテキスト属性 のみに基づいて行うことができ、イベント ペイロード コンテンツに基づいて行うことはできません。
Google ソースから パブリッシュされ 、拒否されたイベント メッセージは破棄されます。プリンシパルが イベント メッセージを直接パブリッシュする 場合、
Event published successfullyログメッセージはこれを示します。ただし、アクセス ポリシーの条件によってイベント メッセージが拒否された場合は、次のようなエラーが発生します。ERROR: (gcloud.beta.eventarc.message-buses.publish) PERMISSION_DENIED: Permission 'eventarc.googleapis.com/messageBuses.publish' denied on resource due to an IAM Access Policy. This command is authenticated as user@example.com which is the active account specified by the [core/account] property. '@type': type.googleapis.com/google.rpc.ErrorInfo domain: iam.googleapis.com metadata: permission: eventarc.googleapis.com/messageBuses.publish reason: IAM_PERMISSION_DENIED
まだ有効にしていない場合は、Eventarc API と IAM API を有効にします。
gcloud services enable eventarc.googleapis.com \ eventarcpublishing.googleapis.com \ iam.googleapis.com
認証を設定します。
gcloud
コンソール Google Cloud で Cloud Shell をアクティブにします。
コンソールの下部にある Google Cloud Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です 。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています 。セッションが初期化されるまで数秒かかることがあります。
REST API
このページの REST API サンプルをローカル開発環境で使用するには、 gcloud CLI に指定した認証情報を使用します。
Google Cloud CLI をインストールします。
外部 ID プロバイダ(IdP)を使用している場合は、まず フェデレーション ID を使用して gcloud CLI にログインする必要があります。
詳細については、 Google Cloud 認証ドキュメントの REST を使用して認証する をご覧ください。
必要なロール
IAM ロールには、リソースに対して Google Cloud 特定の操作を実行できるようにする一連の権限が含まれています。
パブリッシュ アクセスを制御するために必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
-
アクセス ポリシーを作成する:
アクセス ポリシー管理者 (
roles/iam.accessPolicyAdmin) -
アクセス ポリシーを適用する:
プロジェクト IAM 管理者 (
roles/resourcemanager.projectIamAdmin)
ロールの付与の詳細については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。
これらの事前定義ロールには パブリッシュ アクセスを制御するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
パブリッシュ アクセスを制御するには、次の権限が必要です。
-
アクセス ポリシーを作成する:
iam.accessPolicies.create -
アクセス ポリシーを適用する:
-
iam.accessPolicies.bind -
resourcemanager.projects.createPolicyBinding
-
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
アクセス ポリシーを作成する
プロジェクト内の Eventarc Advanced バスにパブリッシュするときにアクセスを制御するアクセス ポリシーを作成します。
アクセス ポリシーを作成するには、Google Cloud CLI を使用するか、IAM v3 API に直接リクエストを送信します。
gcloud
アクセス ポリシーを作成するには、 gcloud beta iam access-policies create コマンドを実行します。
gcloud beta iam access-policies create POLICY_ID \ --project=POLICY_PROJECT_ID \ --location=global \ --details-rules="description="POLICY_DESCRIPTION",effect=EFFECT, \ principals=[PRINCIPALS],excludedPrincipals=[EXCLUDED_PRINCIPALS], \ operation={permissions=[eventarc.googleapis.com/messageBuses.publish]}, \ conditions={eventarc.googleapis.com={expression="CEL_EXPRESSION"}}"
次のように置き換えます。
POLICY_ID: アクセス ポリシーの一意の名前(例:my-access-policy)。POLICY_PROJECT_ID: ポリシーが作成されるプロジェクトの Google Cloud プロジェクト ID 。POLICY_DESCRIPTION: ポリシーの説明(省略可、最大 256 文字)。EFFECT: ルールの効果(ALLOWまたはDENY)。PRINCIPALS: このルールが適用される ID。識別子の形式は、参照するプリンシパルのタイプによって異なります。詳細については、 アクセス ポリシーのプリンシパル タイプをご覧ください。EXCLUDED_PRINCIPALS:principalsにリストされている場合でも、ルール適用から除外される ID。たとえば、Google グループをprincipalsに追加し、そのグループに属する特定のユーザーを除外できます。CEL_EXPRESSION: ルールの適用可能性を判断するために評価される CEL 式(例:message.version != \"v1\")。詳細については、 Common Expression Language を使用するをご覧ください。
次の点にご注意ください。
--locationフラグは、アクセス ポリシーのロケーションを指定します。globalにする必要があります。--details-rulesフラグは、JSON または YAML で記述できるアクセス ポリシー ファイルへのパスを指定できます(例:--details-rules=path_to_file.json)。複数のルールを構成する場合は、フラグを繰り返すこともできます。各ルールは個別に評価されます。
アクセス ポリシーは次の形式を使用します。
{ "displayName": "POLICY_DISPLAY_NAME", "details": { "rules": [ { "description": "POLICY_DESCRIPTION", "effect"