基於資源的存取權限
用途:有時,您希望組織中的所有委託人都能存取某個資源(例如 S3 儲存桶中的物件)。例如,每個 AWS 帳戶中執行的平台級程式碼都需要一個唯讀設定檔來配置該帳戶,或者組織中每個 AWS 帳戶都需要向其發布訊息的中央帳戶中存在一個 SNS 主題。
運行此命令來建立模板policy1.json
:
cat << EOF > policy1.json開啟並編輯 S3 儲存桶策略,以允許任何主體
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "<Allow OR Deny>",
"Principal": "<PRINCIPAL>",
"Action": "<ACTION(S)>",
"Resource": "<RESOURCE(S)>",
"Condition": "<CONDITION(S)>"
}
]
}
EOF
s3:GetObject
對儲存桶中的任何物件執行操作MY-BUCKET
,只要該主體屬於您的組織。在基於資源的策略元素中使用通配符,Principal
允許與 S3 儲存桶位於相同帳戶中的委託人存取 S3 儲存桶中的所有物件。即使同一帳戶中的委託人沒有允許存取該s3:GetObject
操作的基於身分的策略,也是如此。
服務控制策略保護平台資源
用途:中央平台團隊通常會在配置新帳戶時部署一組標準的 AWS 資源。這些資源通常與安全性相關,或控制平台的其他操作方面,除非由具有特權的 IAM 主體修改或刪除,否則不應對其進行修改或刪除。
運行此命令來建立模板policy2.json
:
cat << EOF > policy2.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
},
{
"Effect": "Deny",
"Action": "<ACTION(S)>",
"Resource": "<RESOURCE(S)>",
"Condition": "<CONDITION(S)>"
}
]
}
EOF
開啟並編輯文件中的服務控制策略,以拒絕對帶有鍵為team
且值為 的標籤的資源執行所有操作。只有同樣帶有鍵為且值為 的admin
標籤的主體才能對帶有標籤的資源執行任何操作。teamadmin
- 標記要保護的資源:
- 鑰匙:team
- 價值:admin
- 標記豁免的主體:
- 鑰匙:team
- 價值:admin
- 資源:所有資源
- 動作:所有動作
限制可使用基於身分的策略啟動的 EC2 執行個體類型
用途: 您可能希望允許或拒絕啟動某些類型的 EC2 執行個體。例如,您可能希望拒絕委託人未經批准啟動大型、昂貴的實例,或在非生產環境中強制使用小型、較便宜的實例。
運行此命令來建立模板policy3.json
:
cat << EOF > policy3.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "<Allow OR Deny>",
"Action": "<ACTION(S)>",
"Resource": "<RESOURCE(S)>",
"Condition": "<CONDITION(S)>"
}
]
}
EOF
開啟並編輯檔案中基於身分的策略,以允許使用該操作啟動 EC2 執行個體ec2:RunInstances
(只要該執行個體的類型為 )t3.small
。該策略不應允許啟動任何其他實例類型。
請記住在進行更改後和運行評估命令之前保存您的策略。
- 允許的實例類型:
t3.small
- 行動:
ec2:RunInstances
防止不受信任的主體將 AWS 服務用作混淆的代理人
用途:困惑的代理問題 這是一種安全性問題,即無權執行操作的實體可以強制具有更高權限的實體執行該操作。在此特定場景中,具有較高權限的實體是 AWS 服務。混淆代理控制功能可協助您防止其他不屬於您的 AWS 帳戶中的人員使用 AWS 服務讀取或寫入您的 AWS 資源。
運行此命令來建立模板policy4.json
:
cat << EOF > policy4.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "<PRINCIPAL>",
"Action": "<ACTION(S)>",
"Resource": "<RESOURCE(S)>",
"Condition": "<CONDITION(S)>"
}
]
}
EOF
開啟並編輯文件中的 SNS 主題策略,以允許 SNS 主題接收來自 S3 儲存桶的通知。您應該允許 AWS 服務主體s3.amazonaws.com
向您的 SNS 主題發布訊息。您應該阻止其他 AWS 帳戶將該s3.amazonaws.com
服務用作混淆代理並向您的主題發布訊息。
- 服務:
s3.amazonaws.com
- 行動:
sns:Publish
- 地區:
us-east-1
- 主題名稱:
MyTopic
- SNS 主題所在的帳戶:
111111111111
- 您想要接收通知的帳號:
111111111111
- 您想要從中接收通知的 S3 儲存桶:
MY-BUCKET
確保 Lambda 函數必須附加到具有服務控制策略的 VPC
用途: 一般來說,當您在 VPC 中部署 Lambda 函數時,函數出口流量來自您自己的網路位址空間,並且您可以使用VPC 流日誌實現網路可見性 。 VPC 附加的 Lambda 函數將能夠使用無法從公共網際網路存取的資源,例如關聯式資料庫或 Redis 執行個體。
運行此命令來建立模板policy5.json
:
cat << EOF > policy5.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
},
{
"Effect": "Deny",
"Action": "<ACTION(S)>",
"Resource": "<RESOURCE(S)>",
"Condition": "<CONDITION(S)>"
}
]
}
EOF
開啟並編輯檔案中的服務控制策略,以便僅當 Lambda 函數部署在 VPC 中時才允許CreateFunction
或要求。UpdateFunctionConfiguration
- 行動:
lambda:CreateFunction, lambda:UpdateFunctionConfiguration
- 資源:所有資源
允許主體存取名稱與其標籤相符的儲存桶
用途: 經常需要根據附加到特定主體的標籤來授予對 S3 儲存桶的存取權限。這些標籤可能是來自身分提供者的屬性,也可能直接附加到您的 IAM 角色。
運行此命令來建立模板policy6.json
:
cat << EOF > policy6.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "<Allow OR Deny>",
"Action": "<ACTION(S)>",
"Resource": "<RESOURCE(S)>",
"Condition": "<CONDITION(S)>"
}
]
}
EOF
開啟並編輯文件中的基於身分的策略,以允許主體在具有與附加到儲存桶的部門標籤相同的部門標籤時存取 S3 儲存桶。
請記住在進行更改後和運行評估命令之前保存您的策略。
- 標記需要存取部門所擁有的儲存桶的主體:
- 鑰匙:department
- 價值:sales
- 行動:
s3:GetObject
- 資源:
the bucket name should start with mycorp- followed by department name