18.5. API 끝점 프로세스 격리 및 정책
API 엔드포인트 프로세스를 격리합니다. 특히 공용 보안 도메인에 있는 프로세스를 최대한 격리해야 합니다. 배포를 허용하는 경우 격리를 높이기 위해 API 엔드포인트를 별도의 호스트에 배포해야 합니다.
18.5.1. Metadef API 보안 링크 복사링크가 클립보드에 복사되었습니다!
RHOSP(Red Hat OpenStack Platform)에서 사용자는 키 값 쌍을 정의하고 메타데이터를 메타데이터(metadef) API로 태그할 수 있습니다. 현재는 사용자가 생성할 수 있는 메타 재정의 네임스페이스, 오브젝트, 속성, 리소스 또는 태그 수에 제한이 없습니다.
Metadef API는 권한 없는 사용자에게 정보를 유출할 수 있습니다. 악의적인 사용자는 제한 부족을 악용하고 무제한 리소스로 Image 서비스(glance) 데이터베이스를 채울 수 있습니다. 그러면 DoS(서비스 거부) 스타일 공격이 발생할 수 있습니다.
이미지 서비스 정책은 메타 파일 API를 제어합니다. 그러나 metadef API의 기본 정책 설정을 사용하면 모든 사용자가 metadef 정보를 생성하거나 읽을 수 있습니다. metadef 리소스는 소유자와 격리되지 않으므로 내부 인프라 세부 정보 또는 고객 이름과 같이 잠재적으로 민감한 이름의 메타 파일 리소스는 악의적인 사용자에게 해당 정보를 노출할 수 있습니다.
18.5.2. metadef API를 제한하도록 정책 구성 링크 복사링크가 클립보드에 복사되었습니다!
Image 서비스(glance)의 보안을 강화하려면 메타 파일 수정 API를 RHOSP(Red Hat OpenStack Platform) 배포에서 기본적으로 admin 전용 액세스로 제한합니다.
절차
클라우드 관리자로서 Image 서비스 metadef API에 대한 정책 재정의를 포함하려면
lock-down-glance-metadef-api.yaml과 같은 별도의 heat 템플릿 환경 파일을 생성합니다.... parameter_defaults: GlanceApiPolicies: { glance-metadef_default: { key: 'metadef_default', value: '' }, glance-metadef_admin: { key: 'metadef_admin', value: 'role:admin' }, glance-get_metadef_namespace: { key: 'get_metadef_namespace', value: 'rule:metadef_default' }, glance-get_metadef_namespaces: { key: 'get_metadef_namespaces', value: 'rule:metadef_default' }, glance-modify_metadef_namespace: { key: 'modify_metadef_namespace', value: 'rule:metadef_admin' }, glance-add_metadef_namespace: { key: 'add_metadef_namespace', value: 'rule:metadef_admin' }, glance-delete_metadef_namespace: { key: 'delete_metadef_namespace', value: 'rule:metadef_admin' }, glance-get_metadef_object: { key: 'get_metadef_object', value: 'rule:metadef_default' }, glance-get_metadef_objects: { key: 'get_metadef_objects', value: 'rule:metadef_default' }, glance-modify_metadef_object: { key: 'modify_metadef_object', value: 'rule:metadef_admin' }, glance-add_metadef_object: { key: 'add_metadef_object', value: 'rule:metadef_admin' }, glance-delete_metadef_object: { key: 'delete_metadef_object', value: 'rule:metadef_admin' }, glance-list_metadef_resource_types: { key: 'list_metadef_resource_types', value: 'rule:metadef_default' }, glance-get_metadef_resource_type: { key: 'get_metadef_resource_type', value: 'rule:metadef_default' }, glance-add_metadef_resource_type_association: { key: 'add_metadef_resource_type_association', value: 'rule:metadef_admin' }, glance-remove_metadef_resource_type_association: { key: 'remove_metadef_resource_type_association', value: 'rule:metadef_admin' }, glance-get_metadef_property: { key: 'get_metadef_property', value: 'rule:metadef_default' }, glance-get_metadef_properties: { key: 'get_metadef_properties', value: 'rule:metadef_default' }, glance-modify_metadef_property: { key: 'modify_metadef_property', value: 'rule:metadef_admin' }, glance-add_metadef_property: { key: 'add_metadef_property', value: 'rule:metadef_admin' }, glance-remove_metadef_property: { key: 'remove_metadef_property', value: 'rule:metadef_admin' }, glance-get_metadef_tag: { key: 'get_metadef_tag', value: 'rule:metadef_default' }, glance-get_metadef_tags: { key: 'get_metadef_tags', value: 'rule:metadef_default' }, glance-modify_metadef_tag: { key: 'modify_metadef_tag', value: 'rule:metadef_admin' }, glance-add_metadef_tag: { key: 'add_metadef_tag', value: 'rule:metadef_admin' }, glance-add_metadef_tags: { key: 'add_metadef_tags', value: 'rule:metadef_admin' }, glance-delete_metadef_tag: { key: 'delete_metadef_tag', value: 'rule:metadef_admin' }, glance-delete_metadef_tags: { key: 'delete_metadef_tags', value: 'rule:metadef_admin' } } …오버클라우드를 배포할 때
-e옵션을 사용하여 배포 명령에 정책 덮어쓰기가 포함된 환경 파일을 포함합니다.$ openstack overcloud deploy -e lock-down-glance-metadef-api.yaml
18.5.3. metadef API 활성화 링크 복사링크가 클립보드에 복사되었습니다!
이전에 메타데이터 정의(metadef) API를 제한하거나 새 기본값을 완화하려는 경우 메타 파일 수정 정책을 재정의하여 사용자가 해당 리소스를 업데이트할 수 있습니다.
metadef API에 대한 쓰기 액세스 권한을 사용하는 사용자가 클라우드 관리자는 모든 사용자가 해당 API에 액세스할 수 있도록 할 수 있습니다. 그러나 이러한 유형의 구성에서는 의도치 않게 민감한 리소스 이름(예: 고객 이름 및 내부 프로젝트)을 유출할 수 있습니다. 관리자는 모든 사용자에게 읽기 액세스만 활성화되어 있더라도 취약할 수 있는 이전에 생성된 리소스를 식별하도록 시스템을 감사해야 합니다.
절차
클라우드 관리자로 언더클라우드에 로그인하고 정책을 재정의할 파일을 만듭니다. 예를 들면 다음과 같습니다.
$ cat open-up-glance-api-metadef.yamlmetadef API 읽기-쓰기 액세스를 모든 사용자에게 허용하도록 정책 덮어쓰기 파일을 구성합니다.
GlanceApiPolicies: { glance-metadef_default: { key: 'metadef_default', value: '' }, glance-get_metadef_namespace: { key: 'get_metadef_namespace', value: 'rule:metadef_default' }, glance-get_metadef_namespaces: { key: 'get_metadef_namespaces', value: 'rule:metadef_default' }, glance-modify_metadef_namespace: { key: 'modify_metadef_namespace', value: 'rule:metadef_default' }, glance-add_metadef_namespace: { key: 'add_metadef_namespace', value: 'rule:metadef_default' }, glance-delete_metadef_namespace: { key: 'delete_metadef_namespace', value: 'rule:metadef_default' }, glance-get_metadef_object: { key: 'get_metadef_object', value: 'rule:metadef_default' }, glance-get_metadef_objects: { key: 'get_metadef_objects', value: 'rule:metadef_default' }, glance-modify_metadef_object: { key: 'modify_metadef_object', value: 'rule:metadef_default' }, glance-add_metadef_object: { key: 'add_metadef_object', value: 'rule:metadef_default' }, glance-delete_metadef_object: { key: 'delete_metadef_object', value: 'rule:metadef_default' }, glance-list_metadef_resource_types: { key: 'list_metadef_resource_types', value: 'rule:metadef_default' }, glance-get_metadef_resource_type: { key: 'get_metadef_resource_type', value: 'rule:metadef_default' }, glance-add_metadef_resource_type_association: { key: 'add_metadef_resource_type_association', value: 'rule:metadef_default' }, glance-remove_metadef_resource_type_association: { key: 'remove_metadef_resource_type_association', value: 'rule:metadef_default' }, glance-get_metadef_property: { key: 'get_metadef_property', value: 'rule:metadef_default' }, glance-get_metadef_properties: { key: 'get_metadef_properties', value: 'rule:metadef_default' }, glance-modify_metadef_property: { key: 'modify_metadef_property', value: 'rule:metadef_default' }, glance-add_metadef_property: { key: 'add_metadef_property', value: 'rule:metadef_default' }, glance-remove_metadef_property: { key: 'remove_metadef_property', value: 'rule:metadef_default' }, glance-get_metadef_tag: { key: 'get_metadef_tag', value: 'rule:metadef_default' }, glance-get_metadef_tags: { key: 'get_metadef_tags', value: 'rule:metadef_default' }, glance-modify_metadef_tag: { key: 'modify_metadef_tag', value: 'rule:metadef_default' }, glance-add_metadef_tag: { key: 'add_metadef_tag', value: 'rule:metadef_default' }, glance-add_metadef_tags: { key: 'add_metadef_tags', value: 'rule:metadef_default' }, glance-delete_metadef_tag: { key: 'delete_metadef_tag', value: 'rule:metadef_default' }, glance-delete_metadef_tags: { key: 'delete_metadef_tags', value: 'rule:metadef_default' } }참고rule:eatadeta_default를 사용하도록 모든 메타 파일 정책을 구성해야 합니다.오버클라우드를 배포할 때
-e옵션을 사용하여 배포 명령에 새 정책 파일을 포함합니다.$ openstack overcloud deploy -e open-up-glance-api-metadef.yaml