보안 내부 AWS AppConfig - AWS AppConfig

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

보안 내부 AWS AppConfig

클라우드 AWS 보안이 최우선 과제입니다. AWS 고객은 가장 보안에 민감한 조직의 요구 사항을 충족하도록 구축된 데이터 센터 및 네트워크 아키텍처의 혜택을 누릴 수 있습니다.

보안은 기업과 기업 간의 AWS 공동 책임입니다. 공동 책임 모델은 이 사항을 클라우드 보안 및 클라우드 보안으로 설명합니다.

  • 클라우드 보안 - AWS 클라우드에서 AWS 서비스를 실행하는 인프라를 보호하는 역할을 합니다 AWS 클라우드. AWS 또한 안전하게 사용할 수 있는 서비스를 제공합니다. 적용되는 규정 준수 프로그램에 대해 자세히 알아보려면 규정 준수 프로그램별 범위 내AWS 서비스 규정 준수 참조하십시오. AWS Systems Manager

  • 클라우드에서의 보안 — 사용하는 AWS 서비스에 따라 책임이 결정됩니다. 또한 귀하는 귀사의 데이터의 민감도, 귀사의 요구 사항, 관련 법률 및 규정을 비롯한 기타 요소에 대해서도 책임이 있습니다.

AWS AppConfig 의 기능입니다 AWS Systems Manager. 공동 책임 모델을 사용할 AWS AppConfig때 적용하는 방법을 이해하려면 의 보안을 참조하십시오 AWS Systems Manager. 이 섹션에서는 AWS AppConfig의 보안 및 규정 준수 목표를 충족하도록 Systems Manager를 구성하는 방법을 설명합니다.

최소 권한 액세스 구현

보안 모범 사례로서, 특정 조건에서 특정 리소스에 대한 특정 작업을 수행하는 데 필요한 최소 권한을 ID에 부여하십시오. AWS AppConfig 에이전트는 에이전트가 인스턴스 또는 컨테이너의 파일 시스템에 액세스할 수 있도록 하는 두 가지 기능인 백업과 디스크 쓰기를 제공합니다. 이러한 기능을 활성화하는 경우 AWS AppConfig 에이전트만 파일 시스템의 지정된 구성 파일에 쓸 수 있는 권한을 가지고 있는지 확인하십시오. 또한 이러한 구성 파일을 읽는 데 필요한 프로세스만 읽을 수 있는지 확인하십시오. 최소 권한 액세스를 구현하는 것이 오류 또는 악의적인 의도로 인해 발생할 수 있는 보안 위험과 영향을 최소화할 수 있는 근본적인 방법입니다.

최소 권한 액세스 구현에 대한 자세한 내용은 AWS Well-Architected Tool 사용 설명서의 SEC03-BP02 최소 권한 액세스 허용을 참조하십시오. 이 섹션에 언급된 AWS AppConfig 에이전트 기능에 대한 자세한 내용은 을 참조하십시오. 매니페스트를 사용하여 추가 검색 기능 활성화

AWS AppConfig의 저장된 데이터 암호화

AWS AppConfig 사용 중인 고객 데이터를 보호하기 위해 기본적으로 암호화를 제공합니다 AWS 소유 키.

AWS 소유 키— 기본적으로 이러한 키를 AWS AppConfig 사용하여 서비스에서 배포하고 데이터 저장소에 호스팅되는 AWS AppConfig 데이터를 자동으로 암호화합니다. 사용을 보거나, 관리하거나, 사용하거나 AWS 소유 키, 감사할 수 없습니다. 하지만 데이터를 암호화하는 키를 보호하기 위해 어떤 액션을 수행하거나 어떤 프로그램을 변경할 필요가 없습니다. 자세한 내용은 AWS Key Management Service 개발자 안내서AWS 소유 키 섹션을 참조하십시오.

이 암호화 계층을 비활성화하거나 다른 암호화 유형을 선택할 수는 없지만 데이터 저장소에 호스팅된 구성 데이터를 저장할 때와 구성 데이터를 배포할 때 사용할 고객 관리 키를 지정할 수 있습니다. AWS AppConfig

