【AWS】Declarative Policies を試す【Control Tower】
はじめに
Organizations で適用可能なポリシーに Declarative Policies が追加されました。
SCP のように API 操作を禁止するのではなく、IaC のように AMI をパブリック公開しない
といった望ましい状態を定義しておくというものです。
Control Tower の Preventive Control としても追加されていますが、以下のみ対応しています。(逆に Allowed Images Settings、Instance Metadata Defaults が非対応)
- [CT.EC2.PV.7] Disallow all public sharing of Amazon EBS snapshots
- [CT.EC2.PV.8] Disallow inbound and outbound internet connections to your VPCs through an internet gateway (IGW) or egress-only internet gateway (EIGW)
- [CT.EC2.PV.9] Disallow access to the EC2 serial console for all EC2 instances
- [CT.EC2.PV.11] Disallow public sharing of Amazon Machine Images (AMIs)
Declarative Policies がサポートしている対象の機能はこちらを参照。
試してみる
シリアルコンソールアクセスを許可している場合に、Control Tower から [CT.EC2.PV.9] すべての EC2 インスタンスのために、EC2 シリアルコンソールへのアクセスを禁止する
を有効化してみます。
現在はシリアルコンソールが利用できる状態になっています。
以下のコントロールを適用します。
シリアルコンソールの有効/無効の設定が変更できなくなり、「禁止」と表示されました。
もちろんシリアルコンソール自体も利用不可能となりました。SCP や RCP 同様に Preventive Control であり、現行の環境に影響を与えうる設定のため適用には十分注意が必要です。
Organizations の管理者側で勝手に設定できてしまうので、メンバーアカウントを利用している人からすると急に利用できなくなるという体験が考えられます。(もちろん周知すると思いますが)
そういった場合にカスタムエラーメッセージを表示し、メンバーアカウントの利用者に管理者からメッセージを伝えてイントラサイトの URL を表示するなどが可能です。
Control Tower 経由で有効化した場合は This action is blocked by a declarative policy that is managed by AWS Control Tower. For details, contact the administrator for your organization.
というメッセージになっていますが、ポリシーを直接変更することでカスタムエラーメッセージの変更可能です。ただし、To modify these controls, you must utilize AWS Control Tower.
と説明に記載があるので自己責任になります。ちなみに日本語は使えなさそうでした。
また、カスタムエラーメッセージは管理コンソール上からは見えないのですが、API 経由で操作すると表示されることを確認しました。(Custom Message: Declarative Policy Test)
[cloudshell-user@ip-10-140-29-45 ~]$ aws ec2 enable-serial-console-access --region us-west-2
An error occurred (DeclarativeAttributePolicyViolation) when calling the EnableSerialConsoleAccess operation: This control is managed by your organizations administrator. This functionality has been disabled by a Declarative Policy. Custom Message: Declarative Policy Test
役割を考えると管理コンソールからも表示されるべきだと思いますので、今後のアップデートに期待です。
アカウントステータスレポート
Declarative Policy 有効化前の Organiations 全体への影響把握については、「アカウントステータスレポート」が利用できます。
レポートは S3 に出力されるため、バケットポリシーの設定が必要です。
以下にサンプルがありました。バケットは us-east-1 に作成する必要がありそうでした。
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "DeclarativePoliciesReportBucket",
"Effect": "Allow",
"Principal": {
"Service": ["report.declarative-policies-ec2.amazonaws.com"]
},
"Action": ["s3:PutObject"],
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
"Condition": {
"StringEquals": {
"aws:SourceArn": "arn:aws:declarative-policies-ec2:us-east-1:your-12-digit-account-id:*"
}
}
}]
}
EC2 サービスに対する信頼されたアクセスの有効化も行います。
aws organizations enable-aws-service-access --service-principal ec2.amazonaws.com
ここまで実施するとレポートの作成が行えます。
レポートを作成すると管理コンソール上で参照することができます。
また、S3 上には ec2_[report_coverage]_[report_name]_yyyymmddThhmmZ.csv
の形式で CSV ファイルが作成されており、中身はアカウント * リージョンで各設定がどのようになっているかが出力されていました。
accountId,region,attribute,value,checkedAt,error
123456789012,ap-south-1,serial_console_access,false,2024-12-04T07:41:14.757190658Z,
123456789012,ap-south-1,instance_metadata_defaults,{"HttpTokens":"required"},2024-12-04T07:41:14.757190658Z,
123456789012,ap-south-1,image_block_public_access,block-new-sharing,2024-12-04T07:41:14.757190658Z,
123456789012,ap-south-1,snapshot_block_public_access,unblocked,2024-12-04T07:41:14.757190658Z,
123456789012,ap-south-1,allowed_images_settings,{"State":"disabled"},2024-12-04T07:41:14.757190658Z,
123456789012,ap-south-1,vpc_block_public_access,"{""State"":""default-state"",""InternetGatewayBlockMode"":""off""}",2024-12-04T07:41:14.757190658Z,
---snip---
以上
Discussion