Shashank K S

보안 간소화: Amazon Bedrock과 Elastic의 통합

이 문서에서는 Amazon Bedrock 통합을 설정하고 Elastic의 사전 구축된 탐지 규칙을 활성화하여 보안 운영을 간소화하는 프로세스를 안내합니다.

Streamlining Security: Integrating Amazon Bedrock with Elastic

서문

끊임없이 진화하는 클라우드 컴퓨팅 환경에서 강력한 보안을 유지하면서 규정 준수를 보장하는 것은 모든 규모의 조직에게 중요한 과제입니다. 기업의 클라우드 도입이 증가함에 따라 다양한 플랫폼에서 데이터를 관리하고 보호해야 하는 복잡성이 기하급수적으로 증가하고 있습니다.

강력한 머신 러닝 및 AI 서비스 기반을 갖춘 Amazon Bedrock은 조직이 지능형 애플리케이션을 개발 및 배포할 수 있는 확장 가능하고 안전한 환경을 제공합니다. 하지만 이러한 혁신의 잠재력을 최대한 활용하려면 보안 및 규정 준수에 대한 간소화된 접근 방식을 구현하는 것이 필수적입니다.

Elastic과 Amazon Bedrock을 통합하면 클라우드 환경 내에서 보안 모니터링과 규정 준수 관리를 크게 향상시킬 수 있습니다. 이 통합은 Elastic의 검색, 통합 가시성, 보안 기능을 활용하여 Amazon Bedrock에서 호스팅되는 애플리케이션과 데이터를 관리하고 보호하는 방법을 최적화합니다.

Elastic의 보안 정보 및 이벤트 관리(SIEM) 기능은 Amazon Bedrock에서 실행되는 애플리케이션에서 생성된 로그를 분석하고 이벤트를 모니터링하는 데 사용할 수 있습니다. 이를 통해 잠재적인 보안 위협을 실시간으로 탐지하고 자동화된 대응 조치를 통해 위험을 완화할 수 있습니다.

이 문서에서는 Amazon Bedrock 통합을 설정하고 미리 빌드된 탐지 규칙을 활성화하여 보안 운영을 간소화하는 프로세스를 안내합니다. 다음과 같은 주요 측면을 다룹니다:

  1. Elastic Amazon Bedrock 통합을 위한 전제 조건: 클라우드 보안을 위한 Elastic Amazon Bedrock 통합을 설정하기 위한 핵심 요구 사항 이해.
  2. Amazon Bedrock 통합 설정하기: 기존 AWS 인프라에서 Amazon Bedrock을 설정하는 단계별 지침입니다.
  3. 미리 빌드된 보안 규칙 사용 설정하기: 사전 구축된 규칙을 활용하여 신뢰도가 높은 정책 위반 및 기타 보안 위협을 탐지하는 방법에 대해 알아보세요.
  4. 고신뢰 위법 행위 차단 탐지 살펴보기: 아마존 베드락로그 내에서 신뢰도가 높은 위법 행위 블록을 탐지하도록 설계된 특정 사전 구축 규칙에 대해 자세히 살펴봅니다.
  5. Amazon Bedrock에 대한 익스플로잇 사례 시나리오 시연: 샘플 Python 스크립트를 사용해 Elastic 사전 구축 탐지 규칙을 트리거할 수 있는 익스플로잇 시나리오를 테스트하기 위해 Amazon Bedrock 모델과의 상호 작용을 시뮬레이션합니다.

Elastic Amazon Bedrock 통합을 위한 전제 조건

아마존 베드락을 위한 Elastic 통합

Amazon Bedrock 통합은 Elastic Agent를 통해 Amazon Bedrock 모델 호출 로그와 런타임 메트릭을 수집합니다. 통합에 대한 자세한 내용은 문서에서확인할 수 있습니다.

다음은 Amazon Bedrock Elastic 통합을 완전하고 성공적으로 구성하기 위한 전제 조건 목록입니다:

  • AWS 계정 설정
  • Elastic Cloud 요구 사항
  • 테라폼(선택 사항)

