AWS　cdk bootstrap がうまくいかない

# 本記事の内容


https://catalog.workshops.aws/typescript-and-cdk-for-beginner/ja-JP/40-cdk-introduction/10-create-project/40-cdk-deploy

TypecScriptをつかってAWSCDKを学べるworkshopをやってる際のエラー

# エラー内容

ブートストラップに失敗しました
 AccessDenied: ユーザー: arn:aws:iam::ユーザーには実行権限がありません:
リソース上の Cloudformation中略 アイデンティティベースのポリシーがないため、 アクションが許可されないためです。
Cloudformation:DescribeStacks を実行する権限がありません。これは、cloudformation:DescribeStacks アクションを許可する ID ベースのポリシーがないためです。



### 中略と日本語訳で分かりずらいかもしれませんが、要はcloudformation:DescribeStacks アクションを許可するアイデンティティベースのポリシーがないからエラーになっているという事

# 
# そもそもアイデンティベースのポリシーってなんやねん

知ってる人は飛ばしてください。

知らない人向けに説明します！

公式のドキュメントから引用
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/access_policies_identity-vs-resource.html


アイデンティティベースのポリシー(決まり事)は、IAM ユーザー、グループ、ロールにアタッチ(接続)されます。これらのポリシーを使用すると、そのアイデンティティが実行できる内容 (そのアクセス許可) を指定できます。たとえば、John という名前の IAM ユーザーに Amazon EC2 RunInstances アクションを実行することを許可するポリシーをアタッチ(接続)できます。このポリシー(決まり事)では、John は、MyCompany という名前の Amazon DynamoDB テーブルからアイテムを取得することもできます。

### 用語説明(自分用)

IAMロール
IAM ロールは、特定の許可があり、アカウントで作成できるもう 1 つの IAM アイデンティティです。

参考記事
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_roles.html


ポリシー
決まり事

アタッチ
接続するとかで使われる

# cloudformaionってなんだって話

参考記事
https://aws.amazon.com/jp/cloudformation/

AWS CloudFormation は、インフラストラクチャをコードとして扱うことで、AWS およびサードパーティーのリソースをモデル化、プロビジョニング、管理することができます。

### 用語説明(自分用)

サードパーティー
Aのサイトを自分が見ているとしたらBのサイトやCのサイトはサードパーティー
要は関係のない第三者

モデル化
 物事の仕組み等を分かりやすく模型として単純化したもの

プロビジョニング
簡単に言うと準備とか提供
AWSだとユーザーが指定したリソースに合わせて自動で変更してくれるサービス

# エラーの対処法

ここまで概要を話してきたけどそろそろハンズオンでエラーの対処しよう！


cloudformation:DescribeStacks アクションを許可するアイデンティティベースのポリシーがないからエラーになっている

ならcloudformationにDescribeStacks アクションを許可するアイデンティティベースのポリシーを作ればいい！

やり方
①IAMにログイン
IAMからポリシー→ポリシーの作成→ポリシーの追加を押す

![messageImage_1690040063802.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2814661/4540e22b-f132-6157-67a0-30b938c5145e.jpeg)

②サービスを選択でcloudformationを検索バーで検索して選択

↓

③アクションを許可からDescribeStacksを検索バーで検索して選択

#### ※ここで以下の文が出てくると思う

説明
Grants permission to return the description for the specified stack, and to all stacks when used in combination with the ListStacks action

オプションのリソースタイプ
stack
次のアクションによります
エンティティが「DescribeStacks」を呼び出すことを許可するには、次のすべての必要な許可を付与します。
cloudformation:ListStacks

### つまりcloudformationのListStacksも追加しろーって事

上記と同様

④サービスを選択でcloudformationを検索バーで検索して選択

↓

⑤アクションを許可からListStacksを検索バーで検索して選択

↓

⑥次へを押す

ここまで来たらこの画面になっている筈
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2814661/fae90705-0597-0cab-3505-246cb68e1295.png)

⑦説明やポリシー名は自分が分かりやすいのを入れてね

↓

⑧作成出来たらOK

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2814661/8716e51d-d34c-b8ce-aaf4-441c37290daa.png)



### vscodeでcdkbootstrapを実行

ウキウキに実行したけどまたエラー

アイデンティティベースのポリシーでは、cloudformation:CreateChangeSet アクションが許可されていない。

どうやらまだ追加しないといけないらしい。

