~~NOCACHE~~
~~DISCUSSION~~
## 10.適用手順-2.委任先アカウント①
### CloudShellから共通設定項目①を実施する。
[[Aws:SecurityManagement:ApplicationProcedure.Common-1|Aws/セキュリティ管理/10.適用手順-共通項目①]]
### CloudShellからStackSets用バケット作成する。
#CloudFormationテンプレート格納用S3バケット作成
MAIN_REGION_ID=ap-northeast-1
ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --output text)
BUCKET_NAME=cf-templates-${ACCOUNT_ID}-${MAIN_REGION_ID}
JSON='{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Deny non SSL request",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::'${BUCKET_NAME}'",
"arn:aws:s3:::'${BUCKET_NAME}'/*"
],
"Condition": {
"Bool": {
"aws:SecureTransport": "false"
}
}
}
]
}'
aws s3api create-bucket --bucket ${BUCKET_NAME} --create-bucket-configuration "LocationConstraint=${MAIN_REGION_ID}"
aws s3api put-bucket-encryption --bucket ${BUCKET_NAME} --server-side-encryption-configuration '{"Rules": [{"ApplyServerSideEncryptionByDefault": {"SSEAlgorithm": "AES256"}}]}'
aws s3api put-public-access-block --bucket ${BUCKET_NAME} --public-access-block-configuration BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true
aws s3api put-bucket-policy --bucket ${BUCKET_NAME} --policy "${JSON}"
### CloudFormationから以下のテンプレートを実行する。
https://pg.mnztech.work/dokuwiki/_media/cloudformation.zip
#### 委任先アカウント
■メインリージョン
上記リンクから「DelegateAccountMainRegionStack.yaml」を委任先アカウントへ実行する。 ※スタックにて作成
■その他のリージョン
上記リンクから「DelegateAccountOtherRegionStackSets.yaml」を委任先アカウントへ実行する。 ※StackSetsからセルフサービスのアカウントID指定
#### 管理アカウント
■全てのリージョンを対象
上記リンクから「ManagedAccountStackSets.yaml」を管理アカウントへ実行する。 ※StackSetsからセルフサービスのアカウントID指定
#### 委任先アカウント以外のメンバアカウント
■全てのリージョンを対象
上記リンクから「MemberAccountStackSets.yaml」を管理アカウントへ実行する。 ※StackSetsからサービスマネージドのOUID指定
入力するパラメータは、それぞれ以下の通りになります。
{{:Aws:SecurityManagement:pasted:20220524-152837.png?direct 600}}
### CloudShellから以下を実行する。
##### SecurityHub
# 設定
## 全てのリージョンでSecurityHubからCISを無効化する
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 "## enable SecurityHub in ${region}"
aws --region ${region} securityhub batch-disable-standards --standards-subscription-arns "arn:aws:securityhub:${region}:${ACCOUNT_ID}:ruleset/cis-aws-foundations-benchmark/v/1.2.0"
aws --region ${region} securityhub update-standards-control --standards-control-arn "arn:aws:securityhub:${region}:${ACCOUNT_ID}:control/aws-foundational-security-best-practices/v/1.0.0/IAM.6" --control-status DISABLED --disabled-reason "仮想MFAで対応"
aws --region ${region} securityhub update-standards-control --standards-control-arn "arn:aws:securityhub:${region}:${ACCOUNT_ID}:control/aws-foundational-security-best-practices/v/1.0.0/CloudTrail.5" --control-status DISABLED --disabled-reason "EventBridgeで対応"
done
## 全てのリージョンでSecurityHubの自動有効化と現状のメンバ承認、リージョンの集約設定を行う
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}"
aws --region ${region} securityhub update-organization-configuration --auto-enable --auto-enable-standards NONE
MEMBER_ID=`aws organizations list-accounts --query "Accounts[?Id!='${ACCOUNT_ID}'].[Id,Email]" --output text | awk '{print "AccountId=" $1 "," "Email=" $2}'`
aws --region ${region} securityhub create-members --account-details $MEMBER_ID
aws --region ${region} securityhub create-finding-aggregator --region-linking-mode ALL_REGIONS
done
--> 確認/削除(戻し)#
# 確認
aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \
| while read region; do
echo "##### list organization admin account in ${region}"
aws --region ${region} securityhub get-enabled-standards
done
aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \
| while read region; do
echo "##### list organization admin account in ${region}"
aws --region ${region} securityhub list-members
aws --region ${region} securityhub list-finding-aggregators
done
# 削除(戻し)
# 全てのリージョンでSecurityHubを無効化する
aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \
| while read region; do
echo "## enable SecurityHub in ${region}"
aws --region ${region} securityhub disable-security-hub
done
<--
##### GuardDuty
# 全てのリージョンでGurdDutyのエクスポート先を設定する
ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --output text)
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
#全てのリージョンでGurdDutyの自動有効化と現状のメンバ承認を行う
ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --output text)
MEMBER_ID=`aws organizations list-accounts --query "Accounts[?Id!='${ACCOUNT_ID}'].[Id,Email]" --output text | awk '{print "AccountId=" $1 "," "Email=" $2}'`
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}
aws --region ${region} guardduty create-members --account-details ${MEMBER_ID} --detector-id ${DETECTOR_ID}
done
--> 確認/削除(戻し)#
# 確認
aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \
| while read region; do
echo "##### list organization admin account in ${region}"
DETECTOR_ID=`aws --region ${region} guardduty list-detectors --query 'DetectorIds' --output text`
aws --region ${region} guardduty list-detectors
aws --region ${region} guardduty describe-organization-configuration --detector-id ${DETECTOR_ID}
aws --region ${region} guardduty list-members --detector-id ${DETECTOR_ID}
done
# 削除(戻し)
# 全てのリージョンでGurdDutyを無効化する
aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \
| while read region; do
echo "## disable Guardduty in ${region}"
DETECTOR_ID=`aws --region ${region} guardduty list-detectors --query 'DetectorIds' --output text`
aws --region ${region} guardduty delete-detector --detector-id ${DETECTOR_ID}
done
<--
##### Detective
#全てのリージョンでGurdDutyの自動有効化と現状のメンバ承認を行う
ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --output text)
MEMBER_ID=`aws organizations list-accounts --query "Accounts[?Id!='${ACCOUNT_ID}'].[Id,Email]" --output text | awk '{print "AccountId=" $1 "," "EmailAddress=" $2}'`
aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \
| while read region; do
echo "## create member in ${region}"
GRAPH_ARN=`aws --region ${region} detective list-graphs --query 'GraphList[].[Arn]' --output text`
aws --region ${region} detective update-organization-configuration --auto-enable --graph-arn ${GRAPH_ARN}
aws --region ${region} detective create-members --accounts ${MEMBER_ID} --graph-arn ${GRAPH_ARN}
done
--> 確認/削除(戻し)#
# 確認
aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \
| while read region; do
echo "##### list organization admin account in ${region}"
GRAPH_ARN=`aws --region ${region} detective list-graphs --query 'GraphList[].[Arn]' --output text`
aws --region ${region} detective list-graphs
aws --region ${region} detective describe-organization-configuration --graph-arn ${GRAPH_ARN}
aws --region ${region} detective list-members --graph-arn ${GRAPH_ARN}
done
# 削除(戻し)
# 全てのリージョンでDetectiveを無効化する
aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \
| while read region; do
echo "## disable Detective in ${region}"
GRAPH_ARN=`aws --region ${region} detective list-graphs --query 'GraphList[].[Arn]' --output text`
aws --region ${region} detective delete-graph --graph-arn ${GRAPH_ARN}
done
<--
{{tag>AWS Organizations Security セキュリティプリセット}}