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.