

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

# Amazon Neptune 데이터 영역 작업을 위한 태그 기반 액세스 제어
<a name="iam-data-tbac"></a>

태그 기반 액세스 제어(TBAC)를 사용하면 AWS 리소스 태그와 IAM 보안 주체 태그를 IAM 정책 및 서비스 제어 정책(SCPs)의 조건으로 사용하여 Amazon Neptune 데이터 영역 작업에 대한 액세스를 제어할 수 있습니다. TBAC를 사용하면 모든 정책에서 특정 클러스터 Amazon 리소스 이름(ARNs)을 열거하지 않고도 태그가 Neptune DB 클러스터의 태그와 일치하는 보안 주체만 해당 클러스터에 대해 `neptune-db:*` 작업을 수행할 수 있도록 할 수 있습니다.

TBAC는 Neptune의 기존 보안 모델을 기반으로 하며 [작업 기반 액세스 제어](iam-dp-actions.md) 데이터 영역 작업을 보완합니다.

## TBAC가 Neptune의 보안 계층에 맞는 방식
<a name="iam-data-tbac-security-layers"></a>

Neptune은 중복되는 여러 보안 메커니즘을 통해 데이터를 보호합니다. TBAC는 모든 권한 부여 계층과 함께 작동하는 속성 기반 권한 부여 계층을 추가합니다.


**Neptune 보안 계층 및 TBAC가 이를 보완하는 방법**  

| 계층 | 메커니즘 | Scope | 
| --- | --- | --- | 
| 네트워크 격리 | Virtual Private Cloud(VPC), 보안 그룹, VPC 엔드포인트(PrivateLink) | Neptune 엔드포인트에 연결할 수 있는 호스트 제어 | 
| 암호화(Encryption) | 전송 중 TLS(전송 계층 보안) 1.3, 저장 시 AWS KMS관리형 암호화 | 데이터 기밀성 보호 | 
| IAM 인증 | AWS Neptune 데이터 엔드포인트에 대한 서명 버전 4(SigV4) 서명 요청 | 호출자 인증 | 
| 작업 기반 액세스 제어 | neptune-db: 작업(ReadDataViaQueryWriteDataViaQuery, 등) | 보안 주체가 수행할 수 있는 작업을 제어합니다. | 
| 조건 키 | neptune-db:QueryLanguage, 글로벌 컨텍스트 키 | 정책에 컨텍스트 제약 조건 추가 | 
| TBAC | aws:ResourceTag/${TagKey}에 대해 평가됨 aws:PrincipalTag/${TagKey} | 보안 주체와 리소스 간의 태그 정렬을 기반으로 액세스를 제한합니다. | 
| 관리 태그 기반 액세스 | aws:ResourceTag관리 영역 작업에 대한 rds:cluster-tag, 등 | Neptune 인프라를 관리할 수 있는 사용자 제어 | 

## 주요 TBAC 개념
<a name="iam-data-tbac-concepts"></a>

보안 주체 태그  
IAM 사용자, 역할 또는 페더레이션 세션 보안 주체에 연결된 태그입니다. IAM 콘솔 AWS CLI또는 ID 제공업체(IdP) 보안 어설션 마크업 언어(SAML)/OpenID Connect(OIDC) 속성 매핑을 통해 이를 설정할 수 있습니다.

리소스 태그  
를 사용하여 Neptune DB 클러스터에 연결된 태그입니다`AddTagsToResource`. 이는 데이터 영역 정책 평가를 위해 클러스터의 모든 인스턴스에 전파됩니다.

조건 키 변수  
+ `aws:PrincipalTag/{{TagKey}}` -가 호출 보안 주체의 태그 값으로 확인됩니다.
+ `aws:ResourceTag/{{TagKey}}` - 대상 Neptune 리소스의 태그 값으로 확인됩니다.

지원되는 정책 유형  
+ **IAM 자격 증명 정책** - 사용자, 그룹 또는 역할에 연결됩니다.
+ **SCPs**- AWS Organizations 조직 단위(OU) 또는 계정 수준에서 권한 가드레일을 설정하기 위해 적용됩니다.

## TBAC를 사용하기 위한 사전 조건
<a name="iam-data-tbac-prerequisites"></a>

Neptune 데이터 영역 작업에서 TBAC를 사용하려면 먼저 다음 사항이 있어야 합니다.

1. **Neptune 엔진 버전 1.2.0.0 이상** - 데이터 영역 TBAC 지원에 필요합니다.

