Closed5
AMIなどで意図しない共有がされているリソースのリスト方法
AMIやEBS Snapshotは共有する側の意思で勝手に共有することができてしまう。これを検知する方法がないため、まずは定期的にリストを確認して棚卸しをする運用とするのがよい?
そのために必要なリソースのリスト方法を確認する。
AMIの確認方法。PublicはイメージパーミッションをPublicにされた時点で表示されるため防ぎ用がない。そのため、意図した共有(Privateでアカウントにアクセス許可を与える方法)のリストを対象とする。確認は下記コマンドで可能。
-
--executable-users self
は自分が明示的な起動許可を持つAMIの一覧(自己所有のAMIは表示されない) -
--query
とか--output text
で表示を整えている -
--query
でOwnerIdを表示するようにして、意図された共有をしているアカウントだけ除外する。そうすると、意図しないアカウントから共有されているリソースだけ残る
aws ec2 describe-images --executable-users self --query 'Images[*].[ImageId,Name,OwnerId]' --output text | grep -v <除外するアカウントID>
同じように、EBS SnapshotとRDS Snapshot
- EBS
aws ec2 describe-snapshots --restorable-by-user-ids self --query 'Snapshots[*].[SnapshotId,OwnerId]' --output text | grep -v <除外するアカウントID>
- RDS
aws rds describe-db-cluster-snapshots --include-shared --snapshot-type shared --query 'DBClusterSnapshots[*].[DBClusterSnapshotArn]' --output text | grep -v <除外するアカウントID>
指定のOwnerIdを持つAMI以外は起動できないようにする
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Deny",
"Action": "ec2:RunInstances",
"Resource": "arn:aws:ec2:*::image/*",
"Condition": {
"ForAnyValue:StringNotEquals": {
"ec2:Owner": "amazon,xxxx"
}
}
}
]
}
指定のSnapshotからVolume作成を制御する方法
これで出来ると思うのだが、アカウントの指定がうまくいかない....
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Deny",
"Action": "ec2:CreateVolume",
"Resource": "*",
"Condition": {
"ForAnyValue:ArnEquals": {
"ec2:ParentSnapshot": "arn:aws:ec2:*:accountID:snapshot/*"
}
}
}
]
}
- アカウントIDを入れると作成できてしまう。
そもそも形式として、arn:aws:region::snapshot/snapshot-id
なので、アカウントIDによる制限はできない
アカウント指定じゃなければ出来る
このスクラップは2021/03/18にクローズされました