継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

特定のリージョンのみのリソース制御するための IAM ポリシー設定

タダです.

IAM 権限の制御としてリージョンレベルで制御したい要件が出てきたので調べてみたところ, aws:RequestedRegionで制限できるようなので検証した結果をブログにまとめます.なお,今回東京リージョンとソウルリージョンに EC2 を起動している状況で読み取り権限は全リージョン有効ではあるが, EC2 への変更権限や起動,停止といった権限は東京リージョンのみに限定する IAM ポリシーを設定して検証しました.

検証イメージ図 f:id:sadayoshi_tada:20190902160553p:plain

検証した IAM ポリシー

検証で使った IAM ポリシーは以下の通りです.このポリシーを IAM ユーザーに関連づけて東京とソウルの EC2 を起動,停止してみます.期待する結果は東京リージョンのサーバーは起動と停止はうまくいき,ソウルリージョンのサーバーは停止も起動もできない,です.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "InstanceConsoleReadOnly",
            "Effect": "Allow",
            "Action": [
                "ec2:Describe*"
            ],
            "Resource": "*"
        },
        {
            "Sid": "InstanceWriteRegionRestricted",
            "Effect": "Allow",
            "Action": [
                "ec2:ModifyInstancePlacement",
                "ec2:TerminateInstances",
                "ec2:ImportInstance",
                "ec2:StartInstances",
                "ec2:MonitorInstances",
                "ec2:RunScheduledInstances",
                "ec2:ResetInstanceAttribute",
                "ec2:RunInstances",
                "ec2:ModifyInstanceAttribute",
                "ec2:StopInstances",
                "ec2:AssociateIamInstanceProfile",
                "ec2:ModifyReservedInstances"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestedRegion": [
                        "ap-northeast-1" <= 東京リージョンのみ指定
                    ]
                }
            }
        }
    ]
}

AWS ドキュメント

docs.aws.amazon.com

EC2 の起動と停止の検証

東京リージョンの場合

東京リージョンで IAMTESTインスタンスが起動しているので,停止の操作を行なってみると無事に停止まで操作可能なことが確認できました. f:id:sadayoshi_tada:20190901230244p:plain

f:id:sadayoshi_tada:20190901225142p:plain

f:id:sadayoshi_tada:20190901225155p:plain

次に,起動してみます.起動も問題なく完了しました.東京リージョンは期待通りの操作ができることを確認できました. f:id:sadayoshi_tada:20190901230300p:plain

f:id:sadayoshi_tada:20190901230317p:plain

ソウルリージョンの場合

ソウルリージョンでも IAMTESTインスタンスが起動しているので,停止の操作を行なってみると停止処理が失敗することを確認できました. f:id:sadayoshi_tada:20190901231945p:plain

f:id:sadayoshi_tada:20190901232001p:plain

f:id:sadayoshi_tada:20190901232017p:plain

なお,エラー文をデコードするのは下記の AWS CLI で確認可能です.

$aws sts decode-authorization-message --encoded-message <エラー文>

次に,事前に違う権限を持つユーザーで停止しておいたサーバーを起動してみます.起動も失敗したのでソウルリージョンは期待通りの操作ができることを確認できました. f:id:sadayoshi_tada:20190901232924p:plain

f:id:sadayoshi_tada:20190901232937p:plain

f:id:sadayoshi_tada:20190901232947p:plain

まとめ

リソース制御をリージョンレベルで設定する IAM ポリシーの紹介とIAMポリシー制御の検証を EC2 の操作で確かめてみた結果をまとめました.AWS のドキュメントページにも注意事項として記載がありますが,リージョンレベルで制御することで動作しないサービスの操作もあるため設定を行う際は十分に注意し,テストした後設定を行うようにしましょう.

aws:RequestedRegion 条件キーを使用すると、呼び出されるサービスのエンドポイントを制御できますが、オペレーションの影響を制御することはできません。一部のサービスではリージョン間の影響があります。たとえば、Amazon S3 にはリージョン間レプリケーションを制御する API オペレーションがあります。1 つのリージョン (s3:PutBucketReplication の条件キーの影響を受ける) で aws:RequestedRegion を呼び出すことはできますが、他のリージョンはレプリケーションの構成設定に基づいて影響を受けます。