본문 바로가기
WIKI 기술 지식 베이스

Security settings

원문 보기 위키 갱신

출처: 문서

본문

보안 설정

Security 플러그인은 클러스터 내에서 사용자, 역할 및 활동을 관리하는 방식을 정의하는 필요한 설정을 저장하는 데 사용되는 여러 YAML 구성 파일을 제공해요. Security 플러그인 구성 파일의 전체 목록은 YAML 파일 수정을 참조하세요.

다음 섹션에서는 opensearch.yml의 보안 관련 설정에 대해 설명해요. opensearch.yml은 <OPENSEARCH_HOME>/config/opensearch.yml에서 찾을 수 있어요. 이러한 설정을 적용하는 방법을 알아보려면 OpenSearch 구성을 참조하세요.

일반 설정

Security 플러그인은 다음 일반 설정을 지원해요:

  • plugins.security.nodes_dn (Static): 클러스터의 다른 노드를 나타내는 고유 이름(DN) 목록을 지정해요. 이 설정은 와일드카드와 정규 표현식을 지원해요. DN 목록은 plugins.security.nodes_dn_dynamic_config_enabled가 true인 경우 YAML 구성 외에도 보안 인덱스에서도 읽혀요. 이 설정이 올바르게 구성되지 않으면 노드가 서로를 신뢰할 수 없어 클러스터가 형성되지 않으며 다음 오류가 발생해요: Transport client authentication no longer supported.

  • plugins.security.nodes_dn_dynamic_config_enabled (Static): 새 cross_cluster 원격이 구성될 때마다 노드를 다시 시작하지 않고 허용 목록에 있는 nodes_dn을 관리해야 하는 cross_cluster 사용 사례와 관련이 있어요. nodes_dn_dynamic_config_enabled를 true로 설정하면 슈퍼 관리자 호출 가능 고유 이름 API가 활성화되어 nodes_dn을 동적으로 업데이트하거나 검색할 수 있어요. 이 설정은 plugins.security.cert.intercluster_request_evaluator_class가 설정되지 않은 경우에만 적용돼요. 기본값은 false예요.

  • plugins.security.authcz.admin_dn (Static): 관리자 권한이 할당되어야 하는 인증서의 DN을 정의해요. 필수예요.

  • plugins.security.roles_mapping_resolution (Static): 백엔드 역할이 Security 역할에 매핑되는 방식을 정의해요. 다음 값이 지원돼요:

    • MAPPING_ONLY(기본값): 매핑은 roles_mapping.yml에 명시적으로 구성되어야 해요.
    • BACKENDROLES_ONLY: 백엔드 역할이 보안 역할에 직접 매핑돼요. roles_mapping.yml의 설정은 효과가 없어요.
    • BOTH: 백엔드 역할이 직접 및 roles_mapping.yml을 통해 보안 역할에 매핑돼요.
  • plugins.security.dls.mode (Static): 문서 수준 보안(DLS) 평가 모드를 설정해요. 기본값은 adaptive예요. DLS 평가 모드 설정 방법을 참조하세요.

  • plugins.security.compliance.salt (Static): 필드 마스킹을 위한 해시 값을 생성할 때 사용할 솔트예요. 최소 32자여야 해요. ASCII 문자만 허용돼요. 선택 사항이에요.

  • plugins.security.compliance.immutable_indices (Static): 불변으로 표시된 인덱스의 문서는 한 번 쓰기, 여러 번 읽기 패러다임을 따라요. 이러한 인덱스에서 생성된 문서는 변경할 수 없으므로 불변이에요.

  • config.dynamic.http.anonymous_auth_enabled (Static): 익명 인증을 활성화해요. 이렇게 하면 모든 HTTP 인증자가 도전하지 않아요. 기본값은 false예요.

  • http.detailed_errors.enabled (Static): OpenSearch 클러스터에 대해 수행된 REST 호출에 대한 자세한 오류 메시지를 활성화해요. true로 설정하면 오류 코드와 함께 root_cause를 제공해요. 기본값은 true예요.

REST 관리 API 설정

