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