本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
資源型政策
在資源型政策中,您可以指定能夠存取秘密的人員,以及他們可以對秘密執行的動作。您可以使用資源型政策:
-
將單一秘密的存取權授予多個使用者和角色。
-
授予其他 AWS 帳戶中使用者或角色的存取權。
當您將資源型政策連接至主控台中的秘密時,Secrets Manager 會使用自動推理引擎 ZelkovaValidateResourcePolicy
,以防止您授予廣泛的IAM主體存取秘密。或者,您可以使用 CLI或 PutResourcePolicy
API中的 BlockPublicPolicy
參數呼叫 SDK。
重要
資源政策驗證和 BlockPublicPolicy
參數有助於保護資源,防止透過直接連接到秘密的資源政策授予公開存取權。除了使用這些功能之外,請仔細檢查下列政策,以確認其未授予公有存取權:
連接至相關聯 AWS 主體的身分型政策 (例如IAM角色)
連接至相關 AWS 資源的資源型政策 (例如 AWS Key Management Service (AWS KMS) 金鑰)
若要檢閱秘密的許可,請參閱 判斷誰有存取 秘密的許可。
若要檢視、變更或刪除秘密的資源政策 (主控台)
在 開啟 Secrets Manager 主控台https://console.aws.amazon.com/secretsmanager/
。 從秘密清單中選擇秘密。
-
在秘密詳細資訊頁面的概觀分頁上,在資源許可區段中,選擇編輯許可。
-
在程式碼欄位中,執行以下其中一項作業,然後選擇 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:SourceArn 和 aws: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
" } } } ] }