説明
aws_iam_access_key は IAM ユーザーのアクセスキーを管理します。user = "root" が指すのは root という名前の IAM ユーザーであり、AWS アカウントのルートユーザーではありません。名前だけでアカウント全体の権限やキーの漏えいを判断することはできません。
有効なアクセスキーと対応するシークレットアクセスキーは、AWS リクエストを認証する長期認証情報です。実際の権限と利用先を確認し、自動化には可能な限り IAM ロールの一時的な認証情報を使用してください。
想定される影響
- 有効なキーのペアが漏えいすると、IAM ユーザーの権限が別の環境から悪用される可能性があります。
- 使っていない有効なキーが残ると、不要な認証手段が維持されます。
- 所有者や利用先が不明なキーを失効すると、サービスが停止する可能性があります。
対処方法
- IAM ユーザーのキーの状態、最終利用、権限を確認し、必要な処理をロールによるアクセスに移行してください。
- 代替のアクセス方法が機能することを確認してから、不要なキーを無効化・削除してください。残すキーは最小権限に制限し、シークレットと Terraform の状態を保護してください。
- 実際の AWS アカウントのルートユーザーに属するアクセスキーは別途確認して削除し、そのユーザーに MFA を設定してください。
例
以下は IAM アクセスキーの所有者を比較する部分的な例です。pgp_key には意図した受信者の有効な公開鍵を指定してください。
変更前
hcl
resource "aws_iam_access_key" "root_access_key" {
user = "root"
pgp_key = "keybase:some_person_that_exists"
status = "Active"
}
既存の IAM ユーザー root に対して有効なキーを作成します。AWS アカウントのルートユーザーのアクセスキーを作成するコードではありません。
変更後
hcl
resource "aws_iam_user" "automation_user" {
name = "loadbalancer"
path = "/system/"
}
resource "aws_iam_access_key" "automation_access_key" {
user = aws_iam_user.automation_user.name
pgp_key = "keybase:some_person_that_exists"
}
自動化用の IAM ユーザーと新しいキーを作成します。status を省略した場合の既定値は Active であり、既存のキーは無効化も削除もされません。必要な権限、シークレットアクセスキーの受け渡し、古いキーの削除は別途設定してください。