認証情報の安全な管理
自動化された Terraform パイプラインで、クラウドプロバイダーの認証情報や機密データを安全に管理するベストプラクティスを実装します。
「認証情報の安全な管理」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
CI/CD での認証情報の安全な管理
CI/CD パイプラインで Terraform を使ってインフラストラクチャを自動化する場合、パイプラインからクラウドプロバイダーのアカウントにアクセスする必要があります。不正アクセスやデータ侵害を防ぐため、これらの認証情報を安全に管理することが最も重要です。
これは、ロボットに家の鍵を渡すようなものだと考えてください。適切なロボットだけが適切な鍵を持ち、その鍵が保護されるようにする必要があります。
シークレットのハードコーディングを避ける
よくある誤りは、API キーやパスワードなどの機密情報を Terraform の設定ファイルや CI/CD スクリプトに直接埋め込むことです。これをハードコーディングと呼びます。
- セキュリティリスク: シークレットがソースコードの履歴(Git など)の一部になります。
- 露出: リポジトリにアクセスできる人なら誰でも確認できてしまいます。
- 保守: シークレットを変更するには、コードの変更と再デプロイが必要になります。
環境変数(基本)
ローカル開発や基本的な用途では、環境変数を使うと、認証情報をハードコーディングせずに簡単に渡せます。Terraform を実行する前に、シェルで環境変数を設定します。
ハードコーディングよりは安全ですが、共有 CI/CD パイプラインでの利用には適していません。慎重に扱わないと、シークレットがログやプロセス一覧に表示される可能性があるためです。
export AWS_ACCESS_KEY_ID="AKIA..."
export AWS_SECRET_ACCESS_KEY="abcdef..."
terraform planCI/CD プラットフォームのシークレットマネージャー
最新の CI/CD プラットフォームには、シークレット管理機能が組み込まれています。これらを使うと、コードリポジトリとは分離して、機密データをプラットフォーム内に安全に保存できます。
パイプラインの実行時に、シークレットは環境変数またはファイルとしてビルド環境に注入されますが、ログに表示されたり、リポジトリに保存されたりすることはありません。
GitHub Actions のシークレット例
GitHub Actions には、リポジトリシークレット専用のセクションがあります。Settings > Secrets and variables > Actions > New repository secret から追加できます。
ワークフローファイルでは、secrets コンテキストを使ってこれらのシークレットを参照できます。シークレットはログ内で自動的にマスクされます。
name: Deploy Infra
on: [push]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-east-1
- name: Terraform Init
run: terraform initパイプライン用のクラウド IAM ロール
CI/CD 認証で最も安全な方法は、クラウドプロバイダーが提供する Identity and Access Management(IAM)ロールまたはサービスアカウントを使用することです。
CI/CD パイプラインは、長期間有効なアクセスキーの代わりに、特定の権限を持つ一時的なロールを引き受けます。多くの場合、信頼関係には OpenID Connect(OIDC)を利用します。これにより、静的な認証情報を保存する必要が完全になくなります。
AWS IAM ロール + OIDC の例
AWS では、GitHub Actions のワークフローが OIDC を使って直接引き受けられる IAM ロールを設定できます。つまり、AWS のアクセスキーをどこにも保存する必要がありません。
ロールの信頼ポリシーを定義し、リポジトリやブランチなどの特定の条件に基づいて、GitHub の OIDC プロバイダーがロールを引き受けることを許可します。
resource "aws_iam_role" "github_actions_role" {
name = "github-actions-oidc-role"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Effect = "Allow"
Principal = {
Federated = "arn:aws:iam::123456789012:oidc-provider/token.actions.githubusercontent.com"
}
Action = "sts:AssumeRoleWithWebIdentity"
Condition = {
StringEquals = {
"token.actions.githubusercontent.com:aud" : "sts.amazonaws.com"
}
StringLike = {
"token.actions.githubusercontent.com:sub" : "repo:your-org/your-repo:*"
}
}
}
]
})
}Terraform のセンシティブな出力
Terraform の出力に、データベースのパスワードや秘密鍵などの機密データが含まれることがあります。このような出力には sensitive を指定してください。
出力をセンシティブとしてマークすると、Terraform は CLI 出力や表示時のステートファイルで値を伏せ字にし、偶発的な露出を防ぎます。
output "database_password" {
value = aws_db_instance.main.password
description = "The database root password."
sensitive = true
}認証情報の安全性チェック
長期間有効な静的認証情報を保存する必要なく、CI/CD パイプラインからクラウドプロバイダーに認証する方法として、一般的に最も安全だと考えられているのはどれですか。
振り返り: 認証情報の安全な管理
Terraform の CI/CD パイプラインで機密データを管理するための重要な方法を学びました。
- ハードコーディングを避ける: シークレットをコードに直接埋め込まないでください。
- CI/CD シークレットを活用する: 静的な認証情報には、プラットフォーム固有のシークレットマネージャーを使用してください。
- IAM ロール/OIDC を活用する: 最高レベルのセキュリティを実現するには、クラウドプロバイダーの IAM ロールと OIDC を使い、キーを保存せずに一時的な権限を引き受けてください。
- センシティブな出力としてマークする: Terraform の出力に含まれる機密データを保護してください。
これらの方法は、堅牢で安全なインフラストラクチャを維持するために不可欠です。
よくある質問
「認証情報の安全な管理」レッスンは無料ですか?
はい。「認証情報の安全な管理」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「認証情報の安全な管理」で何を学びますか?
自動化された Terraform パイプラインで、クラウドプロバイダーの認証情報や機密データを安全に管理するベストプラクティスを実装します。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「認証情報の安全な管理」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。