고객 관리 키 — AWS AppConfig 직접 생성하고 소유하고 관리하는 대칭형 고객 관리 키를 사용하여 기존 AWS 소유 키키에 두 번째 암호화 계층을 추가할 수 있습니다. 이 암호화 계층을 완전히 제어할 수 있으므로 다음과 같은 작업을 수행할 수 있습니다.

  • 키 정책 및 권한 부여 수립 및 유지

  • 정책 수립 및 유지 관리 IAM

  • 키 정책 활성화 및 비활성화

  • 키 암호화 자료 교체

  • 태그 추가

  • 키 별칭 생성

  • 키 삭제 일정 수립

자세한 내용은 AWS Key Management Service 개발자 안내서고객 관리 키를 참조하십시오.

AWS AppConfig 고객 관리 키 지원

AWS AppConfig 구성 데이터에 대한 고객 관리 키 암호화를 지원합니다. AWS AppConfig 호스팅된 데이터 저장소에 저장된 구성 버전의 경우 고객은 해당 구성 KmsKeyIdentifier 프로필에 a를 설정할 수 있습니다. CreateHostedConfigurationVersionAPI작업을 사용하여 새 버전의 구성 데이터를 만들 때마다 에서 AWS KMS 데이터 키를 AWS AppConfig KmsKeyIdentifier 생성하여 데이터를 저장하기 전에 데이터를 암호화합니다. 나중에 GetHostedConfigurationVersion 또는 StartDeployment API 작업 중에 데이터에 액세스하면 생성된 데이터 키에 대한 정보를 사용하여 구성 데이터를 AWS AppConfig 해독합니다.

AWS AppConfig 또한 배포된 구성 데이터에 대한 고객 관리형 키 암호화에 대한 지원도 제공합니다. 구성 데이터를 암호화하기 위해 고객은 KmsKeyIdentifier 배포에 a를 제공할 수 있습니다. AWS AppConfig 이를 사용하여 AWS KMS 데이터 키를 KmsKeyIdentifier 생성하여 작업 데이터를 암호화합니다. StartDeployment API

AWS AppConfig 암호화 액세스

고객 관리형 키를 생성할 때는 다음 키 정책을 사용하여 키를 사용할 수 있는지 확인하십시오.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account_ID:role/role_name" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*" } ]

고객 관리 키를 사용하여 호스팅된 구성 데이터를 암호화하려면 CreateHostedConfigurationVersion을 호출하는 ID에 사용자, 그룹 또는 역할에 할당할 수 있는 다음과 같은 정책 설명문이 필요합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kms:GenerateDataKey, "Resource": "arn:aws:kms:Region:account_ID:key_ID" } ] }

Secrets Manager 암호를 사용하거나 고객 관리 키로 암호화된 기타 구성 데이터를 사용하는 경우 retrievalRoleArn은 데이터를 복호화하고 검색하기 위해 kms:Decrypt가 필요합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "arn:aws:kms:Region:account_ID:configuration source/object" } ] }

AWS AppConfig StartDeploymentAPI오퍼레이션을 호출할 때 ID StartDeployment 호출에는 사용자, 그룹 또는 역할에 할당할 수 있는 다음과 같은 IAM 정책이 필요합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:GenerateDataKey*" ], "Resource": "arn:aws:kms:Region:account_ID:key_ID" } ] }

AWS AppConfig GetLatestConfigurationAPI작업을 호출할 때 ID GetLatestConfiguration 호출에는 사용자, 그룹 또는 역할에 할당할 수 있는 다음과 같은 정책이 필요합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kms:Decrypt, "Resource": "arn:aws:kms:Region:account_ID:key_ID" } ] }

암호화 컨텍스트

암호화 컨텍스트는 데이터에 대한 추가 컨텍스트 정보를 포함하는 선택적 키-값 페어 세트입니다.

AWS KMS 암호화 컨텍스트를 인증된 추가 데이터로 사용하여 인증된 암호화를 지원합니다. 데이터 암호화 요청에 암호화 컨텍스트를 포함하면 암호화 컨텍스트를 암호화된 데이터에 AWS KMS 바인딩합니다. 요청에 동일한 암호화 컨텍스트를 포함해야 이 데이터를 해독할 수 있습니다.

AWS AppConfig 암호화 컨텍스트: 암호화된 호스팅 구성 데이터 및 배포에 대한 모든 AWS KMS 암호화 작업에서 암호화 컨텍스트를 AWS AppConfig 사용합니다. 컨텍스트에는 데이터 유형에 해당하는 키와 특정 데이터 항목을 식별하는 값이 포함됩니다.

