IaC에서 클라우드 문제 해결
IaC에서 클라우드 문제 해결 기능은 클라우드 리소스를 잘못 배포하는 데 사용된 IaC 소스 코드에서 클라우드 문제를 해결할 수 있도록 하며, 클라우드 문제를 IaC 템플릿로 직접 연결하여 클라우드 문제를 해결합니다.
많은 Snyk 고객이 IaC를 사용하여 클라우드 리소스를 배포하고 관리합니다. 그러나 기관은 여전히 잘못 구성된 IaC 템플릿을 배포할 수 있으며, 이는 잘못 구성된 클라우드 리소스 및 따라서 클라우드 컨텍스트 문제로 이어집니다. 이는 파이프라인이 클라우드 구성 오류를 발견해도 배포를 차단하는 방식으로 구성되지 않은 경우에 발생할 수 있습니다.
이 클라우드 문제를 해결하기 위해 보안팀은 잘못 배포된 리소스를 소유하는 팀을 수동으로 확인하고, 그런 다음 개발자가 사용한 적절한 IaC 템플릿을 수동으로 찾아야합니다. 이 과정은 매우 시간이 많이 소요될 수 있습니다.
이 기능은 이러한 수동 단계를 없애고 수정해야 할 기본 IaC 템플릿에 대한 링크를 사용자에게 제공합니다.
IaC에서 클라우드 문제를 해결하는 방법
Snyk은 가능한 경우 클라우드 리소스를 소스 IaC 템플릿에 "매핑"하여 이 기능을 제공합니다. Snyk은 이를 위해 Terraform 상태 파일에 포함된 리소스 ID와 같은 정보를 활용하여 클라우드 리소스를 Terraform 상태와 IaC 소스 코드에 매핑할 수 있습니다.
Snyk은 CLI를 통해 Terraform 상태 파일에 액세스하며, 배포 파이프라인에 통합되어 있어야 합니다. 민감한 정보 가능성 때문에 .tfstate
파일을 Snyk 플랫폼으로 보내지 않습니다. 대신, Snyk은 리소스 ID와 같은 매핑에 필요한 최소한의 데이터를 얻고 이 정보를 Snyk 플랫폼으로 보내는 매핑 아티팩트를 생성합니다. 기타 구성 데이터는 매핑 아티팩트에 포함되지 않습니다.
Snyk은 클라우드 환경을 스캔할 때 매핑 아티팩트, 클라우드 리소스 및 IaC 리소스를 분석하여 클라우드 리소스에서 IaC 소스 템플릿으로의 리소스 매핑을 생성합니다.
IaC에서 클라우드 문제 해결에 필요한 사전 조건
다음 사항이 필요합니다:
Snyk 서비스 계정 및 API 토큰 액세스
IaC+가 있는 Snyk 조직 액세스
CI/CD를 통해 AWS, Azure, Google Cloud에 배포된 클라우드 리소스
Terraform 버전 0.11 이상
IaC에서 클라우드 문제 해결의 단계
단계 1: IaC 및 클라우드 환경을 Snyk에 등록
Snyk CLI 워크플로(snyk iac test --report
)를 통해 IaC+ 환경을 등록하고, AWS 통합, Azure 통합, 또는 Google Cloud 통합을 통해 관련 클라우드 환경을 등록하세요.
snyk iac test
는 Git 리포지토리의 루트 폴더에서 실행해야 합니다. GitLab이나 Azure DevOps를 사용하는 경우 다음 CLI 명령을 사용하여 target-reference
옵션을 추가하여 SCM 링크를 생성할 수 있습니다.
snyk iac test --report --target-reference=$(git branch --show-current)
AWS, Azure 또는 Google Cloud와 같은 클라우드 환경은 CI/CD 도구를 통해 Terraform을 사용하여 배포된 리소스가 포함되어야 합니다.
단계 2: CI/CD 파이프라인 스크립트 구성
다음을 수행하는 CI/CD 스크립트를 구성하세요:
terraform state pull
을 통해 Terraform 상태를 가져옵니다.Snyk CLI를 설치하고 관련 옵션과 함께 snyk iac capture를 실행합니다.
다음 섹션에서 Snyk에서 제공하는 샘플 CI/CD 스크립트를 참조할 수 있습니다.
GitHub Actions 예시
GitHub에서 다음과 같은 환경 변수를 암호화된 리포지토리 시크릿로 설정하세요:
AWS_ACCESS_KEY_ID
-terraform apply
및terraform state pull
에 사용됩니다.AWS_SECRET_ACCESS_KEY
-terraform apply
및terraform state pull
에 사용됩니다.SNYK_TOKEN
- Snyk 서비스 계정의 API 토큰SNYK_ORG_ID
- Snyk 조직 ID
name: continuous-delivery
on:
push:
branches:
- main
jobs:
delivery:
runs-on: ubuntu-latest
env:
AWS_ACCESS_KEY_ID: $
AWS_SECRET_ACCESS_KEY: $
SNYK_TOKEN: $
steps:
- uses: actions/checkout@v3
- uses: hashicorp/setup-terraform@v2
with:
terraform_wrapper: false
- uses: snyk/actions/setup@master
- run: terraform init
- name: terraform plan
run: terraform plan -input=false
- name: snyk iac test
run: snyk iac test --org=$ --report || true
- name: terraform apply
run: terraform apply -auto-approve -input=false
- name: capture terraform state
run: terraform state pull | snyk iac capture --org=$ --stdin
CircleCI 예시
CircleCI에서 다음 환경 변수를 설정하세요:
AWS_ACCESS_KEY_ID
-terraform apply
및terraform state pull
에 사용됩니다.AWS_SECRET_ACCESS_KEY
-terraform apply
및terraform state pull
에 사용됩니다.SNYK_TOKEN
- Snyk 서비스 계정의 API 토큰SNYK_ORG_ID
- Snyk 조직 ID
version: 2.1
orbs:
terraform: circleci/[email protected]
snyk: snyk/[email protected]
jobs:
delivery:
machine:
image: ubuntu-2204:current
resource_class: medium
steps:
- checkout
- terraform/install:
terraform_version: 1.4.2
- snyk/install
- terraform/plan
- run:
name: snyk iac test
command: snyk iac test --org=$SNYK_ORG_ID --report || true
- terraform/apply
- run:
name: capture terraform state
command: terraform state pull | snyk iac capture --org=$SNYK_ORG_ID --stdin
workflows:
continuous-delivery:
jobs:
- delivery
단계 3: 파이프라인 실행
CI/CD 파이프라인을 실행하여 Terraform 상태를 가져오고 snyk iac capture를 실행하면 Snyk이 Terraform 상태 파일에서 최소한의 정보를 사용한 매핑 아티팩트를 생성하고 Snyk으로 보냅니다.
매핑 아티팩트가 생성되거나 업데이트되면 Snyk은 IaC 리소스, 클라우드 리소스 및 매핑 아티팩트를 조직 전체에서 분석하여 클라우드 및 IaC 리소스 간의 연결을 포함하는 리소스 매핑을 생성합니다.
단계 4: 몇 분 기다리고 클라우드 문제 페이지 확인
몇 분 기다려 Snyk이 클라우드 환경을 스캔하고 매핑 실행을 완료하고 리소스 매핑을 업데이트할 수 있도록 하세요.
클라우드 문제 페이지로 이동하고 has_iac_mappings 필터를 true
로 설정하여 클라우드 문제에서 IaC 리소스에 매핑된 리소스가 표시되도록 하세요.

