![]() |
こんにちは。SCSKの上田です。
普段はZabbixの記事を書いていますが、夏休みクラウド自由研究ということでAWSの記事を書いています。
今回は、AWS IAMを使って様々な制限をかけることを研究してみました。
はじめに
AWSを安全かつ効率的に運用する上で、IAM(Identity and Access Management)は重要なサービスです。適切なIAMポリシーを設定することで、ユーザーやAWSサービスがアクセスできるリソースや実行できる操作を細かく制御し、セキュリティを強化し、運用上のミスを防ぐことができます。
しかし、「IAMポリシーをどう書けばいいのか」「IAMポリシーでどんな制限を設定できるのか」と悩む方もいらっしゃると思います。
この記事では、具体的なユースケースを例に挙げながら、IAMポリシーを活用して「こんな制限をかけられるんだ!」と感じていただけるような4つの実装例をご紹介します。
いろいろな制限
ここから、IAMの制限実装例を4つご紹介します。
①特定のIPアドレスからのアクセス制限
AWSにアクセスできるIPアドレスを制限します。
ユースケース
この設定により、社内NWやプロキシを経由していないユーザーからのアクセスをブロックできるので、不正なNWからのアクセスをブロックすることができます。
実装例
指定したIPアドレス以外からのアクセスの場合、すべての行動を禁止するポリシー文を実装します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": "*",
"Resource": "*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": "**.**.**.**/**" //グローバルIPアドレスを設定
}
}
}
]
}
補足
実際に設定する際は、”aws:SourceIp”の部分を、お使いのIPアドレスに変更してください。AWSにアクセスするIPアドレスを見ているので、プライベートIPアドレスではなくグローバルIPアドレスを記入する必要があります。
②特定のアクションに対するMFA強制
特定のアクションを実行する際に、MFAを必須にします。
ユースケース
特定の操作(例えば、リソースの削除)を行う際に、多要素認証(MFA)を必須にできるので、アカウント乗っ取り時の被害拡大を防ぐことができます。
実装例
MFAが設定されていないアカウントからのEC2インスタンスの削除を禁止するポリシー文を実装します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": [
"ec2:TerminateInstances"
],
"Resource": "*",
"Condition": {
"BoolIfExists": {
"aws:MultiFactorAuthPresent": "false" //ここでMFAを強制
}
}
}
]
}
補足
全ての行動をMFA強制すると、MFAを登録する操作すらできなくなってしまうので注意が必要です。
③特定の期間のみアクセス許可
AWSにアクセスできる期間を制限します。
ユースケース
本番環境へのアクセスを作業実施期間に制限することで、プロジェクト終了後にアクセスできなくさせることができます。
このような場合、プロジェクト終了後にアカウントを削除することが一般的ですが、オペミスによる削除忘れを防止することが可能です。
実装例
AWSへのアクセスを、JSTで「2025年7月31日18:00まで」の期間に制限するポリシー文を実装します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": "*",
"Resource": "*",
"Condition": {
"DateGreaterThan": {
"aws:CurrentTime": "2025-07-31T09:00:00Z" //JSTで2025年7月31日18時までに制限
}
}
}
]
}
補足
IAMポリシーの時刻はUTC時刻表期のため、注意が必要です。
④特定の文字列から始まるIAMユーザー名のみアクセスを許可
特定のアクションを実行できるユーザーをIAMユーザー名によって制限します。
ユースケース
複数のチームで同じAWSアカウントを共有している場合、特定のチームに属するユーザーのみが特定の操作やリソースにアクセスできるようする必要があります。そのような場合、チームごとに適切な権限を付与したIAMロールを作成するのが一般的だと思いますが、ユーザー名に基づくポリシー文を入れておくことで、オペミスによる意図しない権限付与を防ぐことができるようになります。
実装例
「ope」で始まるIAMユーザーのみ、EC2の削除ができるポリシー文を作成します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": [
"ec2:TerminateInstances"
],
"Resource": "*",
"Condition": {
"StringNotLike": {
"aws:username": "ope*" //ユーザー名を制限
}
}
}
]
}
補足
このポリシー文を入れておくことで、「ope」から始まるユーザー以外のEC2削除をブロックできます。使用する場合は、チーム名をIAMユーザー名に付与する(ope、dev、admなど)という運用ルールが必要になります。
最後に
今回は、IAMポリシーを使って色々な制限方法を実装してみました。IAMポリシーを上手く活用することで、様々な条件での制限や、オペミスを防止する制限を設定することが可能です。
AWSを使用するうえで権限管理は非常に重要なので、今回ご紹介した方法を参考に、安全な運用をご検討ください。
AWSの運用方法や実装方法にお困りの点がございましたら、是非弊社までお問い合わせください。
最後まで読んでいただき、ありがとうございました。