AWSのポリシー一覧

英語が読めないので噛み砕いた日本語に翻訳しますlol
一応ほどほどにアクセス検証も行なっております。

# ポリシーの注意事項
・**カスタムポリシー**：自分でゼロから作れるポリシー。使い回しできます。
・**インラインポリシー**：カスタムポリシーのように細かく設定できますが、使い回す様な保存はできません。


# Lambda
## ・Lambdaで関数を作成する

| サービス名         |実際の表記 |あればリソース|そして解説    |
|:-----------------|---------------|-------|--------------------------------------------------|
| Lambda　　　　　　　　|lambda:CreateFunction||Lambdaの関数の作成<br>※リソースが必要|
||〃|全てのリソース|とりあえずこれにしておいて|
|IAM|iam:PassRole|arn:aws:iam::*:role/{Lambda関数名}|Lambda関数名から始まるロールを既存のロールとして読み込み

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "lambda:CreateFunction"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::*:role/hoge-*"
        }
    ]
}
```

※関数を作ることはできるけど、次のことができません！
・`次のことを実行する権限がありません: cloudformation:DescribeStackResources.`
・`User:  is not authorized to perform: kms:ListAliases on resource: *`
→多分トリガーの設定ができないとおっしゃっている・・・
・`コードの書き換えもできない`
→なんと・・・保存ボタンは押せるけど、コードの変更は反映されていない！print文とかでない。


## ・Lambdaで関数を削除する

| サービス名         |実際の表記 |あればリソース|そして解説    |
|:-----------------|---------------|-------|--------------------------------------------------|
| Lambda　　　　　　　　|lambda:DeleteFunction||Lambdaの関数の削除<br>※リソースが必要|
||〃|全てのリソース|とりあえずこれにしておいて|

消せました。

## ・Lambdaで関数のインラインコードを更新して反映させる
作成するやつだけでは更新できなかったので…

| サービス名         |実際の表記 |あればリソース|そして解説    |
|:-----------------|---------------|-------|--------------------------------------------------|
| Lambda　　　　　　 |lambda:UpdateFunctionCode||Lambdaの関数の更新|
||〃|全てのリソース|とりあえずこれにしておいて|

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


# S3
## ・Bucketを作成する
これは簡単

| サービス名         |実際の表記 |あればリソース|そして解説    |
|:-----------------|---------------|-------|--------------------------------------------------|
| S3　　　　　　　　|s3:CreateBucket||バケットを作る|
||〃|arn:aws:s3:::{バケット名-*}|*が使えるのでバケット名を縛ることができる|
resouce: `arn:aws:s3:::hoge-*` としたら、バケットを作る時に `hoge-bucket` としなければならない。
プレフィックスが違うと作成できないよ。



## ・S3基本操作のロールを作る
ためになります。
https://dev.classmethod.jp/cloud/aws/access-control-on-specific-path-on-s3bucket/

| サービス名         |実際の表記 |あればリソース|そして解説    |
|:-----------------|--------------|-------|------------------------|
| S3　　　　　　　　|s3:ListBucket|arn:aws:s3:::{PJ名}-*|ListObjectするために必要なやつ|
| S3　　　　　　　　|s3:GetObject|〃|オブジェクトが見れる|
| S3　　　　　　　　|s3:PutObject|〃|オブジェクトが更新、追加できる|
| S3　　　　　　　　|s3:DeleteObject|〃|オブジェクトが削除できる|
| S3　　　　　　　　|s3:PutBucketVersioning|〃|バケットのバージョニングが確認できる|
| S3　　　　　　　　|s3:ListAllMyBuckets|*|コンソール画面からバケット一覧が見れる|
| S3　　　　　　　　|s3:HeadBucket|*|正直なぞい|

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucketVersions",
                "s3:ListBucket",
                "s3:DeleteObject",
                "s3:PutBucketVersioning"
            ],
            "Resource": [
                "arn:aws:s3:::hoge-*"
            ]
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets",
                "s3:HeadBucket"
            ],
            "Resource": "*"
        }
    ]
}
```


## ・Lambdaの基本操作のロールを作る

| サービス名         |実際の表記 |あればリソース|そして解説    |
|:-----------------|--------------|-------|------------------------|
| Lambda　　　　　|lambda:UpdateFunctionCode|arn:aws:lambda:*:*:function:hoge-*|インラインコードで書いて変更を保存し反映させる|
|Lambda　　　　　　|lambda:InvokeFunction|〃|ラムダからラムダを呼び出すやつ|
|Lambda　　　　　　|lambda:ListVersionsByFunction|〃|？|
|Lambda　　　　　　|lambda:GetFunction|〃|関数の読み込み|
|Lambda　　　　　　|lambda:ListAliases|〃|エイリアスの取得。エイリアスはファンクションのバージョンてきなやつ。任意で保存可能。|
|Lambda　　　　　　|lambda:CreateAlias|〃|エイリアスの作成|
|Lambda　　　　　　|lambda:ListFunctions|*|関数の一覧|
|Lambda　　　　　　|lambda:GetAccountSettings|*|Lambdaコンソールのところにアクセスする|
|Lambda　　　　　　|lambda:ListLayers|*|レイヤー一覧|
|Lambda　　　　　　|lambda:ListLayerVersions|*|レイヤーのバージョン一覧|

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "lambda:UpdateFunctionCode",
                "lambda:InvokeFunction",
                "lambda:ListVersionsByFunction",
                "lambda:GetFunction",
                "lambda:ListAliases",
                "lambda:CreateAlias"
            ],
            "Resource": "arn:aws:lambda:*:*:function:hoge-*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "lambda:ListFunctions",
                "lambda:GetAccountSettings",
                "lambda:ListLayers",
                "lambda:ListLayerVersions"
            ],
            "Resource": "*"
        }
    ]
}
```

### 特定のS3バケットにだけアクセス
・バケット名一覧は取得できる
・hogeで始まるバケット以外は、中身がみれない

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:GetAccountPublicAccessBlock",
                "s3:ListAllMyBuckets",
                "s3:ListJobs"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "s3:Get*",
                "s3:List*"
            ],
            "Resource": [
                "arn:aws:s3:::*/*",
                "arn:aws:s3:*:*:job/*",
                "arn:aws:s3:::hoge*"
            ]
        }
    ]
}
```

# ・LambdaのS3トリガーがついているかどうかを確認する
```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "lambda:ListEventSourceMappings",
                "lambda:GetPolicy"
            ],
            "Resource": "*"
        }
    ]
}
```