암호화 키 모니터링 대상 AWS

에서 AWS KMS 고객 관리형 키를 사용하는 경우 Amazon CloudWatch Logs를 사용하여 AWS CloudTrail 로 AWS AppConfig AWS AppConfig 보내는 요청을 추적할 수 AWS KMS있습니다.

다음은 고객 관리 키로 암호화된 데이터에 Decrypt AWS AppConfig 액세스하기 위해 에서 호출한 AWS KMS 작업을 모니터링하기 위한 CloudTrail 이벤트입니다.

{ "eventVersion": "1.08", "userIdentity": { "type": "AWSService", "invokedBy": "appconfig.amazonaws.com" }, "eventTime": "2023-01-03T02:22:28z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "Region", "sourceIPAddress": "172.12.34.56", "userAgent": "ExampleDesktop/1.0 (V1; OS)", "requestParameters": { "encryptionContext": { "aws:appconfig:deployment:arn": "arn:aws:appconfig:Region:account_ID:application/application_ID/environment/environment_ID/deployment/deployment_ID" }, "keyId": "arn:aws:kms:Region:account_ID:key/key_ID", "encryptionAlgorithm": "SYMMETRIC_DEFAULT" }, "responseElements": null, "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "readOnly": true, "resources": [ { "accountId": "account_ID", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:Region:account_ID:key_ID" } ], "eventType": "AwsApiCall", "managementEvent": true, "eventCategory": "Management", "recipientAccountId": "account_ID", "sharedEventID": "dc129381-1d94-49bd-b522-f56a3482d088" }

인터페이스 엔드포인트를 AWS AppConfig 사용한 액세스 (AWS PrivateLink)

를 AWS PrivateLink 사용하여 와 (VPC과) 사이에 비공개 연결을 만들 수 AWS AppConfig있습니다. 인터넷 게이트웨이, NAT 장치VPC, VPN 연결 또는 AWS Direct Connect 연결을 사용하지 않고도 마치 집에 있는 AWS AppConfig 것처럼 액세스할 수 있습니다. 인스턴스에 액세스하는 데 퍼블릭 IP 주소가 VPC 필요하지 않습니다 AWS AppConfig.

AWS PrivateLink에서 제공되는 인터페이스 엔드포인트를 생성하여 이 프라이빗 연결을 설정합니다. 인터페이스 엔드포인트에 대해 사용 설정하는 각 서브넷에서 엔드포인트 네트워크 인터페이스를 생성합니다. 이는 AWS AppConfig로 향하는 트래픽의 진입점 역할을 하는 요청자 관리형 네트워크 인터페이스입니다.

자세한 내용은AWS PrivateLink 가이드의 AWS PrivateLink를 통해 AWS 서비스 에 액세스를 참조하세요.

고려 사항 AWS AppConfig

에 대한 AWS AppConfig인터페이스 엔드포인트를 설정하기 전에 AWS PrivateLink 가이드의 고려 사항을 검토하십시오.

AWS AppConfig 인터페이스 엔드포인트를 통한 appconfigappconfigdata서비스 호출을 지원합니다.

AWS AppConfig용 인터페이스 엔드포인트 생성

Amazon VPC 콘솔 또는 AWS Command Line Interface (AWS CLI) AWS AppConfig 를 사용하기 위한 인터페이스 엔드포인트를 생성할 수 있습니다. 자세한 내용은 AWS PrivateLink 설명서인터페이스 엔드포인트 생성을 참조하십시오.

다음 서비스 이름을 AWS AppConfig 사용하기 위한 인터페이스 엔드포인트를 생성하십시오.

com.amazonaws.region.appconfig
com.amazonaws.region.appconfigdata

인터페이스 엔드포인트에 DNS 대해 프라이빗을 활성화하면 기본 지역 DNS 이름을 AWS AppConfig 사용하도록 API 요청할 수 있습니다. 예: appconfig.us-east-1.amazonaws.comappconfigdata.us-east-1.amazonaws.com.

엔드포인트의 엔드포인트 정책 생성

엔드포인트 정책은 인터페이스 엔드포인트에 연결할 수 있는 IAM 리소스입니다. 기본 엔드포인트 정책은 인터페이스 엔드포인트를 AWS AppConfig 통한 전체 액세스를 허용합니다. AWS AppConfig 에서 허용된 액세스를 제어하려면 사용자 지정 엔드포인트 정책을 인터페이스 엔드포인트에 연결하십시오. VPC

엔드포인트 정책은 다음 정보를 지정합니다.

  • 작업을 수행할 수 있는 주체 (AWS 계정, IAM 사용자, IAM 역할).

  • 수행할 수 있는 작업.

  • 작업을 수행할 수 있는 리소스.

자세한 내용은AWS PrivateLink 가이드의 엔드포인트 정책을 사용하여 서비스에 대한 액세스 제어를 참조하세요.

예: 작업에 대한 VPC 엔드포인트 정책 AWS AppConfig

다음은 사용자 지정 엔드포인트 정책의 예입니다. 이 정책은 인터페이스 엔드포인트에 연결될 때 모든 리소스의 모든 보안 주체에 대한 액세스 권한을 나열된 AWS AppConfig 작업에 부여합니다.

{ "Statement": [ { "Principal": "*", "Effect": "Allow", "Action": [ "appconfig:CreateApplication", "appconfig:CreateEnvironment", "appconfig:CreateConfigurationProfile", "appconfig:StartDeployment", "appconfig:GetLatestConfiguration" "appconfig:StartConfigurationSession" ], "Resource":"*" } ] }

Secrets Manager 키 교체

이 섹션에서는 Secrets AWS AppConfig Manager와의 통합에 대한 중요한 보안 정보를 설명합니다. Secrets Manager에 대한 자세한 내용은 무엇입니까 AWS Secrets Manager? 를 참조하십시오. AWS Secrets Manager 사용 설명서에서.

에서 배포한 Secrets Manager 암호의 자동 교체 설정 AWS AppConfig

교체는 Secrets Manager에 저장되어 있는 암호를 주기적으로 업데이트하는 프로세스입니다. 보안 암호를 교체하면 보안 암호 및 데이터베이스 또는 서비스 모두에서 자격 증명이 업데이트됩니다. Secrets Manager에서 암호와 데이터베이스를 업데이트하는 AWS Lambda 함수를 사용하여 자동 암호 순환을 구성할 수 있습니다. 자세한 내용은 AWS Secrets Manager 사용 설명서에서 AWS Secrets Manager 보안 암호 교체를 참조하십시오.

에서 배포한 AWS AppConfig Secrets Manager 암호의 키 교체를 활성화하려면 순환 Lambda 함수를 업데이트하고 순환된 암호를 배포하십시오.

참고

암호가 교체되고 새 버전으로 완전히 업데이트된 후 AWS AppConfig 구성 프로필을 배포하십시오. VersionStage 상태가 AWSPENDING에서 AWSCURRENT로 변경되었으므로 암호가 교체되었는지 확인할 수 있습니다. 암호 교체 완료는 Secrets Manager Rotation 템플릿 finish_secret 함수 내에서 이루어집니다.

다음은 시크릿이 교체된 후 AWS AppConfig 배포를 시작하는 함수의 예시입니다.

import time import boto3 client = boto3.client('appconfig') def finish_secret(service_client, arn, new_version): """Finish the rotation by marking the pending secret as current This method finishes the secret rotation by staging the secret staged AWSPENDING with the AWSCURRENT stage. Args: service_client (client): The secrets manager service client arn (string): The secret ARN or other identifier new_version (string): The new version to be associated with the secret """ # First describe the secret to get the current version metadata = service_client.describe_secret(SecretId=arn) current_version = None for version in metadata["VersionIdsToStages"]: if "AWSCURRENT" in metadata["VersionIdsToStages"][version]: if version == new_version: # The correct version is already marked as current, return logger.info("finishSecret: Version %s already marked as AWSCURRENT for %s" % (version, arn)) return current_version = version break # Finalize by staging the secret version current service_client.update_secret_version_stage(SecretId=arn, VersionStage="AWSCURRENT", MoveToVersionId=new_version, RemoveFromVersionId=current_version) # Deploy rotated secret response = client.start_deployment( ApplicationId='TestApp', EnvironmentId='TestEnvironment', DeploymentStrategyId='TestStrategy', ConfigurationProfileId='ConfigurationProfileId', ConfigurationVersion=new_version, KmsKeyIdentifier=key, Description='Deploy secret rotated at ' + str(time.time()) ) logger.info("finishSecret: Successfully set AWSCURRENT stage to version %s for secret %s." % (new_version, arn))