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
470
ニフティ開発インターンで使う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 ニフティ株式会社
2025-04-25 NIFTY's InnerSource Activites
niftycorp
PRO
0
35
外コミュニティ活動や登壇活動が技術 広報として大事だよ、と改めて周囲に伝 えられた件 - EM Oasis 特別会
niftycorp
PRO
0
52
Dify触ってみた。
niftycorp
PRO
1
170
Amazon Bedrockを使用して、 運用対応を楽にしてみた
niftycorp
PRO
1
160
自社製CMSからの脱却:10件のWebサイト再構築に学ぶ運用重視の技術選定 - NIFTY Tech Day 2025
niftycorp
PRO
0
76
エンジニアの殻を破る:インナーソースと社外活動がもたらした成長 - NIFTY Tech Day 2025
niftycorp
PRO
0
48
システム全体像把握の超高速化〜システム関連図を使い倒そう (LT) - NIFTY Tech Day 2025
niftycorp
PRO
0
47
Rust で生成 AI の社内 chatbot をメンテしている話 (LT) - NIFTY Tech Day 2025
niftycorp
PRO
0
50
メタバースは仕事に使える?〜100日間でバーチャルオフィスへの挑戦〜 (LT) - NIFTY Tech Day 2025
niftycorp
PRO
0
36
Other Decks in Programming
See All in Programming
Making TCPSocket.new "Happy"!
coe401_
1
1.9k
メモリウォールを超えて:キャッシュメモリ技術の進歩
kawayu
0
1.9k
設計の本質:コード、システム、そして組織へ / The Essence of Design: To Code, Systems, and Organizations
nrslib
5
1.2k
PHPバージョンアップから始めるOSSコントリビュート / how2oss-contribute
dmnlk
1
1.1k
[NG India] Event-Based State Management with NgRx SignalStore
markostanimirovic
1
170
The Implementations of Advanced LR Parser Algorithm
junk0612
1
390
Contribute to Comunities | React Tokyo Meetup #4 LT
sasagar
0
550
Fiber Scheduler vs. General-Purpose Parallel Client
hayaokimura
1
110
Orleans + Sekiban + SignalR でリアルタイムWeb作ってみた
tomohisa
0
120
KANNA Android の技術的課題と取り組み
watabee
0
110
Youtube Lofier - Chrome拡張開発
ninikoko
0
2.5k
「影響が少ない」を自分の目でみてみる
o0h
PRO
2
1.2k
Featured
See All Featured
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
52
2.4k
Optimizing for Happiness
mojombo
377
70k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
How GitHub (no longer) Works
holman
314
140k
Product Roadmaps are Hard
iamctodd
PRO
52
11k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.8k
Into the Great Unknown - MozCon
thekraken
38
1.7k
Navigating Team Friction
lara
184
15k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Designing Experiences People Love
moore
141
24k
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や承認ルールテンプレー
トを駆使していきましょう