マネジメントコンソールの運用
よくあるポリシーとして、多要素認証の設定強制&IP制限をかけることがあります。
今回はそのポリシーと私自身が注意していることを記載します。
概要
マネジメントコンソールはIAMユーザを使用する。
IAMはAWSの各種リソースへのアクセス許可を管理するサービスであり
結構細かい権限まで、**コードベース(JSON, IaCならYAML定義も可)**で管理できる。
各権限はIAMポリシーと呼ばれる単位で定義ができ、作成した後IAMユーザに割り当てる。
通常は同様権限のユーザが複数存在するため、IAMグループを使用して管理する。
例;
インフラチーム;Admin権限
開発チームA;全基本サービスの読み書き権限
開発チームB;EC2,Code系サービスのみ読み書き権限
テストチーム;Read権限のみ
監査チーム;セキュリティサービスのみRead権限
など
運用方法によるが、基本IP制限、MFA強制のポリシーは全員に対して有効にさせる必要があるので、
IAMグループにそれぞれ割り当てるか、共通に属する専用のグループを作成して、全ユーザに属させることで実現。
使用するIAMポリシー
IP制限
※適当なプライベートIPアドレスに変えてる
{
"Version": "2012-10-17",
"Statement": [
"Effect": "Deny",
"Action": "*",
"Resource": "*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": [
"10.20.20.20/28",
"10.10.10.10/32"
]
}
}
}
]
}
「指定IPからのアクセス以外は、全てのアクションを拒否する」
前提として、このポリシーに加えて必要な権限のみをアタッチする運用。
単純にこのポリシーのみだと
指定したCIDRの範囲でアクセスすれば、全リソースへのアクセスを許可する。
例えばS3の権限のみポリシーがアタッチされているユーザであれば、
指定IPからのアクセスであればその権限が使用可能。
IAMのポリシーは、どんな場合でもDenyが最優先となる。
他のポリシーで拒否がかかればそのDenyポリシーが優先される。
MFA強制
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"NotAction": [
"iam:CreateVirtualMFADevice",
"iam:EnableMFADevice",
"iam:ResyncMFADevice",
"iam:DeactivateMFADevice",
"iam:DeleteVirtualMFADevice",
"iam:ListMFADevices",
"iam:ListVirtualMFADevices",
"iam:ListUsers"
],
"Resource": "*",
"Condition": {
"Bool": {
"aws:MultiFactorAuthPresent": false
}
}
}
]
}
「MFAが有効でない場合は、MFA関連以外の全てのアクションを拒否する」
Tips
IAMの権限を設定したけど適切かどうか検証するのが大変ですが
IAM Policy Simulatorを使用すると便利です。
IAMのグループ画面 > アクセス許可 > ポリシーのシミュレート 等から使用できます。
また、注意点として、Adminユーザが自身のアクセス権限を変更する際は
もう一人のAdminユーザを別に用意しておきましょう。。
間違うと自分の権限をロックしてしまってrootを引っ張ってくる事態になりかねないです。
まとめ
IAMは絞ろうと思えば極限まで絞れます。
ただ、はじめは検証を重ねて時間がかかること多いです。
開発段階では無理せずAWSマネージドポリシーを使用しつつ、
余裕があるときに絞っていく方針が良いのではと思います。