1. Neptune DB 클러스터에서 **IAM 인증이 활성화**되었습니다.

1. **Neptune DB 클러스터에 적용된 태그** - 정책이 평가할 리소스 태그입니다.

1. **IAM 보안 주체에 적용된 태그** - 리소스 태그와 비교할 보안 주체 태그입니다.

## TBAC 정책 패턴
<a name="iam-data-tbac-patterns"></a>

다음 패턴은 Neptune 데이터 영역 작업에 대한 IAM 정책에서 TBAC를 사용하는 일반적인 방법을 보여줍니다.

### 보안 주체와 리소스 태그가 일치하지 않는 경우 액세스 거부
<a name="iam-data-tbac-pattern-deny-mismatch"></a>

가장 일반적인 TBAC 패턴입니다. 보안 주체의 태그가 리소스의 태그와 일치하지 않는 한 모든 Neptune 데이터 영역 작업을 거부합니다. 이를 조직 전체의 적용을 위한 SCP 또는 대상 제어에 대한 IAM 정책으로 적용할 수 있습니다.

```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyNeptuneProjectMismatch",
      "Effect": "Deny",
      "Action": "neptune-db:*",
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {
          "aws:ResourceTag/Project": "${aws:PrincipalTag/Project}"
        }
      }
    },
    {
      "Sid": "DenyNeptuneDepartmentMismatch",
      "Effect": "Deny",
      "Action": "neptune-db:*",
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {
          "aws:ResourceTag/Department": "${aws:PrincipalTag/Department}"
        }
      }
    }
  ]
}
```

**작동 방식:** 각 문은 단일 태그 키에 대해 별도의 `StringNotEquals` 조건을 사용합니다. 거부는 각 태그에 대해 독립적으로 트리거됩니다. 리소스의 `Project` 태그가 보안 주체의 `Project` 태그와 일치하지 않으면 `Department` 태그에 관계없이 액세스가 거부됩니다. 이렇게 하면 로 태그가 지정된 보안 주체가 태그가 지정된 Neptune 클러스터에만 액세스할 `Project=FraudDetection` 수 있으며 `Project=FraudDetection`에 대해서도 마찬가지로 액세스할 수 있습니다`Department`.

### 필수 리소스 태그가 누락된 경우 액세스 거부
<a name="iam-data-tbac-pattern-deny-missing"></a>

이 패턴은 적절하게 태그가 지정되지 않은 Neptune 클러스터에 대한 액세스를 방지하여 모든 클러스터가 TBAC 체계에 등록되도록 합니다.

```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyNeptuneMissingProjectTag",
      "Effect": "Deny",
      "Action": "neptune-db:*",
      "Resource": "*",
      "Condition": {
        "Null": {
          "aws:ResourceTag/Project": "true"
        }
      }
    },
    {
      "Sid": "DenyNeptuneMissingDepartmentTag",
      "Effect": "Deny",
      "Action": "neptune-db:*",
      "Resource": "*",
      "Condition": {
        "Null": {
          "aws:ResourceTag/Department": "true"
        }
      }
    }
  ]
}
```

**작동 방식:** 지정된 태그 키가 리소스에 없는 경우 `Null` 조건이 true로 평가됩니다. 이렇게 하면 모든 Neptune 클러스터가 필요한 분류 태그를 전달해야 보안 주체가 액세스할 수 있습니다.

### TBAC와 작업 기반 액세스 제어 결합
<a name="iam-data-tbac-pattern-combined-actions"></a>

TBAC를 특정 `neptune-db:` 작업과 결합하여 세분화된 태그 인식 정책을 생성할 수 있습니다.

```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowReadOnlyForMatchingTags",
      "Effect": "Allow",
      "Action": [
        "neptune-db:ReadDataViaQuery",
        "neptune-db:GetQueryStatus",
        "neptune-db:GetEngineStatus"
      ],
      "Resource": "arn:aws:neptune-db:*:*:*/*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Project": "${aws:PrincipalTag/Project}"
        }
      }
    }
  ]
}
```

### TBAC를 사용한 쿼리 언어 제한
<a name="iam-data-tbac-pattern-query-language"></a>

TBAC를 `neptune-db:QueryLanguage` 조건 키와 결합하여 보안 주체가 액세스할 수 있는 클러스터와 사용할 수 있는 쿼리 언어를 모두 제한합니다.

