~~NOCACHE~~
~~DISCUSSION~~
## (書きかけ)サービス-GuardDuty
### はじめに
[[Aws:Organizations:TrailAcquisitionCase|証跡取得ケース]]とは別の話でConsoleやCLIで、マルチアカウントのGuardDutyのアクティビティ状況を集約する機能
[[Aws:Organizations:TrailAcquisitionCase|証跡取得ケース]]も絡めて記載はしている。
{{:Aws:Organizations:pasted:20220518-093613.png?direct 600x0}}
・[②組織内の特定アカウントで証跡を集中管理]を例に設定例を記載します。
・組織全体を集中管理(全てのリージョンを対象に記載)
## 設定概要
### 組織のrootアカウント
・サービス-GuardDutyの信頼されたアクセスを有効にする
・組織内の特定アカウントにGuardDutyの管理を委任する
・組織内の特定アカウントにGuardDutyのアクセス許可を委任する
### 組織内の特定アカウント
・GuardDuty用のKeyを作成する
・GuardDuty記録用のS3バケットを作成する
・GuardDutyのエクスポートオプションを設定する
・GurdDutyの自動有効化と現状のメンバ承認を行う
## 設定
### 組織のrootアカウント
CloudShellから以下を実行する。
# サービス-GuardDutyの信頼されたアクセスを有効にする
aws organizations enable-aws-service-access --service-principal=guardduty.amazonaws.com
#特定アカウントにGuardDutyの管理を委任する
ACCOUNT_ID=(委任先のAWSアカウントID 12桁)
aws organizations register-delegated-administrator --account-id ${ACCOUNT_ID} --service-principal guardduty.amazonaws.com
#全てのリージョンで組織内の特定アカウントにGuardDutyのアクセス許可を委任する
ACCOUNT_ID=(委任先のAWSアカウントID 12桁)
aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \
| while read region; do
echo "##### enable organization admin account in ${region}"
aws --region ${region} guardduty enable-organization-admin-account --admin-account-id ${ACCOUNT_ID}
done
### 組織内の特定アカウント
#### GuardDuty用のKeyを作成する
##### キーポリシー
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Enable User permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::[委任先アカウントID]:root"
},
"Action": "kms:*",
"Resource": "*"
},
{
"Sid": "Allow GuardDuty to use the key",
"Effect": "Allow",
"Principal": {
"Service": "guardduty.amazonaws.com"
},
"Action": "kms:GenerateDataKey",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:SourceAccount": [
"[委任先アカウントID]"
]
}
}
}
]
}
#### GuardDuty記録用のS3バケットを作成する
##### S3バケットポリシー
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowGuardDutygetBucketLocation",
"Effect": "Allow",
"Principal": {
"Service": "guardduty.amazonaws.com"
},
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket"
],
"Resource": "arn:aws:s3:::[GuardDuty用S3バケット]",
"Condition": {
"StringEquals": {
"aws:SourceAccount": [
"[委任先アカウントID]"
]
}
}
},
{
"Sid": "AllowGuardDutyPutObject",
"Effect": "Allow",
"Principal": {
"Service": "guardduty.amazonaws.com"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::[GuardDuty用S3バケット]/*",
"Condition": {
"StringEquals": {
"aws:SourceAccount": [
"[委任先アカウントID]"
]
}
}
},
{
"Sid": "DenyUnencryptedUploadsThis is optional",
"Effect": "Deny",
"Principal": {
"Service": "guardduty.amazonaws.com"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::[GuardDuty用S3バケット]/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-server-side-encryption": "aws:kms"
}
}
},
{
"Sid": "DenyIncorrectHeaderThis is optional",
"Effect": "Deny",
"Principal": {
"Service": "guardduty.amazonaws.com"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::[GuardDuty用S3バケット]/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-server-side-encryption-aws-kms-key-id": "arn:aws:kms:[GuardDuty用S3バケットのリージョン名]:[委任先アカウントID]:key/[キーID]"
}
}
},
{
"Sid": "Deny non SSL request",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::[GuardDuty用S3バケット]",
"arn:aws:s3:::[GuardDuty用S3バケット]/*"
],
"Condition": {
"Bool": {
"aws:SecureTransport": "false"
}
}
}
]
}
#### GuardDutyのエクスポートオプションを設定する
#全てのリージョンでGurdDutyのエクスポート先を設定する
ACCOUNT_ID=(委任先のAWSアカウントID 12桁)
DESTINATION_ARN=arn:aws:s3:::aggregation-${ACCOUNT_ID}-guardduty-log
BUCKET_REGION=(S3バケットのリージョン名)
aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \
| while read region; do
echo "## enable guard duty setting in ${region}"
DETECTOR_ID=`aws --region ${region} guardduty list-detectors --query 'DetectorIds' --output text`
KMS_KEY_ARN=`arn:aws:kms:${BUCKET_REGION}:${ACCOUNT_ID}:alias/GuardDutyKey`
aws --region ${region} guardduty create-publishing-destination --detector-id ${DETECTOR_ID} --destination-type S3 --destination-properties DestinationArn="${DESTINATION_ARN}",KmsKeyArn="${KMS_KEY_ARN}"
done
#### GuardDutyのアクセス許可を有効にする
#全てのリージョンでGurdDutyの自動有効化と現状のメンバ承認を行う
ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --output text)
aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \
| while read region; do
echo "## create member in ${region}"
DETECTOR_ID=`aws --region ${region} guardduty list-detectors --query 'DetectorIds' --output text`
aws --region ${region} guardduty update-organization-configuration --auto-enable --detector-id ${DETECTOR_ID}
MEMBER_ID=`aws organizations list-accounts --query "Accounts[?Id!='${ACCOUNT_ID}'].[Id,Email]" --output text | awk '{print "AccountId=" $1 "," "Email=" $2}'`
aws --region ${region} guardduty create-members --account-details $MEMBER_ID --detector-id ${DETECTOR_ID}
done
{{tag>AWS GuardDuty}}