🔰
AWS初心者向け~ゼロからECSアプリケーションの構築まで~ IAM・コスト管理編
1. IAM・コスト管理 編
目次
- AWSアカウント・ルートユーザーについて
- AWSのコストに関して
- IAMユーザー、IAMロール、IAMポリシーについて
- 最小権限に基づいたポリシーの設定方法
- 細かい設定はさておき許可の上限を決める「Permissions Boundary」
- IAMポリシーが想定通りかを確認する「IAM Policy Simulator」
まずAWSアカウントは作成しておく。AWSの使用料はAWSアカウント単位になる。
1.AWSアカウント・ルートユーザーについて
- AWSアカウント作成と同時にルートユーザーが作成されるので、ルートユーザーでログインする。
- IAMと検索し、「ユーザー」から「ユーザーの作成」をクリックする。
- 下記画像のように設定しIAMユーザーを設定する。
- 作成したIAMユーザーに対して許可タブの「許可を追加」でAdministratorAccessを設定する。
- ルートユーザーからはログアウトし、作成したIAMユーザーでログインする。ログインURLはIAMユーザー作成時のクレデンシャル情報(CSV)ファイル内にURLとして記載されている。
2. AWSのコストに関して見方や注意点
- マネジメントコンソールのダッシュボードまたは、検索にてBillingと打つと「Billing and Cost Management」が表示されるのでこちらをクリックする。
- ダッシュボード上でAWSリソースごとの月額コストが確認できる。
- 上記コストを効率的に減らすリコメンデーションを「コスト最適化ハブ」を有効化することで利用できる。こちらは追加料金なしなので基本的には有効化したほうが良い。
- コストは従量課金制ですが細かいコストの内訳は、都度公式の料金表か公式コストシュミレーターを利用してみた方が良いです。基本的に勉強目的で利用する際は、作成したリソースは停止できるものは停止するか不要なら即座に破棄することでコストを抑えます。
請求アラートの作成方法
1.Billing and Cost Managementからナビゲーションペイン「請求設定」でアラート設定の「編集」をクリックする。
2. Cloudwatchアラームを有効化する。
3. Cloudwatchと検索し、ナビゲーションペイン「アラーム」から「アラームの作成」クリックする。
- メトリクスの選択 を選択します。AWS名前空間で [請求] を選択し、[概算合計請求額] を選択します
- 設定値は画像のように設定する。「よりも」のしいき値は、実際にこれを超えたら通知して欲しいという予算額を設定しましょう。ここでは5USD(だいたい800円くらい)にします。
6アラートメールをSNSで通知しますが、トピックがないので作成します。 - SNSと検索し、トピックから「トピックの作成」をクリック。
- トピックのキューはスタンダードに設定して適当な名前をつけて作成をクリック。
- 作成されたトピックのサブスクリプションタブから「サブスクリプションを作成」をクリック
- プロトコル「Eメール」で通知したいメールアドレスを記入しサブスクリプションを作成する。
- 再度作成中の請求アラームに戻り先ほど作成したSNSトピックとサブスクリプション(メールアドレス)が表示されていることを確認する。
- 次へで次の画面にいきアラームの名前をつけて、アラームを作成する。
- これで請求アラームが完成です。(サブスクリプションとして設定したメールアドレスに有効確認のメールが送られているので承認すること。)
.
3. IAMロール、IAMポリシーに関して
LambdaやECSなどAWSサービスが他のAWSサービス・リソースに対して何ができて何ができないかを決めるにはIAMロールとIAMポリシーを設定します。
サービスに実際に設定するのは、IAMロールでIAMロールに設定する権限制御に名前をつけてまとめたものがIAMポリシーという感じです。
IAMポリシーにはAWS標準のものもたくさんありますが、大事なことはActionと
どのリソースに対してそれができるかの複合条件で決まるので、ほとんどの場合は、
IAMポリシーを自作してIAMロールにアタッチします。
IAMポリシーは以下のようなものです。
{
"Sid": "IAMRead",
"Effect": "Allow",
"Action": [
"iam:Get*",
"iam:List*"
],
"Resource": "*"
},
{
"Sid": "IAMPolicies",
"Effect": "Allow",
"Action": [
"iam:CreatePolicy",
"iam:DeletePolicy",
"iam:CreatePolicyVersion",
"iam:DeletePolicyVersion",
"iam:SetDefaultPolicyVersion"
],
"Resource": "arn:aws:iam::XXXXXXYYYYYY:policy/AWSCookbook*"
},
{
"Sid": "ProtectPB",
"Effect": "Deny",
"Action": [
"iam:CreatePolicyVersion",
"iam:DeletePolicy",
"iam:DeletePolicyVersion",
"iam:SetDefaultPolicyVersion"
],
"Resource": [
"arn:aws:iam::XXXXXXYYYYYY:policy/AWSCookbook105PB",
"arn:aws:iam::XXXXXXYYYYYY:policy/AWSCookbook105Policy"
]
}
- Sidでオブジェクト単位に分けられたものが1つ1つのルールです。
- Effectは"Allow"or"Deny"です。後続で指定するActionができるのかできないのかを決めます。
- Actionは具体的にどのような操作ができるかかorできないかを指定します。
- Resourceがそのアクションが実行できる or できない対象となるAWSリソースを指します。
ここにはできる限り固有のAWSリソースを指定します。(リソースのARNを指定します。)
ある程度まで指定して*でワイルドカードで残りを指定するのも有効なResourceの記載方法です。
4.最小権限の原則に基づいたポリシーを設定するには?
Cloudtrailの証跡を取れるようS3バケットとCloudtrailの証跡をオンにする。
その後ある程度の期間は、通常通りに操作を実行した後
IAMユーザーのCloudTrailイベントに基づいてポリシーを生成 をクリックすることで
実際の必要な操作からポリシーを生成可能。
Cloudtrailのイベントの証跡を取れるようにするには?
- Cloudtrailイベント証跡配置用のS3バケットを作成する。
- S3バケットにCloudtrailからのアクセスとPutを許可するバケットポリシーを付与する。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3CloudTrail", "Effect": "Allow", "Principal": {"Service": "cloudtrail.amazonaws.com"}, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::BUCKET_NAME" }, { "Sid": "S3CloudTrail", "Effect": "Allow", "Principal": {"Service": "cloudtrail.amazonaws.com"}, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::BUCKET_NAME/AWSLogs/AWS_ACCOUNT_ID/*", "Condition": {"StringEquals": {"s3:x-amz-acl": "bucket-owner-full-control"}} } ] }
- Cloudtrailの証跡の作成から1で作成したS3バケットを選択し証跡を作成し、ログ記録を開始する。
5.とりあえず細かい権限は後から決めるとして、最大でどこまで権限を与えるかを決めたいなら「許可の境界」(Permissions Boundary)を設定する。
-
IAMユーザーの許可タブから「許可の境界」を選択する。
-
設定するポリシーは、先にIAMポリシーで作っておくと良い。
-
ここで設定したポリシー以上のActionは暗黙的にDenyされるので注意すること。
6.作成したIAMポリシーが目論見通り作成出来ているかを確認するには「IAM Policy Simulator」を利用する。
- こちらサイトにアクセスする。
- こちらのサイトでは実際のログインIAMアカウント・ユーザーから取得したIAMユーザー、ロール、ポリシーが表示されるのでAllowされるor DenyされるアクションとそのリソースARNを指定して想定通りかをチェック可能。
Discussion