컨텍스트 기반 제한사항 작성
컨텍스트 기반 제한사항을 통해 특정 클라우드 리소스에 대한 사용자 및 서비스 액세스 권한을 관리할 수 있습니다. 네트워크 구역 및 엔드포인트 유형과 같은 컨텍스트를 기반으로 하여 리소스에 대한 제한사항을 정의할 수 있습니다. 자세한 정보는 컨텍스트 기반 제한사항은 무엇입니까?를 참조하십시오.
사용자 및 계정 수준의 IP 주소 제한은 사용자의 리소스 액세스 기능에도 영향을 줄 수 있습니다. 설정 페이지에서 계정 수준의 IP 주소 제한을 확인할 수 있습니다. 개별 사용자 설정을 보려면 사용자 페이지로 이동하여 세부정보 탭에서 각 사용자의 IP 주소 제한을 확인합니다.
시작하기 전에
- 규칙 작업을 완료하려면 대상 서비스에 Identity and Access Management (IAM) 정책이 할당되어야 합니다.
- 네트워크 영역 작업을 완료하려면 컨텍스트 기반 제한 서비스에 대한 IAM 정책을 할당받아야 합니다.
자세한 내용은 컨텍스트 기반 제한 역할 및 작업을 참조하세요.
네트워크 구역 작성
네트워크 영역을 만들면 액세스 요청이 시작되는 허용된 위치 목록을 설정할 수 있습니다. 하나 이상의 네트워크 위치 세트는 개별 주소, 범위 또는 서브넷 및 VPC ID와 같은 IP 주소로 지정될 수 있습니다. 네트워크 구역을 작성한 후 이를 규칙에 추가할 수 있습니다.
네트워크 구역을 작성하려면 다음 단계를 완료하십시오.
-
IBM Cloud 콘솔에서 관리 > 컨텍스트 기반 제한사항을 클릭하고 네트워크 구역을 선택하십시오.
-
작성을 클릭하십시오.
UI 입력을 사용하여 구역을 작성하는 대신, JSON 코드로 입력을 클릭하면 구역을 작성하기 위해 직접 JSON을 입력하도록 JSON 코드 양식을 사용할 수 있습니다.
-
고유한 이름 및 설명을 입력하십시오.
-
액세스 요청이 시작될 수 있는 허용된 IP 주소를 입력하십시오. 필요한 경우 거부 목록에 IP 주소 예외를 포함시키십시오.
-
허용된 VPC를 입력하십시오.
규칙에서 VPC에서 공용 엔드포인트에 대한 액세스를 허용하려면 영역 정의에 VPC와 함께 공용 게이트웨이 IP 주소를 모두 포함하세요.
-
서비스를 참조하십시오. 서비스 유형을 선택한 다음 서비스를 선택합니다. 추가를 클릭하여 서비스의 IP 주소를 네트워크 영역에 연결합니다.
서비스 유형이 무엇인지 잘 모르겠다면 컨텍스트 기반 제한과 통합된 서비스 표를 참조하세요.
-
네트워크 구역을 검토하려면 다음을 클릭하십시오.
-
작성을 클릭하십시오.
더 많은 네트워크 구역을 작성하거나 규칙을 작성하여 계속할 수 있습니다.
CLI를 사용하여 네트워크 영역 만들기
네트워크 영역을 만들면 액세스 요청이 시작되는 허용된 위치 목록을 설정할 수 있습니다. 하나 이상의 네트워크 위치 세트는 개별 주소, 범위 또는 서브넷 및 VPC ID와 같은 IP 주소로 지정될 수 있습니다. 네트워크 구역을 작성한 후 이를 규칙에 추가할 수 있습니다.
-
다음 명령을 실행하여 컨텍스트 기반 제한 CLI 플러그인을 설치합니다:
ibmcloud plugin install cbr -
네트워크 영역을 만들려면 cbr zone-create 명령을 사용합니다.
다음 예는 허용된 네트워크 위치 목록이 포함된 네트워크 영역을 만드는 예제입니다.
ibmcloud cbr zone-create --name example-zone --description "Example zone description" --addresses 192.0.2.1,192.2.3.5-192.2.3.10다음 예는 서비스 참조가 있는 네트워크 영역을 만드는 예제입니다. 자세한 내용은 서비스 참조를 참조하세요.
ibmcloud cbr zone-create --name example-zone-1 --description "Kube zone" --service-ref service_name=containers-kubernetes사용 가능한 서비스 참조 목록을 찾으려면 ibmcloud cbr service-ref-targets 명령을 실행합니다.
API를 사용하여 네트워크 영역 만들기
네트워크 영역을 만들면 액세스 요청이 시작되는 허용된 위치 목록을 설정할 수 있습니다. 하나 이상의 네트워크 위치 집합은 개별 주소, 범위 또는 서브넷, VPC ID 및 서비스 참조와 같은 IP 주소로 지정할 수 있습니다. 네트워크 구역을 작성한 후 이를 규칙에 추가할 수 있습니다.
네트워크 영역을 만들려면 다음 예시와 같이 컨텍스트 기반 제한 API를 호출합니다:
curl -X POST --location --header "Authorization: Bearer {iam_token}" --header "Accept: application/json" --header "Content-Type: application/json" --data '{ "name": "an example of zone", "description": "this is an example of zone", "account_id": "12ab34cd56ef78ab90cd12ef34ab56cd", "addresses": [ { "type": "ipAddress", "value": "169.23.56.234" }, { "type": "ipRange", "value": "169.23.22.0-169.23.22.255" }, { "type": "subnet", "value": "192.0.2.0/24" }, { "type": "vpc", "value": "crn:v1:bluemix:public:is:us-south:a/12ab34cd56ef78ab90cd12ef34ab56cd::vpc:r134-d98a1702-b39a-449a-86d4-ef8dbacf281e" }, { "type": "serviceRef", "ref": { "account_id": "12ab34cd56ef78ab90cd12ef34ab56cd", "service_name": "cloud-object-storage" } } ], "excluded": [ { "type": "ipAddress", "value": "169.23.22.127" } ] }' "{base_url}/v1/zones"
AddressIPAddress ipAddressModel = new AddressIPAddress.Builder()
.type("ipAddress")
.value("169.23.56.234")
.build();
AddressIPAddressRange ipRangeAddressModel = new AddressIPAddressRange.Builder()
.type("ipRange")
.value("169.23.22.0-169.23.22.255")
.build();
AddressSubnet subnetAddressModel = new AddressSubnet.Builder()
.type("subnet")
.value("192.0.2.0/24")
.build();
AddressVPC vpcAddressModel = new AddressVPC.Builder()
.type("vpc")
.value(vpcCRN)
.build();
ServiceRefValue serviceRefValueModel = new ServiceRefValue.Builder()
.accountId(accountID)
.serviceName("cloud-object-storage")
.build();
AddressServiceRef serviceRefAddressModel = new AddressServiceRef.Builder()
.type("serviceRef")
.ref(serviceRefValueModel)
.build();
AddressIPAddress excludedIPAddressModel = new AddressIPAddress.Builder()
.type("ipAddress")
.value("169.23.22.127")
.build();
CreateZoneOptions createZoneOptions = new CreateZoneOptions.Builder()
.name("an example of zone")
.accountId(accountID)
.description("this is an example of zone")
.addresses(java.util.Arrays.asList(ipAddressModel, ipRangeAddressModel, subnetAddressModel, vpcAddressModel, serviceRefAddressModel))
.excluded(java.util.Arrays.asList(excludedIPAddressModel))
.build();
Response<Zone> response = contextBasedRestrictionsService.createZone(createZoneOptions).execute();
Zone zone = response.getResult();
System.out.println(zone);
// Request models needed by this operation.
// AddressIPAddress
const ipAddressModel = {
type: 'ipAddress',
value: '169.23.56.234',
};
// AddressIPAddressRange
const ipRangeAddressModel = {
type: 'ipRange',
value: '169.23.22.0-169.23.22.255',
};
// AddressSubnet
const subnetAddressModel = {
type: 'subnet',
value: '192.0.2.0/24',
};
// AddressVPC
const vpcAddressModel = {
type: 'vpc',
value: vpcCRN,
};
// AddressServiceRef
const serviceRefAddressModel = {
type: 'serviceRef',
ref: {
account_id: accountId,
service_name: 'cloud-object-storage',
},
};
// AddressIPAddress
const excludedIPAddressModel = {
type: 'ipAddress',
value: '169.23.22.127',
};
const params = {
name: 'an example of zone',
accountId,
addresses: [ipAddressModel, ipRangeAddressModel, subnetAddressModel, vpcAddressModel, serviceRefAddressModel],
excluded: [excludedIPAddressModel],
description: 'this is an example of zone',
};
try {
const res = await contextBasedRestrictionsService.createZone(params);
zoneId = res.result.id;
zoneRev = res.headers.etag;
console.log(JSON.stringify(res.result, null, 2));
} catch (err) {
console.warn(err);
}
ip_address_model = {
'type': 'ipAddress',
'value': '169.23.56.234',
}
ip_range_address_model = {
'type': 'ipRange',
'value': '169.23.22.0-169.23.22.255',
}
subnet_address_model = {
'type': 'subnet',
'value': '192.0.2.0/24',
}
vpc_address_model = {
'type': 'vpc',
'value': vpc_crn,
}
service_ref_address_model = {
'type': 'serviceRef',
'ref': {
'account_id': account_id,
'service_name': 'cloud-object-storage',
}
}
excluded_ip_address_model = {
'type': 'ipAddress',
'value': '169.23.22.127',
}
zone = context_based_restrictions_service.create_zone(
name='an example of zone',
account_id=account_id,
addresses=[ip_address_model, ip_range_address_model, subnet_address_model, vpc_address_model, service_ref_address_model],
excluded=[excluded_ip_address_model],
description='this is an example of zone',
).get_result()
print(json.dumps(zone, indent=2))
ipAddressModel := &contextbasedrestrictionsv1.AddressIPAddress{
Type: core.StringPtr("ipAddress"),
Value: core.StringPtr("169.23.56.234"),
}
ipRangeAddressModel := &contextbasedrestrictionsv1.AddressIPAddressRange{
Type: core.StringPtr("ipRange"),
Value: core.StringPtr("169.23.22.0-169.23.22.255"),
}
subnetAddressModel := &contextbasedrestrictionsv1.AddressSubnet{
Type: core.StringPtr("subnet"),
Value: core.StringPtr("192.0.2.0/24"),
}
vpcAddressModel := &contextbasedrestrictionsv1.AddressVPC{
Type: core.StringPtr("vpc"),
Value: core.StringPtr(vpcCRN),
}
serviceRefAddressModel := &contextbasedrestrictionsv1.AddressServiceRef{
Type: core.StringPtr("serviceRef"),
Ref: &contextbasedrestrictionsv1.ServiceRefValue{
AccountID: core.StringPtr(accountID),
ServiceName: core.StringPtr("cloud-object-storage"),
},
}
excludedIPAddressModel := &contextbasedrestrictionsv1.AddressIPAddress{
Type: core.StringPtr("ipAddress"),
Value: core.StringPtr("169.23.22.127"),
}
createZoneOptions := contextBasedRestrictionsService.NewCreateZoneOptions()
createZoneOptions.SetName("an example of zone")
createZoneOptions.SetAccountID(accountID)
createZoneOptions.SetDescription("this is an example of zone")
createZoneOptions.SetAddresses([]contextbasedrestrictionsv1.AddressIntf{ipAddressModel, ipRangeAddressModel, subnetAddressModel, vpcAddressModel, serviceRefAddressModel})
createZoneOptions.SetExcluded([]contextbasedrestrictionsv1.AddressIntf{excludedIPAddressModel})
zone, response, err := contextBasedRestrictionsService.CreateZone(createZoneOptions)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(zone, "", " ")
fmt.Println(string(b))
사용 가능한 서비스 참조 목록을 찾으려면 ListAvailableServicerefTargets 메서드를 호출하세요.
Terraform을 사용하여 네트워크 영역 만들기
네트워크 영역을 만들면 액세스 요청이 시작되는 허용된 위치 목록을 설정할 수 있습니다. 하나 이상의 네트워크 위치 집합은 개별 주소, 범위 또는 서브넷, VPC ID 및 서비스 참조와 같은 IP 주소로 지정할 수 있습니다. 네트워크 구역을 작성한 후 이를 규칙에 추가할 수 있습니다.
네트워크 영역을 만들려면 Terraform 리소스 cbr_zone을 사용하세요.
-
Terraform CLI를 설치하고 Terraform을 위한 IBM Cloud 제공자 플러그인을 구성하려면 IBM Cloud®에서 Terraform 시작하기 튜토리얼을 따르십시오. 플러그인은 이 태스크를 완료하는 데 사용되는 IBM Cloud API를 요약합니다.
-
이름이
main.tf인 Terraform 구성 파일을 작성하십시오. 이 파일에서는 HashiCorp 구성 언어를 사용하여 네트워크 영역을 만들기 위한 구성을 추가합니다. 자세한 내용은 테라폼 문서를 참조하세요.다음 예는 단일 IP 주소를 허용하고 시그널 IP 주소를 명시적으로 제외하는 네트워크 영역을 만드는 예제입니다.
resource "ibm_cbr_zone" "cbr_zone" { account_id = "12ab34cd56ef78ab90cd12ef34ab56cd" addresses { type = "ipAddress" value = "169.23.56.234" } description = "this is an example of zone" excluded { type = "ipAddress" value = "202.38.89.897" } name = "an example of zone" }
또는, 컨텍스트 기반 제한을 위한 영역을 만들거나 기존 영역의 주소를 업데이트하기 위해 CBR 영역용 Terraform IBM 모듈(TIM) 을 사용할 수도 있습니다. Terraform IBM 모듈에 대해 알아보세요.
다음 예는 모듈을 사용하여 네트워크 영역을 정의하는 방법을 보여줍니다:
module "cbr" {
source = "terraform-ibm-modules/cbr/ibm"
version = "X.X.X" # Replace with the latest version
cbr_zones = [
{
name = "my-network-zone"
zone_description = "Zone for approved IP ranges and VPCs"
addresses = [
{ type = "ipRange", value = "10.0.0.0/8" }, # use your valid/supported CIDR range.
{ type = "vpc", value = "abcxxxx..." } # provide vpc crn
]
}
]
}
전체 입력 목록과 사용 예시는 GitHub 에서 컨텍스트 기반 제한 모듈을 참조하세요.
규칙 작성
규칙을 작성하여 클라우드 리소스에 대한 제한사항을 정의하십시오.
규칙을 작성하려면 다음 단계를 완료하십시오.
-
IBM Cloud 콘솔에서 관리 > 컨텍스트 기반 제한사항을 클릭하고 규칙을 선택하십시오.
-
작성을 클릭하십시오.
-
규칙에서 대상으로 지정할 서비스를 선택하십시오. 그런 후 다음 을 클릭하십시오.
IAM 액세스 그룹 서비스에 대한 컨텍스트 기반 제한을 만들면 규칙을 충족하지 않는 사용자는 공용 액세스 그룹을 포함하여 계정의 모든 그룹을 볼 수 없습니다.
-
(선택 사항) 규칙에 따라 작업이 제한되는 API의 범위를 선택합니다. 자세한 내용은 규칙 범위 정의하기를 참조하세요.
모든 서비스가 API별로 규칙 범위를 지정하는 기능을 지원하는 것은 아닙니다.
-
선택한 속성에 따라 모든 리소스 또는 특정 리소스로 제한 범위를 지정합니다.
-
검토 > 계속을 클릭하십시오.
-
하나 이상의 컨텍스트를 추가합니다. 엔드포인트 유형 및 네트워크 구역을 선택하고 추가를 클릭하십시오.
- 기본적으로 토글이 아니요로 설정되어 있으면 모든 서비스 지원 엔드포인트 유형에서 액세스가 허용됩니다. 특정 엔드포인트 유형만 허용하려면 토글을 예로 설정합니다.
규칙에서 VPC에서 공용 엔드포인트에 대한 액세스를 허용하려면 영역 정의에 VPC와 함께 공용 게이트웨이 IP 주소를 모두 포함하세요.
- 규칙에 기존 네트워크 구역을 추가하거나 새 구역을 작성하여 규칙에 추가할 수 있습니다. 자세한 내용은 네트워크 영역 만들기를 참조하세요.
-
계속을 클릭합니다.
-
고유한 설명을 입력합니다.
-
규칙 적용 방법을 선택합니다. 규칙을 만들 때 규칙 적용 방법을 결정하고 언제든지 규칙 적용을 업데이트할 수 있습니다.
- 사용: 사용: 규칙을 적용합니다. 거부된 액세스 시도는 Activity Tracker Event Routing 에서 보고됩니다.
- 비활성화: 사용 안 함: 규칙을 적용하지 않습니다. 계정 자원에는 제한사항이 적용되지 않습니다. 규칙을 활성화할 준비가 되지 않은 경우 이 옵션을 선택합니다.
- 신고 전용: 규칙을 적용하지 않고 규칙이 사용자에게 어떤 영향을 미치는지 모니터링합니다. 계정의 리소스에 액세스하려는 모든 시도가 로그인됩니다 Activity Tracker Event Routing. 규칙을 적용하기 전에 30일 동안 모니터링하는 것이 좋습니다.
-
작성을 클릭하십시오.
CLI를 사용하여 규칙 만들기
규칙을 생성하여 클라우드 리소스에 대한 제한을 정의하려면 ibmcloud cbr rule-create 명령을 사용하세요. 다음 예에서는 Kubernetes Service 을 대상으로 지정하고 지정된 네트워크 영역의 비공개 엔드포인트만 서비스에 액세스할 수 있도록 허용하는 규칙을 만듭니다.
ibmcloud cbr rule-create --description 'Example Rule Description' --service-name kms --context-attributes endpointType=private --zone-id 93de8d3f588ab2c457ff576c364d1145 --enforcement-mode report
enforcement-mode 옵션의 경우 CLI는 enabled, disabled, report 값을 허용합니다. 적용을 지정하지 않으면 기본적으로 규칙이 활성화됩니다. 자세한 내용은 규칙 시행을 참조하세요.
API를 사용하여 규칙 작성
규칙을 만들어 클라우드 리소스에 대한 제한을 만들려면 컨텍스트 기반 제한 API를 호출하세요. 다음 예에서는 Kubernetes Service 을 대상으로 하고 지정된 네트워크 영역의 요청만 서비스에 액세스할 수 있도록 허용하는 사용 설정 규칙을 만듭니다.
curl -X POST --location --header "Authorization: Bearer {iam_token}" --header "Accept: application/json" --header "Content-Type: application/json" --data '{ "description": "this is an example of rule", "resources": [ { "attributes": [ { "name": "accountId", "value": "12ab34cd56ef78ab90cd12ef34ab56cd" }, { "name": "serviceName", "value": "kms" } ] } ], "contexts": [ { "attributes": [ { "name": "networkZoneId", "value": "65810ac762004f22ac19f8f8edf70a34" } ] } ], "enforcement_mode": "enabled" }' "{base_url}/v1/rules"
RuleContextAttribute ruleContextAttributeModel = new RuleContextAttribute.Builder()
.name("networkZoneId")
.value(zoneID)
.build();
RuleContext ruleContextModel = new RuleContext.Builder()
.attributes(java.util.Arrays.asList(ruleContextAttributeModel))
.build();
ResourceAttribute resourceAttributeModelAccountID = new ResourceAttribute.Builder()
.name("accountId")
.value(accountID)
.build();
ResourceAttribute resourceAttributeModelServiceName = new ResourceAttribute.Builder()
.name("serviceName")
.value(serviceName)
.build();
ResourceTagAttribute resourceTagAttributeModel = new ResourceTagAttribute.Builder()
.name("tagName")
.value("tagValue")
.build();
Resource resourceModel = new Resource.Builder()
.addAttributes(resourceAttributeModelAccountID)
.addAttributes(resourceAttributeModelServiceName)
.tags(java.util.Arrays.asList(resourceTagAttributeModel))
.build();
CreateRuleOptions createRuleOptions = new CreateRuleOptions.Builder()
.description("this is an example of rule")
.addContexts(ruleContextModel)
.addResources(resourceModel)
.enforcementMode("enabled")
.build();
Response<Rule> response = contextBasedRestrictionsService.createRule(createRuleOptions).execute();
Rule rule = response.getResult();
System.out.println(rule);
ruleID = rule.getId();
ruleRev = response.getHeaders().values("Etag").get(0);
// Request models needed by this operation.
// RuleContextAttribute
const ruleContextAttributeModel = {
name: 'networkZoneId',
value: zoneId,
};
// RuleContext
const ruleContextModel = {
attributes: [ruleContextAttributeModel],
};
// ResourceAttribute
const resourceAttributeAccountIdModel = {
name: 'accountId',
value: accountId,
};
// Resource Attribute
const resourceAttributeServiceNameModel = {
name: 'serviceName',
value: serviceName,
operator: 'stringEquals',
};
// Resource
const resourceModel = {
attributes: [resourceAttributeAccountIdModel, resourceAttributeServiceNameModel],
};
const params = {
contexts: [ruleContextModel],
resources: [resourceModel],
description: 'this is an example of rule',
enforcementMode: 'enabled',
};
try {
const res = await contextBasedRestrictionsService.createRule(params);
ruleId = res.result.id;
ruleRev = res.headers.etag;
console.log(JSON.stringify(res.result, null, 2));
} catch (err) {
console.warn(err);
}
rule_context_attribute_model = {
'name': 'networkZoneId',
'value': zone_id,
}
rule_context_model = {
'attributes': [rule_context_attribute_model],
}
resource_attribute_account_id_model = {
'name': 'accountId',
'value': account_id,
}
resource_attribute_service_name_model = {
'name': 'serviceName',
'value': service_name,
}
resource_model = {
'attributes': [resource_attribute_account_id_model, resource_attribute_service_name_model],
}
rule = context_based_restrictions_service.create_rule(
contexts=[rule_context_model],
resources=[resource_model],
description='this is an example of rule',
enforcement_mode='enabled'
).get_result()
print(json.dumps(rule, indent=2))
ruleContextAttributeModel := &contextbasedrestrictionsv1.RuleContextAttribute{
Name: core.StringPtr("networkZoneId"),
Value: core.StringPtr(zoneID),
}
ruleContextModel := &contextbasedrestrictionsv1.RuleContext{
Attributes: []contextbasedrestrictionsv1.RuleContextAttribute{*ruleContextAttributeModel},
}
resourceModel := &contextbasedrestrictionsv1.Resource{
Attributes: []contextbasedrestrictionsv1.ResourceAttribute{
{
Name: core.StringPtr("accountId"),
Value: core.StringPtr(accountID),
},
{
Name: core.StringPtr("serviceName"),
Value: core.StringPtr(serviceName),
},
},
Tags: []contextbasedrestrictionsv1.ResourceTagAttribute{
{
Name: core.StringPtr("tagName"),
Value: core.StringPtr("tagValue"),
},
},
}
createRuleOptions := contextBasedRestrictionsService.NewCreateRuleOptions()
createRuleOptions.SetDescription("this is an example of rule")
createRuleOptions.SetContexts([]contextbasedrestrictionsv1.RuleContext{*ruleContextModel})
createRuleOptions.SetResources([]contextbasedrestrictionsv1.Resource{*resourceModel})
createRuleOptions.SetEnforcementMode(contextbasedrestrictionsv1.CreateRuleOptionsEnforcementModeEnabledConst)
rule, response, err := contextBasedRestrictionsService.CreateRule(createRuleOptions)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(rule, "", " ")
fmt.Println(string(b))
Terraform을 사용하여 규칙 만들기
규칙을 생성하여 클라우드 리소스에 대한 제한을 정의하려면 Terraform 리소스 cbr_rule을 사용하세요.
-
Terraform CLI를 설치하고 Terraform을 위한 IBM Cloud 제공자 플러그인을 구성하려면 IBM Cloud®에서 Terraform 시작하기 튜토리얼을 따르십시오. 플러그인은 이 태스크를 완료하는 데 사용되는 IBM Cloud API를 요약합니다.
-
이름이
main.tf인 Terraform 구성 파일을 작성하십시오. 이 파일에서는 HashiCorp 구성 언어를 사용하여 컨텍스트 기반 제한 규칙을 만들기 위한 구성을 추가합니다. 자세한 내용은 테라폼 문서를 참조하세요.다음 예에서는 특정 Kubernetes Service API를 대상으로 하는 규칙을 만들고 지정된 네트워크 영역의 비공개 엔드포인트만 해당 API와 관련된 작업을 호출할 수 있도록 허용합니다.
resource "ibm_cbr_rule" "cbr_rule" { contexts { attributes { name = "endpointType" value = "private" } } description = "this is an example of rule" enforcement_mode = "enabled" operations { api_types { api_type_id = "api_type_id" } } resources { attributes { name = "serviceName" value = "containers-kubernetes" operator = "equals" } } }