複数のアカウントからの Session Manager のログ用に中央の Amazon S3 バケットを設定するにはどうすれば良いですか?

所要時間3分
0

AWS アカウントで、AWS Systems Manager の機能であるセッションマネージャーの中央 Amazon Simple Storage Service (Amazon S3) ログ記録を設定したいと考えています。

簡単な説明

Systems Manager では、Session Manager の Amazon S3 ログ記録を特定して設定できます。 

はじめに

AWS Systems Manager エージェント (SSM エージェント) は、同じ AWS ID およびアクセス管理 (IAM) ロールを使用してそれ自体をアクティブ化し、Amazon S3 にログをアップロードします。Amazon Elastic Compute Cloud (Amazon EC2) インスタンスにアタッチされた IAM インスタンスプロファイル、またはデフォルトのホスト管理設定用に設定された IAM ロールのいずれかを使用することができます。

設定を完了するためには、以下のアクセス許可が必要となります。

  • アクセス許可に使用される IAM プリンシパルを所有するアカウントは、IAM ポリシーを使用して Amazon S3 アクセス許可を付与する必要があります。
  • S3 バケットの所有者はまた、バケットポリシーまたはアクセスコントロールリスト (ACL) を使用してすべてのアカウントにアクセス許可を付与する必要があります。
  • バケットがAWS Key Management Service (AWS KMS) キーで暗号化されている場合は、IAM ポリシーを作成および使用する必要があります。

注:

  • SSM エージェント のアクセス許可を付与するロールに IAM ポリシーをアタッチする必要があります。
  • バケットの暗号化に使用される KMS キーもまた、KMS キーポリシーを通じてアクセス許可を付与する必要があります。

Session Manager の中央の Amazon S3 バケットログ記録を設定するには、まず集中型 S3 バケットを所有するためのプライマリアカウントを特定します。以下の例では、Account A が一元化されたバケットを所有しています。

その後、以下の手順を実行します。

  1. Account A で、1 つまたは 2 つのカスタム AWS KMS キーと 1 つのカスタム KMS ポリシーを作成します。
  2. Account A で、Systems Manager ログ記録用の S3 バケットを作成します。
  3. Account A で、S3 バケット用のリソースポリシーを作成します。
  4. 別のアカウントで、S3 バケットおよび両方の KMS キーのアクセス許可を付与する IAM ポリシーを作成します。
  5. (オプション) Session Manager シェルプロファイルを使用して、ログ記録を作成および設定します。
  6. Session Manager のログ記録が、送信先バケットに設定されており、KMS キーを使用している状態であることを確認します。
  7. バケット内で、ログが生成されていることを確認します。

解決策

**注:**アクセス許可のスコープを設定するために、次のプロセス例では、ロールおよび AWS Organizations 用の条件キーを使用します。追加的なアクセス許可管理が必要な場合は、Session Manager でプリンシパルロールを使用します。

このプロセスでは、以下の主要なアクセス許可を使用します。

  • IAM AWS 管理ポリシー AmazonSSMManagedInstanceCore は、Systems Manager によるアクセス許可を提供します。
  • s3:GetEncryptionConfiguration アクセス許可は、S3 バケットの暗号化設定を記述します。
  • s3:PutObject および s3:PutObjectAcl アクセス許可は、暗号化されたオブジェクトを S3 バケットに配置します。
  • kms:Decrypt および kms:GenerateDataKey アクセス許可は、バケットおよび Session Manager にアクセスするときに KMS キーへのアクセス許可を提供します。
  • aws:PrincipalOrgID: o-xxxxxxx アクセス許可は、組織 ID と一致していないプリンシパルへの制限付きのアクセス許可を付与します。

前提条件

以下のサービスのエンドポイントに対する接続許可が必要となります。

  • Amazon S3
  • AWS KMS
  • Systems Manager および Systems Manager メッセージ
  • Amazon EC2 メッセージ

