コンテキスト・ベースの制限による仮想プライベート・クラウド (VPC) インフラストラクチャー・サービスの保護

コンテキストに基づく制限により、 アカウント所有者や管理者は、アクセス要求のコンテキストに基づいて、 IBM Cloud® リソースへのアクセス制限を定義し、適用することができます。 VPC インフラストラクチャ サービスへのアクセスは、コンテキストベースの制限およびアイデンティティとアクセス管理(IAM)ポリシーによって制御できます。

これらの制限は、ID に基づく従来の IAM ポリシーと連携して、追加の保護レイヤーを提供します。 IAM ポリシーとは異なり、コンテキスト・ベースの制限はアクセス権限を割り当てません。 コンテキストに基づく制限では、アクセス要求が、ユーザーが設定した許可されたコンテキストから送信されたものであるかどうかが確認されます。 IAM アクセスとコンテキスト・ベースの制限の両方によってアクセスが強制されるので、資格情報が漏洩した場合や適切に管理されなかった場合でも、コンテキスト・ベースの制限によって保護が提供されます。 詳しくは、コンテキスト・ベースの制限とはを参照してください。

ユーザーは、VPC インフラストラクチャ サービスを対象とするルールを作成、更新、または削除するには、VPC インフラストラクチャ サービスに対する管理者ロールを付与されている必要があります。 ユーザーがネットワークゾーンを作成、更新、または削除するには、コンテキストベースの制限サービスにおいて編集者または管理者の役割のいずれかを持っている必要があります。 コンテキストベースの制限サービスにおいてビューアーの役割を持つユーザーは、ルールにネットワークゾーンを追加することのみが可能です。

コンテキストベースの制限サービスは、コンテキストベースのポリシーが適用されるたびに監査ログを生成します。 詳しくは、 コンテキスト・ベースの制約事項のモニター を参照してください。

コンテキストベースの制限を使用してVPCインフラストラクチャサービスを保護する手順については、「 コンテキストベースの制限を活用したリソースの保護 」チュートリアルを参照してください。

VPC インフラストラクチャー・サービスをコンテキスト・ベースの制限と統合する方法

VPCインフラストラクチャサービスは、複数の子サービスで構成される複合サービスです。 コンテキストベースの制限は、 IBM Cloud VPC またはその子サービス(例: サブネット仮想サーバーインスタンスBlock Storage ボリューム )に対して作成できます。

各サービスに必要な属性を持つルールを作成する方法の詳細については 、ルール作成セクション を参照してください。

ネットワーク・ゾーンの作成

ネットワーク・ゾーンとは、アクセス要求が作成される場所の IP アドレスの許可リストを表します。 これは、以下の属性によって指定される 1 つ以上のネットワーク・ロケーションの集合を定義します。

  • IPアドレス(個別のアドレス、アドレス範囲、またはサブネットを含む)
  • VPC
  • 他の IBM Cloud® サービスからのアクセスを可能にするサービス参照

サービス参照

ネットワークゾーンの一部として定義されるサービス参照は、指定されたサービスがコンテキストベースの制限ポリシーの対象となる制限付きリソースまたはAPIと通信することを可能にします。 以下の表は、VPC インフラストラクチャ サービスのコンテキストでコンテキストベースの制限を使用する際に含める必要があるサービス参照を示しています。 ネットワークゾーンに追加するサービス参照を検討する際にはアカウント内の サービス間IAM認可 も確認できます。 サービス間認証は、 アカウントの [管理]→[アクセス(IAM)] に移動し、[ 認証 ]タブを選択することで確認できます。

コンテキストベースの制限に必要なサービス参照
コンテキスト・ベースの制限があるサービス 影響を受けるサービス ネットワークゾーンで必要なサービス参照
Cloud Object Storage VPC インフラストラクチャ・サービス (is)
Key Protect Cloud Block Storage (server-protect),
File Storage for VPC (is.share)
Hyper Protect Crypto Service Cloud Block Storage (server-protect),
File Storage for VPC (is.share)
仮想サーバー・インスタンス VPC インフラストラクチャ・サービス (is)
各種 VPC インフラストラクチャー・サービス- Block Storage ・ボリューム、セキュリティー・グループ、サブネット IBM Kubernetes Service (containers-kubernetes)
Secrets Manager VPC インフラストラクチャ・サービス (is)

API を使用したネットワークゾーンの作成

create-zone コマンドを使用して、ネットワーク・ゾーンを作成できます。 詳しくは、API資料をご覧ください。

