

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

# Amazon VPC Lattice의 보안
<a name="security"></a>

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

사용자는 이 인프라에 호스팅되는 콘텐츠에 대한 통제 권한을 유지할 책임이 있습니다. [공동 책임 모델](https://aws.amazon.com/compliance/shared-responsibility-model/)은 이 사항을 클라우드*의* 보안 및 클라우드 *내* 보안으로 설명합니다.
+ **클라우드 보안 **- AWS 는에서 AWS 서비스를 실행하는 인프라를 보호할 책임이 있습니다 AWS 클라우드. AWS 또한는 안전하게 사용할 수 있는 서비스를 제공합니다. 타사 감사자는 [AWS 규정 준수 프로그램](https://aws.amazon.com/compliance/programs/) 일환으로 보안의 효과를 정기적으로 테스트하고 확인합니다. Amazon VPC Lattice에 적용되는 규정 준수 프로그램에 대한 자세한 내용은 규정 준수 프로그램 [AWS 제공 범위 내 서비스규정 준수 프로그램](https://aws.amazon.com/compliance/services-in-scope/) .
+ **클라우드의 보안** – 이 인프라에서 호스팅되는 콘텐츠에 대한 제어를 유지하는 것은 사용자의 책임입니다. 또한 사용자는 데이터의 민감도, 회사 요구 사항, 관련 법률 및 규정을 비롯한 기타 요소에 대해서도 책임이 있습니다.

이 설명서는 VPC Lattice 사용 시 책임 분담 모델을 적용하는 방법을 이해하는 데 도움이 됩니다. 다음 항목에서는 보안 및 규정 준수 목표를 충족하도록 VPC Lattice를 구성하는 방법을 보여줍니다. 또한 VPC Lattice AWS 서비스, 서비스 네트워크 및 리소스 구성을 모니터링하고 보호하는 데 도움이 되는 다른 서비스를 사용하는 방법을 알아봅니다.

**Topics**
+ [VPC Lattice 서비스에 대한 액세스 관리](access-management-overview.md)
+ [Amazon VPC Lattice의 데이터 보호](data-protection.md)
+ [Amazon VPC Lattice용 Identity and Access Management](security-iam.md)
+ [Amazon VPC Lattice의 규정 준수 검증](compliance-validation.md)
+ [인터페이스 엔드포인트를 사용하여 Amazon VPC Lattice에 액세스(AWS PrivateLink)](vpc-interface-endpoints.md)
+ [Amazon VPC Lattice의 복원성](disaster-recovery-resiliency.md)
+ [Amazon VPC Lattice의 인프라 보안](infrastructure-security.md)

# VPC Lattice 서비스에 대한 액세스 관리
<a name="access-management-overview"></a>

VPC Lattice는 기본적으로 안전합니다. 액세스 권한을 제공할 서비스 및 리소스 구성과 VPCs에 대한 액세스를 명시적으로 지정해야 하기 때문입니다. VPC 연결 또는 서비스 네트워크 유형의 VPC 엔드포인트를 통해 서비스에 액세스할 수 있습니다. 다중 계정 시나리오의 경우 [AWS Resource Access Manager](sharing.md)를 사용하여 계정 경계에서 서비스, 리소스 구성 및 서비스 네트워크를 공유할 수 있습니다.

 VPC Lattice는 네트워크의 여러 계층에서 defense-in-depth 전략을 구현할 수 있는 프레임워크를 제공합니다.
+ **첫 번째 계층** - 서비스 네트워크와의 서비스, 리소스, VPC 및 VPC 엔드포인트 연결입니다. VPC는 연결을 통해 또는 VPC 엔드포인트를 통해 서비스 네트워크에 연결될 수 있습니다. VPC가 서비스 네트워크에 연결되지 않은 경우 VPC의 클라이언트는 서비스 네트워크와 연결된 서비스 및 리소스 구성에 액세스할 수 없습니다.
+ **두 번째 계층** – 서비스 네트워크를 위한 선택적인 네트워크 수준 보안 보호(예: 보안 그룹 및 네트워크 ACL). 이를 사용하면 VPC의 모든 클라이언트 대신 VPC의 특정 클라이언트 그룹에 대한 액세스를 허용할 수 있습니다.
+ **세 번째 계층** – 선택적인 VPC Lattice 인증 정책. 인증 정책을 서비스 네트워크 및 개별 서비스에 적용할 수 있습니다. 일반적으로 서비스 네트워크의 인증 정책은 네트워크 또는 클라우드 관리자가 운영하며 세분화되지 않은 인증을 구현합니다. AWS Organizations에 있는 특정 조직의 인증된 요청만 허용하는 경우를 예로 들 수 있습니다. 서비스 수준의 인증 정책의 경우 일반적으로 서비스 소유자가 세분화된 제어를 설정하는데, 이는 서비스 네트워크 수준에서 적용되는 세분화되지 않은 권한 부여보다 더 제한적일 수 있습니다.
**참고**  
서비스 네트워크의 인증 정책은 서비스 네트워크의 리소스 구성에는 적용되지 않습니다.

**액세스 제어 방법**
+ [인증 정책](auth-policies.md)
+ [보안 그룹](security-groups.md)
+ [네트워크 ACL](network-acls.md)

# 인증 정책을 사용하여 VPC Lattice 서비스에 대한 액세스 제어
<a name="auth-policies"></a>

VPC Lattice 인증 정책은 서비스 네트워크 또는 서비스에 연결하여 지정된 보안 주체가 서비스 그룹 또는 특정 서비스에 액세스할 수 있는지 여부를 제어하는 IAM 정책 문서입니다. 액세스를 제어하려는 각 서비스 네트워크 또는 서비스에 하나의 인증 정책을 연결할 수 있습니다.

**참고**  
서비스 네트워크의 인증 정책은 서비스 네트워크의 리소스 구성에는 적용되지 않습니다.

인증 정책은 IAM 자격 증명 기반 정책과 다릅니다. IAM 자격 증명 기반 정책은 IAM 엔터티(사용자, 그룹 또는 역할)에 연결되어 이들 엔터티가 어떤 리소스에 대해 어떤 조치를 취할 수 있는지 정의합니다. 인증 정책은 서비스 및 서비스 네트워크에 연결됩니다. 승인이 성공하려면 인증 정책과 ID 기반 정책 모두에 명시적 허용 문이 있어야 합니다. 자세한 내용은 [권한 부여의 작동 방식](#auth-policies-evaluation-logic) 단원을 참조하십시오.

 AWS CLI 및 콘솔을 사용하여 서비스 및 서비스 네트워크에 대한 인증 정책을 확인, 추가, 업데이트 또는 제거할 수 있습니다. 인증 정책을 추가, 업데이트 또는 제거할 때 준비하는 데 몇 분 정도 걸릴 수 있습니다. 를 사용할 때 올바른 리전에 있는지 AWS CLI확인합니다. 프로필의 기본 리전을 변경하거나 명령과 함께 `--region` 파라미터를 사용할 수 있습니다.

**Topics**
+ [인증 정책의 공통 요소](#auth-policies-common-elements)
+ [인증 정책의 리소스 형식](#auth-policies-resource-format)
+ [인증 정책에 사용할 수 있는 조건 키](#auth-policies-condition-keys)
+ [리소스 태그](#resource-tags)
+ [보안 주체 태그](#principal-tags)
+ [익명의(인증되지 않은) 보안 주체](#anonymous-unauthenticated-principals)
+ [인증 정책 예시](#example-auth-policies)
+ [권한 부여의 작동 방식](#auth-policies-evaluation-logic)

인증 정책을 시작하려면 절차에 따라 서비스 네트워크에 적용되는 인증 정책을 만드세요. 다른 서비스에 적용하지 않으려는 보다 제한적인 권한을 원하는 경우 개별 서비스에 인증 정책을 설정할 수 있습니다.

## 인증 정책으로 서비스 네트워크에 대한 액세스 관리
<a name="manage-access-to-service-networks"></a>

다음 AWS CLI 작업은 인증 정책을 사용하여 서비스 네트워크에 대한 액세스를 관리하는 방법을 보여줍니다. 콘솔 사용 지침은 [VPC Lattice의 서비스 네트워크](service-networks.md) 섹션을 참조하세요.

**Topics**
+ [서비스 네트워크에 인증 정책 추가](#add-service-network-auth-policy)
+ [서비스 네트워크의 인증 유형 변경](#change-service-network-auth-type)
+ [서비스 네트워크에서 인증 정책 제거](#remove-service-network-auth-policy)

### 서비스 네트워크에 인증 정책 추가
<a name="add-service-network-auth-policy"></a>

이 섹션의 단계에 따라를 사용하여 다음을 AWS CLI 수행합니다.
+ IAM을 사용하여 서비스 네트워크에 대한 액세스 제어를 활성화합니다.
+ 서비스 네트워크에 인증 정책을 추가합니다. 인증 정책을 추가하지 않으면 모든 트래픽에 액세스 거부 오류가 발생합니다.

**액세스 제어를 활성화하고 새 서비스 네트워크에 인증 정책을 추가하는 방법**

1. 인증 정책을 사용할 수 있도록 서비스 네트워크에 대한 액세스 제어를 활성화하려면 `--auth-type` 옵션과 값이 `AWS_IAM`인 **create-service-network** 명령을 사용합니다.

   ```
   aws vpc-lattice create-service-network --name Name --auth-type AWS_IAM [--tags TagSpecification]
   ```

   이 작업이 성공하면 다음과 비슷한 출력이 반환됩니다.

   ```
   {
      "arn": "arn",
      "authType": "AWS_IAM",
      "id": "sn-0123456789abcdef0",
      "name": "Name"
   }
   ```

1. **put-auth-policy** 명령을 사용하여 인증 정책을 추가할 서비스 네트워크의 ID와 추가할 인증 정책을 지정합니다.

   예를 들어, 다음 명령을 사용하여 ID가 *`sn-0123456789abcdef0`*인 서비스 네트워크에 대한 인증 정책을 생성합니다.

   ```
   aws vpc-lattice put-auth-policy --resource-identifier sn-0123456789abcdef0 --policy file://policy.json
   ```

   JSON을 사용하여 정책 정의를 생성합니다. 자세한 내용은 [인증 정책의 공통 요소](#auth-policies-common-elements) 단원을 참조하십시오.

   이 작업이 성공하면 다음과 비슷한 출력이 반환됩니다.

   ```
   {
      "policy": "policy",
      "state": "Active"
   }
   ```

**액세스 제어를 활성화하고 기존 서비스 네트워크에 인증 정책을 추가하는 방법**

1. 인증 정책을 사용할 수 있도록 서비스 네트워크에 대한 액세스 제어를 활성화하려면 `--auth-type` 옵션과 값이 `AWS_IAM`인 **update-service-network** 명령을 사용합니다.

   ```
   aws vpc-lattice update-service-network --service-network-identifier sn-0123456789abcdef0 --auth-type AWS_IAM
   ```

   이 작업이 성공하면 다음과 비슷한 출력이 반환됩니다.

   ```
   {
      "arn": "arn",
      "authType": "AWS_IAM",
      "id": "sn-0123456789abcdef0",
      "name": "Name"
   }
   ```

1. **put-auth-policy** 명령을 사용하여 인증 정책을 추가할 서비스 네트워크의 ID와 추가할 인증 정책을 지정합니다.

   ```
   aws vpc-lattice put-auth-policy --resource-identifier sn-0123456789abcdef0 --policy file://policy.json
   ```

   JSON을 사용하여 정책 정의를 생성합니다. 자세한 내용은 [인증 정책의 공통 요소](#auth-policies-common-elements) 단원을 참조하십시오.

   이 작업이 성공하면 다음과 비슷한 출력이 반환됩니다.

   ```
   {
      "policy": "policy",
      "state": "Active"
   }
   ```

### 서비스 네트워크의 인증 유형 변경
<a name="change-service-network-auth-type"></a>

**서비스 네트워크에 대한 인증 정책을 비활성화하는 방법**  
`--auth-type` 옵션과 값이 `NONE`인 **update-service-network** 명령을 사용합니다.

```
aws vpc-lattice update-service-network --service-network-identifier sn-0123456789abcdef0 --auth-type NONE
```

나중에 인증 정책을 다시 활성화해야 하는 경우 `--auth-type` 옵션에 `AWS_IAM`이 지정된 상태로 이 명령을 실행하세요.

### 서비스 네트워크에서 인증 정책 제거
<a name="remove-service-network-auth-policy"></a>

**서비스 네트워크에서 인증 정책을 제거하는 방법**  
**delete-auth-policy** 명령을 사용합니다.

```
aws vpc-lattice delete-auth-policy --resource-identifier sn-0123456789abcdef0
```

서비스 네트워크의 인증 유형을 `NONE`으로 변경하기 전에 인증 정책을 제거하면 요청이 실패합니다.

## 인증 정책으로 서비스에 대한 액세스 관리
<a name="manage-access-to-services"></a>

다음 AWS CLI 작업은 인증 정책을 사용하여 서비스에 대한 액세스를 관리하는 방법을 보여줍니다. 콘솔 사용 지침은 [VPC Lattice 내 서비스](services.md) 섹션을 참조하세요.

**Topics**
+ [서비스에 인증 정책 추가](#add-service-auth-policy)
+ [서비스의 인증 유형 변경](#change-service-auth-type)
+ [서비스에서 인증 정책 제거](#remove-service-auth-policy)

### 서비스에 인증 정책 추가
<a name="add-service-auth-policy"></a>

다음 단계에 따라를 사용하여 다음을 AWS CLI 수행합니다.
+ IAM을 사용하여 서비스에 대한 액세스 제어를 활성화합니다.
+ 서비스에 인증 정책을 추가합니다. 인증 정책을 추가하지 않으면 모든 트래픽에 액세스 거부 오류가 발생합니다.

**액세스 제어를 활성화하고 새 서비스에 인증 정책을 추가하는 방법**

1. 인증 정책을 사용할 수 있도록 서비스에 대한 액세스 제어를 활성화하려면 `--auth-type` 옵션과 값이 `AWS_IAM`인 **create-service** 명령을 사용합니다.

   ```
   aws vpc-lattice create-service --name Name --auth-type AWS_IAM [--tags TagSpecification]
   ```

   이 작업이 성공하면 다음과 비슷한 출력이 반환됩니다.

   ```
   {
      "arn": "arn",
      "authType": "AWS_IAM",
      "dnsEntry": { 
         ...
      },
      "id": "svc-0123456789abcdef0",
      "name": "Name",
      "status": "CREATE_IN_PROGRESS"
   }
   ```

1. **put-auth-policy** 명령을 사용하여 인증 정책을 추가할 서비스의 ID와 추가할 인증 정책을 지정합니다.

   예를 들어, 다음 명령을 사용하여 ID가 *svc-0123456789abcdef0*인 서비스에 대한 인증 정책을 생성합니다.

   ```
   aws vpc-lattice put-auth-policy --resource-identifier svc-0123456789abcdef0 --policy file://policy.json
   ```

   JSON을 사용하여 정책 정의를 생성합니다. 자세한 내용은 [인증 정책의 공통 요소](#auth-policies-common-elements) 단원을 참조하십시오.

   이 작업이 성공하면 다음과 비슷한 출력이 반환됩니다.

   ```
   {
      "policy": "policy",
      "state": "Active"
   }
   ```

**액세스 제어를 활성화하고 기존 서비스에 인증 정책을 추가하는 방법**

1. 인증 정책을 사용할 수 있도록 서비스에 대한 액세스 제어를 활성화하려면 `--auth-type` 옵션과 값이 `AWS_IAM`인 **update-service** 명령을 사용합니다.

   ```
   aws vpc-lattice update-service --service-identifier svc-0123456789abcdef0 --auth-type AWS_IAM
   ```

   이 작업이 성공하면 다음과 비슷한 출력이 반환됩니다.

   ```
   {
      "arn": "arn",
      "authType": "AWS_IAM",
      "id": "svc-0123456789abcdef0",
      "name": "Name"
   }
   ```

1. **put-auth-policy** 명령을 사용하여 인증 정책을 추가할 서비스의 ID와 추가할 인증 정책을 지정합니다.

   ```
   aws vpc-lattice put-auth-policy --resource-identifier svc-0123456789abcdef0 --policy file://policy.json
   ```

   JSON을 사용하여 정책 정의를 생성합니다. 자세한 내용은 [인증 정책의 공통 요소](#auth-policies-common-elements) 단원을 참조하십시오.

   이 작업이 성공하면 다음과 비슷한 출력이 반환됩니다.

   ```
   {
      "policy": "policy",
      "state": "Active"
   }
   ```

### 서비스의 인증 유형 변경
<a name="change-service-auth-type"></a>

**서비스에 대한 인증 정책을 비활성화하는 방법**  
`--auth-type` 옵션과 값이 `NONE`인 **update-service** 명령을 사용합니다.

```
aws vpc-lattice update-service --service-identifier svc-0123456789abcdef0 --auth-type NONE
```

나중에 인증 정책을 다시 활성화해야 하는 경우 `--auth-type` 옵션에 `AWS_IAM`이 지정된 상태로 이 명령을 실행하세요.

### 서비스에서 인증 정책 제거
<a name="remove-service-auth-policy"></a>

**서비스에서 인증 정책을 제거하는 방법**  
**delete-auth-policy** 명령을 사용합니다.

```
aws vpc-lattice delete-auth-policy --resource-identifier svc-0123456789abcdef0
```

서비스의 인증 유형을 `NONE`으로 변경하기 전에 인증 정책을 제거하면 요청이 실패합니다.

서비스에 대한 인증된 요청을 요구하는 인증 정책을 활성화하는 경우 해당 서비스에 대한 모든 요청에는 Signature Version 4(SigV4)를 사용하여 계산된 유효한 요청 서명이 포함되어야 합니다. 자세한 내용은 [Amazon VPC Lattice에 대한 SIGv4 인증 요청](sigv4-authenticated-requests.md) 단원을 참조하십시오.

## 인증 정책의 공통 요소
<a name="auth-policies-common-elements"></a>

IAM 정책과 동일한 구문을 사용하여 VPC Lattice 인증 정책이 지정됩니다. 자세한 내용은 *IAM 사용 설명서*의 [자격 증명 기반 정책 및 리소스 기반 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html)을 참조하세요.

인증 정책에는 다음 요소가 포함됩니다.
+ **보안 주체** - 문에서의 작업 및 리소스에 액세스할 수 있는 사람 또는 애플리케이션입니다. 인증 정책에서 보안 주체는 이 권한의 수신자인 IAM 엔터티입니다. 보안 주체는 IAM 엔티티로 인증되어 서비스 네트워크의 서비스 경우와 같이 특정 리소스 또는 리소스 그룹에 요청할 수 있습니다.

  리소스 기반 정책에서 보안 주체를 지정해야 합니다. 보안 주체에는 계정, 사용자, 역할, 페더레이션 사용자 또는 AWS 서비스가 포함될 수 있습니다. 자세한 내용은 *IAM 사용 설명서*의 [AWS JSON 정책 요소: 보안 주체](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)를 참조하세요.
+ **결과** – 지정된 보안 주체가 특정 작업을 요청할 때의 결과입니다. 이는 `Allow` 또는 `Deny`일 수 있습니다. 기본적으로 IAM을 사용하여 서비스 또는 서비스 네트워크에 대한 액세스 제어를 활성화하면 보안 주체는 서비스 또는 서비스 네트워크에 요청할 권한이 없습니다.
+ **작업** - 권한을 부여하거나 거부하는 특정 API 작업입니다. VPC Lattice는 `vpc-lattice-svcs` 접두사를 사용하는 작업을 지원합니다. 자세한 내용은 *서비스 승인* 참조의 [Amazon VPC Lattice Services에서 정의한 작업을](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonvpclatticeservices.html#amazonvpclatticeservices-actions-as-permissions) 참조하세요.
+ **리소스** – 작업의 영향을 받는 리소스입니다.
+ **조건**: 조건은 선택 사항으로서 이를 사용하여 정책이 적용되는 시기를 제어할 수 있습니다. 자세한 내용은 *서비스 권한 부여 참조*의 [Amazon VPC Lattice 서비스의 조건 키](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonvpclatticeservices.html#amazonvpclatticeservices-policy-keys)를 참조하세요.

인증 정책을 생성하고 관리할 때 [IAM 정책 생성기](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-generator)를 사용하려고 할 수 있습니다.

**요구 사항**  
JSON의 정책에는 줄 바꿈이나 빈 줄이 포함되어서는 안 됩니다.

## 인증 정책의 리소스 형식
<a name="auth-policies-resource-format"></a>

다음 예와 같이 `<serviceARN>/<path>` 패턴이 있는 매칭 스키마를 사용하고 `Resource` 요소를 코딩하는 인증 정책을 생성하여 특정 리소스에 대한 액세스를 제한할 수 있습니다.


| 프로토콜 | 예제 | 
| --- | --- | 
| HTTP |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/vpc-lattice/latest/ug/auth-policies.html)  | 
| gRPC |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/vpc-lattice/latest/ug/auth-policies.html)  | 

`<serviceARN>`에는 다음의 Amazon 리소스 이름(ARN) 리소스 형식을 사용합니다.

```
arn:aws:vpc-lattice:region:account-id:service/service-id
```

예제:

```
"Resource": "arn:aws:vpc-lattice:us-west-2:123456789012:service/svc-0123456789abcdef0"
```

## 인증 정책에 사용할 수 있는 조건 키
<a name="auth-policies-condition-keys"></a>

인증 정책의 **조건** 요소에 있는 조건 키를 통해 액세스를 추가로 제어할 수 있습니다. 이러한 조건 키는 프로토콜과 요청이 [Signature Version 4(SigV4)](sigv4-authenticated-requests.md)로 서명되었는지 아니면 익명으로 서명되었는지에 따라 평가용으로 제공됩니다. 조건 키는 대소문자를 구분합니다.

AWS 는 `aws:PrincipalOrgID` 및와 같이 액세스를 제어하는 데 사용할 수 있는 전역 조건 키를 제공합니다`aws:SourceIp`. AWS 전역 조건 키 목록을 보려면 *IAM 사용 설명서*의 [AWS 전역 조건 컨텍스트 키를](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html) 참조하세요.

다음 스토리에서는 VPC Lattice 조건 키를 나열합니다. 자세한 내용은 *서비스 권한 부여 참조*의 [Amazon VPC Lattice 서비스의 조건 키](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonvpclatticeservices.html#amazonvpclatticeservices-policy-keys)를 참조하세요.


| 조건 키 | 설명 | 예제 | 익명의(인증되지 않은) 호출자가 사용할 수 있나요? | gRPC 사용 가능 | 
| --- | --- | --- | --- | --- | 
| vpc-lattice-svcs:Port | 요청이 있는 서비스 포트를 기준으로 액세스를 필터링합니다. | 80 | 예 | 예 | 
| vpc-lattice-svcs:RequestMethod | 요청의 방법을 기준으로 액세스를 필터링합니다. | GET | 예 | 항상 게시 | 
| vpc-lattice-svcs:RequestPath | 요청 URL의 경로 부분을 기준으로 액세스를 필터링합니다. | /path | 예 | 예 | 
| vpc-lattice-svcs:RequestHeader/header-name: value | 요청 헤더의 헤더 이름-값 쌍을 기준으로 액세스를 필터링합니다. | content-type: application/json | 예 | 예 | 
| vpc-lattice-svcs:RequestQueryString/key-name: value | 요청 URL에 있는 쿼리 문자열 키-값 페어를 기준으로 액세스를 필터링합니다. | quux: [corge, grault] | 예 | 아니요 | 
| vpc-lattice-svcs:ServiceNetworkArn | 요청을 수신하는 서비스의 서비스 네트워크에 대한 ARN을 기준으로 액세스를 필터링합니다. | arn:aws:vpc-lattice:us-west-2:123456789012:servicenetwork/sn-0123456789abcdef0 | 예 | 예 | 
| vpc-lattice-svcs:ServiceArn | 요청을 수신하는 서비스의 ARN을 기준으로 액세스를 필터링합니다. | arn:aws:vpc-lattice:us-west-2:123456789012:service/svc-0123456789abcdef0 | 예 | 예 | 
| vpc-lattice-svcs:SourceVpc | 요청이 있는 VPC를 기준으로 액세스를 필터링합니다. | vpc-1a2b3c4d | 예 | 예 | 
| vpc-lattice-svcs:SourceVpcOwnerAccount | 요청이 있는 VPC의 소유 계정을 기준으로 액세스를 필터링합니다. | 123456789012 | 예 | 예 | 

## 리소스 태그
<a name="resource-tags"></a>

*태그*는 사용자가 할당하거나가 AWS 리소스에 AWS 할당하는 메타데이터 레이블입니다. 각 태그는 두 부분으로 구성됩니다.
+ *태그 키*(예: `CostCenter`, `Environment` 또는 `Project`) 태그 키는 대/소문자를 구별합니다.
+ *태그 값*(예: `111122223333` 또는 `Production`)으로 알려진 선택적 필드 태그 값을 생략하는 것은 빈 문자열을 사용하는 것과 같습니다. 태그 키처럼 태그 값은 대/소문자를 구분합니다.

태그 지정에 대한 자세한 내용은 [태그를 사용하여 AWS 리소스에 대한 액세스 제어를](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html) 참조하세요.

`aws:ResourceTag/key` AWS 글로벌 조건 컨텍스트 키를 사용하여 인증 정책에서 태그를 사용할 수 있습니다.

다음 예제 정책은 태그가 인 서비스에 대한 액세스 권한을 부여합니다`Environment=Gamma`. 이 정책을 사용하면 하드 코딩 서비스 ARNs 또는 IDs.

```
{
  "Version": "2012-10-17", 		 	 	 		 	 	 
  "Statement": [
    {
      "Sid": "AllowGammaAccess",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "vpc-lattice-svcs:Invoke",
      "Resource": "arn:aws:vpc-lattice:us-west-2:123456789012:service/svc-0124446789abcdef0/*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Environment": "Gamma",
        }
      }
    }
  ]
}
```

## 보안 주체 태그
<a name="principal-tags"></a>

호출자의 자격 증명에 연결된 태그를 기반으로 서비스 및 리소스에 대한 액세스를 제어할 수 있습니다. VPC Lattice는 `aws:PrincipalTag/context` 변수를 사용하여 사용자, 역할 또는 세션 태그의 모든 보안 주체 태그를 기반으로 액세스 제어를 지원합니다. 자세한 내용은 [IAM 보안 주체에 대한 액세스 제어](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_iam-tags.html#access_iam-tags_control-principals)를 참조하세요.

다음 예제 정책은 태그가 인 자격 증명에만 액세스 권한을 부여합니다`Team=Payments`. 이 정책을 사용하면 계정 IDs 또는 역할 ARNs.

```
{
  "Version": "2012-10-17", 		 	 	 		 	 	 
  "Statement": [
    {
      "Sid": "AllowPaymentsTeam",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "vpc-lattice-svcs:Invoke",
      "Resource": "arn:aws:vpc-lattice:us-west-2:123456789012:service/svc-0123456789abcdef0/*",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalTag/Team": "Payments",
        }
      }
    }
  ]
}
```

## 익명의(인증되지 않은) 보안 주체
<a name="anonymous-unauthenticated-principals"></a>

익명 보안 주체는 [서명 버전 4(SigV4)](sigv4-authenticated-requests.md)로 AWS 요청에 서명하지 않고 서비스 네트워크에 연결된 VPC 내에 있는 호출자입니다. 인증 정책에서 허용하는 경우 익명의 보안 주체는 서비스 네트워크의 서비스에 인증되지 않은 요청을 할 수 있습니다.

## 인증 정책 예시
<a name="example-auth-policies"></a>

다음은 인증된 보안 주체가 요청을 해야 하는 인증 정책의 예시입니다.

모든 예시는 `us-west-2` 리전을 사용하며 가상의 계정 ID를 포함합니다.

**예제 1: 특정 AWS 조직의 서비스에 대한 액세스 제한**  
다음 인증 정책 예시는 정책이 적용되는 서비스 네트워크의 모든 서비스에 액세스할 수 있는 권한을 인증된 모든 요청에 부여합니다. 그러나 요청은 조건에 지정된 AWS 조직에 속한 보안 주체에서 시작되어야 합니다.

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Allow",
         "Principal": "*",
         "Action": "vpc-lattice-svcs:Invoke",
         "Resource": "*",
         "Condition": {
            "StringEquals": {
               "aws:PrincipalOrgID": [ 
                  "o-123456example"
               ]
            }
         }
      }
   ]
}
```

------

**예 2: 특정 IAM 역할에 의한 서비스 액세스 제한**  
다음 인증 정책 예시는 `Resource` 요소에 지정된 서비스에 대해 HTTP GET 요청을 보내기 위해 IAM 역할 `rates-client`를 사용하는 모든 인증된 요청에 권한을 부여합니다. `Resource` 요소의 리소스는 정책이 연결된 서비스와 동일합니다.

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect": "Allow",
         "Principal": {
            "AWS": [
               "arn:aws:iam::123456789012:role/rates-client"
            ]
         },
         "Action": "vpc-lattice-svcs:Invoke",
         "Resource": [
            "arn:aws:vpc-lattice:us-west-2:123456789012:service/svc-0123456789abcdef0/*"
         ],
         "Condition": {
            "StringEquals": {
               "vpc-lattice-svcs:RequestMethod": "GET"
            }
         }
      }
   ]
}
```

------

**예 3: 특정 VPC의 인증된 보안 주체에 의한 서비스 액세스 제한**  
다음 인증 정책 예시는 VPC ID가 `vpc-1a2b3c4d`인 VPC의 보안 주체가 인증된 요청을 하는 경우만 허용합니다.

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Allow",
         "Principal": "*",
         "Action": "vpc-lattice-svcs:Invoke",
         "Resource": "*",
         "Condition": {
            "StringNotEquals": {
               "aws:PrincipalType": "Anonymous"
            },
            "StringEquals": {
               "vpc-lattice-svcs:SourceVpc": "vpc-1a2b3c4d"
            }
         }
      }
   ]
}
```

------

## 권한 부여의 작동 방식
<a name="auth-policies-evaluation-logic"></a>

VPC Lattice 서비스가 요청을 수신하면 AWS 적용 코드는 모든 관련 권한 정책을 함께 평가하여 요청을 승인할지 거부할지를 결정합니다. 권한 부여 중에 요청 컨텍스트에 적용할 수 있는 모든 IAM 자격 증명 기반 정책 및 인증 정책을 평가합니다. 기본적으로 인증 유형이 `AWS_IAM`인 경우 모든 요청이 묵시적으로 거부됩니다. 모든 관련 정책의 명시적 허용은 기본 설정을 무시합니다.

승인에는 다음이 포함됩니다.
+ 모든 관련 IAM 자격 증명 기반 정책 및 인증 정책 수집
+ 정책 세트 결과 평가:
  + 요청자(예: IAM 사용자 또는 역할)에게 요청자가 속한 계정에서 작업을 수행할 수 있는 권한이 있는지 확인합니다. 명시적 허용 문이 없는 경우 요청을 승인하지 AWS 않습니다.
  + 서비스 네트워크의 인증 정책에서 해당 요청을 허용하는지 확인합니다. 인증 정책이 활성화되었지만 명시적 허용 문이 없는 경우는 요청을 승인하지 AWS 않습니다. 명시적 허용 문이 있거나 인증 유형이 `NONE`인 경우 코드는 계속 실행됩니다.
  + 서비스에 대한 인증 정책에서 해당 요청을 허용하는지 확인합니다. 인증 정책이 활성화되었지만 명시적 허용 문이 없는 경우는 요청을 승인하지 AWS 않습니다. 명시적 허용 문이 있거나 인증 유형이 `NONE`인 경우 적용 코드가 최종 **Allow** 결정을 반환합니다.
  + 어떠한 정책의 명시적 거부도 허용을 무시합니다.

다이어그램은 권한 부여 워크플로를 보여줍니다. 요청을 하면 관련 정책은 해당 서비스에 대한 요청 액세스를 허용하거나 거부합니다.

![\[권한 부여 워크플로\]](http://docs.aws.amazon.com/ko_kr/vpc-lattice/latest/ug/images/authpolicy.png)


# 보안 그룹을 사용하여 VPC Lattice의 트래픽 제어
<a name="security-groups"></a>

AWS 보안 그룹은 가상 방화벽 역할을 하여 연결된 엔터티와의 네트워크 트래픽을 제어합니다. VPC Lattice를 사용하면 보안 그룹을 생성하고 VPC를 서비스 네트워크에 연결하는 VPC 연결에 할당하여 서비스 네트워크에 추가 네트워크 수준 보안 보호를 적용할 수 있습니다. VPC 엔드포인트를 사용하여 VPC를 서비스 네트워크에 연결하는 경우 VPC 엔드포인트에도 보안 그룹을 할당할 수 있습니다. 마찬가지로 생성한 리소스 게이트웨이에 보안 그룹을 할당하여 VPC의 리소스에 액세스할 수 있습니다.

**Topics**
+ [관리형 접두사 목록](#managed-prefix-list)
+ [보안 그룹 규칙](#security-groups-rules)
+ [VPC 연결을 위한 보안 그룹 관리](#service-network-security-group)

## 관리형 접두사 목록
<a name="managed-prefix-list"></a>

VPC Lattice는 서비스 네트워크 연결을 사용하여 VPC를 서비스 네트워크에 연결할 때 VPC Lattice 네트워크를 통해 트래픽을 라우팅하는 데 사용되는 IP 주소를 포함하는 관리형 접두사 목록을 제공합니다. 이러한 IPs는 프라이빗 링크 로컬 IPs 또는 라우팅할 수 없는 퍼블릭 IPs.

 보안 그룹 규칙에서 VPC Lattice 관리형 접두사 목록을 참조할 수 있습니다. 이렇게 하면 트래픽이 클라이언트에서 VPC Lattice 서비스 네트워크를 통해 VPC Lattice 서비스 대상으로 흐를 수 있습니다.

예를 들어 미국 서부(오레곤) 리전(`us-west-2`)에 대상으로 등록된 EC2 인스턴스가 있다고 가정합시다. VPC Lattice 관리형 접두사 목록에서 인바운드 HTTPS 액세스를 허용하는 규칙을 인스턴스 보안 그룹에 추가하면 이 리전의 VPC Lattice 트래픽이 인스턴스에 도달할 수 있습니다. 보안 그룹에서 다른 모든 인바운드 규칙을 제거하면 VPC Lattice 트래픽 이외의 모든 트래픽이 인스턴스에 도달하는 것을 방지할 수 있습니다.

VPC Lattice의 관리형 접두사 목록 이름은 다음과 같습니다.
+ com.amazonaws.*region*.vpc-lattice
+ com.amazonaws.*region*.ipv6.vpc-lattice

자세한 내용은 *Amazon VPC 사용 설명서*의 [AWS관리형 접두사 목록](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-aws-managed-prefix-lists.html#available-aws-managed-prefix-lists)을 참조하세요.

**Windows 및 macOS 클라이언트**  
VPC Lattice 접두사 목록의 주소는 링크-로컬 주소와 라우팅할 수 없는 퍼블릭 주소입니다. 이러한 클라이언트에서 VPC Lattice에 연결하는 경우 관리형 접두사 목록의 IP 주소를 클라이언트의 기본 IP 주소로 전달하도록 구성을 업데이트해야 합니다. 다음은 Windows 클라이언트의 구성을 업데이트하는 예제 명령입니다. 여기서 169.254.171.0는 관리형 접두사 목록의 주소 중 하나입니다.

```
C:\> route add 169.254.171.0 mask 255.255.255.0 primary-ip-address
```

다음은 macOS 클라이언트의 구성을 업데이트하는 예제 명령입니다. 여기서 169.254.171.0는 관리형 접두사 목록의 주소 중 하나입니다.

```
sudo route -n add -net 169.254.171.0 primary-ip-address 255.255.255.0
```

정적 경로를 생성하지 않으려면 VPC의 서비스 네트워크 엔드포인트를 사용하여 연결을 설정하는 것이 좋습니다. 자세한 내용은 [서비스 네트워크 VPC 엔드포인트 연결 관리](service-network-associations.md#service-network-vpc-endpoint-associations) 단원을 참조하십시오.

## 보안 그룹 규칙
<a name="security-groups-rules"></a>

보안 그룹이 있든 없든 VPC Lattice를 사용해도 기존 VPC 보안 그룹 구성에 영향을 주지 않습니다. 그러나 언제든지 자체 보안 그룹을 추가할 수 있습니다.

**주요 고려 사항**
+ 클라이언트에 대한 보안 그룹 규칙은 VPC Lattice로의 아웃바운드 트래픽을 제어합니다.
+ 대상에 대한 보안 그룹 규칙은 상태 확인 트래픽을 포함하여 VPC Lattice에서 대상으로 가는 인바운드 트래픽을 제어합니다.
+ 서비스 네트워크와 VPC 간의 연결을 위한 보안 그룹 규칙은 VPC Lattice 서비스 네트워크에 액세스할 수 있는 클라이언트를 제어합니다.
+ 리소스 게이트웨이에 대한 보안 그룹 규칙은 리소스 게이트웨이에서 리소스로의 아웃바운드 트래픽을 제어합니다.

**리소스 게이트웨이에서 데이터베이스 리소스로 흐르는 트래픽에 대한 권장 아웃바운드 규칙**  
트래픽이 리소스 게이트웨이에서 리소스로 흐르려면 열린 포트에 대한 아웃바운드 규칙과 리소스에 대해 허용되는 리스너 프로토콜을 생성해야 합니다.


| Destination | 프로토콜 | 포트 범위 | 설명 | 
| --- | --- | --- | --- | 
| 리소스의 CIDR 범위 | TCP | 3306 | 리소스 게이트웨이에서 데이터베이스로의 트래픽 허용 | 

**서비스 네트워크 및 VPC 연결을 위한 권장 인바운드 규칙**  
트래픽VPCs에서 서비스 네트워크와 연결된 서비스로 흐르려면 서비스에 대한 리스너 포트 및 리스너 프로토콜에 대한 인바운드 규칙을 생성해야 합니다.


| 소스 | 프로토콜 | 포트 범위 | Comment | 
| --- | --- | --- | --- | 
| VPC CIDR | listener | listener | 클라이언트에서 VPC Lattice로의 트래픽 허용 | 

**클라이언트 인스턴스에서 VPC Lattice로의 트래픽 흐름에 대한 권장 아웃바운드 규칙**  
기본적으로 보안 그룹은 모든 아웃바운드 트래픽을 허용합니다. 그러나 사용자 지정 아웃바운드 규칙이 있는 경우 클라이언트 인스턴스가 VPC Lattice 서비스 네트워크와 연결된 모든 서비스에 연결할 수 있도록 리스너 포트 및 프로토콜에 대해 VPC Lattice 접두사로의 아웃바운드 트래픽을 허용해야 합니다. VPC Lattice에 대한 접두사 목록의 ID를 참조하여이 트래픽을 허용할 수 있습니다.


| Destination | 프로토콜 | 포트 범위 | 설명 | 
| --- | --- | --- | --- | 
| VPC Lattice 접두사 목록의 ID | listener | listener | 클라이언트에서 VPC Lattice로의 트래픽 허용 | 

**VPC Lattice에서 대상 인스턴스로의 트래픽 흐름에 대한 권장 인바운드 규칙**  
트래픽이 VPC Lattice에서 흐르기 때문에 클라이언트 보안 그룹을 대상 보안 그룹의 소스로 사용할 수 없습니다. VPC Lattice에 대한 접두사 목록의 ID를 참조할 수 있습니다.


| 소스 | 프로토콜 | 포트 범위 | 설명 | 
| --- | --- | --- | --- | 
| VPC Lattice 접두사 목록의 ID | target | target | VPC Lattice에서 대상으로의 트래픽 허용 | 
| VPC Lattice 접두사 목록의 ID | health check | health check | VPC Lattice에서 대상으로 가는 상태 확인 트래픽 허용 | 

## VPC 연결을 위한 보안 그룹 관리
<a name="service-network-security-group"></a>

 AWS CLI 를 사용하여 VPC에서 서비스 네트워크 연결에 대한 보안 그룹을 보거나 추가하거나 업데이트할 수 있습니다. 를 사용할 때 명령은 프로파일에 대해 AWS 리전 구성된에서 실행 AWS CLI됩니다. 다른 리전에서 명령을 실행하려는 경우 프로필의 기본 리전을 변경하거나 명령에 `--region` 파라미터를 사용합니다.

시작하기 전에 서비스 네트워크에 추가하려는 VPC와 동일한 VPC에 보안 그룹을 생성했는지 확인합니다. 자세한 내용은 *Amazon VPC 사용 설명서*의 [보안 그룹을 사용하여 리소스에 대한 트래픽 제어를 참조하세요](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-security-groups.html).

**콘솔을 사용하여 VPC 연결을 생성할 때 보안 그룹을 추가하는 방법**

1. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)에서 Amazon VPC 콘솔을 엽니다.

1. 탐색 창의 **VPC Lattice**에서 **서비스 네트워크**를 선택합니다.

1. 서비스 네트워크의 이름을 선택하여 세부 정보 페이지를 엽니다.

1. **VPC 연결** 탭에서 **VPC 연결 생성**을 선택한 다음 **VPC 연결 추가**를 선택합니다.

1. VPC와 최대 5개의 보안 그룹을 선택합니다.

1. **변경 사항 저장**을 선택합니다.

**콘솔을 사용하여 기존 VPC 연결에 대한 보안 그룹을 추가 또는 업데이트하는 방법**

1. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)에서 Amazon VPC 콘솔을 엽니다.

1. 탐색 창의 **VPC Lattice**에서 **서비스 네트워크**를 선택합니다.

1. 서비스 네트워크의 이름을 선택하여 세부 정보 페이지를 엽니다.

1. **VPC 연결** 탭에서 연결의 확인란을 선택한 다음 **작업**, **보안 그룹 편집**을 선택합니다.

1. 필요에 따라 보안 그룹을 추가하고 제거합니다.

1. **변경 사항 저장**을 선택합니다.

**를 사용하여 VPC 연결을 생성할 때 보안 그룹을 추가하려면 AWS CLI**  
[create-service-network-vpc-association](https://docs.aws.amazon.com/cli/latest/reference/vpc-lattice/create-service-network-vpc-association.html) 명령을 사용하여 VPC 연결을 위한 VPC의 ID와 추가할 보안 그룹의 ID를 지정합니다.

```
aws vpc-lattice create-service-network-vpc-association \
    --service-network-identifier sn-0123456789abcdef0 \
    --vpc-identifier vpc-1a2b3c4d \
    --security-group-ids sg-7c2270198example
```

이 작업이 성공하면 다음과 비슷한 출력이 반환됩니다.

```
{
  "arn": "arn",
  "createdBy": "464296918874",
  "id": "snva-0123456789abcdef0",
  "status": "CREATE_IN_PROGRESS",
  "securityGroupIds": ["sg-7c2270198example"]
}
```

**를 사용하여 기존 VPC 연결에 대한 보안 그룹을 추가하거나 업데이트하려면 AWS CLI**  
[update-service-network-vpc-association](https://docs.aws.amazon.com/cli/latest/reference/vpc-lattice/update-service-network-vpc-association.html) 명령을 사용하여 서비스 네트워크의 ID와 보안 그룹의 ID를 지정합니다. 이 보안 그룹은 이전에 연결된 보안 그룹을 재정의합니다. 목록을 업데이트할 때 보안 그룹을 하나 이상 정의합니다.

```
aws vpc-lattice update-service-network-vpc-association 
    --service-network-vpc-association-identifier sn-903004f88example \
    --security-group-ids sg-7c2270198example sg-903004f88example
```

**주의**  
모든 보안 그룹을 제거할 수 없습니다. 대신 먼저 VPC 연결을 삭제한 다음 보안 그룹 없이 VPC 연결을 다시 생성해야 합니다. VPC 연결을 삭제할 때는 주의해야 합니다. 삭제하면 트래픽이 해당 서비스 네트워크에 있는 서비스에 도달하지 못하게 됩니다.

# 네트워크 ACL을 사용하여 VPC Lattice에 대한 트래픽 제어
<a name="network-acls"></a>

네트워크 액세스 제어 목록(ACL)은 서브넷 수준에서 특정 인바운드 또는 아웃바운드 트래픽을 허용하거나 거부합니다. 기본 네트워크 ACL은 인바운드와 아웃바운드 트래픽을 모두 허용합니다. 서브넷에 대한 사용자 지정 네트워크 ACLs을 생성하여 추가 보안 계층을 제공할 수 있습니다. 자세한 내용을 알아보려면 Amazon VPC 사용 설명서**의 [네트워크 ACL](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html)을 참조하세요.

**Topics**
+ [클라이언트 서브넷ACLs](#network-acl-client-subnets)
+ [대상 서브넷ACLs](#network-acl-target-subnets)

## 클라이언트 서브넷ACLs
<a name="network-acl-client-subnets"></a>

클라이언트 서브넷ACLs은 클라이언트와 VPC Lattice 간의 트래픽을 허용해야 합니다. VPC Lattice의 [관리형 접두사 목록에서](security-groups.md#managed-prefix-list) 허용할 IP 주소 범위를 가져올 수 있습니다.

다음은 인바운드 규칙의 예입니다.


| 소스 | 프로토콜 | 포트 범위 | 설명 | 
| --- | --- | --- | --- | 
| vpc\$1lattice\$1cidr\$1block | TCP | 1025-65535 | VPC Lattice에서 클라이언트로의 트래픽 허용 | 

다음은 아웃바운드 예제입니다.


| Destination | 프로토콜 | 포트 범위 | 설명 | 
| --- | --- | --- | --- | 
| vpc\$1lattice\$1cidr\$1block | listener | listener | 클라이언트에서 VPC Lattice로의 트래픽 허용 | 

## 대상 서브넷ACLs
<a name="network-acl-target-subnets"></a>

대상 서브넷의 네트워크 ACLs은 대상 포트와 상태 확인 포트 모두에서 대상과 VPC Lattice 간의 트래픽을 허용해야 합니다. VPC Lattice의 [관리형 접두사 목록에서](security-groups.md#managed-prefix-list) 허용할 IP 주소 범위를 가져올 수 있습니다.

다음은 인바운드 규칙의 예입니다.


| 소스 | 프로토콜 | 포트 범위 | 설명 | 
| --- | --- | --- | --- | 
| vpc\$1lattice\$1cidr\$1block | target | target | VPC Lattice에서 대상으로의 트래픽 허용 | 
| vpc\$1lattice\$1cidr\$1block | health check | health check | VPC Lattice에서 대상으로 가는 상태 확인 트래픽 허용 | 

다음은 아웃바운드 예제입니다.


| Destination | 프로토콜 | 포트 범위 | 설명 | 
| --- | --- | --- | --- | 
| vpc\$1lattice\$1cidr\$1block | target | 1024-65535 | 대상에서 VPC Lattice로의 트래픽 허용 | 
| vpc\$1lattice\$1cidr\$1block | health check | 1024-65535 | 대상에서 VPC Lattice로의 상태 확인 트래픽 허용 | 

# Amazon VPC Lattice에 대한 SIGv4 인증 요청
<a name="sigv4-authenticated-requests"></a>

VPC Lattice는 클라이언트 인증에 서명 버전 4(SIGv4) 또는 서명 버전 4A(SIGv4A)를 사용합니다. 자세한 내용은 *IAM 사용 설명서*의 [API 요청용AWS Signature Version 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html) 섹션을 참조하세요.

**고려 사항**
+ VPC Lattice는 SIGv4 또는 SIGv4A로 서명된 모든 요청을 인증하려고 시도합니다. 인증하지 않으면 요청이 실패합니다.
+ VPC Lattice는 페이로드 서명을 지원하지 않습니다. 값이 `"UNSIGNED-PAYLOAD"`로 설정된 `x-amz-content-sha256` 헤더를 보내야 합니다.

**Topics**
+ [Python](#sigv4-authenticated-requests-python)
+ [Java](#sigv4-authenticated-requests-java-custom-interceptor)
+ [Node.js](#sigv4-authenticated-requests-nodejs)
+ [Golang](#sigv4-authenticated-requests-golang)
+ [골랑 - GRPC](#sigv4-authenticated-requests-golang-grpc)

## Python
<a name="sigv4-authenticated-requests-python"></a>

이 예제에서는 네트워크에 등록된 서비스에 대한 보안 연결을 통해 서명된 요청을 보냅니다. [요청](https://requests.readthedocs.io/en/latest/)을 사용하려는 경우 [botocore](https://github.com/boto/botocore) 패키지는 인증 프로세스를 간소화하지만 엄격히 요구되는 것은 아닙니다. 자세한 내용은 Boto3 설명서의 [자격 증명을 참조하세요](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html).

`botocore` 및 `awscrt` 패키지를 설치하려면 다음 명령을 사용합니다. 자세한 내용은 [AWS CRT Python](https://pypi.org/project/awscrt/)을 참조하세요.

```
pip install botocore awscrt
```

Lambda에서 클라이언트 애플리케이션을 실행하는 경우 [Lambda 계층](https://docs.aws.amazon.com/lambda/latest/dg/python-layers.html)을 사용하여 필요한 모듈을 설치하거나 배포 패키지에 포함합니다.

다음 예제에서는 자리 표시자 값을 고유한 값으로 바꿉니다.

------
#### [ SIGv4 ]

```
from botocore import crt
import requests 
from botocore.awsrequest import AWSRequest
import botocore.session

if __name__ == '__main__':
    session = botocore.session.Session()
    signer = crt.auth.CrtSigV4Auth(session.get_credentials(), 'vpc-lattice-svcs', 'us-west-2')
    endpoint = 'https://data-svc-022f67d3a42.1234abc.vpc-lattice-svcs.us-west-2.on.aws'
    data = "some-data-here"
    headers = {'Content-Type': 'application/json', 'x-amz-content-sha256': 'UNSIGNED-PAYLOAD'}
    request = AWSRequest(method='POST', url=endpoint, data=data, headers=headers)
    request.context["payload_signing_enabled"] = False
    signer.add_auth(request)
    
    prepped = request.prepare()
    
    response = requests.post(prepped.url, headers=prepped.headers, data=data)
    print(response.text)
```

------
#### [ SIGv4A ]

```
from botocore import crt
import requests 
from botocore.awsrequest import AWSRequest
import botocore.session

if __name__ == '__main__':
    session = botocore.session.Session()
    signer = crt.auth.CrtSigV4AsymAuth(session.get_credentials(), 'vpc-lattice-svcs', '*')
    endpoint = 'https://data-svc-022f67d3a42.1234abc.vpc-lattice-svcs.us-west-2.on.aws'
    data = "some-data-here"
    headers = {'Content-Type': 'application/json', 'x-amz-content-sha256': 'UNSIGNED-PAYLOAD'}
    request = AWSRequest(method='POST', url=endpoint, data=data, headers=headers)
    request.context["payload_signing_enabled"] = False 
    signer.add_auth(request)
    
    prepped = request.prepare()
    
    response = requests.post(prepped.url, headers=prepped.headers, data=data)
    print(response.text)
```

------

## Java
<a name="sigv4-authenticated-requests-java-custom-interceptor"></a>

이 예시에서는 사용자 지정 인터셉터를 사용하여 요청 서명을 수행하는 방법을 보여줍니다. 올바른 보안 인증을 가져오는 [AWS SDK for Java 2.x](https://github.com/aws/aws-sdk-java-v2)의 기본 자격 증명 공급자 클래스를 사용합니다. 특정 보안 인증 공급자를 사용하려면 [AWS SDK for Java 2.x](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials.html)에서 하나를 선택할 수 있습니다. 는 HTTPS를 통한 서명되지 않은 페이로드만 AWS SDK for Java 허용합니다. 하지만 HTTP를 통한 서명되지 않은 페이로드를 지원하도록 서명자를 확장할 수 있습니다.

------
#### [ SIGv4 ]

```
package com.example;

import software.amazon.awssdk.http.auth.aws.signer.AwsV4HttpSigner;
import software.amazon.awssdk.http.auth.spi.signer.SignedRequest;

import software.amazon.awssdk.http.SdkHttpMethod;
import software.amazon.awssdk.http.SdkHttpClient;
import software.amazon.awssdk.identity.spi.AwsCredentialsIdentity;
import software.amazon.awssdk.http.SdkHttpRequest;
import software.amazon.awssdk.http.apache.ApacheHttpClient;
import software.amazon.awssdk.http.HttpExecuteRequest;
import software.amazon.awssdk.http.HttpExecuteResponse;
import java.io.IOException;
import java.net.URI;

import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;

public class sigv4 {

    public static void main(String[] args) {
        AwsV4HttpSigner signer = AwsV4HttpSigner.create();

        AwsCredentialsIdentity credentials = DefaultCredentialsProvider.create().resolveCredentials();

        if (args.length < 2) {
            System.out.println("Usage: sample <url> <region>");
            System.exit(1);
        }
        // Create the HTTP request to be signed
        var url = args[0];
        SdkHttpRequest httpRequest = SdkHttpRequest.builder()
                .uri(URI.create(url))
                .method(SdkHttpMethod.GET)
                .build();

        SignedRequest signedRequest = signer.sign(r -> r.identity(credentials)
                .request(httpRequest)
                .putProperty(AwsV4HttpSigner.SERVICE_SIGNING_NAME, "vpc-lattice-svcs")
                .putProperty(AwsV4HttpSigner.PAYLOAD_SIGNING_ENABLED, false)
                .putProperty(AwsV4HttpSigner.REGION_NAME, args[1]));

        System.out.println("[*] Raw request headers:");
        signedRequest.request().headers().forEach((key, values) -> {
            values.forEach(value -> System.out.println("  " + key + ": " + value));
        });

        try (SdkHttpClient httpClient = ApacheHttpClient.create()) {
            HttpExecuteRequest httpExecuteRequest = HttpExecuteRequest.builder()
                    .request(signedRequest.request())
                    .contentStreamProvider(signedRequest.payload().orElse(null))
                    .build();

            System.out.println("[*] Sending request to: " + url);

            HttpExecuteResponse httpResponse = httpClient.prepareRequest(httpExecuteRequest).call();

            System.out.println("[*] Request sent");

            System.out.println("[*] Response status code: " + httpResponse.httpResponse().statusCode());
            // Read and print the response body
            httpResponse.responseBody().ifPresent(inputStream -> {
                try {
                    String responseBody = new String(inputStream.readAllBytes());
                    System.out.println("[*] Response body: " + responseBody);
                } catch (IOException e) {
                    System.err.println("[*] Failed to read response body");
                    e.printStackTrace();
                } finally {
                    try {
                        inputStream.close();
                    } catch (IOException e) {
                        System.err.println("[*] Failed to close input stream");
                        e.printStackTrace();
                    }
                }
            });
        } catch (IOException e) {
            System.err.println("[*] HTTP Request Failed.");
            e.printStackTrace();
        }

    }
}
```

------
#### [ SIGv4A ]

이 예제에서는에 대한 추가 종속성이 필요합니다`software.amazon.awssdk:http-auth-aws-crt`.

```
package com.example;


import software.amazon.awssdk.http.auth.aws.signer.AwsV4aHttpSigner;
import software.amazon.awssdk.http.auth.aws.signer.RegionSet;
import software.amazon.awssdk.http.auth.spi.signer.SignedRequest;

import software.amazon.awssdk.http.SdkHttpMethod;
import software.amazon.awssdk.http.SdkHttpClient;
import software.amazon.awssdk.identity.spi.AwsCredentialsIdentity;
import software.amazon.awssdk.http.SdkHttpRequest;
import software.amazon.awssdk.http.apache.ApacheHttpClient;
import software.amazon.awssdk.http.HttpExecuteRequest;
import software.amazon.awssdk.http.HttpExecuteResponse;
import java.io.IOException;
import java.net.URI;
import java.util.Arrays;

import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;

public class sigv4a {
    
    public static void main(String[] args) {
        AwsV4aHttpSigner signer = AwsV4aHttpSigner.create();

        AwsCredentialsIdentity credentials = DefaultCredentialsProvider.create().resolveCredentials();

        if (args.length < 2) {
            System.out.println("Usage: sample <url> <regionset>");
            System.exit(1);
        }
        // Create the HTTP request to be signed
        var url = args[0];
        SdkHttpRequest httpRequest = SdkHttpRequest.builder()
                .uri(URI.create(url))
                .method(SdkHttpMethod.GET)
                .build();

        SignedRequest signedRequest = signer.sign(r -> r.identity(credentials)
                .request(httpRequest)
                .putProperty(AwsV4aHttpSigner.SERVICE_SIGNING_NAME, "vpc-lattice-svcs")
                .putProperty(AwsV4aHttpSigner.PAYLOAD_SIGNING_ENABLED, false)
                .putProperty(AwsV4aHttpSigner.REGION_SET, RegionSet.create(String.join(" ",Arrays.copyOfRange(args, 1, args.length)))));

        System.out.println("[*] Raw request headers:");
        signedRequest.request().headers().forEach((key, values) -> {
            values.forEach(value -> System.out.println("  " + key + ": " + value));
        });

        try (SdkHttpClient httpClient = ApacheHttpClient.create()) {
            HttpExecuteRequest httpExecuteRequest = HttpExecuteRequest.builder()
                    .request(signedRequest.request())
                    .contentStreamProvider(signedRequest.payload().orElse(null))
                    .build();

            System.out.println("[*] Sending request to: " + url);

            HttpExecuteResponse httpResponse = httpClient.prepareRequest(httpExecuteRequest).call();

            System.out.println("[*] Request sent");

            System.out.println("[*] Response status code: " + httpResponse.httpResponse().statusCode());
            // Read and print the response body
            httpResponse.responseBody().ifPresent(inputStream -> {
                try {
                    String responseBody = new String(inputStream.readAllBytes());
                    System.out.println("[*] Response body: " + responseBody);
                } catch (IOException e) {
                    System.err.println("[*] Failed to read response body");
                    e.printStackTrace();
                } finally {
                    try {
                        inputStream.close();
                    } catch (IOException e) {
                        System.err.println("[*] Failed to close input stream");
                        e.printStackTrace();
                    }
                }
            });
        } catch (IOException e) {
            System.err.println("[*] HTTP Request Failed.");
            e.printStackTrace();
        }
    }
}
```

------

## Node.js
<a name="sigv4-authenticated-requests-nodejs"></a>

이 예시에서는 [aws-crt NodeJS 바인딩](https://github.com/awslabs/aws-crt-nodejs)을 사용하여 HTTPS를 사용하여 서명된 요청을 보냅니다.

`aws-crt` 패키지를 설치하려면 다음 명령을 실행합니다.

```
npm -i aws-crt
```

`AWS_REGION` 환경 변수가 있는 경우 예시에서는 `AWS_REGION`에서 지정한 리전을 사용합니다. 기본 리전은 `us-east-1`입니다.

------
#### [ SIGv4 ]

```
const https = require('https')
const crt = require('aws-crt')
const { HttpRequest } = require('aws-crt/dist/native/http')

function sigV4Sign(method, endpoint, service, algorithm) {
    const host = new URL(endpoint).host
    const request = new HttpRequest(method, endpoint)
    request.headers.add('host', host)
    // crt.io.enable_logging(crt.io.LogLevel.INFO)
    const config = {
        service: service,
        region: process.env.AWS_REGION ? process.env.AWS_REGION : 'us-east-1',
        algorithm: algorithm,
        signature_type: crt.auth.AwsSignatureType.HttpRequestViaHeaders,
        signed_body_header: crt.auth.AwsSignedBodyHeaderType.XAmzContentSha256,
        signed_body_value: crt.auth.AwsSignedBodyValue.UnsignedPayload,
        provider: crt.auth.AwsCredentialsProvider.newDefault()
    }

    return crt.auth.aws_sign_request(request, config)
}

if (process.argv.length === 2) {
  console.error(process.argv[1] + ' <url>')
  process.exit(1)
}

const algorithm = crt.auth.AwsSigningAlgorithm.SigV4;

sigV4Sign('GET', process.argv[2], 'vpc-lattice-svcs', algorithm).then(
  httpResponse => {
    var headers = {}

    for (const sigv4header of httpResponse.headers) {
      headers[sigv4header[0]] = sigv4header[1]
    }

    const options = {
      hostname: new URL(process.argv[2]).host,
      path: new URL(process.argv[2]).pathname,
      method: 'GET',
      headers: headers
    }

    req = https.request(options, res => {
      console.log('statusCode:', res.statusCode)
      console.log('headers:', res.headers)
      res.on('data', d => {
        process.stdout.write(d)
      })
    })
    req.on('error', err => {
      console.log('Error: ' + err)
    })
    req.end()
  }
)
```

------
#### [ SIGv4A ]

```
const https = require('https')
const crt = require('aws-crt')
const { HttpRequest } = require('aws-crt/dist/native/http')

function sigV4Sign(method, endpoint, service, algorithm) {
    const host = new URL(endpoint).host
    const request = new HttpRequest(method, endpoint)
    request.headers.add('host', host)
    // crt.io.enable_logging(crt.io.LogLevel.INFO)
    const config = {
        service: service,
        region: process.env.AWS_REGION ? process.env.AWS_REGION : 'us-east-1',
        algorithm: algorithm,
        signature_type: crt.auth.AwsSignatureType.HttpRequestViaHeaders,
        signed_body_header: crt.auth.AwsSignedBodyHeaderType.XAmzContentSha256,
        signed_body_value: crt.auth.AwsSignedBodyValue.UnsignedPayload,
        provider: crt.auth.AwsCredentialsProvider.newDefault()
    }

    return crt.auth.aws_sign_request(request, config)
}

if (process.argv.length === 2) {
  console.error(process.argv[1] + ' <url>')
  process.exit(1)
}

const algorithm = crt.auth.AwsSigningAlgorithm.SigV4Asymmetric;

sigV4Sign('GET', process.argv[2], 'vpc-lattice-svcs', algorithm).then(
  httpResponse => {
    var headers = {}

    for (const sigv4header of httpResponse.headers) {
      headers[sigv4header[0]] = sigv4header[1]
    }

    const options = {
      hostname: new URL(process.argv[2]).host,
      path: new URL(process.argv[2]).pathname,
      method: 'GET',
      headers: headers
    }

    req = https.request(options, res => {
      console.log('statusCode:', res.statusCode)
      console.log('headers:', res.headers)
      res.on('data', d => {
        process.stdout.write(d)
      })
    })
    req.on('error', err => {
      console.log('Error: ' + err)
    })
    req.end()
  }
)
```

------

## Golang
<a name="sigv4-authenticated-requests-golang"></a>

이 예제에서는 [Go용 Smithy 코드 생성기와](https://github.com/aws/smithy-go) [AWS Go 프로그래밍 언어용 SDK](https://github.com/aws/aws-sdk-go)를 사용하여 요청 서명 요청을 처리합니다. 이 예제에서는 Go 버전 1.21 이상이 필요합니다.

------
#### [ SIGv4 ]

```
package main
 
import (
        "context"
        "flag"
        "fmt"
        "io"
        "log"
        "net/http"
        "net/http/httputil"
        "os"
        "strings"
 
        "github.com/aws/aws-sdk-go-v2/aws"
        "github.com/aws/aws-sdk-go-v2/config"
        "github.com/aws/smithy-go/aws-http-auth/credentials"
        "github.com/aws/smithy-go/aws-http-auth/sigv4"
        v4 "github.com/aws/smithy-go/aws-http-auth/v4"
)
 
type nopCloser struct {
        io.ReadSeeker
}
 
func (nopCloser) Close() error {
        return nil
}
 
type stringFlag struct {
        set   bool
        value string
}
 
 
        flag.PrintDefaults()
        os.Exit(1)
}
 
func main() {
        flag.Parse()
        if !url.set || !region.set {
                Usage()
        }
 
        cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithClientLogMode(aws.LogSigning))
        if err != nil {
                log.Fatalf("failed to load SDK configuration, %v", err)
        }
 
        if len(os.Args) < 2 {
                log.Fatalf("Usage: go run main.go  <url>")
        }
 
        // Retrieve credentials from an SDK source, such as the instance profile
        sdkCreds, err := cfg.Credentials.Retrieve(context.TODO())
        if err != nil {
                log.Fatalf("Unable to retrieve credentials from SDK, %v", err)
        }
 
        creds := credentials.Credentials{
                AccessKeyID:     sdkCreds.AccessKeyID,
                SecretAccessKey: sdkCreds.SecretAccessKey,
                SessionToken:    sdkCreds.SessionToken,
        }
 
        // Add a payload body, which will not be part of the signature calculation
        body := nopCloser{strings.NewReader(`Example payload body`)}
 
        req, _ := http.NewRequest(http.MethodPost, url.value, body)
 
        // Create a sigv4a signer with specific options
        signer := sigv4.New(func(o *v4.SignerOptions) {
                o.DisableDoublePathEscape = true
                // This will add the UNSIGNED-PAYLOAD sha256 header
                o.AddPayloadHashHeader = true
                o.DisableImplicitPayloadHashing = true
        })
 
        // Perform the signing on req, using the credentials we retrieved from the SDK
        err = signer.SignRequest(&sigv4.SignRequestInput{
                Request:     req,
                Credentials: creds,
                Service:     "vpc-lattice-svcs",
                Region: region.String(),
        })
 
        if err != nil {
                log.Fatalf("%s", err)
        }
 
        res, err := httputil.DumpRequest(req, true)
 
        if err != nil {
                log.Fatalf("%s", err)
        }
 
        log.Printf("[*] Raw request\n%s\n", string(res))
 
        log.Printf("[*] Sending request to %s\n", url.value)
 
        resp, err := http.DefaultClient.Do(req)
        if err != nil {
                log.Fatalf("%s", err)
        }
 
        log.Printf("[*] Request sent\n")
 
        log.Printf("[*] Response status code: %d\n", resp.StatusCode)
 
        respBody, err := io.ReadAll(resp.Body)
        if err != nil {
                log.Fatalf("%s", err)
        }
 
        log.Printf("[*] Response body: \n%s\n", respBody)
}
```

------
#### [ SIGv4A ]

```
package main
 
import (
        "context"
        "flag"
        "fmt"
        "io"
        "log"
        "net/http"
        "net/http/httputil"
        "os"
        "strings"
 
        "github.com/aws/aws-sdk-go-v2/aws"
        "github.com/aws/aws-sdk-go-v2/config"
        "github.com/aws/smithy-go/aws-http-auth/credentials"
        "github.com/aws/smithy-go/aws-http-auth/sigv4a"
        v4 "github.com/aws/smithy-go/aws-http-auth/v4"
)
 
type nopCloser struct {
        io.ReadSeeker
}
 
func (nopCloser) Close() error {
        return nil
}
 
type stringFlag struct {
 
func main() {
        flag.Parse()
        if !url.set || !regionSet.set {
                Usage()
        }
 
        cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithClientLogMode(aws.LogSigning))
        if err != nil {
                log.Fatalf("failed to load SDK configuration, %v", err)
        }
 
        if len(os.Args) < 2 {
                log.Fatalf("Usage: go run main.go <url>")
        }
 
        // Retrieve credentials from an SDK source, such as the instance profile
        sdkCreds, err := cfg.Credentials.Retrieve(context.TODO())
        if err != nil {
                log.Fatalf("Unable to retrieve credentials from SDK, %v", err)
        }
 
        creds := credentials.Credentials{
                AccessKeyID:     sdkCreds.AccessKeyID,
                SecretAccessKey: sdkCreds.SecretAccessKey,
                SessionToken:    sdkCreds.SessionToken,
        }
 
        // Add a payload body, which will not be part of the signature calculation
        body := nopCloser{strings.NewReader(`Example payload body`)}
 
        req, _ := http.NewRequest(http.MethodPost, url.value, body)
 
        // Create a sigv4a signer with specific options
        signer := sigv4a.New(func(o *v4.SignerOptions) {
                o.DisableDoublePathEscape = true
                // This will add the UNSIGNED-PAYLOAD sha256 header
                o.AddPayloadHashHeader = true
                o.DisableImplicitPayloadHashing = true
        })
 
        // Create a slice out of the provided regionset
        rs := strings.Split(regionSet.value, ",")
 
        // Perform the signing on req, using the credentials we retrieved from the SDK
        err = signer.SignRequest(&sigv4a.SignRequestInput{
                Request:     req,
                Credentials: creds,
                Service:     "vpc-lattice-svcs",
                RegionSet: rs,
        })
 
        if err != nil {
                log.Fatalf("%s", err)
        }
 
        res, err := httputil.DumpRequest(req, true)
 
        if err != nil {
                log.Fatalf("%s", err)
        }
 
        log.Printf("[*] Raw request\n%s\n", string(res))
 
        log.Printf("[*] Sending request to %s\n", url.value)
 
        resp, err := http.DefaultClient.Do(req)
        if err != nil {
                log.Fatalf("%s", err)
        }
 
        log.Printf("[*] Request sent\n")
 
        log.Printf("[*] Response status code: %d\n", resp.StatusCode)
 
        respBody, err := io.ReadAll(resp.Body)
        if err != nil {
                log.Fatalf("%s", err)
        }
 
        log.Printf("[*] Response body: \n%s\n", respBody)
}
```

------

## 골랑 - GRPC
<a name="sigv4-authenticated-requests-golang-grpc"></a>

이 예제에서는 [AWS Go 프로그래밍 언어용 SDK](https://github.com/aws/aws-sdk-go-v2/)를 사용하여 GRPC 요청에 대한 요청 서명을 처리합니다. 이는 GRPC 샘플 코드 리포지토리의 [에코 서버에서](https://github.com/grpc/grpc-go/tree/master/examples/features/proto/echo) 사용할 수 있습니다.

```
package main

import (
    "context"
    "crypto/tls"
    "crypto/x509"

    "flag"
    "fmt"
    "log"
    "net/http"
    "net/url"
    "strings"
    "time"

    "google.golang.org/grpc"
    "google.golang.org/grpc/credentials"

    "github.com/aws/aws-sdk-go-v2/aws"
    v4 "github.com/aws/aws-sdk-go-v2/aws/signer/v4"
    "github.com/aws/aws-sdk-go-v2/config"

    ecpb "google.golang.org/grpc/examples/features/proto/echo"
)

const (
    headerContentSha    = "x-amz-content-sha256"
    headerSecurityToken = "x-amz-security-token"
    headerDate          = "x-amz-date"
    headerAuthorization = "authorization"
    unsignedPayload     = "UNSIGNED-PAYLOAD"
)

type SigV4GrpcSigner struct {
    service      string
    region       string
    credProvider aws.CredentialsProvider
    signer       *v4.Signer
}

func NewSigV4GrpcSigner(service string, region string, credProvider aws.CredentialsProvider) *SigV4GrpcSigner {
    signer := v4.NewSigner()
    return &SigV4GrpcSigner{
        service:      service,
        region:       region,
        credProvider: credProvider,
        signer:       signer,
    }
}

func (s *SigV4GrpcSigner) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) {
    ri, _ := credentials.RequestInfoFromContext(ctx)
    creds, err := s.credProvider.Retrieve(ctx)
    if err != nil {
        return nil, fmt.Errorf("failed to load credentials: %w", err)
    }

    // The URI we get here is scheme://authority/service/ - for siging we want to include the RPC name
    // But RequestInfoFromContext only has the combined /service/rpc-name - so read the URI, and
    // replace the Path with what we get from RequestInfo.
    parsed, err := url.Parse(uri[0])
    if err != nil {
        return nil, err
    }
    parsed.Path = ri.Method

    // Build a request for the signer.
    bodyReader := strings.NewReader("")
    req, err := http.NewRequest("POST", uri[0], bodyReader)
    if err != nil {
        return nil, err
    }
    date := time.Now()
    req.Header.Set(headerContentSha, unsignedPayload)
    req.Header.Set(headerDate, date.String())
    if creds.SessionToken != "" {
        req.Header.Set(headerSecurityToken, creds.SessionToken)
    }
    // The signer wants this as //authority/path
    // So get this by triming off the scheme and the colon before the first slash.
    req.URL.Opaque = strings.TrimPrefix(parsed.String(), parsed.Scheme+":")

    err = s.signer.SignHTTP(context.Background(), creds, req, unsignedPayload, s.service, s.region, date)
    if err != nil {
        return nil, fmt.Errorf("failed to sign request: %w", err)
    }

    // Pull the relevant headers out of the signer, and return them to get
    // included in the request we make.
    reqHeaders := map[string]string{
        headerContentSha:    req.Header.Get(headerContentSha),
        headerDate:          req.Header.Get(headerDate),
        headerAuthorization: req.Header.Get(headerAuthorization),
    }
    if req.Header.Get(headerSecurityToken) != "" {
        reqHeaders[headerSecurityToken] = req.Header.Get(headerSecurityToken)
    }

    return reqHeaders, nil
}

func (c *SigV4GrpcSigner) RequireTransportSecurity() bool {
    return true
}

var addr = flag.String("addr", "some-lattice-service:443", "the address to connect to")
var region = flag.String("region", "us-west-2", "region")

func callUnaryEcho(client ecpb.EchoClient, message string) {
    ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
    defer cancel()
    resp, err := client.UnaryEcho(ctx, &ecpb.EchoRequest{Message: message})
    if err != nil {
        log.Fatalf("client.UnaryEcho(_) = _, %v: ", err)
    }
    fmt.Println("UnaryEcho: ", resp.Message)
}

func main() {
    flag.Parse()
    cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithClientLogMode(aws.LogSigning))
    if err != nil {
        log.Fatalf("failed to load SDK configuration, %v", err)
    }

    pool, _ := x509.SystemCertPool()
    tlsConfig := &tls.Config{
        RootCAs: pool,
    }

    authority, _, _ := strings.Cut(*addr, ":") // Remove the port from the addr
    opts := []grpc.DialOption{
        grpc.WithTransportCredentials(credentials.NewTLS(tlsConfig)),

        // Lattice needs both the Authority to be set (without a port), and the SigV4 signer
        grpc.WithAuthority(authority),
        grpc.WithPerRPCCredentials(NewSigV4GrpcSigner("vpc-lattice-svcs", *region, cfg.Credentials)),
    }

    conn, err := grpc.Dial(*addr, opts...)

    if err != nil {
        log.Fatalf("did not connect: %v", err)
    }
    defer conn.Close()
    rgc := ecpb.NewEchoClient(conn)

    callUnaryEcho(rgc, "hello world")
}
```

# Amazon VPC Lattice의 데이터 보호
<a name="data-protection"></a>

 AWS [공동 책임 모델](https://aws.amazon.com/compliance/shared-responsibility-model/) Amazon VPC Lattice의 데이터 보호에 적용됩니다. 이 모델에 설명된 대로 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/) 블로그 게시물을 참조하세요.

## 전송 중 암호화
<a name="encryption-transit"></a>

VPC Lattice는 컨트롤 플레인과 데이터 영역으로 구성된 완전 관리형 서비스입니다. 각 영역은 서비스에서 서로 다른 용도로 사용됩니다. 컨트롤 플레인은 (CRUDL) 리소스(예: `CreateService` 및 )를 생성, 읽기/설명, 업데이트, 삭제 및 나열하는 데 사용되는 관리 APIs를 제공합니다`UpdateService`. VPC Lattice 컨트롤 플레인과의 통신은 TLS에 의해 전송 중으로 보호됩니다. 데이터 영역은 서비스 간 상호 연결을 제공하는 VPC Lattice Invoke API입니다. TLS는 HTTPS 또는 TLS를 사용할 때 VPC Lattice 데이터 영역과의 통신을 암호화합니다. 암호 그룹 및 프로토콜 버전은 VPC Lattice에서 제공하는 기본값을 사용하며, 구성할 수 없습니다. 자세한 내용은 [VPC Lattice 서비스를 위한 HTTPS 리스너](https-listeners.md) 단원을 참조하십시오.

## 저장 중 암호화
<a name="encryption-rest"></a>

기본적으로 저장 데이터를 암호화하면 민감한 데이터 보호와 관련된 운영 오버헤드와 복잡성을 줄이는 데 도움이 됩니다. 동시에 엄격한 암호화 규정 준수 및 규제 요구 사항을 충족하는 안전한 애플리케이션을 구축할 수 있습니다.

**Topics**
+ [Amazon S3 관리형 키를 사용한 서버 측 암호화(SSE-S3)](#s3-managed-keys)
+ [에 저장된 AWS KMS 키를 사용한 서버 측 암호화 AWS KMS (SSE-KMS)](#kms-managed-keys)

### Amazon S3 관리형 키를 사용한 서버 측 암호화(SSE-S3)
<a name="s3-managed-keys"></a>

Amazon S3 관리형 키를 사용한 서버 측 암호화(SSE-S3)를 사용하면 각 객체는 고유한 키로 암호화됩니다. 추가 보호 조치로 정기적으로 교체하는 루트 키로 키 자체를 암호화합니다. Amazon S3 서버 측 암호화는 가장 강력한 블록 암호 중 하나인 256비트 Advanced Encryption Standard(AES-256) GCM을 사용하여 데이터를 암호화합니다. AES-GCM 이전에 암호화된 객체의 경우 AES-CBC는 여전히 해당 객체의 암호를 해독하도록 지원됩니다. 자세한 내용은 [Amazon S3-관리형 암호화 키(SSE-S3)와 함께 서버 측 암호화 사용](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingServerSideEncryption.html)을 참조하세요.

VPC Lattice 액세스 로그용 S3-managed 암호화 키(SSE-S3)를 사용하여 서버 측 암호화를 활성화하면 각 액세스 로그 파일이 S3 버킷에 저장되기 전에 자동으로 암호화됩니다. 자세한 내용은 *Amazon CloudWatch 사용 설명서*의 [Amazon S3으로 전송된 로그](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-infrastructure-S3)를 참조하세요.

### 에 저장된 AWS KMS 키를 사용한 서버 측 암호화 AWS KMS (SSE-KMS)
<a name="kms-managed-keys"></a>

 AWS KMS 키를 사용한 서버 측 암호화(SSE-KMS)는 SSE-S3와 유사하지만이 서비스 사용에 따른 추가 이점과 요금이 있습니다. Amazon S3에서 객체에 대한 무단 액세스에 대한 추가 보호를 제공하는 AWS KMS 키에 대한 별도의 권한이 있습니다. 또한 SSE-KMS는 AWS KMS 키를 언제 누가 사용했는지 보여주는 감사 추적을 제공합니다. 자세한 내용은 [AWS Key Management Service (SSE-KMS)로 서버 측 암호화 사용](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html)을 참조하세요.

**Topics**
+ [인증서 프라이빗 키의 암호화 및 암호 해독](#private-key)
+ [VPC Lattice의 암호화 컨텍스트](#encryption-context)
+ [VPC Lattice의 암호화 키 모니터링](#monitoring-encryption-keys)

#### 인증서 프라이빗 키의 암호화 및 암호 해독
<a name="private-key"></a>

ACM 인증서와 프라이빗 키는 별칭이 **aws/acm**인 AWS 관리형 KMS 키를 사용하여 암호화됩니다. AWS KMS 콘솔의 **AWS 관리형 키에서이 별칭을 사용하여 키** ID를 볼 수 있습니다.

VPC Lattice는 ACM 리소스에 직접 액세스하지 않습니다. AWS TLS Connection Manager를 사용하여 인증서의 프라이빗 키를 보호하고 액세스합니다. ACM 인증서를 사용하여 VPC Lattice 서비스를 생성할 때 VPC Lattice는 인증서를 AWS TLS 연결 관리자와 연결합니다. 이는 접두사 **aws/acm**을 사용하여 관리형 키에 AWS KMS 대한 AWS 권한을에 생성하여 수행됩니다. 권한 부여는 TLS 연결 관리자가 암호화 작업에서 KMS 키를 사용할 수 있도록 하는 정책 도구입니다. 권한 부여를 통해 피부여자 보안 주체(TLS 연결 관리자)는 KMS 키에 대해 지정된 권한 부여 작업을 호출해 인증서의 프라이빗 키를 해독할 수 있습니다. 그런 다음 TLS 연결 관리자는 인증서와 해독된(일반 텍스트) 프라이빗 키를 사용하여 VPC Lattice 서비스의 클라이언트와 보안 연결(SSL/TLS 세션)을 설정합니다. 인증서가 통합 서비스에서 연결 해제되면 권한 부여가 사용 중지됩니다.

KMS 키에 대한 액세스를 제거하려면 또는의 `update-service` 명령을 사용하여 서비스에서 인증서를 교체 AWS Management Console 하거나 삭제하는 것이 좋습니다 AWS CLI.

#### VPC Lattice의 암호화 컨텍스트
<a name="encryption-context"></a>

[암호화 컨텍스트](https://docs.aws.amazon.com/kms/latest/developerguide/encrypt_context.html)는 프라이빗 키가 사용될 수 있는 대상에 대한 컨텍스트 정보를 포함하는 선택적 키-값 페어 세트입니다.는 암호화 컨텍스트를 암호화된 데이터에 AWS KMS 바인딩하고 이를 인증된 암호화를 지원하기 위한 추가 인증 데이터로 사용합니다.

VPC Lattice와 TLS 연결 관리자에서 TLS 키를 사용하는 경우, 저장된 키를 암호화하는 데 사용되는 암호화 컨텍스트에 VPC Lattice 서비스의 이름이 포함됩니다. 다음 섹션과 같이 CloudTrail 로그의 암호화 컨텍스트를 보거나 ACM 콘솔의 **연결된 리소스** 탭을 확인하여 인증서와 프라이빗 키가 사용되는 VPC Lattice 서비스를 확인할 수 있습니다.

데이터를 해독하기 위해 동일한 암호화 컨텍스트를 요청에 포함시킵니다. VPC Lattice는 모든 AWS KMS 암호화 작업에서 동일한 암호화 컨텍스트를 사용합니다. 여기서 키는 `aws:vpc-lattice:arn`이고 값은 VPC Lattice 서비스의 Amazon 리소스 이름(ARN)입니다.

다음 예시에서는 작업(예: `CreateGrant`) 출력의 암호화 컨텍스트를 보여줍니다.

```
"encryptionContextEquals": {
    "aws:acm:arn": "arn:aws:acm:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
    "aws:vpc-lattice:arn": "arn:aws:vpc-lattice:us-west-2:111122223333:service/svc-0b23c1234567890ab"
}
```

#### VPC Lattice의 암호화 키 모니터링
<a name="monitoring-encryption-keys"></a>

VPC Lattice 서비스와 함께 AWS 관리형 키를 사용하는 경우 [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/)를 사용하여 VPC Lattice가 보내는 요청을 추적할 수 있습니다 AWS KMS.

**CreateGrant**  
VPC Lattice 서비스에 ACM 인증서를 추가하면 사용자를 대신하여 TLS 연결 관리자가 ACM 인증서와 연결된 프라이빗 키를 해독할 수 있도록 해달라는 `CreateGrant` 요청이 전송됩니다.

**CloudTrail**, 이벤트 **기록**, **CreateGrant**에서 `CreateGrant` 작업을 이벤트로 볼 수 있습니다.

다음은 `CreateGrant` 작업에 대한 CloudTrail 이벤트 기록의 이벤트 레코드 예제입니다.

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "IAMUser",
        "principalId": "EX_PRINCIPAL_ID",
        "arn": "arn:aws:iam::111122223333:user/Alice",
        "accountId": "111122223333",
        "accessKeyId": "EXAMPLE_KEY_ID",
        "sessionContext": {
            "sessionIssuer": {
                "type": "IAMUser",
                "principalId": "EX_PRINCIPAL_ID",
                "arn": "arn:aws:iam::111122223333:user/Alice",
                "accountId": "111122223333",
                "userName": "Alice"
            },
            "webIdFederationData": {},
            "attributes": {
                "creationDate": "2023-02-06T23:30:50Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "acm.amazonaws.com"
    },
    "eventTime": "2023-02-07T00:07:18Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "CreateGrant",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "acm.amazonaws.com",
    "userAgent": "acm.amazonaws.com",
    "requestParameters": {
        "granteePrincipal": "tlsconnectionmanager.amazonaws.com",
        "keyId": "1234abcd-12ab-34cd-56ef-1234567890ab",
        "operations": [
            "Decrypt"
        ],
        "constraints": {
            "encryptionContextEquals": {
                "aws:acm:arn": "arn:aws:acm:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
                "aws:vpc-lattice:arn": "arn:aws:vpc-lattice:us-west-2:111122223333:service/svc-0b23c1234567890ab"
            }
        },
        "retiringPrincipal": "acm.us-west-2.amazonaws.com"
    },
    "responseElements": {
        "grantId": "f020fe75197b93991dc8491d6f19dd3cebb24ee62277a05914386724f3d48758",
        "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    },
    "requestID": "ba178361-8ab6-4bdd-9aa2-0d1a44b2974a",
    "eventID": "8d449963-1120-4d0c-9479-f76de11ce609",
    "readOnly": false,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```

위 `CreateGrant` 예제에서 피부여자 보안 주체는 TLS Connection Manager이고 암호화 컨텍스트에는 VPC Lattice 서비스 ARN이 있습니다.

**ListGrants**  
KMS 키 ID와 계정 ID를 사용하여 `ListGrants` API를 호출할 수 있습니다. 그러면 지정된 KMS 키에 대한 모든 권한 부여 목록이 표시됩니다. 자세한 내용은 [ListGrants를](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html) 참조하세요.

에서 다음 `ListGrants` 명령을 사용하여 모든 권한 부여의 세부 정보를 AWS CLI 확인합니다.

```
aws kms list-grants —key-id your-kms-key-id
```

다음은 예제 출력입니다.

```
{
    "Grants": [
        {
            "Operations": [
                "Decrypt"
            ], 
            "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", 
            "Name": "IssuedThroughACM", 
            "RetiringPrincipal": "acm.us-west-2.amazonaws.com", 
            "GranteePrincipal": "tlsconnectionmanager.amazonaws.com", 
            "GrantId": "f020fe75197b93991dc8491d6f19dd3cebb24ee62277a05914386724f3d48758", 
            "IssuingAccount": "arn:aws:iam::111122223333:root", 
            "CreationDate": "2023-02-06T23:30:50Z", 
            "Constraints": {
                "encryptionContextEquals": {
                  "aws:acm:arn": "arn:aws:acm:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
                  "aws:vpc-lattice:arn": "arn:aws:vpc-lattice:us-west-2:111122223333:service/svc-0b23c1234567890ab"
                }
            }
        }
    ]
}
```

위 `ListGrants` 예제에서 피부여자 보안 주체는 TLS Connection Manager이고 암호화 컨텍스트에는 VPC Lattice 서비스 ARN이 있습니다.

**Decrypt**  
VPC Lattice는 VPC Lattice 서비스에서 TLS 연결을 제공하기 위해 TLS 연결 관리자를 사용하여 프라이빗 키를 해독하는 `Decrypt` 작업을 호출합니다. **CloudTrail** 이벤트 **기록**, **암호 해독**에서 `Decrypt` 작업을 이벤트로 볼 수 있습니다.

다음은 `Decrypt` 작업에 대한 CloudTrail 이벤트 기록의 예제 이벤트 레코드입니다.

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AWSService",
        "invokedBy": "tlsconnectionmanager.amazonaws.com"
    },
    "eventTime": "2023-02-07T00:07:23Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "Decrypt",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "tlsconnectionmanager.amazonaws.com",
    "userAgent": "tlsconnectionmanager.amazonaws.com",
    "requestParameters": {
        "encryptionContext": {
            "aws:acm:arn": "arn:aws:acm:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "aws:vpc-lattice:arn": "arn:aws:vpc-lattice:us-west-2:111122223333:service/svc-0b23c1234567890ab"
        },
        "encryptionAlgorithm": "SYMMETRIC_DEFAULT"
    },
    "responseElements": null,
    "requestID": "12345126-30d5-4b28-98b9-9153da559963",
    "eventID": "abcde202-ba1a-467c-b4ba-f729d45ae521",
    "readOnly": true,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "sharedEventID": "abcde202-ba1a-467c-b4ba-f729d45ae521",
    "eventCategory": "Management"
}
```

# Amazon VPC Lattice용 Identity and Access Management
<a name="security-iam"></a>

다음 섹션에서는 VPC Lattice API 작업을 수행할 수 있는 사용자를 제어하여 AWS Identity and Access Management (IAM)를 사용하여 VPC Lattice 리소스를 보호하는 방법을 설명합니다.

**Topics**
+ [Amazon VPC Lattice가 IAM과 작동하는 방식](security_iam_service-with-iam.md)
+ [Amazon VPC Lattice API 권한](additional-api-permissions.md)
+ [Amazon VPC Lattice의 자격 증명 기반 정책](security_iam_id-based-policies.md)
+ [Amazon VPC Lattice에 서비스 연결 역할 사용](using-service-linked-roles.md)
+ [AWS Amazon VPC Lattice에 대한 관리형 정책](managed-policies.md)

# Amazon VPC Lattice가 IAM과 작동하는 방식
<a name="security_iam_service-with-iam"></a>

IAM을 사용하여 VPC Lattice에 대한 액세스를 관리하기 전에 VPC Lattice에서 사용할 수 있는 IAM 기능을 알아봅니다.




| IAM 특성 | VPC Lattice 지원 | 
| --- | --- | 
|  [자격 증명 기반 정책](#security_iam_service-with-iam-id-based-policies)  |   예  | 
|  [리소스 기반 정책](#security_iam_service-with-iam-resource-based-policies)  |   예  | 
|  [정책 작업](#security_iam_service-with-iam-id-based-policies-actions)  |   예  | 
|  [정책 리소스](#security_iam_service-with-iam-id-based-policies-resources)  |   예  | 
|  [정책 조건 키](#security_iam_service-with-iam-id-based-policies-conditionkeys)  |   예  | 
|  [ACL](#security_iam_service-with-iam-acls)  |   아니요   | 
|  [ABAC(정책의 태그)](#security_iam_service-with-iam-tags)  |   예  | 
|  [임시 보안 인증](#security_iam_service-with-iam-roles-tempcreds)  |   예  | 
|  [서비스 역할](#security_iam_service-with-iam-roles-service)  |   아니요   | 
|  [서비스 연결 역할](#security_iam_service-with-iam-roles-service-linked)  |   예  | 

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

## VPC Lattice에 대한 자격 증명 기반 IAM 정책
<a name="security_iam_service-with-iam-id-based-policies"></a>

**ID 기반 정책 지원:** 예

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

IAM ID 기반 정책을 사용하면 허용되거나 거부되는 작업과 리소스뿐 아니라 작업이 허용되거나 거부되는 조건을 지정할 수 있습니다. JSON 정책에서 사용할 수 있는 모든 요소에 대해 알아보려면 *IAM 사용 설명서*의 [IAM JSON 정책 요소 참조](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html)를 참조하세요.

## VPC Lattice 내 리소스 기반 정책
<a name="security_iam_service-with-iam-resource-based-policies"></a>

**리소스 기반 정책 지원:** 예

리소스 기반 정책은의 리소스에 연결하는 JSON 정책 문서입니다 AWS. 리소스 기반 정책을 지원하는 AWS 서비스에서 서비스 관리자는 이를 사용하여 해당 AWS 서비스의 특정 리소스에 대한 액세스를 제어할 수 있습니다. 정책이 연결된 리소스의 경우 정책은 지정된 보안 주체가 해당 리소스와 어떤 조건에서 어떤 작업을 수행할 수 있는지를 정의합니다. 리소스 기반 정책에서 보안 주체를 지정해야 합니다.

VPC Lattice는 서비스 네트워크의 서비스에 대한 액세스를 제어할 수 있는 리소스 기반 정책인 *인증 정책*을 지원합니다. 자세한 내용은 [인증 정책을 사용하여 VPC Lattice 서비스에 대한 액세스 제어](auth-policies.md) 단원을 참조하십시오.

VPC Lattice는 AWS Resource Access Manager에 통합하기 위한 리소스 기반 권한 정책도 지원합니다. 이러한 리소스 기반 정책을 사용하여 서비스, 리소스 구성 및 서비스 네트워크에 대해 다른 AWS 계정 또는 조직에 대한 연결을 관리할 수 있는 권한을 부여할 수 있습니다. 자세한 내용은 [VPC Lattice 엔터티 공유](sharing.md) 단원을 참조하십시오.

## VPC Lattice에 대한 정책 조치
<a name="security_iam_service-with-iam-id-based-policies-actions"></a>

**정책 작업 지원:** 예

IAM 정책 설명에는 IAM을 지원하는 모든 서비스의 모든 API 작업을 지정할 수 있습니다. VPC Lattice의 경우 API 작업인 `vpc-lattice:`에 다음 접두사를 사용합니다. 예를 들어, `vpc-lattice:CreateService`, `vpc-lattice:CreateTargetGroup` 및 `vpc-lattice:PutAuthPolicy`입니다.

명령문 하나에 여러 태스크를 지정하려면 다음과 같이 쉼표로 구분합니다.

```
"Action": [ "vpc-lattice:action1", "vpc-lattice:action2" ]
```

와일드카드를 사용하여 여러 작업을 지정할 수도 있습니다. 예를 들어 다음과 같이 이름이 `Get`으로 시작되는 모든 작업을 지정할 수 있습니다.

```
"Action": "vpc-lattice:Get*"
```

VPC Lattice API 작업 목록을 보려면 *서비스 권한 부여 참조*에서 [Amazon VPC Lattice에서 정의한 작업](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonvpclattice.html#amazonvpclattice-actions-as-permissions)을 참조하세요.

## VPC Lattice를 위한 정책 리소스
<a name="security_iam_service-with-iam-id-based-policies-resources"></a>

**정책 리소스 지원:** 예

IAM 정책 구문에서 `Resource` 요소는 명령문이 다루는 하나 이상의 객체를 지정합니다. VPC Lattice의 경우 각 IAM 정책문은 ARN을 사용하여 지정한 리소스에 적용됩니다.

특정 Amazon 리소스 이름(ARN) 형식은 리소스에 따라 다릅니다. ARN을 제공할 때 *기울임꼴* 텍스트를 리소스별 정보로 바꿉니다.
+ **액세스 로그 구독:**

  ```
  "Resource": "arn:aws:vpc-lattice:region:account-id:accesslogsubscription/access-log-subscription-id"
  ```
+ **리스너:**

  ```
  "Resource": "arn:aws:vpc-lattice:region:account-id:service/service-id/listener/listener-id"
  ```
+ **리소스 게이트웨이**

  ```
  "Resource": "arn:aws:vpc-lattice:region:account-id:resourcegateway/resource-gateway-id"
  ```
+ **리소스 구성**

  ```
  "Resource": "arn:aws:vpc-lattice:region:account-id:resourceconfiguration/resource-configuration-id"
  ```
+ **규칙:**

  ```
  "Resource": "arn:aws:vpc-lattice:region:account-id:service/service-id/listener/listener-id/rule/rule-id"
  ```
+ **서비스:**

  ```
  "Resource": "arn:aws:vpc-lattice:region:account-id:service/service-id"
  ```
+ **서비스 네트워크:**

  ```
  "Resource": "arn:aws:vpc-lattice:region:account-id:servicenetwork/service-network-id"
  ```
+ **서비스 네트워크 서비스 연결:**

  ```
  "Resource": "arn:aws:vpc-lattice:region:account-id:servicenetworkserviceassociation/service-network-service-association-id"
  ```
+ **서비스 네트워크 리소스 구성 연결**

  ```
  "Resource": "arn:aws:vpc-lattice:region:account-id:servicenetworkresourceassociation/service-network-resource-association-id"
  ```
+ **서비스 네트워크 VPC 연결:**

  ```
  "Resource": "arn:aws:vpc-lattice:region:account-id:servicenetworkvpcassociation/service-network-vpc-association-id"
  ```
+ **대상 그룹:**

  ```
  "Resource": "arn:aws:vpc-lattice:region:account-id:targetgroup/target-group-id"
  ```

## VPC Lattice에 사용되는 정책 조건 키
<a name="security_iam_service-with-iam-id-based-policies-conditionkeys"></a>

**서비스별 정책 조건 키 지원:** 예

관리자는 AWS JSON 정책을 사용하여 누가 무엇에 액세스할 수 있는지 지정할 수 있습니다. 즉, 어떤 **보안 주체**가 어떤 **리소스**와 어떤 **조건**에서 **작업**을 수행할 수 있는지를 지정할 수 있습니다.

`Condition` 요소는 정의된 기준에 따라 문이 실행되는 시기를 지정합니다. 같음(equals) 또는 미만(less than)과 같은 [조건 연산자](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)를 사용하여 정책의 조건을 요청의 값과 일치시키는 조건식을 생성할 수 있습니다. 모든 AWS 전역 조건 키를 보려면 *IAM 사용 설명서*의 [AWS 전역 조건 컨텍스트 키를](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html) 참조하세요.

VPC Lattice 조건 키 목록을 보려면 *서비스 승인* 참조의 [Amazon VPC Lattice에 사용되는 조건 키를](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonvpclattice.html#amazonvpclattice-policy-keys) 참조하세요.

AWS 는 전역 조건 키와 서비스별 조건 키를 지원합니다. AWS 전역 조건 키에 대한 자세한 내용은 *IAM 사용 설명서*의 [AWS 전역 조건 컨텍스트 키를](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html) 참조하세요.

## VPC Lattice의 액세스 제어 목록(ACL)
<a name="security_iam_service-with-iam-acls"></a>

**ACL 지원:** 아니요 

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

## VPC Lattice에서 ABAC(속성 기반 액세스 제어)
<a name="security_iam_service-with-iam-tags"></a>

**ABAC 지원(정책의 태그):** 예

속성 기반 액세스 제어(ABAC)는 태그라고 불리는 속성을 기반으로 권한을 정의하는 권한 부여 전략입니다. IAM 엔터티 및 AWS 리소스에 태그를 연결한 다음 보안 주체의 태그가 리소스의 태그와 일치할 때 작업을 허용하는 ABAC 정책을 설계할 수 있습니다.

태그에 근거하여 액세스를 제어하려면 `aws:ResourceTag/key-name`, `aws:RequestTag/key-name`또는 `aws:TagKeys`조건 키를 사용하여 정책의 [조건 요소](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)에 태그 정보를 제공합니다.

서비스가 모든 리소스 유형에 대해 세 가지 조건 키를 모두 지원하는 경우, 값은 서비스에 대해 **예**입니다. 서비스가 일부 리소스 유형에 대해서만 세 가지 조건 키를 모두 지원하는 경우, 값은 **부분적**입니다.

ABAC에 대한 자세한 내용은 *IAM 사용 설명서*의 [ABAC 권한 부여를 통한 권한 정의](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html)를 참조하세요. ABAC 설정 단계가 포함된 자습서를 보려면 *IAM 사용 설명서*의 [속성 기반 액세스 제어(ABAC) 사용](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html)을 참조하세요.

## VPC Lattice에서 임시 보안 인증 사용
<a name="security_iam_service-with-iam-roles-tempcreds"></a>

**임시 자격 증명 지원:** 예

임시 자격 증명은 AWS 리소스에 대한 단기 액세스를 제공하며 페더레이션 또는 전환 역할을 사용할 때 자동으로 생성됩니다. 장기 액세스 키를 사용하는 대신 임시 자격 증명을 동적으로 생성하는 것이 AWS 좋습니다. 자세한 내용은 *IAM 사용 설명서*의 [IAM의 임시 보안 자격 증명](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html) 및 [IAM으로 작업하는AWS 서비스](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html) 섹션을 참조하세요.

## VPC Lattice의 서비스 역할
<a name="security_iam_service-with-iam-roles-service"></a>

**서비스 역할 지원:** 아니요 

 서비스 역할은 서비스가 사용자를 대신하여 작업을 수행하는 것으로 가정하는 [IAM 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)입니다. IAM 관리자는 IAM 내에서 서비스 역할을 생성, 수정 및 삭제할 수 있습니다. 자세한 내용은 *IAM 사용 설명서*의 [AWS 서비스 AWS에 권한을 위임할 역할 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)을 참조하세요.

**주의**  
서비스 역할에 대한 권한을 변경하면 VPC Lattice 기능이 중단될 수 있습니다. VPC Lattice에서 관련 지침을 제공하는 경우에만 서비스 역할을 편집합니다.

## VPC Lattice의 서비스 연결 역할
<a name="security_iam_service-with-iam-roles-service-linked"></a>

**서비스 연결 역할 지원:** 예

 서비스 연결 역할은에 연결된 서비스 역할의 한 유형입니다 AWS 서비스. 서비스는 사용자를 대신하여 작업을 수행하기 위해 역할을 수임할 수 있습니다. 서비스 연결 역할은에 표시 AWS 계정 되며 서비스가 소유합니다. IAM 관리자는 서비스 연결 역할의 권한을 볼 수 있지만 편집은 할 수 없습니다.

VPC Lattice 서비스 연결 역할을 생성하거나 관리하는 방법에 대한 자세한 내용은 [Amazon VPC Lattice에 서비스 연결 역할 사용](using-service-linked-roles.md) 단원을 참조하세요.

# Amazon VPC Lattice API 권한
<a name="additional-api-permissions"></a>

[VPC Lattice에 대한 정책 조치](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies-actions)에 설명된 대로 필요한 VPC Lattice API 작업을 호출할 수 있는 IAM 자격 증명(예: 사용자 또는 역할)을 부여해야 합니다. 또한 일부 VPC Lattice 작업의 경우 다른 AWS APIs에서 특정 작업을 호출할 수 있는 IAM 자격 증명 권한을 부여해야 합니다.

## API에 필요한 권한
<a name="required-API-permissions"></a>

API에서 다음 작업을 호출할 때 지정된 작업을 호출할 수 있는 IAM 사용자 권한을 부여해야 합니다.

`CreateResourceConfiguration`  
+ `vpc-lattice:CreateResourceConfiguration`
+ `ec2:DescribeSubnets`
+ `rds:DescribeDBInstances`
+ `rds:DescribeDBClusters`

`CreateResourceGateway`  
+ `vpc-lattice:CreateResourceGateway`
+ `ec2:AssignPrivateIpAddresses`
+ `ec2:AssignIpv6Addresses`
+ `ec2:CreateNetworkInterface`
+ `ec2:CreateNetworkInterfacePermission`
+ `ec2:DeleteNetworkInterface`
+ `ec2:DescribeNetworkInterfaces`
+ `ec2:DescribeSecurityGroups`
+ `ec2:DescribeSubnets`

`DeleteResourceGateway`  
+ `vpc-lattice:DeleteResourceGateway`
+ `ec2:DeleteNetworkInterface`

`UpdateResourceGateway`  
+ `vpc-lattice:UpdateResourceGateway`
+ `ec2:AssignPrivateIpAddresses`
+ `ec2:AssignIpv6Addresses`
+ `ec2:UnassignPrivateIpAddresses`
+ `ec2:CreateNetworkInterface`
+ `ec2:CreateNetworkInterfacePermission`
+ `ec2:DeleteNetworkInterface`
+ `ec2:DescribeNetworkInterfaces`
+ `ec2:DescribeSecurityGroups`
+ `ec2:DescribeSubnets`
+ `ec2:ModifyNetworkInterfaceAttribute`

`CreateServiceNetworkResourceAssociation`  
+ `vpc-lattice:CreateServiceNetworkResourceAssociation`
+ `ec2:AssignIpv6Addresses`
+ `ec2:CreateNetworkInterface`
+ `ec2:CreateNetworkInterfacePermission`
+ `ec2:DescribeNetworkInterfaces`

`CreateServiceNetworkVpcAssociation`  
+ `vpc-lattice:CreateServiceNetworkVpcAssociation`
+ `ec2:DescribeVpcs`
+ `ec2:DescribeSecurityGroups`(보안 그룹이 제공된 경우에만 필요)

`UpdateServiceNetworkVpcAssociation`  
+ `vpc-lattice:UpdateServiceNetworkVpcAssociation`
+ `ec2:DescribeSecurityGroups`(보안 그룹이 제공된 경우에만 필요)

`CreateTargetGroup`  
+ `vpc-lattice:CreateTargetGroup`
+ `ec2:DescribeVpcs`

`RegisterTargets`  
+ `vpc-lattice:RegisterTargets`
+ `ec2:DescribeInstances`(대상 그룹 유형이 `INSTANCE`인 경우에만 필요)
+ `ec2:DescribeVpcs`(대상 그룹 유형이 `INSTANCE` 또는 `IP`인 경우에만 필요)
+ `ec2:DescribeSubnets`(대상 그룹 유형이 `INSTANCE` 또는 `IP`인 경우에만 필요)
+ `lambda:GetFunction`(대상 그룹 유형이 `LAMBDA`인 경우에만 필요)
+ `lambda:AddPermission`(대상 그룹에 지정된 Lambda 함수를 호출할 권한이 아직 없는 경우에만 필요)

`DeregisterTargets`  
+ `vpc-lattice:DeregisterTargets`

`CreateAccessLogSubscription`  
+ `vpc-lattice:CreateAccessLogSubscription`
+ `logs:GetLogDelivery`
+ `logs:CreateLogDelivery`

`DeleteAccessLogSubscription`  
+ `vpc-lattice:DeleteAccessLogSubscription`
+ `logs:DeleteLogDelivery`

`UpdateAccessLogSubscription`  
+ `vpc-lattice:UpdateAccessLogSubscription`
+ `logs:UpdateLogDelivery`

# Amazon VPC Lattice의 자격 증명 기반 정책
<a name="security_iam_id-based-policies"></a>

기본적으로 사용자 및 역할은 Amazon VPC Lattice 리소스를 생성하거나 수정할 수 있는 권한이 없습니다. 사용자에게 사용자가 필요한 리소스에서 작업을 수행할 권한을 부여하려면 IAM 관리자가 IAM 정책을 생성하면 됩니다.

이러한 예제 JSON 정책 문서를 사용하여 IAM ID 기반 정책을 생성하는 방법을 알아보려면 *IAM 사용 설명서*의 [IAM 정책 생성(콘솔)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)을 참조하세요.

각 리소스 유형에 대한 ARN 형식을 포함하여 VPC Lattice에서 정의한 작업 및 리소스 유형에 대한 자세한 내용은 *서비스 인증 참조*에서 [Amazon VPC Lattice에 대한 작업, 리소스 및 조건 키](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonvpclattice.html)를 참조하세요.

**Topics**
+ [정책 모범 사례](#security_iam_service-with-iam-policy-best-practices)
+ [전체 액세스에 필요한 추가 권한](#security_iam_id-based-policy-additional-permissions)
+ [VPC Lattice에 대한 자격 증명 기반 정책 예시](#security_iam_id-based-policy-examples)

## 정책 모범 사례
<a name="security_iam_service-with-iam-policy-best-practices"></a>

자격 증명 기반 정책에 따라 계정에서 사용자가 VPC Lattice 리소스를 생성, 액세스 또는 삭제할 수 있는지 여부가 결정됩니다. 이 작업으로 인해 AWS 계정에 비용이 발생할 수 있습니다. ID 기반 정책을 생성하거나 편집할 때는 다음 지침과 권장 사항을 따르세요.
+ ** AWS 관리형 정책을 시작하고 최소 권한으로 전환 -** 사용자 및 워크로드에 권한 부여를 시작하려면 많은 일반적인 사용 사례에 대한 권한을 부여하는 *AWS 관리형 정책을* 사용합니다. 에서 사용할 수 있습니다 AWS 계정. 사용 사례에 맞는 AWS 고객 관리형 정책을 정의하여 권한을 추가로 줄이는 것이 좋습니다. 자세한 내용은 *IAM 사용 설명서*의 [AWS 관리형 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies) 또는 [AWS 직무에 대한 관리형 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html)을 참조하세요.
+ **최소 권한 적용** – IAM 정책을 사용하여 권한을 설정하는 경우, 작업을 수행하는 데 필요한 권한만 부여합니다. 이렇게 하려면 *최소 권한*으로 알려진 특정 조건에서 특정 리소스에 대해 수행할 수 있는 작업을 정의합니다. IAM을 사용하여 권한을 적용하는 방법에 대한 자세한 정보는 *IAM 사용 설명서*에 있는 [IAM의 정책 및 권한](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)을 참조하세요.
+ **IAM 정책의 조건을 사용하여 액세스 추가 제한** – 정책에 조건을 추가하여 작업 및 리소스에 대한 액세스를 제한할 수 있습니다. 예를 들어, SSL을 사용하여 모든 요청을 전송해야 한다고 지정하는 정책 조건을 작성할 수 있습니다. AWS 서비스와 같은 특정를 통해 사용되는 경우 조건을 사용하여 서비스 작업에 대한 액세스 권한을 부여할 수도 있습니다 CloudFormation. 자세한 내용은 *IAM 사용 설명서*의 [IAM JSON 정책 요소: 조건](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)을 참조하세요.
+ **IAM Access Analyzer를 통해 IAM 정책을 확인하여 안전하고 기능적인 권한 보장** - IAM Access Analyzer에서는 IAM 정책 언어(JSON)와 모범 사례가 정책에서 준수되도록 새로운 및 기존 정책을 확인합니다. IAM Access Analyzer는 100개 이상의 정책 확인 항목과 실행 가능한 추천을 제공하여 안전하고 기능적인 정책을 작성하도록 돕습니다. 자세한 내용은 *IAM 사용 설명서*의 [IAM Access Analyzer에서 정책 검증](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html)을 참조하세요.
+ **다중 인증(MFA) 필요 -**에서 IAM 사용자 또는 루트 사용자가 필요한 시나리오가 있는 경우 추가 보안을 위해 MFA를 AWS 계정켭니다. API 작업을 직접적으로 호출할 때 MFA가 필요하면 정책에 MFA 조건을 추가합니다. 자세한 내용은 *IAM 사용 설명서*의 [MFA를 통한 보안 API 액세스](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html)를 참조하세요.

IAM의 모범 사례에 대한 자세한 내용은 *IAM 사용 설명서*의 [IAM의 보안 모범 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)를 참조하세요.

## 전체 액세스에 필요한 추가 권한
<a name="security_iam_id-based-policy-additional-permissions"></a>

VPC Lattice가 통합된 다른 AWS 서비스와 전체 VPC Lattice 기능 제품군을 사용하려면 특정 추가 권한이 있어야 합니다. [혼동된 대리자](https://docs.aws.amazon.com//IAM/latest/UserGuide/confused-deputy.html) 권한 에스컬레이션 위험 때문에 이러한 권한은 `VPCLatticeFullAccess` 관리형 정책에 포함되지 않습니다.

다음 정책을 역할에 연결하고 `VPCLatticeFullAccess` 관리형 정책과 함께 사용해야 합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "firehose:TagDeliveryStream",
                "lambda:AddPermission",
                "s3:PutBucketPolicy"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:PutResourcePolicy"
            ],
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "aws:CalledVia": [
                        "vpc-lattice.amazonaws.com"
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:AttachRolePolicy",
                "iam:PutRolePolicy"
            ],
            "Resource": "arn:aws:iam::*:role/aws-service-role/vpc-lattice.amazonaws.com/AWSServiceRoleForVpcLattice"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:AttachRolePolicy",
                "iam:PutRolePolicy"
            ],
            "Resource": "arn:aws:iam::*:role/aws-service-role/delivery.logs.amazonaws.com/AWSServiceRoleForLogDelivery*"
        }
    ]
}
```

------

이 정책은 다음과 같은 추가 권한을 제공합니다.
+ `iam:AttachRolePolicy`: 지정된 관리형 정책을 지정된 IAM 역할에 연결하도록 허용합니다.
+ `iam:PutRolePolicy`: 지정된 IAM 역할에 포함된 인라인 정책 문서를 추가 또는 업데이트하도록 허용합니다.
+ `s3:PutBucketPolicy`: Amazon S3 버킷에 버킷 정책을 적용하도록 허용합니다.
+ `firehose:TagDeliveryStream`: Firehose 전송 스트림에 태그를 추가 또는 업데이트하도록 허용합니다.

## VPC Lattice에 대한 자격 증명 기반 정책 예시
<a name="security_iam_id-based-policy-examples"></a>

**Topics**
+ [예제 정책: 서비스 네트워크에 대한 VPC 연결 관리](#security_iam_id-based-policy-examples-vpc-to-service-network-association)
+ [예제 정책: 서비스 네트워크에 대한 서비스 연결 생성](#security_iam_id-based-policy-examples-service-to-service-network-association)
+ [예제 정책: 리소스에 태그 추가](#security_iam_id-based-policy-examples-tag-resources)
+ [예제 정책: 서비스 연결 역할 생성](#security_iam_id-based-policy-examples-service-linked-role)

### 예제 정책: 서비스 네트워크에 대한 VPC 연결 관리
<a name="security_iam_id-based-policy-examples-vpc-to-service-network-association"></a>

다음 예시는 이 정책의 사용자에게 서비스 네트워크에 대한 VPC 연결을 생성, 업데이트, 삭제할 수 있는 권한을 부여하는 정책을 보여줍니다. 단, 조건에 지정된 VPC와 서비스 네트워크에 한합니다. 조건 키 지정에 대한 자세한 내용은 [VPC Lattice에 사용되는 정책 조건 키](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies-conditionkeys) 섹션을 참조하세요.

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Allow",
         "Action": [
            "vpc-lattice:CreateServiceNetworkVpcAssociation",
            "vpc-lattice:UpdateServiceNetworkVpcAssociation",
            "vpc-lattice:DeleteServiceNetworkVpcAssociation"
         ],
         "Resource": [
            "*"
         ],
         "Condition": {
            "StringEquals": { 
               "vpc-lattice:ServiceNetworkArn": "arn:aws:vpc-lattice:us-west-2:123456789012:servicenetwork/sn-903004f88example",
               "vpc-lattice:VpcId": "vpc-1a2b3c4d"
            }
         }
      }
   ]
}
```

------

### 예제 정책: 서비스 네트워크에 대한 서비스 연결 생성
<a name="security_iam_id-based-policy-examples-service-to-service-network-association"></a>

조건 키를 사용하여 VPC Lattice 리소스에 대한 액세스를 제어하지 않는 경우 `Resource` 요소에 리소스의 ARN을 지정하여 대신 액세스를 제어할 수 있습니다.

다음 예시는 이 정책의 사용자가 `CreateServiceNetworkServiceAssociation` API 작업에 사용할 수 있는 서비스 및 서비스 네트워크의 ARN을 지정하여 서비스 연결을 서비스 네트워크로 제한하는 정책을 보여줍니다. ARN 값을 지정하는 방법에 대한 자세한 내용은 [VPC Lattice를 위한 정책 리소스](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies-resources) 섹션을 참조하세요.

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Allow",
         "Action": [
            "vpc-lattice:CreateServiceNetworkServiceAssociation"
         ],
         "Resource": [
            "arn:aws:vpc-lattice:us-west-2:123456789012:servicenetworkserviceassociation/*",
            "arn:aws:vpc-lattice:us-west-2:123456789012:service/svc-04d5cc9b88example",
            "arn:aws:vpc-lattice:us-west-2:123456789012:servicenetwork/sn-903004f88example"
         ]
      }
   ]
}
```

------

### 예제 정책: 리소스에 태그 추가
<a name="security_iam_id-based-policy-examples-tag-resources"></a>

다음 예시는 이 정책의 사용자에게 VPC Lattice 리소스에 태그를 생성할 수 있는 권한을 부여하는 정책을 보여줍니다.

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Allow",
         "Action": [
            "vpc-lattice:TagResource"
         ],
         "Resource": "arn:aws:vpc-lattice:us-west-2:123456789012:*/*"
      }
   ]
}
```

------

### 예제 정책: 서비스 연결 역할 생성
<a name="security_iam_id-based-policy-examples-service-linked-role"></a>

VPC Lattice에는의 사용자가 VPC Lattice 리소스를 처음 생성할 때 서비스 연결 역할을 AWS 계정 생성할 수 있는 권한이 필요합니다. 서비스 연결 역할이 아직 존재하지 않으면 VPC Lattice에서 해당 역할을 계정에 생성합니다. 서비스 연결 역할은 사용자를 대신하여 다른를 호출할 수 있도록 VPC Lattice AWS 서비스 에 권한을 부여합니다. 자세한 내용은 [Amazon VPC Lattice에 서비스 연결 역할 사용](using-service-linked-roles.md) 단원을 참조하십시오.

역할 자동 생성이 성공하려면 사용자가 `iam:CreateServiceLinkedRole` 작업에 대한 권한을 보유해야 합니다.

```
"Action": "iam:CreateServiceLinkedRole"
```

다음 예시는 이 정책의 사용자에게 VPC Lattice에 대한 서비스 연결 역할을 생성할 수 있는 권한을 부여하는 정책을 보여줍니다.

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Allow",
         "Action": "iam:CreateServiceLinkedRole",
         "Resource": "arn:aws:iam::*:role/aws-service-role/vpc-lattice.amazonaws.com/AWSServiceRoleForVpcLattice",
         "Condition": {
            "StringLike": {
               "iam:AWSServiceName":"vpc-lattice.amazonaws.com"
            }
         }
      }
   ]
}
```

------

자세한 내용은 *IAM 사용 설명서*의 [서비스 연결 역할 권한](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions)을 참조하세요.

# Amazon VPC Lattice에 서비스 연결 역할 사용
<a name="using-service-linked-roles"></a>

Amazon VPC Lattice는 사용자를 대신하여 다른를 호출하는 데 필요한 권한 AWS 서비스 에 서비스 연결 역할을 사용합니다. 자세한 내용은 *IAM 사용 설명서*의 [서비스 연결 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create-service-linked-role.html)을 참조하세요.

VPC Lattice는 라는 서비스 연결 역할을 사용합니다AWSServiceRoleForVpcLattice.

## VPC Lattice의 서비스 연결 역할 권한
<a name="slr-permissions"></a>

**AWSServiceRoleForVpcLattice** 서비스 연결 역할은 다음 서비스를 신뢰하여 역할을 위임합니다.
+ `vpc-lattice.amazonaws.com`

AWSVpcLatticeServiceRolePolicy라는 이름이 지정된 역할 권한 정책은 VPC Lattice가 `AWS/VpcLattice` 네임스페이스에 CloudWatch 지표를 게시할 수 있도록 허용합니다. 자세한 내용은 관리형 정책 참조[https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSVpcLatticeServiceRolePolicy.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSVpcLatticeServiceRolePolicy.html)의 섹션을 참조하세요. *AWS * 

IAM 엔터티(사용자, 그룹, 역할 등)가 서비스 연결 역할을 생성하고 편집하거나 삭제할 수 있도록 권한을 구성할 수 있습니다. 자세한 내용은 [예제 정책: 서비스 연결 역할 생성](security_iam_id-based-policies.md#security_iam_id-based-policy-examples-service-linked-role) 단원을 참조하십시오.

## VPC Lattice에 대한 서비스 연결 역할 생성
<a name="create-slr"></a>

서비스 연결 역할은 수동으로 생성할 필요가 없습니다. AWS Management Console AWS CLI, 또는 AWS API에서 VPC Lattice 리소스를 생성하면 VPC Lattice가 서비스 연결 역할을 생성합니다.

이 서비스 연결 역할을 삭제했다가 다시 생성해야 하는 경우 동일한 프로세스를 사용하여 계정에서 역할을 다시 생성할 수 있습니다. VPC Lattice 리소스를 생성하면 VPC Lattice에서 서비스 연결 역할이 다시 생성됩니다.

## VPC Lattice에 대한 서비스 연결 역할 편집
<a name="edit-slr"></a>

IAM을 사용하여 **AWSServiceRoleForVpcLattice**의 설명을 편집할 수 있습니다. 자세한 내용은 *IAM 사용 설명서*의 [서비스 연결 역할 설명 편집](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_update-service-linked-role.html#edit-service-linked-role-iam-console)을 참조하세요.

## VPC Lattice에 대한 서비스 연결 역할 삭제
<a name="delete-slr"></a>

Amazon VPC Lattice를 더 이상 사용할 필요가 없다면 **AWSServiceRoleForVpcLattice**를 삭제하는 것이 좋습니다.

이 서비스 연결 역할은 AWS 계정에서 모든 VPC Lattice 연결을 삭제한 후에만 삭제할 수 있습니다.

IAM 콘솔 AWS CLI, 또는 AWS API를 사용하여 **AWSServiceRoleForVpcLattice** 서비스 연결 역할을 삭제합니다. 자세한 내용은 *IAM 사용 설명서*의 [서비스 연결 역할 삭제](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_delete.html#id_roles_manage_delete_slr)를 참조하세요.

서비스 연결 역할을 삭제한 후 AWS 계정에서 VPC Lattice 리소스를 생성하면 VPC Lattice에서 역할이 다시 생성됩니다.

## VPC Lattice 서비스 연결 역할에 대해 지원되는 리전
<a name="slr-regions"></a>

VPC Lattice에서는 서비스를 사용할 수 있는 모든 리전에서 서비스 연결 역할 사용을 지원합니다.

# AWS Amazon VPC Lattice에 대한 관리형 정책
<a name="managed-policies"></a>

 AWS 관리형 정책은에서 생성하고 관리하는 독립 실행형 정책입니다 AWS. AWS 관리형 정책은 사용자, 그룹 및 역할에 권한 할당을 시작할 수 있도록 많은 일반적인 사용 사례에 대한 권한을 제공하도록 설계되었습니다.

 AWS 관리형 정책은 모든 AWS 고객이 사용할 수 있으므로 특정 사용 사례에 대해 최소 권한을 부여하지 않을 수 있습니다. 사용 사례에 고유한 [고객 관리형 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#customer-managed-policies)을 정의하여 권한을 줄이는 것이 좋습니다.

 AWS 관리형 정책에 정의된 권한은 변경할 수 없습니다. 가 관리형 정책에 정의된 권한을 AWS 업데이트하는 AWS 경우 업데이트는 정책이 연결된 모든 보안 주체 자격 증명(사용자, 그룹 및 역할)에 영향을 줍니다. AWS AWS 서비스 는 새가 시작되거나 기존 서비스에 새 API 작업을 사용할 수 있게 될 때 AWS 관리형 정책을 업데이트할 가능성이 높습니다.

자세한 내용은 *IAM 사용자 가이드*의 [AWS 관리형 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)을 참조하세요.

## AWS 관리형 정책: VPCLatticeFullAccess
<a name="vpc-lattice-fullaccess-policy"></a>

이 정책은 Amazon VPC Lattice에 대한 전체 액세스 권한과 다른 종속 서비스에 대한 제한된 액세스 권한을 제공합니다. 이 정책에는 다음을 수행할 권한이 포함되어 있습니다.
+ ACM – 사용자 지정 도메인 이름에 대한 SSL/TLS 인증서 ARN을 검색합니다.
+ CloudWatch – 액세스 로그와 모니터링 데이터를 확인합니다.
+ CloudWatch Logs – CloudWatch Logs에 액세스 로그를 설정하고 전송합니다.
+ Amazon EC2 - 네트워크 인터페이스를 구성하고 EC2 인스턴스 및 VPCs 대한 정보를 검색합니다. 이는 리소스 구성, 리소스 게이트웨이 및 대상 그룹을 생성하고, VPC Lattice 엔터티 연결을 구성하고, 대상을 등록하는 데 사용됩니다.
+ Elastic Load Balancing – Application Load Balancer에 대한 정보를 검색하여 대상으로 등록합니다.
+ Firehose - 액세스 로그를 저장하는 데 사용되는 전송 스트림에 대한 정보를 검색합니다.
+ Lambda – Lambda 함수에 대한 정보를 검색하여 대상으로 등록합니다.
+ Amazon RDS - RDS 클러스터 및 인스턴스에 대한 정보를 검색합니다.
+ Amazon S3 – 액세스 로그를 저장하는 데 사용되는 S3 버킷에 대한 정보를 검색합니다.

이 정책의 권한을 보려면 *AWS 관리형 정책 참조*에서 [VPCLatticeFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/VPCLatticeFullAccess.html)를 참조하세요.

VPC Lattice가 통합된 다른 AWS 서비스와 전체 VPC Lattice 기능 제품군을 사용하려면 특정 추가 권한이 있어야 합니다. [혼동된 대리자](https://docs.aws.amazon.com//IAM/latest/UserGuide/confused-deputy.html) 권한 에스컬레이션 위험 때문에 이러한 권한은 `VPCLatticeFullAccess` 관리형 정책에 포함되지 않습니다. 자세한 내용은 [전체 액세스에 필요한 추가 권한](security_iam_id-based-policies.md#security_iam_id-based-policy-additional-permissions) 단원을 참조하십시오.

## AWS 관리형 정책: VPCLatticeReadOnlyAccess
<a name="vpc-lattice-read-onlyaccess-policy"></a>

이 정책은 Amazon VPC Lattice에 대한 읽기 전용 액세스 권한과 기타 종속 서비스에 대한 제한된 액세스 권한을 제공합니다. 이 정책에는 다음을 수행할 권한이 포함되어 있습니다.
+ ACM – 사용자 지정 도메인 이름에 대한 SSL/TLS 인증서 ARN을 검색합니다.
+ CloudWatch – 액세스 로그와 모니터링 데이터를 확인합니다.
+ CloudWatch Logs — 액세스 로그 구독에 대한 로그 전송 정보를 확인합니다.
+ Amazon EC2 – EC2 인스턴스 및 VPC에 대한 정보를 검색하여 대상 그룹을 생성하고 대상을 등록합니다.
+ Elastic Load Balancing – Application Load Balancer에 대한 정보를 검색합니다.
+ Firehose - 액세스 로그 전송을 위한 전송 스트림에 대한 정보를 검색합니다.
+ Lambda – Lambda 함수에 대한 정보를 확인합니다.
+ Amazon RDS - RDS 클러스터 및 인스턴스에 대한 정보를 검색합니다.
+ Amazon S3 – 액세스 로그 전송을 위해 S3 버킷에 대한 정보를 검색합니다.

이 정책의 권한을 보려면 *AWS 관리형 정책 참조*에서 [AmazonVPCFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/VPCLatticeReadOnlyAccess.html)를 참조하세요.

## AWS 관리형 정책: VPCLatticeServicesInvokeAccess
<a name="vpc-lattice-services-invoke-access-policy"></a>

이 정책은 Amazon VPC Lattice 서비스를 호출할 수 있는 액세스 권한을 제공합니다.

이 정책의 권한을 보려면 *AWS 관리형 정책 참조*에서 [VPCLatticeServicesInvokeAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/VPCLatticeServicesInvokeAccess.html)를 참조하세요.

## AWS 관리형 정책: AWSVpcLatticeServiceRolePolicy
<a name="service-linked-role-policy"></a>

이 정책은 **AWSServiceRoleForVpcLattice**이라는 서비스 연결 역할에 연결되어 VPC Lattice가 사용자를 대신하여 작업을 수행할 수 있도록 합니다. IAM 엔터티에 이 정책을 연결할 수 없습니다. 자세한 내용은 [Amazon VPC Lattice에 서비스 연결 역할 사용](using-service-linked-roles.md) 단원을 참조하십시오.

이 정책의 권한을 보려면 *AWS 관리형 정책 참조*의 [AWSVpcLatticeServiceRolePolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSVpcLatticeServiceRolePolicy.html)를 참조하세요.

## AWS 관리형 정책에 대한 VPC Lattice 업데이트
<a name="policy-updates"></a>

이 서비스가 이러한 변경 사항을 추적하기 시작한 이후부터 VPC Lattice의 AWS 관리형 정책 업데이트에 대한 세부 정보를 봅니다. 이 페이지의 변경 사항에 대한 자동 알림을 받아보려면 VPC Lattice 사용 설명서에 대한 RSS 피드를 구독하세요.


| 변경 | 설명 | Date | 
| --- | --- | --- | 
| [VPCLatticeFullAccess](#vpc-lattice-fullaccess-policy) | VPC Lattice는 Amazon RDS 클러스터 및 인스턴스를 설명하는 읽기 전용 권한을 추가합니다. | 2024년 12월 1일 | 
| [VPCLatticeReadOnlyAccess](#vpc-lattice-read-onlyaccess-policy) | VPC Lattice는 Amazon RDS 클러스터 및 인스턴스를 설명하는 읽기 전용 권한을 추가합니다. | 2024년 12월 1일 | 
| [AWSVpcLatticeServiceRolePolicy](#service-linked-role-policy) | VPC Lattice는 VPC Lattice가 요청자 관리형 네트워크 인터페이스를 생성할 수 있는 권한을 추가합니다. | 2024년 12월 1일 | 
| [VPCLatticeFullAccess](#vpc-lattice-fullaccess-policy) | VPC Lattice는 Amazon VPC Lattice에 대한 전체 액세스 권한과 다른 종속 서비스에 대한 제한된 액세스를 허용하는 새 정책을 추가합니다. | 2023년 3월 31일 | 
| [VPCLatticeReadOnlyAccess](#vpc-lattice-read-onlyaccess-policy) | VPC Lattice는 Amazon VPC Lattice에 대한 읽기 전용 액세스 권한과 다른 종속 서비스에 대한 제한된 액세스 권한을 부여하는 새 정책을 추가합니다. | 2023년 3월 31일 | 
| [VPCLatticeServicesInvokeAccess](#vpc-lattice-services-invoke-access-policy) | VPC Lattice는 Amazon VPC Lattice 서비스를 호출할 수 있는 액세스 권한을 부여하는 새 정책을 추가합니다. | 2023년 3월 31일 | 
| [AWSVpcLatticeServiceRolePolicy](#service-linked-role-policy) | VPC Lattice는 서비스 연결 역할에 권한을 추가하여 VPC Lattice가 AWS/VpcLattice 네임스페이스에 CloudWatch 지표를 게시할 수 있도록 합니다. 이 AWSVpcLatticeServiceRolePolicy 정책에 CloudWatch [PutMetricData](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_PutMetricData.html) API 작업을 호출할 수 있는 권한이 포함됩니다. 자세한 내용은 [Amazon VPC Lattice에 서비스 연결 역할 사용](using-service-linked-roles.md) 단원을 참조하십시오. | 2022년 12월 5일 | 
|  VPC Lattice에서 변경 내용 추적 시작  |  VPC Lattice는 AWS 관리형 정책에 대한 변경 사항 추적을 시작했습니다.  | 2022년 12월 5일 | 

# Amazon VPC Lattice의 규정 준수 검증
<a name="compliance-validation"></a>

타사 감사자는 여러 규정 준수 프로그램의 일환으로 Amazon VPC Lattice의 보안 및 AWS 규정 준수를 평가합니다.

 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 서비스참조하세요.

# 인터페이스 엔드포인트를 사용하여 Amazon VPC Lattice에 액세스(AWS PrivateLink)
<a name="vpc-interface-endpoints"></a>

*인터페이스 VPC 엔드포인트*를 생성하여 VPC와 Amazon VPC Lattice 간에 프라이빗 연결을 설정할 수 있습니다. 인터페이스 엔드포인트는 인터넷 게이트웨이[AWS PrivateLink](https://aws.amazon.com/privatelink/), NAT 디바이스, VPN 연결 또는 Direct Connect 연결 없이 VPC Lattice APIs에 비공개로 액세스할 수 있는 기술로 구동됩니다. VPC의 인스턴스는 VPC Lattice API와 통신하는 데 퍼블릭 IP 주소가 필요하지 않습니다.

각 인터페이스 엔드포인트는 서브넷에서 하나 이상의 [네트워크 인터페이스](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html)로 표현됩니다.

## 인터페이스 VPC 엔드포인트에 대한 고려 사항
<a name="vpc-endpoint-considerations"></a>

VPC Lattice에 대한 인터페이스 VPC 엔드포인트를 설정하기 전에 *AWS PrivateLink 가이드*의를 [AWS 서비스 통한 액세스를 AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/privatelink-access-aws-services.html) 검토해야 합니다.

VPC Lattice는 VPC에서 모든 API 작업에 대한 호출 수행을 지원합니다.

## VPC Lattice에 대한 인터페이스 VPC 엔드포인트 생성
<a name="vpc-endpoint-create"></a>

Amazon VPC 콘솔 또는 AWS Command Line Interface ()를 사용하여 VPC Lattice 서비스에 대한 VPC 엔드포인트를 생성할 수 있습니다AWS CLI. 자세한 내용은 *AWS PrivateLink 가이드*의 [인터페이스 VPC 엔드포인트 생성을](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html) 참조하세요.

다음 서비스 이름을 사용하여 VPC Lattice에 대한 VPC 엔드포인트를 생성합니다.

`com.amazonaws.region.vpc-lattice`

엔드포인트에 프라이빗 DNS를 사용하도록 설정하는 경우, 리전에 대한 기본 DNS 이름(예: `vpc-lattice.us-east-1.amazonaws.com`)을 사용하여 VPC Lattice에 API 요청을 할 수 있습니다.

# Amazon VPC Lattice의 복원성
<a name="disaster-recovery-resiliency"></a>

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

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

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

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

# Amazon VPC Lattice의 인프라 보안
<a name="infrastructure-security"></a>

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

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