AWS の必要なアクセス許可

アカウントを完全に可視化するために、Tenable One Cloud Exposure は AWS 管理ポリシーとインラインポリシーの両方を使用して、関連するメタデータを収集する必要があります。これらのポリシーは、アカウントまたは組織を接続した際に IAM で Tenable 用に作成した専用ロールにアタッチされています。

  • モニタリングアクセス許可
    • SecurityAudit アクセス許可。AWS 管理ポリシー。セキュリティ設定メタデータの読み取り許可を付与します。
    • カスタム Tenable モニタリングアクセス許可 (読み取り専用)。インラインポリシー。SecurityAudit ポリシーに含まれていない追加の読み取り専用アクセス許可を Tenable に付与します。

      SecurityAudit ポリシーとカスタムインラインポリシーの両方が Tenable に必要な理由の詳細は、AWS の FAQ を参照してください。

  • (オプション) カスタム Tenable 修正アクセス許可 (読み取りと書き込み)。インラインポリシーは Tenable に管理のアクセス許可を付与し、Tenable が環境を変更できるようにします。たとえば、この許可により Tenable は検出結果を AWS で直接自動で修正できるようになります (管理のアクセス許可を付与しない場合でも、ワンタイム認証情報をオンデマンドで提供することで、検出結果を手動で修正できます)。
  • CloudTrail (S3) アクセス許可。詳細については、CloudTrail を参照してください。

お使いの AWS 組織でサービスコントロールポリシー (SCP) またはリソースコントロールポリシー (RCP) を使用している場合は、必ず既存の SCP または RCP に除外を追加して、クラウドサイバーエクスポージャー 用に作成した専用の IAM ロールが含まれないようにしてください。詳細については、AWS の FAQ{target=_blank} を参照してください。

付録 I: AWS IAM ポリシー

Tenable モニタリングポリシー (読み取り専用)

コピー

