

 AWS SDK for .NET V3가 유지 관리 모드로 전환되었습니다.

[AWS SDK for .NET V4](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/welcome.html)로 마이그레이션하는 것이 좋습니다. 마이그레이션 방법에 대한 자세한 내용과 정보는 [유지 관리 모드 공지](https://aws.amazon.com/blogs/developer/aws-sdk-for-net-v3-maintenance-mode-announcement/)를 참조하세요.

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

# 이 AWS 제품 또는 서비스에 대한 보안
<a name="security"></a>

Amazon Web Services(AWS)에서 가장 우선순위가 높은 것이 클라우드 보안입니다. AWS 고객으로서 여러분은 가장 높은 보안 요구 사항을 충족하기 위해 설계된 데이터 센터 및 네트워크 아키텍처의 혜택을 받게 됩니다. 보안은 AWS 와 사용자 간의 공동 책임입니다. [공동 책임 모델](https://aws.amazon.com/compliance/shared-responsibility-model/)은 이 사항을 클라우드 내 보안 및 클라우드의 보안으로 설명합니다.

**클라우드 보안** - AWS 는 클라우드에서 제공되는 모든 서비스를 실행하는 인프라를 보호하고 안전하게 사용할 수 있는 서비스를 AWS 제공할 책임이 있습니다. 당사의 보안 책임은에서 최우선 순위이며 AWS, 타사 감사자는 [AWS 규정 준수 프로그램의](https://aws.amazon.com/compliance/programs/) 일환으로 보안의 효과를 정기적으로 테스트하고 검증합니다.

**클라우드의 보안** - 사용자의 책임은 사용 중인 AWS 서비스와 데이터의 민감도, 조직의 요구 사항, 관련 법률 및 규정을 비롯한 기타 요인에 따라 결정됩니다.

이 AWS 제품 또는 서비스는 지원하는 특정 Amazon Web Services(AWS) 서비스를 통해 [공동 책임 모델을](https://aws.amazon.com/compliance/shared-responsibility-model/) 따릅니다. AWS 서비스 보안 정보는 [AWS 서비스 보안 설명서 페이지](https://docs.aws.amazon.com/security/?id=docs_gateway#aws-security) 및 규정 [AWSAWS 준수 프로그램의 규정 준수 작업 범위에 속하는 서비스를 참조하세요](https://aws.amazon.com/compliance/services-in-scope/).

**Topics**
+ [데이터 보호](data-protection.md)
+ [자격 증명 및 액세스 관리](security-iam.md)
+ [규정 준수 검증](compliance-validation.md)
+ [복원력](disaster-recovery-resiliency.md)
+ [인프라 보안](infrastructure-security.md)
+ [최소 TLS 버전 적용](enforcing-tls.md)
+ [S3 암호화 클라이언트 마이그레이션(V1에서 V2로)](s3-encryption-migration-v1-v2.md)
+ [S3 암호화 클라이언트 마이그레이션(V2에서 V4로)](s3-encryption-migration-v2-v4.md)

# 이 AWS 제품 또는 서비스의 데이터 보호
<a name="data-protection"></a>

 AWS [공동 책임 모델](https://aws.amazon.com/compliance/shared-responsibility-model/)이 AWS 제품 또는 서비스의 데이터 보호에 적용됩니다. 이 모델에 설명된 대로 AWS 는 모든를 실행하는 글로벌 인프라를 보호할 책임이 있습니다 AWS 클라우드. 사용자는 이 인프라에 호스팅되는 콘텐츠에 대한 통제 권한을 유지할 책임이 있습니다. 사용하는 AWS 서비스 의 보안 구성과 관리 태스크에 대한 책임도 사용자에게 있습니다. 데이터 프라이버시에 관한 자세한 내용은 [데이터 프라이버시 FAQ](https://aws.amazon.com/compliance/data-privacy-faq/)를 참조하세요. 유럽의 데이터 보호에 대한 자세한 내용은 *AWS 보안 블로그*의 [AWS 공동 책임 모델 및 GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) 블로그 게시물을 참조하세요.

데이터 보호를 위해 자격 증명을 보호하고 AWS 계정 AWS IAM Identity Center 또는 AWS Identity and Access Management (IAM)를 사용하여 개별 사용자를 설정하는 것이 좋습니다. 이렇게 하면 개별 사용자에게 자신의 직무를 충실히 이행하는 데 필요한 권한만 부여됩니다. 또한 다음과 같은 방법으로 데이터를 보호하는 것이 좋습니다.
+ 각 계정에 다중 인증(MFA)을 사용합니다.
+ SSL/TLS를 사용하여 AWS 리소스와 통신합니다. TLS 1.2는 필수이며 TLS 1.3을 권장합니다.
+ 를 사용하여 API 및 사용자 활동 로깅을 설정합니다 AWS CloudTrail. CloudTrail 추적을 사용하여 AWS 활동을 캡처하는 방법에 대한 자세한 내용은 *AWS CloudTrail 사용 설명서*의 [ CloudTrail 추적 작업을 참조하세요](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html).
+ 내부의 모든 기본 보안 제어와 함께 AWS 암호화 솔루션을 사용합니다 AWS 서비스.
+ Amazon S3에 저장된 민감한 데이터를 검색하고 보호하는 데 도움이 되는 Amazon Macie와 같은 고급 관리형 보안 서비스를 사용합니다.
+ 명령줄 인터페이스 또는 API를 AWS 통해에 액세스할 때 FIPS 140-3 검증 암호화 모듈이 필요한 경우 FIPS 엔드포인트를 사용합니다. 사용 가능한 FIPS 엔드포인트에 대한 자세한 내용은 [연방 정보 처리 표준(FIPS) 140-3](https://aws.amazon.com/compliance/fips/)을 참조하세요.

고객의 이메일 주소와 같은 기밀 정보나 중요한 정보는 태그나 **이름** 필드와 같은 자유 형식 텍스트 필드에 입력하지 않는 것이 좋습니다. 여기에는이 AWS 제품 또는 서비스 또는 기타 AWS 서비스 에서 콘솔 AWS CLI, API 또는 AWS SDKs를 사용하여 작업하는 경우가 포함됩니다. 이름에 사용되는 태그 또는 자유 형식 텍스트 필드에 입력하는 모든 데이터는 청구 또는 진단 로그에 사용될 수 있습니다. 외부 서버에 URL을 제공할 때 해당 서버에 대한 요청을 검증하기 위해 보안 인증 정보를 URL에 포함시켜서는 안 됩니다.

# 자격 증명 및 액세스 관리
<a name="security-iam"></a>

AWS Identity and Access Management (IAM)는 관리자가 AWS 리소스에 대한 액세스를 안전하게 제어하는 데 도움이 AWS 서비스 되는 입니다. IAM 관리자는 누가 AWS 리소스를 사용할 수 있는 *인증*(로그인) 및 *권한*(권한 있음)을 받을 수 있는지 제어합니다. IAM은 추가 비용 없이 사용할 수 AWS 서비스 있는 입니다.

**Topics**
+ [대상](#security_iam_audience)
+ [ID를 통한 인증](#security_iam_authentication)
+ [정책을 사용하여 액세스 관리](#security_iam_access-manage)
+ [IAM AWS 서비스 작업 방법](#security_iam_service-with-iam)
+ [AWS 자격 증명 및 액세스 문제 해결](#security_iam_troubleshoot)

## 대상
<a name="security_iam_audience"></a>

 AWS Identity and Access Management (IAM)를 사용하는 방법은에서 수행하는 작업에 따라 다릅니다 AWS.

**서비스 사용자** - AWS 서비스 를 사용하여 작업을 수행하는 경우 필요한 자격 증명과 권한을 관리자가 제공합니다. 더 많은 AWS 기능을 사용하여 작업을 수행하게 되면 추가 권한이 필요할 수 있습니다. 액세스 권한 관리 방법을 이해하면 관리자에게 올바른 권한을 요청하는 데 도움이 됩니다. 에서 기능에 액세스할 수 없는 경우 사용 중인의 [AWS 자격 증명 및 액세스 문제 해결](#security_iam_troubleshoot) 또는 사용 설명서를 AWS참조 AWS 서비스 하세요.

**서비스 관리자** - 회사에서 AWS 리소스를 책임지고 있는 경우에 대한 전체 액세스 권한을 가지고 있을 것입니다 AWS. 서비스 관리자는 서비스 사용자가 액세스해야 하는 AWS 기능과 리소스를 결정합니다. 그런 다음 IAM 관리자에게 요청을 제출하여 서비스 사용자의 권한을 변경해야 합니다. 이 페이지의 정보를 검토하여 IAM의 기본 개념을 이해하세요. 회사가 IAM을 사용하는 방법에 대해 자세히 알아보려면 사용 중인의 AWS 서비스 사용 설명서를 AWS참조하세요.

**IAM 관리자** - IAM 관리자라면 AWS에 대한 액세스 권한 관리 정책 작성 방법을 자세히 알고 싶을 것입니다. IAM에서 사용할 수 있는 자격 AWS 증명 기반 정책 예제를 보려면 사용 중인의 사용 설명서를 참조 AWS 서비스 하세요.

## ID를 통한 인증
<a name="security_iam_authentication"></a>

인증은 AWS 자격 증명으로에 로그인하는 방법입니다. AWS 계정 루트 사용자, IAM 사용자 또는 IAM 역할을 수임하여 인증되어야 합니다.

 AWS IAM Identity Center (IAM Identity Center), Single Sign-On 인증 또는 Google/Facebook 자격 증명과 같은 자격 증명 소스의 자격 증명을 사용하여 페더레이션 자격 증명으로 로그인할 수 있습니다. 로그인하는 방법에 대한 자세한 내용은 *AWS Sign-In 사용 설명서*의 [AWS 계정에 로그인하는 방법](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html) 섹션을 참조하세요.

프로그래밍 방식 액세스를 위해는 요청에 암호화 방식으로 서명할 수 있는 SDK 및 CLI를 AWS 제공합니다. 자세한 내용은 *IAM 사용 설명서*의 [API 요청용AWS Signature Version 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html) 섹션을 참조하세요.

### AWS 계정 루트 사용자
<a name="security_iam_authentication-rootuser"></a>

 를 생성할 때 모든 AWS 서비스 및 리소스에 대한 완전한 액세스 권한이 있는 AWS 계정 *theroot 사용자*라는 하나의 로그인 자격 증명으로 AWS 계정시작합니다. 일상적인 태스크에 루트 사용자를 사용하지 않을 것을 강력히 권장합니다. 루트 사용자 자격 증명이 필요한 작업은 *IAM 사용 설명서*의 [루트 사용자 자격 증명이 필요한 작업](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks) 섹션을 참조하세요.

### 페더레이션 ID
<a name="security_iam_authentication-federated"></a>

가장 좋은 방법은 인간 사용자에게 자격 증명 공급자와의 페더레이션을 사용하여 임시 자격 증명을 AWS 서비스 사용하여에 액세스하도록 요구하는 것입니다.

*페더레이션 자격 증명*은 엔터프라이즈 디렉터리, 웹 자격 증명 공급자 또는 자격 증명 소스의 자격 증명을 AWS 서비스 사용하여 Directory Service 에 액세스하는 사용자입니다. 페더레이션 ID는 임시 자격 증명을 제공하는 역할을 수임합니다.

중앙 집중식 액세스 관리를 위해 AWS IAM Identity Center를 추천합니다. 자세한 정보는 *AWS IAM Identity Center 사용 설명서*의 [What is IAM Identity Center?](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)를 참조하세요.

### IAM 사용자 및 그룹
<a name="security_iam_authentication-iamuser"></a>

*[IAM 사용자](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)*는 단일 개인 또는 애플리케이션에 대한 특정 권한을 가진 ID입니다. 장기 자격 증명이 있는 IAM 사용자 대신 임시 자격 증명을 사용하는 것이 좋습니다. 자세한 내용은 *IAM 사용 설명서*의 자격 [증명 공급자와의 페더레이션을 사용하여 임시 자격 증명을 AWS 사용하여에 액세스하도록 인간 사용자에게 요구](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp)하기를 참조하세요.

[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)은 IAM 사용자 모음을 지정하고 대규모 사용자 집합에 대한 관리 권한을 더 쉽게 만듭니다. 자세한 내용은 *IAM 사용 설명서*의 [IAM 사용자 사용 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/gs-identities-iam-users.html) 섹션을 참조하세요.

### IAM 역할
<a name="security_iam_authentication-iamrole"></a>

*[IAM 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)*은 임시 자격 증명을 제공하는 특정 권한이 있는 자격 증명입니다. [사용자에서 IAM 역할(콘솔)로 전환하거나 또는 API 작업을 호출하여 역할을](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html) 수임할 수 있습니다. AWS CLI AWS 자세한 내용은 *IAM 사용 설명서*의 [역할 수임 방법](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage-assume.html)을 참조하세요.

IAM 역할은 페더레이션 사용자 액세스, 임시 IAM 사용자 권한, 교차 계정 액세스, 교차 서비스 액세스 및 Amazon EC2에서 실행되는 애플리케이션에 유용합니다. 자세한 내용은 *IAM 사용 설명서*의 [교차 계정 리소스 액세스](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)를 참조하세요.

## 정책을 사용하여 액세스 관리
<a name="security_iam_access-manage"></a>

정책을 AWS 생성하고 자격 증명 또는 리소스에 연결하여 AWS 에서 액세스를 제어합니다. 정책은 자격 증명 또는 리소스와 연결될 때 권한을 정의합니다.는 보안 주체가 요청할 때 이러한 정책을 AWS 평가합니다. 대부분의 정책은에 JSON 문서 AWS 로 저장됩니다. JSON 정책 문서에 대한 자세한 내용은 *IAM 사용 설명서*의 [JSON 정책 개요](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#access_policies-json) 섹션을 참조하세요.

정책을 사용하여 관리자는 어떤 **보안 주체**가 어떤 **리소스**에 대해 어떤 **조건**에서 **작업**을 수행할 수 있는지 정의하여 누가 무엇을 액세스할 수 있는지 지정합니다.

기본적으로 사용자 및 역할에는 어떠한 권한도 없습니다. IAM 관리자는 IAM 정책을 생성하고 사용자가 수임할 수 있는 역할에 추가합니다. IAM 정책은 작업을 수행하기 위해 사용하는 방법과 관계없이 작업에 대한 권한을 정의합니다.

### ID 기반 정책
<a name="security_iam_access-manage-id-based-policies"></a>

ID 기반 정책은 ID(사용자, 사용자 그룹 또는 역할)에 연결하는 JSON 권한 정책 문서입니다. 이러한 정책은 자격 증명이 수행할 수 있는 작업, 대상 리소스 및 이에 관한 조건을 제어합니다. ID 기반 정책을 생성하는 방법을 알아보려면 *IAM 사용 설명서*에서 [고객 관리형 정책으로 사용자 지정 IAM 권한 정의](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)를 참조하세요.

ID 기반 정책은 *인라인 정책*(단일 ID에 직접 포함) 또는 *관리형 정책*(여러 ID에 연결된 독립 실행형 정책)일 수 있습니다. 관리형 정책 또는 인라인 정책을 선택하는 방법을 알아보려면 *IAM 사용 설명서*의 [관리형 정책 및 인라인 정책 중에서 선택](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-choosing-managed-or-inline.html) 섹션을 참조하세요.

### 리소스 기반 정책
<a name="security_iam_access-manage-resource-based-policies"></a>

리소스 기반 정책은 리소스에 연결하는 JSON 정책 설명서입니다. 예를 들어 IAM *역할 신뢰 정책* 및 Amazon S3 *버킷 정책*이 있습니다. 리소스 기반 정책을 지원하는 서비스에서 서비스 관리자는 이러한 정책을 사용하여 특정 리소스에 대한 액세스를 통제할 수 있습니다. 리소스 기반 정책에서 [보안 주체를 지정](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)해야 합니다.

리소스 기반 정책은 해당 서비스에 있는 인라인 정책입니다. 리소스 기반 정책에서는 IAM의 AWS 관리형 정책을 사용할 수 없습니다.

### 액세스 제어 목록(ACL)
<a name="security_iam_access-manage-acl"></a>

액세스 제어 목록(ACL)은 어떤 위탁자(계정 멤버, 사용자 또는 역할)가 리소스에 액세스할 수 있는 권한을 가지고 있는지를 제어합니다. ACL은 JSON 정책 문서 형식을 사용하지 않지만 리소스 기반 정책과 유사합니다.

Amazon S3 AWS WAF및 Amazon VPC는 ACLs. ACL에 관한 자세한 내용은 *Amazon Simple Storage Service 개발자 가이드*의 [액세스 제어 목록(ACL) 개요](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html)를 참조하세요.

### 기타 정책 타입
<a name="security_iam_access-manage-other-policies"></a>

AWS 는 보다 일반적인 정책 유형에서 부여한 최대 권한을 설정할 수 있는 추가 정책 유형을 지원합니다.
+ **권한 경계** - ID 기반 정책에서 IAM 엔터티에 부여할 수 있는 최대 권한을 설정합니다. 자세한 정보는 *IAM 사용 설명서*의 [IAM 엔터티의 권한 범위](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)를 참조하세요.
+ **서비스 제어 정책(SCP)** - AWS Organizations내 조직 또는 조직 단위에 대한 최대 권한을 지정합니다. 자세한 내용은AWS Organizations 사용 설명서의 [서비스 제어 정책](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)을 참조하세요.**
+ **리소스 제어 정책(RCP)** – 계정의 리소스에 사용할 수 있는 최대 권한을 설정합니다. 자세한 내용은 *AWS Organizations 사용 설명서*의 [리소스 제어 정책(RCP)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html)을 참조하세요.
+ **세션 정책** – 역할 또는 페더레이션 사용자에 대해 임시 세션을 프로그래밍 방식으로 생성할 때 파라미터로 전달하는 고급 정책입니다. 자세한 내용은 *IAM 사용 설명서*의 [세션 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)을 참조하세요.

### 여러 정책 유형
<a name="security_iam_access-manage-multiple-policies."></a>

여러 정책 유형이 요청에 적용되는 경우, 결과 권한은 이해하기가 더 복잡합니다. 에서 여러 정책 유형이 관련될 때 요청을 허용할지 여부를 AWS 결정하는 방법을 알아보려면 *IAM 사용 설명서*의 [정책 평가 로직](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)을 참조하세요.

## IAM AWS 서비스 작업 방법
<a name="security_iam_service-with-iam"></a>

가 대부분의 IAM 기능을 AWS 서비스 사용하는 방법을 개괄적으로 알아보려면 *IAM 사용 설명서*의 [AWS IAM으로 작업하는 서비스를](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html) 참조하세요.

IAM AWS 서비스 에서 특정를 사용하는 방법을 알아보려면 관련 서비스 사용 설명서의 보안 섹션을 참조하세요.

## AWS 자격 증명 및 액세스 문제 해결
<a name="security_iam_troubleshoot"></a>

다음 정보를 사용하여 및 IAM으로 작업할 때 발생할 수 있는 일반적인 문제를 진단 AWS 하고 수정할 수 있습니다.

**Topics**
+ [에서 작업을 수행할 권한이 없음 AWS](#security_iam_troubleshoot-no-permissions)
+ [iam:PassRole을 수행하도록 인증되지 않음](#security_iam_troubleshoot-passrole)
+ [내 외부의 사람이 내 AWS 리소스에 액세스 AWS 계정 하도록 허용하고 싶습니다.](#security_iam_troubleshoot-cross-account-access)

### 에서 작업을 수행할 권한이 없음 AWS
<a name="security_iam_troubleshoot-no-permissions"></a>

작업을 수행할 권한이 없다는 오류가 표시되면 작업을 수행할 수 있도록 정책을 업데이트해야 합니다.

다음의 예제 오류는 `mateojackson` IAM 사용자가 콘솔을 사용하여 가상 `my-example-widget` 리소스에 대한 세부 정보를 보려고 하지만 가상 `awes:GetWidget` 권한이 없을 때 발생합니다.

```
User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: awes:GetWidget on resource: my-example-widget
```

이 경우, `awes:GetWidget` 작업을 사용하여 `my-example-widget` 리소스에 액세스할 수 있도록 `mateojackson` 사용자 정책을 업데이트해야 합니다.

도움이 필요한 경우 AWS 관리자에게 문의하세요. 관리자는 로그인 자격 증명을 제공한 사람입니다.

### iam:PassRole을 수행하도록 인증되지 않음
<a name="security_iam_troubleshoot-passrole"></a>

`iam:PassRole` 작업을 수행할 수 있는 권한이 없다는 오류가 수신되면 AWS에 역할을 전달할 수 있도록 정책을 업데이트해야 합니다.

일부 AWS 서비스 에서는 새 서비스 역할 또는 서비스 연결 역할을 생성하는 대신 기존 역할을 해당 서비스에 전달할 수 있습니다. 이렇게 하려면 역할을 서비스에 전달할 권한이 있어야 합니다.

다음 예 오류는 `marymajor`라는 IAM 사용자가 콘솔을 사용하여 AWS에서 작업을 수행하려고 하는 경우에 발생합니다. 하지만 작업을 수행하려면 서비스 역할이 부여한 권한이 서비스에 있어야 합니다. Mary는 서비스에 역할을 전달할 권한이 없습니다.

```
User: arn:aws:iam::123456789012:user/marymajor is not authorized to perform: iam:PassRole
```

이 경우, Mary가 `iam:PassRole`작업을 수행할 수 있도록 Mary의 정책을 업데이트해야 합니다.

도움이 필요한 경우 AWS 관리자에게 문의하세요. 관리자는 로그인 자격 증명을 제공한 사람입니다.

### 내 외부의 사람이 내 AWS 리소스에 액세스 AWS 계정 하도록 허용하고 싶습니다.
<a name="security_iam_troubleshoot-cross-account-access"></a>

다른 계정의 사용자 또는 조직 외부의 사람이 리소스에 액세스할 때 사용할 수 있는 역할을 생성할 수 있습니다. 역할을 수임할 신뢰할 수 있는 사람을 지정할 수 있습니다. 리소스 기반 정책 또는 액세스 제어 목록(ACL)을 지원하는 서비스의 경우, 이러한 정책을 사용하여 다른 사람에게 리소스에 대한 액세스 권한을 부여할 수 있습니다.

자세한 내용은 다음을 참조하세요.
+ 에서 이러한 기능을 AWS 지원하는지 여부를 알아보려면 섹션을 참조하세요[IAM AWS 서비스 작업 방법](#security_iam_service-with-iam).
+ 소유 AWS 계정 한의 리소스에 대한 액세스 권한을 제공하는 방법을 알아보려면 [IAM 사용 설명서의 소유한 다른의 IAM 사용자에게 액세스 권한 제공을 참조 AWS 계정 하세요](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html). ** 
+ 타사에 리소스에 대한 액세스 권한을 제공하는 방법을 알아보려면 *IAM 사용 설명서*의 [타사가 AWS 계정 소유한에 대한 액세스 권한 제공을](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html) AWS 계정참조하세요.
+ ID 페더레이션을 통해 액세스 권한을 제공하는 방법을 알아보려면 *IAM 사용 설명서*의 [외부에서 인증된 사용자에게 액세스 권한 제공(ID 페더레이션)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_federated-users.html)을 참조하세요.
+ 크로스 계정 액세스에 대한 역할과 리소스 기반 정책 사용의 차이점을 알아보려면 *IAM 사용 설명서*의 [IAM의 크로스 계정 리소스 액세스](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)를 참조하세요.

# 이 AWS 제품 또는 서비스에 대한 규정 준수 검증
<a name="compliance-validation"></a>

 AWS 서비스 가 특정 규정 준수 프로그램의 범위 내에 있는지 알아보려면 [AWS 서비스 규정 준수 프로그램 범위 내](https://aws.amazon.com/compliance/services-in-scope/)를 참조하고 관심 있는 규정 준수 프로그램을 선택합니다. 일반 정보는 [AWS 규정 준수 프로그램](https://aws.amazon.com/compliance/programs/).

를 사용하여 타사 감사 보고서를 다운로드할 수 있습니다 AWS Artifact. 자세한 내용은 [Downloading Reports inDownloading AWS Artifact](https://docs.aws.amazon.com/artifact/latest/ug/downloading-documents.html)을 참조하세요.

사용 시 규정 준수 책임은 데이터의 민감도, 회사의 규정 준수 목표 및 관련 법률과 규정에 따라 AWS 서비스 결정됩니다. 사용 시 규정 준수 책임에 대한 자세한 내용은 [AWS 보안 설명서를](https://docs.aws.amazon.com/security/) AWS 서비스참조하세요.

이 AWS 제품 또는 서비스는 지원하는 특정 Amazon Web Services(AWS) 서비스를 통해 [공동 책임 모델을](https://aws.amazon.com/compliance/shared-responsibility-model/) 따릅니다. AWS 서비스 보안 정보는 [AWS 서비스 보안 설명서 페이지](https://docs.aws.amazon.com/security/?id=docs_gateway#aws-security) 및 규정 [AWSAWS 준수 프로그램의 규정 준수 작업 범위에 속하는 서비스를 참조하세요](https://aws.amazon.com/compliance/services-in-scope/).

# 이 AWS 제품 또는 서비스에 대한 복원력
<a name="disaster-recovery-resiliency"></a>

 AWS 글로벌 인프라는 AWS 리전 및 가용 영역을 중심으로 구축됩니다.

AWS 리전 는 지연 시간이 짧고 처리량이 많으며 중복성이 높은 네트워킹과 연결된 물리적으로 분리되고 격리된 여러 가용 영역을 제공합니다.

가용 영역을 사용하면 중단 없이 영역 간에 자동으로 장애 극복 조치가 이루어지는 애플리케이션 및 데이터베이스를 설계하고 운영할 수 있습니다. 가용 영역은 기존의 단일 또는 다중 데이터 센터 인프라보다 가용성, 내결함성, 확장성이 뛰어납니다.

 AWS 리전 및 가용 영역에 대한 자세한 내용은 [AWS 글로벌 인프라를](https://aws.amazon.com/about-aws/global-infrastructure/) 참조하세요.

이 AWS 제품 또는 서비스는 지원하는 특정 Amazon Web Services(AWS) 서비스를 통해 [공동 책임 모델을](https://aws.amazon.com/compliance/shared-responsibility-model/) 따릅니다. AWS 서비스 보안 정보는 [AWS 서비스 보안 설명서 페이지](https://docs.aws.amazon.com/security/?id=docs_gateway#aws-security) 및 규정 [AWSAWS 준수 프로그램의 규정 준수 작업 범위에 속하는 서비스를 참조하세요](https://aws.amazon.com/compliance/services-in-scope/).

# 이 AWS 제품 또는 서비스에 대한 인프라 보안
<a name="infrastructure-security"></a>

이 AWS 제품 또는 서비스는 관리형 서비스를 사용하므로 글로벌 네트워크 보안으로 AWS 보호됩니다. AWS 보안 서비스 및가 인프라를 AWS 보호하는 방법에 대한 자세한 내용은 [AWS 클라우드 보안을](https://aws.amazon.com/security/) 참조하세요. 인프라 보안 모범 사례를 사용하여 AWS 환경을 설계하려면 *보안 원칙 AWS Well‐Architected Framework*의 [인프라 보호를](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/infrastructure-protection.html) 참조하세요.

 AWS 에서 게시한 API 호출을 사용하여 네트워크를 통해이 AWS 제품 또는 서비스에 액세스합니다. 클라이언트는 다음을 지원해야 합니다.
+ Transport Layer Security(TLS). TLS 1.2는 필수이며 TLS 1.3을 권장합니다.
+ DHE(Ephemeral Diffie-Hellman) 또는 ECDHE(Elliptic Curve Ephemeral Diffie-Hellman)와 같은 완전 전송 보안(PFS)이 포함된 암호 제품군. Java 7 이상의 최신 시스템은 대부분 이러한 모드를 지원합니다.

또한 요청은 액세스 키 ID 및 IAM 위탁자와 관련된 시크릿 액세스 키를 사용하여 서명해야 합니다. 또는 [AWS Security Token Service](https://docs.aws.amazon.com/STS/latest/APIReference/Welcome.html)(AWS STS)를 사용하여 임시 보안 자격 증명을 생성하여 요청에 서명할 수 있습니다.

이 AWS 제품 또는 서비스는 지원하는 특정 Amazon Web Services(AWS) 서비스를 통해 [공동 책임 모델을](https://aws.amazon.com/compliance/shared-responsibility-model/) 따릅니다. AWS 서비스 보안 정보는 [AWS 서비스 보안 설명서 페이지](https://docs.aws.amazon.com/security/?id=docs_gateway#aws-security) 및 규정 [AWSAWS 준수 프로그램의 규정 준수 노력 범위에 속하는 서비스를 참조하세요](https://aws.amazon.com/compliance/services-in-scope/).

# 에서 최소 TLS 버전 적용 AWS SDK for .NET
<a name="enforcing-tls"></a>

 AWS 서비스와 통신할 때 보안을 강화하려면 TLS 1.2 이상을 사용하도록 AWS SDK for .NET 를 구성해야 합니다.

 AWS SDK for .NET 는 기본 .NET 런타임을 사용하여 사용할 보안 프로토콜을 결정합니다. 기본적으로 현재 버전의 .NET은 운영 체제에서 지원하는 최신 구성 프로토콜을 사용합니다. 애플리케이션에서 이 SDK 동작을 재정의할 수 있지만 그렇게 하지 *않는 것이 좋습니다*.

## .NET Core
<a name="enforcing-tls-dotnet-core"></a>

기본적으로 .NET Core는 운영 체제에서 지원하는 최신 구성 프로토콜을 사용합니다. AWS SDK for .NET 에서는 이를 재정의하는 메커니즘을 제공하지 않습니다.

.NET Core 2.1 이전 버전을 사용하는 경우 .NET Core 버전을 업그레이드할 것을 *적극 권장합니다*.

각 운영 체제에 대한 자세한 내용은 다음을 참조하십시오.

**Windows**

최신 Windows 배포판에는 TLS 1.2 지원이 [기본적으로 활성화](https://learn.microsoft.com/en-us/windows/win32/secauthn/protocols-in-tls-ssl--schannel-ssp-)되어 있습니다. Windows 7 SP1 또는 Windows Server 2008 R2 SP1에서 실행하는 경우 [https://learn.microsoft.com/en-us/windows-server/security/tls/tls-registry-settings\$1tls-12](https://learn.microsoft.com/en-us/windows-server/security/tls/tls-registry-settings#tls-12)에 설명된 대로 레지스트리에서 TLS 1.2 지원이 활성화되어 있는지 확인해야 합니다. 이전 배포를 실행 중인 경우 운영 체제를 업그레이드해야 합니다. Windows의 TLS 1.3 지원에 대한 자세한 내용은 최신 Microsoft 문서에서 필요한 최소 클라이언트 또는 서버 버전을 확인하세요.

**macOS**

.NET Core 2.1 이상을 실행하는 경우 TLS 1.2가 기본적으로 활성화되어 있습니다. TLS 1.2는 [OS X Mavericks v10.9 이상](https://support.apple.com/en-us/103373)에서 지원됩니다. .NET Core 버전 2.1 이상에는 [https://learn.microsoft.com/en-us/dotnet/core/install/windows?tabs=net80&pivots=os-macos](https://learn.microsoft.com/en-us/dotnet/core/install/windows?tabs=net80&pivots=os-macos) 설명된 대로 최신 버전의 macOS가 필요합니다.

.NET Core 1.0의 경우 .NET Core가 별도로 설치해야 하는 종속 프로그램인 [OpenSSL을 macOS에서 사용합니다](https://github.com/dotnet/announcements/issues/21). OpenSSL은 버전 1.0.1에서 TLS 1.2에 대한 지원을 추가했으며 버전 1.1.1에서 TLS 1.3에 대한 지원을 추가했습니다.

**Linux**

Linux에서는 .NET Core에 OpenSSL이 필요합니다. OpenSSL은 많은 Linux 배포판에 번들로 함께 제공되는데 별도로 설치할 수도 있습니다. OpenSSL은 버전 1.0.1에서 TLS 1.2에 대한 지원을 추가했으며 버전 1.1.1에서 TLS 1.3에 대한 지원을 추가했습니다. 최신 버전의 .NET Core(2.1 이상)를 사용하며 패키지 관리자를 설치한 경우 최신 버전의 OpenSSL이 설치되었을 가능성이 큽니다.

터미널에서 **`openssl version`**을 실행하여 버전이 1.0.1 이상인지 확인할 수 있습니다.

## .NET Framework
<a name="enforcing-tls-dotnet-framework"></a>

최신 버전의 .NET Framework (4.7 이상) 및 최신 버전의 Windows(클라이언트의 경우 Windows 8 이상, 서버의 경우 Windows Server 2012 이상)를 실행하는 경우 TLS 1.2가 기본적으로 활성화되어 있고 사용됩니다.

운영 체제 설정(.NET Framework 3.5\$14.5.2)을 사용하지 않는 .NET Framework 런타임을 사용하는 경우 AWS SDK for .NET 는 지원되는 프로토콜에 [TLS 1.1 및 TLS 1.2에 대한 지원을 추가](https://github.com/aws/aws-sdk-net/blob/aws-sdk-net-v3.7/sdk/src/Core/Amazon.Runtime/Pipeline/HttpHandler/AmazonSecurityProtocolManager.cs)하려고 시도합니다. .NET Framework 3.5를 사용하는 경우 다음과 같이 적절한 핫 패치가 설치된 경우에만 이 시도가 성공합니다.
+ Windows 10 버전 1511 및 Windows Server 2016 – [KB3156421](https://support.microsoft.com/kb/3156421)
+ Windows 8.1 및 Windows Server 2012 R2 – [KB3154520](https://support.microsoft.com/kb/3154520)
+ Windows Server 2012 – [KB3154519](https://support.microsoft.com/kb/3154519)
+ Windows 7 SP1 및 Server 2008 R2 SP1 – [KB3154518](https://support.microsoft.com/kb/3154518)

**주의**  
2024년 8월 15일부터 AWS SDK for .NET 는 .NET Framework 3.5에 대한 지원을 종료하고 최소 .NET Framework 버전을 4.7.2로 변경합니다. 자세한 내용은 블로그 게시물 [AWS SDK for .NET의 .NET Framework 3.5 및 4.5 대상에 대한 중요 변경 사항](https://aws.amazon.com/blogs/developer/important-changes-coming-for-net-framework-3-5-and-4-5-targets-of-the-aws-sdk-for-net/)을 참조하세요.

애플리케이션이 최신 버전의 .NET Framework를 Windows 7 SP1 또는 Windows Server 2008 R2 SP1에서 실행하는 경우 [https://learn.microsoft.com/en-us/windows-server/security/tls/tls-registry-settings\$1tls-12](https://learn.microsoft.com/en-us/windows-server/security/tls/tls-registry-settings#tls-12)에 설명된 대로 레지스트리에서 TLS 1.2 지원이 활성화되어 있는지 확인해야 합니다. 이보다 최신 버전의 Windows에서는 TLS 1.2가 [기본적으로 활성화](https://learn.microsoft.com/en-us/windows/win32/secauthn/protocols-in-tls-ssl--schannel-ssp-)되어 있습니다.

.NET Framework에서 TLS를 사용하는 방법에 대한 자세한 모범 사례는 [https://learn.microsoft.com/en-us/dotnet/framework/network-programming/tls](https://learn.microsoft.com/en-us/dotnet/framework/network-programming/tls)의 Microsoft 문서를 참조하세요.

## AWS Tools for PowerShell
<a name="enforcing-tls-ps"></a>

[AWS Tools for PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/)는 AWS 서비스에 AWS SDK for .NET 대한 모든 호출에를 사용합니다. 다음과 같이 사용자 환경의 동작은 실행 중인 Windows PowerShell 버전에 따라 달라집니다.

**Windows PowerShell 2.0 \$1 5.x**

Windows PowerShell 2.0 \$1 5.x는 .NET Framework에서 실행됩니다. 다음 명령을 사용하여 PowerShell에서 사용되는 .NET 런타임(2.0 또는 4.0)을 확인할 수 있습니다.

```
$PSVersionTable.CLRVersion
```
+ .NET 런타임 2.0을 사용하는 경우 AWS SDK for .NET 및 .NET Framework 3.5와 관련하여 앞서 제공한 지침을 따르십시오.
**주의**  
2024년 8월 15일부터 AWS SDK for .NET 는 .NET Framework 3.5에 대한 지원을 종료하고 최소 .NET Framework 버전을 4.7.2로 변경합니다. 자세한 내용은 블로그 게시물 [AWS SDK for .NET의 .NET Framework 3.5 및 4.5 대상에 대한 중요 변경 사항](https://aws.amazon.com/blogs/developer/important-changes-coming-for-net-framework-3-5-and-4-5-targets-of-the-aws-sdk-for-net/)을 참조하세요.
+ .NET 런타임 4.0을 사용하는 경우 AWS SDK for .NET 및 .NET Framework 4\$1와 관련하여 앞서 제공한 지침을 따르십시오.

**Windows PowerShell 6.0**

Windows PowerShell 6.0 이상은 .NET Core에서 실행됩니다. 다음 명령을 실행하여 사용되는 .NET Core 버전을 확인할 수 있습니다.

```
[System.Reflection.Assembly]::GetEntryAssembly().GetCustomAttributes([System.Runtime.Versioning.TargetFrameworkAttribute], $true).FrameworkName
```

 AWS SDK for .NET 및 관련 .NET Core 버전과 관련하여 앞서 제공된 지침을 따릅니다.

## Xamarin
<a name="enforcing-tls-xamarin"></a>

Xamarin의 경우 [https://learn.microsoft.com/en-us/xamarin/cross-platform/app-fundamentals/transport-layer-security](https://learn.microsoft.com/en-us/xamarin/cross-platform/app-fundamentals/transport-layer-security)의 지침을 참조하세요. 요약하면 다음과 같습니다.

**Android**
+ Android 5.0 이상이 필요합니다.
+ **Project Properties(프로젝트 속성)**, **Android Options(Android 옵션)**: HttpClient 구현을 **Android**로 설정하고 SSL/TLS 구현을 **Native TLS 1.2\$1(네이티브 TLS 1.2 이상)**로 설정해야 합니다.

**iOS**
+ iOS 7 이상이 필요합니다.
+ **Project Properties(프로젝트 속성)**, **iOS Build(iOS 빌드)**: HttpClient 구현을 **NSUrlSession**으로 설정해야 합니다.

**macOS의 경우**
+ macOS 10.9 이상이 필요합니다.
+ **Project Options(프로젝트 옵션)**, **Build(빌드)**, **Mac Build(Mac 빌드)**: HttpClient 구현을 **NSUrlSession**으로 설정해야 합니다.

## Unity
<a name="enforcing-tls-unity"></a>

Unity 2018.2 이상을 사용하며 .NET 4.x와 동등한 스크립팅 런타임을 사용해야 합니다. [https://docs.unity3d.com/2019.1/Documentation/Manual/ScriptingRuntimeUpgrade.html](https://docs.unity3d.com/2019.1/Documentation/Manual/ScriptingRuntimeUpgrade.html)에 설명된 대로 **프로젝트 설정**, **구성**, **플레이어**에서 이를 설정할 수 있습니다. .NET 4.x와 동등한 스크립팅 런타임을 사용하면 Mono 또는 IL2CPP를 실행하는 모든 Unity 플랫폼에서 TLS 1.2를 지원할 수 있습니다.

## 브라우저(Blazor WebAssembly용)
<a name="enforcing-tls-browser"></a>

WebAssembly는 서버가 아닌 브라우저에서 실행되며 브라우저를 사용하여 HTTP 트래픽을 처리합니다. 따라서 TLS 지원이 브라우저 지원에 의해 결정됩니다.

ASP.NET Core 3.1에 대한 미리 보기에서 Blazor WebAssembly는 [https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms](https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms) 설명된 대로 WebAssembly를 지원하는 브라우저에서만 지원됩니다. 모든 주요 브라우저는 WebAssembly를 지원하기 전에 TLS 1.2를 지원했습니다. 사용 중인 브라우저가 이에 해당하는 경우 앱이 실행되면 TLS 1.2를 통해 통신할 수 있습니다.

자세한 내용과 확인이 필요하면 해당 브라우저 설명서를 참조하십시오.

# Amazon S3 암호화 클라이언트 마이그레이션(V1에서 V2로)
<a name="s3-encryption-migration-v1-v2"></a>

**참고**  
V2를 사용 중이고 V4로 마이그레이션하려는 경우 섹션을 참조하세요[Amazon S3 암호화 클라이언트 마이그레이션(V2에서 V4로)](s3-encryption-migration-v2-v4.md).

이 주제에서는 Amazon Simple Storage Service(S3)의 암호화 클라이언트 버전 1 (V1) 에서 버전 2 (V2) 로 애플리케이션을 마이그레이션하고 마이그레이션 프로세스 전반에 걸쳐 애플리케이션 가용성을 보장하는 방법을 보여줍니다.

V2 클라이언트로 암호화된 객체는 V1 클라이언트로 해독할 수 없습니다. 모든 객체를 한 번에 다시 암호화할 필요 없이 새 클라이언트로 쉽게 마이그레이션할 수 있도록 "V1-transitional" 클라이언트가 제공되었습니다. 이 클라이언트는 V1과 V2로 암호화된 객체를 모두 *해독*할 수 있지만 V1 호환 형식으로만 객체를 *암호화*합니다. V2 클라이언트는 V1과 V2로 암호화된 객체를 모두 *해독*할 수 있지만(V1 객체에 대해 활성화된 경우) V2 호환 형식으로만 객체를 *암호화*합니다.

## 마이그레이션 개요
<a name="s3-encryption-migration-v1-v2-overview"></a>

이 마이그레이션은 다음 세 단계로 진행됩니다. 이 단계는 여기에 소개되고 다음에 자세히 설명되어 있습니다. 다음 단계가 시작되기 전에 공유 객체를 사용하는 *모든* 클라이언트에 대해 각 단계를 완료해야 합니다.

1. **새 형식을 읽으려면 기존 클라이언트를 V1 전환 클라이언트로 업데이트하십시오.** 먼저 V1 클라이언트 대신 V1 전환 클라이언트에 종속되도록 애플리케이션을 업데이트합니다. V1 전환 클라이언트를 사용하면 새 V2 클라이언트가 작성한 객체와 V1 호환 형식으로 작성된 객체를 기존 코드에서 해독할 수 있습니다.
**참고**  
V1 전환 클라이언트는 마이그레이션 목적으로만 제공됩니다. V1 전환 클라이언트로 이동한 후 V2 클라이언트로 업그레이드를 진행합니다.

1. **V1 전환 클라이언트를 V2 클라이언트로 마이그레이션하여 새 형식을 작성하십시오.** 다음으로, 애플리케이션의 모든 V1 전환 클라이언트를 V2 클라이언트로 교체하고 보안 프로필을 `V2AndLegacy`로 설정합니다. V2 클라이언트에서 이 보안 프로필을 설정하면 해당 클라이언트가 V1 호환 형식으로 암호화된 객체를 해독할 수 있습니다.

1. **V1 형식을 더 이상 읽지 않도록 V2 클라이언트를 업데이트하십시오.** 마지막으로 모든 클라이언트를 V2로 마이그레이션하고 모든 객체를 V2 호환 형식으로 암호화하거나 다시 암호화한 후에는 V2 보안 프로필을 `V2AndLegacy` 대신 `V2`로 설정합니다. 이렇게 하면 V1 호환 형식의 객체를 해독할 수 없습니다.

## 새 형식을 읽으려면 기존 클라이언트를 V1 전환 클라이언트로 업데이트
<a name="s3-encryption-migration-v1-v2-to-v1n"></a>

V2 암호화 클라이언트는 이전 버전의 클라이언트에서 지원하지 않는 암호화 알고리즘을 사용합니다. 마이그레이션의 첫 번째 단계는 새로운 형식을 읽을 수 있도록 V1 암호 해독 클라이언트를 업데이트하는 것입니다.

V1 전환 클라이언트를 사용하면 애플리케이션이 V1 및 V2로 암호화된 객체를 모두 해독할 수 있습니다. 이 클라이언트는 [Amazon.Extensions.S3.Encryption](https://www.nuget.org/packages/Amazon.Extensions.S3.Encryption) NuGet 패키지의 일부입니다. V1 전환 클라이언트를 사용하려면 각 애플리케이션에서 다음 단계를 수행하세요.

1. [Amazon.Extensions.S3.Encryption](https://www.nuget.org/packages/Amazon.Extensions.S3.Encryption) 패키지에 대한 새로운 종속성을 구축합니다. 프로젝트가 **AWSSDK.S3** 또는 **AWSSDK.KeyManagementService** 패키지에 직접 의존하는 경우 이러한 종속성을 업데이트하거나 제거하여 업데이트된 버전을 이 새 패키지와 함께 가져오도록 해야 합니다.

1. 다음과 같이 적절한 `using` 문을 `Amazon.S3.Encryption`에서 `Amazon.Extensions.S3.Encryption`으로 변경합니다.

   ```
   // using Amazon.S3.Encryption;
     using Amazon.Extensions.S3.Encryption;
   ```

1. 애플리케이션을 다시 빌드하고 다시 배포합니다.

V1 전환 클라이언트는 V1 클라이언트와 완전히 API 호환되므로 다른 코드 변경이 필요하지 않습니다.

## V1 전환 클라이언트를 V2 클라이언트로 마이그레이션하여 새 형식 작성
<a name="s3-encryption-migration-v1-v2-v1n-to-v2"></a>

V2 클라이언트는 [Amazon.Extensions.S3.Encryption](https://www.nuget.org/packages/Amazon.Extensions.S3.Encryption) NuGet 패키지의 일부입니다. 이를 통해 애플리케이션은 V1 및 V2로 암호화된 객체(그렇게 구성된 경우)를 모두 해독할 수 있지만 객체는 V2 호환 형식으로만 암호화합니다.

새 암호화 형식을 읽도록 기존 클라이언트를 업데이트한 후 애플리케이션을 V2 암호화 및 복호화 클라이언트로 안전하게 업데이트를 진행할 수 있습니다. V2 클라이언트를 사용하려면 각 애플리케이션에서 다음 단계를 수행하세요.

1. `EncryptionMaterials`를 `EncryptionMaterialsV2`로 변경합니다.

   1. KMS를 사용하는 경우:

      1. KMS 키 ID를 제공합니다.

      1. 사용 중인 암호화 방법, 즉, `KmsType.KmsContext`를 선언합니다.

      1. 이 데이터 키와 연결할 암호화 컨텍스트를 KMS에 제공합니다. 빈 딕셔너리를 보낼 수 있지만(Amazon 암호화 컨텍스트는 계속 병합됨) 추가 컨텍스트를 제공하는 것이 좋습니다.

   1. 사용자 제공 키 랩 방법(대칭 또는 비대칭 암호화)을 사용하는 경우:

      1. 암호화 자료가 포함된 `AES` 또는 `RSA` 인스턴스를 제공합니다.

      1. 사용할 암호화 알고리즘, 즉, `SymmetricAlgorithmType.AesGcm` 또는 `AsymmetricAlgorithmType.RsaOaepSha1`를 선언합니다.

1. `SecurityProfile` 속성을 `SecurityProfile.V2AndLegacy`로 설정하여 `AmazonS3CryptoConfiguration`을 `AmazonS3CryptoConfigurationV2`로 변경합니다.

1. `AmazonS3EncryptionClient`를 `AmazonS3EncryptionClientV2`로 변경합니다. 이 클라이언트는 이전 단계에서 새로 변환된 `AmazonS3CryptoConfigurationV2` 및 `EncryptionMaterialsV2` 객체를 가져옵니다.

### 예: KMS에서 KMS\$1컨텍스트로
<a name="s3-encryption-migration-v1-v2-ex-kms"></a>

**사전 마이그레이션**

```
using System.Security.Cryptography;
using Amazon.S3.Encryption;

var encryptionMaterial = new EncryptionMaterials("1234abcd-12ab-34cd-56ef-1234567890ab");
var configuration = new AmazonS3CryptoConfiguration()
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClient(configuration, encryptionMaterial);
```

**마이그레이션 후**

```
using System.Security.Cryptography;
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;

var encryptionContext = new Dictionary<string, string>();
var encryptionMaterial = new EncryptionMaterialsV2("1234abcd-12ab-34cd-56ef-1234567890ab", KmsType.KmsContext, encryptionContext);
var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy)
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial);
```

### 예: 대칭 알고리즘(AES-CBC에서 AES-GCM 키 랩으로)
<a name="s3-encryption-migration-v1-v2-ex-aes"></a>

`StorageMode`는 `ObjectMetadata` 또는 `InstructionFile`일 수 있습니다.

**사전 마이그레이션**

```
using System.Security.Cryptography;
using Amazon.S3.Encryption;

var symmetricAlgorithm = Aes.Create();
var encryptionMaterial = new EncryptionMaterials(symmetricAlgorithm);
var configuration = new AmazonS3CryptoConfiguration()
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClient(configuration, encryptionMaterial);
```

**마이그레이션 후**

```
using System.Security.Cryptography;
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;

var symmetricAlgorithm = Aes.Create();
var encryptionMaterial = new EncryptionMaterialsV2(symmetricAlgorithm, SymmetricAlgorithmType.AesGcm);
var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy)
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial);
```

**참고**  
AES-GCM으로 해독할 때는 해독된 데이터를 사용하기 전에 전체 객체를 끝까지 읽습니다. 이는 암호화되었던 객체이므로 객체가 수정되지 않았는지 확인하기 위함입니다.

### 예: 비대칭 알고리즘(RSA에서 RSA-OAEP-SHA1 키 랩으로)
<a name="s3-encryption-migration-v1-v2-ex-rsa"></a>

`StorageMode`는 `ObjectMetadata` 또는 `InstructionFile`일 수 있습니다.

**사전 마이그레이션**

```
using System.Security.Cryptography;
using Amazon.S3.Encryption;

var asymmetricAlgorithm = RSA.Create();
var encryptionMaterial = new EncryptionMaterials(asymmetricAlgorithm);
var configuration = new AmazonS3CryptoConfiguration()
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClient(configuration, encryptionMaterial);
```

**마이그레이션 후**

```
using System.Security.Cryptography;
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;

var asymmetricAlgorithm = RSA.Create();
var encryptionMaterial = new EncryptionMaterialsV2(asymmetricAlgorithm, AsymmetricAlgorithmType.RsaOaepSha1);
var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy)
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial);
```

## V1 형식을 더 이상 읽지 않도록 V2 클라이언트 업데이트
<a name="s3-encryption-migration-v1-v2-v2-cleanup"></a>

결국에는 모든 객체가 V2 클라이언트를 사용하여 암호화되거나 다시 암호화됩니다. *변환이 완료되면* 다음 코드 조각에 표시된 것처럼 `SecurityProfile` 속성을 `SecurityProfile.V2`로 설정하여 V2 클라이언트에서 V1 호환성을 비활성화할 수 있습니다.

```
//var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy);
var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2);
```

# Amazon S3 암호화 클라이언트 마이그레이션(V2에서 V4로)
<a name="s3-encryption-migration-v2-v4"></a>

**참고**  
V1을 사용하고 V4로 마이그레이션하려면 먼저 V2로 마이그레이션해야 합니다. [Amazon S3 암호화 클라이언트 마이그레이션(V1에서 V2로)](s3-encryption-migration-v1-v2.md)을(를) 참조하세요.

이 주제에서는 Amazon Simple Storage Service(Amazon S3) 암호화 클라이언트 버전 2(V2)에서 버전 4(V4)로 애플리케이션을 마이그레이션하고 마이그레이션 프로세스 전반에 걸쳐 애플리케이션 가용성을 보장하는 방법을 보여줍니다. V4는 콘텐츠 암호화를 위한 키 커밋과 함께 AES-GCM을 사용하고 키 대체 공격에 대한 보안을 강화하기 위한 커밋 정책을 도입합니다.

V4 클라이언트는 [Amazon.Extensions.S3.Encryption](https://www.nuget.org/packages/Amazon.Extensions.S3.Encryption) NuGet 패키지에서 사용할 수 있습니다.

**중요**  
**주요 변경 사항:** `REQUIRE_ENCRYPT_REQUIRE_DECRYPT` 정책으로 구성된 V4 클라이언트는 V1 또는 V2 클라이언트로 암호화된 객체를 해독할 수 없습니다. 최신 V2 클라이언트만 키 커밋으로 V4-encrypted 복호화할 수 있습니다. `REQUIRE_ENCRYPT_REQUIRE_DECRYPT` 정책으로 이동하기 전에 키 커밋이 활성화된 V4 클라이언트를 사용하여 기존 데이터를 모두 다시 암호화해야 합니다.

## V4 개념 이해
<a name="s3-encryption-migration-v2-v4-concepts"></a>

V4는 콘텐츠 암호화를 위한 키 커밋과 함께 AES-GCM을 사용하며 암호화된 데이터의 보호를 강화하는 주요 보안 개념을 도입합니다.

### 약정 정책
<a name="s3-encryption-migration-v2-v4-concepts-policy"></a>

커밋 정책은 암호화 및 복호화 작업 중에 암호화 클라이언트가 키 커밋을 처리하는 방법을 제어합니다. V4는 세 가지 커밋 정책을 지원합니다.

`FORBID_ENCRYPT_ALLOW_DECRYPT`  
*암호화:* 커밋 없음  
*복호화:* 커밋되지 않는 객체 허용  
*보안:* 약정을 적용하지 않으며 변조를 허용할 수 있음  
*호환성:* 모든 V2 및 V4 구현은이 정책으로 암호화된 객체를 읽을 수 있습니다.

`REQUIRE_ENCRYPT_ALLOW_DECRYPT`  
*암호화:* 키 커밋 사용  
*복호화:* 커밋하는 객체와 커밋하지 않는 객체 모두 허용  
*보안:* 새 객체가 키 대체 공격으로부터 보호되고 이전 객체는 여전히 읽을 수 있음  
*호환성:* V4만이 정책을 지원합니다.

`REQUIRE_ENCRYPT_REQUIRE_DECRYPT`(V4의 기본값)  
*암호화:* 키 커밋 사용  
*복호화:* 객체만 커밋  
*보안:* 최대 보안을 위한 전체 약정 적용  
*호환성:* V4만이 정책을 지원합니다.

### 키 커밋이 있는 AES GCM
<a name="s3-encryption-migration-v2-v4-concepts-aesgcm"></a>

V4는 향상된 보안을 제공하는 콘텐츠 암호화에 대한 키 커밋과 함께 AES-GCM을 사용합니다.
+ *변조 방지:* 암호화된 데이터에 키를 암호화 방식으로 바인딩하여 키 대체 공격으로부터 보호합니다.
+ *버전 호환성:* 키 커밋으로 암호화된 객체는 V4 클라이언트 및 최신 버전에서만 복호화할 수 있습니다.

**주의**  
프로덕션 환경에서 키 커밋 암호화를 활성화하기 전에 V2 클라이언트가 더 이상 사용되지 않으므로 객체를 복호화해야 하는 모든 애플리케이션이 V4 이상으로 업그레이드되었는지 확인합니다.

## V4 형식을 읽도록 기존 클라이언트 업데이트
<a name="s3-encryption-migration-v2-v4-update-clients"></a>

V4 암호화 클라이언트는 이전 버전의 클라이언트가 지원하지 않는 암호화 알고리즘을 사용합니다. 마이그레이션의 첫 번째 단계는 새 V4 형식을 읽을 수 있도록 V2 클라이언트를 업데이트하는 것입니다. V4 

### NuGet 패키지 종속성 업데이트
<a name="s3-encryption-migration-v2-v4-update-nuget"></a>

V4 지원이 포함된 [Amazon.Extensions.S3.Encryption](https://www.nuget.org/packages/Amazon.Extensions.S3.Encryption) NuGet 패키지의 최신 버전을 사용하도록 애플리케이션을 업데이트합니다. 각 애플리케이션에서 다음 단계를 수행합니다.

1. 최신 [Amazon.Extensions.S3.Encryption](https://www.nuget.org/packages/Amazon.Extensions.S3.Encryption) 패키지로 업데이트합니다. 프로젝트가 **AWSSDK.S3** 또는 **AWSSDK.KeyManagementService** 패키지에 직접 의존하는 경우 이러한 종속성을 업데이트하거나 제거하여 업데이트된 버전을 이 새 패키지와 함께 가져오도록 해야 합니다.

1. `using` 문이 올바른 네임스페이스를 참조하는지 확인합니다.

   ```
   using Amazon.Extensions.S3.Encryption;
   using Amazon.Extensions.S3.Encryption.Primitives;
   ```

1. 애플리케이션을 다시 빌드하고 다시 배포합니다.

기존 V2 클라이언트는 업데이트된 패키지로 계속 작동하며 V4 클라이언트로 암호화된 객체를 해독할 수 있습니다(사용된 커밋 정책에 따라 다름).

### 애플리케이션 빌드 및 배포
<a name="s3-encryption-migration-v2-v4-build-deploy"></a>

NuGet 패키지 종속성을 업데이트한 후:

1. 애플리케이션을 구축하여 모든 종속성이 올바르게 해결되도록 합니다.

1. 개발 환경에서 애플리케이션을 테스트하여 기존 기능이 계속 작동하는지 확인합니다.

1. 업데이트된 애플리케이션을 프로덕션 환경에 배포합니다.

이 업데이트를 통해 기존 V2 클라이언트는 V4 클라이언트가 암호화할 객체를 복호화하여 마이그레이션 프로세스 중에 호환성을 보장할 수 있습니다.

## V4 클라이언트로 마이그레이션
<a name="s3-encryption-migration-v2-v4-migrate"></a>

기존 클라이언트를 업데이트하여 새 암호화 형식을 읽은 후 V4 암호화 및 복호화 클라이언트를 사용하도록 애플리케이션을 안전하게 업데이트할 수 있습니다. V4 클라이언트는 기존의 암호화된 객체와의 호환성을 유지하면서 키 커밋을 통해 향상된 보안을 제공합니다.

### 4-Step 마이그레이션 프로세스
<a name="s3-encryption-migration-v2-v4-migrate-steps"></a>

V2에서 V4로의 마이그레이션은 호환성과 보안을 보장하기 위해 구조화된 4단계 프로세스를 따릅니다. 각 단계는 다음 단계로 진행하기 전에 모든 애플리케이션에 배포해야 하는 특정 구성을 나타냅니다.

1. **0단계: V2 클라이언트(시작점)** - 기존 V2 구현

1. **1단계: V4 있는 V4 V2 ** V2-compatible 암호화 동작을 유지하면서 V4 클라이언트로 마이그레이션

1. **2단계: 키 커밋 쓰기가 포함된 V4 ** - 레거시 객체의 복호화를 허용하면서 키 커밋으로 암호화 시작

1. **3단계: 전체 적용이 포함된 V4 ** - 암호화 및 복호화 모두에 키 커밋 필요

### 0단계: V2 클라이언트(시작점)
<a name="s3-encryption-migration-v2-v4-step0"></a>

이는 기존 V2 클라이언트 구성을 나타냅니다. 이 단계에서는 마이그레이션 전 시작 상태를 보여줍니다.

```
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;
using Amazon.S3.Model;

// Step 0: V2 Client - Starting configuration
var encryptionContext = new Dictionary<string, string>();
var encryptionMaterial = new EncryptionMaterialsV2(kmsKeyId, KmsType.KmsContext, encryptionContext);

#pragma warning disable 0618
var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2);
#pragma warning enable 0618

var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial);

// Use the client for PutObject and GetObject operations
await encryptionClient.PutObjectAsync(new PutObjectRequest
{
    BucketName = bucket,
    Key = objectKey,
    ContentBody = content
});
```

### 1단계: V2 호환성이 있는 V4 V2
<a name="s3-encryption-migration-v2-v4-step1"></a>

V2와 동일한 동작을 유지하면서 V4 클라이언트로 마이그레이션합니다. V2 이 단계에서는 `FORBID_ENCRYPT_ALLOW_DECRYPT` 정책을 사용하여 커밋 없이 암호화하고 모든 객체의 복호화를 허용합니다.

```
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;
using Amazon.S3.Model;

// Step 1: V4 Client with V2 compatibility
var encryptionContext = new Dictionary<string, string>();
var encryptionMaterial = new EncryptionMaterialsV4(kmsKeyId, KmsType.KmsContext, encryptionContext);

var configuration = new AmazonS3CryptoConfigurationV4(
    SecurityProfile.V4, 
    CommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPT, 
    ContentEncryptionAlgorithm.AesGcm);

var encryptionClient = new AmazonS3EncryptionClientV4(configuration, encryptionMaterial);

// Use the client for PutObject and GetObject operations
await encryptionClient.PutObjectAsync(new PutObjectRequest
{
    BucketName = bucket,
    Key = objectKey,
    ContentBody = content
});
```

**동작:** 커밋 없는 암호화는 커밋 객체와 커밋되지 않은 객체를 모두 복호화할 수 있습니다. V2 동작과 동일합니다.

### 2단계: 키 커밋 쓰기가 포함된 V4
<a name="s3-encryption-migration-v2-v4-step2"></a>

복호화를 위한 이전 버전과의 호환성을 유지하면서 키 커밋으로 암호화를 시작합니다. 이 단계에서는 `REQUIRE_ENCRYPT_ALLOW_DECRYPT` 정책을 사용합니다.

**주의**  
2단계를 배포하기 전에 키 커밋 암호화를 처리하기 위해 모든 리더가 1단계 이상으로 업데이트되었는지 확인합니다.

```
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;
using Amazon.S3.Model;

// Step 2: V4 Client with key commitment writes
var encryptionContext = new Dictionary<string, string>();
var encryptionMaterial = new EncryptionMaterialsV4(kmsKeyId, KmsType.KmsContext, encryptionContext);

var configuration = new AmazonS3CryptoConfigurationV4(
    SecurityProfile.V4, 
    CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT, 
    ContentEncryptionAlgorithm.AesGcmWithCommitment);

var encryptionClient = new AmazonS3EncryptionClientV4(configuration, encryptionMaterial);

// Use the client for PutObject and GetObject operations
await encryptionClient.PutObjectAsync(new PutObjectRequest
{
    BucketName = bucket,
    Key = objectKey,
    ContentBody = content
});
```

**동작:** 커밋을 사용하여 암호화하며 커밋 객체와 커밋하지 않는 객체를 모두 복호화할 수 있습니다. 새 객체는 키 대체 공격으로부터 보호됩니다.

### 3단계: 전체 적용이 포함된 V4
<a name="s3-encryption-migration-v2-v4-step3"></a>

암호화와 복호화 모두에 키 커밋이 필요합니다. 이 단계에서는 `REQUIRE_ENCRYPT_REQUIRE_DECRYPT` 정책을 사용하여 보안을 극대화합니다.

**주의**  
3단계를 배포하기 전에 시스템의 모든 객체가 키 커밋으로 다시 암호화되었는지 확인합니다(2단계). 이 단계는 커밋 없이 암호화된 객체를 복호화하지 못합니다.

```
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;
using Amazon.S3.Model;

// Step 3: V4 Client with full key commitment enforcement
var encryptionContext = new Dictionary<string, string>();
var encryptionMaterial = new EncryptionMaterialsV4(kmsKeyId, KmsType.KmsContext, encryptionContext);

var configuration = new AmazonS3CryptoConfigurationV4(
    SecurityProfile.V4, 
    CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT, 
    ContentEncryptionAlgorithm.AesGcmWithCommitment);

var encryptionClient = new AmazonS3EncryptionClientV4(configuration, encryptionMaterial);

// Use the client for PutObject and GetObject operations
await encryptionClient.PutObjectAsync(new PutObjectRequest
{
    BucketName = bucket,
    Key = objectKey,
    ContentBody = content
});
```

**동작:** 커밋으로 암호화하고 커밋으로 암호화된 객체만 복호화합니다. 키 대체 공격에 대한 최대 보안.

## 추가 구성 예제
<a name="s3-encryption-migration-v2-v4-examples"></a>

이 섹션에서는 마이그레이션 중에 다양한 옵션으로 V4 클라이언트를 구성하는 추가 예제를 제공합니다.

### 레거시 지원 활성화
<a name="s3-encryption-migration-v2-v4-examples-legacy"></a>

V4 클라이언트가 V1 및 V2 클라이언트로 암호화된 객체를 읽을 수 있도록 하려면 레거시 복호화를 허용하는 커밋 정책으로 클라이언트를 구성합니다.

```
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;

// Configure V4 client to read V1/V2 objects
var configuration = new AmazonS3CryptoConfigurationV4(CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT)
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};

// This configuration allows:
// - Encryption: With commitment (secure)
// - Decryption: Both V2 (non-committing) and V4 (committing) objects
```

이전 클라이언트가 암호화한 객체를 복호화해야 하는 경우 마이그레이션 중에이 구성을 사용하고 새 객체를 향상된 보안으로 암호화합니다.

### 스토리지 방법 구성
<a name="s3-encryption-migration-v2-v4-examples-storage"></a>

V4는 암호화 메타데이터에 대해 두 가지 스토리지 방법을 지원합니다. 사용 사례에 가장 적합한 방법을 선택합니다.

**객체 메타데이터(기본값)**

```
var configuration = new AmazonS3CryptoConfigurationV4(CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT)
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
// Encryption metadata is stored in S3 object metadata
```

**지침 파일**

```
var configuration = new AmazonS3CryptoConfigurationV4(CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT)
{
    StorageMode = CryptoStorageMode.InstructionFile
};
// Encryption metadata is stored in a separate S3 object (instruction file)
```

다른 목적으로 객체 메타데이터를 보존`InstructionFile`해야 하거나 메타데이터 크기 제한이 있는 객체로 작업할 때 사용합니다.

### 커밋 정책 구성
<a name="s3-encryption-migration-v2-v4-examples-policy"></a>

보안 요구 사항 및 마이그레이션 단계에 따라 적절한 약정 정책을 선택합니다.

**마이그레이션 단계(V2 호환성)**

```
// For migration: encrypt without commitment, allow all decryption
var migrationConfig = new AmazonS3CryptoConfigurationV4(CommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPT);
```

**전환 단계(권장)**

```
// For transition: encrypt with commitment, allow legacy decryption
var transitionConfig = new AmazonS3CryptoConfigurationV4(CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT);
```

**전체 보안 단계**

```
// For maximum security: require commitment for both encryption and decryption
var secureConfig = new AmazonS3CryptoConfigurationV4(CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT);
```

초기 마이그레이션 `FORBID_ENCRYPT_ALLOW_DECRYPT` 중에 로 시작하고 전환 단계를 `REQUIRE_ENCRYPT_ALLOW_DECRYPT` 위해 로 이동한 다음, 마지막으로 모든 클라이언트가 업그레이드되고 모든 객체가 커밋으로 다시 암호화되었을 `REQUIRE_ENCRYPT_REQUIRE_DECRYPT` 때를 사용합니다.