Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ニフティ開発インターンで使うAWS環境をできるだけ楽に構築した話 (LT) - NIFTY T...
Search
ニフティ株式会社
PRO
November 29, 2023
Video
Resources
Programming
0
340
ニフティ開発インターンで使うAWS環境をできるだけ楽に構築した話 (LT) - NIFTY Tech Day 2023
ニフティ株式会社
PRO
November 29, 2023
Tweet
Share
Video
Resources
NIFTY Tech Day 2023
https://techday.nifty.co.jp/2023/
More Decks by ニフティ株式会社
See All by ニフティ株式会社
FourKeysを導入したが生産性向上には至らなかった理由
niftycorp
PRO
1
20
モニタリングダッシュボード に表示しておきたい情報 / NIFTY Tech Talk #21
niftycorp
PRO
1
57
PagerDutyを導入して変わったシステム運用とこれから / NIFTY Tech Talk #21
niftycorp
PRO
1
57
ゼロからボトムアップで始めるインナーソース ニフティのリアル事例 - InnerSource Gathering Tokyo 2024
niftycorp
PRO
2
130
FourKeysを導入したが生産性向上には至らなかった理由
niftycorp
PRO
5
5k
AWS Summit Japan 2024, AWS Game Day 振り返り - NIFTY Tech Talk #20
niftycorp
PRO
2
260
2つのスクラムチームの 調和的な協働・連携について - ニフティのスクラムトーク Vol. 3 / NIFTY Tech Talk #19
niftycorp
PRO
1
44
チーム力を高めるスクラム実践法:カンバン公開と課題攻略について - ニフティのスクラムトーク Vol. 2 - NIFTY Tech Talk #18
niftycorp
PRO
1
230
スクラムチームと認知負荷 - ニフティのスクラムトーク Vol2. / NIFTY Tech Talk #18
niftycorp
PRO
1
210
Other Decks in Programming
See All in Programming
めざせ!WKWebViewマスター! / WKWebView Master
marcy731
3
480
【TID2024】模擬講義:プログラマと一緒にゲームをデザインしてみよう!
akatsukigames_tech
0
380
令和トラベルにおけるLLM活用事例:社内ツール開発から得た学びと実践
ippo012
0
110
現代のVueとTypeScript - 型安全の活用術
minako__ph
4
3.1k
connect-go で面倒くささと戦う / 2024-08-27 #newmo_layerx_go
izumin5210
2
590
Hono・Prisma・AWSでGeoなAPI開発
nokonoko1203
5
610
これからの時代の新標準!SwiftTestingへの移行とトラブルシューティング
uetyo
0
440
僕が思い描くTypeScriptの未来を勝手に先取りする
yukukotani
3
580
初めてのiOS関連GitHub ActionsをMarketplaceに公開するまでの実録
konifar
3
200
GoのIteratorに詳しくなってしまう
inatonix
1
170
Mergeable Libraryで 高速なアプリ起動を実現しよう!
giginet
PRO
1
1.8k
Go Code Generation at newmo / 2024-08-27 #newmo_layerx_go
genkey6
0
510
Featured
See All Featured
The Brand Is Dead. Long Live the Brand.
mthomps
53
37k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
25
1.3k
Bash Introduction
62gerente
608
210k
Become a Pro
speakerdeck
PRO
22
4.8k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
The Straight Up "How To Draw Better" Workshop
denniskardys
230
130k
Six Lessons from altMBA
skipperchong
26
3.3k
A designer walks into a library…
pauljervisheath
201
24k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
22
3.9k
Building Applications with DynamoDB
mza
89
5.9k
VelocityConf: Rendering Performance Case Studies
addyosmani
321
23k
How To Stay Up To Date on Web Technology
chriscoyier
785
250k
Transcript
Copyright ©NIFTY Corporation All Rights Reserved. ニフティ開発インターンで使う AWS環境を できるだけ楽に構築した話 会員システムグループ
第二開発チーム 上原 直希
ニフティで開発インターンシップを開催 • 8月に開発インターンを開催 • 学生はチームに分かれ、3日間チーム開発 • スクラムの原則に則って活動してもらう
インターン中の学生の開発の流れ • 学生のPCでソースコードを追加・修正 • IAMユーザーを使ってAWS CodeCommitにpushしPR作成 • チームメンバーおよびメンター社員がPRをレビュー • 大丈夫そうであればマージ、デプロイ
• 上の繰り返し
運営としてインフラを色々いじっていた • インターンの運営として関わる • インフラ構築が大変そうだったので、 いい感じにできないか? • 一ヶ月くらいTerraformをゴニョゴニョいじっていく
紹介したいところ 1. 学生に払い出すIAMユーザーのパスワードをボタンぽちぽちせずに 払い出したい 2. 開催時間以外は学生がリソースにアクセスできないようにしたい 3. AWS CodeCommitのmasterブランチに直pushできないようにしたい 4.
AWS CodeCommitでPRは必ず社員の承認を得てからマージできるよ うにしたい
IAMユーザーのパスワード払い出し
ポチポチして30人分のパスワードを発行する... 面倒
コンソールログイン用のパスワード払い出し aws_iam_user_login_profile resource "aws_iam_user" "example" { name = "example" path
= "/" for ce_destroy = true } resource "aws_iam_user_login_profile" "example" { user = aws_iam_user.example.name pgp_key = "keybase:some_person_that_exists" } IAMユーザー作成 コンソールログイン 用のパスワード払い 出し
.encrypted_passwordで 生成したパスワードを参照可能 aws_iam_user_login_profile resource "aws_iam_user_login_profile" "example" { user = aws_iam_user.example.name
pgp_key = "keybase:some_person_that_exists" } パスワード払い出し (暗号化キーも指定) output "password" { value = aws_iam_user_login_profile.example.encrypted_password } 暗号化されたパスワード を参照可能
Gitクライアント用の認証情報の払い出し aws_iam_service_specific_credential resource "aws_iam_service_specific_credenBal" "example" { service_name = "codecommit.amazonaws.com" user_name
= aws_iam_user.example.name } output "codecommit_user_name" { value = aws_iam_service_specific_credential.example.service_user_name } output "codecommit_password" { value = aws_iam_service_specific_credential.example.service_user_password } Git用認証情報 Git認証用の ID/パスワード
Terraform便利! コンソールに入らずにパスワードを払い出せるので便利!
アクセス可能時間を制御したい!
IAMユーザーのアクセス可能時間制御 • インターン時間外にはコンソールやAWS CodeCommitにアクセスして 欲しくない • 開始時間になったらアクセスできるようIAMポリシーを付ける、 終わったら外す ◦ 手動でやるの面倒
IAMユーザーのアクセス可能時間制御 • IAMポリシーにConditionがあ る • Conditionに時間制限をかけら れる { "Version": "2012-10-17",
"Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "*" ], "Resource": "*", "Condition": { "DateGreaterThan": { "aws:CurrentTime": "${start}" }, "DateLessThan": { "aws:CurrentTime": "${end}" } } } ] }
IAMユーザーのアクセス可能時間制御 • 現在時刻が開始時間から終了時間の間までポリシーが適用される "CondiBon": { "DateGreaterThan": { "aws:CurrentTime": "開始時間" },
"DateLessThan": { "aws:CurrentTime": "終了時間" } }
IAMユーザーのアクセス可能時間制御 { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect":
"Allow", "AcKon": [ "codecommit:GitPush" ], "Resource": "arn:aws:codecommit:us-east-2:111111111111:MyDemoRepo", "CondiKon": { "DateGreaterThan": { "aws:CurrentTime": "2024-09-21T09:00:00+09:00" }, "DateLessThan": { "aws:CurrentTime": "2024-09-21T17:00:00+09:00" } } } ] } 学生が使うIAMユーザーは 9/21の9:00-17:00で MyDemoRepoに pushのみ 可能
masterにpushして欲しくない
AWS CodeCommitのmasterに直push禁止 GitHub ブランチ保護ルールを使う =レポジトリに設定 AWS CodeCommit IAMポリシーでIAMユーザーの 権限を制限 =ユーザー単位の制限
(=レポジトリに設定できない)
AWS CodeCommitのmasterに直push禁止 masterに対してpush禁止を 示すIAMポリシーを作成 →ユーザーにアサインすれば、 そのユーザーはpushできない { "Version": "2012-10-17", "Statement":
[ { "Effect": "Deny", "AcKon": ["codecommit:GitPush"], "Resource": "*", "CondiKon": { "StringEqualsIfExists": { "codecommit:References": ["refs/heads/master"] }, "Null": { "codecommit:References": false } } } ] } https://docs.aws.amazon.com/ja_jp/service-authorization/latest/reference/list_awscodecommit.html
社員が承認してからマージしたい
GitHub ブランチ保護ルール AWS CodeCommitでは承認ルールを使う AWS CodeCommit 承認ルール
承認ルールの面倒なところ 承認ルールはPRごとに設定しないといけないので、面倒 → 承認ルールテンプレートを使えば自動的に設定してくれる
承認ルールテンプレートはこんな感じ 何人承認必要か 誰からの承認が 必要か マージ先のブランチ (master, mainの 指定が多い)
レビュアーにはロール名/スイッチ元ユーザ ー名で指定する https://dev.classmethod.jp/articles/codecommit-approval-rule-tips/
社員からの承認を必須にするには 社員はAdministratorロールが取れるので、 承認プールにはAdministrator/*と指定 →学生のIAMユーザーはApproveしても 条件を満たさないためマージできない
Terraformで承認ルールテンプレートを作る時 ハマりポイント resource "aws_codecommit_approval_rule_template" "approval_rule" { name = "approval-rule" description
= "承認テンプレート" content = <<EOF { "Version": "2018-11-08", "DestinationReferences": ["refs/heads/master", "refs/heads/main"], "Statements": [{ "Type": "Approvers", "NumberOfApprovalsNeeded": 1, "ApprovalPoolMembers": ["CodeCommitApprovers:Administrator/*"] }] } EOF } CodeCommitApprovers:がprefixに必要 × Administrator/*
紹介したこと • 学生に払い出すIAMユーザーの認証情報をぽちぽちせずに払い出し たい • 指定時間以外は学生がAWS CodeCommitにアクセスできないように したい • AWS
CodeCommitのmasterブランチに直pushできないようにしたい • AWS CodeCommitでPRは必ず社員の承認を得てからマージできるよ うにしたい
まとめ • Terraformを使って簡単にパスワードを払い出せる ◦ IaC最高 • IAMポリシーのConditionで時間帯によるアクセス制御ができる • AWS CodeCommitに制限をかける時はIAMや承認ルールテンプレー
トを駆使していきましょう