AWS 계정 설정

  • 활성 AWS 계정: Amazon Bedrock에서 리소스를 배포하고 관리할 수 있는 적절한 권한이 있는 활성 AWS 계정이 있는지 확인합니다.
  • Amazon Bedrock 설정: Amazon Bedrock이 AWS 환경 내에서 올바르게 구성되고 작동하는지 확인합니다. 여기에는 애플리케이션에 필요한 AI 모델, 데이터 세트 및 기타 리소스 설정이 포함됩니다. 설정에 대한 자세한 내용은 Amazon Bedrock 시작하기를 참조하세요.
  • IAM 역할 및 권한: Elastic이 Amazon Bedrock 리소스에 액세스할 수 있도록 필요한 권한이 있는 ID 및 액세스 관리(IAM) 역할을 생성하거나 구성하세요. 이러한 역할에는 AWS 서비스에서 로그, 메트릭 및 추적을 읽을 수 있는 충분한 권한이 있어야 합니다. 요구 사항에 대한 자세한 내용은 AWS 설명서에서 확인할 수 있습니다.

Elastic Cloud 요구 사항

버전0.7.0 (베타)
호환되는 Kibana 버전통합 버전 0.2.0 이상의 경우 8.13.0 이상. 최소 Kibana 버전 8.12.0
지원되는 서버리스 프로젝트 유형보안 관찰 가능성
구독 레벨기본
지원 수준Elastic

참고: 통합이 베타 릴리즈 단계에 있으므로 Elastic 스택의 관리 창에 있는 통합 찾아보기 섹션에서 베타 통합 표시를 활성화하세요.

테라폼

Terraform은 해시코프에서 만든 오픈 소스 코드형 인프라(IaC) 도구로, 일관되고 반복 가능한 방식으로 클라우드 및 온프레미스 인프라를 정의, 프로비저닝, 관리할 수 있게 해줍니다.

이 단계는 선택 사항이지만 이 글의 다음 섹션에서 이 도구를 사용하여 필요한 AWS 인프라를 설정할 때 유용하게 사용할 수 있습니다. 설치 및 문서에 대한 자세한 내용은 여기에서 확인할 수 있습니다.

Amazon Bedrock 통합 설정

이 문서의 이 섹션에서는 두 부분으로 나누어 Amazon Bedrock과 Elastic의 통합을 설정하는 단계를 안내해드립니다:

  1. Terraform으로 AWS 인프라 설정하기: 이 섹션에서는 Terraform을 사용하여 AWS 인프라를 설정하는 단계를 안내합니다. S3 버킷에 액세스하는 데 필요한 IAM 역할 및 정책이 포함된 EC2 인스턴스인 S3 버킷을 생성하고 SSH 액세스를 허용하도록 보안 그룹을 구성하겠습니다. 이 설정은 데이터 처리 또는 저장 등 S3와 상호 작용하기 위해 EC2 인스턴스가 필요한 시나리오에 이상적입니다.
  2. Elastic 에이전트 및 통합 설정: 이 섹션에서는 AWS EC2 인스턴스에 Elastic Agent를 설치하고 Amazon Bedrock 통합을 구성하는 단계를 안내해드립니다.

Terraform으로 AWS 인프라 설정

높은 수준의 구성 프로세스에는 다음 단계가 포함됩니다:

  1. 구성 providers.tf
  2. 구성 variables.tf
  3. 구성 outputs.tf
  4. 구성 main.tf

providers.tf 파일에는 일반적으로 프로젝트에서 사용하는 모든 Terraform 공급자에 대한 구성이 포함되어 있습니다. 이 예제에는 AWS 공급자에 대한 구성이 포함되어 있습니다. 다음은 providers.tf 파일의 샘플 콘텐츠입니다. providers.tf 에 언급된 profile 은 AWS 자격 증명 파일 (~/.aws/credentials) 의 사용자 공간에 구성되어야 합니다. Elastic의 AWS 설명서의 자격 증명 섹션에도 강조 표시되어 있는 구성 및 자격 증명 파일 설정 - AWS 명령줄 인터페이스를 참조하세요.

variables.tf 파일에는 Terraform 구성 전반에 걸쳐 사용되는 변수 정의가 포함되어 있습니다. 이 시나리오의 경우, 여기에는 aws_region 및 resource_labels에 대한 정의가 포함되어 있습니다. 다음은 variables.tf 파일의 샘플 콘텐츠입니다.

outputs.tf 파일에는 일반적으로 Terraform 구성에 대한 출력 정의가 포함되어 있습니다. 이러한 출력은 인프라가 프로비저닝된 후 유용한 정보를 표시하는 데 사용할 수 있습니다. 다음은 outputs.tf 파일의 샘플 콘텐츠입니다.