KMS キーを作成する

まず、1 つまたは 2 つのキーを作成します。

  • 1 つのキーを作成する場合は、Session Manager のログ記録バケットでの S3 暗号化と、Session Manager 設定における KMS 暗号化に対し、それ (Key 1) を適用します。
  • 2 つのキーを作成する場合は、最初の KMS キー (Key 1) を使用し、ログ記録用の S3 バケットを暗号化します。2 番目の KMS キー (Key 2) を使用して、Amazon S3 バケットへの Session Manager ストリームを暗号化します。

次に、各キーのキー Sid を作成します。各キーの KMS ポリシーに Sid 要素を追加してください。 

Session Manager にセッションを暗号化することを許可するには、以下のアクセス許可を [Organizations] (組織) に追加します。

注:** aws:PrincipalOrgID** 値を、組織 ID とプリンシパル ARN に置き換えます。

{  
    "Effect": "Allow",  
    "Principal": {  
        "AWS": "*"  
    },  
    "Action": [  
        "kms:Decrypt",  
        "kms:GenerateDataKey"  
    ],  
    "Resource": "*",  
    "Condition": {  
        "StringEquals": {  
            "aws:PrincipalOrgID": "o-xxxxxxx"  
        }  
    }  
}

Account A へのログイン用 S3 バケットを作成する

Account A に、Session Manager のデータ記録用の Amazon S3 バケットを作成します。 バケットに、customer_session_manager_logging_bucket などの名前を付けるようにしてください。暗号化を選択するときは、Key 1 を使用します。

S3 バケットのリソースポリシーを作成する

セッションのログ記録用に使用するバケットに、以下のリソースポリシーを適用します。

PrincipalOrgId の条件キーを使用して S3 バケットへのアクセスを制限するには、S3 バケットに以下のリソースポリシーを追加します。

**注:**このポリシーは組織外のプリンシパルからのアクセス要求を拒否します。

{  
    "Version": "2012-10-17",  
    "Statement": [  
        {  
            "Effect": "Allow",  
            "Principal": {  
                "AWS": "*"  
            },  
            "Action": "s3:GetEncryptionConfiguration",  
            "Resource": "arn:aws:s3:::customer_session_manager_logging_bucket",  
            "Condition": {  
                "StringEquals": {  
                    "aws:PrincipalOrgID": "o-xxxxxxxxxxxxxx"  
                }  
            }  
        },  
        {  
            "Effect": "Allow",  
            "Principal": {  
                "AWS": "*"  
            },  
            "Action": [  
                "s3:PutObject",  
                "s3:PutObjectAcl"  
            ],  
            "Resource": "arn:aws:s3:::customer_session_manager_logging_bucket/*",  
            "Condition": {  
                "StringEquals": {  
                    "aws:PrincipalOrgID": "o-xxxxxxxxxxxxx"  
                }  
            }  
        }  
    ]  
}

IAM ポリシーを作成します。

まず、S3 バケットおよびキーへのアクセス許可を付与する IAM ポリシーを作成します。

次のポリシー例をインスタンスプロファイルにアタッチし、接続するアカウントで使用します。インラインポリシーまたはカスタマー管理ポリシーを使用して、ポリシーをアタッチします。

{  
    "Version": "2012-10-17",  
    "Statement": [  
        {  
            "Sid": "PutObjectsBucket",  
            "Action": [  
                "s3:PutObject",  
                "s3:PutObjectAcl"  
            ],  
            "Effect": "Allow",  
            "Resource": "arn:aws:s3:::customer_session_manager_logging_bucket/*"  
        },  
        {  
            "Sid": "ListBucketAndEncryptionConfig",  
            "Action": [  
                "s3:GetEncryptionConfiguration"  
            ],  
            "Effect": "Allow",  
            "Resource": "arn:aws:s3:::customer_session_manager_logging_bucket"  
        },  
        {  
            "Sid": "S3KMSSessionManagerKMS",  
            "Effect": "Allow",  
            "Action": [  
                "kms:Decrypt",  
                "kms:GenerateDataKey*"  
            ],  
            "Resource": [  
                "arn:aws:kms:us-east-1:ACCOUNTId:key/YOUR-KMS-FOR-SessionManagerEncryption",  
                "arn:aws:kms:us-east-1:ACCOUNTID:key/YOUR-KMS-FOR-S3BucketEncryption"  
            ]  
        }  
    ]  
}

(オプション) Session Manager シェルプロファイルを使用して、ログ記録を作成および設定する

カスタムのシェルプロファイルを作成するには、まず、ファイルを作成します。次に、説明名 (例えば、SessionManagerRunShell.json) を付けて、ファイルを保存します。この .json ファイルの内容を以下の例に置き換えます。

注:** customer_session_manager_logging_bucket** を、バケット名に変更し、YOUR-KMS-FOR-SessionManagerEncryption を、Session Manager に指定したキーに置き換えます。

{  
"schemaVersion": "1.0",  
"description": "Document to hold regional settings for Session Manager",  
"sessionType": "Standard_Stream",  
"inputs": {  
"s3BucketName": "customer_session_manager_logging_bucket",  
"s3KeyPrefix": "",  
"s3EncryptionEnabled": true,  
"cloudWatchLogGroupName": "",  
"cloudWatchEncryptionEnabled": false,  
"cloudWatchStreamingEnabled": false,  
"kmsKeyId": "arn:aws:kms:REGION:ACCOUNTID:key/YOUR-KMS-FOR-SessionManagerEncryption",  
"runAsDefaultUser": "",  
"idleSessionTimeout": "20",  
"maxSessionDuration": "",  
"shellProfile": {"windows": "", "linux": ""}  
  }  
}

次のコマンドを実行し、このファイルをデフォルトのセッションマネージャー文書として保存します。

aws ssm update-document --name "SSM-SessionManagerRunShell"   
--content "file://SessionManagerRunShell.json"   
--document-version "$LATEST"

Session Manager のログ記録が、送信先バケットに設定されており、KMS キーを使用している状態であることを確認します

S3 バケットを開き、[バケット暗号化] がオンになっていることを確認します。KMS ARN をチェックしてセッションマネージャーがキー 1 を使用していることを確認します。

注: Session Manager クロスアカウントのログ記録を設定するときのベストプラクティスは、アカウント ID のプレフィックスを使用することです。これを行うことで、アカウントと、その関連するログを追跡するのに役立ちます。

Session Manager の設定を確認するには、以下の手順を実行します。

  1. Session Manager コンソールを開き、AWS リージョンを選択します。
  2. S3 バケット暗号化がオンになっていることを確認し、Account A 内のキー 1 の ARN を入力します。
  3. S3 バケットに、Account A 内の S3 バケット名を入力します。

バケット内で、ログが生成されていることを確認する

ログを生成するには、別のアカウントでセッションマネージャーを使用し、インスタンスに接続します。

以下の手順を実行します。

  1. Session Manager コンソールを開き、リージョンを選択します。
  2. セッションが接続され、以下のメッセージが表示されることを確認します。 「このセッションは AWS KMS を使用して暗号化されています」
  3. いくつかのテストエントリを入力し、ログを生成して、セッションを終了します。
  4. Account A で、ログ記録用に作成した S3 バケットに移動して、時間別に最新のログを探す必要があります。

注: セッションを切断した後、ログが入力されるまでに、少なくとも 30 秒かかる場合があります。詳細については、「サーバーアクセスログを使用したリクエストのログ記録」を参照してください。

関連情報

サーバー側の暗号化を使用したデータの保護

Amazon S3 のアクション、リソース、および条件キー

バケットポリシーの例

アクセスポリシーガイドライン

特定の KMS キーにより暗号化および復号することをユーザーに許可する

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