AWS OrganizationsのSCP設計で参考になりそうなサンプルポリシーを作成してみる

記事タイトルとURLをコピーする

CI2部 技術2課の山﨑です。

AWS OrganizationsのSCPを利用する際、一からポリシー設計をするのは簡単ではありません。

それはSCPはIAM Policyとは用途が異なることが多い(拒否リスト、AWSアカウント全体のアクセス統制として利用することが多い)ため、同じ設計思想をそのまま適用することが難しいためです。

そこで今回はSCPを設計する上で参考になりそうなサンプルポリシーを作成してみました。

おさらい

Organizations SCP

SCPとはマルチアカウント管理でとても便利なサービスとして知られるAWS Organizations で利用可能なService Control Policy を示しています。SCPではOrganizations配下のOU(Organizational Unit)、AWSアカウントに対する権限を規定します。これによりOUやAWSアカウントはSCPで規定した権限以上のことは何もできなくなります。AWSのIAMのベストプラクティス (最小権限の許可)にしたがって細かい制御を行うのは運用負荷が高いので、SCPでは許可したいことではなく、拒否させたいことを規定する方が良いと思います。

SCPについては以下のブログをご参照ください

blog.serverworks.co.jp

Organizations については以下のブログをご参照ください

blog.serverworks.co.jp

注意点としては、SCPの有効範囲はIAM UserとIAM Roleのみであるという点です。評価ロジックに記載されているリソースベースのポリシー等をSCPで制御することはできず、アイデンティティベースのポリシーのみ制御ができます。

※参考:サービスコントロールポリシー (SCPs) - AWS Organizations

つまりSCPを適用している場合は、「SCPで明示的な許可」かつ「アイデンティティベースのポリシーで明示的な許可」をしている操作のみが最終的な許可される権限になります。

※参考: Policy evaluation logic - AWS Identity and Access Management

AWSドキュメントより抜粋

SCPのサンプルポリシー

AWSリソース構築時のストレージ暗号化を強制するSCP

  • EBS構築時にストレージ暗号化を強制
  • RDS構築時にストレージ暗号化を強制
  • EFS構築時にストレージ暗号化を強制
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ForceRDSStorageEncryption",
      "Effect": "Deny",
      "Action": [
        "rds:CreateDBInstance",
        "rds:CreateDBCluster"
      ],
      "Resource": [
        "*"
      ],
      "Condition": {
        "Bool": {
            "rds:StorageEncrypted": "false"
        }
      }
    },
    {
      "Sid": "ForceEBSStorageEncryption",
      "Effect": "Deny",
      "Action": [
        "ec2:RunInstances",
        "ec2:CreateVolume"
      ],
      "Resource": [
        "*"
      ],
      "Condition": {
        "Bool": {
            "ec2:Encrypted": "false"
        }
      }
    },
    {
      "Sid": "ForceEFSStorageEncryption",
      "Effect": "Deny",
      "Action": [
        "elasticfilesystem:CreateFileSystem"
      ],
      "Resource": [
        "*"
      ],
      "Condition": {
        "Bool": {
            "elasticfilesystem:Encrypted": "false"
        }
      }
    }
  ]
}

IAMの一部操作を禁止するSCP

  • アクセスキーの作成を禁止
  • IAMのパスワードポリシーの削除を禁止
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyIAMOperations",
      "Effect": "Deny",
      "Action": [
        "iam:CreateAccessKey",
        "iam:DeleteAccountPasswordPolicy"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

監査ログ、機密情報が格納されているS3への操作を制限するSCP

  • S3バケットの削除を禁止
  • バケットポリシーの削除を禁止
  • オブジェクトの削除を禁止
  • オブジェクトバージョンの削除を禁止
  • レプリケーションを禁止
  • レプリケーション設定の変更を禁止
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyS3Operations",
      "Effect": "Deny",
      "Action": [
        "s3:DeleteBucket",
        "s3:DeleteObject",
        "s3:DeleteObjectVersion",
        "s3:DeleteBucketPolicy",
        "s3:ReplicateObject",
        "s3:PutReplicationConfiguration"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

指定のAWSアカウント以外で、マネジメントコンソールにログイン可能なIAM Userの作成を禁止するSCP

  • マネジメントコンソールにログイン可能なIAM Userの作成(CreateLoginProfile)を禁止
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyCreateLoginProfile",
      "Effect": "Deny",
      "Action": [
        "iam:CreateLoginProfile"
      ],
      "Resource": [
        "*"
      ],
      "Condition": {
        "ForAllValues:StringNotLike": {
          "aws:PrincipalArn": [
            "arn:aws:iam::*:root",
            "arn:aws:iam::アカウントID:*"
          ]
        }
      }
    }
  ]
}

サービス影響が大きいネットワークコンポーネントの削除を禁止するSCP

  • TGWの削除
  • DXGWの削除
  • DXの接続の削除
  • VIFの削除
  • VPCの削除
  • Route53 Resolver Endpoint の削除
  • NetworkFirewall の削除
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyNWComponentsOperations",
      "Effect": "Deny",
      "Action": [
        "ec2:DeleteTransitGateway",
        "directconnect:DeleteDirectConnectGateway",
        "directconnect:DeleteConnection",
        "directconnect:DeleteVirtualInterface",
        "ec2:DeleteVpc",
        "route53resolver:DeleteResolverEndpoint",
        "network-firewall:DeleteFirewall"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

まとめ

今回はSCPを設計する上で参考になりそうなサンプルポリシーをいくつか作成してみました。

企業内で規定されているセキュリティポリシーやシステム要件によって制御すべき操作は異なるため、汎用的なSCPのポリシーを定義することはできませんが、SCP設計における一助となれば幸いです

山﨑 翔平 (Shohei Yamasaki) 記事一覧はコチラ

カスタマーサクセス部所属。2019年12月にインフラ未経験で入社し、AWSエンジニアとしてのキャリアを始める。2023 Japan AWS Ambassadors/2023-2024 Japan AWS Top Engineers