資源型政策 - AWS Secrets Manager

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

資源型政策

在資源型政策中,您可以指定能夠存取秘密的人員,以及他們可以對秘密執行的動作。您可以使用資源型政策:

  • 將單一秘密的存取權授予多個使用者和角色。

  • 授予其他 AWS 帳戶中使用者或角色的存取權。

當您將資源型政策連接至主控台中的秘密時,Secrets Manager 會使用自動推理引擎 Zelkova 和 APIValidateResourcePolicy,以防止您授予廣泛的IAM主體存取秘密。或者,您可以使用 CLI或 PutResourcePolicyAPI中的 BlockPublicPolicy 參數呼叫 SDK。

重要

資源政策驗證和 BlockPublicPolicy 參數有助於保護資源,防止透過直接連接到秘密的資源政策授予公開存取權。除了使用這些功能之外,請仔細檢查下列政策,以確認其未授予公有存取權:

  • 連接至相關聯 AWS 主體的身分型政策 (例如IAM角色)

  • 連接至相關 AWS 資源的資源型政策 (例如 AWS Key Management Service (AWS KMS) 金鑰)

若要檢閱秘密的許可,請參閱 判斷誰有存取 秘密的許可

若要檢視、變更或刪除秘密的資源政策 (主控台)
  1. 在 開啟 Secrets Manager 主控台https://console.aws.amazon.com/secretsmanager/

  2. 從秘密清單中選擇秘密。

  3. 在秘密詳細資訊頁面的概觀分頁上,在資源許可區段中,選擇編輯許可

  4. 在程式碼欄位中,執行以下其中一項作業,然後選擇 Save (儲存):

    • 若要連接或修改資源政策,請輸入該政策。

    • 若要刪除政策,請清除程式碼欄位。

AWS CLI

範例 擷取資源政策

下列 get-resource-policy 範例會擷取連接至機密的以資源為基礎的政策。

aws secretsmanager get-resource-policy \ --secret-id MyTestSecret
範例 刪除資源政策

下列 delete-resource-policy 範例會刪除連接至機密的以資源為基礎的政策。

aws secretsmanager delete-resource-policy \ --secret-id MyTestSecret
範例 新增資源政策

下列 put-resource-policy 範例會將許可政策新增至機密,首先檢查政策是否不提供機密的廣泛存取權限。系統會從檔案讀取政策。如需詳細資訊,請參閱 AWS CLI 使用者指南中的從檔案載入 AWS CLI 參數

aws secretsmanager put-resource-policy \ --secret-id MyTestSecret \ --resource-policy file://mypolicy.json \ --block-public-policy

mypolicy.json 的內容:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/MyRole" }, "Action": "secretsmanager:GetSecretValue", "Resource": "*" } ] }

AWS SDK

若要擷取與秘密相連的政策,請使用 GetResourcePolicy

若要刪除與秘密相連的政策,請使用 DeleteResourcePolicy

若要將政策連接至秘密,請使用 PutResourcePolicy。如果原本就已連接政策,命令會以新政策取而代之。政策必須格式化為JSON結構化文字。請參閱JSON政策文件結構

如需詳細資訊,請參閱AWS SDKs

範例

範例:擷取每個秘密值的許可

若要授予擷取秘密值的許可,您可以將政策連接至秘密或身分。如需判斷要使用哪種政策的說明,請參閱身分型政策和資源型政策。如需連接政策的相關資訊,請參閱 資源型政策身分型政策

如果想要將對單一秘密的存取權授予多個使用者或角色,此範例非常有用。若要授予在批次API呼叫中擷取機密群組的許可,請參閱 範例:擷取批次中一組秘密值的許可

範例 讀取一個秘密

您可以透過將下列政策連接至秘密,授予對秘密的存取權。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountId:role/EC2RoleToAccessSecrets" }, "Action": "secretsmanager:GetSecretValue", "Resource": "*" } ] }

範例:許可和 VPCs

如果您需要從 內存取 Secrets ManagerVPC,您可以VPC藉由在許可政策中包含 條件,來確保向 Secrets Manager 提出的請求來自 。如需詳細資訊,請參閱 使用VPC端點條件限制請求使用 AWS Secrets Manager VPC端點

請確定從 AWS 其他服務存取秘密的請求也來自 VPC,否則此政策會拒絕他們存取。

範例 需要請求才能透過VPC端點

下列政策允許使用者僅在請求透過VPC端點時執行 Secrets Manager 操作 vpce-1234a5678b9012c.

{ "Id": "example-policy-1", "Version": "2012-10-17", "Statement": [ { "Sid": "RestrictGetSecretValueoperation", "Effect": "Deny", "Principal": "*", "Action": "secretsmanager:GetSecretValue", "Resource": "*", "Condition": { "StringNotEquals": { "aws:sourceVpce": "vpce-1234a5678b9012c" } } } ] }
範例 要求來自 的請求 VPC

下列政策允許命令僅在秘密來自 時建立和管理秘密 vpc-12345678。 此外,此政策僅允許在請求來自 時,使用存取秘密加密值的操作vpc-2b2b2b2b。如果您在一個 中執行應用程式VPC,但使用第二個隔離VPC的 管理函數,則可以使用像這樣的政策。

{ "Id": "example-policy-2", "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAdministrativeActionsfromONLYvpc-12345678", "Effect": "Deny", "Principal": "*", "Action": [ "secretsmanager:Create*", "secretsmanager:Put*", "secretsmanager:Update*", "secretsmanager:Delete*", "secretsmanager:Restore*", "secretsmanager:RotateSecret", "secretsmanager:CancelRotate*", "secretsmanager:TagResource", "secretsmanager:UntagResource" ], "Resource": "*", "Condition": { "StringNotEquals": { "aws:sourceVpc": "vpc-12345678" } } }, { "Sid": "AllowSecretValueAccessfromONLYvpc-2b2b2b2b", "Effect": "Deny", "Principal": "*", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": "*", "Condition": { "StringNotEquals": { "aws:sourceVpc": "vpc-2b2b2b2b" } } } ] }

範例:服務委託人

如果連接至秘密的資源政策包含AWS 服務主體 ,建議您使用 aws:SourceArnaws:SourceAccount全域條件金鑰。只有在請求來自其他服務的 Secrets Manager 時,授權內容才會包含 ARN和 帳戶值 AWS 。此條件組合會避免潛在的混淆代理人案例

如果資源ARN包含資源政策中不允許的字元,則無法在aws:SourceArn條件索引鍵的值ARN中使用該資源。請改用 aws:SourceAccount 條件金鑰。如需詳細資訊,請參閱 IAM 需求

服務主體通常不會在附加至秘密的政策中用作主體,但有些 AWS 服務需要它。如需服務要求您連接至秘密之資源政策的相關資訊,請參閱服務的說明文件。

範例 允許服務使用服務主體存取秘密
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "service-name.amazonaws.com" ] }, "Action": "secretsmanager:GetSecretValue", "Resource": "*", "Condition": { "ArnLike": { "aws:sourceArn": "arn:aws:service-name::123456789012:*" }, "StringEquals": { "aws:sourceAccount": "123456789012" } } } ] }