VPC インフラストラクチャ サービスの serviceRef 属性は です is。 Cloud Block Storage は server-protect、そして File Storage for VPC は is.share

{
  "name": "Example zone 1",
  "description": "",
  "addresses": [
    {
      "type": "serviceRef",
      "ref": {
        "service_name": "is"
      }
    }
  ]
}
{
  "name": "Example zone 1",
  "description": "",
  "addresses": [
    {
      "type": "serviceRef",
      "ref": {
        "service_name": "server-protect"
      }
    }
  ]
}

CLI を使用したネットワークゾーンの作成

  1. ネットワークゾーンをCLIから作成するには、 CBR CLIプラグインをインストールしてください

  2. ネットワークロケーション、VPC、およびサービス参照をネットワークゾーンに追加するには、`` cbr-zone-create コマンドを使用します。 詳細については、CBR CLI リファレンス を参照してください。

    利用可能なサービス参照ターゲットの一覧を表示するには、 コマンドibmcloud cbr service-ref-targets を実行します。 VPC インフラストラクチャ サービスの service_name 料金は です isCloud Block Storageserver-protect、であり File Storage for VPC、はである is.share

    次のコマンド例は、 IBM Cloud® コンソールで VPCインフラストラクチャサービスと呼ばれるサービスをネットワークゾーンに追加します is

    ibmcloud cbr zone-create --name example-zone-1 --description "Example zone 1" --service-ref service_name=is
    

    以下のコマンド例では、server-protect サービス、と呼ばれるCloud Block StorageでIBM Cloud®コンソールをネットワーク ゾーンに追加します。

    ibmcloud cbr zone-create --name example-zone-1 --description "Example zone 1" --service-ref service_name=server-protect
    

コンソールからのネットワーク・ゾーンの作成

  1. 許可リストに追加するリソースを決定します。
  2. サービス参照 セクションを確認し、ネットワークゾーンにサービス参照を追加する必要があるかどうかを確認してください。
  3. コンソールでコンテキスト・ベースの制限を作成する には、以下の手順を実行します。

ルールの作成

VPCインフラストラクチャサービス内では、各子サービスはコンテキストベースのルールにおいて特定の属性を必要とします。

API、Terraform、または IBM Cloud CLIを使用して IBM Cloud のコンテキストベースの制限を作成、更新、または削除する場合、リソース属性を使用して対象のVPCインフラストラクチャリソースを指定できます。

個々の VPC リソースに対応するリソース属性については、 VPC リソース属性 を参照してください。

オブジェクトのIDを入力することで、リソースを選択できます。 あるいは、 * ワイルドカードを使用して、該当するすべてのリソースを選択することもできます。 例えば、属性 vpcId:* は、アカウント内のすべての VPC に適用されるコンテキスト・ベースの制限を設定します。 また、ポリシーを適用するリソース・グループもコマンドで指定することができます。

API の使用によるルールの作成

ルールを作成するための要求例を以下に示します。 v1/rules について詳しくは、以下を参照してください。 API については、 API の資料 を参照してください。

ルールを作成した後、そのルールを更新するまでに最大で 10 分かかる場合があります。

次のペイロード例では、仮想サーバーインスタンスを保護し、プライベート エンドポイントを介した指定ネットワークゾーンからのアクセスのみを許可 するルールを作成します。 ルールを作成します。

{
  "contexts": [
    {
      "attributes": [
        {
          "name": "endpointType",
          "value": "private"
        },
        {
          "name": "networkZoneId",
          "value": "45ec64065b7c2bf84b3edec803335111"
        }
      ]
    }
  ],
  "resources": [
    {
      "attributes": [
        {
          "name": "resourceGroupId",
          "value": "1171749e3a8545069d04e6fca1ded18f"
        },
        {
          "name": "serviceName",
          "value": "is"
        },
        {
          "name": "instanceId",
          "value": "*"
        }
      ]
    }
  ]
}

CLI を使用したルールの作成

  1. CLI からルールを作成するには、 CBR CLI プラグインをインストールします
  2. ibmcloud cbr rule-create コマンド を使用して、CBR ルールを作成します。 詳しくは、CBR CLI リファレンス を参照してください。

以下の例は施行規則です。 それらをレポート専用にするには、 --enforcement-mode report を追加します。

以下の CLI コマンド例では、現行アカウント内のすべての仮想サーバー・インスタンスに対してコンテキスト・ベースの制限ルールを作成します。

ibmcloud cbr rule-create  --zone-id a7eeb5dd8e6bdce670eba1afce18e37f --description "Test CBR for VSIs" --service-name is --resource-attributes "instanceId=*"