JSON

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "acm:Describe*",
        "acm:List*",
        "aoss:BatchGet*",
        "aoss:List*",
        "appsync:List*",
        "athena:GetWorkGroup",
        "athena:List*",
        "autoscaling:Describe*",
        "batch:Describe*",
        "batch:List*",
        "bedrock:Get*",
        "bedrock:List*",
        "bedrock-agentcore:GetAgentRuntime",
        "bedrock-agentcore:GetAgentRuntimeEndpoint",
        "bedrock-agentcore:GetApiKeyCredentialProvider",
        "bedrock-agentcore:GetGateway",
        "bedrock-agentcore:GetGatewayTarget",
        "bedrock-agentcore:GetHarness",
        "bedrock-agentcore:GetMemory",
        "bedrock-agentcore:GetOauth2CredentialProvider",
        "bedrock-agentcore:GetPaymentCredentialProvider",
        "bedrock-agentcore:GetWorkloadIdentity",
        "bedrock-agentcore:ListWorkloadIdentities",
        "bedrock-agentcore:ListApiKeyCredentialProviders",
        "bedrock-agentcore:ListOauth2CredentialProviders",
        "cloudformation:Describe*",
        "cloudformation:Get*",
        "cloudformation:List*",
        "cloudfront:Get*",
        "cloudfront:ListDistributions*",
        "cloudtrail:Describe*",
        "cloudtrail:Get*",
        "cloudtrail:List*",
        "cloudtrail:LookupEvents",
        "cloudwatch:Describe*",
        "cloudwatch:GetMetric*",
        "cloudwatch:ListMetrics",
        "codebuild:BatchGet*",
        "codebuild:List*",
        "cognito-idp:ListResourcesForWebACL",
        "cognito-identity:Describe*",
        "cognito-identity:List*",
        "cognito-idp:List*",
        "cognito-sync:GetCognitoEvents",
        "config:Describe*",
        "dax:Describe*",
        "directconnect:Describe*",
        "dms:Describe*",
        "docdb-elastic:Get*",
        "docdb-elastic:List*",
        "dynamodb:Describe*",
        "dynamodb:GetResourcePolicy",
        "dynamodb:List*",
        "ec2:Describe*",
        "ec2:GetTransitGatewayRouteTablePropagations",
        "ec2:SearchTransitGatewayRoutes",
        "ecr:Describe*",
        "ecr:GetRegistryScanningConfiguration",
        "ecr:GetRepositoryPolicy",
        "ecr:List*",
        "ecr:StartImageScan",
        "ecr-public:Describe*",
        "ecr-public:GetRepositoryPolicy",
        "ecr-public:List*",
        "ecs:Describe*",
        "ecs:List*",
        "eks:Describe*",
        "eks:List*",
        "elasticache:Describe*",
        "elasticache:List*",
        "elasticbeanstalk:Describe*",
        "elasticbeanstalk:List*",
        "elasticfilesystem:Describe*",
        "elasticloadbalancing:Describe*",
        "elasticmapreduce:Describe*",
        "elasticmapreduce:List*",
        "es:Describe*",
        "es:List*",
        "events:ListRules",
        "firehose:Describe*",
        "firehose:List*",
        "glue:BatchGet*",
        "glue:Get*",
        "glue:List*",
        "guardduty:GetDetector",
        "guardduty:ListDetectors",
        "iam:Generate*",
        "iam:Get*",
        "iam:List*",
        "identitystore:Describe*",
        "identitystore:List*",
        "inspector2:List*",
        "iot:GetTopicRule",
        "kafka:ListClustersV2",
        "kms:Describe*",
        "kms:GetKey*",
        "kms:List*",
        "kinesis:Describe*",
        "kinesis:List*",
        "lambda:Get*Policy",
        "lambda:GetAccountSettings",
        "lambda:List*",
        "logs:Describe*",
        "mq:DescribeBroker",
        "mq:ListBrokers",
        "organizations:Describe*",
        "organizations:List*",
        "rds:Describe*",
        "rds:List*",
        "redshift:Describe*",
        "redshift:List*",
        "redshift-serverless:List*",
        "route53:Get*",
        "route53:List*",
        "route53domains:Get*",
        "route53domains:List*",
        "route53resolver:Get*",
        "route53resolver:List*",
        "s3:Describe*",
        "s3:GetAccessPoint*",
        "s3:GetAccountPublicAccessBlock",
        "s3:GetBucket*",
        "s3:GetEncryptionConfiguration",
        "s3:GetJobTagging",
        "s3:GetLifecycleConfiguration",
        "s3:ListAccessPoints",
        "s3:ListAllMyBuckets",
        "s3:ListBucketVersions",
        "s3:ListJobs",
        "s3:ListTagsForResource",
        "sagemaker:Describe*",
        "sagemaker:List*",
        "secretsmanager:Describe*",
        "secretsmanager:GetResourcePolicy",
        "secretsmanager:List*",
        "sns:Get*",
        "sns:List*",
        "sqs:Get*",
        "sqs:List*",
        "ssm:Describe*",
        "ssm:List*",
        "sso:Describe*",
        "sso:Get*",
        "sso:List*",
        "sso-directory:List*",
        "sso-directory:Search*",
        "states:List*",
        "sts:DecodeAuthorizationMessage",
        "tag:Get*",
        "timestream:List*",
        "timestream:Get*",
        "timestream:Describe*",
        "wafv2:Get*",
        "wafv2:List*"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": "arn:aws:s3:::elasticbeanstalk-*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "apigateway:GET",
        "apigateway:ListRoutingRules"
      ],
      "Resource": [
        "arn:aws:apigateway:*::/apis",
        "arn:aws:apigateway:*::/apis/*/authorizers",
        "arn:aws:apigateway:*::/apis/*/integrations",
        "arn:aws:apigateway:*::/apis/*/routes",
        "arn:aws:apigateway:*::/domainnames",
        "arn:aws:apigateway:*::/domainnames/*/basepathmappings",
        "arn:aws:apigateway:*:*:/domainnames/*/routingrules/*",
        "arn:aws:apigateway:*::/restapis",
        "arn:aws:apigateway:*::/restapis/*/authorizers",
        "arn:aws:apigateway:*::/restapis/*/resources",
        "arn:aws:apigateway:*::/restapis/*/stages"
      ]
    }
  ]
}

