説明
Secrets Manager のリソースポリシーで主体や操作を広く許可すると、パスワード、トークン、API キーへの不要なアクセスが可能になるおそれがあります。取得権限と変更・削除などの管理権限を分け、必要なロールだけを許可してください。
実際のアクセスには、ポリシー条件、他の権限制御、必要な KMS 権限も関係します。シークレットに関連付けたリソースポリシーの Resource: "*" はそのシークレットを指し、この値だけでアカウント内の全シークレットへの権限を意味するわけではありません。
想定される影響
- 不要な取得権限でシークレットが漏えいすると、接続先のデータベースや他のサービスにも影響する可能性があります。
- 過剰な変更・削除権限は、利用するサービスの停止や認証失敗につながるおそれがあります。
対処方法
- Principal を承認済みのロールに限定し、取得・ローテーション・管理の目的に必要な操作だけを許可してください。
- リソースポリシーと IAM・KMS 権限を合わせて確認し、必要なアクセス条件を設定してください。
- 正規の利用と未承認のアクセスの拒否を確認してください。シークレットの漏えいが確認された場合は、値をローテーションして利用するサービスも更新してください。
例
同じシークレットのリソースポリシーを絞る抜粋です。ロール ARN は実際の承認済みロールに置き換えてください。値の保存と必要な KMS 権限は別途設定してください。
変更前
hcl
resource "aws_secretsmanager_secret" "app_secret" {
name = "not_secure_secret"
}
resource "aws_secretsmanager_secret_policy" "app_secret_policy" {
secret_arn = aws_secretsmanager_secret.app_secret.arn
policy = <<POLICY
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "secretsmanager:*",
"Resource": "*"
}
]
}
POLICY
}
すべての AWS 主体に secretsmanager:* を許可しています。実際に適用される他の制御も確認し、不要な許可を削除してください。
変更後
hcl
resource "aws_secretsmanager_secret" "app_secret" {
name = "not_secure_secret"
}
resource "aws_secretsmanager_secret_policy" "app_secret_policy" {
secret_arn = aws_secretsmanager_secret.app_secret.arn
policy = <<POLICY
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:role/app-runtime"
},
"Action": "secretsmanager:GetSecretValue",
"Resource": "*"
}
]
}
POLICY
}
同じシークレットについて、指定ロールの GetSecretValue だけを許可しています。このポリシー以外の権限とキーへのアクセスも確認してください。