IAMのポリシーを設定するAWS Tips

IAM全体で使われる認証情報(ポリシー)の書き方について解説します。

» 2014年08月11日 18時00分 公開
[小室文@IT]
「AWS Tips」のインデックス

連載目次

IAMのポリシー要素とは

 AWS Identity and Access Management(IAM)でユーザー、グループ、ロールを作成するとき、アクセス許可を割り当てる際にはポリシーを作成し適用します。

 ポリシーとは、JSONフォーマットで記載されたアクセス権限をリスト化したものです。AWSサービス、リソースはアクセス許可を明示的に付与しない限り、アクセスできない(全て不許可)状態にあります。

 ポリシーは「Actions」「Resources」「Effect」「Condition」の4つを使って構成します。Conditionは条件分岐になるため、今回はConditionを除いた3つについて説明をします。

Actions:許可するアクション

 EC2インスタンスをAMIから起動させる「RunInstances」や、EC2インスタンスを止める「StopInstances」などのアクションがあります。アクションは、各サービスが提供するAPIに準拠します。各サービスがどのようなアクションを提供しているかは、各サービスのAPIドキュメントを見るとよいでしょう。

 例えば、IAMのアクションとして記載する場合は以下のように記載します。

フォーマット
サービス名(小文字):アクション名(アッパーキャメルケース) "ec2:RunInstances"

 アクション名は「*」を使うことで、文字数不定の任意の文字列にマッチするワイルドカード文字として利用できます。

フォーマット
\*アクション名 "ec2:*Instance*"

 上記のパターンだと、EC2が提供するInstanceという文字を含むAPI全てにマッチさせることが可能です。

(cli)aya:code komuro$ aws ec2 help | grep instance | cut -c 12-

bundle-instance

cancel-reserved-instances-listing

cancel-spot-instance-requests

confirm-product-instance

create-instance-export-task

create-reserved-instances-listing

describe-instance-attribute

describe-instance-status

describe-instances

describe-reserved-instances

describe-reserved-instances-listings

describe-reserved-instances-modifications

describe-reserved-instances-offerings

describe-spot-instance-requests

modify-instance-attribute

modify-reserved-instances

monitor-instances

purchase-reserved-instances-offering

reboot-instances

report-instance-status

request-spot-instances

reset-instance-attribute

run-instances

start-instances

stop-instances

terminate-instances

unmonitor-instances


 対象範囲からアクションを除きたい場合、「NotAction」を使うことができます。フォーマットはactionと同じです。このNotActionを組み合わせることで、ポリシーの記述を短くすることが可能です。

Resources:アクション対象のリソース

 各サービス内で利用できる個々のリソースに、上記のアクションを適用することが可能です。

フォーマット
arn:aws:サービス名:リージョン:AWSアカウントID(ハイフンなし):リソース "arn:aws:sqs:ap-northeast-1:12341234134:queue100"
arn:aws:s3:::バケット名/オブジェクト名 "arn:aws:s3:::komuro-bucket-web/home/${aws:username}/*"

 個々のサービスによってARNの使い方は異なります。例えば、Elastic Beanstalkは上記に追加して、環境名やバージョン名も含むことが可能です。

 リソースを対象範囲から除きたい場合、「NotResource」を使うことができます。フォーマットはResourceと同じです。NotResourceを組み合わせることで、ポリシーの記述を短くすることが可能です。

 リソースでは、以下のポリシー変数を利用できます。

変数名 詳細
${aws:username} アクセスしてきたIAMユーザー名(フレンドリー名)
${aws:userid} アクセスしてきたIAMユーザーID(これはIAMでの一意のID)
${www.amazon.com:user_id} ウェブIDフェデレーションによってアクセスしてきたAmazon.comのユーザーID名
${graph.facebook.com:app_id} ウェブIDフェデレーションによってアクセスしてきたFacebookのアプリID名
${accounts.google.com:aud} ウェブIDフェデレーションによってアクセスしてきたGoogle.comのアプリID名

 なお、SAML連携のポリシー変数に関しては、ドキュメント「IAM ポリシーエレメントの参照」をご覧ください。

変数名 詳細
"aws:CurrentTime" 現在の時間
"aws:EpochTime" 現在をエポック(Unix)時間
"aws:principaltype" プリンシパルがアカウント、ユーザー、フェデレーション、または引き受けられたロールかどうかを示す値
"aws:SecureTransport" リクエストがSSLを使っているかどうか
"aws:SourceIp" リクエスト元IPアドレス
"aws:TokenIssueTime" 一時的セキュリティ認証情報が発行された日付/時間
"aws:UserAgent" リクエスト元クライアントアプリケーションに関する情報
Conditionエレメントにて利用できる変数

Effect:ユーザーがアクセスを要求した時の動作

 Effectでは、ユーザーがアクセスした際の動作を定義します。Allow(許可)かDeny(不許可)を選択します。

 AWSサービスは、デフォルトではリソースに対するユーザーからのアクセスは拒否されるよう設計されているので、リソースへのアクセスを許可する場合は明示的に指定する必要があります。

 以下の記述では、EC2全てのアクションを許可するが、リザーブドインスタンス関連の全て、またインスタンスを終了させることを禁じています。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "ec2:*",
      "Effect": "Allow",
      "Resource": "*"
    },
   {
        "Effect": "Deny",
        "Action": [
        "ec2:*ReservedInstances*",
        "ec2:TerminateInstances"
        ],
        "Resource": "*"
    }
  ]
}

 IAMのポリシーサンプルが、ドキュメント「AWS リソースの管理に関するポリシーの例」にありますので、一読することをお勧めします。

小室文(こむろ あや)

好きなAWSサービスはRDS

サーバーワークス セールスチーム ソリューションアーキテクト

ウェブマーケティング業界で、インフラ/開発を経験した後、クラウドに取りつかれてJAWS-UGクラウド女子会コアメンバー。クラウド界隈出没中。明太子は永遠に不滅です。

CROSS2014セッションオーナー 、AWS SAMURAI AWARD 2014受賞。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。