

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon Neptune データプレーンオペレーションのタグベースのアクセスコントロール
<a name="iam-data-tbac"></a>

タグベースのアクセスコントロール (TBAC) を使用すると、 AWS リソースタグと IAM プリンシパルタグを IAM ポリシーとサービスコントロールポリシー (SCPs) の条件として使用して、Amazon Neptune データプレーンオペレーションへのアクセスを制御できます。TBAC では、Neptune DB クラスターのタグと一致するタグを持つプリンシパルのみが、すべてのポリシーで特定のクラスターの Amazon リソースネーム (ARNs) を列挙することなく、そのクラスターに対して`neptune-db:*`アクションを実行できるように強制できます。

TBAC は Neptune の既存のセキュリティモデルに基づいて構築され、[アクションベースのアクセスコントロール](iam-dp-actions.md)データプレーンアクションを補完します。

## TBAC が Neptune のセキュリティレイヤーにどのように適合するか
<a name="iam-data-tbac-security-layers"></a>

Neptune は、重複する複数のセキュリティメカニズムを通じてデータを保護します。TBAC は、すべての属性と連携する属性ベースの認可レイヤーを追加します。


**Neptune セキュリティレイヤーとその TBAC による補完方法**  

| レイヤー | メカニズム | スコープ | 
| --- | --- | --- | 
| ネットワークの隔離 | Virtual Private Cloud (VPC)、セキュリティグループ、VPC エンドポイント (PrivateLink) | Neptune エンドポイントに到達できるホストを制御する | 
| 暗号化 | 転送中の Transport Layer Security (TLS) 1.3、保管中の AWS KMSマネージド暗号化 | データの機密性を保護する | 
| IAM 認証 | AWS Neptune データエンドポイントへの署名バージョン 4 (SigV4) 署名付きリクエスト | 発信者を認証します | 
| アクションベースのアクセスコントロール | neptune-db: アクション (ReadDataViaQuery、 WriteDataViaQueryなど) | プリンシパルが実行できるオペレーションを制御する | 
| 条件キー | 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) Security Assertion Markup Language (SAML) / OpenID Connect (OIDC) 属性マッピングを介して設定できます。

リソースタグ  
を使用して Neptune DB クラスターにアタッチされたタグ`AddTagsToResource`。これらは、データプレーンポリシー評価のためにクラスター内のすべてのインスタンスに伝播されます。

条件キー変数  
+ `aws:PrincipalTag/{{TagKey}}` — 呼び出し元のプリンシパルのタグ値に解決されます。
+ `aws:ResourceTag/{{TagKey}}` — ターゲット Neptune リソースのタグ値に解決されます。

サポートされているポリシータイプ  
+ **IAM ID ポリシー** — ユーザー、グループ、またはロールにアタッチされます。
+ **SCPs** Organizations AWS 組織単位 (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`タグに関係なく拒否されます。これにより、 でタグ付けされたプリンシパル`Project=FraudDetection`は`Project=FraudDetection`、同様に でタグ付けされた Neptune クラスターにのみアクセスできます`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:*` タグが一致しない場合にブロックする拒否ベースの SCP を OU レベルで適用します。

1. タグのないリソースへのアクセスを拒否する 2 番目のステートメントを適用します。

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
```

フェデレーティッドユーザーの場合は、ID プロバイダーの`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) | 発信者 ID を検証する | TBAC は、認証された ID のタグを認可の決定に使用します | 
| アクションベースのアクセスコントロール | プリンシパルが実行できるオペレーション (read/write/delete/ロード) | TBAC は、タグの配置に基づいて、プリンシパルがターゲットにできるクラスターを追加します。 | 
| neptune-db:QueryLanguage 条件キー | 許可されるクエリ言語 (Gremlin、openCypher、SPARQL) | 同じポリシーステートメントで TBAC と組み合わせることができます | 
| 管理タグベースのアクセス (rds:\* アクション) | Neptune インフラストラクチャを管理できるユーザー | TBAC は、同じタグベースのパターンをデータプレーン (neptune-db:\*) アクションに拡張します | 
| AWS KMS 暗号化 | 保管時のデータの機密性 | 直交 — TBAC は暗号化ではなく認可を制御します | 