AWS:拒绝访问您账户之外的 Amazon S3 资源,AWS Data Exchange 除外。 - AWS Identity and Access Management

AWS:拒绝访问您账户之外的 Amazon S3 资源,AWS Data Exchange 除外。

以下示例说明如何创建基于身份的策略以拒绝访问 AWS 中不属于您的账户的所有资源,AWS Data Exchange 正常操作所需的资源除外。要使用此策略,请将示例策略中的斜体占位符文本替换为您自己的信息。然后,按照创建策略编辑策略中的说明操作。

您可以使用条件键 AWS Data Exchange 和 aws:ResourceOrgPaths 来创建类似的策略,限制对企业或企业部门内部资源的访问,同时包括 aws:ResourceOrgID 所拥有的资源。

如果您在您的环境中使用 AWS Data Exchange,该服务会创建资源并与之交互,例如服务账户拥有的 Amazon S3 存储桶。例如,AWS Data Exchange 代表 IAM 主体(用户或角色)向 AWS Data Exchange 服务拥有的 Amazon S3 存储桶发送调用 AWS Data Exchange API 的请求。在这种情况下,在策略中使用 aws:ResourceAccountaws:ResourceOrgPathsaws:ResourceOrgID(不包括 AWS Data Exchange 所拥有的资源)会拒绝对服务账户拥有的存储桶的访问。

  • 语句 DenyAllAwsResourcesOutsideAccountExceptS3 使用带有 Deny 效果的 NotAction 元素,它显式拒绝访问未在声明中列出和不属于已列出账户的所有操作。NotAction 元素表示此语句的例外情况。这些操作是此语句的例外情况,因为如果这些操作是在 AWS Data Exchange 创建的资源上执行的,则策略会拒绝这些操作。

  • 语句 DenyAllS3ResoucesOutsideAccountExceptDataExchange 使用 ResourceAccountCalledVia 条件的组合,拒绝访问前一语句中排除的三个 Amazon SNS 操作。如果资源不属于已列出的账户,并且,如果调用服务的不是 AWS Data Exchange,则该语句会拒绝这些操作。如果资源属于列出的账户,或由列出的服务主体 dataexchange.amazonaws.com 执行操作,则该语句不会拒绝这些操作。

重要

该策略不允许进行任何操作。该策略使用 Deny 效果,这会显式拒绝访问语句中列出而不属于已列出账户的所有资源。将此策略与允许访问特定资源的其他策略结合使用。

以下示例说明如何配置策略以允许访问所需的 Amazon S3 存储桶。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyAllAwsReourcesOutsideAccountExceptAmazonS3", "Effect": "Deny", "NotAction": [ "s3:GetObject", "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "*", "Condition": { "StringNotEquals": { "aws:ResourceAccount": [ "111122223333" ] } } }, { "Sid": "DenyAllS3ResourcesOutsideAccountExceptDataExchange", "Effect": "Deny", "Action": [ "s3:GetObject", "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "*", "Condition": { "StringNotEquals": { "aws:ResourceAccount": [ "111122223333" ] }, "ForAllValues:StringNotEquals": { "aws:CalledVia": [ "dataexchange.amazonaws.com" ] } } } ] }