main.tf 파일에는 일반적으로 데이터 소스, S3 버킷 및 버킷 정책, Amazon Bedrock 모델 호출 로그 구성, SQS 대기열 구성, Elastic 에이전트와 스트림 로그를 설치하는 EC2 인스턴스에 필요한 IAM 역할 및 정책, Amazon Bedrock 가드레일 구성 등 이러한 모든 리소스의 컬렉션이 포함되어 있습니다. 다음은 main.tf 파일의 샘플 콘텐츠입니다.

요구 사항에 따라 main.tf 을 구성한 다음에는 테라폼 구성을 초기화, 계획 및 적용할 수 있습니다.

terraform init // initializes the directory and sets up state files in backend
terraform plan // command creates an execution plan
terraform apply // command applies the configuration aka execution step

이전에 생성한 인프라를 해체하려면 terraform destroy 명령을 사용하면 됩니다.

인프라 설정이 완료되면 outputs.tf. 을 통해 필요한 리소스 식별자가 제공됩니다. 다음 단계를 통해 생성된 인프라에 대한 기본 검증을 수행할 수 있습니다:

  1. Terraform에서 생성된 S3 버킷을 확인하려면 aws cli 명령 참조 목록 버킷 - AWS CLI 1.34.10 명령 참조를 사용하거나 AWS 콘솔을 통해 동일한 것을 확인할 수 있습니다. 2. 테라폼에서 생성된 SQS 대기열을 확인하려면 aws cli command reference list-queues - AWS CLI 1.34.10 명령 참조를 사용하거나 AWS 콘솔을 통해 탐색하여 동일한 것을 확인할 수 있습니다.
  2. AWS 콘솔에서 생성된 EC2 인스턴스를 확인하고 EC2 인스턴스 연결을 사용하여 연결 - Amazon Elastic Compute Cloud를 통해 ec2 인스턴스에 연결하고 aws s3 ls example-bucket-name 을 실행하여 인스턴스가 생성된 S3 버킷에 액세스할 수 있는지 확인합니다.
  3. Terraform에서 생성된 Amazon Bedrock 가드레일을 확인하려면 Amazon Bedrock API ListGuardrails - Amazon Bedrock을 사용하거나 AWS 콘솔을 통해 동일한 것을 확인할 수 있습니다.

Elastic 에이전트 및 통합 설정 설정하기

AWS EC2 인스턴스에 Elastic 에이전트를 설치하고 Amazon Bedrock 통합을 구성하려면, Elastic 에이전트 정책 | Fleet 및 Elastic 에이전트 가이드 [8.15]의 안내 단계에 따라 에이전트 정책을 생성하세요. 그런 다음 EC2 인스턴스 연결을 사용하여 연결 - Amazon Elastic Compute Cloud를 통해 인프라 설정 단계에서 생성된 ec2 인스턴스에 로그인하고, Elastic 에이전트 설치 | Fleet 및 Elastic 에이전트 가이드 [8.15]의 안내 단계에 따라 elastic 에이전트를 설치합니다. 에이전트를 설치하는 동안 이 설정 프로세스를 시작할 때 만든 에이전트 정책을 선택하고 생성된 인스턴스에 따라 적절한 에이전트 설치 방법을 사용해야 합니다. 마지막으로 상담원이 제대로 구성되어 있고 상담원으로부터 들어오는 데이터가 있는지 확인합니다.

새로 생성한 정책에서 Amazon Bedrock 통합을 구성하려면, 안내된 단계에 따라 Amazon Bedrock 통합을 추가하세요: 정책에 Elastic 에이전트 통합을 추가합니다. 베타 통합을 사용 설정하면 아래 이미지와 같이 Amazon Bedrock 통합을 사용할 수 있습니다.

AWS 액세스 키와의 통합을 구성하여 아마존 베드락이 구성된 AWS 계정에 액세스합니다. S3에서 로그 수집 버킷을 사용하고 설정 단계에서 생성한 버킷 ARN을 지정합니다. 설정 중에는 S3 버킷 또는 SQS 대기열 URL 중 하나를 사용해야 하며, 둘 다 사용하지 않도록 주의하세요. ec2 인스턴스가 구성된 기존 정책에 이 통합 기능을 추가합니다.

