9月ですね,多田です.
IAM 権限の制御としてリージョンレベルで制御したい要件が出てきたので調べてみたところ, aws:RequestedRegion
で制限できるようなので検証した結果をブログにまとめます.なお,今回東京リージョンとソウルリージョンに EC2 を起動している状況で読み取り権限は全リージョン有効ではあるが, EC2 への変更権限や起動,停止といった権限は東京リージョンのみに限定する IAM ポリシーを設定して検証しました.
検証イメージ図
検証した 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 ドキュメント
AWS グローバル条件コンテキストキー - aws:RequestedRegion
EC2 の起動と停止での検証
東京リージョンの場合
東京リージョンで IAMTEST
インスタンスが起動しているので,停止の操作を行なってみると無事に停止まで操作可能なことが確認できました.
次に,起動してみます.起動も問題なく完了しました.東京リージョンは期待通りの操作ができることを確認できました.
ソウルリージョンの場合
ソウルリージョンでも IAMTEST
インスタンスが起動しているので,停止の操作を行なってみると停止処理が失敗することを確認できました.
なお,エラー文をデコードするのは下記の AWS CLI で確認可能です.
$aws sts decode-authorization-message --encoded-message <エラー文>
次に,事前に違う権限を持つユーザーで停止しておいたサーバーを起動してみます.起動も失敗したのでソウルリージョンは期待通りの操作ができることを確認できました.
まとめ
リソース制御をリージョンレベルで設定する IAM ポリシーの紹介とIAMポリシー制御の検証を EC2 の操作で確かめてみた結果をまとめました.AWS のドキュメントページにも注意事項として記載がありますが,リージョンレベルで制御することで動作しないサービスの操作もあるため設定を行う際は十分に注意し,テストした後設定を行うようにしましょう.
aws:RequestedRegion 条件キーを使用すると、呼び出されるサービスのエンドポイントを制御できますが、オペレーションの影響を制御することはできません。一部のサービスではリージョン間の影響があります。たとえば、Amazon S3 にはリージョン間レプリケーションを制御する API オペレーションがあります。1 つのリージョン (s3:PutBucketReplication の条件キーの影響を受ける) で aws:RequestedRegion を呼び出すことはできますが、他のリージョンはレプリケーションの構成設定に基づいて影響を受けます。