해당하는 클라우드 문제는 이제 지원되는 리소스 유형에 대한 IaC 리소스를 포함하는 IaC 탭을 통해 보여집니다. 각 IaC 리소스에는 리소스 이름, IaC 템플릿 위치 및 사용 가능한 경우 SCM 도구로의 링크와 함께 정보가 포함됩니다.

지원되는 리소스 유형
다음은 지원되는 리소스 유형 목록입니다.
AWS
aws_api_gateway_deployment
aws_api_gateway_resource
aws_api_gateway_rest_api
aws_cloudtrail
aws_cloudwatch_log_group
aws_db_instance
aws_db_subnet_group
aws_default_security_group
aws_default_vpc
aws_dynamodb_table
aws_ebs_volume
aws_eip
aws_flow_log
aws_iam_access_key
aws_iam_group
aws_iam_group_policy
aws_iam_group_policy_attachment
aws_iam_instance_profile
aws_iam_policy
aws_iam_policy_attachment
aws_iam_role
aws_iam_role_policy
aws_iam_role_policy_attachment
aws_iam_user
aws_iam_user_policy
aws_iam_user_policy_attachment
aws_instance
aws_internet_gateway
aws_kms_key
aws_lambda_function
aws_lambda_permission
aws_network_acl
aws_network_interface
aws_rds_cluster
aws_rds_global_cluster
aws_route_table
aws_route_table_association
aws_s3_account_public_access_block
aws_s3_bucket
aws_s3_bucket_acl
aws_s3_bucket_logging
aws_s3_bucket_policy
aws_s3_bucket_public_access_block
aws_s3_bucket_server_side_encryption_configuration
aws_security_group
aws_security_group_rule
aws_sns_topic
aws_subnet aws_vpc
Azure
azurerm_resource_group
azurerm_storage_account
azurerm_sql_active_directory_administrator
azurerm_network_interface
azurerm_subnet
azurerm_virtual_machine_extension
azurerm_virtual_network
azurerm_managed_disk
azurerm_subscription_policy_assignment
azurerm_storage_data_lake_gen2_filesystem
azurerm_synapse_firewall_rule
azurerm_synapse_workspace
azurerm_storage_account_network_rules
azurerm_service_fabric_cluster
azurerm_security_center_auto_provisioning
azurerm_security_# dns_managed_zone
google_compute_instance_template
google_compute_instance
google_service_account
google_compute_network
google_compute_subnetwork
google_compute_ssl_policy
google_compute_project_metadata
google_compute_firewall
google_compute_disk
google_kms_crypto_key
google_sql_user
Last updated