AWS プライベート CA 用の CRL を作成する方法を教えてください。

所要時間5分
0

AWS プライベート認証局用の証明書失効リスト (CRL) を作成したいです。

解決策

CRL の作成時に、AWS プライベート CA は、CRL をユーザーが指定した Amazon Simple Storage Service (Amazon S3) バケットに配置します。S3 バケットへのアクセスを制限するには、アクセス許可ポリシーを使用します。AWS プライベート CA がバケットにオブジェクトを格納できるようにするには、バケットポリシーに Put アクセス許可を含めます。バケットからメタデータを取得するには、Get アクセス許可を含めます。

注: 新しい S3 バケットを設定すると、デフォルトで Block Public Access (BPA) が有効になります

AWS プライベート CA の CRL を作成するには、次の手順を実行します。

新しい Amazon S3 バケットを作成する

次の手順を実行します。

  1. Amazon S3 コンソールを開きます。
  2. [バケットの作成] を選択します。
  3. [バケット名] に、バケットの名前を入力します。
  4. [オブジェクト所有者][ACL 無効] を選択してから、[バケットの作成] を選択します。
  5. [バケット] で、お使いのバケットを選択します。
  6. [アクセス許可] タブを選択します。
  7. [バケットポリシー] で、[編集] を選択します。
  8. [ポリシー] に、次のポリシーを入力します。
    {  
    "Version": "2012-10-17",  
    "Statement": [
        {
          "Sid": "PolicyForPcaCrl",
          "Effect": "Allow",
          "Principal": {
            "Service": "acm-pca.amazonaws.com"
          },
          "Action": [
            "s3:PutObject",
            "s3:PutObjectAcl",
            "s3:GetBucketAcl",
            "s3:GetBucketLocation"
          ],
          "Resource": [
            "arn:aws:s3:::your-crl-storage-bucket/*",
            "arn:aws:s3:::your-crl-storage-bucket"
          ],
          "Condition": {
            "StringEquals": {
              "aws:SourceAccount": "account"
            }
          }
        }
      ]
    }
    **注:**your-crl-storage-bucket はお使いのバケットに、account はお使いの AWS アカウントに置き換えてください。
  9. [変更を保存] を選択します。

詳細については、「バケットの作成」を参照してください。

CloudFront ディストリビューションの作成

次の手順を実行します。

  1. Amazon CloudFront コンソールを開きます。

  2. [ディストリビューションの作成] を選択します。

  3. [オリジンドメイン] で、S3 バケットが含まれるドメイン名を選択します。命名規則には、次のものを使用してください。your-crl-storage-bucket.s3.region.amazonaws.com

  4. [オリジンアクセス]で、[オリジンアクセスコントロール設定 (推奨)] を選択します。

  5. [オリジンアクセスコントロール]で、[新規 OAC を作成] を選択してから、[作成] を選択します。

  6. [Web アプリケーションファイアウォール (WAF)] で、[セキュリティ保護を有効にしない] を選択します。ユースケースで必要な場合は、セキュリティ保護を有効にしてください。

  7. [ディストリビューションの作成] を選択します。

  8. "S3 バケットポリシーを更新する必要があります" というバナーが表示されたら、[ポリシーのコピー] を選択します。完了後、ポリシーを保存します。

    ポリシーの例:

    {
      "Version": "2008-10-17",
      "Id": "PolicyForCloudFrontPrivateContent",
      "Statement": [
        {
          "Sid": "AllowCloudFrontServicePrincipal",
          "Effect": "Allow",
          "Principal": {
            "Service": "cloudfront.amazonaws.com"
          },
          "Action": "s3:GetObject",
          "Resource": "arn:aws:s3:::your-crl-storage-bucket/*",
          "Condition": {
            "StringEquals": {
              "AWS:SourceArn": "arn:aws:cloudfront::account:distribution/DISTRIBUTION_ID"
            }
          }
        }
      ]
    }

CA を作成する

AWS プライベート CA を使用して認証局 (CA) を作成済みである場合は、「CA に CRL を設定する」を参照してください。

