

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# プライベート証明書 AWS IAM Roles Anywhere による保護
<a name="iam-roles-anywhere-private-ca"></a>

*Barnali Singh、Amazon Web Services*

## 概要
<a name="iam-roles-anywhere-private-ca-summary"></a>

このパターンは、 AWS Private Certificate Authority (AWS Private CA) AWS IAM Roles Anywhere を使用して を実装し、 AWS リソースにアクセスする外部ワークロードに対して安全な証明書ベースの認証を有効にする方法を示しています。このソリューションでは、X.509 証明書を使用して一時的な AWS 認証情報を取得することで、長期的なアクセスキーが不要になります。これは、 AWS CloudFormation テンプレートとシェルスクリプトによる完全な自動化を含むクラウドネイティブのセキュリティパターンであり、組織はオンプレミスアプリケーション、CI/CD パイプライン、外部システムに安全なハイブリッド認証を迅速にデプロイできます。

## 前提条件と制限
<a name="iam-roles-anywhere-private-ca-prereqs"></a>

**前提条件**

インフラストラクチャのデプロイ**の場合**AWS:** **
+ AWS CLI 管理アクセス許可を使用してインストールおよび設定されている
+ IAM、 IAM Roles Anywhere、 AWS Private CA サービスの管理アクセス許可

**クライアントシステムのセットアップの場合:**
+ AWS CLIは、次のアクセス許可でクライアントシステムにインストールされます。
  + `acm-pca:IssueCertificate`
  + `acm-pca:GetCertificate`
+ クライアントシステムにインストールされた OpenSSL 
+ AWS 各クライアントシステムにインストールされている署名ヘルパー
+ X.509 証明書と PKI 概念の基本的な理解

**注記**  
CloudFormation テンプレートは、 AWS リソースの作成を自動的に処理します。OpenSSL は、証明書を使用して AWS リソースにアクセスする外部システムでのみ必要です。

**制限事項**
+ 証明書の有効期間は、ルート CA では最大 10 年間に制限されます。
+ クライアント証明書を定期的にローテーションします。これを少なくとも 1 年に 1 回実行することをお勧めします。
+ リージョンの制限: と は同じ AWS リージョンにある AWS Private CA 必要があります
+ クライアント証明書の最大証明書サイズ: 16KB 

**製品バージョン**
+ AWS CLI バージョン 2.0 以降
+ OpenSSL 1.1.1 以降
+ AWS ヘルパー 1.4.0 以降の署名
+ AWS Private CA、最新バージョン
+ IAM Roles Anywhere e、最新バージョン

## アーキテクチャ
<a name="iam-roles-anywhere-private-ca-architecture"></a>

**ターゲットテクノロジースタック**

• AWS Private CA - 証明書発行のルート CA

• IAM Roles Anywhere - 証明書ベースのロール引き受けサービス

• IAM ロールとポリシー - アクセスコントロールとアクセス許可

• AWS 署名ヘルパー - クライアント側の認証情報取得ツール

• OpenSSL - 証明書とキーの生成

• CloudFormation - インフラストラクチャの自動化

**ターゲットアーキテクチャ**

** **

![](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/2600dc9f-9c1a-442e-9523-1c925aff7620/images/309c3de5-255e-4257-8ad8-af58c1ce8855.png)


図 1 IAM Roles Anywhere証明書ベースの認証

**アーキテクチャは以下で構成されます。**

1. 証明書を提示する - 外部システムが X.509 証明書を に提示する AWS

1. 認証 - 証明書 IAM Roles Anywhere を受け取り、 認証を開始します

1. 検証 - Trust Anchor は、信頼できる認証 機関に対して証明書を検証します

1. Validate - 証明書の信頼性とステータス AWS Private CA を検証します

1. 証明書が有効 - 証明書が有効で信頼できる AWS Private CA ことを確認します

1. ロールの引き受け - 外部システムが設定された IAM ロールを引き受けること IAM Roles Anywhere を許可します

1. アクセス許可 - 外部システムは、 リソースにアクセス AWS するための一時的な認証情報を受け取ります

*自動化とスケール*

このパターンには、以下による完全な自動化が含まれます。

• 設定可能な IAM アクセス許可を持つ AWS リソースプロビジョニング用の CloudFormation テンプレート

• 証明書の生成とクライアント設定用のシェルスクリプト

• 複数の環境とカスタム IAM ポリシーのパラメータ化された設定

• 複数のクライアントのバッチ証明書の生成

• 認証情報ヘルパーの自動インストールと設定

**ワークフロー**

1. を使用した証明書ベースの 認証に必要な基本 AWS サービスを確立します IAM Roles Anywhere。