⑨ポリシーを編集

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2814661/966c71ea-5958-fea2-170a-e9f799cd10cb.png)

IAM->ポリシー->さっき作ったポリシーを選択->編集を押す

↓

⑩ポリシーを追加
右側にステートメントを編集があるのでそこからサービスを選択でcloudformationと入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2814661/25274f2e-42f9-45a2-6540-95ffcf26540d.png)

アクションにcreatechangesetを入力

```json:add_DescribeStacks.json

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "VisualEditor0",
			"Effect": "Allow",
			"Action": [
				"cloudformation:ListStacks",
				"cloudformation:CreateStack",
				"cloudformation:DescribeStacks",
				"cloudformation:CreateChangeSet"
			],
			"Resource": "*"
		}
	]
}

```

上のjsonファイルの様に書いてあれば大丈夫

⑪変更保存

↓

### 再度vscodeで実行

今度はcloudformationのDescribeChangeSetが足りないらしい…その後いろいろ追加した結果のjsonファイルがこちら

```json:add_DescribeStacks.json

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "cloudformation:ListStacks",
                "cloudformation:CreateStack",
                "cloudformation:DescribeStacks",
                "cloudformation:CreateChangeSet",
                "cloudformation:DescribeChangeSet",
                "cloudformation:GetTemplate",
                "cloudformation:DeleteChangeSet",
                "cloudformation:ExecuteChangeSet",
                "cloudformation:DescribeStackEvents",
                "cloudformation:DeleteStack",
                "iam:GetRole",
                "s3:CreateBucket",
                "s3:PutEncryptionConfiguration",
                "s3:PutLifecycleConfiguration",
                "s3:PutBucketVersioning",
                "s3:PutBucketPolicy",
                "s3:PutBucketPublicAccessBlock",
                "s3:DeleteBucketPolicy",
                "iam:CreateRole",
                "iam:AttachRolePolicy",
                "iam:DetachRolePolicy",
                "iam:DeleteRolePolicy",
                "iam:DeleteRole",
                "ssm:GetParameter*",
                "ssm:PutParameter",
                "ssm:DeleteParameter",
                "ecr:CreateRepository",
                "ecr:PutLifecyclePolicy",
                "ecr:SetRepositoryPolicy",
                "ecr:DeleteRepository",
                "ecr:DescribeRepositories",
                "iam:PutRolePolicy",
                "aws-portal:ViewAccount"
            ],
            "Resource": "*"
        }
    ]
}

```

### 再度vscodeで実行

はいエラー！

だるい！！！！！



 CDKToolkit という名前のスタックは失敗した状態です。 AWS コンソールから削除する必要がある場合があります

### 用語説明(自分用)

スタック
スタックは、単一のユニットとして管理できる AWS リソースのコレクションです。つまり、スタックを作成、更新、削除することで、リソースのコレクションを作成、更新、削除できます
超絶分かりやすく言うと
AWSリソースの集まりを「スタック」って言うんだってさ

参考記事
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/stacks.html


と言う事で再開
↓の記事を使ってやってみる

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html

以下記事から引用
⑫AWS CloudFormation コンソール (https://console.aws.amazon.com/cloudformation) を開きます。

⑬CloudFormation コンソールの [Stacks] (スタック) ページで、削除するスタックを選択します。スタックは現在実行中である必要があります。

⑭スタックの詳細ペインで、[削除] を選択します。

⑮プロンプトが表示されたら、[スタックの削除] を選択します。

自分の画面

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2814661/584682c0-2ef3-f8ee-c9d0-d5d744564ebd.png)

↓


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2814661/0a6bd032-95ab-7825-fa5e-6fa60bbc7b26.png)

※削除にはめっぽう時間がかかる

#### 人によってはs3bucketを削除する必要ありです！

一応教えておきます

参考記事
https://repost.aws/ja/knowledge-center/s3-error-bucket-already-exists


●1:Amazon S3 コンソールにログイン
↓
●2:バケットを選択して削除ボタンを押す
↓
●3:バケット名を入力して削除


#### 再度vscodeで実行

成功！！！！！！！！！！！！！！！！！！

ひゃっほーーーーーーーーーーーーーーーーー！！！！！

※実働8時間格闘してたから狂ってます

# 感想

まぁ正直なところ絶対カスタマーポリシーじゃなくて用意されているポリシーあるだろうなぁ…って内心思ってました…有識者の皆さま是非教えてください。

と言う事でまたエラー等が出たらお会いしましょう！！！