翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
シークレットへのアクセスの制限
セキュリティが最優先事項です AWS。 AWS Well-Architected フレームワークでは、 ストアと シークレットを安全に使用するためのベストプラクティスとして、シークレットへのアクセスを制限し、シークレットへのアクセスをログに記録し、監査し、ユーザーにアクセス権を付与するのではなく API 経由でアクセスできるようにすることをお勧めします。これは、このガイドで前述したように、 を使用したランダムパスワードの生成 AWS Secrets Managerに関連しています。
以前は、データベース、サードパーティー APIs、トークン、およびその他のシークレットの認証に使用される認証情報がソースコードまたは環境ファイルに埋め込まれていた可能性があります。多くの組織では、データベース管理者は引き続きすべてのデータベースユーザー認証情報にアクセスできます。ただし、そうでない場合はより安全です。次のことをお勧めします。
-
AWS サービスロールまたはユーザーの IAM ロールにアタッチされている AWS Identity and Access Management (IAM) ポリシーを使用して Secrets Manager へのアクセスを制限します。 https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html
-
Secrets Manager への API 呼び出しを介してのみ、Secrets Manager のシークレットへのプログラムによるアクセスを拡張します。
-
ハードコードされたシークレットは使用しないでください。
-
変数に認証情報値を渡さないでください。
-
シークレットは、人間のユーザーではなく、アプリケーションまたはインフラストラクチャが直接使用してください。
次のコードサンプルは、データベースの作成時に機密データを保護するために使用できるアプローチを示しています。データベースを作成するときは、パスワードとしてユーザー入力を要求してからパスワードをローテーションするか、最初からランダムなパスワードを使用できます。最初からランダムなパスワードを生成すると、認証情報をより安全に処理および管理できます。
次のコードスニペットは、データベースリソースを作成し、ローカル変数からパスワードpassword = local.passwddata
を取得します。
resource "aws_db_instance" "default" { count = var.createdb == true ? 1 : 0 allocated_storage = 20 identifier = var.identifier db_name = var.databasename engine = "mysql" engine_version = "8.0.32" instance_class = "db.t3.micro" username = "admin" password = local.passwddata skip_final_snapshot = true publicly_accessible = false vpc_security_group_ids = [aws_security_group.db.id] db_subnet_group_name = aws_db_subnet_group.db.0.name }
次のコードスニペットは、ランダムなパスワードを作成するか、ユーザーが指定したパスワードを受け入れます。 は、このパスワードをローカル変数としてTerraform保存するため、後でコードでこのパスワード変数を使用できます。
locals { passwddata = var.passwddata != null ? var.passwddata : data.aws_secretsmanager_random_password.test.random_secrets }