LoginSignup
1
0

AWS cdk bootstrap がうまくいかない

Last updated at Posted at 2023-07-24

本記事の内容

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

②サービスを選択で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

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

⑧作成出来たらOK

image.png

vscodeでcdkbootstrapを実行

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

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

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

⑨ポリシーを編集

image.png

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

⑩ポリシーを追加
右側にステートメントを編集があるのでそこからサービスを選択でcloudformationと入力
image.png

アクションにcreatechangesetを入力

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ファイルがこちら

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

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

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

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

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

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

自分の画面

image.png

image.png

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

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

一応教えておきます

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

●1:Amazon S3 コンソールにログイン

●2:バケットを選択して削除ボタンを押す

●3:バケット名を入力して削除

再度vscodeで実行

成功!!!!!!!!!!!!!!!!!!

ひゃっほーーーーーーーーーーーーーーーーー!!!!!

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

感想

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

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

1
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
1
0