AWSで脆弱性診断といえば、やはりAmazon Inspectorですね。
セキュリティ関連のサービスで、定期的にスキャンを実行してくれますが、検出結果のエクスポートはユーザー側で行う必要があります。
セキュリティという性質上、検出結果を外部に保管したり、長期的に保存したりすることは非常に重要です。
この記事では、Amazon Inspectorの検出結果をエクスポートする方法を詳しく紹介します。
正直、「検出結果」ボタンを押すだけで簡単にできると思っていた私ですが、実際にはさまざまな壁にぶつかりました。
紆余曲折を経て、なんとかエクスポートに成功した体験を、ぜひ共有したいと思います。
Amazon Inspectorレポート出力してみた
■前提
今回の手順の前提は以下の通りです。
- 東京リージョンで作業を行う
- Inspectorが有効化されている
- 実行するユーザは管理者相当の権限を有する
- レポート出力先のS3バケットを作成済み
- レポート出力実行時に必要なKMSキー作成済み
■さっそく検出結果をエクスポート
まずはInspectorの検出結果から、[ 検出結果をエクスポート ]をクリックします。
↓レポートを出力先のS3バケットと、レポートの暗号化のためのKMSキーを設定し、[ Export ]をクリックします。
↓
失敗ですね。
エラー文を見てみると、
Access denied to S3 bucket. Confirm thr S3 bucket details and KMS key policy and try agein.
S3バケットとKMSキーのポリシーの設定が必要みたいですね。まずはS3バケットポリシーから修正していきます。
■S3バケットポリシー修正
現在のバケットポリシーを見ると、何も設定されていません。
この状態だと、IAMポリシーにs3:PutObject
が許可されていないユーザ・サービスは書き込めませんね。
ちなみにAmazon Inspector サービスにリンクされたロールAmazonInspector2ServiceRolePolicy
には、s3:PutObject
が記載されていないですね。
AWS公式ドキュメントを見ると、以下のようにバケットポリシーに記載するようです。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "allow-inspector",
"Effect": "Allow",
"Principal": {
"Service": "inspector2.amazonaws.com"
},
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:AbortMultipartUpload"
],
"Resource": "arn:aws:s3:::<BUCKET_NAME>/*",
"Condition": {
"StringEquals": {
"aws:SourceAccount": "<ACCOUNT_ID>"
},
"ArnLike": {
"aws:SourceArn": "arn:aws:inspector2:Region:<ACCOUNT_ID>:report/*"
}
}
}
]
}
上記のポリシーに、自身の環境に合わせて修正して、S3バケットポリシーを編集します。
↓貼り付けたら、[ 変更の保存 ]をクリックします。
↓
↓再実行してみます。
どうだ!?
・・・失敗ですね。
エラーを見てみると、先ほどと一緒ですね。
Access denied to S3 bucket. Confirm thr S3 bucket details and KMS key policy and try agein.
S3は修正したので、次はKMSキーポリシーを修正していきます。
■KMSキーポリシー修正
AWS公式ドキュメントを見てみると、
キーは対称暗号化 (SYMMETRIC_DEFAULT) キーである必要があります。
現在の設定は、対象キーですね。
つぎに、現在のKMSキーポリシーを見てみましょう。
デフォルトのままですね。
AWS公式ドキュメントを見てみると、ステートメントを修正する必要があるみたいですね。
{
"Sid": "Allow Amazon Inspector to use the key",
"Effect": "Allow",
"Principal": {
"Service": "inspector2.amazonaws.com"
},
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey*"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:SourceAccount": "111122223333"
},
"ArnLike": {
"aws:SourceArn": "arn:aws:inspector2:Region:111122223333:report/*"
}
}
}
上記のポリシーを、現在のキーポリシーのステートメント欄に追記しますね。
こんな感じになります。
{
"Id": "key-consolepolicy-3",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<ACCOUNT_ID>:root"
},
"Action": "kms:*",
"Resource": "*"
},
{
"Sid": "Allow Amazon Inspector to use the key",
"Effect": "Allow",
"Principal": {
"Service": "inspector2.amazonaws.com"
},
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey*"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:SourceAccount": "<ACCOUNT_ID>"
},
"ArnLike": {
"aws:SourceArn": "arn:aws:inspector2:ap-northeast-1:<ACCOUNT_ID>:report/*"
}
}
}
]
}
↓キーポリシーの編集画面に、修正したポリシーを貼り付けて[ 変更の保存 ]します。
さあ、三度目の正直となるか、エクスポートを実行!
↓
!!!!!!!!
勝ちました!
無事にエクスポートが実行されました。
■レポート確認
エクスポート実行が成功しましたが、本当に出力されたのかS3バケットを見てみます。
report/を見てみると、ファイルが置かれています。
ダウンロードして、中身を見てみると、
検出結果がcsv形式で出ていますね。
検出結果のエクスポートは以上です。
まとめ
AWSに限らず、クラウドサービスでの作業において、権限やネットワーク周りでの設定ミスが原因でつまずくことは珍しくありません。特にセキュリティが関わる機能では、正確な設定が求められるため、少しの見落としが大きな問題を引き起こします。
今回のAmazon Inspectorの検出結果をエクスポートする作業も、一見シンプルに思えますが、実際にはいくつかの重要なポイントを押さえる必要がありました。実行ユーザーの権限、S3バケットポリシー、そしてKMSキーポリシーの設定はその代表例です。これらを適切に設定しなければ、レポートの出力が正常に動作しない可能性が高いです。
また、権限の設定では、必要最小限の許可を付与するというセキュリティの基本原則を守ることも重要です。過剰な権限を付与するとセキュリティリスクが高まるため、実行する操作に必要な権限だけを慎重に設定する必要があります。
結局のところ、AWSでの操作は「ちょっとした設定」でうまくいかないことが多々ありますが、それを乗り越えることでスキルが確実に向上します。今回のエクスポート作業もその一例であり、ツールの便利さを体感するとともに、クラウド操作における基礎知識の重要性を再認識する機会となりました。
参考リンク:AWS公式ドキュメント
↓ほかの協栄情報メンバーもAmazon Inspectorについての記事を公開しています。ぜひ参考にしてみてください。
■AWS Inspectorの概要と参考資料まとめ(kioka)
■【AWS初心者向け】AWS Inspector V2で EC2 Instance の脆弱性情報をS3にエクスポート手順(Kuroda)