Security 플러그인은 다음 REST 관리 API 설정을 지원해요:

  • plugins.security.restapi.roles_enabled (Static): 나열된 역할에 대해 REST 관리 API에 대한 역할 기반 액세스를 활성화해요. 역할은 쉼표로 구분돼요. 기본값은 빈 목록이에요(어떤 역할도 REST 관리 API에 액세스할 수 없음). API에 대한 액세스 제어를 참조하세요.

  • plugins.security.restapi.endpoints_disabled.<role>.<endpoint> (Static): 역할에 대해 특정 엔드포인트와 해당 HTTP 메서드를 비활성화해요. 이 설정의 값은 HTTP 메서드 배열로 구성돼요. 예: plugins.security.restapi.endpoints_disabled.all_access.ACTIONGROUPS: ["PUT","POST","DELETE"]. 기본적으로 모든 엔드포인트와 메서드가 허용돼요. 모든 역할에 대해 엔드포인트를 비활성화하려면 역할 이름 대신 global을 사용하세요. 유효한 <endpoint> 값은 엔드포인트 값을 참조하세요.

  • plugins.security.restapi.admin.enabled (Static): restapi:admin/* 클러스터 권한을 활성화하여 역할에 허용 목록, 고유 이름 및 인증서 API에 대한 액세스 권한을 부여해요. 이 설정이 false이면 이러한 권한은 효과가 없으며 해당 API는 관리자 인증서로만 접근할 수 있어요. 기본값은 false예요. REST API 관리자 권한을 참조하세요.

  • plugins.security.restapi.max_string_length (Static): Security REST API 요청 본문에서 개별 문자열 값에 허용되는 최대 문자 수를 설정해요. 유효한 값은 1에서 50000000 사이예요(포함). 기본값은 4096이에요. REST API를 통해 문서 수준 보안(DLS) 쿼리와 같은 큰 자유 형식 값을 제출하는 경우 이 값을 늘리세요.

  • plugins.security.restapi.password_validation_regex (Static): 로그인 비밀번호의 기준을 설정하는 정규 표현식을 지정해요. 자세한 내용은 비밀번호 설정을 참조하세요.

  • plugins.security.restapi.password_validation_error_message (Static): 비밀번호가 유효성 검사를 통과하지 못할 때 로드되는 오류 메시지를 지정해요. 이 설정은 plugins.security.restapi.password_validation_regex와 함께 사용돼요.

  • plugins.security.restapi.password_min_length (Static): 점수 기반 비밀번호 강도 추정기를 사용할 때 비밀번호 길이의 최소 문자 수를 설정해요. 기본값은 8이에요. 이것은 최소값이기도 해요. 자세한 내용은 비밀번호 설정을 참조하세요.

  • plugins.security.restapi.password_score_based_validation_strength (Static): 비밀번호가 강한지 약한지 결정하는 임계값을 설정해요. 유효한 값은 fair, good, strong, very_strong이에요. 이 설정은 plugins.security.restapi.password_min_length와 함께 사용돼요.

  • plugins.security.unsupported.restapi.allow_securityconfig_modification (Static): 구성 API에 대해 PUT 및 PATCH 메서드 사용을 활성화해요.

고급 설정

Security 플러그인은 다음 고급 설정을 지원해요:

  • plugins.security.authcz.impersonation_dn (Static): 전송 계층 가장을 활성화해요. 이를 통해 DN이 다른 사용자로 가장할 수 있어요. 사용자 가장을 참조하세요.

  • plugins.security.authcz.rest_impersonation_user (Static): REST 계층 가장을 활성화해요. 이를 통해 사용자가 다른 사용자로 가장할 수 있어요. 사용자 가장을 참조하세요.

  • plugins.security.allow_default_init_securityindex (Static): true로 설정하면 OpenSearch Security는 인덱스가 존재하지 않는 경우 /config 디렉토리의 파일로 구성 인덱스를 자동으로 초기화해요.

    이렇게 하면 잘 알려진 기본 비밀번호가 사용돼요. 개인 네트워크/환경에서만 사용하세요. {: .warning}

  • plugins.security.allow_unsafe_democertificates (Static): true로 설정하면 OpenSearch가 데모 인증서로 시작돼요. 이러한 인증서는 데모 목적으로만 발급돼요.

    이러한 인증서는 잘 알려져 있으므로 프로덕션에 안전하지 않아요. 개인 네트워크/환경에서만 사용하세요. {: .warning}

  • plugins.security.ccs.ignore_source_security_roles (Dynamic): true로 설정하면 원격 클러스터가 교차 클러스터 검색 요청에서 조정 클러스터로부터 전파된 보안 역할을 무시하고 자체 roles_mapping.yml 구성만 사용하여 액세스를 평가해요. 기본값은 false예요. 원격 클러스터 역할 평가를 참조하세요.

  • plugins.security.system_indices.permission.enabled (Static): 시스템 인덱스 권한 기능을 활성화해요. true로 설정하면 기능이 활성화되고 역할을 수정할 수 있는 권한이 있는 사용자가 시스템 인덱스에 대한 액세스 권한을 부여하는 권한을 포함하는 역할을 만들 수 있어요. false로 설정하면 권한이 비활성화되고 관리자 인증서가 있는 관리자만 시스템 인덱스를 변경할 수 있어요. 기본적으로 새 클러스터에서는 권한이 false로 설정돼요.

전문가 수준 설정

전문가 수준 설정은 해당 기능을 완전히 이해한 관리자만 구성하고 배포해야 해요. 기능을 오해하면 보안 위험이 발생하거나 Security 플러그인이 제대로 작동하지 않거나 데이터 손실이 발생할 수 있어요. {: .warning}

Security 플러그인은 다음과 같은 전문가 수준 설정을 지원해요.

  • plugins.security.config_index_name (Static): .opendistro_security가 구성을 저장하는 인덱스의 이름이에요.

  • plugins.security.cert.oid (Static): 서버 노드 인증서의 OID(Object Identifier)를 정의해요.

  • plugins.security.cert.intercluster_request_evaluator_class (Static): 인터클러스터 요청을 평가하는 데 사용되는 org.opensearch.security.transport.InterClusterRequestEvaluator의 구현을 지정해요. org.opensearch.security.transport.InterClusterRequestEvaluator의 인스턴스는 org.opensearch.common.settings.Settings 객체를 받는 단일 인자 생성자를 구현해야 해요.

  • plugins.security.enable_snapshot_restore_privilege (Static): false로 설정하면 이 설정은 일반 사용자의 스냅샷 복원을 비활성화해요. 이 경우 관리자 TLS 인증서로 서명된 스냅샷 복원 요청만 허용돼요. true(기본값)로 설정하면 일반 사용자가 cluster:admin/snapshot/restore, indices:admin/create, indices:data/write/index 권한을 가지고 있으면 스냅샷을 복원할 수 있어요.

    스냅샷은 전역 상태를 포함하지 않고 .opendistro_security 인덱스를 복원하지 않는 경우에만 복원할 수 있어요. {: .note}

  • plugins.security.check_snapshot_restore_write_privileges (Static): false로 설정하면 추가 인덱스 검사가 생략돼요. 기본값인 true로 설정하면 스냅샷 복원 시도가 indices:admin/create 및 "indices:data/write/index에 대해 평가돼요.

  • plugins.security.cache.ttl_minutes (Static): 인증 캐싱이 시간 초과될 때까지의 시간을 결정해요. 인증 캐시는 백엔드에서 반환된 사용자 객체를 임시로 저장하여 Security 플러그인이 반복적으로 요청하지 않도록 하여 인증 속도를 높여요. 값을 분 단위로 설정해요. 기본값은 60이에요. 값을 0으로 설정하면 캐싱을 비활성화해요.

  • plugins.security.disabled (Static): OpenSearch Security를 비활성화해요.

    이 플러그인을 비활성화하면 구성(비밀번호 포함)이 공개될 수 있어요. {:warning}

  • plugins.security.protected_indices.enabled (Static): true로 설정하면 보호된 인덱스를 활성화해요. 보호된 인덱스는 일반 인덱스보다 더 안전해요. 이러한 인덱스는 다른 일반 인덱스와 마찬가지로 액세스하려면 역할이 필요하고 표시되려면 추가 역할이 필요해요. 이 설정은 plugins.security.protected_indices.roles 및 plugins.security.protected_indices.indices 설정과 함께 사용돼요.

  • plugins.security.protected_indices.roles (Static): 사용자가 보호된 인덱스에 액세스하기 위해 매핑되어야 하는 역할 목록을 지정해요.

  • plugins.security.protected_indices.indices (Static): 보호된 것으로 표시할 인덱스 목록을 지정해요. 이러한 인덱스는 plugins.security.protected_indices.roles에 지정된 역할에 매핑된 사용자에게만 표시돼요. 이 요구 사항이 충족된 후에도 사용자는 여전히 인덱스에 대한 액세스 권한을 부여하는 데 사용되는 일반 역할에 매핑되어야 해요.

  • plugins.security.system_indices.enabled (Static): true로 설정하면 시스템 인덱스를 활성화해요. 시스템 인덱스는 내용이 암호화되지 않는다는 점을 제외하면 보안 인덱스와 유사해요. 시스템 인덱스로 구성된 인덱스는 슈퍼 관리자 또는 시스템 인덱스 권한을 포함하는 역할을 가진 사용자가 액세스할 수 있어요. 시스템 인덱스에 대한 자세한 내용은 시스템 인덱스를 참조하세요.

  • plugins.security.system_indices.indices (Static): 시스템 인덱스로 사용할 인덱스 목록이에요. 이 설정은 plugins.security.system_indices.enabled 설정에 의해 제어돼요.

  • plugins.security.allow_default_init_securityindex (Static): true로 설정하면 OpenSearch 시작 시 보안 인덱스 생성 시도가 실패할 경우 Security 플러그인을 기본 보안 설정으로 설정해요. 기본 보안 설정은 opensearch-project/security/config 디렉터리에 포함된 YAML 파일에 저장돼요. 기본값은 false예요.

  • plugins.security.cert.intercluster_request_evaluator_class (Static): 인터클러스터 통신을 평가하는 데 사용할 클래스예요.

  • plugins.security.enable_snapshot_restore_privilege (Static): 스냅샷 복원 권한 부여를 활성화해요. 선택 사항이에요. 기본값은 true예요.

  • plugins.security.check_snapshot_restore_write_privileges (Static): 스냅샷 생성 시 쓰기 권한 평가를 적용해요. 기본값은 true예요.

다음 비밀번호 해싱 속성 중 하나라도 변경하면 호환성과 보안을 위해 모든 내부 비밀번호를 다시 해시해야 해요. {: .warning}

  • plugins.security.password.hashing.algorithm: (Static): 사용할 비밀번호 해싱 알고리즘을 지정해요. 다음 값이 지원돼요:

    • BCrypt (기본값)
    • PBKDF2 (FIPS 140-2 및 FIPS 140-3 준수)
    • Argon2
  • plugins.security.password.hashing.bcrypt.rounds (Static): BCrypt로 비밀번호 해싱에 사용할 라운드 수를 지정해요. 유효한 값은 4에서 31 사이(포함)예요. 기본값은 12예요.

  • plugins.security.password.hashing.bcrypt.minor (Static): 비밀번호 해싱에 사용할 BCrypt 알고리즘의 부 버전을 지정해요. 다음 값이 지원돼요:

    • A
    • B
    • Y (기본값)
  • plugins.security.password.hashing.pbkdf2.function (Static): 비밀번호에 적용되는 의사 난수 함수를 지정해요. 다음 값이 지원돼요:

    • SHA1
    • SHA224
    • SHA256 (기본값)
    • SHA384
    • SHA512
  • plugins.security.password.hashing.pbkdf2.iterations (Static): 의사 난수 함수가 비밀번호에 적용되는 횟수를 지정해요. 기본값은 600,000이에요.

  • plugins.security.password.hashing.pbkdf2.length (Static): 최종 파생 키의 원하는 길이를 지정해요. 기본값은 256이에요.

  • plugins.security.password.hashing.argon2.iterations: 알고리즘이 메모리를 통과하는 횟수를 지정해요. 이 값을 늘리면 CPU 계산 시간이 증가하고 무차별 대입 공격에 대한 저항력이 향상돼요. 기본값: 3.

  • plugins.security.password.hashing.argon2.memory: 해싱 중 사용되는 메모리 양(키비바이트)을 지정해요. 기본값: 65536 (64 MiB).

  • plugins.security.password.hashing.argon2.parallelism: 계산에 사용되는 병렬 스레드 수를 지정해요. 기본값: 1.

  • plugins.security.password.hashing.argon2.length: 결과 해시 출력의 길이(바이트)를 지정해요. 기본값: 32.

  • plugins.security.password.hashing.argon2.type: 사용할 Argon2 변형을 지정해요. 다음 값이 지원돼요:

    • Argon2i
    • Argon2d
    • Argon2id (기본값)
  • plugins.security.password.hashing.argon2.version: 사용할 Argon2 버전을 지정해요. 다음 값이 지원돼요:

    • 16
    • 19 (기본값)

감사 로그 설정

Security 플러그인은 다음 감사 로그 설정을 지원해요.

  • plugins.security.audit.enable_rest (Dynamic): REST 요청 로깅을 활성화하거나 비활성화해요. 기본값은 true(활성화)예요.

  • plugins.security.audit.enable_transport (Dynamic): 전송 수준 요청 로깅을 활성화하거나 비활성화해요. 기본값은 false(비활성화)예요.

  • plugins.security.audit.resolve_bulk_requests (Dynamic): 벌크 요청 로깅을 활성화하거나 비활성화해요. 활성화하면 벌크 요청 내의 모든 개별 요청도 함께 로깅돼요. 기본값은 false(비활성화)예요.

  • plugins.security.audit.config.disabled_categories (Dynamic): 지정된 이벤트 범주를 비활성화해요.

  • plugins.security.audit.ignore_requests (Dynamic): 지정된 요청을 로깅에서 제외해요. 액션이나 REST 요청 경로를 포함하는 와일드카드와 정규 표현식을 허용해요.

  • plugins.security.audit.threadpool.size (Static): 이벤트 로깅에 사용되는 스레드 풀의 스레드 수를 결정해요. 기본값은 10이에요. 이 값을 0으로 설정하면 스레드 풀이 비활성화되어 플러그인이 이벤트를 동기식으로 로깅해요.

  • plugins.security.audit.threadpool.max_queue_len (Static): 스레드당 최대 큐 길이를 설정해요. 기본값은 100000이에요.

  • plugins.security.audit.ignore_users (Dynamic): 사용자 배열이에요. 목록에 있는 사용자의 감사 요청은 로깅되지 않아요.

  • plugins.security.audit.type (Static): 감사 로그 이벤트의 대상이에요. 유효한 값은 internal_opensearch, external_opensearch, debug, webhook이에요.

  • plugins.security.audit.enable_standalone (Static): 세분화된 액세스 제어 없이 실행되는 클러스터(SSL 전용 또는 보안 비활성화 모드)에 대해 독립형 감사 로깅을 활성화해요. 이 값을 true로 설정하고 plugins.security.audit.type도 설정하여 독립형 감사 로깅을 활성화하세요. 기본값은 false예요. 자세한 내용은 독립형 감사 로깅을 참조하세요.

  • plugins.security.audit.config.body_logging_exclusions (Dynamic): 요청 본문 로깅이 억제되는 액션 그룹 이름 또는 원시 액션 및 경로 패턴의 목록이에요. 기본값은 []이며, 모든 요청 본문을 로깅해요. 자세한 내용은 본문 로깅 제외를 참조하세요.

  • plugins.security.audit.config.action_groups.<NAME> (Static): body_logging_exclusions와 함께 사용할 액션 및 경로 패턴의 명명된 그룹을 정의해요. 각 그룹은 전송 액션 패턴, REST 경로 또는 둘 다의 쉼표로 구분된 문자열이에요. 와일드카드를 지원해요.

  • plugins.security.audit.config.log4j.enable_mdc_routing (Static): Log4j 감사 싱크에 대해 MDC(Mapped Diagnostic Context) 라우팅을 활성화해요. 활성화하면 감사 이벤트가 audit_category, audit_action, audit_user, audit_request_type MDC 키를 설정하며, Log4j 라우팅 어펜더가 이를 사용할 수 있어요. 기본값은 false예요.

  • plugins.security.audit.config.http_endpoints (Static): localhost에 대한 엔드포인트 목록이에요.

  • plugins.security.audit.config.index (Static): 감사 로그 인덱스예요. 기본값은 날짜 롤링 패턴 "'security-auditlog-'YYYY.MM.dd"이며, 매일 새 인덱스를 생성해요(예: security-auditlog-2023.06.15). 대신 고정 인덱스 이름을 지정할 수도 있어요. 어떤 경우든 인덱스를 적절히 보호해야 해요.

  • plugins.security.audit.config.type (Static): 감사 로그 유형을 auditlog로 지정해요.

  • plugins.security.audit.config.username (Static): 감사 로그 구성의 사용자 이름이에요.

  • plugins.security.audit.config.password (Static): 감사 로그 구성의 비밀번호예요.

  • plugins.security.audit.config.enable_ssl (Static): 감사 로깅에 SSL을 활성화하거나 비활성화해요.

  • plugins.security.audit.config.verify_hostnames (Static): SSL/TLS 인증서의 호스트 이름 확인을 활성화하거나 비활성화해요. 기본값은 true(활성화)예요.

  • plugins.security.audit.config.enable_ssl_client_auth (Static): SSL/TLS 클라이언트 인증을 활성화하거나 비활성화해요. 기본값은 false(비활성화)예요.

  • plugins.security.audit.config.cert_alias (Static): 감사 로그 액세스에 사용되는 인증서의 별칭이에요.

  • plugins.security.audit.config.pemkey_filepath (Static): 감사 로깅에 사용되는 PEM(Privacy Enhanced Mail) 키의 /config 상대 파일 경로예요.

  • plugins.security.audit.config.pemkey_content (Static): 감사 로깅에 사용되는 PEM 키의 Base64 인코딩 콘텐츠예요. ...config.pemkey_filepath의 대안이에요.

  • plugins.security.audit.config.pemkey_password (Static): 클라이언트가 사용하는 PEM 형식 개인 키의 비밀번호예요.

  • plugins.security.audit.config.pemcert_filepath (Static): 감사 로깅에 사용되는 PEM 인증서의 /config 상대 파일 경로예요.

  • plugins.security.audit.config.pemcert_content (Static): 감사 로깅에 사용되는 PEM 인증서의 Base64 인코딩 콘텐츠예요. ...config.pemcert_filepath로 파일 경로를 지정하는 대안이에요.

  • plugins.security.audit.config.pemtrustedcas_filepath (Static): 신뢰할 수 있는 루트 인증 기관의 /config 상대 파일 경로예요.

  • plugins.security.audit.config.pemtrustedcas_content (Static): 루트 인증 기관의 Base64 인코딩 콘텐츠예요. ...config.pemtrustedcas_filepath의 대안이에요.

  • plugins.security.audit.config.webhook.url (Static): 웹훅 URL이에요.

  • plugins.security.audit.config.webhook.format (Static): 웹훅에 사용되는 형식이에요. 유효한 값은 URL_PARAMETER_GET, URL_PARAMETER_POST, TEXT, JSON, SLACK이에요.

  • plugins.security.audit.config.webhook.ssl.verify (Static): 웹훅 요청과 함께 전송되는 SSL/TLS 인증서의 확인을 활성화하거나 비활성화해요. 기본값은 true(활성화)예요.

  • plugins.security.audit.config.webhook.ssl.pemtrustedcas_filepath (Static): 웹훅 요청을 확인할 때 사용하는 신뢰할 수 있는 인증 기관의 /config 상대 파일 경로예요.

  • plugins.security.audit.config.webhook.ssl.pemtrustedcas_content (Static): 웹훅 요청을 확인하는 데 사용되는 인증 기관의 Base64 인코딩 콘텐츠예요. ...config.pemtrustedcas_filepath의 대안이에요.

  • plugins.security.audit.config.log4j.logger_name (Static): Log4j 로거의 사용자 지정 이름이에요.

  • plugins.security.audit.config.log4j.level (Static): Log4j 로거의 기본 로그 수준을 제공해요. 유효한 값은 OFF, FATAL, ERROR, WARN, INFO, DEBUG, TRACE, ALL이에요. 기본값은 INFO예요.

  • opendistro_security.audit.config.disabled_rest_categories (Dynamic): 로거가 무시할 REST 범주 목록이에요. 유효한 값은 AUTHENTICATED와 GRANTED_PRIVILEGES예요.

  • opendistro_security.audit.config.disabled_transport_categories (Dynamic): 로거가 무시할 전송 계층 범주 목록이에요. 유효한 값은 AUTHENTICATED와 GRANTED_PRIVILEGES예요.

세분화된 액세스 제어(FGAC)가 활성화되면 동적 감사 필터 설정이나 plugins.security.audit.compliance.* 설정을 업데이트하는 PUT _cluster/settings 요청은 호출자가 plugins.security.restapi.roles_enabled에 나열된 역할을 보유하지 않은 경우 거부돼요. 이 제한은 SSL 전용 또는 보안 비활성화 모드에서는 적용되지 않아요. plugins.security.audit.config.body_logging_exclusions 및 plugins.security.audit.config.action_groups.<NAME> 설정은 예외이며 상위 역할이 필요하지 않아요.

다음 표는 각 모드에서 호출자가 GET _cluster/settings를 사용하여 읽을 수 있는 감사 설정을 설명해요.

모드 설정 응답에서 볼 수 있는 감사 설정
SSL 전용 모든 호출자가 plugins.security.audit.config.* 및 plugins.security.audit.compliance.* 아래의 비밀 아닌 동적 구성을 읽을 수 있어요. 자격 증명을 포함하는 싱크 설정은 숨겨진 상태로 유지돼요.
보안 비활성화 plugins.security.audit.* 설정이 필터링되지 않으므로 싱크 자격 증명과 PEM 콘텐츠가 표시될 수 있어요.
FGAC 모든 호출자에 대해 전체 plugins.security.audit.* 하위 트리가 필터링돼요. 이 필터링은 역할 기반이 아니에요.

호스트 이름 확인 및 DNS 조회 설정

Security 플러그인은 다음 호스트 이름 확인 및 DNS 조회 설정을 지원해요.

  • transport.ssl.enforce_hostname_verification (Static): 전송 계층에서 호스트 이름을 확인할지 여부예요. 선택 사항이에요. 기본값은 true예요.

  • transport.ssl.resolve_hostname (Static): 전송 계층에서 DNS에 대해 호스트 이름을 확인할지 여부예요. 선택 사항이에요. 기본값은 true예요. 호스트 이름 확인이 활성화된 경우에만 작동해요.

자세한 내용은 호스트 이름 확인 및 DNS 조회를 참조하세요.

클라이언트 인증 설정

Security 플러그인은 다음 클라이언트 인증 설정을 지원해요.

  • plugins.security.ssl.http.clientauth_mode (Static): 사용할 TLS 클라이언트 인증 모드예요. 유효한 값은 OPTIONAL(기본값), REQUIRE, NONE이에요. 선택 사항이에요.

자세한 내용은 클라이언트 인증을 참조하세요.

활성화된 암호 및 프로토콜 설정

Security 플러그인은 다음 활성화된 암호 및 프로토콜 설정을 지원해요. 각 설정은 배열로 표현해야 해요.

  • plugins.security.ssl.http.enabled_ciphers (Static): REST 계층에 대해 활성화된 TLS 암호화 제품군이에요. Java 형식만 지원해요.

  • plugins.security.ssl.http.enabled_protocols (Static): REST 계층에 대해 활성화된 TLS 프로토콜이에요. Java 형식만 지원해요.

  • plugins.security.ssl.transport.enabled_ciphers (Static): 전송 계층에 대해 활성화된 TLS 암호화 제품군이에요. Java 형식만 지원해요.

  • plugins.security.ssl.transport.enabled_protocols (Static): 전송 계층에 대해 활성화된 TLS 프로토콜이에요. Java 형식만 지원해요.

자세한 내용은 활성화된 암호 및 프로토콜을 참조하세요.

키스토어 및 트러스트스토어 파일---전송 계층 TLS 설정

Security 플러그인은 다음 전송 계층 TLS 키스토어 및 트러스트스토어 설정을 지원해요.

  • plugins.security.ssl.transport.keystore_type (Static): 키스토어 파일의 유형이에요. 선택 사항이에요. 유효한 값은 JKS 또는 PKCS12/PFX예요. 기본값은 JKS예요.

  • plugins.security.ssl.transport.keystore_filepath (Static): 키스토어 파일의 경로예요. config 디렉터리 아래에 있어야 하며 상대 경로로 지정해요. 필수예요.

  • plugins.security.ssl.transport.keystore_alias (Static): 키스토어 별칭 이름이에요. 선택 사항이에요. 기본값은 첫 번째 별칭이에요.

  • plugins.security.ssl.transport.keystore_password (Static): 키스토어 비밀번호예요. 기본값은 changeit이에요.

  • plugins.security.ssl.transport.truststore_type (Static): 트러스트스토어 파일의 유형이에요. 선택 사항이에요. 유효한 값은 JKS 또는 PKCS12/PFX예요. 기본값은 JKS예요.

  • plugins.security.ssl.transport.truststore_filepath (Static): 트러스트스토어 파일의 경로예요. config 디렉터리 아래에 있어야 하며 상대 경로로 지정해요. 필수예요.

  • plugins.security.ssl.transport.truststore_alias (Static): 트러스트스토어 별칭 이름이에요. 선택 사항이에요. 기본값은 모든 인증서예요.

  • plugins.security.ssl.transport.truststore_password (Static): 트러스트스토어 비밀번호예요. 기본값은 changeit이에요.

키스토어 및 트러스트스토어 파일에 대한 자세한 내용은 전송 계층 TLS를 참조하세요.

키스토어 및 트러스트스토어 파일---REST 계층 TLS 설정

Security 플러그인은 다음 REST 계층 TLS 키스토어 및 트러스트스토어 설정을 지원해요.

  • plugins.security.ssl.http.enabled (Static): REST 계층에서 TLS를 활성화할지 여부예요. 활성화하면 HTTPS만 허용돼요. 선택 사항이에요. 기본값은 false예요.

  • plugins.security.ssl.http.keystore_type (Static): 키스토어 파일의 유형이에요. 선택 사항이에요. 유효한 값은 JKS 또는 PKCS12/PFX예요. 기본값은 JKS예요.

  • plugins.security.ssl.http.keystore_filepath (Static): 키스토어 파일의 경로예요. config 디렉터리 아래에 있어야 하며 상대 경로로 지정해요. 필수예요.

  • plugins.security.ssl.http.keystore_alias (Static): 키스토어 별칭 이름이에요. 선택 사항이에요. 기본값은 첫 번째 별칭이에요.

  • plugins.security.ssl.http.keystore_password: 키스토어 비밀번호예요. 기본값은 changeit이에요.

  • plugins.security.ssl.http.truststore_type: 트러스트스토어 파일의 유형이에요. 선택 사항이에요. 유효한 값은 JKS 또는 PKCS12/PFX예요. 기본값은 JKS예요.

  • plugins.security.ssl.http.truststore_filepath: 트러스트스토어 파일의 경로예요. config 디렉터리 아래에 있어야 하며 상대 경로로 지정해요. 필수예요.

  • plugins.security.ssl.http.truststore_alias (Static): 트러스트스토어 별칭 이름이에요. 선택 사항이에요. 기본값은 모든 인증서예요.

  • plugins.security.ssl.http.truststore_password (Static): 트러스트스토어 비밀번호예요. 기본값은 changeit이에요.

자세한 내용은 REST 계층 TLS를 참조하세요.

X.509 PEM 인증서와 PKCS #8 키---전송 계층 TLS 설정

Security 플러그인은 X.509 PEM 인증서와 PKCS #8 키와 관련된 다음과 같은 전송 계층 TLS 설정을 지원해요.

  • plugins.security.ssl.transport.pemkey_filepath (Static): 인증서 키 파일(PKCS #8)의 경로예요. config 디렉터리 아래에 있어야 하며, 상대 경로로 지정해요. 필수예요.

  • plugins.security.ssl.transport.pemkey_password (Static): 키 비밀번호예요. 키에 비밀번호가 없으면 이 설정을 생략해요. 선택사항이에요.

  • plugins.security.ssl.transport.pemcert_filepath (Static): X.509 노드 인증서 체인(PEM 형식)의 경로예요. config 디렉터리 아래에 있어야 하며, 상대 경로로 지정해요. 필수예요.

  • plugins.security.ssl.transport.pemtrustedcas_filepath (Static): 루트 인증 기관(PEM 형식)의 경로예요. config 디렉터리 아래에 있어야 하며, 상대 경로로 지정해요. 필수예요.

자세한 내용은 REST 레이어 TLS를 참고해요.

X.509 PEM 인증서와 PKCS #8 키---REST 레이어 TLS 설정

Security 플러그인은 X.509 PEM 인증서와 PKCS #8 키와 관련된 다음과 같은 REST 레이어 TLS 설정을 지원해요.

  • plugins.security.ssl.http.enabled (Static): REST 레이어에서 TLS를 활성화할지 여부예요. 활성화하면 HTTPS만 허용해요. 선택사항이에요. 기본값은 false예요.

  • plugins.security.ssl.http.pemkey_filepath (Static): 인증서 키 파일(PKCS #8)의 경로예요. config 디렉터리 아래에 있어야 하며, 상대 경로로 지정해요. 필수예요.

  • plugins.security.ssl.http.pemkey_password (Static): 키 비밀번호예요. 키에 비밀번호가 없으면 이 설정을 생략해요. 선택사항이에요.

  • plugins.security.ssl.http.pemcert_filepath (Static): X.509 노드 인증서 체인(PEM 형식)의 경로예요. config 디렉터리 아래에 있어야 하며, 상대 경로로 지정해요. 필수예요.

  • plugins.security.ssl.http.pemtrustedcas_filepath: 루트 인증 기관(PEM 형식)의 경로예요. config 디렉터리 아래에 있어야 하며, 상대 경로로 지정해요. 필수예요.

자세한 내용은 REST 레이어 TLS를 참고해요.

전송 계층 보안 설정

Security 플러그인은 다음과 같은 전송 계층 보안 설정을 지원해요.

  • plugins.security.ssl.transport.enabled (Static): REST 레이어에서 TLS를 활성화할지 여부예요.

  • plugins.security.ssl.transport.client.pemkey_password (Static): 전송 클라이언트가 사용하는 PEM 형식 개인 키의 비밀번호예요.

  • plugins.security.ssl.transport.keystore_keypassword (Static): 키스토어 내 키의 비밀번호예요.

  • plugins.security.ssl.transport.server.keystore_keypassword (Static): 서버 키스토어 내 키의 비밀번호예요.

  • plugins.sercurity.ssl.transport.server.keystore_alias (Static): 서버 키스토어의 별칭 이름이에요.

  • plugins.sercurity.ssl.transport.client.keystore_alias (Static): 클라이언트 키스토어의 별칭 이름이에요.

  • plugins.sercurity.ssl.transport.server.truststore_alias (Static): 서버 트러스트스토어의 별칭 이름이에요.

  • plugins.sercurity.ssl.transport.client.truststore_alias (Static): 클라이언트 트러스트스토어의 별칭 이름이에요.

  • plugins.security.ssl.client.external_context_id (Static): 전송 클라이언트에 외부 SSL 컨텍스트에 사용할 ID를 제공해요.

  • plugins.secuirty.ssl.transport.principal_extractor_class (Static): 인증서의 사용자 지정 부분을 주체로 사용하도록 추출기를 구현하는 클래스를 지정해요.

  • plugins.security.ssl.http.crl.file_path (Static): 인증서 해지 목록 파일의 경로예요.

  • plugins.security.ssl.http.crl.validate (Static): 인증서 해지 목록(CRL) 검증을 활성화해요. 기본값은 false(비활성화)예요.

  • plugins.security.ssl.http.crl.prefer_crlfile_over_ocsp (Static): 인증서에 둘 다 포함된 경우 CRL 인증서 항목을 OCSP(Online Certificate Status Protocol) 항목보다 선호할지 여부예요. 선택사항이에요. 기본값은 false예요.

  • plugins.security.ssl.http.crl.check_only_end_entitites (Static): true이면 리프 인증서만 검증해요. 기본값은 true예요.

  • plugins.security.ssl.http.crl.disable_ocsp (Static): OCSP를 비활성화해요. 기본값은 false(OCSP 활성화)예요.

  • plugins.security.ssl.http.crl.disable_crldp (Static): 인증서의 CRL 엔드포인트를 비활성화해요. 기본값은 false(CRL 엔드포인트 활성화)예요.

  • plugins.security.ssl.allow_client_initiated_renegotiation (Static): 클라이언트 재협상을 활성화하거나 비활성화해요. 기본값은 false(클라이언트 시작 재협상 허용 안 함)예요.

  • plugins.security_config.ssl_dual_mode_enabled (Static): 이중 모드 SSL을 활성화해서 노드가 전송 계층에서 암호화된(TLS) 트래픽과 암호화되지 않은 트래픽을 모두 수락할 수 있게 해요. true로 설정하면 노드가 SSL 또는 비SSL 연결을 사용하여 다른 노드와 통신할 수 있어요. 이 설정은 롤링 재시작 과정을 통해 클러스터를 보안 비활성화 상태에서 보안 활성화 상태로 마이그레이션하는 등의 전환 시나리오를 위해 설계되었어요. 이 설정은 프로덕션 환경에서 무기한 사용하면 안 돼요. 마이그레이션 중에만 일시적으로 사용하고, 클러스터의 모든 노드가 동일한 보안 구성을 사용하게 되면 비활성화해요. 기본값은 false예요.

Security 플러그인 설정 예시

# Common configuration settings
plugins.security.nodes_dn:
  - "CN=*.example.com, OU=SSL, O=Test, L=Test, C=DE"
  - "CN=node.other.com, OU=SSL, O=Test, L=Test, C=DE"
  - "CN=node.example.com, OU=SSL\\, Inc., L=Test, C=DE" # escape additional comma with `\\`
plugins.security.authcz.admin_dn:
  - CN=kirk,OU=client,O=client,L=test, C=de
plugins.security.roles_mapping_resolution: MAPPING_ONLY
plugins.security.ssl.transport.pemcert_filepath: esnode.pem
plugins.security.ssl.transport.pemkey_filepath: esnode-key.pem
plugins.security.ssl.transport.pemtrustedcas_filepath: root-ca.pem
transport.ssl.enforce_hostname_verification: false
plugins.security.ssl.http.enabled: true
plugins.security.ssl.http.pemcert_filepath: esnode.pem
plugins.security.ssl.http.pemkey_filepath: esnode-key.pem
plugins.security.ssl.http.pemtrustedcas_filepath: root-ca.pem
plugins.security.allow_unsafe_democertificates: true
plugins.security.allow_default_init_securityindex: true
plugins.security.nodes_dn_dynamic_config_enabled: false
plugins.security.cert.intercluster_request_evaluator_class: # need example value for this.
plugins.security.audit.type: internal_opensearch
plugins.security.enable_snapshot_restore_privilege: true
plugins.security.check_snapshot_restore_write_privileges: true
plugins.security.cache.ttl_minutes: 60
plugins.security.restapi.roles_enabled: ["all_access", "security_rest_api_access"]
plugins.security.system_indices.enabled: true
plugins.security.system_indices.indices: [".opendistro-alerting-config", ".opendistro-alerting-alert*", ".opendistro-anomaly-results*", ".opendistro-anomaly-detector*", ".opendistro-anomaly-checkpoints", ".opendistro-anomaly-detection-state", ".opendistro-reports-*", ".opendistro-notifications-*", ".opendistro-notebooks", ".opendistro-asynchronous-search-response*"]
node.max_local_storage_nodes: 3
plugins.security.restapi.password_validation_regex: '(?=.*[A-Z])(?=.*[^a-zA-Z\d])(?=.*[0-9])(?=.*[a-z]).{8,}'
plugins.security.restapi.password_validation_error_message: "Password must be minimum 8 characters long and must contain at least one uppercase letter, one lowercase letter, one digit, and one special character."
plugins.security.allow_default_init_securityindex: true
plugins.security.cache.ttl_minutes: 60
#
# REST Management API configuration settings
plugins.security.restapi.roles_enabled: ["all_access","xyz_role"]
plugins.security.restapi.endpoints_disabled.all_access.ACTIONGROUPS: ["PUT","POST","DELETE"] # Alternative example: plugins.security.restapi.endpoints_disabled.xyz_role.INTERNALUSERS: ["DELETE"] #
# Audit log configuration settings
plugins.security.audit.enable_rest: true
plugins.security.audit.enable_transport: false
plugins.security.audit.resolve_bulk_requests: false
plugins.security.audit.config.disabled_categories: ["AUTHENTICATED","GRANTED_PRIVILEGES"]
plugins.security.audit.ignore_requests: ["indices:data/read/*","*_bulk"]
plugins.security.audit.threadpool.size: 10
plugins.security.audit.threadpool.max_queue_len: 100000
plugins.security.audit.ignore_users: ['kibanaserver','some*user','/also.*regex possible/']
plugins.security.audit.type: internal_opensearch
#
# external_opensearch settings
plugins.security.audit.config.http_endpoints: ['localhost:9200','localhost:9201','localhost:9202']
plugins.security.audit.config.index: "'security-auditlog-'2023.06.15"
plugins.security.audit.config.type: auditlog
plugins.security.audit.config.username: auditloguser
plugins.security.audit.config.password: auditlogpassword
plugins.security.audit.config.enable_ssl: false
plugins.security.audit.config.verify_hostnames: false
plugins.security.audit.config.enable_ssl_client_auth: false
plugins.security.audit.config.cert_alias: mycert
plugins.security.audit.config.pemkey_filepath: key.pem
plugins.security.audit.config.pemkey_content: <...pem base 64 content>
plugins.security.audit.config.pemkey_password: secret
plugins.security.audit.config.pemcert_filepath: cert.pem
plugins.security.audit.config.pemcert_content: <...pem base 64 content>
plugins.security.audit.config.pemtrustedcas_filepath: ca.pem
plugins.security.audit.config.pemtrustedcas_content: <...pem base 64 content>
#
# Webhook settings
plugins.security.audit.config.webhook.url: "http://mywebhook/endpoint"
plugins.security.audit.config.webhook.format: JSON
plugins.security.audit.config.webhook.ssl.verify: false
plugins.security.audit.config.webhook.ssl.pemtrustedcas_filepath: ca.pem
plugins.security.audit.config.webhook.ssl.pemtrustedcas_content: <...pem base 64 content>
#
# log4j settings
plugins.security.audit.config.log4j.logger_name: auditlogger
plugins.security.audit.config.log4j.level: INFO
#
# Advanced configuration settings
plugins.security.authcz.impersonation_dn:
  "CN=spock,OU=client,O=client,L=Test,C=DE":
    - worf
  "cn=webuser,ou=IT,ou=IT,dc=company,dc=com":
    - user2
    - user1
plugins.security.authcz.rest_impersonation_user:
  "picard":
    - worf
  "john":
    - steve
    - martin
plugins.security.allow_default_init_securityindex: false
plugins.security.allow_unsafe_democertificates: false
plugins.security.cache.ttl_minutes: 60
plugins.security.restapi.password_validation_regex: '(?=.*[A-Z])(?=.*[^a-zA-Z\d])(?=.*[0-9])(?=.*[a-z]).{8,}'
plugins.security.restapi.password_validation_error_message: "A password must be at least 8 characters long and contain at least one uppercase letter, one lowercase letter, one digit, and one special character."
plugins.security.restapi.password_min_length: 8
plugins.security.restapi.password_score_based_validation_strength: very_strong
#
# Advanced SSL settings - use only if you understand SSL ins and outs
plugins.security.ssl.transport.client.pemkey_password: superSecurePassword1
plugins.security.ssl.transport.keystore_keypassword: superSecurePassword2
plugins.security.ssl.transport.server.keystore_keypassword: superSecurePassword3
plugins.security.ssl.http.keystore_keypassword: superSecurePassword4
plugins.security.ssl.http.clientauth_mode: REQUIRE
plugins.security.ssl.transport.enabled: true
plugins.security.ssl.transport.server.keystore_alias: my_alias
plugins.security.ssl.transport.client.keystore_alias: my_other_alias
plugins.security.ssl.transport.server.truststore_alias: trustore_alias_1
plugins.security.ssl.transport.client.truststore_alias: trustore_alias_2
plugins.security.ssl.client.external_context_id: my_context_id
plugins.security.ssl.transport.principal_extractor_class: org.opensearch.security.ssl.ExampleExtractor
plugins.security.ssl.http.crl.file_path: ssl/crl/revoked.crl
plugins.security.ssl.http.crl.validate: true
plugins.security.ssl.http.crl.prefer_crlfile_over_ocsp: true
plugins.security.ssl.http.crl.check_only_end_entitites: false
plugins.security.ssl.http.crl.disable_ocsp: true
plugins.security.ssl.http.crl.disable_crldp: true
plugins.security.ssl.allow_client_initiated_renegotiation: true
#
# Expert settings - use only if you understand their use completely: accidental values can potentially cause security risks or failures to OpenSearch Security.
plugins.security.config_index_name: .opendistro_security
plugins.security.cert.oid: '1.2.3.4.5.5'
plugins.security.cert.intercluster_request_evaluator_class: org.opensearch.security.transport.DefaultInterClusterRequestEvaluator
plugins.security.enable_snapshot_restore_privilege: true
plugins.security.check_snapshot_restore_write_privileges: true
plugins.security.cache.ttl_minutes: 60
plugins.security.disabled: false
plugins.security.protected_indices.enabled: true
plugins.security.protected_indices.roles: ['all_access']
plugins.security.protected_indices.indices: []
plugins.security.system_indices.enabled: true
plugins.security.system_indices.indices: ['.opendistro-alerting-config', '.opendistro-ism-*', '.opendistro-reports-*', '.opensearch-notifications-*', '.opensearch-notebooks', '.opensearch-observability', '.opendistro-asynchronous-search-response*', '.replication-metadata-store']

{% include copy.html %}

더 알아보기 (Learn more)