아마존 베드락 모델 호출 로그 수집 확인

Elastic 에이전트와 통합 설정이 완료되면, 다음 예제 API 호출을 사용하여 로그가 예상대로 수집되고 있는지 확인하기 위해 통합에 대한 기본 검증을 수행할 수 있습니다:

aws bedrock-runtime converse \
--model-id "anthropic.claude-3-5-sonnet-20240620-v1:0" \
--messages '[{"role":"user","content":[{"text":"Hello "}]}]' \
--inference-config '{"maxTokens":2000,"stopSequences":[],"temperature":1,"topP":0.999}' \
--additional-model-request-fields '{"top_k":250}' \
--region us-east-1

예제 API 호출은 aws cli로 작업 설정이 되어 있고 기본 모델인 Anthropic Claude 메시지 API(Amazon Bedrock)에 액세스할 수 있다고 가정합니다. 사용자가 모델에 액세스할 수 없는 경우 Amazon Bedrock 기반 모델에 액세스하기에서 제안한 대로 모델 액세스 페이지에서 모델에 대한 액세스를 요청하거나 사용자가 액세스할 수 있는 기존 모델로 API 호출을 선택적으로 변경할 수 있습니다.

위의 API 호출이 성공적으로 실행되면 Amazon Bedrock 모델 호출 로그가 채워지고 Kibana logs-aws_bedrock.invocation-default 에 해당 호출 로그가 채워져야 합니다. 다음과 같은 간단한 ES|QL 쿼리를 사용하여 최근에 수집된 이벤트를 반환할 수 있습니다.

from logs-aws_bedrock.invocation-* | LIMIT 10

사전 구축된 탐지 규칙 사용

미리 빌드된 탐지 규칙을 사용하려면 먼저 Elastic 인스턴스에 로그인하고 왼쪽 창 탐색에서 보안 → 규칙 → 탐지 규칙(SIEM)으로 이동하세요. 태그 섹션에서 "데이터 소스: 태그 섹션에서 "Amazon Bedrock"을 필터링합니다.

사용 가능한 미리 작성된 규칙을 활성화합니다. 미리 빌드된 규칙의 경우, 설정 정보에는 Amazon Bedrock용 AWS 가드레일 설정을 위한 도우미 가이드가 포함되어 있으며, 예제를 올바르게 따르고 테라폼에 Amazon Bedrock 가드레일 구성이 있는 경우 테라폼으로 AWS 인프라 설정 단계에서 수행할 수 있습니다. 이 설정은 일부 규칙이 경고를 생성하는 데 필수적이므로 인프라 설정 단계에서 건너뛰면 가드레일이 적절히 설정되어 있는지 확인해야 합니다.

신뢰도가 높은 위법 행위 차단 탐지 살펴보기

사용자가 아마존 베드락 모델에 거부된 주제를 쿼리하는 실제 시나리오를 시뮬레이션해 보겠습니다. Amazon UI 콘솔에서 Amazon 기반암 섹션으로 이동하고 왼쪽 탐색 창을 사용하여 보호 장치 아래의 가드레일 하위 섹션으로 이동합니다. 이 연습의 설정 지침에서 만든 샘플 가드레일을 사용하고 테스트 옵션을 사용하여 가드레일을 사용하여 모델 호출을 실행하고 구성된 거부된 주제를 쿼리합니다.

사전 구축된 규칙은 5 이상의 높은 신뢰도 블록에 대해 경고하도록 설계되었으므로 쿼리를 최소 6 번 반복합니다. 알림 일정이 실행되면 다음에 대한 알림이 채워지는 것을 볼 수 있습니다. Unusual High Confidence Misconduct Blocks Detected.

아마존 베드락에 대한 익스플로잇 사례 시나리오 시연하기

아마존 베드락 보안 우회를 시뮬레이션하려면 아마존 베드락 모델과 상호 작용할 수 있는 익스플로잇 시뮬레이션 스크립트가 필요합니다. 저희가 제공하는 익스플로잇 스크립트 예시는 다음과 같은 공격 패턴을 시뮬레이션합니다:

  • AWS 베드락 내에서 거부된 모델 리소스를 사용하기 위해 여러 번의 연속적인 요청을 시도합니다.
  • Amazon Bedrock 내에서 여러 개의 연속적인 유효성 검사 예외 오류 생성
  • 사용자가 지속적으로 높은 입력 토큰 수를 생성하고, 수많은 요청을 제출하며, 리소스 고갈 패턴을 모방하는 대규모 응답을 수신합니다.
  • 반복적으로 높은 확률을 보이는 '차단됨' 조치와 '잘못된 행위'와 같은 특정 위반 코드를 결합하여 지속적인 오용 또는 모델의 윤리적 경계를 넘으려는 시도를 나타냅니다.
