SROS2 개요
SROS2(Secure ROS 2)는 ROS2에 보안을 추가하기 위한 기능을 제공하는 보안 확장이다. ROS2의 기본 통신 프로토콜인 DDS(Data Distribution Service)에 보안을 더해, 노드 간의 데이터가 암호화되고, 인증된 노드만이 네트워크에서 통신할 수 있도록 설정할 수 있다. SROS2는 ROS2의 기본 통신 프로토콜에 투명하게 추가되며, 설정에 따라 다양한 보안 기능을 제공할 수 있다.
SROS2 설치
SROS2를 사용하기 위해서는 추가 패키지가 필요하다. ROS2 Humble에서는 SROS2가 기본적으로 패키지에 포함되어 있지만, 다음 명령을 통해 설치할 수 있다:
sudo apt install ros-humble-sros2
설치가 완료되면, SROS2를 통해 보안 인증서를 생성하고, 각 노드에 인증서를 할당할 수 있다.
보안 인증서 생성
SROS2에서 각 노드는 자신을 인증하기 위한 인증서가 필요하다. 이 인증서는 public key infrastructure (PKI)를 기반으로 생성되며, 각 노드는 인증서를 통해 상호 신뢰할 수 있다. SROS2는 이러한 인증서를 생성하고 관리하기 위한 도구들을 제공한다.
인증서 생성을 위해 다음 명령을 실행한다:
ros2 security create_keystore /path/to/keystore
여기서 /path/to/keystore
는 인증서가 저장될 경로이다. 이후 이 경로에는 CA(Certificate Authority) 인증서가 생성된다.
이제 각 노드에 대한 인증서를 생성할 수 있다:
ros2 security create_key /path/to/keystore <node_name>
이 명령은 <node_name>
이라는 이름의 노드에 대한 개인 키와 인증서를 생성한다. 이후 각 노드는 이 인증서를 이용해 보안 통신을 설정할 수 있다.
노드의 보안 설정
각 노드가 보안 기능을 사용하기 위해서는 ROS_SECURITY_ENABLE
환경 변수를 활성화해야 한다. 이를 위해 다음을 설정한다:
export ROS_SECURITY_ENABLE=true
export ROS_SECURITY_STRATEGY=Enforce
export ROS_SECURITY_KEYSTORE=/path/to/keystore
이 명령은 보안 모드를 활성화하고, 각 노드가 /path/to/keystore
에서 인증서를 불러와 사용할 수 있도록 설정한다. 여기서 ROS_SECURITY_STRATEGY=Enforce
는 모든 통신이 반드시 보안 프로토콜을 통해 이루어져야 한다는 것을 의미한다.
노드 간 보안 통신 설정
ROS2에서 SROS2를 사용하여 보안 통신을 설정하려면 각 노드는 생성된 인증서를 사용하여 상호 간의 인증을 수행해야 한다. 이는 ROS2가 사용하는 DDS의 보안 기능을 활성화하는 것으로, 기본적으로 통신을 암호화하고 인증된 노드만 통신할 수 있도록 한다.
노드의 보안 프로파일 설정
SROS2는 각 노드의 보안 설정을 XML 파일로 정의할 수 있는 기능을 제공한다. 이 XML 파일은 각 노드의 접근 권한, 토픽 및 서비스에 대한 제어 권한 등을 설정하는 데 사용된다. 아래는 기본적인 노드 보안 프로파일의 예이다:
<permissions>
<allow_rule>
<topic>/*</topic> <!-- 모든 토픽에 접근 허용 -->
<partition>/*</partition> <!-- 모든 파티션에 접근 허용 -->
<actions>publish, subscribe</actions> <!-- 퍼블리싱 및 서브스크라이빙 허용 -->
</allow_rule>
<allow_rule>
<service>/*</service> <!-- 모든 서비스에 접근 허용 -->
<actions>request, reply</actions> <!-- 서비스 요청 및 응답 허용 -->
</allow_rule>
</permissions>
이 설정 파일은 각 노드가 어떤 토픽을 퍼블리싱하거나 서브스크라이빙할 수 있는지, 어떤 서비스에 접근할 수 있는지를 제어한다. 이러한 XML 파일은 노드의 권한을 보다 세부적으로 관리할 수 있도록 한다.
노드의 정책 적용
SROS2는 DDS 보안 정책을 활용하여 노드 간의 정책을 관리한다. 보안 정책은 다음과 같이 설정할 수 있다:
- 인증 (Authentication): 각 노드는 자신의 인증서를 사용하여 다른 노드와 통신하기 전에 자신을 인증한다.
- 권한 부여 (Authorization): 인증된 노드만이 지정된 권한에 따라 리소스에 접근할 수 있다.
- 암호화 (Encryption): 모든 통신 데이터는 암호화되어 전송되며, 중간에 가로챌 수 없다.
보안 정책을 적용하기 위해서는 각 노드가 위에서 설명한 보안 프로파일 파일을 참조해야 한다. 이 보안 프로파일은 ROS_SECURITY_STRATEGY
환경 변수와 함께 사용되며, 모든 통신은 해당 프로파일에 따라 이루어진다.
export ROS_SECURITY_POLICY=/path/to/security/policy.xml
SROS2 환경에서 노드 실행
SROS2 환경에서 노드를 실행할 때는 반드시 보안 관련 환경 변수를 설정해야 한다. 예를 들어, ROS2에서 보안이 활성화된 상태에서 노드를 실행하려면 다음과 같은 명령어를 사용할 수 있다:
export ROS_SECURITY_ENABLE=true
export ROS_SECURITY_STRATEGY=Enforce
export ROS_SECURITY_KEYSTORE=/path/to/keystore
ros2 run <package_name> <node_name>
위 명령은 SROS2가 활성화된 상태에서 지정된 노드를 실행하며, 해당 노드는 보안 통신을 통해 다른 노드와 통신한다.
보안 기능의 실제 사용 사례
SROS2를 활용하여 로봇 시스템을 운영할 때, 여러 노드 간의 데이터 통신이 이루어지기 때문에 보안은 필수적인 요소가 된다. 예를 들어, 자율주행 차량 시스템에서 라이다(LiDAR) 데이터를 수집하는 노드는 민감한 데이터를 다루기 때문에 해당 데이터를 안전하게 전송하는 것이 중요하다. 이 경우, SROS2를 활용하여 라이다 데이터를 퍼블리싱하는 노드에 대해 인증을 설정하고, 해당 데이터를 구독하는 노드들이 암호화된 데이터를 수신할 수 있도록 보안을 설정할 수 있다.
이를 통해 외부의 공격이나 해킹으로부터 데이터의 무결성을 보장하며, 허가되지 않은 노드는 시스템 내의 중요한 정보에 접근할 수 없게 된다.
SROS2 디버깅 및 로그
SROS2에서 보안 설정을 적용한 후, 노드 간의 통신 문제나 보안 인증 문제가 발생할 수 있다. 이러한 경우, ROS2 로그 시스템과 DDS 보안 로그를 활용하여 문제를 디버깅할 수 있다. 로그는 노드 간의 인증 과정에서 발생한 오류나 경고를 기록하며, 이를 통해 보안 설정이 올바르게 적용되었는지 확인할 수 있다.