```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowOpenCypherOnlyForMatchingProject",
      "Effect": "Allow",
      "Action": [
        "neptune-db:ReadDataViaQuery",
        "neptune-db:WriteDataViaQuery"
      ],
      "Resource": "arn:aws:neptune-db:*:*:*/*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Project": "${aws:PrincipalTag/Project}",
          "neptune-db:QueryLanguage": "OpenCypher"
        }
      }
    }
  ]
}
```

## 서비스 제어 정책과 함께 TBAC 사용
<a name="iam-data-tbac-scps"></a>

SCPs는 개별 IAM 정책을 변경할 필요 없이 전체 조직 단위(OU) 또는 계정에 권한 경계를 설정하므로 TBAC를 적용하는 데 적합합니다.

다음과 같은 SCP 전략을 권장합니다.

1. 태그가 일치하지 않을 `neptune-db:*` 때 차단하는 OU 수준에서 거부 기반 SCP를 적용합니다.

1. 태그가 지정되지 않은 리소스에 대한 액세스를 거부하는 두 번째 문을 적용합니다.

1. 개별 계정은 특정 `neptune-db:` 작업에 대한 허용 정책을 유지할 수 있습니다. SCP는 가드레일 역할을 합니다.

```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyNeptuneProjectMismatch",
      "Effect": "Deny",
      "Action": "neptune-db:*",
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {
          "aws:ResourceTag/Project": "${aws:PrincipalTag/Project}"
        }
      }
    },
    {
      "Sid": "DenyNeptuneDepartmentMismatch",
      "Effect": "Deny",
      "Action": "neptune-db:*",
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {
          "aws:ResourceTag/Department": "${aws:PrincipalTag/Department}"
        }
      }
    },
    {
      "Sid": "DenyNeptuneMissingProjectTag",
      "Effect": "Deny",
      "Action": "neptune-db:*",
      "Resource": "*",
      "Condition": {
        "Null": {
          "aws:ResourceTag/Project": "true"
        }
      }
    },
    {
      "Sid": "DenyNeptuneMissingDepartmentTag",
      "Effect": "Deny",
      "Action": "neptune-db:*",
      "Resource": "*",
      "Condition": {
        "Null": {
          "aws:ResourceTag/Department": "true"
        }
      }
    }
  ]
}
```

## Neptune용 TBAC 구현
<a name="iam-data-tbac-implementation"></a>

### 1단계: 태그 분류 정의
<a name="iam-data-tbac-step-taxonomy"></a>

조직 경계를 나타내는 태그 키를 선택합니다. 일반적인 패턴:


**태그 분류 예**  

| 태그 키 | 용도 | 예제 값 | 
| --- | --- | --- | 
| Project | 애플리케이션 또는 워크로드 식별자 | FraudDetection, RecommendationEngine | 
| Department | 사업부 또는 비용 센터 | Engineering, Finance, Analytics | 
| Environment | 배포 단계 | production, staging, development | 
| Team | 소유 팀 | graph-platform, data-science | 

### 2단계: Neptune DB 클러스터에 태그 지정
<a name="iam-data-tbac-step-tag-clusters"></a>

 AWS CLI 를 사용하여 Neptune DB 클러스터에 필요한 분류 태그를 추가합니다.

```
aws neptune add-tags-to-resource \
  --resource-name arn:aws:rds:{{us-east-1}}:{{123456789012}}:cluster:{{my-neptune-cluster}} \
  --tags Key=Project,Value=FraudDetection Key=Department,Value=Engineering
```

### 3단계: IAM 보안 주체에 태그 지정
<a name="iam-data-tbac-step-tag-principals"></a>

 AWS CLI 를 사용하여 Neptune 클러스터에 사용된 것과 동일한 키와 값으로 IAM 역할에 태그를 지정합니다. IAM 역할의 경우:

```
aws iam tag-role \
  --role-name {{NeptuneAppRole}} \
  --tags Key=Project,Value=FraudDetection Key=Department,Value=Engineering
```

페더레이션 사용자의 경우 자격 증명 공급자의 `aws:PrincipalTag` 속성을 사용하여 SAML/OIDC 세션 태그를 통해 태그를 전달합니다.

### 4단계: TBAC 정책 배포
<a name="iam-data-tbac-step-deploy"></a>

조직 전체의 적용을 위한 SCP 또는 대상 제어에 대한 IAM 정책으로를 연결합니다.