ルールを作成するには、次の手順を実行します。

  1. お使いの AWS リージョンで AWS プライベート CA コンソールを開きます。
  2. [プライベート CA の作成] を選択します。
  3. 次の CA パラメータを設定します。
    重要:CA を作成した後に、モードCA タイプサブジェクト識別名キーアルゴリズムを更新することはできません。
    [モード] で、
    [汎用]
    を選択します。
    [CA タイプのオプション]では、[ルート] を選択します。
    [サブジェクト識別名オプション] では、CA の名前を入力した後、他のフィールドを設定します。
    [キーアルゴリズムのオプション] で、[RSA 2048] を選択します。
    [証明書失効オプション] で、[CRL][OCSP] をオフにします。
    [CA 許可のオプション] で、[このアカウントでリクエストされた証明書を更新するための ACM のアクセスを承認する] を選択します。
  4. [料金を承諾する] にチェックを入れてから、[CA を作成] を選択します。
  5. CA のステータスが Pending certificate であることを確認します。
  6. [アクション] で、[CA 証明書のインストール] を選択します。
  7. CA 証明書の [有効性][署名アルゴリズム] を設定します。

CA に CRL を設定する

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

  1. 次の情報を含む CRL 設定用の JSON ファイルを作成します。
    {  
    "CrlConfiguration": {
        "Enabled": true,
        "ExpirationInDays": 7,
        "S3ObjectAcl": "BUCKET_OWNER_FULL_CONTROL",
        "CustomCname":"abcdef012345.cloudfront.net",
        "S3BucketName": "your-crl-storage-bucket"
      }
    }
    注: your-crl-storage-bucket は、お使いのバケット名で置き換えてください。また、必要に応じて、ExpirationInDays の値を CRL の有効期間に変更してください。
  2. AWS プライベート CA がバケットに CRL ファイルを公開できるようにするには、バケットポリシーを更新します。
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "PolicyForPcaCrl",
          "Effect": "Allow",
          "Principal": {
            "Service": "acm-pca.amazonaws.com"
          },
          "Action": [
            "s3:PutObject",
            "s3:PutObjectAcl",
            "s3:GetBucketAcl",
            "s3:GetBucketLocation"
          ],
          "Resource": [
            "arn:aws:s3:::your-crl-storage-bucket/*",
            "arn:aws:s3:::your-crl-storage-bucket"
          ],
          "Condition": {
            "StringEquals": {
              "aws:SourceAccount": "account",
              "aws:SourceArn": "arn:aws:acm-pca:region:account:certificate-authority/CA_ID"
            }
          }
        }
      ]
    }
    注: お使いのものでそれぞれ、your-crl-storage-bucket をバケット、region をリージョン、account をアカウント、CA_ID を CA ID に置き換えます。
  3. CloudFront ディストリビューションが CRL ファイルを取得できるようにするには、CloudFront ディストリビューションを作成したときにコピーしたポリシーを更新します。
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "PolicyForPcaCrl",
          "Effect": "Allow",
          "Principal": {
            "Service": "acm-pca.amazonaws.com"
          },
          "Action": [
            "s3:PutObject",
            "s3:PutObjectAcl",
            "s3:GetBucketAcl",
            "s3:GetBucketLocation"
          ],
          "Resource": [
            "arn:aws:s3:::your-crl-storage-bucket/*",
            "arn:aws:s3:::your-crl-storage-bucket"
          ],
          "Condition": {
            "StringEquals": {
              "aws:SourceAccount": "account",
              "aws:SourceArn": "arn:aws:acm-pca:region:account:certificate-authority/CA_ID"
            }
          }
        },
        {
          "Sid": "AllowCloudFrontServicePrincipal",
          "Effect": "Allow",
          "Principal": {
            "Service": "cloudfront.amazonaws.com"
          },
          "Action": "s3:GetObject",
          "Resource": "arn:aws:s3:::your-crl-storage-bucket/*",
          "Condition": {
            "StringEquals": {
              "AWS:SourceArn": "arn:aws:cloudfront::account:distribution/DISTRIBUTION_ID"
            }
          }
        }
      ]
    }
    注: お使いのものでそれぞれ、your-crl-storage-bucket をバケット、region をリージョン、account をアカウント、CA_ID を CA ID、DISTRIBUTION_ID を CloudFront ディストリビューションに置き換えます。
    詳細については、「Amazon S3 での CRL のアクセスポリシー」および、「S3 バケットにアクセスするためのオリジンアクセスコントロールを付与する」を参照してください。
  4. CA を更新して CRL を有効にするには、AWS CLI コマンド update-certificate-authority を実行します。
    aws acm-pca update-certificate-authority --certificate-authority-arn arn:aws:acm-pca:region:account:certificate-authority/CA_ID --revocation-configuration file://revoke_config.json
    注: お使いのものでそれぞれ、region をリージョン、account をアカウント、CA_ID を CA ID に置き換えてください。

