翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
のセキュリティ AWS AppConfig
のクラウドセキュリティが最優先事項 AWS です。お客様は AWS 、セキュリティを最も重視する組織の要件を満たすように構築されたデータセンターとネットワークアーキテクチャからメリットを得られます。
セキュリティは、 AWS とユーザーの間で共有される責任です。責任共有モデル
-
クラウドのセキュリティ – AWS は、 で AWS サービスを実行するインフラストラクチャを保護する責任を担います AWS クラウド。また、 は、お客様が安全に使用できるサービス AWS も提供します。コンプライアンスAWS プログラム
コンプライアンスプログラム の一環として、サードパーティーの監査者は定期的にセキュリティの有効性をテストおよび検証。に適用されるコンプライアンスプログラムの詳細については AWS Systems Manager、「コンプライアンスプログラムAWS による対象範囲内のサービスコンプライアンスプログラム 」を参照してください。 -
クラウドのセキュリティ — お客様の責任は、使用する AWS サービスによって決まります。また、お客様は、データの機密性、会社の要件、適用される法律や規制など、その他の要因についても責任を負います。
AWS AppConfig は の一機能です AWS Systems Manager。の使用時に責任共有モデルを適用する方法については AWS AppConfig、「 のセキュリティ AWS Systems Manager」を参照してください。ここでは、 AWS AppConfigのセキュリティおよびコンプライアンス目標を達成するために Systems Manager を設定する方法を説明しています。
最小特権アクセスの実装
セキュリティのベストプラクティスとして、ID が特定の条件下で特定のリソースに対して特定のアクションを実行するために必要な最小限のアクセス許可を付与します。 AWS AppConfig エージェントには、エージェントがインスタンスまたはコンテナのファイルシステムにアクセスできるようにする 2 つの機能があります。バックアップとディスクへの書き込みです。これらの機能を有効にする場合は、 AWS AppConfig エージェントのみがファイルシステム上の指定された設定ファイルに書き込むアクセス許可を持っていることを確認します。また、これらの設定ファイルから読み取るために必要なプロセスのみが、その機能を持っていることも確認します。最小限の特権アクセスの実装は、セキュリティリスクはもちろん、エラーや悪意ある行動によってもたらされる可能性のある影響を減らす上での基本となります。
最小特権アクセスの実装の詳細については、「 AWS Well-Architected Tool ユーザーガイドSEC」の「03-BP02 最小特権アクセスの付与」を参照してください。このセクションで説明する AWS AppConfig エージェント機能の詳細については、「」を参照してくださいマニフェストを使用して追加の取得機能を有効にする。
AWS AppConfigでの静止時のデータの暗号化
AWS AppConfig は、 を使用して保管中の顧客データを保護するための暗号化をデフォルトで提供します AWS 所有のキー。
AWS 所有のキー — デフォルトでは、これらのキー AWS AppConfig を使用して、サービスによってデプロイされ、データストアでホストされる AWS AppConfig データを自動的に暗号化します。を表示、管理、使用したり AWS 所有のキー、その使用を監査したりすることはできません。ただし、データを暗号化するキーを保護するために何か行動を起こしたり、プログラムを変更したりする必要はありません。詳細については、「AWS Key Management Service デベロッパーガイド」の 「AWS 所有のキー」を参照してください。
この暗号化レイヤーを無効にしたり、別の暗号化タイプを選択したりすることはできませんが、 AWS AppConfig データストアでホストされている設定データを保存したり、設定データをデプロイしたりするときに使用するカスタマーマネージドキーを指定できます。
カスタマーマネージドキー — ユーザーが作成、所有、管理する対称カスタマーマネージドキー AWS AppConfig を使用して、既存の に 2 番目の暗号化レイヤーを追加します AWS 所有のキー。ユーザーがこの暗号化レイヤーを完全に制御できるため、次のようなタスクを実行できます。
-
キーポリシーとグラントの策定と維持
-
IAM ポリシーの確立と維持
-
キーポリシーの有効化と無効化
-
キー暗号化マテリアルのローテーション
-
タグの追加
-
キーエイリアスの作成
-
キー削除のスケジュール設定
詳細については、AWS Key Management Service デベロッパーガイドの「カスタマーマネージドキー」を参照してください。
AWS AppConfig がカスタマーマネージドキーをサポート
AWS AppConfig では、設定データのカスタマーマネージドキー暗号化がサポートされています。 AWS AppConfig ホストされたデータストアに保存されている設定バージョンの場合、お客様は対応する設定プロファイルKmsKeyIdentifier
で を設定できます。CreateHostedConfigurationVersion
API オペレーションを使用して設定データの新しいバージョンを作成するたびに、 は から AWS KMS データキー AWS AppConfig を生成KmsKeyIdentifier
し、保存する前にデータを暗号化します。GetHostedConfigurationVersion
または StartDeployment
APIオペレーション中に後でデータにアクセスすると、 は生成されたデータキーに関する情報を使用して設定データを復 AWS AppConfig 号します。
AWS AppConfig は、デプロイされた設定データのカスタマーマネージドキー暗号化もサポートしています。設定データを暗号化するために、お客様はデプロイKmsKeyIdentifier
に を提供できます。 はこれを使用して AWS KMS データキー AWS AppConfig を生成KmsKeyIdentifier
し、StartDeployment
APIオペレーション上のデータを暗号化します。
AWS AppConfig 暗号化アクセス
顧客管理キーを作成するときは、次のキーポリシーを使用して、キーが使用可能であることを確認してください。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
account_ID
:role/role_name
" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*" } ]
ホストされている設定データをカスタマー管理キーで暗号化するには、ID 呼び出しにユーザー、グループ、CreateHostedConfigurationVersion
またはロールに割り当てることができる以下のポリシーステートメントが必要です。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kms:GenerateDataKey, "Resource": "arn:aws:kms:
Region
:account_ID
:key_ID
" } ] }
Secrets Manager のシークレットや、顧客管理キーで暗号化されたその他の設定データを使用している場合は retrievalRoleArn
、kms:Decrypt
データを復号化して取得する必要があります。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "arn:aws:kms:
Region
:account_ID
:configuration source
/object
" } ] }
API オペレーションを AWS AppConfig StartDeployment呼び出す場合、ID 呼び出しには、ユーザー、グループ、またはロールに割り当てることができる次のIAMポリシーStartDeployment
が必要です。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:GenerateDataKey*" ], "Resource": "arn:aws:kms:
Region
:account_ID
:key_ID
" } ] }
API オペレーションを AWS AppConfig GetLatestConfiguration呼び出す場合、ID 呼び出しには、ユーザー、グループ、またはロールに割り当てることができる次のポリシーGetLatestConfiguration
が必要です。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kms:Decrypt, "Resource": "arn:aws:kms:
Region
:account_ID
:key_ID
" } ] }
暗号化コンテキスト
暗号化コンテキストは、データに関する追加のコンテキスト情報が含まれたキーバリューペアのオプションのセットです。
AWS KMS は、追加の認証データとして暗号化コンテキストを使用して、認証された暗号化 をサポートします。データを暗号化するリクエストに暗号化コンテキストを含めると、 は暗号化コンテキストを暗号化されたデータに AWS KMS バインドします。データを復号化するには、そのリクエストに (暗号化時と) 同じ暗号化コンテキストを含めます。
AWS AppConfig 暗号化コンテキスト:暗号化されたホスト設定データとデプロイのすべての AWS KMS 暗号化オペレーションで暗号化コンテキスト AWS AppConfig を使用します。コンテキストには、データのタイプに対応するキーと、特定のデータ項目を識別する値が含まれます。
の暗号化キーのモニタリング AWS
で AWS KMS カスタマーマネージドキーを使用する場合 AWS AppConfig、 AWS CloudTrail または Amazon CloudWatch Logs を使用して、 AWS AppConfig が に送信するリクエストを追跡できます AWS KMS。
次の例は、 Decrypt
がカスタマーマネージドキーで暗号化されたデータにアクセス AWS AppConfig するために によって呼び出されるオペレーションをモニタリング AWS KMS する の CloudTrail イベントです。
{ "eventVersion": "1.08", "userIdentity": { "type": "AWSService", "invokedBy": "appconfig.amazonaws.com" }, "eventTime": "2023-01-03T02:22:28z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "
Region
", "sourceIPAddress": "172.12.34.56", "userAgent": "ExampleDesktop/1.0 (V1; OS)", "requestParameters": { "encryptionContext": { "aws:appconfig:deployment:arn": "arn:aws:appconfig:Region
:account_ID
:application/application_ID
/environment/environment_ID
/deployment/deployment_ID
" }, "keyId": "arn:aws:kms:Region
:account_ID
:key/key_ID
", "encryptionAlgorithm": "SYMMETRIC_DEFAULT" }, "responseElements": null, "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "readOnly": true, "resources": [ { "accountId": "account_ID
", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:Region
:account_ID
:key_ID
" } ], "eventType": "AwsApiCall", "managementEvent": true, "eventCategory": "Management", "recipientAccountId": "account_ID
", "sharedEventID": "dc129381-1d94-49bd-b522-f56a3482d088" }
インターフェイスエンドポイント (AWS PrivateLink) AWS AppConfig を使用した へのアクセス
を使用して AWS PrivateLink 、 VPCと の間にプライベート接続を作成できます AWS AppConfig。インターネットゲートウェイ、NATデバイスVPC、VPN接続、または AWS Direct Connect 接続を使用せずに、 にある AWS AppConfig かのように にアクセスできます。のインスタンスは、 VPC にアクセスするためにパブリック IP アドレスを必要としません AWS AppConfig。
このプライベート接続を確立するには、 AWS PrivateLinkを利用したインターフェイスエンドポイントを作成します。インターフェイスエンドポイントに対して有効にする各サブネットにエンドポイントネットワークインターフェイスを作成します。これらは、 AWS AppConfig宛てのトラフィックのエントリポイントとして機能するリクエスタ管理型ネットワークインターフェイスです。
詳細については、『AWS PrivateLink ガイド』の「AWS のサービス でアクセスする」を参照してください。
に関する考慮事項 AWS AppConfig
のインターフェイスエンドポイントを設定する前に AWS AppConfig、「 AWS PrivateLink ガイド」の「考慮事項」を参照してください。
AWS AppConfig は、インターフェイスエンドポイントを介した appconfig
および appconfigdata
サービスの呼び出しをサポートします。
AWS AppConfig用のインターフェイスエンドポイントの作成
Amazon VPCコンソールまたは AWS Command Line Interface () AWS AppConfig を使用して、 のインターフェイスエンドポイントを作成できますAWS CLI。詳細については、「AWS PrivateLink ガイド」の「インターフェイスエンドポイントを作成」を参照してください。
次のサービス名 AWS AppConfig を使用して、 用のインターフェイスエンドポイントを作成します。
com.amazonaws.
region
.appconfig
com.amazonaws.
region
.appconfigdata
インターフェイスエンドポイントDNSのプライベートを有効にすると、デフォルトのリージョンDNS名 AWS AppConfig を使用して にAPIリクエストを行うことができます。例えば、appconfig.us-east-1.amazonaws.com
と appconfigdata.us-east-1.amazonaws.com
です。
インターフェイスエンドポイントのエンドポイントポリシーを作成する
エンドポイントポリシーは、インターフェイスエンドポイントにアタッチできる IAMリソースです。デフォルトのエンドポイントポリシーでは、インターフェイスエンドポイント AWS AppConfig を介した へのフルアクセスが許可されます。 AWS AppConfig から に許可されるアクセスを制御するにはVPC、インターフェイスエンドポイントにカスタムエンドポイントポリシーをアタッチします。
エンドポイントポリシーは、以下の情報を指定します。
-
アクションを実行できるプリンシパル (AWS アカウント、IAMユーザー、IAMロール)。
-
実行可能なアクション。
-
このアクションを実行できるリソース。
詳細については、AWS PrivateLink ガイドのControl access to services using endpoint policies (エンドポイントポリシーを使用してサービスへのアクセスをコントロールする)を参照してください。
例: AWS AppConfig アクションのVPCエンドポイントポリシー
以下は、カスタムエンドポイントポリシーの例です。インターフェイスエンドポイントにアタッチされると、このポリシーは、すべてのリソースですべてのプリンシパルに、リストされている AWS AppConfig アクションへのアクセス権を付与します。
{ "Statement": [ { "Principal": "*", "Effect": "Allow", "Action": [ "
appconfig
:CreateApplication
", "appconfig
:CreateEnvironment
", "appconfig
:CreateConfigurationProfile
", "appconfig
:StartDeployment
", "appconfig
:GetLatestConfiguration
" "appconfig
:StartConfigurationSession
" ], "Resource":"*" } ] }
Secrets Manager のキーローテーション
このセクションでは、Secrets Manager と AWS AppConfig の統合に関する重要なセキュリティ情報について説明します。Secrets Manager の詳細については、「 AWS Secrets Manager ユーザーガイド」の「 とは AWS Secrets Manager」を参照してください。
によってデプロイされた Secrets Manager シークレットの自動ローテーションの設定 AWS AppConfig
ローテーションとは、Secrets Manager に保存されているシークレットを定期的に更新するためのプロセスのことです。 シークレットのローテーションを行うと、シークレット、ならびに、データベースまたはサービスの認証情報が更新されます。 AWS Lambda 関数を使用してシークレットとデータベースを更新することで、Secrets Manager でシークレットの自動ローテーションを設定できます。詳細については、AWS Secrets Manager ユーザーガイド の「 シークレット AWS Secrets Manager のローテーション」を参照してください。
によってデプロイされた Secrets Manager シークレットのキーローテーションを有効にするには AWS AppConfig、ローテーション Lambda 関数を更新し、ローテーションされたシークレットをデプロイします。
注記
シークレットがローテーションされ、新しいバージョンに完全に更新されたら、 AWS AppConfig 設定プロファイルをデプロイします。VersionStage
のステータスが AWSPENDING
から AWSCURRENT
に変更されたためにシークレットがローテーションされたかどうかを判断できます。シークレットローテーションの完了は、Secrets Managerのローテーションテンプレート finish_secret
機能内で行われます。
シークレットのローテーション後に AWS AppConfig デプロイを開始する関数の例を次に示します。
import time import boto3 client = boto3.client('appconfig') def finish_secret(service_client, arn, new_version): """Finish the rotation by marking the pending secret as current This method finishes the secret rotation by staging the secret staged AWSPENDING with the AWSCURRENT stage. Args: service_client (client): The secrets manager service client arn (string): The secret ARN or other identifier new_version (string): The new version to be associated with the secret """ # First describe the secret to get the current version metadata = service_client.describe_secret(SecretId=arn) current_version = None for version in metadata["VersionIdsToStages"]: if "AWSCURRENT" in metadata["VersionIdsToStages"][version]: if version == new_version: # The correct version is already marked as current, return logger.info("finishSecret: Version %s already marked as AWSCURRENT for %s" % (version, arn)) return current_version = version break # Finalize by staging the secret version current service_client.update_secret_version_stage(SecretId=arn, VersionStage="AWSCURRENT", MoveToVersionId=new_version, RemoveFromVersionId=current_version) # Deploy rotated secret response = client.start_deployment( ApplicationId='TestApp', EnvironmentId='TestEnvironment', DeploymentStrategyId='TestStrategy', ConfigurationProfileId='ConfigurationProfileId', ConfigurationVersion=new_version, KmsKeyIdentifier=key, Description='Deploy secret rotated at ' + str(time.time()) ) logger.info("finishSecret: Successfully set AWSCURRENT stage to version %s for secret %s." % (new_version, arn))