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
560
ニフティ開発インターンで使う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 ニフティ株式会社
なぜISPでオリジナルカードゲームを作ったのか?制作者と対談 - NIFTY Tech Talk #25
niftycorp
PRO
0
44
「なぜかネットが遅い」を“見える化”する 〜マイ ニフティが繋ぐサポートと暮らし〜 - NIKKEI Tech Talk #39
niftycorp
PRO
0
110
InnerSource Summit 2025 Three points that promoted innersource activities
niftycorp
PRO
0
170
Maker Faire Tokyo 2025 出展うらばなし - NIFTY Tech Talk #25
niftycorp
PRO
0
80
Private Status Pageの設定と活用 〜インシデントレスポンスへの活用とStatus Page運用をどうするか?〜
niftycorp
PRO
0
120
ニフティのPagerDuty活用状況
niftycorp
PRO
0
110
会員管理基盤をオンプレからクラウド移行した時に起きた障害たち - asken tech talk vol.13
niftycorp
PRO
0
2.6k
モニタリング統一への道のり - 分散モニタリングツール統合のためのオブザーバビリティプロジェクト
niftycorp
PRO
1
1k
2025-07-08 InnerSource Commons Japan Meetup #14 【OST】チームの壁、ぶっ壊そ!壁の乗り越え方、一緒に考えよう!
niftycorp
PRO
0
110
Other Decks in Programming
See All in Programming
組み合わせ爆発にのまれない - 責務分割 x テスト
halhorn
1
160
Findy AI+の開発、運用におけるMCP活用事例
starfish719
0
1.8k
Vibe codingでおすすめの言語と開発手法
uyuki234
0
130
The Art of Re-Architecture - Droidcon India 2025
siddroid
0
140
マスタデータ問題、マイクロサービスでどう解くか
kts
0
150
GISエンジニアから見たLINKSデータ
nokonoko1203
0
190
Graviton と Nitro と私
maroon1st
0
140
Denoのセキュリティに関する仕組みの紹介 (toranoana.deno #23)
uki00a
0
180
Navigating Dependency Injection with Metro
l2hyunwoo
1
200
Giselleで作るAI QAアシスタント 〜 Pull Requestレビューに継続的QAを
codenote
0
310
從冷知識到漏洞,你不懂的 Web,駭客懂 - Huli @ WebConf Taiwan 2025
aszx87410
2
3.1k
tparseでgo testの出力を見やすくする
utgwkk
2
300
Featured
See All Featured
Being A Developer After 40
akosma
91
590k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
83
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
410
Typedesign – Prime Four
hannesfritz
42
2.9k
Side Projects
sachag
455
43k
How to Ace a Technical Interview
jacobian
281
24k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
98
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
200
New Earth Scene 8
popppiees
0
1.2k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
286
14k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.8k
Testing 201, or: Great Expectations
jmmastey
46
7.8k
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や承認ルールテンプレー
トを駆使していきましょう