IAMポリシーでIPアドレス制限

IAMポリシーでいろいろな制限をする時に調べました。詳細は、IAM JSON ポリシーの要素: 条件演算子 で確認できます。間違っていたら教えてください。

IAMポリシーでIPアドレス制限

aws:SourceIpの中は、ネットワークCIDRの『○△×.○△×.○△×.○△×/32』でも、IPアドレスの『○△×.○△×.○△×.○△×』でもOK。以下は、AmazonRoute53ReadOnlyAccessでホワイトリスト的にIPアドレスを許可しています。このポリシーをIAMグループやIAMユーザーにアタッチしてIPアドレスで制限、もしくはネットワークCIDRで制限出来ます。固定IPアドレスに対応できます。

{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Allow",
        "Action": [
            "route53:Get*",
            "route53:List*",
            "route53:TestDNSAnswer"
        ],
        "Resource": "*",
        "Condition": {
            "IpAddress": {
                "aws:SourceIp": "○△×.○△×.○△×.○△×"
            }
        }
    }
}

IAMポリシー変更後の反映速度

IAMグループにアタッチしたIAMポリシーのJSONの変更は0.00001秒ですぐに反映されません。数秒かかります。IAMポリシー編集後、IAMポリシーの前バージョンが普通に表示されたりして、焦ります。ブラウザをリロードすると編集後のポリシーがやっと表示されたりします。検証しにくく時間がかかる作業です。IAMポリシー挙動検証用のIAMユーザーやIAMグループなどを一時的に作っている場合、変更したIAMポリシーが浸透しているかしっかり確認をしないと正しい挙動で検証できません。サクサク作業したいところですが、なかなかに効率が悪く気持ちが萎えやすいです。見積もりを安く出さないように十分気をつけましょう。

IAMポリシーでAWSのEC2インスタンスのリスト表示制限は出来ない

AWSマネジメントコンソールにおいて、IAMユーザごとに参照(表示)できるEC2インスタンスを制御したいを読むとわかりますが、DescribeInstancesはEC2ダッシュボードでEC2インスタンス単位のリスト表示のアクセス制限が出来ません(AWS CLIの場合は調べてないです)。EC2インスタンスは、コンソールで全インスタンスが見えてしまうか、全部見えないようにするのどちらかしかありません。数日間、さんざん検証して、EC2インスタンスのリスト表示をIAMグループ別に別けられなかった・・・。

EC2のリスト全表示は許容して、EC2インスタンス毎に禁止アクションを定義することしか出来ません。

以下は、StringLikeとアスタリスクでec2:CreateTagsとec2:DeleteTagsのec2:ResourceTag/Nameで部分一致判定していますが、何度も言うようにDescribeInstancesはインスタンス個々には適用できませんのでご注意ください。リスト表示ではなく、操作の制限で我慢してください。

完全一致の『StringEquals』ではなく、『StringLike』で部分一致として、リソースタグをIAMポリシーで利用出来ます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "EC2Describe01",
            "Effect": "Allow",
            "Action": "ec2:Describe*",
            "Resource": "*"
        },
        {
            "Sid": "EC2CrateDeleteTagsDeny01",
            "Effect": "Deny",
            "Action": [
                "ec2:CreateTags",
                "ec2:DeleteTags"
            ],
            "Resource": "*",
            "Condition": {
                "StringLike": {
                    "ec2:ResourceTag/Name": "production-*"
                }
            }
        },
        {
            "Sid": "EC2CrateDeleteTagsAllow01",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateTags",
                "ec2:DeleteTags"
            ],
            "Resource": "*",
            "Condition": {
                "StringLike": {
                    "ec2:ResourceTag/Name": "staging-*"
                }
            }
        }
    ]
}

IAMポリシーはビジュアルエディタでエラーが出なくなるまで、理解しながら丁寧に作るようにしてください。なんとなくググってコピペでポリシーエディタに貼り付けて使うと、ポリシーエディタが吐き出すエラーに気付かず放置してしまう可能性がかなり高いです。後から問題になり大変です。指摘の細かさについて良いとは言えないですが、ビジュアルエディタのほうがはるかにIAMポリシーのエラーに気づきやすいです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください