Neptune DBクラスターにおけるスナップショットへのタグのコピーの有効化について

このブログシリーズ 「クラウドセキュリティ 実践集」 では、一般的なセキュリティ課題を取り上げ、「なぜ危険なのか?」 というリスクの解説から、「どうやって直すのか?」 という具体的な修復手順(コンソール、AWS CLI、Terraformなど)まで、分かりやすく解説します。
今回は、Amazon Neptune DBクラスターで、スナップショットへのタグのコピーが有効になっていない状態について、そのリスクと対策を解説します。

リスク
Amazon Neptuneは、フルマネージドのグラフデータベースサービスです。Neptune DBクラスターのバックアップとして取得されるDBスナップショットは、データの復旧や環境の複製に不可欠なリソースです。しかし、Neptune DBクラスターからスナップショットを取得する際、タグ(メタデータ)をスナップショットにコピーする設定を有効にしていない場合、以下のような重大なリスクが発生します。
- アクセスポリシーの不一致: IAMポリシーやリソースベースのポリシーでは、タグを条件としてアクセス制御を行うことがよくあります。例えば、
"tag:Environment": "production"
のタグを持つリソースにのみアクセスを許可するポリシーが考えられます。スナップショットにタグがコピーされない場合、親DBクラスターには適用されているアクセス制御が、そのスナップショットには適用されません。これにより、意図せずスナップショットへのアクセスが許可されてしまったり、逆に正規のユーザーがアクセスできなくなったりするリスクが生じます。 - リソース管理の困難さ: タグは、リソースの所有者、環境(
dev
、staging
、prod
)、コストセンターなどの重要なメタデータを付与する役割を果たします。スナップショットにタグがコピーされないと、どのスナップショットがどの親クラスターに関連しているのか、どのチームが所有しているのかといった情報が失われます。これにより、バックアップの管理、コストの追跡、リソースの棚卸しが非常に困難になります。 - 自動化プロセスの機能不全: 多くの自動化スクリプトやツールは、タグをキーとしてリソースを識別し、操作を実行します。たとえば、「
Environment=dev
のタグを持つすべてのスナップショットを7日後に削除する」といったスクリプトを運用しているとします。タグがコピーされていないと、これらの自動化プロセスがスナップショットを正しく識別できず、重要なスナップショットが誤って削除されたり、不要なスナップショットが残り続けたりする可能性があります。
対策
Neptune DBクラスターでスナップショットへのタグのコピーを有効にすることは、上記のすべてのリスクを軽減し、一貫したアクセス制御、効率的なリソース管理、およびコンプライアンスの遵守を確保するための重要なベストプラクティスです。
- 一貫したアクセスポリシーの適用: 親DBクラスターに設定されたタグをスナップショットにもコピーすることで、タグベースのIAMポリシーがスナップショットに対しても正しく機能します。これにより、データの一貫したアクセス制御を保証できます。
- 効率的なリソース管理: スナップショットにも親クラスターと同じメタデータが付与されるため、所有者、環境、コストセンターなどの情報が一目でわかり、管理やコスト分析が容易になります。
- 自動化の信頼性向上: タグをコピーすることで、タグベースの自動化スクリプトやツールがスナップショットを正しく識別できるようになります。これにより、バックアップのライフサイクル管理がより信頼性の高いものになります。
修復方法
Neptune DBクラスターでスナップショットへのタグのコピーを有効にする方法は、AWSコンソールまたはTerraformで行えます。この設定は、DBクラスターの作成時または既存のクラスターの修正時に設定できます。
AWSコンソールでの修復手順
AWSコンソールを使用して、Neptune DBクラスターのスナップショットへのタグのコピーを有効にします。
- Neptuneサービスへ移動: AWSコンソールにログインし、Amazon Neptune サービスを開きます。
- DBクラスターを選択: 左側のナビゲーションペインで「データベース」を選択し、設定を変更したいDBクラスターを選択します。
- 「変更」ボタンをクリック: クラスターの詳細ページで「変更」ボタンをクリックします。
- 「データベースオプション」の設定:
- 変更画面が表示されたら、「データベースオプション」セクションまでスクロールします。
- 「タグをスナップショットにコピーする」のチェックボックスにチェックを入れます。
- 変更の適用:
- 変更内容を確認し、画面の一番下までスクロールします。変更を適用するタイミングを選択します。「すぐに適用」または「次のメンテナンスウィンドウで適用」を選択します。「変更」ボタンをクリックして、設定を保存します。

これで、以降に作成されるすべての手動スナップショット、および自動スナップショットには、親クラスターと同じタグがコピーされるようになります。
Terraformでの修復手順
TerraformでNeptune DBクラスターのスナップショットへのタグのコピーを有効にするには、aws_neptune_cluster
リソースの copy_tags_to_snapshot
パラメータを true
に設定します。
# (前提) Neptune DBクラスターに関連するVPC, サブネットグループ, IAMロール等は別途定義
resource "aws_neptune_cluster" "my_neptune_cluster" {
cluster_identifier = "my-secure-neptune-cluster"
engine = "neptune"
engine_version = "1.2.0.0" # 適切なバージョンを指定
# **重要: スナップショットへのタグのコピーを有効化**
copy_tags_to_snapshot = true
skip_final_snapshot = true
db_subnet_group_name = aws_neptune_subnet_group.default.id
vpc_security_group_ids = [aws_security_group.default.id]
storage_encrypted = true # 暗号化も有効にすることを推奨
iam_database_authentication_enabled = true # IAM認証の有効化も推奨
tags = {
Name = "MyNeptuneCluster"
Environment = "Production"
Owner = "TeamAlpha"
}
}
# (関連リソースの例)
resource "aws_neptune_subnet_group" "default" {
name = "neptune-subnet-group"
subnet_ids = [aws_subnet.private_a.id, aws_subnet.private_b.id]
}
resource "aws_security_group" "default" {
name = "neptune-security-group"
vpc_id = aws_vpc.main.id
ingress {
from_port = 8182
to_port = 8182
protocol = "tcp"
security_groups = [aws_security_group.app.id] # アプリケーションサーバーのSGからのみアクセス許可
}
}
# 現在のAWSアカウント情報とリージョンを取得
data "aws_caller_identity" "current" {}
data "aws_region" "current" {}
最後に
上記のTerraformコードでは、aws_neptune_cluster
リソースの copy_tags_to_snapshot
パラメータを true
に設定することで、スナップショットへのタグのコピーを有効にしています。
copy_tags_to_snapshot = true
: この設定により、Terraformがクラスターをプロビジョニングまたは更新する際に、スナップショットへのタグのコピーが有効になります。tags
:aws_neptune_cluster
リソースに付与されたタグが、自動的にスナップショットにもコピーされるようになります。
この変更を適用することで、将来的に取得されるすべてのスナップショットに親クラスターのタグが自動的に付与され、管理とセキュリティの一貫性が保たれます。 こちらの内容の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。運用が非常にラクに出来る製品になっていますのでぜひ興味がある方はお問い合わせお待ちしております。
最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。