Tenable 修正ポリシー (読み取りと書き込み)

コピー

JSON

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:DeleteSecurityGroup",
        "ec2:ModifyInstanceMetadataOptions",
        "ec2:ModifyVpcEndpoint",
        "ec2:RevokeSecurityGroupEgress",
        "ec2:RevokeSecurityGroupIngress",
        "ecr:DeleteRepositoryPolicy",
        "ecr:SetRepositoryPolicy",
        "iam:AddUserToGroup",
        "iam:AttachGroupPolicy",
        "iam:AttachRolePolicy",
        "iam:AttachUserPolicy",
        "iam:CreatePolicy",
        "iam:CreatePolicyVersion",
        "iam:DeactivateMFADevice",
        "iam:DeleteAccessKey",
        "iam:DeleteGroup",
        "iam:DeleteGroupPolicy",
        "iam:DeleteLoginProfile",
        "iam:DeletePolicy",
        "iam:DeletePolicyVersion",
        "iam:DeleteRole",
        "iam:DeleteRolePermissionsBoundary",
        "iam:DeleteRolePolicy",
        "iam:DeleteServerCertificate",
        "iam:DeleteServiceSpecificCredential",
        "iam:DeleteSigningCertificate",
        "iam:DeleteSSHPublicKey",
        "iam:DeleteUser",
        "iam:DeleteUserPermissionsBoundary",
        "iam:DeleteUserPolicy",
        "iam:DetachGroupPolicy",
        "iam:DetachRolePolicy",
        "iam:DetachUserPolicy",
        "iam:PutGroupPolicy",
        "iam:PutRolePermissionsBoundary",
        "iam:PutRolePolicy",
        "iam:PutUserPermissionsBoundary",
        "iam:PutUserPolicy",
        "iam:RemoveRoleFromInstanceProfile",
        "iam:RemoveUserFromGroup",
        "iam:UpdateAccessKey",
        "iam:UpdateAssumeRolePolicy",
        "s3:DeleteBucketPolicy",
        "s3:PutBucketPolicy",
        "secretsmanager:DeleteResourcePolicy",
        "secretsmanager:PutResourcePolicy",
        "sso:DeleteAccountAssignment",
        "sso:DeleteInlinePolicyFromPermissionSet",
        "sso:DeletePermissionSet",
        "sso:DetachManagedPolicyFromPermissionSet",
        "sso:ProvisionPermissionSet",
        "sso:PutInlinePolicyToPermissionSet"
      ],
      "Resource": "*"
    }
  ]
}

CloudTrail ポリシー

コピー

JSON

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowS3LogAccess",
      "Effect": "Allow",
      "Action": [
        "s3:GetBucketLocation",
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::YOUR_CLOUDTRAIL_BUCKET_NAME",
        "arn:aws:s3:::YOUR_CLOUDTRAIL_BUCKET_NAME/*"
      ]
    },
    {
      "Sid": "AllowKMSDecrypt",
      "Effect": "Allow",
      "Action": "kms:Decrypt",
      "Resource": "arn:aws:kms:REGION:ACCOUNT_ID:key/KMS_KEY_UUID"
    }
  ]
}

データリソーススキャンポリシー (データ保護)

コピー

JSON

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "dynamodb:Scan",
        "kms:CreateGrant",
        "kms:Decrypt",
        "kms:Encrypt",
        "kms:GenerateDataKeyWithoutPlaintext",
        "kms:ReEncryptFrom",
        "kms:ReEncryptTo",
        "rds:CopyDBClusterSnapshot",
        "rds:CopyDBSnapshot",
        "rds:CreateDBClusterSnapshot",
        "rds:CreateDBSnapshot",
        "rds:ModifyDBClusterSnapshotAttribute",
        "rds:ModifyDBSnapshotAttribute",
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "rds:AddTagsToResource",
      "Resource": [
        "arn:aws:rds:*:*:snapshot:*",
        "arn:aws:rds:*:*:cluster-snapshot:*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:RequestTag/TenableContext": "DataAnalysis"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": "rds:DeleteDBSnapshot",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "rds:snapshot-tag/TenableContext": "DataAnalysis"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": "rds:DeleteDBClusterSnapshot",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "rds:cluster-snapshot-tag/TenableContext": "DataAnalysis"
        }
      }
    }
  ]
}

