シークレットへのアクセスの制限 - AWS 規範ガイダンス

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

シークレットへのアクセスの制限

セキュリティが最優先事項です 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 }