以下の CLI コマンド例は、現行アカウント内の特定のブロック・ストレージ・ボリュームに対するコンテキスト・ベースの制限ルールを作成します。

ibmcloud cbr rule-create --zone-id a7eeb5dd8e6bdce670eba1afce18e37f --description "Test CBR for volume" --service-name is --resource-attributes "volumeId=UUID_OF_THE_VOLUME"

以下の CLI コマンド例では、現行アカウント内のすべての仮想サーバー・インスタンスに対してコンテキスト・ベースの制限ルールを作成し、プライベート・エンドポイントへのアクセスを制限します。

ibmcloud cbr rule-create --context-attributes 'endpointType=private' --zone-id a7eeb5dd8e6bdce670eba1afce18e37f --description "Test CBR for VSIs" --service-name is --resource-attributes "instanceId=*"

以下の CLI コマンド例では、リソース・グループ内のすべての仮想サーバー・インスタンスに対してコンテキスト・ベースの制限ルールを作成し、プライベート・エンドポイントへのアクセスを制限します。

ibmcloud cbr rule-create --context-attributes 'endpointType=private' --zone-id a7eeb5dd8e6bdce670eba1afce18e37f --description "Test CBR for VSIs" --service-name is --resource-attributes "instanceId=*" --resource-group-id 1171749e3a8545069d04e6fca1ded18f

コンソールでのルールの作成

  1. IBM Cloud® コンソールで 「管理」 > 「コンテキスト・ベースの制限」 に移動します。

  2. 選択するルールクリック作成する

  3. 「VPC インフラストラクチャー・サービス」 を選択し、 「次へ」 をクリックします。

  4. ルールの適用範囲を「 すべてのリソース 」または「 特定のリソース 」に設定します。 詳細については、「 VPCインフラストラクチャサービスのリソースの保護 」を参照してください。 「続行」 をクリックします。

  5. 許可されるエンドポイント・タイプを定義します。

    • すべてのエンドポイント・タイプを許可するには、トグルを 「いいえ」 に設定したままにします。
    • 特定のエンドポイント・タイプのみを許可するには、トグルを 「はい」 に設定し、リストから選択します。
  6. 既存のネットワークゾーンを選択するか、 [作成] をクリックしてネットワークゾーンを作成します。

    コンテキストは、リソースにアクセスできる場所を定義し、ネットワーク・ゾーンをルールに効果的にリンクします。

  7. [追加 ] をクリックして、設定を概要に追加してください。 **「次へ」**をクリックします。

  8. ルールに名前を付け、適用する方法を選択します。 次に、「Create」 をクリックします。

VPC インフラストラクチャー・サービスでのモニター・コンテキスト・ベースの制約事項

コンテキストベースの制限サービスは、コンテキストベースのポリシーが適用されるたびに監査ログを生成します 詳しくは、以下を参照してください。 モニター・コンテキスト・ベースの制約事項

コンテキスト・ベースの制限による障害のトラブルシューティング

403 アクセスが許可されていません エラーメッセージ

アクセス権限が不適切なためリクエストが拒否された場合、またはリクエストがコンテキストベースの制限ルールで定義されたネットワークゾーン外から発信された場合、エラー応答は以下の例に類似します。

CLI応答で403未承認エラーが発生しました

Error code: not_authorized and
Error message: the provided token is not authorized
Trace ID: b266a31c-b359-4ecb-8b81-a27c1b2cdb7b

IBM Cloud コンソールで 403 アクセス拒否エラーが発生しました

reference_id b266a31c-b359-4ecb-8b81-a27c1b2cdb7b
code not_authorized
message the provided token is not authorized

APIレスポンスで403(不正なアクセス)エラーが発生しました

"code":"not_authorized",
"message":"the provided token is not authorized to list floating-ips in this account"
"trace":"b266a31c-b359-4ecb-8b81-a27c1b2cdb7b"

コンテキストに基づく制限イベントを見つける

Trace ID または Reference ID の値を使用して、 IBM Cloud Logs インスタンスで、コンテキストベースの制限サービスによって生成されるイベントを検索することができます。 requestData.environment セクションには、呼のソースIPアドレスと、認証が拒否された理由を確認するために使用で きるその他の情報が表示される。 requestData.action フィールドと requestData.resource フィールドを使用して、どの基礎リソースがアクセスを拒否されたかを判別できます。

以下の例は、コンテキストベースの制限イベントです。 読みやすさを向上させるため、一部のフィールドを削除しました。