EC2 インスタンススキャン (ワークロード保護)

以下の IAM ポリシーでは、ec2:CopySnapshot が 3 回表示されます。これらの各エントリは、それぞれ異なる目的で必要です。

  1. リクエストタグ付きでコピー (条件: aws:RequestTag/ErmeticContext)
    • 特定のリクエストタグが指定されている場合にのみ、スナップショットのコピーを許可します。
    • デスティネーションスナップショットが自動的にタグ付けされるようにします。
    • ユースケース: 新しいスナップショットのタグ付けが必要なインスタンスと AMI。
  2. 任意のスナップショットをソースとしてコピー (Resource: arn:aws:ec2:*::snapshot/snap-*)
    • 既存のスナップショットをコピーのソースとして使用することを許可します。
    • ユースケース: 既存のスナップショットをコピーする必要があるプライベート AMI。
  3. リソースタグ付きでコピー (条件: aws:ResourceTag/ErmeticContext)
    • すでに特定のリソースタグが付いているスナップショットのコピーを許可します。
    • ユースケース: 特定のタグが付いたスナップショットのみのコピーが許可されるインスタンス。

IAM ステートメントにおけるソーススナップショットとデスティネーションスナップショットの AWS の処理の詳細については、Amazon EBS スナップショットのコピーに関するリソースレベルのアクセス許可の強化{target=_blank}を参照してください。

コピー

JSON

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "ec2:CreateSnapshot",
      "Resource": "arn:aws:ec2:*:*:volume/*"
    },
    {
      "Effect": "Allow",
      "Action": "kms:CreateAlias",
      "Resource": "arn:aws:kms:*:*:alias/*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ec2:CopySnapshot",
        "ec2:CreateSnapshot",
        "ec2:CreateTags",
        "kms:CreateKey",
        "kms:TagResource"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:RequestTag/ErmeticContext": "WorkloadAnalysis"
        }
      }
    },
    {
      "Effect": "Deny",
      "Action": "kms:TagResource",
      "Resource": "*",
      "Condition": {
        "Null": {
          "aws:ResourceTag/ErmeticContext": "true"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": "ec2:CopySnapshot",
      "Resource": "arn:aws:ec2:*::snapshot/snap-*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ec2:CopySnapshot",
        "ec2:DeleteSnapshot",
        "ec2:ModifySnapshotAttribute",
        "kms:CreateAlias",
        "kms:CreateGrant",
        "kms:Decrypt",
        "kms:EnableKeyRotation",
        "kms:GenerateDataKeyWithoutPlaintext",
        "kms:ReEncryptFrom",
        "kms:ReEncryptTo",
        "kms:RevokeGrant",
        "kms:ScheduleKeyDeletion"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/ErmeticContext": "WorkloadAnalysis"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "kms:CreateGrant",
        "kms:Decrypt",
        "kms:ReEncryptFrom"
      ],
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "kms:ViaService": "ec2.*.amazonaws.com"
        }
      }
    }
  ]
}

ECR スキャンワークロード保護ポリシー

コピー

JSON

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ecr:GetAuthorizationToken",
        "ecr:GetDownloadUrlForLayer",
        "ecr:BatchGetImage"
      ],
      "Resource": "*"
    }
  ]
}

Terraform ポリシー

コピー

JSON

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetBucketLocation",
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::<bucket_name>",
        "arn:aws:s3:::<bucket_name>/*",
      ]
    }
  ]
}

<bucket_name> は関連する S3 バケットの名前です。

