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

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

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

セキュリティは の最優先事項ですAWS。AWS Well-Architected フレームワークでは、 ストアと シークレットを安全に使用するベストプラクティスでは、シークレットへのアクセスを制限し、シークレットへのログ記録と監査を行い、ユーザーにアクセス権を付与するのではなく API 経由でアクセス権を取得することをお勧めします。これは、このガイドで前述した を使用したランダムパスワードの生成AWS Secrets Managerに関連しています。

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

  • AWS サービスロールにアタッチされている AWS Identity and Access Management (IAM) ポリシー、またはユーザーの IAM ロールを通じて Secrets Manager へのアクセスを制限します

  • 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 }