IAM ユーザーの有効なアクセスキーの確認

IAM アクセスキーの実際の所有者と用途を確認し、不要な長期認証情報を取り除いてください。

説明

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 であり、既存のキーは無効化も削除もされません。必要な権限、シークレットアクセスキーの受け渡し、古いキーの削除は別途設定してください。

参考資料