コンテキスト・ベースの制限による仮想プライベート・クラウド (VPC) インフラストラクチャー・サービスの保護
コンテキスト・ベースの制限は、アカウント所有者と管理者に、アクセス・コンテキストに基づく リソースのアクセス制限を定義し、実施する能力を与える。 アクセス要求のコンテキストに基づいて、 IBM Cloud® リソースのアクセス制限を定義し、実施することができます。 を定義し、実施することができます。 VPC インフラストラクチャー・サービスへのアクセスは、コンテキスト・ベースの制限と ID およびアクセス管理 (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)」 にナビゲートし、 「許可 (Authorizations)」 タブを選択して、アカウント内のサービス間許可を見つけることができます。
コンテキスト・ベースの制限があるサービス | 影響を受けるサービス | ネットワーク・ゾーンで必要とされるサービス参照 |
---|---|---|
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を使用したネットワーク・ゾーンの作成
-
CLI からネットワーク・ゾーンを作成するには、以下のようにします。 CBR CLI プラグインをインストールします。
-
cbr-zone-create
コマンドを使用して、ネットワーク・ロケーション、VPC、およびサービス参照をネットワーク・ゾーンに追加します。 詳しくは、CBR を参照してください。 CLI リファレンス。使用可能なサービス参照ターゲットのリストを見つけるには、
ibmcloud cbr service-ref-targets
を実行します。 コマンド。 このservice_name
VPC インフラストラクチャサービスについては、 をご覧ください、is
Cloud Block Storage はserver-protect
、そして File Storage for VPC はis.share
です。以下のコマンド例では、
is
サービス、と呼ばれるVPC インフラストラクチャ サービスで IBM Cloud®コンソールをネットワーク ゾーンに追加します。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
コンソールからのネットワーク・ゾーンの作成
- 許可リストに追加するリソースを決定します。
- service references セクションで、ネットワーク・ゾーンにサービス参照を追加する必要があるかどうかを確認します。
- コンソールでコンテキスト・ベースの制限を作成する には、以下の手順を実行します。
ルールの作成
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を使用したルールの作成
- CLI からルールを作成するには、 CBR CLI プラグインをインストールします。
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
コンソールでのルールの作成
-
IBM Cloud® コンソールで 「管理」 > 「コンテキスト・ベースの制限」 に移動します。
-
選択するルールクリック作成する。
-
「VPC インフラストラクチャー・サービス」 を選択し、 「次へ」 をクリックします。
-
ルールを「 すべてのリソース 」または「 特定のリソース 」に適用します。 詳しくは、 VPC インフラストラクチャー・サービス・リソースの保護 を参照してください。 「続行」 をクリックします。
-
許可されるエンドポイント・タイプを定義します。
- すべてのエンドポイント・タイプを許可するには、トグルを 「いいえ」 に設定したままにします。
- 特定のエンドポイント・タイプのみを許可するには、トグルを 「はい」 に設定し、リストから選択します。
-
既に作成した 1 つ以上のネットワーク・ゾーンを選択するか、 「作成」 をクリックして新しいネットワーク・ゾーンを作成します。
コンテキストは、リソースにアクセスできる場所を定義し、ネットワーク・ゾーンをルールに効果的にリンクします。
-
追加をクリックして、設定を要約に追加する。 **「次へ」**をクリックします。
-
ルールに名前を付け、適用する方法を選択します。 次に、 作成 をクリックします。
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 が含まれていません。
IBM Cloud Logs にコンテキストベースの制限イベントが見つからない場合、IAMアクセスポリシーによってアクセスが拒否された可能性がある。 詳しくは、以下を参照してください。 VPC IAM 入門ガイド。
コンテキスト・ベースの制限によるお客様からサイトへの VPN データ・プレーンの影響
クライアントからサイトへの VPN 用に クライアント認証 を構成するときにユーザーが ユーザー ID とパスコード を有効にし、VPC リソースに対してコンテキスト・ベースのルールを作成する場合、VPN へのクライアント接続はコンテキスト・ベースの制限の影響を受けます。 VPN
クライアントのリモート IP が 「ネットワーク・ゾーン」 にない場合、VPN サーバーへの接続で Auth Failed
エラーが返されます。
VPN クライアントが VPN サーバーに接続した後、VPE エンドポイントまたはクラウド・サービス・エンドポイント (CSE) への要求は、コンテキスト・ベースの制限によって制御されます。 また、要求のソース IP は、VPC の クラウド・サービス・エンドポイントのソース・アドレス です。 VPC CSE ソース・アドレスが CBR ネットワーク・ゾーンにあることを確認してください。そうでない場合、要求は拒否されます。
制限
- コンテキスト・ベースの制限は、 IBM CLI を介して、 VPC インフラストラクチャー・サービス API または
is
プラグインに関連付けられたアクションのみを保護します。 SDK と Terraform のオプションもサポートされています。 以下のプラットフォーム API に関連付けられたアクションは、コンテキスト・ベースの制限によって保護 されません。- リソース・インスタンス・リスト API
- リソース・インスタンスの削除リソース API
- グローバル検索 API
- グローバル・タグ付け Attach および Detach API
- ルールを作成すると、それが適用されるまでに最大10分かかることがある。
- Load balancer for VPC サービス を使用している場合、現在対処中の制限により、コンテキスト・ベースの制限を Secrets Manager API に適用してはなりません。これは、ロード・バランサーに関連付けられているリスナーに証明書を添付できなくなるためです。