【AWS】IAM ~ IAM Policy 編 ~

■ はじめに

https://dk521123.hatenablog.com/entry/2017/02/26/231046

の続き、又は、以下の関連記事の一部。

https://dk521123.hatenablog.com/entry/2020/09/29/165636

 今回は、
IAM(Identity and Access Management)のIAM Policy(ポリシー)
について、メモする。

目次

【1】IAM Policy
【2】IAM Policy / JSON要素
 1)Version
 2)Statement
 3)Sid
 4)Effect
 5)Action
 6)Resource
 7)Condition
 8)Principal
【3】サンプル
 例1:Hello world
 例2:EC2 の開始・停止
 例3:EC2 の ReadOnly

【1】IAM Policy

* S3を含むAWSリソースへのアクセス権・実行権限を
 JSON形式で定義・コントロールできる
* 深堀りするなら、以下のサイトが勉強になりそう。

https://dev.classmethod.jp/articles/iam-group-policy-for-s3-bucket-control/

【2】IAM Policy / JSON要素

* 代表的なものは以下の通り。
~~~~~~~
1)Version
2)Statement
3)Sid
4)Effect
5)Action
6)Resource
7)Condition
8)Principal
~~~~~~~

* 詳細および上記以外の項目は、以下の公式サイトを参照

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_elements.html

1)Version

* ポリシー言語のバージョン
* 「"Version": "2012-10-17"」は現行の最新。(「2008-10-17」は旧バージョン)

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_elements_version.html

2)Statement

* 設定項目

3)Sid

* 任意の識別子
* JSON ポリシー内で固有にする必要がある
* !メモ! あると可読性があがるから指定したほうがいい

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_elements_sid.html

4)Effect

* 「許可(Allow)」or「拒否(Deny)」
* 明示的な拒否ステートメント(Deny)は、許可ステートメント(Allow)よりも優先される

5)Action

* 対象サービス操作
* 配列形式

6)Resource

* 対象リソース
* 配列形式。

7)Condition

* 実行する条件を指定可能

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_elements_condition.html

* 以下の関連記事のRoleのように実行条件「タグにOwner=Admin」が
 設定されているもののみ実行を許可するような制限を書けることができる

https://dk521123.hatenablog.com/entry/2020/08/05/144724

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "elasticmapreduce:RunJobFlow"
            ],
            "Resource": "arn:aws:ec2:elasticmapreduce:*/*",
            "Condition": {
                "StringEquals": {"elasticmapreduce:ResourceTag/Owner": "admin"}
            }
        }
    ]
}

8)Principal

* リソースへのアクセスを許可または拒否する
 ユーザー、アカウント、サービス、または他のエンティティを指定

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/s3-bucket-user-policy-specifying-principal-intro.html

【3】サンプル

例1:Hello world
例2:EC2 の開始・停止
例3:EC2 の ReadOnly

S3 に関するアクセス制御については、以下の関連記事を参照のこと。

Amazon S3 ~ アクセス制御 / IAM Policy 編 ~
https://dk521123.hatenablog.com/entry/2020/10/24/201738
例1:Hello world

{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Sid":"S3Control",
         "Effect":"Allow",
         "Action":[
            "s3:PutObject",
            "s3:PutObjectAcl",
            "s3:GetObject",
            "s3:GetObjectAcl",
            "s3:DeleteObject"
         ],
         "Resource":"arn:aws:s3:::your-s3-bucket/xxxx/*"
      },
      {
         "Sid":"CloudWatchControl",
         "Effect":"Allow",
         "Action":[
            "logs:*"
         ],
         "Resource":"*"
      },
   ]
}

例2:EC2 の開始・停止

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "ec2:Describe*",
        "ec2:StartInstances",
        "ec2:StopInstances"
      ],
      "Resource": [
        "*"
      ],
      "Effect": "Allow"
    }
  ]
}

例3:EC2 の ReadOnly

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "ec2:Describe*",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "elasticloadbalancing:Describe*",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "cloudwatch:ListMetrics",
        "cloudwatch:GetMetricStatistics",
        "cloudwatch:Describe*"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "autoscaling:Describe*",
      "Resource": "*"
    }
  ]
}

関連記事

IAM ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2017/02/26/231046
Amazon S3 ~ アクセス制御編 ~
https://dk521123.hatenablog.com/entry/2020/09/29/165636
Amazon S3 ~ アクセス制御 / IAM Policy 編 ~
https://dk521123.hatenablog.com/entry/2020/10/24/201738
AWS Glue のトラブル ~ Job編 ~
https://dk521123.hatenablog.com/entry/2019/10/25/232155
Amazon EMR に関するトラブルシューティング
https://dk521123.hatenablog.com/entry/2020/08/05/144724