LoginSignup
0
0

More than 3 years have passed since last update.

40代おっさんIAMを深堀して勉強してみた

Posted at

本記事について

本記事はAWS初学者の私が学習していく中でわからない単語や概要をなるべくわかりやすい様にまとめたものです。
もし誤りなどありましたらコメントにてお知らせいただけるとありがたいです。

ポリシーをJSON形式で記述

*IAMのことをサラッと知りたい方は↓を
https://qiita.com/kou551121/items/5adf2241f0e106e18e50

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ListBucketRstIP",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::sample-bucket",
            "Condition": {
                "StringEquals": {
                    "aws:SourceIP": "12.34.56.78"
                }
            }
        }
    ]
}

こちらがJSON形式のドキュメントになりますがわからないですよね・・・
詳しく細分化してみたいと思います。

"Version"

こちらはバージョン情報になります。

"Statement"

大事になるのがStatementの中の情報になります。
こちらも細分化して説明します。

"Sid"

IDになり名前のようなもの(省略もできる)

"Effect"

許可するポリシーだったら"Allow"
拒否する(無効にする場合は)"Deny"

"Principal"

プリンシパルはリソースにアクセスする情報を記載します上の*はすべてのアカウント対しての記述になります。
そのほかに

"Principal":{"AWS":"arn:aws:iam::123456789012:root"}
これで特定のアカウントを指定

"Principal":"AWS":"arn:aws:iam::123456789012:user/username"
これで特定のIAMユーザーを指定

"Principal":{"Federated":"www.amazon.com"}
"Principal":{"Federated":"graph.facebook.com"}
これでフェデレーティッドウェブ ID ユーザーを指定

"Principal":{"Service":"ec2.amazonaws.com"}
これでEC2を指定

"Action"

ActionはあらかじめAWS決められた形式で何のサービスでどのような操作かを指定
ListBucketはバケットの中身をList(lsやdir)するアクション
そのほかに

"Action":"ec2:StartInstances"
ec2のインスタンスをスタートするアクション

"Action":"iam:ChangePassword"
IAMユーザーのパスワードを変更するアクション

"Action":"s3:GetObject"
S3のオブジェクトを取得するアクション

"Action":["sqs:SendMessage","sqs:ReceiveMessage"]
[,]カンマ区切りで複数のアクションを指定できる

"Action":"iam: *AccessKey* "
アクションの一部に*(ワイルドカード)を入れることもできる

"Resource"

どのリソースに対してのポリシーかを指定します
AWSでリソースを作成すると arn と言う固有の文字列が割り振られます。
上だとリソースにs3のsample-bucket指定していることになります。
そのほかに

"Resource": ["arn:aws:dynamodb:us-west-2:123456789012:table/books_table",
"arn:aws:dynamodb:us-west-2:123456789012:table/magazines_table"]
上のように[,]カンマ区切りで複数指定できることできます。

"Resource": "arn:aws:ec2:us-east-1:123456789012:instance/*"
こちらだと123456789012アカウントのus-east-1リージョン内のec2インスタンスすべてと指定しています。

"Condition"

こちらはIPアドレスの接続元を制限したり、ポリシーの有効期限(何時から何時まで有効など)

"Condition" : {
    "DateGreaterThan" : {"aws:CurrentTime" : "2015-10-08T12:00:00Z"},
    "DateLessThan" : {"aws:CurrentTime" : "2015-10-08T15:00:00Z" },
    "InAddress" : {"aws:SourceIp" : ["192.0.2.0/24", "203.0.113.0/24"]}

上のような場合
縦はAND条件
[,]カンマ区切りはOR条件になります

その他に

NotPrincipal
NotAction
NotResource
とNotがあり、意味は指定した物以外ある

アイデンティティベースのポリシーについて

IAMユーザーや、IAMロールなどのなどの認証主体に付与するポリシー

↓アイデンティティベースのポリシー記述例


{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "ec2:*",
            "Resource": "*"
         }
    ]
}

アイデンティティベースのポリシーでは基本、Principalは書きません
なぜならポリシーをアタッチする対象が明確だから

リソースベースのポリシーについて

上とは逆に操作される側であり、Amazon S3やAmazon SNSなどのAWSリソース側にアタッチするポリシー

最後に

またこの記事は AWS 初学者を導く体系的な動画学習サービス「AWS CloudTech」の課題カリキュラムで作成しました。
https://aws-cloud-tech.com/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0