【随時更新】独自ポシシーを目的別にコピペするネタ

## このページの目的
目的に応じたポシリーを作るためのコピペ元です。

## EC2
### [IAM]特定のセキュリティポシリーだけを変更できる
アクセス元IPが頻繁に変更になるので、セキュリティーポシシーのinboundを変更したい。
`DescribeSecurityGroups` の Resourceは `*` にしておかないと、AWS console にログインして、セキュリティーポシシーの一覧を表示できないので、詰む。

```son
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeSecurityGroups"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ec2:AuthorizeSecurityGroupEgress",
        "ec2:AuthorizeSecurityGroupIngress",
        "ec2:RevokeSecurityGroupEgress",
        "ec2:RevokeSecurityGroupIngress"
      ],
      "Resource": [
        "arn:aws:ec2:region:account:security-group/sg-xxxx"
      ]
    }
  ]
}
```

http://qiita.com/kawaz/items/a86370c9908367bcb509
> DescribeSecurityGroupsはセキュリティグループ一覧の表示に必要なので `*` にせざるを得ない。不要なセキュリティグループの設定も見れてしまうが見れるだけで修正は出来ないから割りきって諦める。
AuthorizeSecurityGroupは設定の追加、RevokeSecurityGroup*は設定の削除に必要な権限、EgressとIngressはそれぞれOutboundルールとInboundルールのこと。Inboundの設定追加と削除だけなら*Egressの権限は付けなくて良かったね。

#### 参考ページ
* [IAMで特定セキュリティグループの設定の追加削除が出来るようにする設定](http://qiita.com/kawaz/items/a86370c9908367bcb509)


## S3

### [S3のバケットポリシー]アクセス元のIPアドレスを限定する

```json
{
    "Version": "2012-10-17",
    "Id": "Policy1492589305906",
    "Statement": [
        {
            "Sid": "Stmt1492589302713",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::my-bucket/*",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": "12.34.111.222"
                }
            }
        }
    ]
}
```

`my-bucket`への権限を全拒否しますが、 アクセス元のIPアドレスが `12.34.111.222` であれば全拒否から除外します。

### [S3のバケットポリシー]特定のアクセス元IPアドレスに対してpublicな参照
```json
{
    "Version": "2012-10-17",
    "Id": "Policy1492589305906",
    "Statement": [
        {
            "Sid": "publicAccess",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::my-bucket/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "12.34.111.222"
                }
            }
        }
    ]
}
```
アクセス元のIPアドレスが `12.34.111.222` であれば読み込みを許可します。オブジェクト単位に参照権限を設定する手間を省けます。

上の [アクセス元のIPアドレスを限定する](#[S3のバケットポリシー]アクセス元のIPアドレスを限定する) と組み合わせて、組織内からのアクセスはpublicな参照を行えます。

#### 参考ページ
* [Amazon S3で限定したIPアドレスに公開する静的サイトをつくる](http://engineer.crowdworks.jp/entry/2014/08/19/s3-access-control-with-bucket-policy.html)



### [IAM]利用できるバケットを限定する
バケット `my-bucket1` と `my-bucket2 ` は全ての操作を行えます。

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::my-bucket1",
                "arn:aws:s3:::my-bucket1/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::my-bucket2",
                "arn:aws:s3:::my-bucket2/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "*"
        }
    ]
}
```

`"Action": "s3:ListAllMyBuckets"` 下の場合に必要です。

1. AWS Consoleから操作する。
1. Cyberduck のようなGUIを使う場合に初期バケットを指定しない。


## リファレンス
* [Amazon EC2 の IAM ポリシー](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/iam-policy-structure.html)

## 参考ページ
* [AWS IAMによる権限設定のハマりどころと、効率的なデバッグ方法](http://yamitzky.hatenablog.com/entry/2015/12/04/031554)