[アップデート]Amazon GuardDutyのマネージドポリシーがちょっとだけ更新されました
こんにちは、臼田です。
みなさん、Amazon GuardDutyで脅威検出してますか?(挨拶
今回は、Amazon GuardDutyのめっちゃ細かいアップデートがあったので紹介します。
Amazon GuardDuty のドキュメント履歴 - Amazon GuardDuty
アップデート概要
アップデートは以下のとおりです。
Updated AmazonGuardDutyServiceRolePolicy
Added
s3:ListBucket,ecs:DescribeTasks, andecs:DescribeTaskDefinitionpermissions to the GuardDuty service-linked role.AmazonGuardDutyServiceRolePolicyを更新しました
GuardDutyサービスリンクロールに、
s3:ListBucket,ecs:DescribeTasks,ecs:DescribeTaskDefinitionの権限を追加しました。
概要説明
AmazonGuardDutyServiceRolePolicyはAmazon GuardDutyが利用するIAM RoleAWSServiceRoleForAmazonGuardDutyにアタッチされるAWS管理ポリシーです。通常このIAM Roleでのみ使用されます。
AWSでは各種AWSサービスが利用するIAM RoleはService-Linked Roleとして作成され、信頼関係によりユーザーからは利用できません。代わりにSCPが適用されないなどやや強い扱いとなっています。
通常Service-Linked RoleにアタッチされるポリシーもAWS管理ポリシーでAWS側でメンテナンスされており、サービスの機能拡充などと合わせて更新されます。
Amazon GuardDutyのService-Linked Roleについては下記もご参照ください。
GuardDuty のためのサービスにリンクされたロールの許可 - Amazon GuardDuty
アップデート詳細
今回は該当ポリシーに3つの権限が追加されました。権限の概要は以下のとおりです。
- s3:ListBucket: S3バケット内のオブジェクト一覧を取得する
- ecs:DescribeTasks: ECSタスクの実行状態・詳細情報を取得する
- ecs:DescribeTaskDefinition: ECSタスク定義のコンテナ構成情報を取得する
よく間違えられますが、s3:ListBucketはS3バケットの一覧を取得するものではなくてオブジェクトの一覧を取得します。パケットの一覧はs3:ListAllMyBucketsですね。
追加されている権限を見る限りは、「まあAmazon GuardDutyが調査できる範囲が増えたんだなー」くらいな感じです。
今回のアップデートでAmazonGuardDutyServiceRolePolicyのポリシーバージョンは12がデフォルトになりました。

前回のアップデートは1か月前と直近ですが、その前は1年前、2年前とそこまで頻繁には更新されていません。
バージョン12のポリシー全体は以下のとおりです。最初のSidGuardDutyGetDescribeListPolicy内が更新箇所です。(長いです)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "GuardDutyGetDescribeListPolicy",
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances",
"ec2:DescribeImages",
"ec2:DescribeVpcEndpoints",
"ec2:DescribeSubnets",
"ec2:DescribeVpcPeeringConnections",
"ec2:DescribeTransitGatewayAttachments",
"organizations:ListAccounts",
"organizations:DescribeAccount",
"organizations:DescribeOrganization",
"s3:GetBucketPublicAccessBlock",
"s3:GetEncryptionConfiguration",
"s3:GetBucketTagging",
"s3:GetAccountPublicAccessBlock",
"s3:ListAllMyBuckets",
"s3:ListBucket",
"s3:GetBucketAcl",
"s3:GetBucketPolicy",
"s3:GetBucketPolicyStatus",
"lambda:GetFunctionConfiguration",
"lambda:ListTags",
"eks:ListClusters",
"eks:DescribeCluster",
"ec2:DescribeVpcEndpointServices",
"ec2:DescribeVpcs",
"ec2:DescribeSecurityGroups",
"ecs:ListClusters",
"ecs:DescribeClusters",
"ecs:DescribeTasks",
"ecs:DescribeTaskDefinition"
],
"Resource": "*"
},
{
"Sid": "GuardDutyCreateSLRPolicy",
"Effect": "Allow",
"Action": "iam:CreateServiceLinkedRole",
"Resource": "*",
"Condition": {
"StringEquals": {
"iam:AWSServiceName": "malware-protection.guardduty.amazonaws.com"
}
}
},
{
"Sid": "GuardDutyCreateVpcEndpointPolicy",
"Effect": "Allow",
"Action": "ec2:CreateVpcEndpoint",
"Resource": "arn:aws:ec2:*:*:vpc-endpoint/*",
"Condition": {
"ForAnyValue:StringEquals": {
"aws:TagKeys": "GuardDutyManaged"
},
"StringLike": {
"ec2:VpceServiceName": [
"com.amazonaws.*.guardduty-data",
"com.amazonaws.*.guardduty-data-fips"
]
}
}
},
{
"Sid": "GuardDutyModifyDeleteVpcEndpointPolicy",
"Effect": "Allow",
"Action": [
"ec2:ModifyVpcEndpoint",
"ec2:DeleteVpcEndpoints"
],
"Resource": "arn:aws:ec2:*:*:vpc-endpoint/*",
"Condition": {
"Null": {
"aws:ResourceTag/GuardDutyManaged": false
}
}
},
{
"Sid": "GuardDutyCreateModifyVpcEndpointNetworkPolicy",
"Effect": "Allow",
"Action": [
"ec2:CreateVpcEndpoint",
"ec2:ModifyVpcEndpoint"
],
"Resource": [
"arn:aws:ec2:*:*:vpc/*",
"arn:aws:ec2:*:*:security-group/*",
"arn:aws:ec2:*:*:subnet/*"
]
},
{
"Sid": "GuardDutyCreateTagsDuringVpcEndpointCreationPolicy",
"Effect": "Allow",
"Action": "ec2:CreateTags",
"Resource": "arn:aws:ec2:*:*:vpc-endpoint/*",
"Condition": {
"StringEquals": {
"ec2:CreateAction": "CreateVpcEndpoint"
},
"ForAnyValue:StringEquals": {
"aws:TagKeys": "GuardDutyManaged"
}
}
},
{
"Sid": "GuardDutySecurityGroupManagementPolicy",
"Effect": "Allow",
"Action": [
"ec2:AuthorizeSecurityGroupIngress",
"ec2:AuthorizeSecurityGroupEgress",
"ec2:RevokeSecurityGroupIngress",
"ec2:RevokeSecurityGroupEgress",
"ec2:DeleteSecurityGroup"
],
"Resource": "arn:aws:ec2:*:*:security-group/*",
"Condition": {
"Null": {
"aws:ResourceTag/GuardDutyManaged": false
}
}
},
{
"Sid": "GuardDutyCreateSecurityGroupPolicy",
"Effect": "Allow",
"Action": "ec2:CreateSecurityGroup",
"Resource": "arn:aws:ec2:*:*:security-group/*",
"Condition": {
"StringLike": {
"aws:RequestTag/GuardDutyManaged": "*"
}
}
},
{
"Sid": "GuardDutyCreateSecurityGroupForVpcPolicy",
"Effect": "Allow",
"Action": "ec2:CreateSecurityGroup",
"Resource": "arn:aws:ec2:*:*:vpc/*"
},
{
"Sid": "GuardDutyCreateTagsDuringSecurityGroupCreationPolicy",
"Effect": "Allow",
"Action": "ec2:CreateTags",
"Resource": "arn:aws:ec2:*:*:security-group/*",
"Condition": {
"StringEquals": {
"ec2:CreateAction": "CreateSecurityGroup"
},
"ForAnyValue:StringEquals": {
"aws:TagKeys": "GuardDutyManaged"
}
}
},
{
"Sid": "GuardDutyCreateEksAddonPolicy",
"Effect": "Allow",
"Action": "eks:CreateAddon",
"Resource": "arn:aws:eks:*:*:cluster/*",
"Condition": {
"ForAnyValue:StringEquals": {
"aws:TagKeys": "GuardDutyManaged"
}
}
},
{
"Sid": "GuardDutyEksAddonManagementPolicy",
"Effect": "Allow",
"Action": [
"eks:DeleteAddon",
"eks:UpdateAddon",
"eks:DescribeAddon"
],
"Resource": "arn:aws:eks:*:*:addon/*/aws-guardduty-agent/*"
},
{
"Sid": "GuardDutyEksClusterTagResourcePolicy",
"Effect": "Allow",
"Action": "eks:TagResource",
"Resource": "arn:aws:eks:*:*:cluster/*",
"Condition": {
"ForAnyValue:StringEquals": {
"aws:TagKeys": "GuardDutyManaged"
}
}
},
{
"Sid": "GuardDutyEcsPutAccountSettingsDefaultPolicy",
"Effect": "Allow",
"Action": "ecs:PutAccountSettingDefault",
"Resource": "*",
"Condition": {
"StringEquals": {
"ecs:account-setting": [
"guardDutyActivate"
]
}
}
},
{
"Sid": "SsmCreateDescribeUpdateDeleteStartAssociationPermission",
"Effect": "Allow",
"Action": [
"ssm:DescribeAssociation",
"ssm:DeleteAssociation",
"ssm:UpdateAssociation",
"ssm:CreateAssociation",
"ssm:StartAssociationsOnce"
],
"Resource": "arn:aws:ssm:*:*:association/*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/GuardDutyManaged": "true"
}
}
},
{
"Sid": "SsmAddTagsToResourcePermission",
"Effect": "Allow",
"Action": [
"ssm:AddTagsToResource"
],
"Resource": "arn:aws:ssm:*:*:association/*",
"Condition": {
"ForAllValues:StringEquals": {
"aws:TagKeys": [
"GuardDutyManaged"
]
},
"StringEquals": {
"aws:ResourceTag/GuardDutyManaged": "true"
}
}
},
{
"Sid": "SsmCreateUpdateAssociationInstanceDocumentPermission",
"Effect": "Allow",
"Action": [
"ssm:CreateAssociation",
"ssm:UpdateAssociation"
],
"Resource": "arn:aws:ssm:*:*:document/AmazonGuardDuty-ConfigureRuntimeMonitoringSsmPlugin"
},
{
"Sid": "SsmSendCommandPermission",
"Effect": "Allow",
"Action": "ssm:SendCommand",
"Resource": [
"arn:aws:ec2:*:*:instance/*",
"arn:aws:ssm:*:*:document/AmazonGuardDuty-ConfigureRuntimeMonitoringSsmPlugin"
]
},
{
"Sid": "SsmGetCommandStatus",
"Effect": "Allow",
"Action": "ssm:GetCommandInvocation",
"Resource": "*"
},
{
"Sid": "CloudTrailCreateServiceLinkedChannelSid",
"Effect": "Allow",
"Action": [
"cloudtrail:CreateServiceLinkedChannel"
],
"Resource": "arn:aws:cloudtrail:*:*:channel/aws-service-channel/guardduty/*",
"Condition": {
"StringEquals": {
"aws:ResourceAccount": "${aws:PrincipalAccount}"
}
}
}
]
}
構成要素がたくさんありますが、それぞれのSidをざっくり説明するとこんな感じです。
- GuardDutyGetDescribeListPolicy: 基本機能はこれ。EC2/S3/ECS等の構成情報を読み取る
- GuardDutyCreateSLRPolicy: マルウェア保護用SLR作成用
- GuardDutyCreateVpcEndpointPolicy: Amazon GuardDuty専用VPCエンドポイントを作成
- GuardDutyModifyDeleteVpcEndpointPolicy: Amazon GuardDuty管理エンドポイントを変更・削除
- GuardDutyCreateModifyVpcEndpointNetworkPolicy: エンドポイントをVPC/SG/Subnetに関連付ける
- GuardDutyCreateTagsDuringVpcEndpointCreationPolicy: エンドポイント作成時にAmazon GuardDuty管理タグを付与
- GuardDutySecurityGroupManagementPolicy: Amazon GuardDuty管理SGのルールを変更・削除
- GuardDutyCreateSecurityGroupPolicy: Amazon GuardDuty管理タグ付きSGを新規作成
- GuardDutyCreateSecurityGroupForVpcPolicy: SGをVPCスコープで作成できる
- GuardDutyCreateTagsDuringSecurityGroupCreationPolicy: SG作成時にAmazon GuardDuty管理タグを付与
- GuardDutyCreateEksAddonPolicy: EKSにAmazon GuardDutyエージェントアドオンを追加
- GuardDutyEksAddonManagementPolicy: Amazon GuardDutyエージェントアドオンを管理する
- GuardDutyEksClusterTagResourcePolicy: EKSクラスターにAmazon GuardDuty管理タグ付与
- GuardDutyEcsPutAccountSettingsDefaultPolicy: ECSのAmazon GuardDuty有効化設定を変更する
- SsmCreateDescribeUpdateDeleteStartAssociationPermission: SSMアソシエーションを管理
- SsmAddTagsToResourcePermission: SSMアソシエーションにタグ付与
- SsmCreateUpdateAssociationInstanceDocumentPermission: Amazon GuardDuty専用SSMドキュメントに関連付け
- SsmSendCommandPermission: EC2にSSMコマンドを送信できる
- SsmGetCommandStatus: SSMコマンドの実行結果を確認
- CloudTrailCreateServiceLinkedChannelSid: Amazon GuardDuty専用CloudTrailチャネルを作成
結構機能ごとに細かく分かれていますが、メインの調査とかはGuardDutyGetDescribeListPolicyにまとまっていて、今回はここの調査能力に権限が追加された感じですね。
これまでもS3のバケット一覧や暗号化など周辺データの収集や、ECSのクラスターの取得などはやっていましたが、もうちょっとできることが増えました。もっと権限与えてもええんやで。
個人的な要望としては、生成AIの進化もありますし、もう少し権限を与えて調査範囲を広げてもらえるとより嬉しいですね。
まとめ
ちょっとしたアップデートでしたが、Amazon GuardDutyの調査権限が強化されていました。
勝手にサービスが強くなってくれるのは大歓迎ですね。
あまり普段から細かくAWSサービスの権限を確認しませんが、ベストプラクティスに沿って細かく制御されていますので、そういった視点でも参考になりますね。ぜひみなさんもAWSの作ったポリシーを見てみましょう。







