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

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

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

AWSではセキュリティが最優先事項です。 AWS Well-Architected Frameworkでは、シークレットを安全に保管して使用するベストプラクティスでは、シークレットへのアクセスを制限し、シークレットへのアクセスをログに記録して監査し、ユーザーにアクセスを許可する代わりにAPIを介してアクセスすることを推奨しています。これは、このガイドですでに説明した AWS Secrets Manager、を使用してランダムなパスワードを生成することに関係しています

これまでは、データベース、サードパーティ API、トークン、その他のシークレットの認証に使用される認証情報は、ソースコードや環境ファイルに埋め込まれていた可能性があります。多くの組織では、データベース管理者は今でもすべてのデータベースユーザー認証情報にアクセスできます。ただし、アクセスできない方が安全です。 以下のことをおすすめします。

次のコードサンプルは、データベースを作成する際に機密データを保護するために使用できる方法を示しています。データベースを作成するときに、パスワードとしてユーザー入力を要求してからパスワードをローテーションすることも、最初からランダムなパスワードを使用することもできます。最初からランダムなパスワードを生成しておくと、認証情報をより安全に処理および管理できます。

次のコードスニペットは、データベースリソースを作成し、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 }