AWS の必要なアクセス許可
アカウントを完全に可視化するために、Tenable One Cloud Exposure は AWS 管理ポリシーとインラインポリシーの両方を使用して、関連するメタデータを収集する必要があります。これらのポリシーは、アカウントまたは組織を接続した際に IAM で Tenable 用に作成した専用ロールにアタッチされています。
- モニタリングアクセス許可
- (オプション) カスタム Tenable 修正アクセス許可 (読み取りと書き込み)。インラインポリシーは Tenable に管理のアクセス許可を付与し、Tenable が環境を変更できるようにします。たとえば、この許可により Tenable は検出結果を AWS で直接自動で修正できるようになります (管理のアクセス許可を付与しない場合でも、ワンタイム認証情報をオンデマンドで提供することで、検出結果を手動で修正できます)。
- CloudTrail (S3) アクセス許可。詳細については、CloudTrail を参照してください。
お使いの AWS 組織でサービスコントロールポリシー (SCP) またはリソースコントロールポリシー (RCP) を使用している場合は、必ず既存の SCP または RCP に除外を追加して、クラウドサイバーエクスポージャー 用に作成した専用の IAM ロールが含まれないようにしてください。詳細については、AWS の FAQ{target=_blank} を参照してください。
付録 I: AWS IAM ポリシー
- Tenable モニタリングポリシー (読み取り専用)
- Tenable 修正ポリシー (読み取りと書き込み)
- CloudTrail ポリシー
- データリソーススキャンポリシー (データ保護)
- EC2 インスタンススキャン (ワークロード保護)
- ECR スキャンワークロード保護ポリシー
- Terraform ポリシー
- Amazon Bedrock 呼び出しログ
- AWS アカウントアクセスの JIT ポリシー
- アプリケーションアクセスの JIT ポリシー
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 回表示されます。これらの各エントリは、それぞれ異なる目的で必要です。
- リクエストタグ付きでコピー (条件: aws:RequestTag/ErmeticContext)
- 特定のリクエストタグが指定されている場合にのみ、スナップショットのコピーを許可します。
- デスティネーションスナップショットが自動的にタグ付けされるようにします。
- ユースケース: 新しいスナップショットのタグ付けが必要なインスタンスと AMI。
- 任意のスナップショットをソースとしてコピー (Resource: arn:aws:ec2:*::snapshot/snap-*)
- 既存のスナップショットをコピーのソースとして使用することを許可します。
- ユースケース: 既存のスナップショットをコピーする必要があるプライベート AMI。
- リソースタグ付きでコピー (条件: 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 呼び出しログ
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": "*"
}
]
}