### 5단계: 태그 무결성 보호
<a name="iam-data-tbac-step-protect-tags"></a>

Neptune 리소스 및 IAM 보안 주체의 태그를 수정할 수 있는 사용자를 제한합니다.

```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyTagModification",
      "Effect": "Deny",
      "Action": [
        "rds:AddTagsToResource",
        "rds:RemoveTagsFromResource"
      ],
      "Resource": "*",
      "Condition": {
        "ForAnyValue:StringEquals": {
          "aws:TagKeys": ["Project", "Department"]
        }
      }
    }
  ]
}
```

## TBAC에 대한 중요 고려 사항
<a name="iam-data-tbac-considerations"></a>
+ **전파 지연** - IAM 정책 변경 사항이 Neptune 리소스에 적용되는 데 최대 10분이 걸립니다. 클러스터 태그 변경(태그 추가, 수정 또는 제거)이 데이터 영역 정책 평가로 전파되는 데 약 5분이 걸립니다. 활성 클러스터에서 태그를 업데이트할 때이 지연을 계획합니다.
+ **클러스터 수준 세분화 -** 클러스터 수준에서 Neptune DB 클러스터에 태그를 적용합니다. 클러스터의 모든 인스턴스는 동일한 정책 평가를 공유합니다. TBAC는 하위 그래프 또는 버텍스/엣지 수준 액세스 제어를 제공하지 않습니다.
+ **IAM 인증 필요** - TBAC는 클러스터에서 IAM 인증이 활성화된 경우에만 적용됩니다. IAM 인증이 없는 연결은 이러한 정책을 완전히 우회합니다.
+ **태그 불변성** - 태그 지정 작업을 보호합니다. 보안 주체가 자체 태그 또는 리소스 태그를 수정할 수 있는 경우 TBAC 제어를 우회할 수 있습니다. SCPs 또는 권한 경계를 사용하여 `iam:TagRole`, `iam:TagUser`, 및 `rds:AddTagsToResource`를 제한합니다`rds:RemoveTagsFromResource`.
+ **Null 태그 처리** - 보안 주체에 정책이를 통해 참조하는 태그가 없는 경우 변수`${aws:PrincipalTag/{{Key}}}`는 빈 문자열로 확인됩니다. 이 사례를 처리하도록 정책을 설계합니다(위의 "누락 태그" 거부 패턴은 리소스 태그에 대해이 문제를 해결합니다).
+ **여러 조건 키** - 동일한 `Condition` 블록에 여러 조건 키가 나타나면 AND 로직으로 평가됩니다. `StringNotEquals`의 경우 지정된 *모든* 조건이 동시에 true인 경우에만 거부가 트리거됩니다. ** 단일 태그 불일치를 거부하려면 각 태그 키에 대해 별도의 정책 설명을 사용합니다(위의 패턴 참조).

## 기존 Neptune 보안 기능과의 관계
<a name="iam-data-tbac-relationship"></a>


**TBAC가 기존 Neptune 보안 기능을 보완하는 방법**  

| 기존 기능 | 제어 대상 | TBAC가 이를 보완하는 방법 | 
| --- | --- | --- | 
| VPC/보안 그룹 | 포트 8182에 대한 네트워크 수준 액세스 | TBAC는 네트워크 제어에 자격 증명 인식 권한 부여를 추가합니다. | 
| IAM 인증(SigV4) | 발신자 자격 증명 확인 | TBAC는 권한 부여 결정에 인증된 자격 증명의 태그를 사용합니다. | 
| 작업 기반 액세스 제어 | 보안 주체가 수행할 수 있는 작업(read/write/delete/로드) | TBAC는 태그 정렬을 기반으로 보안 주체가 대상으로 지정할 수 있는 클러스터를 추가합니다. | 
| neptune-db:QueryLanguage 조건 키 | 허용되는 쿼리 언어(Gremlin, openCypher, SPARQL) | 동일한 정책 설명에서 TBAC와 결합할 수 있습니다. | 
| 관리 태그 기반 액세스(rds:\* 작업) | Neptune 인프라를 관리할 수 있는 사용자 | TBAC는 동일한 태그 기반 패턴을 데이터 영역(neptune-db:\*) 작업으로 확장합니다. | 
| AWS KMS 암호화 | 저장 데이터 기밀성 | 직교형 - TBAC가 암호화가 아닌 권한 부여를 제어합니다. | 