スキップしてコンテンツを表示

複数 AWS アカウントから Session Manager に記録するために、一元 Amazon S3 バケットを設定する方法を教えてください。

所要時間3分
0

AWS アカウントで、AWS Systems Manager の機能である Session Manager 用に一元 Amazon Simple Storage Service (Amazon S3) ログ記録を設定したいです。

解決策

アクセス許可を設定する

Systems Manager Agent (SSM Agent) は同じ AWS Identity and Access Management (IAM) ロールを使用してログを有効化し、Amazon S3 にログをアップロードします。

次のいずれかの IAM ロールを使用できます。

アクセス許可を付与するには、次のポリシーを使用します。

  • IAM プリンシパルを所有する AWS アカウントは、IAM ポリシーを使用して Amazon S3 のアクセス許可を付与する必要があります。
  • S3 バケットの所有者は、AWS Key Management Service (AWS KMS) キーポリシーまたはアクセスコントロールリスト (ACL) を使用してすべてのアカウントへのアクセスを許可する必要があります。
  • バケットが AWS KMS キーで暗号化されている場合は、IAM ポリシーを使用する必要があります。
  • SSM Agent のアクセス許可を付与するロールに IAM ポリシーをアタッチする必要があります。
  • KMS キーポリシーを使用して、バケットの暗号化に使用する AWS KMS キーへのアクセスを許可する必要があります。
  • Systems Manager のコア機能にアクセスするには、AWS マネージドポリシー AmazonSSMManagedInstanceCore を使用する必要があります。

Session Manager で S3 バケットにログをアップロードするには、次のアクセス許可が必要です。

  • 暗号化オブジェクトを S3 バケットにアップロードするための s3:PutObject および s3:PutObjectAcl アクセス許可。
  • AWS KMS キーにアクセスするための kms:Decrypt および kms:GenerateDataKey アクセス許可。
  • AWS Organizations 内の組織 ID に一致しないプリンシパルへのアクセスを制限するための aws:PrincipalOrgID: o-xxxxxxx アクセス許可。

次のエンドポイントへの接続を検証します。

  • Amazon S3 エンドポイント: com.amazonaws.region.s3
  • AWS KMS サービスエンドポイント: com.amazonaws.region.kms
  • Systems Manager エンドポイント: com.amazonaws.region.ssm
  • Systems Manager Session Manager エンドポイント: com.amazonaws.region.ssmmessages
  • Amazon EC2 エンドポイント: com.amazonaws.region.ec2

AWS KMS キーとキーポリシーを作成する

AWS KMS キーを作成して S3 バケットと Session Manager ログを暗号化します。

単一のキーを作成して Session Manager ログと AWS KMS 暗号化の両方を暗号化することも、それぞれに個別のキーを作成することもできます。

各キーにおいて、次のキーステートメントを AWS KMS ポリシーに追加すると、Session Manager がログを暗号化できるようになります。

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

注: 実際のものでそれぞれ、aws:PrincipalOrgID を組織 ID に、Principal を IAM ロール のARN に置き換えます。

S3 バケットとバケットポリシーを作成する

Session Manager ログを保存する S3 バケットを作成します。詳細については、「汎用バケットの作成」および「Amazon 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"
        }
      }
    }
  ]
}

ログのアクセス許可に関する詳細については、「ログ配信用のアクセス許可」を参照してください。

S3 バケットと AWS KMS キーにアクセスするための IAM ポリシーを作成する

S3 バケットと AWS KMS キーへのアクセス許可を付与する IAM ポリシーを作成します。

アカウントが S3 バケットに接続するために使用するインスタンスプロファイルに、次のポリシー例をアタッチします。

{
  "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"
      ]
    }
  ]
}

注: インラインポリシーまたはカスタマーマネージドポリシーを使用できます。詳細については、「AWS KMS で IAM ポリシーを使用する」を参照してください。

(オプション) ログ用の Session Manager シェルプロファイルを設定する

カスタムシェルプロファイルを作成するには、JSON ファイルを作成し、内容を削除して次の値に置き換えます。

{
  "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": ""}
  }
}

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

次のコマンドを実行して、ファイルをデフォルトの Session Manager ドキュメントとして保存します (ファイル名の例: SessionManagerRunShell.json)。

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

Session Manager のログ記録設定を確認する

Amazon S3 コンソールを開き、ログ記録を行うバケットに移動します。[バケット] 設定でバケット暗号化が有効になっていることを確認します。AWS KMS キーの ARN がキー 1 と一致しており、Session Manager が正しい暗号化キーを使用していることを確認してください。

Session Manager の設定を検証するには、次の手順を実行します。

  1. Session Manager コンソールを開きます
  2. 該当する AWS リージョンを選択します。
  3. 暗号化を有効にしたことを確認します。
  4. キー 1 の ARN を入力します。
  5. 正しい S3 バケットを設定したことを確認します。

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

ログを生成するには、別のアカウントで Session Manager を使用します。

次の手順を実行します。

  1. Session Manager を使用してインスタンスに接続します
  2. 該当するリージョンを選択します。
  3. セッションが接続されており、「This Session is Encrypted using AWS KMS」というメッセージが表示されることを確認します。
  4. テストエントリを入力してログを生成し、セッションを終了します。

**注:**セッションが終了した後、ログが表示されるまでに 30 秒以上かかる場合があります。詳細については、「サーバーアクセスログを使用してリクエストのログを記録する」を参照してください。

関連情報

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

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

Amazon S3 バケットポリシーの例

Amazon S3 のアクセス制御

AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