보안 모범 사례 - AWS 규범적 지침

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

보안 모범 사례

Terraform Provider를 안전하게 사용하려면 인증, 액세스 제어 및 보안을 적절하게 관리하는 것이 중요합니다. AWS 이 섹션에서는 다음과 관련된 모범 사례를 간략하게 설명합니다.

  • 최소 권한 액세스에 대한 IAM 역할 및 권한

  • 계정 및 리소스에 대한 무단 액세스를 방지하는 데 도움이 되는 자격 증명 보안 AWS

  • 민감한 데이터를 보호하는 데 도움이 되는 원격 상태 암호화

  • 잘못된 구성을 식별하기 위한 인프라 및 소스 코드 스캔

  • 원격 상태 스토리지에 대한 액세스 제어

  • 거버넌스 가드레일을 구현하기 위한 Sentinel 정책 시행

이러한 모범 사례를 따르면 Terraform을 사용하여 인프라를 관리할 때 보안 태세를 강화하는 데 도움이 됩니다. AWS

최소 권한 원칙을 따르세요.

최소 권한은 사용자, 프로세스 또는 시스템이 의도한 기능을 수행하는 데 필요한 최소 권한만 부여하는 것을 의미하는 기본적인 보안 원칙입니다. 이는 액세스 제어의 핵심 개념이자 무단 액세스 및 잠재적 데이터 침해에 대한 예방 조치입니다.

최소 권한 원칙은 Terraform이 다음과 같은 클라우드 공급자를 인증하고 조치를 취하는 방식과 직접 관련이 있기 때문에 이 섹션에서 여러 번 강조됩니다. AWS

Terraform을 사용하여 AWS 리소스를 프로비저닝하고 관리하는 경우 API 호출을 위해 적절한 권한이 필요한 엔티티 (사용자 또는 역할) 를 대신하여 작동합니다. 최소한 권한을 부여하면 주요 보안 위험이 발생할 수 있습니다.

  • Terraform에 필요한 권한 이상으로 과도한 권한이 있는 경우 의도하지 않은 잘못된 구성으로 인해 원하지 않는 변경 또는 삭제가 발생할 수 있습니다.

  • 액세스 권한을 지나치게 허용하면 Terraform 상태 파일 또는 자격 증명이 손상될 경우 영향 범위가 커집니다.

  • 최소 권한을 따르지 않는 것은 최소한의 필수 액세스 권한을 부여하기 위한 보안 모범 사례 및 규정 준수 요구 사항에 위배됩니다.

IAM 역할 사용

Terraform Provider를 통해 보안을 강화하려면 가능하면 IAM 사용자 대신 IAM 역할을 사용하십시오. AWS IAM 역할은 자동으로 교체되는 임시 보안 자격 증명을 제공하므로 장기 액세스 키를 관리할 필요가 없습니다. 또한 역할은 IAM 정책을 통해 정확한 액세스 제어를 제공합니다.

IAM 정책을 사용하여 최소 권한 액세스 권한을 부여하십시오.

역할과 사용자가 워크로드에 필요한 최소 권한 집합만 갖도록 IAM 정책을 신중하게 구성하십시오. 빈 정책으로 시작하여 허용된 서비스와 작업을 반복적으로 추가하세요. 이를 달성하려면:

  • IAM Access Analyzer를 사용하여 정책을 평가하고 제거 가능한 미사용 권한을 강조 표시할 수 있습니다.

  • 정책을 수동으로 검토하여 역할의 의도된 책임에 필수적이지 않은 기능은 모두 제거하십시오.

  • IAM 정책 변수와 태그를 사용하면 권한 관리를 단순화할 수 있습니다.

잘 구성된 정책은 워크로드의 책임을 완수하기에 충분한 액세스 권한만 부여하며 그 이상은 허용하지 않습니다. 운영 수준에서 작업을 정의하고 특정 리소스의 필수 API에 대한 호출만 허용하세요.

이 모범 사례를 따르면 영향 범위가 줄어들고 업무 분리 및 최소 권한 액세스라는 기본 보안 원칙을 따릅니다. 공개 액세스를 시작하고 나중에 액세스를 제한하는 대신, 엄격한 공개 액세스를 필요에 따라 점진적으로 시작하십시오.

로컬 인증을 위한 IAM 역할을 맡기십시오.

Terraform을 로컬에서 실행할 때는 정적 액세스 키를 구성하지 마십시오. 대신 IAM 역할을 사용하여 장기 자격 증명을 노출하지 않고 권한 있는 액세스 권한을 일시적으로 부여하세요.

