【レポート】IAM Policy エキスパート(忍者)になろう。 #reinvent #SID314

2017.12.06

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。コカコーラ大好きカジです。

今回はre:Invent 2017で行われた「SID314 - IAM Policy Ninja」についてレポートします。 現地には行っておりませんので、Amazonで公開された、Youtube動画とSlideshareの情報を元にレポートしております。 該当のYoutubeとslideshareのリンクは一番下に記載いたします。

英語苦手なので誤りがありましたらご指摘いただけると助かります。

デモ t2インスタンスのみ構築できるIAMユーザ作成

いきなりデモからスタートしていました。

  • Actionに「EC2 Runinstances」でさらにResourcesで、すべてAnyを選択

  • Request Connditionsで「Add Request Conditions」で、InstanceTypeの指定

上記でPolicyを作成していました。 IAM Policy作成のときのVisual Editorを活用して設定する方法についてデモしていましたが、Visual Editorでここまで設定できることを知りませんでした。

検証環境向けに、IAMで高いインスタンスを使わせない制限って面白いです。

このセッションで学ぶこと

  • AWSリソースを制御するポリシー言語を学ぶ さまざまなタイプのポリシー、そのポリシーの使用方法、およびそれらの連携方法の理解
  • ポリシーに役立つツールを知る
  • ポリシーの忍者になろう!

ポリシー言語

  • 承認を提供する
  • 2つの部分:
    • 仕様:アクセスポリシーの定義
    • 強制:ポリシーの評価

ポリシーの基本仕様

  • JSONフォーマットドキュメント
  • ステートメントが含まれています(権限)
  • 指定する:
    • プリンシパルが実行できるアクション
    • どのリソースにアクセスできるか

複数のステートメントを持つことができ、各ステートメントは「PARC」で構成されます。

  • P:Principal
  • A:Action
  • R:Resource
  • C:Conditions

Principal

リソースへのアクセスを許可または拒否するエンティティ。 Amazonリソース名(ARN)によって示されます。 IAM Policyでは、主要な要素は暗黙的(すなわち、ユーザ、グループ、またはロールが接続されている)です。

Action

許可または拒否するアクセスの種類を記述します。 ドキュメントでアクションを見つけたり、ポリシーエディタを使用してドロップダウンリストを取得したりできます。 ステートメントには、ActionまたはNotActionのいずれかの要素が含まれている必要があります。

Resources

要求されている1つまたは複数のオブジェクト。 ステートメントには、Resource要素またはNotResource要素要素のいずれかが含まれていなければなりません。

Conditions

IAM Policyで時間枠とIPアドレス範囲にアクセスを制限したい場合はどうなりますか? 時間で指定できるの知らなかったです。ANDとORの考え方も重要です。

IAM ポリシーの評価の基準

  • 評価は、リクエストが拒否されるという前提からスタートします。
  • エンフォースメントコードは、リクエストに適用可能なユーザーベースおよびリソースベースのポリシーすべてを、リソース、プリンシパル、アクション、および条件に基づいて評価します。 エンフォースメントコードによるポリシー評価の順序は重要ではありません。
  • 前述のすべてのポリシーにおいて、リクエストに適応する明示的な拒否のインストラクションがエンフォースメントコードによって検索されます。 適用される明示的な拒否が 1 つでも見つかると、コードは「Deny」の結果を返してプロセスが終了します。
  • 明示的な拒否が見つからなかった場合、リクエストに適用され得る「Allow」のインストラクションがないか、エンフォースメントコードによって検索されます。 明示的な許可が 1 つでも見つかると、コードは「Allow」の結果を返し、サービスはリクエストの処理を続けます。
  • 許可が見つからない場合、最終結果は「Deny」となります。

マニュアルにも同じ図がありました。

http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_evaluation-logic.html

各種類のアクセス許可ポリシーを使用するタイミング

以下はIAMと同じポリシー言語を使いますが、それぞれの使い方は以下。

AWS Organizations = サービスへのアクセスを無効にするアカウントのガードレール。 AWS IAM = ユーザーまたはアプリケーションが実行する必要がある機能に基づいて詳細な権限を設定します。 AWS STS = 一般的な共有パーミッションをさらに減らします 特定のAWSサービス(例:S3バケットポリシー)=クロスアカウントアクセス、およびそのリソースからのアクセスを制御する。

デモ Service Control Polices(SCPs)とIAM Policy(キャシーにアタッチ)の組み合わせ

  • SCPsで、Deirectory ServiceとAmazon Polly以外は許可、Cloudtrailのログ停止は禁止
  • IAM Policy側でCloudtrailのログ停止許可しても、SCPsの方が聞いて許可されてないことをデモしていました。

さらにS3 Backet Policyを追加したデモ クロスアカウントからのデモが続きます。

Policy Tools - Policy summaries

ポリシーで許可されているアクセス許可を簡単に理解する方法

  • サービスとアクセスレベルの要約
  • アクションに対する4種類のアクセスレベル
    • リスト=リソースのリストを見る
    • 読み込み=リソース内のコンテンツを読み込む
    • 書き込み=リソースの作成、削除、変更、リソースの削除、変更、リソースの削除、変更、
    • パーミッション=リソースに対するパーミッションを許可または変更する 残りのサービスとアクションを表示する ポリシーのエラーを特定して修正する

Policy – Visual policy editor

AWSで権限を許可する方法を指差してクリックします。

  • IAMポリシーの作成と変更。
  • AWSサービスのリストを選択します。
  • 使用可能なアプリケーションのリストから選択します。
  • インラインドキュメントを使用してサービスとアクションを調べます。
  • サービスアプリケーションに指定できるリソースについて理解する。
  • 選択したアクションの使用可能な条件のリストから選択します。
  • AWSでタスクを実行するために必要な依存アクションを簡単に組み込むことができます。
  • 既存のポリシーをインポートして変更します。

デモ 既存のポリシーを修正する

開発者が特別なタグ付きのEC2のStart/StopとTerminateをEC2 Consoleから許可するポリシーを作ります。

  • けど上手くできない。
  • ポリシーの概要とエディタを使用して、既存のポリシーを修正していきます。

Visual policy editorを使って、設定間違いを見つけることができます。 ここまで色々指摘してくれることを知りませんでした。

  • サービスのタイプミス
  • サポートされているResourceとActionのミスマッチ
  • Conditionのキーが満たしていない
  • Actionにミスがある

Policy Foo - Access control with tags

あるポリシー - タグでアクセス制限する IAMユーザのキャシーにプロジェクト「blackjack」か「poker」のタグ付きインスタンス作成を許可。 ActionのRunInstancesで、StringEqualsを利用して特定タグ付きだけ許可するTipsの紹介

感想

IAM PolicyはAWSで作成されたマネージドのPolicyをアタッチして使うことが多いですが、

  • Visual policy editorを活用することで、細かい指定がやりやすくなったこと
  • Visual policy editorでミスしている部分を見つけやすいこと

を知ることができました。どなたかのお役に立てれば光栄です。

参照元

Slideshare

Youtube