本記事の内容
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からポリシー→ポリシーの作成→ポリシーの追加を押す
②サービスを選択で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を検索バーで検索して選択
↓
⑥次へを押す
⑦説明やポリシー名は自分が分かりやすいのを入れてね
↓
⑧作成出来たらOK
vscodeでcdkbootstrapを実行
ウキウキに実行したけどまたエラー
アイデンティティベースのポリシーでは、cloudformation:CreateChangeSet アクションが許可されていない。
どうやらまだ追加しないといけないらしい。
⑨ポリシーを編集
IAM->ポリシー->さっき作ったポリシーを選択->編集を押す
↓
⑩ポリシーを追加
右側にステートメントを編集があるのでそこからサービスを選択でcloudformationと入力
アクションにcreatechangesetを入力
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"cloudformation:ListStacks",
"cloudformation:CreateStack",
"cloudformation:DescribeStacks",
"cloudformation:CreateChangeSet"
],
"Resource": "*"
}
]
}
上のjsonファイルの様に書いてあれば大丈夫
⑪変更保存
↓
再度vscodeで実行
今度はcloudformationのDescribeChangeSetが足りないらしい…その後いろいろ追加した結果の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] (スタック) ページで、削除するスタックを選択します。スタックは現在実行中である必要があります。
⑭スタックの詳細ペインで、[削除] を選択します。
⑮プロンプトが表示されたら、[スタックの削除] を選択します。
自分の画面
↓
※削除にはめっぽう時間がかかる
人によってはs3bucketを削除する必要ありです!
一応教えておきます
参考記事
https://repost.aws/ja/knowledge-center/s3-error-bucket-already-exists
●1:Amazon S3 コンソールにログイン
↓
●2:バケットを選択して削除ボタンを押す
↓
●3:バケット名を入力して削除
再度vscodeで実行
成功!!!!!!!!!!!!!!!!!!
ひゃっほーーーーーーーーーーーーーーーーー!!!!!
※実働8時間格闘してたから狂ってます
感想
まぁ正直なところ絶対カスタマーポリシーじゃなくて用意されているポリシーあるだろうなぁ…って内心思ってました…有識者の皆さま是非教えてください。
と言う事でまたエラー等が出たらお会いしましょう!!!