CRL をテストする

CRL が公開され、アクセス可能であることを確認するには、次の手順を実行します。

  1. ACM コンソールを開きます。
  2. [証明書をリクエスト] を選択します。
  3. [プライベート証明書をリクエストする] を選択し、[次へ] を選択します。
  4. [認証機関] で、お使いの CA を選択します。
  5. [完全修飾ドメイン名] に、お使いのドメイン名を入力します。
    注: プライベート証明書には、ドメイン認証ステップは必要ありません。
  6. [ACM は、必要なアクセス許可がないと、この認証機関から発行されたプライベート証明書を更新できないことを理解しています] を選択します。
  7. [リクエスト] を選択します。
  8. プライベート証明書の [詳細] ページで、[ステータス][発行済み] になっていることを確認します。
  9. プライベート証明書のシリアル番号を書き留めておきます。
  10. プライベート証明書を取り消すには、AWS CLI コマンド revoke-certificate を実行します。
aws acm-pca revoke-certificate --certificate-authority-arn arn:aws:acm-pca:region:account:certificate-authority/CA_ID --certificate-serial SERIAL --revocation-reason UNSPECIFIED

注: お使いのものでそれぞれ、region をリージョン、account をアカウント、CA_ID を CA ID、SERIAL をプライベート証明書のシリアルナンバーに置き換えてください。UNSPECIFIED は、該当する失効理由に置き換えてください。
このコマンドを実行すると、AWS CloudTrail が RevokeCertificate イベントを記録します。 Amazon CloudWatch コンソールを開きます。 [すべてのメトリクス] を選択し、次に [ACMPrivateCA] を選択します。 [PrivateCAMetrics] を選択します。 CA の CRLGenerated メトリクスをレビューします。メトリクスのデータポイントは、RevokeCertificate イベントの eventTime の後に記録されます。
注: CRL ファイルは、取り消し後約 30 分で更新されます。詳細については、「AWS プライベート CA 証明書の失効方法を計画する」を参照してください。 CRL ファイルにアクセスするには、CloudFront ディストリビューションを使用します。

URL の例:

https://example.cloudfront.net/crl/CA_ID.crl

注: お使いのものでそれぞれ、example を CloudFront ディストリビューションのドメイン名に、CA_ID を認証機関の ID に置き換えます。ディストリビューションのドメイン名は、CloudFront コンソールで確認できます。 CRL ファイルをダウンロードして確認し、取り消されたシリアル番号がコマンドの出力に含まれていることを確認します。

(オプション) AWS Key Management Service (AWS KMS) を使用して CRL を暗号化する

CRL を含むバケットで、AWS KMS (SSE-KMS) によるサーバー側の暗号化を有効にできます。なお、AWS プライベート CA は AWS マネージド KMS キーの CRL ファイル暗号化をサポートしていないため、カスタマーマネージド KMS キーを作成する必要があります。Amazon S3 での SSE-KMS に関する詳細については、「AWS KMS キー (SSE-KMS) でサーバー側の暗号化を使用する」を参照してください。

次の手順を実行します。

  1. S3 バケットと同じリージョンで AWS KMS コンソールを開きます。
  2. [カスタマーマネージドキー] を選択してから、[キーを作成] を選択します。
  3. [キーの設定] ではデフォルト値をそのまま使用し、[次へ] を選択します。
  4. [ラベルの追加][エイリアス] にキーエイリアスを入力し、[説明] に説明を入力します。
  5. [キー管理権限の定義] に現在の AWS Identity and Access Management (IAM) ユーザーまたはロールを入力したら、[次へ] を選択します。
  6. [キー使用権限の定義][次へ] を選択します。
  7. 設定を確認したら、[完了] を選択します。
  8. [カスタマーマネージドキー] で、お使いの AWS KMS キーを選択します。
  9. [キーポリシー] で、[ポリシービューに切り替え] を選択します。
  10. [編集] を選択します。
  11. CRL の暗号化と配布に関する新しいキーポリシーを入力します。