{
  "level": "critical",
  "action": "context-based-restrictions.policy.eval",
  "message": "Context based restriction rendered a deny",
  "severity": "critical",
  "correlationId": "TXID-b266a31c-b359-4ecb-8b81-a27c1b2cdb7b-df2f912c-80a1-422c-8b17-6092651fea00",
  "requestData": {
    "action": "is.vpc.vpc.create",
    "reqOrder": 0,
    "environment": {
      "attributes": {
        "ipAddress": "192.168.0.1",
        "networkType": "public"
      }
    },
    "resource": {
      "attributes": {
        "accountId": "67db3d7ff3f34220b40e2d81480754c9",
        "resource": "NEWRESOURCE",
        "vpcId": "NEWRESOURCE",
        "resourceGroupId": "d272ce832535498e9142b557ff8638ed",
        "region": "au-syd",
        "serviceName": "is",
        "resourceType": "vpc"
      }
    },
    "subject": {
      "attributes": {
        "scope": "ibm openid",
        "token.account.bss": "67db3d7ff3f34220b40e2d81480754c9",
        "id": "IBMid-550009FB7N"
      }
    }
  },
  "responseData": {
    "decision": "Deny",
    "isEnforced": true
  }
}

その後、同じトレース ID または参照 ID を使用して、 IBM Cloud Logs インスタンスの特定の VPC インフラストラクチャ・サービス・イベントを調べることができます。

{
  "action": "is.vpc.vpc.create",
  "outcome": "failure",
  "message": "Virtual Private Cloud: create vpc -failure",
  "severity": "critical",
  "dataEvent": false,
  "logSourceCRN": "crn:v1:bluemix:public:is:au-syd:a/67db3d7ff3f34220b40e2d81480754c9::vpc:",
  "saveServiceCopy": true,
  "initiator": {
    "id": "IBMid-ABCDEFGH",
    "typeURI": "service/security/account/user",
    "name": "test@ibm.com",
    "authnName": "test",
    "authnId": "IBMid-ABCDEFGH",
    "host": {
      "address": "192.168.0.1",
      "addressType": "IPv4"
    },
    "credential": {
      "type": "token"
    }
  },
  "target": {
    "id": "crn:v1:bluemix:public:is:au-syd:a/67db3d7ff3f34220b40e2d81480754c9::vpc:",
    "typeURI": "is.vpc/vpc",
    "name": "",
    "resourceGroupId": "crn:v1:bluemix:public:resource-controller::a/67db3d7ff3f34220b40e2d81480754c9::resource-group:d272ce832535498e9142b557ff8638ed"
  },
  "reason": {
    "reasonCode": 403,
    "reasonType": "Forbidden",
    "reasonForFailure": "Your access token is invalid or does not have the necessary permissions to perform this task"
  },
  "requestData": {
    "generation": "2",
    "requestId": "b266a31c-b359-4ecb-8b81-a27c1b2cdb7b"
  },
  "responseData": {
    "responseURI": "/v1/vpcs/"
  }
}

リソース ID を使用してイベントを検索することもできます。 リソース ID は UUID であり、CRN 内の最後の ID です。 以下の例を参照してください

crn:v1:bluemix:public:is:au-syd:a/67db3d7ff3f34220b40e2d81480754c9::vpc:<resourceID>

リソースのプロビジョニング要求にリソース ID が含まれていません。

コンテキストベースの制限イベントがコンテキストベースの制限イベントにない場合、IAMアクセスポリシーにより IBM Cloud Logs アクセスが拒否された可能性があります。 詳細については、 VPC IAM 開始ガイド を参照してください。

コンテキスト・ベースの制限によるお客様からサイトへの VPN データ・プレーンの影響

クライアント からサイトへのVPNのクライアント認証設定でユーザーIDとパスコードを有効化し、VPCリソースにコンテキストベースのルールを作成した場合、VPNへのクライアント接続はコンテキストベースの制限の影響を受けます。 VPN クライアントのリモート IP が 「ネットワーク・ゾーン」 にない場合、VPN サーバーへの接続で Auth Failed エラーが返されます。

VPN クライアントが VPN サーバーに接続した後、VPE エンドポイントまたはクラウド・サービス・エンドポイント (CSE) への要求は、コンテキスト・ベースの制限によって制御されます。 また、要求のソース IP は、VPC の クラウド・サービス・エンドポイントのソース・アドレス です。 VPC CSE ソース・アドレスが CBR ネットワーク・ゾーンにあることを確認してください。そうでない場合、要求は拒否されます。

制限