먼저 필요한 최소 권한을 가진 IAM 역할을 생성하고 사용자 계정 또는 페더레이션 ID가 IAM 역할을 위임할 수 있도록 하는 신뢰 관계를 추가합니다. 이렇게 하면 역할의 임시 사용이 승인됩니다.

신뢰 관계 정책 예제:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/terraform-execution" }, "Action": "sts:AssumeRole" } ] }

그런 다음 aws sts assume-role AWS CLI 명령을 실행하여 해당 역할에 대한 수명이 짧은 자격 증명을 검색합니다. 이러한 자격 증명은 일반적으로 1시간 동안 유효합니다.

AWS CLI 명령 예제:

aws sts assume-role --role-arn arn:aws:iam::111122223333:role/terraform-execution --role-session-name terraform-session-example

명령의 출력에는 다음을 인증하는 데 사용할 수 있는 액세스 키, 비밀 키 및 세션 토큰이 포함됩니다. AWS

{ "AssumedRoleUser": { "AssumedRoleId": "AROA3XFRBF535PLBIFPI4:terraform-session-example", "Arn": "arn:aws:sts::111122223333:assumed-role/terraform-execution/terraform-session-example" }, "Credentials": { "SecretAccessKey": " wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "SessionToken": " AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT+FvwqnKwRcOIfrRh3c/LTo6UDdyJwOOvEVPvLXCrrrUtdnniCEXAMPLE/IvU1dYUg2RVAJBanLiHb4IgRmpRV3zrkuWJOgQs8IZZaIv2BXIa2R4OlgkBN9bkUDNCJiBeb/AXlzBBko7b15fjrBs2+cTQtpZ3CYWFXG8C5zqx37wnOE49mRl/+OtkIKGO7fAE", "Expiration": "2024-03-15T00:05:07Z", "AccessKeyId": "ASIAIOSFODNN7EXAMPLE" } }

AWS 제공자는 역할 수임을 자동으로 처리할 수도 있습니다.

IAM 역할을 맡는 제공자 구성 예제:

provider "aws" { assume_role { role_arn = "arn:aws:iam::111122223333:role/terraform-execution" session_name = "terraform-session-example" } }

이렇게 하면 Terraform 세션 기간 동안만 높은 권한이 부여됩니다. 임시 키는 최대 세션 기간이 지나면 자동으로 만료되므로 유출될 수 없습니다.

이 모범 사례의 주요 이점으로는 수명이 긴 액세스 키에 비해 보안이 향상되고, 최소 권한으로 역할에 대한 세분화된 액세스 제어, 역할 권한을 수정하여 액세스를 쉽게 취소할 수 있는 기능 등이 있습니다. 또한 IAM 역할을 사용하면 암호를 스크립트나 디스크에 로컬로 직접 저장하지 않아도 되므로 팀 간에 Terraform 구성을 안전하게 공유할 수 있습니다.

Amazon EC2 인증에 IAM 역할 사용

Amazon Elastic Compute Cloud (Amazon EC2) 인스턴스에서 Terraform을 실행할 때는 장기 자격 증명을 로컬에 저장하지 마십시오. 대신 IAM 역할과 인스턴스 프로필을 사용하여 최소 권한 권한을 자동으로 부여하십시오.

먼저, 최소 권한으로 IAM 역할을 생성하고 인스턴스 프로필에 역할을 할당합니다. 인스턴스 프로필을 사용하면 EC2 인스턴스가 역할에 정의된 권한을 상속할 수 있습니다. 그런 다음 해당 인스턴스 프로필을 지정하여 인스턴스를 시작합니다. 인스턴스는 연결된 역할을 통해 인증됩니다.

Terraform 작업을 실행하기 전에 인스턴스 메타데이터에 역할이 있는지 확인하여 자격 증명이 성공적으로 상속되었는지 확인합니다.

TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600") curl -H "X-aws-ec2-metadata-token: $TOKEN" -s http://169.254.169.254/latest/meta-data/iam/security-credentials/

이 접근 방식을 사용하면 영구 AWS 키를 인스턴스 내의 스크립트 또는 Terraform 구성에 하드코딩하지 않아도 됩니다. 임시 자격 증명은 인스턴스 역할 및 프로필을 통해 Terraform에서 투명하게 사용할 수 있습니다.

이 모범 사례의 주요 이점으로는 장기 자격 증명보다 향상된 보안, 자격 증명 관리 오버헤드 감소, 개발, 테스트 및 프로덕션 환경 간의 일관성이 있습니다. IAM 역할 인증은 최소 권한 액세스를 적용하면서 EC2 인스턴스에서의 Terraform 실행을 단순화합니다.

HCP Terraform 작업 영역에 동적 자격 증명을 사용하십시오.

HCP Terraform은 에서 제공하는 관리형 서비스로, 팀에서 Terraform을 사용하여 여러 프로젝트 및 환경에서 인프라를 프로비저닝하고 관리할 수 HashiCorp 있도록 지원합니다. HCP Terraform에서 Terraform을 실행할 때는 동적 자격 증명을 사용하여 인증을 단순화하고 보호하세요. AWS Terraform은 IAM 역할 가정 없이 실행할 때마다 임시 자격 증명을 자동으로 교환합니다.

이점으로는 간편한 암호 교체, 작업 공간 전반의 중앙 집중식 자격 증명 관리, 최소 권한, 하드코딩된 키 제거 등이 있습니다. 해시된 임시 키를 사용하면 수명이 긴 액세스 키에 비해 보안이 향상됩니다.

IAM 역할을 사용하는 방법은 다음과 같습니다. AWS CodeBuild

AWS CodeBuild에서는 프로젝트에 할당된 IAM 역할을 사용하여 빌드를 실행합니다. CodeBuild 이렇게 하면 각 빌드가 장기 키를 사용하는 대신 역할의 임시 자격 증명을 자동으로 상속받을 수 있습니다.

HCP Terraform에서 원격으로 GitHub 액션을 실행합니다.

HCP Terraform GitHub 작업 공간에서 Terraform을 원격으로 실행하도록 액션 워크플로를 구성합니다. 비밀 관리 대신 동적 자격 증명과 원격 상태 잠금을 사용하세요. GitHub

OIDC와 함께 GitHub 작업을 사용하고 자격 증명 작업을 구성하십시오. AWS

OpenID Connect (OIDC) 표준을 사용하여 IAM을 통해 액션 ID를 페더레이션하십시오 GitHub . AWS 자격 증명 구성 작업을 사용하면 장기 액세스 키 없이도 GitHub 토큰을 임시 AWS 자격 증명으로 교환할 수 있습니다.

OIDC GitLab 및 OIDC와 함께 사용하십시오. AWS CLI

OIDC 표준을 사용하여 IAM을 통해 GitLab ID를 페더레이션하여 임시 액세스를 수행할 수 있습니다. OIDC를 사용하면 장기 액세스 키를 내부에서 직접 관리하지 않아도 됩니다. AWS GitLab 자격 증명이 just-in-time 교환되므로 보안이 향상됩니다. 또한 사용자는 IAM 역할의 권한에 따라 최소 권한 액세스 권한을 얻습니다.

기존 자동화 도구를 사용하여 고유한 IAM 사용자를 사용할 수 있습니다.

IAM 역할 사용에 대한 기본 지원이 부족한 자동화 도구 및 스크립트가 있는 경우 개별 IAM 사용자를 생성하여 프로그래밍 방식으로 액세스를 허용할 수 있습니다. 최소 권한 원칙은 여전히 적용됩니다. 정책 권한을 최소화하고 각 파이프라인 또는 스크립트에 대해 별도의 역할을 사용하십시오. 최신 도구 또는 도구로 마이그레이션하면서 지원 역할을 기본적으로 시작하고 점차 지원 역할로 전환하세요.

주의

IAM 사용자는 장기 자격 증명을 보유하므로 보안 위험이 따릅니다. 이 위험을 줄이려면 이러한 사용자에게 작업을 수행하는 데 필요한 권한만 제공하고 더 이상 필요하지 않을 경우 이러한 사용자를 제거하는 것이 좋습니다.

Jenkins AWS 자격 증명 플러그인 사용

Jenkins의 Credentials 플러그인을 사용하면 중앙에서AWS 자격 AWS 증명을 구성하고 동적으로 빌드에 주입할 수 있습니다. 이렇게 하면 비밀을 소스 제어에 체크인하지 않아도 됩니다.

최소 권한을 지속적으로 모니터링, 검증 및 최적화합니다.

시간이 지나면 필요한 최소 정책을 초과할 수 있는 추가 권한이 부여될 수 있습니다. 액세스를 지속적으로 분석하여 불필요한 권한을 식별하고 제거하십시오.

액세스 키 사용을 지속적으로 모니터링합니다.

액세스 키 사용을 피할 수 없는 경우 IAM 자격 증명 보고서를 사용하여 90일이 지난 사용하지 않은 액세스 키를 찾아 사용자 계정과 컴퓨터 역할 모두에서 비활성 키를 취소하십시오. 활성 직원 및 시스템의 키 제거를 수동으로 확인하도록 관리자에게 알리십시오.

키 사용을 모니터링하면 사용하지 않는 권한을 식별하고 제거할 수 있으므로 권한을 최적화하는 데 도움이 됩니다. 이 모범 사례에 따라 액세스 키 교체를 적용하면 자격 증명 수명이 제한되고 최소 권한 액세스가 제한됩니다.

AWS 관리자를 위한 경고 및 알림을 설정하는 데 사용할 수 있는 여러 서비스와 기능을 제공합니다. 몇 가지 옵션은 다음과 같습니다.

  • AWS Config: AWS Config 규칙을 사용하여 IAM 액세스 키를 포함한 AWS 리소스의 구성 설정을 평가할 수 있습니다. 사용자 지정 규칙을 생성하여 특정 조건 (예: 특정 일수보다 오래된 미사용 액세스 키) 을 확인할 수 있습니다. 규칙을 위반하면 해결을 위한 평가를 시작하거나 Amazon Simple Notification Service (Amazon SNS) 주제에 알림을 보낼 AWS Config 수 있습니다.

  • AWS Security Hub: Security Hub는 AWS 계정의 보안 상태를 포괄적으로 파악하고 미사용 또는 비활성 IAM 액세스 키를 비롯한 잠재적 보안 문제를 탐지하고 이에 대해 알리는 데 도움이 될 수 있습니다. Security Hub는 Amazon EventBridge 및 Amazon SNS와 통합하거나 AWS Chatbot 관리자에게 알림을 보낼 수 있습니다.

  • AWS Lambda: CloudWatch Amazon Events 또는 규칙을 비롯한 다양한 이벤트에서 Lambda 함수를 호출할 수 있습니다. AWS Config Amazon SNS 또는 같은 서비스를 사용하여 IAM 액세스 키 사용을 평가하고, 추가 검사를 수행하고, 알림을 보내는 사용자 지정 Lambda 함수를 작성할 수 있습니다. AWS Chatbot

IAM 정책을 지속적으로 검증하십시오.

IAM Access Analyzer를 사용하여 역할에 연결된 정책을 평가하고 미사용 서비스 또는 부여된 초과 조치를 식별하십시오. 정기적인 액세스 검토를 구현하여 정책이 현재 요구 사항과 일치하는지 수동으로 확인하십시오.

기존 정책을 IAM Access Analyzer에서 생성한 정책과 비교하고 불필요한 권한을 제거하십시오. 또한 사용자에게 보고서를 제공하고 유예 기간이 지나면 사용하지 않은 권한을 자동으로 취소해야 합니다. 이렇게 하면 정책을 최소한으로 유지할 수 있습니다.

사용되지 않는 액세스를 사전에 자주 취소하면 보안 침해 중에 위험에 처할 수 있는 자격 증명을 최소화할 수 있습니다. 자동화는 지속 가능하고 장기적인 자격 증명 관리 및 권한 최적화를 제공합니다. 이 모범 사례를 따르면 ID 및 리소스 전반에 걸쳐 AWS 최소 권한을 사전에 적용하여 영향 범위를 제한할 수 있습니다.

안전한 원격 상태 스토리지

원격 상태 스토리지는 Terraform이 실행되는 시스템에 로컬이 아닌 원격으로 Terraform 상태 파일을 저장하는 것을 말합니다. 상태 파일은 Terraform에서 프로비저닝한 리소스와 해당 메타데이터를 추적하므로 매우 중요합니다.

원격 상태를 보호하지 못하면 상태 데이터 손실, 인프라 관리 불가능, 의도하지 않은 리소스 삭제, 상태 파일에 있을 수 있는 민감한 정보 노출과 같은 심각한 문제가 발생할 수 있습니다. 이러한 이유로 프로덕션 등급의 Terraform 사용을 위해서는 원격 상태 스토리지를 보호하는 것이 매우 중요합니다.

암호화 및 액세스 제어를 활성화합니다.

Amazon Simple Storage 서비스 (Amazon S3) 의 서버 측 암호화 (SSE) 를 사용하여 원격 유휴 상태를 암호화할 수 있습니다.

협업 워크플로에 대한 직접 액세스를 제한하세요.

  • Git 리포지토리 내의 HCP Terraform 또는 CI/CD 파이프라인에서 협업 워크플로를 구성하여 직접적인 상태 액세스를 제한할 수 있습니다.

  • 풀 리퀘스트, 실행 승인, 정책 확인, 알림을 활용하여 변경 사항을 조정하세요.

이 지침을 따르면 민감한 리소스 속성을 보호하고 팀 구성원의 변경 사항으로 인한 충돌을 피할 수 있습니다. 암호화와 엄격한 액세스 보호는 공격 표면을 줄이는 데 도움이 되며 협업 워크플로우는 생산성을 높여줍니다.

사용 AWS Secrets Manager

Terraform에는 상태 파일에 일반 텍스트로 비밀 값을 저장하는 많은 리소스와 데이터 소스가 있습니다. 비밀을 상태로 저장하지 말고 대신 사용하세요. AWS Secrets Manager

민감한 값을 수동으로 암호화하는 대신 민감한 상태 관리를 위해 Terraform에 내장된 지원 기능을 사용하세요. 민감한 값을 출력으로 내보낼 때는 값이 민감한 것으로 표시되었는지 확인하십시오.

인프라 및 소스 코드를 지속적으로 스캔합니다.

인프라 및 소스 코드를 지속적으로 사전 예방적으로 스캔하여 자격 증명 노출이나 구성 오류 등의 위험이 있는지 확인하여 보안 태세를 강화하십시오. 리소스를 재구성하거나 패치를 적용하여 발견한 내용을 즉시 해결하세요.

AWS 서비스를 사용하여 동적 검사를 수행하십시오.

Amazon Inspector,AWS Security Hubhttps://aws.amazon.com/security-hub/ Amazon Detective, Amazon과 같은 AWS 기본 도구를 사용하여 계정 및 지역 전반에서 프로비저닝된 GuardDuty 인프라를 모니터링할 수 있습니다. Security Hub에서 반복 검사를 예약하여 배포 및 구성 편차를 추적할 수 있습니다. EC2 인스턴스, Lambda 함수, 컨테이너, S3 버킷 및 기타 리소스를 스캔합니다.

정적 분석을 수행합니다.

Checkov와 같은 정적 분석기를 CI/CD 파이프라인에 직접 내장하여 Terraform 구성 코드 (HCL) 를 스캔하고 배포 전에 위험을 사전에 식별합니다. 이렇게 하면 보안 검사가 개발 프로세스의 초기 시점 (왼쪽으로 이동) 으로 이동하고 인프라가 잘못 구성된 것을 방지할 수 있습니다.

신속한 문제 해결을 보장합니다.

모든 스캔 결과에 대해 Terraform 구성을 업데이트하거나, 패치를 적용하거나, 적절하게 리소스를 수동으로 재구성하여 즉각적인 치료를 보장하십시오. 근본 원인을 해결하여 위험 수준을 낮추십시오.

인프라 스캐닝과 코드 스캔을 모두 사용하면 Terraform 구성, 프로비저닝된 리소스 및 애플리케이션 코드에 대한 계층적 통찰력을 얻을 수 있습니다. 이를 통해 예방, 탐지 및 사후 제어를 통해 위험 및 규정 준수의 범위를 극대화하는 동시에 소프트웨어 개발 수명 주기 (SDLC) 초기에 보안을 내장할 수 있습니다.

정책 검사 시행

HashiCorp Sentinel 정책과 같은 코드 프레임워크를 사용하여 Terraform을 통한 인프라 프로비저닝을 위한 거버넌스 가드레일과 표준화된 템플릿을 제공하십시오.

Sentinel 정책은 조직 표준 및 모범 사례에 맞게 Terraform 구성에 대한 요구 사항 또는 제한을 정의할 수 있습니다. 예를 들어 Sentinel 정책을 사용하여 다음을 수행할 수 있습니다.

  • 모든 리소스에 태그가 필요합니다.

  • 인스턴스 유형을 승인된 목록으로 제한하십시오.

  • 필수 변수를 적용합니다.

  • 생산 자원의 파괴를 방지하십시오.

Terraform 구성 수명주기에 정책 검사를 포함하면 표준 및 아키텍처 지침을 사전에 시행할 수 있습니다. Sentinel은 승인되지 않은 관행을 방지하면서 개발을 가속화하는 데 도움이 되는 공유 정책 로직을 제공합니다.