class BedrockModelSimulator:
   def __init__(self, profile_name, region_name):
       // Create a Boto3 Session Client for Ineration 
   def generate_args_invoke_model(self, model_id, user_message, tokens): 	// Generate Model Invocation parameters
       guardrail_id = <<GUARDRAIL_ID>>
       guardrail_version = <<GUARDRAIL_VERSION>>

       guardrail_config = {
           "guardrailIdentifier": guardrail_id,
           "guardrailVersion": guardrail_version,
           "trace": "enabled"
       }
       conversation = [
           {
               "role": "user",
               "content": [{"text": user_message}],
           }
       ]
       inference_config = {"maxTokens": tokens, "temperature": 0.7, "topP": 1}
       additional_model_request_fields = {}

       kwargs = {
           "modelId": model_id,
           "messages": conversation,
           "inferenceConfig": inference_config,
           "additionalModelRequestFields": additional_model_request_fields
	    "guardrailConfig" : guardrail_config
       }
       return kwargs
  
   def invoke_model(self, invocation_arguments):
       for _ in range(count):
           try:
               // Invoke Model With right invocation_arguments
           except ClientError as e:
               // Error meesage

def main():
   profile_name = <<AWS Profile>>
   region_name = 'us-east-1'
   denied_model_id = // Use a denied model   
   denied_model_user_message = // Sample Message 
   available_model_id = // Use an available model  
   validation_exception_user_message = // Sample Message 
   resource_exploit_user_message = // A very big message for resource exhuastion
   denied_topic_user_message = // Sample Message that can query denied topic configured
   simulator = BedrockModelSimulator(profile_name, region_name)
   denied_model_invocation_arguments = simulator.generate_args_invoke_model(denied_model_id, denied_model_user_message, 200)
   simulator.invoke_model(denied_model_invocation_arguments)
   validation_exception_invocation_arguments = simulator.generate_args_invoke_model(available_model_id, validation_exception_user_message, 6000)
   simulator.invoke_model(validation_exception_invocation_arguments)
   resource_exhaustion_invocation_arguments = simulator.generate_args_invoke_available_model(available_model_id, resource_exploit_user_message, 4096)
   simulator.invoke_model(resource_exhaustion_invocation_arguments)
   denied_topic_invocation_arguments = simulator.generate_args_invoke_available_model_guardrail(available_model_id, denied_topic_user_message, 4096)
   simulator.invoke_model(denied_topic_invocation_arguments)

if __name__ == "__main__":
   main()

참고: GUARDRAIL_ID 및 GUARDRAIL_VERSION은 다음에서 찾을 수 있습니다. outputs.tf

통제된 환경에서 실행될 때, 제공된 스크립트는 Elastic Security에서 탐지 경보를 생성하는 익스플로잇 시나리오를 시뮬레이션합니다. Elastic 공격 탐색 기능을 사용해 이러한 경보를 분석할 때, 스크립트는 다양한 경보 간의 관계를 보여주는 공격 체인을 생성하여 분석가들이 여러 경보가 어떻게 더 큰 공격의 일부가 될 수 있는지 명확하게 이해할 수 있도록 해줍니다.

결론

Elastic과 Amazon Bedrock을 통합하면 조직은 안전하고 규정을 준수하는 클라우드 환경을 유지하면서 AI와 머신 러닝의 이점을 극대화할 수 있습니다. Elastic의 고급 보안 및 통합 가시성 도구를 활용하여 기업은 위협을 사전에 탐지하고, 규정 준수 보고를 자동화하며, 클라우드 운영에 대한 심층적인 인사이트를 얻을 수 있습니다. 점점 더 많은 기업이 불투명한 데이터 소스와 기술에 의존하여 가장 심각한 위협을 드러내고 있습니다. 투명한 보안을 위한 Dropbox의 노력은 오픈 아티팩트, 통합 및 소스 코드에서 분명하게 드러납니다.

이 문서 공유하기