バケットキーが有効になっているキーポリシーで、次のポリシーを入力します。

{  
"Id": "key-consolepolicy-bucket-key-enabled",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Enable IAM User Permissions",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::account:root"
      },
      "Action": "kms:*",
      "Resource": "*"
    },
    {
      "Sid": "Allow access for Key Administrators",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::account:role/your-role-name",
          "arn:aws:iam::account:user/your-user-name"
        ]
      },
      "Action": [
        "kms:Create*",
        "kms:Describe*",
        "kms:Enable*",
        "kms:List*",
        "kms:Put*",
        "kms:Update*",
        "kms:Revoke*",
        "kms:Disable*",
        "kms:Get*",
        "kms:Delete*",
        "kms:TagResource",
        "kms:UntagResource",
        "kms:ScheduleKeyDeletion",
        "kms:CancelKeyDeletion",
        "kms:RotateKeyOnDemand"
      ],
      "Resource": "*"
    },
    {
      "Sid": "Allow ACM-PCA use of the key",
      "Effect": "Allow",
      "Principal": {
        "Service": "acm-pca.amazonaws.com"
      },
      "Action": [
        "kms:GenerateDataKey",
        "kms:Decrypt"
      ],
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "kms:EncryptionContext:aws:s3:arn":"arn:aws:s3:::your-crl-storage-bucket"
        }
      }
    },
    {
      "Sid": "AllowCloudFrontServicePrincipalSSE-KMS",
      "Effect": "Allow",
      "Principal": {
        "Service": "cloudfront.amazonaws.com"
      },
      "Action": [
        "kms:Decrypt",
        "kms:Encrypt",
        "kms:GenerateDataKey*"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "AWS:SourceArn": "arn:aws:cloudfront::account:distribution/DISTRIBUTION_ID"
        }
      }
    }
  ]
}

注: お使いのものでそれぞれ、account をアカウント、your-role-name を IAM ロール、your-user-name を IAM ユーザー名、your-crl-storage-bucket をバケット、DISTRIBUTION_ID を CloudFront ディストリビューションに置き換えてください。

有効なバケットキーを使用せずにキーポリシーを作成する場合は、条件キー kms:EncryptionContext:aws:s3:arn を特定のオブジェクトキーで置き換えます。

  1. [変更を保存] を選択します。
  2. Amazon S3 コンソールを開きます。
  3. バケットを選択してから、[プロパティ] を選択します。
  4. [デフォルトの暗号化] で、[編集] を選択します。
  5. 次の暗号化パラメータを入力します。
    [暗号化タイプ] には、[AWS Key Management Service キーによるサーバー側の暗号化 (SSE-KMS)] を選択します。
    [AWS KMS キー] には、お使いの AWS KMS キーの Amazon リソースネーム (ARN) を入力します。
    [バケットキー] には、バケットキーが有効になっているキーポリシーの場合は [有効] を選択し、バケットキーが無効になっているキーポリシーの場合は [無効] を選択します。
  6. [変更を保存] を選択します。
  7. CRL ファイルが更新されたことを確認するには、「CRL をテストする」セクションの手順を実行します。
  8. CRL ファイルが正しく暗号化されたことを確認するには、AWS CLI コマンド head-object を実行します。
aws s3api head-object --bucket your-crl-storage-bucket --key crl/CA_ID.crl

注: お使いのものでそれぞれ、your-crl-storage-bucket をバケットに、CA\ _ID を CA ID に置き換えます。 SSEKMSKeyID フィールドと BucketKeyEnabled フィールドをレビューし、暗号化設定を確認します。

関連情報

AWS プライベート CA 用の CRL を設定する

ACM プライベート CA の CRL を安全に作成して保存する方法

Amazon S3 のセキュリティベストプラクティス

ACM プライベート CA のベストプラクティス

AWS公式
AWS公式更新しました 2ヶ月前
コメントはありません

関連するコンテンツ