1.  安全な AWS アクセスのために、クライアント側の証明書と認証ツールを作成して設定します。

1. 証明書ベースの認証機能を検証し、継続的なオペレーションのモニタリングを確立 します。

## ツール
<a name="iam-roles-anywhere-private-ca-tools"></a>

• CloudFormation - PCA、トラストアンカー、IAM ロール、プロファイルの作成を自動化

• AWS CLI - AWS サービスインタラクション用のコマンドラインインターフェイス

• OpenSSL - 証明書署名リクエストを生成し、証明書を管理します。

• AWS ヘルパーの署名 - 証明書を一時的な AWS 認証情報と交換します

• バッシュ/シェルスクリプト - セットアッププロセス全体を自動化します

*コードリポジトリ*

[AWS IAM Roles Anywhere with Private Certificate Authority](https://github.com/aws-samples/sample-aws-iam-roles-anywhere-automation)

## ベストプラクティス
<a name="iam-roles-anywhere-private-ca-best-practices"></a>
+ を使用して最小特権の原則に基づいて IAM ポリシーを設定する `--iam-policies parameter`
+ クライアント証明書を定期的にローテーションします。これは毎年行うことをお勧めします。
+ 信頼ポリシーで強力な証明書検証を使用する
+ 証明書失効手順を実装する
+ 証明書の有効期限をモニタリングする

## エピック
<a name="iam-roles-anywhere-private-ca-epics"></a>

### AWS インフラストラクチャのセットアップ
<a name="set-up-aws-infrastructure"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ** インフラストラクチャ****のデプロイ **CloudFormation | Trust Anchor AWS Private CA、適切なポリシーを持つ IAM ロール、 IAM Roles Anywhere プロファイルなど、必要なすべての AWS リソースをプロビジョニングする CloudFormation テンプレートを作成してデプロイします。  プロジェクトの命名、証明書の有効期間、セッション期間、IAM ポリシーアタッチメントのパラメータを設定して、コアインフラストラクチャ 基盤を確立します。 | クラウドアーキテクト、DevOps エンジニア | 
| 認証機関の設定を構成する | ルート証明書 をインストールし、証明書テンプレートを設定し、証明書の信頼チェーン を確立 AWS Private CA して、 を初期化します。 IAM Roles Anywhere 認証に必要な証明書 の有効期間、キーアルゴリズム、証明書拡張を設定して、適切な PKI インフラストラクチャを確保します。 | AWS 管理者、クラウド管理者 | 
| &AWS; リソース設定の検証 | デプロイされた AWS すべてのリソースの包括的な検証を実行して、適切な設定と接続を確認します。Trust Anchor が正しくリンク されていること AWS Private CA、IAM ロールに適切なアクセス許可があること、プロファイルが適切に設定されていること、および 証明書ベースの認証ワークフローのすべてのリソースがアクティブ/準備完了状態であることを確認します。 | AWS システム管理者、テストエンジニア | 

### クライアント証明書の生成とデプロイ
<a name="generate-and-deploy-client-certificates"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| クライアント環境を準備する | デプロイスクリプト を実行可能にし、適切なアクセス許可を確保して、クライアント環境を設定します。 必要なツールと依存関係を使用してローカルシステムを設定し、スクリプトのアクセシビリティを検証し、証明書の生成とデプロイプロセスの基盤を確立します。 | DevOps エンジニア、AWS システム管理者 | 
| 証明書署名リクエストを生成する | OpenSSL または同等のツールを使用して、クライアント システムの証明書署名リクエスト (CSR) を作成します。サブジェクト情報、キーアルゴリズム、証明書拡張機能 などの証明書パラメータを設定します。  CSR が AWS Private CA 要件を満たし、 IAM Roles Anywhere 認証 に適切なメタデータが含まれていることを確認します。 | クラウド管理者、DevOps エンジニア | 
| 経由でクライアント証明書を発行する AWS Private CA | を通じて CSR を処理し AWS Private CA 、有効なクライアント証明書 を発行します。証明書の有効期間、 証明書テンプレートを設定し、証明書チェーンが適切に確立されていることを確認します。証明書の発行を確認し、クライアントデプロイ用の署名付き証明書をダウンロードします。 | AWS 管理者、クラウドアーキテクト | 

### 認証のテストと検証
<a name="test-and-validate-authentication"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 一時的な AWS 認証情報を取得する | 認証情報ヘルパースクリプトを実行して、設定されたクライアント証明書とプライベートキーを使用して一時的な AWS 認証情報を取得します。認証情報の取得プロセスが正しく機能 することを確認し、認証情報の形式と有効期限を検証し、シームレスな認証ワークフローのために IAM Roles Anywhere サービスとの適切な統合を確認します。 | DevOps エンジニア、AWS システム管理者 | 
|  AWS リソースアクセスをテストする | 取得した一時的な認証情報を使用して、 AWS リソースアクセス の包括的なテストを実行します。さまざまな AWS CLI コマンドと API コールを実行して、Amazon S3、Amazon EC2、 などのターゲットサービスへの接続を検証します AWS Lambda。 のアクセス許可が設定された IAM ロールポリシーと一致していること を検証し、正常なアクセスパターン を文書化します。 | テストエンジニア、クラウド管理者 | 
| ロールの引き受けとアクセス許可を検証する | IAM ロールの引き受けプロセス とアクセス許可の境界を徹底的に検証します。許可されたオペレーションと制限されたオペレーションの両方をテストして、 最小特権アクセスが適切に適用されていることを確認します。セッション期間 の制限、認証情報の更新メカニズムを検証し、ロールの引き受けが セキュリティのベストプラクティスに従っていることを確認します。 | AWS 管理者、テストエンジニア | 
| モニタリングとログ記録の実装 |  証明書ベースの認証システムの包括的なモニタリングとログ記録を設定します。 監査証跡の CloudTrail ログ記録の設定、証明書の有効期限のモニタリングの実装、 認証失敗のアラートの設定、 IAM Roles Anywhere インフラストラクチャ全体の使用パターン とセキュリティイベントを追跡するためのダッシュボードの確立を行います。 | DevOps エンジニア、クラウドアーキテクト | 

## トラブルシューティング
<a name="iam-roles-anywhere-private-ca-troubleshooting"></a>


| 問題 | ソリューション | 
| --- | --- | 
| **証明書の検証失敗 – **認証 の試行時に「証明書の検証に失敗しました」またはInvalidCertificate」エラー。 | **解決の手順:**<br />• を使用して証明書の有効日を検証する <br />openssl x509 -in certificate.pem -dates -noout<br />• Trust Anchor 設定が正しいプライベート CA を指していることを確認します。<br />• プライベートキーが証明書に対応していることを確認します。<br />• 間違った CA によって発行された証明書を再生成する | 
|  **IAM アクセス許可拒否エラー – **認証が成功したにもかかわらず AWS リソースにアクセスする場合の「アクセス拒否」またはUnauthorizedOperation」 | **解決ステップ:**<br />• IAM ロールポリシーを確認して拡張し、必要なアクセス許可を含める<br />• 信頼ポリシーに信頼されたエンティティとして *rolesanywhere.amazonaws.com* が含まれていることを確認する<br />• プロファイル ARN 設定がデプロイされたリソースと一致していることを確認します。<br />• 長時間実行されるプロセス用の認証情報更新メカニズムを実装する | 

## 関連リソース
<a name="iam-roles-anywhere-private-ca-resources"></a>
+ [IAM Roles Anywhere ユーザーガイド](https://docs.aws.amazon.com/rolesanywhere/latest/userguide/)
+ [AWS Private Certificate Authority ユーザーガイド](https://docs.aws.amazon.com/privateca/latest/userguide/)
+ [AWS ヘルパードキュメントへの署名](https://docs.aws.amazon.com/rolesanywhere/latest/userguide/credential-helper.html)

## 追加情報
<a name="iam-roles-anywhere-private-ca-additional"></a>

このパターンは、ハイブリッドクラウドアーキテクチャ、外部で実行される CI/CD パイプライン AWS、または安全な AWS アクセスを必要とする外部システムを持つ組織に最適です。証明書ベースのアプローチは、長期的なアクセスキーよりも優れたセキュリティを提供し、 を通じて一元的な証明書管理を可能にします AWS Private CA。

**設定可能な IAM アクセス許可 – **このソリューションは、 を通じて柔軟な IAM ポリシー設定をサポートします`--iam-policies parameter`。
+ デフォルト: `ReadOnlyAccess` 安全な初期デプロイ用
+ カスタム: 特定のユースケースにカンマ区切りARNs を指定します。たとえば、、`S3ReadOnlyAccess``EC2ReadOnlyAccess`、またはカスタムポリシーです。複雑なアクセス許可要件に対する複数のポリシーをサポートします。

**使用例:**

```
# Default read-only access
./deploy.sh

# S3-only access
./deploy.sh --iam-policies "arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess"

# Multiple services
./deploy.sh --iam-policies "arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess,arn:aws:iam::aws:policy/AmazonEC2ReadOnlyAccess"
```