

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

# シークレットへのアクセスの制限
<a name="limiting-access"></a>

セキュリティが最優先事項です AWS。 AWS Well-Architected フレームワークでは、 [ストアと シークレットを安全に使用](https://docs.aws.amazon.com/wellarchitected/latest/framework/sec_identities_secrets.html)するためのベストプラクティスとして、シークレットへのアクセスを制限し、シークレットへのアクセスをログに記録して監査し、ユーザーにアクセス権を付与するのではなく API を通じてアクセスを取得することをお勧めします。これは、このガイドで前述したように、 [を使用したランダムパスワードの生成 AWS Secrets Manager](generate-random-passwords.md)に関連しています。

以前は、データベース、サードパーティー APIs、トークン、およびその他のシークレットの認証に使用される認証情報がソースコードまたは環境ファイルに埋め込まれていた可能性があります。多くの組織では、データベース管理者は引き続きすべてのデータベースユーザー認証情報にアクセスできます。ただし、そうでない場合はより安全です。次のことをお勧めします。
+ [AWS サービスロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)またはユーザーの IAM ロールにアタッチされている AWS Identity and Access Management (IAM) ポリシーを使用して、Secrets Manager へのアクセスを制限します。 [https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html](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
}
```