Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS Codeシリーズで構築したTerraformパイプラインのユーザー側IAM

hiyanger
February 25, 2024

AWS Codeシリーズで構築したTerraformパイプラインのユーザー側IAM

2024/2/26
(セゾン情報システムズ)color is【クラウドLT大会vol.7】フリーテーマ!
https://saison-coloris.connpass.com/event/308746/

hiyanger

February 25, 2024
Tweet

More Decks by hiyanger

Other Decks in Technology

Transcript

  1. IAM 簡易設計 ▪ 基本  ActionやResourceでアスタリスク(*)の使用でリスクを伴う場合は使用を避ける。  全アクションやリソースが許可されたりして、意図しない操作ができるようになってしまったりする。  (参考元をそのまま使うと*のままになってるパターンが多い) ▪ 管理者/運用者 共通

     ・リポジトリは削除できない  ・mainブランチにはpushできない  ・develop/mainブランチは削除できない ▪ 運用者(検証環境のみ)  ・別のリポジトリは全アクションできない  ・developブランチにpushできない  ・mainブランチへのマージはできない  ・全設定変更できない 忙しさに負けてポリシーをゆるくしてし まいがちですが、最大限の努力をして最 小権限のポリシーを作り上げましょう!
  2. 運用者/IAMポリシー ※権限はホワイトリスト形式で作成 ▪ CodeCommit  ・全般的なCodeCommit利用権限(*は使わずに)  ・developブランチやmainブランチにpushやdeleteをさせない  ・developブランチだけにマージができる ▪ CodePipeline  ・全般的な閲覧とBuild間の承認が可能

    ▪ CodeBuild  ・CodePipeline動作時のログ確認が可能(logs権限も必要) { "Action": [ "codecommit:GitPush", "codecommit:DeleteBranch" ], "Condition": { "StringEqualsIfExists": { "codecommit:References": [ "refs/heads/develop", "refs/heads/main" ] }, "Null": { "codecommit:References": "false" } }, "Effect": "Deny", "Resource": "arn:aws:codecommit:ap-northeast-1:${account-id}:${env}-codecommit" }, ブランチの指定が可能 テストは大変です
  3. 【検証環境】管理者/IAMポリシー ※権限はブラックリスト形式で作成  (PowerUserあり) ▪CodeCommit  ・リポジトリを削除させない  ・develop、mainブランチを削除させない  ・mainブランチにはpushできない { "Action": "codecommit:DeleteBranch",

    "Condition": { "StringEqualsIfExists": { "codecommit:References": [ "refs/heads/develop", "refs/heads/main" ] } }, "Effect": "Deny", "Resource": "arn:aws:codecommit:ap-northeast-1:${account-id}:*" }, pushじゃなければnullの 記述はなくてOK
  4. 【商用環境】管理者/IAMポリシー ※権限はホワイトリスト形式で作成 (ReadOnlyあり) ▪CodePipeline  ・Build間のApprovalを承認できる { "Version": "2012-10-17", "Statement": [

    { "Effect": "Allow", "Action": "codepipeline:PutApprovalResult", "Resource": "arn:aws:codepipeline:ap-northeast-1:${account-id}:prd-codepipeline-terraform/Approval/plan-app roval" } ] }
  5. MFAポリシーとCodeCommit認証 CodeCommitは認証時にhttpsを利用しているた め、MFAを設定(MFAを利用していない場合は 操作できない)していると、アクセスが拒否 される。 そのため、CodeCommitはMFA認証の対象から除 外する必要がある。 { "Sid": "DenyActionWithoutMFA",

    "Effect": "Deny", "NotAction": [ "codecommit:GitPull", "codecommit:GitPush", "kms:Encrypt", "kms:Decrypt", "kms:ReEncryptFrom", "kms:ReEncryptTo", "kms:GenerateDataKey", "kms:GenerateDataKeyWithoutPlaintext", "kms:DescribeKey" ], "Resource": "*", "Condition": { "BoolIfExists": { "aws:MultiFactorAuthPresent": "false" } } } { "Sid": "DenyKMSActionWithoutMFA", "Effect": "Deny", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncryptFrom", "kms:ReEncryptTo", "kms:GenerateDataKey", "kms:GenerateDataKeyWithoutPlaintext", "kms:DescribeKey" ], "NotResource": "arn:aws:kms:ap-northeast-1:${account-id}:key/${aws-codecommit-k ey-id}", "Condition": { "BoolIfExists": { "aws:MultiFactorAuthPresent": "false" } } } ①CodeCommitとKMS関連しないMFAアクセスを拒否 (CodeCommitとKMSは許可) ②CodeCommitに関連しないKMSアクセスを拒否
  6. Thanks!! ・構築中の忙しさに負けてポリシーをゆるくしていまわないよう、  最大限の努力をして最小権限のポリシーを作り上げましょう! ・権限の作り方によっては細かいテストが必要になります。  正常異常含め網羅性のあるテスト実施をしましょう。 ・IAMまわりは思ったより工数がかかるので、  事前に十分な工数確保しておきましょう。 本資料 https://speakerdeck.com/hiyanger/aws-codesirizudegou-zhu-sitaterraform paipurainnoyuzace-iam

    https://twitter.com/hiyanger https://qiita.com/hiyanger https://speakerdeck.com/hiyanger https://zenn.dev/hiyanger 過去のスライド Codeシリーズで作るTerraformのCICDパイプラインの概要 https://speakerdeck.com/hiyanger/codesirizudezuo-ruterraformnocicdpa ipurain AWS Codeシリーズを使った TerraformのCICDパイプラインの作り方 https://speakerdeck.com/hiyanger/aws-codesirizuwoshi-tuta-terraformn ocicdpaipurainnozuo-rifang