はじめに
この記事では、AWSにおける「ポリシー」と「ロール」の基礎から運用のコツまでをわかりやすく解説します。クラウドの権限管理は一見むずかしく感じますが、仕組みを押さえれば安全で使いやすい環境を作れます。
対象読者
- AWSの基本は知っているが権限まわりに自信がない方
- 開発者や運用担当で実務に活かしたい方
本章で得られること
- この記事全体の構成と読み進め方が分かります
- ポリシー/ロールの違いについて直感的に理解できます(具体例あり)
簡単な例え
- ポリシー=「図書館の利用ルール」、ロール=「貸出カードや職員の肩書き」です。ルールを作って、肩書きを通じて誰がどのルールを使うか決めます。
この記事は、実務で使える感覚を重視して進めます。次章からは具体的な種類や書き方、運用上の注意点を順に見ていきましょう。
AWSにおける「ポリシー」と「ロール」の基本
はじめに
AWSでのアクセス制御は「ポリシー」と「ロール」で成り立ちます。ここではまず両者の役割と使い方をやさしく説明します。
ポリシーとは
ポリシーは誰が何をできるかを書いたJSONドキュメントです。主に「アクション(例: s3:GetObject)」「リソース(例: arn:aws:s3:::my-bucket/*)」「条件(例: IP制限)」で構成します。ユーザー、グループ、ロールにアタッチして権限を与えます。
ロールとは
ロールは一時的に権限を与えるための“仮想ユーザー”です。人やサービス(EC2やLambdaなど)が引き受けることで、そのロールに付いたポリシーの権限で操作できます。ロール自体に長期的な認証情報はありません。
実際のイメージ
- EC2がS3にファイルを置く:EC2インスタンスにロールを割り当て、S3書き込み権限のポリシーを付与します。
- クロスアカウント:別アカウントのユーザーに対してロールを引き受ける権限を与え、安全に権限委譲します。
注意点
デフォルトは無権限です。必要最低限の権限を付与(最小権限の原則)、有効期限や条件を使って制御すると安全です。
ポリシーの種類と管理
はじめに
AWSのポリシーは「誰が何をできるか」を決める設計図です。用途に応じて使い分けると運用が楽になります。
アイデンティティベースポリシー
IAMユーザー、グループ、ロールに直接付けるポリシーです。たとえば「開発者グループにS3の読み取りだけを許可する」といった個別の権限設定に使います。マネージド(再利用可能)とインライン(特定エンティティ専用)があります。マネージドは共通設定を配布しやすく、インラインは細かい例外に向きます。
リソースベースポリシー
S3バケットやLambda関数など、リソース自体に設定するポリシーです。外部アカウントからのアクセスを許可したいときに便利です。例:別アカウントのサービスにバケットへのPutObjectを許可する場合、バケットポリシーでアクセス元のアカウントを指定します。
マネージドポリシー(AWS提供とカスタム)
AWSが用意する「AmazonS3ReadOnlyAccess」などはすぐ使えます。手軽ですが権限が広めの場合があります。必要に応じてカスタムのマネージドポリシーを作り、最小権限を意識して設計してください。
管理のポイント
- 最小権限の原則で不要な許可を減らす。
- グループやロールでまとめて管理する。
- ポリシーは命名・バージョン管理して追跡する。
- ポリシーシミュレータで想定通り動くか事前に確認する。
- 定期的に見直しと監査を行う。
IAMロールの具体的な利用例(EKS/ECS/EC2)
EKS(Kubernetes)
- クラスターロール:信頼ポリシーでPrincipalにeks.amazonaws.comを指定します。クラスタ管理用にAmazonEKSClusterPolicyなどを割り当て、コントロールプレーンが必要な操作を行えるようにします。
- ノードロール(Worker):Principalにec2.amazonaws.comを指定し、AmazonEKSWorkerNodePolicy、AmazonEC2ContainerRegistryPullOnly、AmazonEKS_CNI_Policyなどを付与します。ノードがイメージをプルしたり、CNIを操作したりできます。
- IRSA(Podごとの権限):OIDCプロバイダーを作成し、KubernetesのServiceAccountにIAMロールを紐付けます。これによりPod単位で最小権限を実現できます。
ECS
- タスクロール(Task Role):各タスクに割り当てるロールです。アプリがS3やDynamoDBへアクセスする場合、必要な権限だけを付与します。
- 実行ロール(Task Execution Role):コンテナイメージをECRから取得したりログを送るための権限を与えます(例:AmazonECSTaskExecutionRolePolicy)。
- EC2起動タイプの場合はインスタンスロール(Principal=ec2.amazonaws.com)を用い、ECSエージェントやログ用権限を付与します。
EC2
- インスタンスプロファイル:EC2にアタッチするIAMロールです。SSMやS3アクセスなど用途に合わせてAmazonSSMManagedInstanceCoreや最小限のカスタムポリシーを設定します。
運用上のポイント
- ロールは「信頼ポリシー(誰が使えるか)」と「権限ポリシー(何ができるか)」を分けて設計します。
- Podやタスク単位でロールを分け、必要最小限の権限を付与することが重要です。これによりリスクを小さく保てます。
ポリシーの構造と評価方法
ポリシーの基本構造
ポリシーはJSONで表現され、主にStatementの配列で構成されます。各Statementは次の要素を持ちます。
– Effect:AllowまたはDenyを指定します。明示的なDenyが優先されます。
– Action:許可・拒否するAPI(例:s3:GetObject)を指定します。
– Resource:対象リソースのARN(例:arn:aws:s3:::example-bucket/*)を指定します。
– Principal:誰に対するポリシーか(リソースベースのみ)。
– Condition:アクセスの条件(IPやMFAなど)を指定します。
– Sid/Version:説明や互換性のための補助フィールドです。
Conditionの使い方(具体例)
Conditionは細かな制御を可能にします。よく使う演算子はStringEquals、Bool、IpAddress、ArnLikeなどです。例:
– 企業ネットワークからのみ許可:{“IpAddress”:{“aws:SourceIp”:”203.0.113.0/24″}}
– MFA必須:{“Bool”:{“aws:MultiFactorAuthPresent”:”true”}}
– 自分のユーザー名だけにアクセス許可:”Resource”:”arn:aws:iam::123456789012:user/${aws:username}”
ポリシー評価の流れ
AWSはリクエスト時に全ての関連ポリシーを評価します。評価の基本ルールは次の通りです。
1. 明示的なDenyがあれば拒否されます。
2. Allowがあれば許可されます。
3. いずれでもなければ暗黙のDenyとなります。
これにはアイデンティティベース、リソースベース、セッションポリシー、権限境界、Service Control Policyなどが含まれ、組み合わされて最終判定を行います。
実務上の注意点
- ワイルドカードや変数を使うと便利ですが過剰な許可になりやすいです。
- 変更時はIAMポリシーシミュレータで結果を検証してください。
最新のポリシー運用トレンド(宣言型ポリシー・Resource Control Policy)
宣言型ポリシーとは
宣言型ポリシーは、組織全体で望ましい状態を「宣言」し、その状態を自動で保つ仕組みです。個別のアカウントやリソースに対して設定を一つずつ行う代わりに、たとえば「EC2はIMDSv2を必須にする」「VPCのサブネットでパブリックIPを禁止する」といったルールを上位で定義します。結果として設定漏れやばらつきを減らせます。具体例として、IMDSv2の強制はインスタンス起動時のメタデータアクセスを安全にします。S3のパブリックアクセス制御も宣言で一括管理できます。
Resource Control Policy(RCP)とは
RCPは組織内のプリンシパル(ユーザーやロール)に対するサービス単位の厳格なアクセス制御を可能にする仕組みです。権限を一律に制限したり、特定サービスだけを許可するなどの方針を中央で定義します。IAMの個別ポリシーと組み合わせることで、細かな権限制御と全体のガバナンスを両立します。
運用上の利点
- 大規模環境での一貫性が向上します。設定ミスによるリスクを減らせます。
- ガバナンスを中央で効率よく運用できます。ポリシー変更の影響範囲を把握しやすくなります。
導入時のポイント
- まずは検知モードで影響範囲を確認します。実運用前にログやコンプライアンスツールで挙動を観察します。
- タグやOU単位で段階的に適用します。全社一斉適用は避けて段階的に広げます。
- 既存のIAMポリシーやSCPと整合させます。競合ルールがないか確認します。
- IaCやCI/CDで宣言を管理し、構成の差分を自動検出します。
実践例
- IMDSv2を必須化してメタデータ漏えいを防止する。
- VPC・サブネットでパブリックIPを禁止して外部公開を抑える。
- サービス単位でRCPを使い、開発アカウントでは一部サービスを無効化する。
これらのトレンドを取り入れると、セキュリティと運用効率を両立しやすくなります。導入は段階的に行い、可視化とテストを重視してください。
ベストプラクティスと運用上の注意点
最小権限の原則
必要最低限の権限だけを付与します。例えば、アプリが特定のS3バケットからオブジェクトを読むだけなら、GetObject権限のみを付与します。ワイルドカード(”*”)は避け、リソースやアクションを限定してください。これだけでインシデントの影響範囲を大きく減らせます。
管理ポリシーの活用とカスタムポリシー
一般的なユースケースはAWS管理ポリシーでカバーします。まずマネージドポリシーで運用してみて、必要な権限が不足する場合だけカスタムポリシーを作成します。カスタムポリシーは短く、目的ごとに分けて設計してください。
ポリシーの定期レビューと変更管理
AWSはサービス追加や権限変更を行います。運用中のポリシーは定期的に見直し、不要な権限が増えていないかチェックします。レビューは自動化ルール(タグやCI)で通知すると効率的です。
ロールの信頼ポリシーと権限ポリシーの分離
誰がロールを引き受けるか(信頼ポリシー)と、何ができるか(権限ポリシー)を明確に分けます。これにより、ロールの想定外利用を防げます。たとえば、EC2用ロールはEC2だけが引き受けられるよう信頼ポリシーを限定します。
運用上の注意点(監査・テスト・例外管理)
- ログと監査:CloudTrailやAccess Analyzerで権限利用を記録し、異常を検知します。
- テスト:変更はステージング環境で検証し、本番に段階的適用します。
- 例外管理:緊急時の特別権限(ブレイクグラス)は記録・期限付きにします。
- 権限境界とSCP:権限境界や組織のService Control Policyで安全域を設定します。
以上を習慣化すると、誤設定や権限過剰によるリスクを大幅に下げられます。