EC2 インスタンスに直接配布する AWS アクセスキー

EC2 に長期キーを置かず、IAM ロールの一時的な認証情報を使用してください。

説明

EC2 の user_data、スクリプト、ファイル、環境変数に AWS アクセスキーとシークレットキーを直接入れると、リポジトリ、ログ、イメージから漏えいするおそれがあります。インスタンスプロファイルを通じて IAM ロールを関連付ければ、長期キーを直接配布せずに AWS 権限を提供できます。

想定される影響

  • 漏えいした長期キーが別の環境から再利用される可能性があります。
  • 複数のインスタンスにコピーしたキーは、交換や利用先の把握が難しくなる場合があります。

対処方法

iam_instance_profile で必要最小限の権限を持つ IAM ロールを関連付け、アプリケーションがその一時的な認証情報を使うように変更してください。配布済みの長期キーの利用先を確認して交換し、漏えいしたキーは無効化または削除してください。ソースコードから消すだけでは、発行済みのキーは失効しません。

例

認証情報の供給方法だけを比較する例です。最初のキー文字列は実際のキーではなくプレースホルダーです。対象リージョンと OS に合う AMI を選び、インスタンスプロファイル、ロールの信頼と権限は別途設定してください。

変更前

hcl
resource "aws_instance" "example" {
  ami           = "ami-005e54dee72cc1d00"
  instance_type = "t2.micro"

  user_data = <<EOF
#!/bin/bash
apt-get install -y awscli
export AWS_ACCESS_KEY_ID=your_access_key_id_here
export AWS_SECRET_ACCESS_KEY=your_secret_access_key_here
EOF
}

変更後

hcl
resource "aws_instance" "example" {
  ami                  = "ami-005e54dee72cc1d00"
  instance_type        = "t2.micro"
  iam_instance_profile = aws_iam_instance_profile.test_profile.name
}

変更後はユーザーデータに長期キーを入れず、インスタンスプロファイルを関連付けます。実際の権限は、ロールのポリシーと他のアクセス制御によって決まります。

参考資料