Amazon Bedrock 呼び出しログ

注意: 以下のポリシーには、モニタリング対象となるすべてのリージョンにおいて、Amazon Bedrock がログの送信先として使用するすべての Amazon S3 バケットとすべての AWS KMS キーを含める必要があります。
コピー

JSON

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetBucketLocation",
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::bucketName",
        "arn:aws:s3:::bucketName/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": "kms:Decrypt",
      "Resource": "bucketKeyArn"
    }
  ]
}

<bucketName> は関連する S3 バケットの名前です。

AWS アカウントアクセスの JIT ポリシー

これらのポリシーを使用すると、AWS Identity Center を介した AWS アカウントとアクセス許可セットへの JIT アクセスを Tenable One Cloud Exposure で管理できるようになります。

AWS Identity Center がアカウントアクセス用の管理アカウントから直接管理されているか、アカウントアクセス用の委任された管理者アカウントを介して管理されているかに応じて、環境ごとに 1 つのポリシーのみを使用します。

アカウントアクセス用の管理アカウント

コピー

JSON

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:ListRoles",
                "iam:ListPolicies"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:AttachRolePolicy",
                "iam:CreateRole",
                "iam:DeleteRole",
                "iam:GetRole",
                "iam:ListAttachedRolePolicies",
                "iam:ListRolePolicies",
                "iam:PutRolePolicy"
            ],
            "Resource": "arn:aws:iam::*:role/aws-reserved/sso.amazonaws.com/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:GetSAMLProvider",
                "iam:UpdateSAMLProvider"
            ],
            "Resource": "arn:aws:iam::*:saml-provider/AWSSSO__DO_NOT_DELETE"
        },
        {
            "Effect": "Allow",
            "Action": [
                "identitystore:Describe*",
                "identitystore:List*",
                "sso:AttachManagedPolicyToPermissionSet",
                "sso:CreateAccountAssignment",
                "sso:CreatePermissionSet",
                "sso:DeleteAccountAssignment",
                "sso:DeletePermissionSet",
                "sso:Describe*",
                "sso:DetachManagedPolicyFromPermissionSet",
                "sso:Get*",
                "sso:List*",
                "sso:ProvisionPermissionSet",
                "sso:PutInlinePolicyToPermissionSet",
                "sso-directory:List*",
                "sso-directory:Search*"
            ],
            "Resource": "*"
        }
    ]
}

アカウントアクセス用の委任された管理者アカウント

コピー

JSON

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sso:AttachManagedPolicyToPermissionSet",
                "sso:CreateAccountAssignment",
                "sso:CreatePermissionSet",
                "sso:DeleteAccountAssignment",
                "sso:DeletePermissionSet",
                "sso:DetachManagedPolicyFromPermissionSet",
                "sso:ProvisionPermissionSet",
                "sso:PutInlinePolicyToPermissionSet"
            ],
            "Resource": "*"
        }
    ]
}

アプリケーションアクセスの JIT ポリシー

これらのポリシーを使用すると、AWS Identity Center によって管理されるアプリケーションへの JIT アクセスを Tenable One Cloud Exposure で管理できるようになります。

AWS Identity Center がアプリケーションアクセス用の管理アカウントから直接管理されているか、アプリケーションアクセス用の委任された管理者アカウントを介して管理されているかに応じて、環境ごとに 1 つのポリシーのみを使用します。

アプリケーションアクセス用の管理アカウント

コピー

JSON

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "identitystore:Describe*",
        "identitystore:List*",
        "sso:CreateApplicationAssignment",
        "sso:DeleteApplicationAssignment",
        "sso:Describe*",
        "sso:Get*",
        "sso:List*",
        "sso-directory:List*",
        "sso-directory:Search*"
      ],
      "Resource": "*"
    }
  ]
}

アプリケーションアクセス用の委任された管理者アカウント

コピー

JSON

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sso:CreateApplicationAssignment",
        "sso:DeleteApplicationAssignment",
      ],
      "Resource": "*"
    }
  ]
}